Build-to-1.0 Campaign — 2026-09-20 (Magna Carta)¶
Status: ACTIVE — the one canonical plan (operator-directed 2026-09-20).
Supersedes build-to-1.0-campaign-2026-08-16.md;
priors are retained for audit and no longer steer.
This line is a restatement, not the authority. Which plan governs is declared in
data/active_campaign.jsonand read from there byscripts/session_orientation.pyandgzkit.knowledge.generate— execution reads state from JSON, never from prose (.gzkit/rules/governance-core.md0.10.0, operator ruling 2026-08-16). Supersession is performed by moving this file between that registry'sactiveandsupersededlists; editing the banner alone changes nothing, and the two are held in agreement bytests/governance/test_active_campaign_registry.py, which also fails closed on a campaign edition the registry does not declare.
This edition is a FULL carry-forward, not a rewrite. Every box, movement,
amendment, and register entry from the 2026-08-16 edition is retained inline and
in place — no box removed, nothing resequenced, no ruling dropped. Sequencing is
unchanged at creation: ADR-0.35.0-canon-entry-corpus-landing remains TOPMOST,
Movement C's family-closure box remains NEXT-IN-PRIORITY, Movement B remains
behind them, Movement A remains HELD. Because the carry-forward is total, no
§ Rulings Register disposition pass is owed — the 08-16 and 07-18 amendments
travel with the text (§ 8, the 2026-07-18 rule).
The edition exists because the plan's measurements went stale while its rulings stayed live, and a re-evaluation against the live tree earns its own dated identity (the 2026-08-16 precedent, operator-directed: "update that campaign document with today's date - re-evaluate it thoroughly"). Five operator-ratified amendments landed between 2026-08-16 and this edition; none of them re-measured the figures that justify the sequencing.
The measurements are now a pointer, not a table. Run
reckoning-2026-09-20-evidence/reckon.py
— read-only, carrying no literals from its authoring date, so it reports whatever
tree it is run against. This applies the operator's 2026-09-20 ruling ("Pointer,
not value") to the reckoning itself, which is the surface that produced the
19 of 32 defect in the first place. The figures quoted below are a dated
observation of the 2026-09-20 tree, retained so a reader can see movement, and
are ILLUSTRATIVE per AGENTS.md § Governance doctrine surfaces.
What the 2026-09-20 re-evaluation measured (dated observation of the 2026-09-20 tree; the authority is the script, not this table):
| Claim | 07-18 | 08-16 | Re-measured 2026-09-20 |
|---|---|---|---|
airlock_in / airlock_out |
23 / 5 | 23 / 5 | 71 / 29 — 42 unaccounted exits |
fix commits, 90 days |
470 | 528 | 705 (40.1% of all commits) |
feat commits, 90 days |
43 (2.9%) | — | 45 (2.6%) |
| Total commits, 90 days | 1,508 | — | 1,760 |
gz git-sync share |
703 (47%) | — | 534 (30.3%) |
| Oversized modules (>600 lines) | 33 | 51 | 66 |
| src / test LOC | 107k / 146k | — | 156k / 227k |
| Ledger events | 13,488 | — | 16,995 |
THE SHARPEST FINDING OF THE 08-16 EDITION IS NOW FALSE, and that is why this
edition exists. That edition's strongest argument was "the number that did not
move" — airlock_in 23 / airlock_out 5, identical across two days, zero
transits, the ungoverned door widening while the governed one stayed shut. The
counters have since moved to 71 / 29: roughly 48 transits and 24 accounted
exits. The membrane is being crossed.
What that does and does not overturn. It retires the zero-transits premise,
so Movement B's rationale may no longer be argued from it. It does not retire
the Movement: the accounting gap grew from 18 unaccounted exits to 42, and
fix commits still run at 40% of all traffic against 2.6% feat. The
calibrate-before-widening sequence inside B stands on ADR-0.33.0 § Negative #1,
never on the counters. Re-argue B from the accounting gap and the ratio, not from
a number that has moved.
The feat ratio has not improved, and that is the 1.0 question. 2.9% at
07-18, 2.6% today, across 252 more commits. The 07-18 diagnosis — gzkit has
no external forcing function, and its only consumer is its own construction —
survives this re-measurement intact. gz git-sync's share did fall, 47% → 30.3%,
which is the one structural improvement on the board.
Held on re-measurement: ADR-0.35.0 Pending/pre_closeout at 7/13 with
closeout BLOCKED on six briefs missing ledger proof of completion; no active OBPI
locks; open GHI queue 57. Run uv run gz adr status ADR-0.35.0-canon-entry-corpus-landing
and uv run gz obpi lock list rather than trusting these.
Method matters and is now stated. The brief count reads 545 under the glob
**/obpis/OBPI-*.md where 08-16 recorded 659; neither prior edition recorded the
glob it used, so that is a method difference rather than 114 deleted briefs. See
reckoning-2026-09-20-evidence/README.md
for every counting rule, and for why the scorecard tallies are deliberately not
computed there.
RESEQUENCED 2026-09-27 (operator-ratified): ADR WORK FIRST. Feature ADRs are worked in ascending order (
0.35.0→0.36.0→0.37.0→0.38.0→0.39.0→ the funded amendment ADR) before Movement C refactoring resumes. The 2026-09-02 NEXT-IN-PRIORITY placement of Movement C's family-closure box, recorded below, is SUPERSEDED. See § Amendments 2026-09-27 (3).Topmost (sequenced):
ADR-0.35.0-canon-entry-corpus-landingis TOPMOST (2026-09-01, operator-ratified, UNCHANGED). AMENDED 2026-09-02 (operator-ratified) — Movement C'sClose the doctrine-declared-without-mechanism familybox is pulled forward to NEXT-IN-PRIORITY, immediately behind TOPMOST and ahead of both Movement B and every other Movement C box; Movement B steps down one place; Movement A remains HELD as a Movement. The box outranks its own Movement, on the precedent the 2026-09-01 amendment set when Movement A'sADR-0.35.0box became TOPMOST inside a HELD Movement. It is placed high because it is drawable without the operator: under the IRON LAW only the operator initiates OBPI work, while this box discharges through rule-text amendment, scorecard scoring and GHI-shaped direct repair. The family's share of the open queue and its production rate are measured inf1-family-share-measurement-2026-09-20.md— re-run its evidence script rather than trusting a figure transcribed here. Instances close same-session while the class keeps producing: that premise was re-measured 2026-09-20 under a shared criterion and VERIFIED, not revised. See § Amendments 2026-09-20. Runuv run gz adr status ADR-0.35.0-canon-entry-corpus-landingfor its lifecycle and landed count rather than trusting a figure transcribed here. See § Amendments 2026-09-02. From 2026-08-14 to this amendment the plan declared TOPMOST a Movement that ADR order forbade working, while the work drawn every session sat as a box inside a HELD Movement — two amendments (2026-08-16, 2026-08-23) were spent explaining that split rather than removing it. This removes it. Runuv run gz adr status ADR-0.35.0-canon-entry-corpus-landingfor its lifecycle and landed count rather than trusting a figure transcribed here. See § Amendments 2026-09-01.DRAWN-WORK ORDER — AMENDED 2026-09-15 (operator-ratified). Work a session draws without the operator, at the NEXT-IN-PRIORITY position, is taken in this order: (a) the R&D front — the
gz-rndskill and the design indocs/governance/rnd-discipline.md; (b) the chore estate — the conversion directive and the overdue board, the family-closure box's agent-side arm; (c) GHI direct repair, only when the GHI closes a named arm of that box, blocks (a) or (b), or is an emergency. TOPMOST and ADR order are unchanged. See § Amendments 2026-09-15.THREE-PILLARS FOLLOW-UP — HELD 2026-09-19 (operator-ratified): the selected repairs are delivered; GHI #1028 remains open but its production observation is held until the operator explicitly resumes it. See § Amendments 2026-09-19.
NEXT-IN-PRIORITY — Movement B — put the membrane on the real doors. The airlock is BUILT and installed on ONE door — run
uv run gz adr status ADR-0.33.0-airlock-membranefor its lifecycle and landed count rather than trusting a figure transcribed here. Measured live 2026-08-14: 524fixcommits in 90 days across zero transits; 23airlock_invs 5airlock_out(18 unaccounted exits — worse than the 23/10 this file recorded); and 20 of 23 transits computed an EMPTY seam-map and auto-proceeded, only 3 biting (3/4/7 seams →hold). RE-MEASURED 2026-08-16:airlock_in23,airlock_out5 — both UNCHANGED, so zero transits occurred in the two days since Movement B became TOPMOST, whilefixcommits over 90 days moved 524 → 528. The ungoverned door widened by four while the governed one stayed shut. That is the item-150 gap (GHI : MX :: OBPI : Build) reproducing in miniature, and it is the strongest available argument that item 0's calibration is the right first move rather than the widening beneath it. Sequence within B is calibrate before widening — a new item 0, ahead of the five checkboxes below, because widening an uncalibrated gate installs three more inert gates (ADR-0.33.0§ Negative #1, the load-bearing pre-mortem: "seam-maps rubber-stamped, GO always reached"). The feature ADR that carries this Movement is AUTHORED —ADR-0.37.0-airlock-calibration-and-compulsion(2026-08-14), which re-homesADR-0.33.0's disclosed residuals rather than reopening it; runuv run gz adr status ADR-0.37.0-airlock-calibration-and-compulsionfor its lifecycle and landed count. (This sentence read "none is authored yet" until 2026-08-16 — see the § Amendments record of that date.) GATED BY ADR ORDER, which is absolute (operator ruling 2026-08-16, verbatim: "i will NOT go out of adr order, whatsoever."):ADR-0.37.0is the THIRD of three open feature ADRs, so Movement B is TOPMOST in priority and NOT pullable untilADR-0.35.0andADR-0.36.0land.ADR-0.35.0-canon-entry-corpus-landingis the next work. TOPMOST is not a licence to jump the ADR queue. See § Amendments 2026-08-14, § Amendments 2026-08-16 (latest), and § Movement B.HELD — Movement A — close the Foundation Sunset. ~~
ADR-0.0.37audit~~ done 2026-07-18 (b40a8026) → ~~ADR-0.34.0capstone~~Validated2026-07-31, released v0.34.0 → NEXT: re-home the composition engine as a feature (ADR-0.35.0-canon-entry-corpus-landing,Draft, IN FLIGHT; runuv run gz adr status ADR-0.35.0-canon-entry-corpus-landingfor the landed count — ten authored briefs,gz obpi validate --authored10/10; the lifecycle step is RULED 2026-08-12 —DraftHOLDS through implementation and OBPI work is UNBLOCKED; not GHI #623, closed 2026-07-19; see § Movement A item 3) → THEN: install the cross-family critic at the convergence moment (ADR-0.36.0-convergence-moment-cross-family-critic,Proposed, NEXT-DRAWN afterADR-0.35.0lands; runuv run gz adr status ADR-0.36.0-convergence-moment-cross-family-criticfor the landed count — promoted 2026-08-09 (dc5fe4d39) from the pool ADR; the promotion debt is discharged and the remaining work is the build — work the governed path, do NOT hand-wire a hook; delivery is STAGED and OBPI-09 lands dark; see § Movement A item 2). The one-linefoundation-adr-registers-invariantdisposition (item 4) is RULED and checked off 2026-08-02 — it is no longer pending work. Then Movement B (airlock on the real doors), C (reduce), D (rulings). Pool backlog is post-1.0 (§7).Ordering note (corrected 2026-08-12). This banner had continued to assert the 2026-08-09 pull-ahead of
ADR-0.36.0for a day after the 2026-08-11 amendment (§ Amendments, "the pull-ahead is WITHDRAWN") withdrew it, contradicting items 2 and 3 below and the amendment itself — three surfaces in one file, the stale one read first.scripts/session_orientation.pytranscribes this line into every session's orientation, so the topmost-item line a fresh session was handed named the wrong feature. Architectural Boundary 6 in the same terms: a transcribed view is Layer 3 and never source-of-truth. When the sequence changes, this banner is part of the amendment, not a follow-up.Why this edition exists. The road to 1.0 was dragging. Measured 2026-07-18 over the prior 90 days: 1,508 commits, 43 of them
feat(2.9%); 703 weregz git-syncregenerating control surfaces (47% of all commits). The system had become its own primary consumer. This edition makes 1.0 finite, lifts the reduction deferral that deadlocked it, moves the airlock onto the doors work actually uses, and books the pool backlog as the post-1.0 release line.Slim by design — and this time it is enforced. Checkbox entries carry a one-line outcome plus a commit/receipt citation. Completion narrative belongs in the ADR, the ledger, and the release notes — not here. The 06-30 edition forbade inline amendments and then accreted 800-word completion prose into its checkboxes instead; that hole is closed. Amendments append to § Amendments, never inline.
1. What gzkit is (identity — unchanged)¶
Research instrument + published exemplar → personal toolkit → public product. gzkit's purpose is to make stochastic LLM vibing structurally inert — not by exhorting agents to behave (they vibe regardless), but by making every claim falsifiable by a live test.
Amended 2026-07-18: adoption is still not a 1.0 gate, but the absence of any external consumer is now named as the root cause of non-convergence (§2). One external forcing function is a Movement, not a nicety.
2. The reckoning (measured, 2026-07-18)¶
The 06-30 edition named enforcement-claim drift as root cause. That diagnosis was correct and its cure largely landed (§5's meta-validator, 42 claims verified, 0 facades). A second root cause was not named, and it is why 1.0 receded:
gzkit has no external forcing function, and its only consumer is its own construction. Self-inspection of a self-governing system is unbounded — every governance surface is a new surface needing governance, and every audit pass finds real defects, which is what makes the loop seductive rather than obviously wasteful.
| Measure (90d to 2026-07-18) | Value |
|---|---|
| Total commits | 1,508 |
feat |
43 (2.9%) |
fix |
470 (31%) |
chore — of which 703 are gz git-sync |
810 (54%) |
| GHIs minted | Apr 304 → May 197 → Jun 86 → Jul 38 |
| GHIs closed Jul | 51 (net-draining) |
| Surface | 107k src LOC · 146k test LOC · 359 ADRs · 659 OBPI briefs · 13,488 ledger events · 92 validate flags · 59 CLI verbs |
The GHI backlog is draining, not exploding. The "GHI after GHI" experience was not a worsening defect rate — it was defect repair becoming ~100% of the work because nothing in the system was permitted to say enough. §8 fixes that.
The airlock was built on the wrong door. Every airlock_in in the ledger is an OBPI
or a permitted-entry; zero are GHI direct-fix or session entry, which together carry
~97% of commits. Last transit: 2026-07-15. The 2026-07-18 session — corpus survey, two
GHIs, three source files, a Magna Carta amendment — crossed no airlock. Movement B is
the correction. (Accounting gap also open: 23 airlock_in vs 10 airlock_out.)
Re-measured 2026-09-20 — two of these figures have moved and one claim is retired. The counters now read 71
airlock_in/ 29airlock_out, so the zero transits claim above is a dated record of 2026-07-18 and is no longer true of the tree. It is retained unedited because it records what that pass observed; it may not be cited as current. The accounting gap did not close — it grew, from 13 unaccounted exits to 42. Runreckoning-2026-09-20-evidence/reckon.pyrather than either figure on this page. The diagnosis in the paragraphs above — no external forcing function, the system as its own only consumer — was re-tested at this edition and holds:featran 2.9% of commits at 07-18 and 2.6% at 09-20.
3. Doctrine (carried — see § Rulings Register for provenance)¶
- Four modes, one airlock each: Design · Build (OBPI, minor) · MX (GHI squawks, patch) · Chores (patch).
GHI : MX :: OBPI : Build. - Product requirements (amended 2026-09-25): Constitution → PRD (one per major) grounds durable product requirements. Their authoritative definitions, applicability and change history belong to an independent requirements catalog; no ADR or brief owns their continuing existence. Planning may discover or refine requirements through an explicit approving decision.
- Bounded assignments: mADR/ADR → brief/OBPI → plan, specification and tasks. The mADR retains the bounded advance's intent, decisions, rationale, scope and constraints. A brief references the exact applicable requirement states, states its contribution, and retains its local acceptance criteria, work boundaries and evidence references. These are information roles, not a mandate for separate files.
- Acceptance and release claims: brief completion, whole-requirement satisfaction for an identified product configuration, and actual release content are distinct claims with distinct evidence. An accepted contribution does not establish the whole obligation or prove it shipped. Requirement changes preserve the original subjects of historical evidence and acceptance.
- Versioning: feature = minor · MX/GHI = patch · MX-produced contract change = patch + AD artifact. Every bump is a release.
- Taxonomy:
foundationis a closed, frozen-historic kind;poolandfeatureare the two live kinds. Completed foundations stay; unstarted ones drop to pool. Realized byADR-0.34.0. - Code architecture: Hexagonal (Ports & Adapters) is primary, seated in the DDD → HA → BDD → TDD spine; the domain is modeled as the ontology (
ADR-0.32.0), never a folder tree. - STDLIB-FIRST governs the interior; Pydantic is the one ratified exception.
Implementation boundary. The ownership relationship above is amended doctrine; catalog storage, reference grammar and runtime migration remain governed follow-on work. Existing ADR/OBPI/REQ identifiers, parsers, proof channels and ledger subjects remain in use until that work lands. This amendment creates no catalog command, new gate, capability hierarchy or release event. Design detail and unresolved mechanics remain in the candidate record; deliberation and alternatives remain in the session record.
4. The floor — never relaxes, either engine, in or out of the hangar¶
gate5_invariants (code constant, not config): human attestation, ledger integrity,
operator-PII, secrets. No marker, lane, sensitivity, or AOG can downgrade a member.
The enforcement-claim rule:
Any place gzkit asserts something is enforced / validated / fail-closed / gated / blocked — in code, an ADR, a doc, or an agent's claim — there MUST exist a paired live negative-control test that (a) constructs a known violation of that exact claim, (b) runs the real path in its production configuration, and (c) asserts it fails. No live negative control ⇒ the claim is facade ⇒ rejected.
Mechanized by @enforces(claim=…, neg_control=…) + the meta-validator.
Forbidden: forced-mode counterfactuals; tests that certify enforcement does nothing.
Registration is centralized in the qc NC table (
_qc_negative_controls.py), NOT colocated with the module it guards. Absence of@enforcesin a module is not evidence of a missing NC — checkregistered_claims(). A false facade finding was filed and withdrawn on this exact mistake (GHI #697, 2026-07-18).
5. The 1.0 definition — FINITE, against a declared target (amended 2026-07-18; re-cut 2026-08-17)¶
gzkit is 1.0 when ALL hold. Each gate is bounded; none is a standing obligation.
Re-cut 2026-08-17 (operator-ratified; § Amendments 2026-08-17). The gate set was enlarged and nothing was removed — operator verbatim: "Nothing — move the date instead."
FINITEalone would now assert a boundedness this plan does not have, so it is qualified: finite against a declared target of ≈2027-08 (declared 2026-09-20; was ≈2027-04). The original figure came from this plan's own §7 arithmetic (≈60 unlanded OBPIs at theADR-0.34.0-observed rate of ≈3.8 days each); the move funds Movement F, whose work that arithmetic never counted. The date moves by declaration, never by slippage. This is the second enlargement the date has absorbed (2026-08-17 added five gates and moved nothing; 2026-09-20 adds the config gate and moves four months). A date that absorbs every enlargement stops being a bound — see § Amendments 2026-09-20 for what that costs and what would reclaim it.
- The floor holds —
gate5_invariantsintact and the §4 meta-validator is green over the claim set registered as of 2026-07-18. Claims registered later are post-1.0 maintenance, not 1.0 blockers. - The facade is drained — as of the 2026-07-18 census. No gate returning
[]on its own violation, no test certifying inertness, among surfaces enumerated in that census. Facades found afterward route to MX/patch. (This replaces the 06-30 wording, which was an unbounded audit obligation with no terminal state — the gate that made 1.0 unreachable by construction.) - Both engines operate — a feature can go pool→release through the airlock; the MX hangar can drain debt and re-certify at a hard exit.
- The membrane is on the real doors — Movement B complete.
- The accretion is reduced — Movement C complete.
- One external forcing function exists — at least one flight-test sortie flown against
a non-gzkit substrate, black-box evidence collected (
gz-flighttest). Carried byADR-0.38.0(portability + theflighttestverb), authored in strict ADR order after0.35.0/0.36.0/0.37.0land — operator verbatim 2026-08-17: "Wait for ADR-0.38.0 in strict order." Tracked by Movement E, created 2026-08-17 (operator: "add the flight-test checkbox to §6") — closing two months in which this was the only §5 gate no Movement tracked, though §1 declared it a Movement on 2026-07-18 (§ Amendments 2026-08-17 B.4 and F). - The five contemporary-stack layers are built (added 2026-08-17) — harness portability · foreign skills · MCP/tools · agent-and-session identity · eval. Operator verbatim: "All five, properly built" — capability-modelled adapters, skill trust/provenance policy, real MCP governance, a full session/agent model, an eval suite with baselines. Not thin instances, not schema-only (§ Amendments 2026-08-17 A.2).
- One config system governs every setting (added 2026-09-20) — a single entry
point, one loader, no parallel systems, no value with two homes, and every threshold
recording the authority for its value. Operator verbatim: "gzkit lacks a comprehensive
and all-encompassing config system like airlineops had, we need to adopt this as a
pre-requisite for 1.0." Measured at this ruling: 45 registries under
data/, 19 of them with no traceable derivation,src/gzkit/config.pygoverning none of them, and 56 numeric policy constants in module bodies outside the config gate's reach entirely (config-derivation-census-2026-09-20.md— re-run its script rather than trusting these). Tracked by Movement F, created by this amendment. Not a documentation pass: the gate is the system. - Release line healthy from 0.34.0; GHI backlog at steady-state triage scale.
- v1.0.0 released through the ceremony.
Explicitly NOT 1.0 gates: the pool backlog (§7 — post-1.0 release line), RECALL (severable enrichment), adoption.
6. The Queue¶
Work top-down. Check items off only with observed command evidence. No movement opens while
uv run gz checkis red.
Movement A — Close the Foundation Sunset (forward engine; closes a kind — reductive) — HELD as of 2026-08-14 (operator-ratified; § Amendments); Movement A is HELD as a Movement, while its ADR-0.35.0 box is TOPMOST in its own right as of 2026-09-01 (operator-ratified; § Amendments), REAFFIRMED 2026-09-02 — no longer merely the next work under ADR order (§ Amendments 2026-08-16 — ADR ORDER IS ABSOLUTE). Ascending semver and the TOPMOST label agree rather than pulling apart. The 2026-09-02 amendment placed Movement C's family-closure box directly beneath this one; it did not displace it.
- [x] ADR-0.0.37 → Validated via /gz-adr-audit. Attribution drift found by independent review and remediated pre-receipt. b40a8026 · receipt arb-step-unittest-753d3dda · detail in § Amendments 2026-07-18 (later session).
- [ ] Install the cross-family critic at the convergence moment. NEXT-DRAWN, after ADR-0.35.0 lands — the 2026-08-09 pull-ahead was WITHDRAWN by the 2026-08-11 amendment (operator: "not sure i wan't to author 0.36.0 while we haven't finished 0.35.0", spelling preserved). The withdrawal rests on the staged-delivery ruling, not on a change of mind: because OBPI-09 lands dark, completing all nine still does not deliver the always-on critic the pull-ahead was for. Three briefs (01, 02, 03) were authored 2026-08-11 at 1b808b18d and remain valid; six are draft (scaffold). The design is complete and unbuilt: ADR-0.36.0-convergence-moment-cross-family-critic (Proposed) now holds it (run uv run gz adr status ADR-0.36.0-convergence-moment-cross-family-critic for the landed count), promoted 2026-08-09 from ADR-pool.convergence-moment-cross-family-critic (now Superseded), which had recovered it verbatim from the three 2026-08-06/07 design transcripts after the operator judged the handoff chain had degraded it — "multiple audio tape recordings of audio tape recordings where the quality is dissipating rapidly." Nothing runs today: .claude/hooks/ ships no critic script and .claude/settings.json PreToolUse has matchers for ExitPlanMode, Write|Edit and Bash only — no AskUserQuestion matcher (verified 2026-08-09). Promotion is done; the remaining work is the nine OBPIs. Work the governed path; do not hand-wire a hook — that was the declined option. Carried design rulings that bind the build: the critic performs BOTH scope and conclusion challenge with full context ("why is this a choice? we want the adversary to get full context. measure twice, cut once"); it is a skill with three invocation doors — operator, agent, or gate ("this is a skill but can be invoked by me, by agent, or at gate"); post-verdict resolution is operator + main agent modeled on Step 4b ("obpi pipeline 4b already handles this well — observe it"); and it uses the built-in Codex integration rather than a hand-rolled port ("why not use that and keep it simple?"). The critique passes through unedited — updatedInput enforces it, so the critic's verdict reaches the operator before it enters the agent's context. This does not relax one-feature-at-a-time: ADR-0.35.0 is Draft and unstarted (run uv run gz adr status ADR-0.35.0-canon-entry-corpus-landing for the landed count), so this exchanges which feature is in flight rather than running two. THE PROMOTION DEBT IS DISCHARGED — all four owed items, then the promotion itself (2026-08-09, 8763ec633 + dc5fe4d39). Decomposed against the three doors with the PreToolUse adapter as OBPI-09 landing dark; Step 4b generalized without editing it (OBPI-07); A3 and A4 carried as OBPI-05 and OBPI-06; the adversary re-run already discharged by the amendment above. What remains is the build — no OBPI has landed. DELIVERY IS STAGED, not big-bang — the adversary re-run was performed 2026-08-09 and returned PERFORATED-BUT-NARROWABLE. R4 dissolved Pass 1 axis 2 (forbidden same-family critic) and R3 dissolved Pass 2's missing-policy attack at the policy level; axes 1, 3 and 4 remain partially addressed. What still perforates: the automatic door binds to a UI event that carries mandatory clarification as well as recommendations, so it "can prevent the very question those rules require"; prose bypasses it entirely; strong subject binding (prompt hash, scope manifest, primary-output hash) is explicitly unbuilt; and the scope-time-vs-conclusion-time timing question the ADR calls "live" is unresolved by R1. Therefore: ship the skill, the three doors, the scope-first challenge, the A3 envelope, the R3 transition and provenance binding FIRST; the automatic AskUserQuestion door lands DARK and is lit only after a calibrated pilot measures "false blocks, latency, operator reading time, and decisions changed." This is sequencing, not abandonment — and the cost is stated rather than softened: until that door lights, this does not deliver a second opinion at every structured choice. A3 → ADOPT-NARROWED (one decision-scoped envelope, not persistent state across every tool transition). A4 → ADOPT-NARROWED (mandatory for the enumerated consequential categories and explicit operator requests, sample the routine; the primary agent's own unvalidated confidence must NOT set the tier — the ADR itself asks whether that confidence is "placebo"). R4's transport premise is measurably wrong and is corrected in the ADR (§ R4 transport correction) — see also GHI #786: the built-in adversarial-review reviews branch diffs, not decisions, and the codex:codex-rescue forwarder is contracted to "return nothing" on failure. R4's ruling (use the current Codex, keep it simple) stands; the belief that the shipped plugin already supplies this transport does not.
- [ ] Re-home the registry→AGENTS.md composition engine as a feature ADR. IN FLIGHT — restored to the in-flight feature position by the 2026-08-11 amendment, reversing the one-position deferral of 2026-08-09. Implementation-ready and reviewed 2026-08-11: ten briefs pass
gz obpi validate --authored10/10,--req-kind-discipline/--brief-reconcile/--cli-alignmenteach exit 0. Three ADR-body defects were repaired at584778396—BI-07had lost its REQ's proof channel (it citedADR-0.44.0whileREQ-0.35.0-09-07 [structural-fence]citedADR-pool.vendor-alignment-codex),(see Forced Decisions)pointed at a non-existent section, and the[kind]tag case was split. Status isDraft, and the lifecycle step is RULED 2026-08-12:DraftHOLDS through implementation. OBPI work is UNBLOCKED and this question is CLOSED — do not re-raise it. The question had been carried unworked across seven successive handoffs because the answer was never written down; it is written here. Three findings settle it. (i) Corpus precedent is unanimous:ADR-0.33.0andADR-0.34.0each heldstatus: Draftthrough their entire implementation phase and moved straight toCompletedat release —ADR-0.34.0authoredDraft2026-07-12 (946afb5ae), held it through OBPI-05 (67cf7c998) and the orphan-census fix (7de63c779), and becameCompletedonly at the v0.34.0 release commit (551366064), thenValidated(73e2f5569). No feature ADR has ever enteredProposedorAccepted. (ii)Acceptedwould be a false Layer-1 claim:STATUS_VOCAB_MAPPING(src/gzkit/governance/status_vocab.py:42) maps"Accepted": "validated", and bothgovernance/frontmatter_coherence.pyandcommands/gates.pyconsume it — advancing while OBPIs remain unlanded (uv run gz adr status ADR-0.35.0-canon-entry-corpus-landingfor the live count) would assert the ledger termvalidatedagainst a Layer-2 that reportspending, manufacturing exactly the drift the frontmatter-ledger-coherence chore exists to catch.DraftandProposedboth map topending, soProposedwould be vocab-neutral but precedent-breaking for no gain. (iii) TheDraft → Proposed → Acceptedchain inADR_TRANSITIONS(src/gzkit/core/lifecycle.py:48-53) is dormant on this axis — it is re-exported bysrc/gzkit/lifecycle.pybut no ADR frontmatter writer consumes it, which is why the corpus performs aDraft → Completedjump the machine forbids. It is not the governing authority here. The Lifecycle column reportingPendingis not drift: it is Layer-3 derived from the absence of Layer-2 completion events and can report nothing else while the OBPI set is unlanded, whereas frontmatter is Layer-1 authorship. Different axes, perdocs/governance/state-doctrine.md. DONE as authoring: the successor isADR-0.35.0-canon-entry-corpus-landing(authored 2026-07-21,Draft;uv run gz adr status ADR-0.35.0-canon-entry-corpus-landingfor the OBPI set and landed count) — this item is started-not-done, and the tracker is the ADR, not a GHI. GHI #623 closed 2026-07-19 and GHI #654 closed 2026-07-22supersededintoADR-0.35.0, whose § Intent names it: "Discharges GHI #654 (orchestration gap) and GHI #635 (duplicate invariant entries) -- the same wound." Do not reopen #623 or #654 to find this scope; read the ADR. Its OBPI-05 carries the corpus→candidate generator and OBPI-07 thegz content landorchestrator. GHI #654's capture-silence gap was direct-fixed ahead of the chain (48a5f799,dcf29b95) because it was a live footgun; see the pre-landed note inOBPI-0.35.0-08. The absorption directionADR-0.0.37§ Terminal Disposition recorded ("tracked at GHI #623 (absorbing GHI #654)") is backwards relative to what survived: #623 was an audit finding and its findings are discharged, while #654 states the same unbuilt capability as operator pain with a reproduction — "there is no generator that renders the corpus delta into a candidate." Closed after a full re-verification: claims (3)/(4) had been fixed by later work and never credited back, corrective scope (A) had landed as--rendition-floor-coherence, the discarded registry parameters were removed (4f9c7d2b), and a standing witness-resolution gate was added (e409bb08). Residual scope, unbuilt and feature-shaped: the attributable corpus→candidate generator and therendition ⊆ corpuslineage gate — todaycompose()validates an agent-supplied candidate rather than materializing one from the corpus, so prose absent from canon can still pass. The registry spine is NOT the successor:ADR-0.0.37§ Terminal Disposition permanently withdrew OBPI-02/03 as "obsoleted by the 2026-06-03 corpus Re-Alignment." The successor is corpus-shaped. - [x] Disposition
foundation-adr-registers-invariant— RULED 2026-08-02: retire the claim as superseded by the Foundation Sunset. The entry declared structural witnessgz validate --foundation-registers-invariant, which never existed, and the claim was unenforceable as written —constitutional_invariant.jsoncarries no field naming which ADR registered an entry (fields areid,claim,structural_witness,composition_targets,classification). The ruling turns on what OBPI-0.34.0-05 sealed: the foundation kind is closed at bothadr_createdingresses, so the claim's subject set is permanently frozen at the 51-entry grandfathered roster and can never be exercised again. The entry now states that sealed reality, witnessed bygz validate --taxonomy(exists; already the last step ofgz check; exits 0 on the terminal tree). The file is retained, not deleted —REQ-0.0.37-01-03(attested, OBPI-0.0.37-01) asserts only that the three seed files exist, load viaload_invariants, and validate against the schema, never that the claim text is true; rewritingclaim+structural_witnesspreserves attested canon exactly, deleting the file would falsify it.tests/governance/test_invariant_witness.pyfence drops tofrozenset()and stays shrink-only: a new vapor witness fails immediately. Two corrections to this item's own prior text: the "74 foundation ADRs" figure was the--taxonomyfindings count from OBPI-04 (line above), not an ADR count — the roster is 51; and--invariant-witnesswas described as staying "out ofgz checkuntil this is ruled", but that flag has never existed either —validate_invariant_witnessesis a function ingovernance/trust_audits/invariant_witness.pywhose only caller is the fence test, with no CLI wiring. Enrolling it was separate work, tracked at GHI #746 and landed 2026-08-03:--invariant-witnessis now a registered default-tier scope, so it runs under baregz validateand therefore insidegz check— no separate step entry was needed, because GHI #744's collapse made one baregz validategate the whole default tier. The scope is now nameable as astructural_witnessin its own right, which it could not be while unregistered. - [x]
ADR-0.34.0-foundation-sunsetcapstone —Validated2026-07-31, released v0.34.0, tag on the bump commit551366064. Closeout ceremony (11 steps,g0verbatim "attest completed") then audit ceremony (g0verbatim "accept audit"); receiptsarb-step-unittest-f02e079a9c5c4fce83433f15d1ace4b1(7685 OK),arb-ruff-9b11bcbc647c4b9a9ddb6282f7fc34b4,arb-step-typecheck-4c8436dc00e842b8847ebcacb7dc866c,arb-step-mkdocs-3f31717e44a04a46821f35433f53b0c2; bound fidelity gate 2/2. Audit record and three recorded-open shortfalls:docs/design/adr/pre-release/ADR-0.34.0-foundation-sunset/audit/AUDIT.md. All 5 OBPIsattested_completed. OBPI-01 2026-07-19: grandfather manifest + closed-kind assertion · OBPI-02: authoring-time kind rejection at all three CLI doors · OBPI-03 2026-07-29 (f6088fabc): terminal-partition gate reading grandfathered-foundation terminality from the Layer-2foundation_grandfatheredevent and never frontmatter, plusADR-0.0.18frozen-historic · OBPI-04 2026-07-30 (d521ace53): the migration executed —--taxonomymoved exit 3 / 74 findings → exit 0, 23 genuinely-unstarted foundations demoted to pool (136 briefs removed, lineage preserved byobpi_parkedper child), 51 manifest entries bijective with 51foundation_grandfatheredledger events, re-sensed with zero orphans (seams 119→119) · OBPI-05 2026-07-31: the permanent--taxonomygate wired as the last step ofgz check, and the registration membrane sealed at the two manifest-membraneadr_createdingresses (GHI #706 discharged). Audit qualification: exactly threeadr_createdemission sites exist; the third is the shared helperregister_adr_in_ledger, whose two callers are both separately guarded — a latent surface (GHI #734), not an open hole. Movement A's capstone is closed; items 2 and 3 remain.
Movement B — Put the membrane on the real doors (carried by ADR-0.37.0-airlock-calibration-and-compulsion — authored 2026-08-14, kind: feature, lane: heavy, re-homing ADR-0.33.0's disclosed residuals; run uv run gz adr status ADR-0.37.0-airlock-calibration-and-compulsion for its lifecycle and landed count rather than transcribing one here) — NEXT-IN-PRIORITY as of 2026-09-01 (operator-ratified; § Amendments); was TOPMOST 2026-08-14 → 2026-09-01, throughout which ADR order forbade drawing it. The step-down is not a demotion of the airlock's importance — the inertness measured at 2026-08-14 is unchanged and unaddressed. It records that TOPMOST should name drawable work, which this Movement was not.
The doors mostly exist. They do not fire.
gz permitted-entryshipped withADR-0.33.0(OBPI-05) and has 2 recorded transits.gz airlock inis wired intogz obpi pipelineStage 1 and fires reliably there — because the pipeline triggers it. Everywhere else the airlock is invocable but opt-in, and an opt-in gate is not a gate. This is the §4 failure class one level up: a mechanism that exists, is documented as governing entry, and does not bite. Operator ruling 2026-07-18: GHI and ad-hoc (permitted) entry MUST trigger the airlock mechanism.
- [ ] 0. CALIBRATE THE SEAM-MAP BEFORE WIDENING ANY DOOR. (added 2026-08-14; sequenced ahead of the five below.) The gate is not theater — it bit 3 times — but 20 of 23 transits computed an EMPTY seam-map and auto-proceeded (measured live 2026-08-14:
decision20proceed/ 3hold;unaccounted20×0, then 3, 4, 7).ADR-0.33.0's own calibration-frontier note states the cause:gz ontology reach(<obpi-id>)returns transitive dependents, of which a leaf OBPI has none, sopush_edgesis empty; and the gate never passesparent_invariants, sopull_edgesis empty too. This is WWHTBT-(a), the ADR's self-declared load-bearing condition, deferred past the FC-2 tracer and never landed. Widening to three more doors first would install three more inert gates and put transit ceremony on 524 commits/quarter with no membrane behind it —ADR-0.33.0§ Negative #1 ("Theater… seam-maps rubber-stamped, GO always reached… the membrane exists but does not bite") arriving through the front door. Done means: a real entry on a real OBPI computes a non-empty seam-map, and the existing NC still cannot be forced. Destination:ADR-0.37.0-airlock-calibration-and-compulsion, AUTHORED 2026-08-14 — NOT corrective work underADR-0.33.0. The re-homing precedent isADR-0.35.0, which exists becauseADR-0.0.37's composition engine was withdrawn and re-homed as a feature rather than appended to a sealed ADR. Appending an OBPI toADR-0.33.0would drag aValidatedADR back toPendingand retroactively falsify an operator attestation that was honest when it was given — the frontier was disclosed in the attested REQ text, so the artifact told the truth and the residual is unscheduled work, not a defective attestation. The ADR takes exactly this framing — its## Intentre-homes the residual on theADR-0.35.0precedent in the same terms — and the calibration lands in its § Decision D1, revised 2026-08-15 after the original inverse-reachform was withdrawn on measurement: the inverse returns the artifact's lineage chain, identical across-01,-02and-05, which converts an empty seam-map into a constant one and satisfies a non-emptiness assertion while deciding nothing. Read the OBPI set and landed count fromuv run gz adr status ADR-0.37.0-airlock-calibration-and-compulsion, never from this page. The OBPI-01 rename debt is DISCHARGED 2026-08-16 — the slug readontology-inverse-reach, naming the PUSH-arm design that same amendment withdrew, while the brief threadsparent_invariants(the PULL arm); it is nowOBPI-0.37.0-01-parent-invariant-threading, recorded as a forwardartifact_renamedevent. The preserved## Q&A Transcriptand the dated evaluation scorecards keep the old slug deliberately, being primary sources rather than decision text. - [ ] GHI direct-fix triggers the airlock.
GHI : MX :: OBPI : Build— the MX door must carry the same membrane the Build door does. Afix(...)landing without a transit is an unaccounted entry. This is the single highest-volume ungoverned door: 470fixcommits in 90 days, zero transits (90d to 2026-07-18; 481 on the same measure to 2026-08-08). The door is wider than either figure reports. Measured 2026-08-08 subject-anchored: 546 commits touchedsrc/**/*.py, 193 of them (35%) under achoresubject, and 187 of those 193 (97%) weregz git-sync-authored — invisible togit log --grep='^fix(', which is both the source of this figure and the precedent query AGENTS.md § Defect-fix routing prescribes for its own routing decision. Fenced at the sweep 2026-08-08 (GHI #708 reopened), so the count is honest going forward and undercounts by an unrecovered amount before it. Measure subjects viagit log --format='%s', never--grep='^chore'—--grepmatches the whole message and admitsfix(chores):commits whose body has a line starting with "chore". - [ ] Ad-hoc / permitted entry triggers the airlock. Make
permitted-entryfire on ad-hoc reconnaissance and light repair rather than waiting to be invoked — the reason selects the door, never whether the gate fires (ADR-0.33.0door principle). - [ ] Session entry triggers the airlock. A model entering the project is a transit. The SessionStart hook already runs orientation; it should seat a seam-map and a go/no-go. Evidence this is the live hole: the 2026-07-18 session ran a full corpus survey, filed 2 GHIs, changed 3 source files, and rewrote Magna Carta across zero transits.
- [ ] Close the transit-accounting gap: 23
airlock_invs 5airlock_out— 18 transits never accounted for on exit. Failure-atomic pairing precedent: GHI #679 /89c5ee9a. Count corrected 2026-08-14 from the 23/10 this box carried; re-measure rather than transcribe. Sequence it second, after item 0 — do not widen what you cannot yet account for. This is the third instance of one paired-event family found on 2026-08-14: the resume gate recorded 160 lifts and 0 blocks (fixed,2a326f042),session_exitrecords 37 skips and 0 writes (GHI #766, open), and the airlock pairs 23 entries to 5 exits. Consider dispositioning the family once rather than three times. - [ ] Bind with a §4 live NC on each widened door: un-triggered entry → the claim fails. Not "un-accounted seam → GO unreachable" (that is
ADR-0.33.0's existing NC, and it only fires once you are already inside the airlock). The new NC must catch never entering at all — the failure mode that let ~97% of commits through.
Movement C — Reduce the accretion (RESEQUENCED 2026-09-27: waits behind ADR work in ascending order; the NEXT-IN-PRIORITY placement below is SUPERSEDED — § Amendments 2026-09-27 (3).) (deferral LIFTED 2026-07-18 — this is pre-1.0; the doctrine-declared-without-mechanism box below is NEXT-IN-PRIORITY as of 2026-09-02 — pulled forward to sit directly beneath TOPMOST and ahead of every other box in this Movement, operator-ratified; § Amendments)
- [ ] Surface mirroring — 703 of 810 chore commits (47% of all commits) are gz git-sync regenerating five copies of every skill/rule across .gzkit/, src/gzkit/, .claude/, .agents/, .github/. One canonical location; generate at install, not at commit. Largest single line item on the board. RE-MEASURED 2026-08-16 — the ratio holds, and this box's window is unrecorded so the original figures are NOT overwritten. Over a stated 90-day window: 1561 commits, 761 chore subjects, 633 mentioning gz git-sync (git log --since='90 days ago' --format='%s'). The proportion is materially unchanged (~49% vs the 47% recorded), so the box's claim stands on fresh evidence rather than on a transcribed number. The original 703/810 is left in place because the window it was taken over is not stated anywhere — replacing figures whose method is unknown with figures from a different method would manufacture a false comparison, which is the transcription failure gz validate --transcribed-adr-counts exists to refuse. Whoever works this box states the window first.
- [x] Collapse the validate() surface to the registry — DONE 2026-08-08 against the amended criterion. Done means the enumeration family is closed, not that the count fell (amended 2026-08-07): the registry is the single source, and registering a scope enrolls it in the gate (GHI #744). Siblings that must stop recurring: #704 (six solo-only scopes silently dropped when combined, under a green check), #745 (fenced blocks escape all three verb detectors), #748 (a weaker verb extractor reimplemented alongside one that already shipped). A count target alone leaves every one of those live. All three sub-claims now hold, each fenced: (a) enrollment landed 2026-08-02 (0f671b31c, GHI #744) — data/check_scope_membership.json declares membership and tests/governance/test_check_scope_parity.py recomputes it from source via AST, so drift in either direction fails and a default-tier scope outside the gate fails closed; (b) the registry is now genuinely the single source — --qc-binding, --fidelity-presence and --waiver-ratchet had dispatched through the early-return chain alone since the #618 collapse, contradicting the VALIDATOR_REGISTRY header's own "Single source of validate dispatch" claim, and that gap had already cost GHI #630 (every SUPPORT REQ citing one read unproven-support regardless of truth) which was patched with a third hand-maintained map rather than closed; registering the three retired that map (net −18 source lines) and the fence now asserts reached − registry == ∅ instead of accommodating the exception; (c) #704, #745 and #748 all closed 2026-08-02 with standing fences, #704 with a genuine class-level fix replacing the per-scope guards that had been copied forward onto every new scope. Count correction: the "94 scopes" this box carried matched no enforced surface — VALIDATOR_REGISTRY holds 85, the roster classifies 85 (44 in_check / 41 out_of_check), and gz validate --help prints 99 flag lines including non-scope flags. The retargeting off counting is exactly why that stale figure changed nothing about completion.
- [ ] Oversized modules — census-driven, with working proof. RE-MEASURED 2026-08-16: 51 modules over 600 lines, up from the 33 this box carried — a 55% increase, and the largest measured regression on the board. Method, so the next reader re-runs rather than transcribes: find src/gzkit -name '*.py' -exec wc -l {} + | awk '$1>600 && $2!="total"'. The box is not merely unstarted; its subject grew faster than anything shrank it. Note the threshold itself is contested — .gzkit/rules/pythonic.md § Size Limits records that 600 is authoring-time guidance with no enforcing gate, and that it disagrees with the canonical complexity-thresholds.md table (which warns at 733.2 and blocks at 1031.9), so a census against 600 counts modules that no gate rejects. Settle which number governs as part of the census, or the proof will be measured against an authority the codebase does not enforce.
- [ ] The Firewall (recovered orphan, § 9a) — classify every delivered surface by destiny: wheel-borne / authored-into-battlefield / lab-only-jig, enforced at scaffold-time and validate-time. Operator, 2026-06-14: "the rigging and jigs do not remain attached to the fuselage once we open the factory hangar doors for final delivery — we haven't been careful about this." Booked 06-14, never built. Load-bearing for §1's public-product trajectory: today an adopter inherits gzkit's lab jigs. Genuinely reductive — it defines what does not ship.
- [ ] Render the stability-gradient spine (recovered orphan, § 9a; amended 2026-09-25) — retain the 06-14 ruling's enduring Constitution → PRD product grounding. Under §3's amended ownership model, durable requirements have independent authority and bounded mADR/ADR → brief/OBPI → plan/specification/tasks assignments reference their exact applicable states. Render these relationships across governing surfaces without restoring REQ ownership beneath OBPI. This box remains open for the remaining all-surface reconciliation. Catalog/runtime migration is unimplemented and receives no schedule or new completion condition from this amendment. The old linear tree remains historical provenance, not the target to render.
- [ ] Close the doctrine-declared-without-mechanism family (added 2026-08-07) — the family's own name, from GHI #537: "Layer X declares a discipline that Layer X does not mechanically enforce." Measured by the failure-class-index chore over the 333 GHIs closed since 2026-05-09: the two deepest recurrence chains in the corpus (depth 12 and depth 7) are both this family, ~19 members, and it holds the two most-cited ancestors on record (#537 cited 3×, #538 cited 4×). Both arms are in scope — validator-side (a check whose subject is narrower than its name: #692 checks section presence, not population; #693 verifies a flag is mentioned, never that its description is true; #770 an audit named for dispatch attestation whose entire subject is a frontmatter string) and agent-side (a skill mandate with no receipt: #459, #574, #620). Completion criterion: a declared discipline either carries a mechanical witness or is demoted to advisory in its own text — no third state. This is the reductive move that stops the validate() surface producing scope #95: it closes the family rather than the instance. Re-scoped 2026-08-08 (operator-ratified) — the six named issues all closed and the box did NOT discharge; see the amendment for why, and the measurable criterion below. PULLED FORWARD TO NEXT-IN-PRIORITY 2026-09-02 (operator-ratified) — directly beneath TOPMOST ADR-0.35.0, ahead of Movement B and of every other Movement C box. The share and production figures that placed it here are measured in f1-family-share-measurement-2026-09-20.md, not transcribed here; the 2026-09-20 re-measure VERIFIED the placement premise. The criterion, the three arms and the doctrine-side residual are UNCHANGED. See § Amendments 2026-09-02. DRAWN-WORK ORDER 2026-09-15 (operator-ratified): GHI direct repair under this box is drawn only after the R&D front and the chore estate, and only when the GHI closes a named arm, blocks those two, or is an emergency. See § Amendments 2026-09-15.
All six exemplars are CLOSED — validator-side #692, #693, #770; agent-side #459, #574, #620 (verified 2026-08-08 via gh issue view). They are evidence the class exists, not a checklist: the box's own text says "it closes the family rather than the instance." Six closed instances do not discharge a class-level criterion, and checking the box on their strength is the enumerate-the-exemplars habit the criterion was written to resist.
THIRD ARM — DOCTRINE-SIDE (added 2026-08-17, operator-directed). Both arms named above sit inside the machine: validator-side is a check whose subject is narrower than its name; agent-side is a skill mandate with no receipt. Neither covers the case where a foundation-tier doctrine document declares a binding claim and no witness of any kind exists — not a narrow one, not an absent one. The measured exemplar: docs/governance/agent-control-surface-rendering-substrate.md:211 has specified gz content render agent_contract --vendor=root since authoring — one root AGENTS.md contract serving every harness. The string "root" appears zero times in src/gzkit/content/ or compose.py. The doctrine's own vendor was never built, and a per-consumer shape took its place in three copies: the same file's § Agent Orientation Index (a Layer-3 row 65 lines below the Layer-1 worked example it contradicts), data/vendor-manifest.json, and src/gzkit/content/vendors.py:21 _FALLBACK_ROUTES. It then propagated into REQ-0.35.0-09-02 of a Heavy-lane brief that passed --brief-reconcile, --req-kind-discipline and its own Discovery Checklist. This arm is why the criterion cannot be met by counting closed issues. gzkit's witnesses compare artifact↔artifact and claim↔receipt exhaustively and doctrine↔code not at all, so the drift was unobservable by construction until a human read line 211 aloud. Two sibling boxes in this same Movement are the same wound: "Render the stability-gradient spine" (a 06-14 ruling that the PRD → Constitution order is backwards, still shipping the old order across ~12 surfaces) and "Surface mirroring." Instance-level redress landed 2026-08-17 under ADR-0.35.0 / OBPI-0.35.0-09 (re-scoped: root-only routing, a manifest fence refusing multi-vendor AgentContract, and a fail-closed agreement check between _FALLBACK_ROUTES and the manifest) plus an invariant-tier corpus entry carrying the doctrine into the per-turn surface. The class remains OPEN: a general doctrine↔code witness is unbuilt, and the honest statement of the gap is that gzkit does not today know how to mechanize "this prose binds that code." Whoever works this box states which arm they are closing.
The criterion is measurable, and the instrument already exists. docs/governance/advisory-rules-audit.md scores every clause of CLAUDE.md + .gzkit/rules/** on four values, self-tested by gz validate --advisory-scorecard. Those four values ARE the criterion: Mechanical = carries a witness; Judgment = advisory by its own text; Promotable and Ambiguous = the third state this box forbids. The live count is the scorecard's own fenced Summary table — deliberately not restated here. Run uv run gz validate --advisory-scorecard; it fails closed when that table disagrees with the rows beneath it.
Count correction, 2026-08-08 (measurement only — the ratified criterion is unchanged). This paragraph first read "63 Mechanical, 27 Judgment, 12 Promotable + 2 Ambiguous = 14 rows in the third state." None of those four figures reproduce against the file, which had not been modified since 2026-08-06. The measurement was taken by counting mentions rather than rows:
grep -c 'Ambiguous'returns exactly 2 — the scorecard's legend row and its own Summary row, neither of which is a rule. The true third state is 9Promotableand 0Ambiguous, andAmbiguoushas no members at all, so one of the two arms the criterion named was empty from the start. Per the GHI #768 ruling on this same class — stop writing the number down; add a narrow check so it cannot decay back into a convention — the figure is now fenced at the scorecard and cited here rather than transcribed.
Done means all three arms hold:
1. Rules arm — every Promotable/Ambiguous row reaches zero: each is either mechanized (→ Mechanical) or its rule text amended to state it is advisory (→ Judgment). Re-scoring alone, without the text edit, is laundering. Read the freeze before choosing an arm: the scorecard's § Recommended promotion order is FROZEN (2026-06-08, governance-subtraction) — "Promotion is opt-in-with-justification ... The remaining Promotable rows stay advisory by default." Under that freeze the default disposition is the amend-the-text-and-re-score arm; mechanization is reserved for a row carrying named, observed drift evidence. That reading makes this box a subtraction move, which is what Movement C is for.
2. Skill arm — the scorecard covers no .gzkit/skills/**/SKILL.md mandate, which is where all three agent-side exemplars lived (#459, #574, #620 were each a skill mandate with no receipt). Extend coverage to skill mandates, or record in the audit why skills are structurally out of scope. Today the arm is not failing — it is unmeasured, which is the same blindness one surface over.
3. Debt arm — already mechanized and needs no new work: the 23 pre-ledger rules are pinned in data/advisory_scorecard_grandfather.json and registered shrink-only in data/waiver_ratchet_registry.json (ADR-0.0.73 BI #8), so debt cannot grow or follow a rule forward silently.
Status change 2026-08-16 — the rules arm REGRESSED from 0 to 8, and that is this box working (GHI #810).
.gzkit/rules/cli.mdwas scored for real, which required dropping its0.3.1grandfather pin. Scoring it honestly produced 8 Promotable rows (scorecard rows 76-82, 85) — the third state this box forbids, returning. Do not read this as new drift. The CLI layer had been invisible to the instrument on both arms:cli.mdsat in the grandfather registry unscored, and the 1,037-line specification elaborating it (docs/design/cli-standards-v3.md, canonical per ADR-0.0.4) was reachable from that ADR and from no rule or governance surface, so nothing carried it into the per-turn contract. Decay under those conditions produces no signal; the 8 rows are that decay becoming measurable for the first time. Re-scoring them to Judgment without amending the rule text is the laundering arm 1 already forbids, so the arm is genuinely open. Measured alongside: every CLI rule with a mechanical arm holds at or near 100%, every prose-only rule at or near 0%. The debt arm moved the right way in the same pass — the grandfather registry shrank 15 → 14 againstbaseline_count23, which is the shrink-ratchet behaving as designed. Restoring arm 1 means building the arms (rows 76-82 and 85 consolidate to one validator,gz validate --cli-shape, plus an output-chokepoint ratchet — see the scorecard's § CLI Contract Doctrine), not re-scoring. Tracked at GHI #810.
- [ ] Name the adoptable mechanisms — the positive half of The Firewall (added 2026-08-16, operator-directed). Item 160 defines what does not ship. Nothing defines what an adopter gets, and four mechanisms that already work have no home describing them as a deliverable surface rather than gzkit's private tooling. Two ship today with no adoption story: the shrink-only waiver ratchet (
data/waiver_ratchet_registry.json, ADR-0.0.73 BI #8 — debt may only decrease; it gated the grandfather removal on 2026-08-16, 15 → 14 against baseline 23) and the verifier-pipe-gate hook (.claude/hooks/verifier-pipe-gate.py, GHI #589 — refuses a verifier in any non-final pipeline stage; it fired against an agent's owngz validate | grepon 2026-08-16, which is the class of false green that then gets relayed as attestation evidence). Two are already homed and named here only so the set is legible: the Mechanical validators are delivered byADR-0.0.31-distribution-invariants(Validated; runuv run gz adr status ADR-0.0.31-distribution-invariantsfor its landed count rather than trusting a figure transcribed here —pip install py-gzkit && gz init, byte-equivalent, fail-closed viagz validate --distribution), and the scorecard method is item 162 above, whose live counts are fenced at the scorecard's own Summary table. Done means: each of the four is classified under item 160's destiny taxonomy (wheel-borne / authored-into-battlefield / lab-only-jig) and, for anything wheel-borne, the adopter-facing contract is stated — what it checks, what it costs per turn, and what a project must do to satisfy it. Explicitly NOT a new pool ADR (Architectural Boundary 2 — do not add more pool ADRs to the runtime track); the pool already holds 190 unscoped items and four hooks-related entries (claude-hooks-absorption,pre-commit-hook-absorption,hooks-meta-layer-contract,prime-context-hooks) that this box does not unfreeze. Sequenced with item 160, not ahead of it — the negative half is the load-bearing one, because until it lands an adopter inherits the lab jigs regardless of how well the positive half is described. Origin: the 2026-08-16 competitive review, which measured the flourishing tools in this category as authoring-side (Spec Kit 93k stars, BMAD 46.7k) with the enforcement side unoccupied as OSS — gzkit's differentiator is real and undescribed.
Movement D — Stop the re-adjudication (ruling lifecycle; orientation + findings absorbed 2026-08-17)
Scope change 2026-08-17 (operator-ratified) — Movement D absorbs the orientation problem and the
findingentity. Operator verbatim: "Movement D should absorb the orientation problem. a handoff is there to orient a new session from the prior session - it is an advisory shift change orientation" and "yes, findings in scope for Movement D." Re-adjudication and mis-orientation are one defect with one mechanism: this plan is whatsession_orientation.pyhands every fresh session, and its transcriptions of its own ADRs preserve status, counts and citations while dropping the reasoning — demonstrated in session 2026-08-17, where a full architecture review built on them mischaracterized three feature ADRs. The governing model for the handoff half is operator-supplied and external: the FAA Position Relief Briefing (JO 7110.65 App A; JO 7210.3), four ordered beats under "equal responsibility for the completeness and accuracy of the transfer." Added scope:handoff_discrepancyas a typed finding event (the first accuracy signal over 373 handoffs — today unmeasurable); thefindingentity as a kind distinct from facts, judgments and decisions; a per-project schema-validated Position Relief Checklist; and the preview → readiness → briefing ordering at SessionStart, which today fires simultaneously so the briefing has nothing to be checked against; and a campaign-narrative coherence guard — a test that fails when this plan's prose contradicts its own checkbox state. Operator ruling 2026-08-17, verbatim: "it was never written - add the guard to Movement D scope." Origin: theadversarial_validationrecord forOBPI-0.33.0-06claims the fix is "now guarded bytest_campaign_has_no_stale_unchecked_narrative" and no such test exists — §4's enforcement-claim rule violated inside the output of the mechanism built to catch it (§ Amendments 2026-08-17 E). Rendering the campaign from ADR canon removes the class; the guard fails closed until then, and afterwards proves the rendering has not regressed. Two binding constraints: every beat is advisory and gates nothing — authorization migrates to the airlock perOBPI-0.37.0-05, the handoff keeps only briefing — andgz git-syncis never gated and is always a permitted first operation after a handoff is created (standing canon,ADR-0.37.0BI #5: "handoffs should never, never, never, ever, block git-sync. NEVER."). Existing scope carried unchanged. See § Amendments 2026-08-17 C. - [x] Handoff-local repair — every authored next step now survives the resume (ResumeResult.next_steps); thecontinues_fromchain link is correct-by-construction. GHI #696, commit5ec44ad1, receiptarb-step-unittest-430503d2. - [x] Recover the orphaned 06-10 rulings. Done 2026-07-18, in-session. Counted 17 amendments + 4 scope decisions + a goal-state — not the "77" the 06-30 edition asserted. All dispositioned in § 9a. Highest-value catch: Scope decision #1 ("Full pool build-out … no item left undecided at 1.0") was live and unwithdrawn, in direct contradiction to today's post-1.0 pool ruling — the precise orphan that resurfaces months later as "but we booked that for 1.0."
- [ ] Rulings become first-class —
ruling_issued/ruling_supersededtyped ledger events; arulingverb; the handoff Settled section and per-decision operator-ruled/agent-chose attribution as rendered projections; the campaign body as a rendered Layer-3 view; supersession fail-closed on orphaned rulings. Sibling: GHI #611. Diagnosis: nothing in gzkit represents the state "settled" — 60+ typed ledger event kinds, no ruling event — so settled decisions are re-derived, and re-deriving is re-adjudicating. § Rulings Register is the manual stand-in until this lands. AMENDED 2026-09-24 (operator-ratified): a ruling that stays, relaxes or retargets an existing enforcement names the sites it governs, and those sites resolve against the ruling mechanically. A ruling that names no enforcement site is unaffected. Until this lands, a dated manual census stands in. See § Amendments 2026-09-24.
Movement E — The external forcing function (carried by ADR-0.38.0; created 2026-08-17)
§1 declared this a Movement on 2026-07-18 — "One external forcing function is a Movement, not a nicety" — and §6 never created one. For two months the §5 gate "one external forcing function exists" was the only 1.0 gate no Movement tracked, which is Movement C item 162's own family ("Layer X declares a discipline that Layer X does not mechanically enforce") reproduced in the plan that names it. Closed by operator ruling 2026-08-17: "add the flight-test checkbox to §6."
Internal sequence: vocabulary before sortie (operator ruling 2026-08-17, verbatim: "sequence the vocabulary box before the sortie box"). Item 3 is blocked on item 2, on the same reasoning as Movement B's calibrate-before-widening: §5 requires a non-gzkit substrate, not a non-Python one, so a sortie flown while
CANONICAL_STEP_COMMANDSis stilluv/ty/unittest/mkdocswould pass the gate's letter and prove almost nothing — a vacuous pass, the empty-seam-map failure one Movement over.Sequenced LAST as a consequence, not a preference.
ADR-0.38.0follows0.35.0/0.36.0/0.37.0under ADR-order-is-absolute — operator verbatim 2026-08-17: "Wait for ADR-0.38.0 in strict order." Accepted cost, on the record: the forcing function certifies rather than informs — the ~25 OBPIs queued ahead of it are built on internal judgment, and external signal arrives ≈95 days out at the observed OBPI rate.
- [ ] 1.
ADR-0.38.0authored — portability plus theflighttestverb. Not authorable untilADR-0.37.0lands; do not pull ahead. - [ ] 2. THE VERIFICATION VOCABULARY MOVES TO THE PROJECT BEFORE ANY SORTIE FLIES. (Sequenced ahead of item 3 — operator ruling 2026-08-17: "sequence the vocabulary box before the sortie box." Same convention as Movement B item 0.)
CANONICAL_STEP_COMMANDS(src/gzkit/arb/validator.py) isuv/ty/unittest/mkdocs, so a non-Python project cannot produce a canonical receipt. Done means: declared in project config, locked at first use, drift-detected exactly as now,RETIRED_STEP_COMMANDShistory preserved. - [ ] 3. Fly S1 against a non-gzkit substrate — the §5 gate. BLOCKED ON ITEM 2, and the block is the point: §5 says non-gzkit, not non-Python, so a sortie flown before item 2 lands would satisfy the gate's letter against a Python substrate while proving almost nothing about portability — a vacuous pass in the exact shape of the empty seam-map, where a fail-closed decision over an empty input set returned PROCEED (
ADR-0.37.0§ Intent).docs/flighttest/manifest.mdS1 ("Cold Start & Spine", 17 ordered test points with expected black-box observables) is authored and 0 of 6 sorties have ever flown;gz-flighttestships as a skill with templates and no code. Done means: sortie flown on a substrate whose verification vocabulary is not gzkit's, black-box evidence collected, squawks filed, the sortie recorded to L2. The debrief is an input to the remaining Movements, not a closing formality.
Housekeeping (not a Movement, but tracked so it stops being invisible)
- [x] ADR-0.44.0-vendor-alignment-codex was Pending, partly landed, and tracked by no campaign edition. RETURNED TO POOL 2026-08-08 as ADR-pool.vendor-alignment-codex (GHI #773). Operator ruling, verbatim: "this was originally an agent overeach. this either becomes 0.36.0, revert to pool, or we just ignore/deleted the implemented code - I won't be paralyzed in purgatory." (spelling preserved).
- Pool, not 0.36.0, and not deletion. The overreach was the numbering, not the work: the implemented Codex surface is real, in use, and stays — only the unsanctioned REQ/OBPI structure retires. Renumbering to 0.36.0 would have re-asserted it as a sanctioned in-sequence feature, the opposite of what "overreach" means, and no governed renumber path exists (gz migrate-semver is a bare-id→slugged-id backfill recorder; gz adr promote --semver requires a pool source). Deleting the code would have destroyed working capability. Demoted with --on-collision take-demoted, so the pool file carries the evolved content rather than the 2026-03 intake. The 6 OBPIs are parked and released on re-promotion.
- Three defects blocked this and were fixed first (a98c482f7 and successor). GHI #774 — park is a two-sided protocol with one side never exercised (371 obpi_parked, 0 obpi_unparked), so these OBPIs read parked under a live ADR; parkable_children would have skipped them, emitting zero park events while rmtree deleted every brief, with the orphan census (which excludes parked OBPIs) reporting nothing. GHI #775 — neither collision policy could return an ADR that had been worked, and this one had diverged from its intake by 139 insertions / 140 deletions. Third, found by executing it: 36 @covers decorators named REQs in the briefs being deleted, and @covers validates at import, so the suite stopped loading. gz adr demote now refuses that shape unless --force, and strips promoted_from and retitles the H1 so a demoted file reads as the pool ADR it has become.
- The residual is honest: the Codex tests keep running and keep asserting the behaviour; what was discarded is REQ-to-test traceability for an OBPI whose coverage was already attested at Gate 5. That was the price of retiring an overreached structure, taken deliberately rather than by omission.
Movement F — One config system (created 2026-09-20; carries the § 5 config gate)
Operator ruling 2026-09-20, verbatim: "gzkit lacks a comprehensive and all-encompassing config system like airlineops had, we need to adopt this as a pre-requisite for 1.0. this is inexcusable. there are so many janky and undocumented rules, thresholds and pseudo-settings handing around gzkit. it is a travesty" (spelling preserved).
A § 5 gate with no Movement is the defect this plan already closed once. Movement E was created 2026-08-17 for exactly that reason — the forcing-function gate had gone two months untracked, which the plan itself named as Movement C item 162's family reproduced inside the plan. This Movement is created in the same amendment as its gate so that never recurs.
The shape is named, not invented.
../airlineops/config/is the operator's own prior art and states five principles: single entry point (settings.jsonis THE config; all code callsload_settings()), categorical subdirectories, no parallel systems, config is not documentation, no duplication (each value has ONE authoritative location). It is governed there byADR-0.0.22with a declared merge order — packaged defaults, then project settings, then optional local overrides.What gzkit has instead, measured 2026-09-20 and re-runnable via
config-derivation-2026-09-20-evidence/census.py: 45 registries underdata/, each resolving its own path;src/gzkit/config.py(279 lines, five Pydantic models) governing none of them; 19 of 45 with no traceable derivation; and 56 numeric policy constants insrc/gzkitmodule bodies, whichdata/config_registry.jsoncannot reach because it declares itself exhaustive overdata/*.jsononly. Five policy names already have two homes, two of them disagreeing.What was already built, so it is not rebuilt. GHI #929 produced
data/config_registry.json, which fail-closes on an undeclared registry and verifies each declared owner actually reads the file. That is the ownership half and it works. The loader, coherence and derivation halves are what this Movement owes; #929's own title named the first two and it closed without them.ADR ORDER IS ABSOLUTE and this Movement is behind four feature ADRs (operator ruling 2026-08-16, verbatim: "i will NOT go out of adr order, whatsoever.").
ADR-0.35.0,0.36.0,0.37.0and0.38.0are authored and unlanded, so the config ADR isADR-0.39.0and is not drawable until they land. Stating the consequence plainly: this gate makes 1.0 later, and § 5's target has been moved to fund it: ≈2027-04 → ≈2027-08, by operator declaration 2026-09-20. The date moves by declaration, never by slippage (§ 5, re-cut 2026-08-17), and this is the declaration.
- [ ] Author the config ADR as
ADR-0.39.0, in strict ADR order, modelled on../airlineopsADR-0.0.22's five principles rather than designed from scratch. Operator-initiated only (IRON LAW). Not drawable until0.35.0–0.38.0land. - [ ] Single entry point and one loader. One
load_*()call site contract that every consumer uses, with a declared merge order. Done means no module resolves a config path of its own. - [ ] The 56 module constants are brought in or justified. Each either moves into the config surface or records why it is an implementation detail rather than a setting. The census names them; the population is the acceptance boundary.
- [ ] Every value records its authority. The convention already exists and two
registries honour it —
complexity-thresholds.jsoncarries acitationheld bygz validate --complexity-doctrine-links,instructions_files_budget.jsoncites a decision-history doc. GHI #1065 is the narrow instance (SKILL_BODY_MAX_LINES); this box is its general form. - [ ] A coherence gate — no concept with two homes. Today
DEFAULT_MAX_REVIEW_AGE_DAYSis 90 in two modules and agrees by coincidence, whileDEFAULT_MAX_OUTPUT_CHARSandDEFAULT_TIMEOUT_SECONDSeach differ across their two homes with nothing reconciling them. Done means a check fails when one concept acquires a second home, not that a human noticed.
7. Post-1.0 — the pool→feature release line¶
Operator ruling 2026-07-18: the pool backlog does NOT gate 1.0. The ~23 unstarted
foundation ADRs that ADR-0.34.0 demotes to pool are feature-shaped and become the
0.35+ release line after 1.0, promoted pool → feature one at a time with executable
proof, each through the airlock.
Rationale, on the record: ~23 pool ADRs × ~5 OBPIs ≈ 115 OBPIs. At the observed feature rate that is quarters, not weeks. Booking them pre-1.0 is what made 1.0 recede.
Known pool set (post-Sunset): pool-management · pool-dag-promotion · pool-triage ·
systematic-debug · validation-pipeline · milestone-maintenance · artifact-staleness ·
validator-remediation · package-import · closeout-defect · prior-art-sensitivity ·
harness-fitness · harness-factoring · afk-diagnosis · deterministic-state · and the
remainder enumerated by the capstone. Plus ADR-pool.rag-anything-governance-retrieval
(RECALL) and ADR-pool.hexagonal-folder-structure-realization.
8. Authority & amendment¶
Living: items check off with command evidence. Amendments are operator-ratified, recorded
with the operator's verbatim words, and appended to § Amendments — never interleaved.
The campaign rules sequencing; handoffs and triage advise. ADR, OBPI, and GHI repair
remain the primary propellants; this plan sequences them, never substitutes for them.
No work stream runs outside it except emergency-labeled interrupts.
New (2026-07-18): a successor edition MUST carry § Rulings Register forward with every ruling explicitly carried or withdrawn. Hand-picking "live threads" is what orphaned ~74 of the 06-10 edition's 77 amendment blocks.
9. Rulings Register (carried forward — the anti-orphaning mechanism)¶
Every ruling from the superseded editions, explicitly dispositioned. CARRIED = binding today. WITHDRAWN = no longer steers, with reason.
| Ruling | Origin | Disposition |
|---|---|---|
| Never-relax floor + enforcement-claim rule | 06-30 §5 | CARRIED → §4 |
| Ledger + fail-closed human attestation is the irreducible moat | 06-20 §2a | CARRIED → §1, §4 |
| Reduction mandate — shed toward superpowers-lightness | 06-20 §2a | CARRIED → Movement C |
| Reductive moves wait for post-1.0 | 06-10 sequencing | WITHDRAWN 2026-07-18 — deadlocked against the line above; accretion was blocking 1.0 |
| "The facade is drained" as an unbounded gate | 06-30 §8 | WITHDRAWN 2026-07-18 — replaced by the dated census bound in §5; had no terminal state |
| Adoption is not a 1.0 gate | 06-30 §1 | CARRIED, amended — still not a gate, but one flight-test sortie is now a §5 gate |
| Four airlocks + MX granularity + intent hierarchy | 06-20 §3 | CARRIED, amended 2026-09-25 → §3. The modes and MX granularity stand; independent product requirements replace REQ ownership beneath OBPI, with bounded assignments referencing applicable requirement states. |
| Versioning: feature=minor, MX=patch, contract-change=patch+AD | 06-20 §4 | CARRIED → §3 |
Severity ladder = Python logging + NOTICE (not kernel 0–7) |
06-21 amendment | CARRIED |
| OKF/CMS documentation-knowledge orientation layer | 06-23 amendment | CARRIED — delivered ADR-0.30.0 |
| Harness loop-engineering + OKF notes are advisory sidecars, not steering surfaces | 06-23 amendment | CARRIED |
| Airlock seated as a distinct Movement | 06-23 amendment | CARRIED — delivered ADR-0.33.0; extended by Movement B |
| Re-sense needs a computed graph; AIRLOCK-IN/OUT realize keel-up together | 06-30 Movement III pivot | CARRIED — delivered ADR-0.31.0/0.32.0/0.33.0 |
HULL substrate = tree-sitter + networkx (GO-attested); graspologic stripped |
07-05 withdrawal-of-departure | CARRIED |
| One unified HULL ADR (not a 3-ADR constellation) | 07-05 operator ruling | CARRIED — delivered ADR-0.32.0 |
Taxonomy = partition, not flatten; foundation frozen-historic and closed |
07-05 amendment | CARRIED → §3, Movement A |
| The taxonomy migration is pre-1.0 | 07-05 amendment | CARRIED → Movement A |
| Hexagonal is the primary code-architecture directive | 07-06 amendment | CARRIED → §3 |
Hexagonal seated in DDD→HA→BDD→TDD; domain = ontology, core/ stays, no folder cosplay |
07-06 amendment | CARRIED → §3 |
Foundation Sunset realized as ADR-0.34.0; three-class partition from L2 ledger truth |
07-12 amendment | CARRIED → Movement A |
ADR-0.0.65 reached Validated (corrects the stale 1/5 reading) |
07-15 amendment | CARRIED — superseded by live state; 0.0.72 is also Validated 3/3, correcting the stale "0.0.72 (1/4)" in the 06-30 edition |
| Movement V seated as TOPMOST | 07-18 amendment (06-30 ed.) | WITHDRAWN same-day — mis-sequenced ahead of a capstone one step from executable; re-seated as Movement D |
| GHIs are authorized for direct repair, always | operator canon | CARRIED — AGENTS.md corpus |
| Never create feature branches; work on main | operator canon | CARRIED — AGENTS.md corpus |
| Human attestation is sacrosanct; no TTY/PTY excuse | operator canon | CARRIED — §4, AGENTS.md corpus |
| Correction vs enhancement — unmet intent is a correction | operator canon | CARRIED — AGENTS.md corpus |
Session 2026-08-17 — the architecture-review disposition (twelve numbered rulings, registered as fifteen rows — one operator turn can carry several separable rulings, and a consequence that binds in its own right earns its own row. Full text and reasoning at § Amendments 2026-08-17 A–G, where the numbering 1–12 is authoritative. Registered here in the same session they were taken, because a ruling that lives only in an amendment block is exactly what §8 says orphaned ~74 of the 06-10 edition's 77.)
| Ruling | Origin | Disposition |
|---|---|---|
| 1.0 is both stations of §1 — a complete and contemporary toolkit; public product and personal toolkit. Scope negotiable per item; the standard is not | 08-17 interview (A.1) | CARRIED → §1, §5 |
| The five contemporary-stack layers are built properly, not thinly: harness portability · foreign skills · MCP/tools · agent+session identity · eval | 08-17 interview (A.2) | CARRIED → new §5 gate |
| Nothing comes out of 1.0 to fund the above — the standard is not negotiable, the calendar is; target ≈2027-08 by declaration, never by slippage (moved from ≈2027-04 by operator declaration 2026-09-20 to fund Movement F) | 08-17 interview (A.3) | CARRIED → §5 re-cut header |
§5's FINITE is qualified to finite against a declared target — bare FINITE would assert a boundedness the enlarged gate set no longer has |
08-17 (A.3 consequence) | CARRIED → §5 header + blockquote |
The external forcing function is a gate in strict ADR order, carried by ADR-0.38.0; no exception to ADR-order-is-absolute. Accepted cost: it certifies rather than informs |
08-17 interview (B.4) | CARRIED → Movement E |
| Execution layer is hybrid — adapter by default, runner only for integrity gates. gzkit invokes the cross-vendor reviewer itself; a self-summoned adversary is not an adversary. Full orchestration declined | 08-17 interview (B.5) | CARRIED → §5, README narrowing owed |
| Step 4b is mandatory and unconditional before Gate 5 on OBPI completion — no lane, kind, sensitivity, or sampling exception | 08-17 interview (B.6) | CARRIED — restates ADR-0.36.0 § Intent |
| Step 4b does not extend to GHI direct-fix / MX work — OBPIs are new intended behavior; a GHI is repair, "akin to an airworthiness directive". 4b is QC for new feature work | 08-17 interview (B.6) | CARRIED — was already canon at ADR-0.36.0 § Intent ("step 4b is just for obpi feature work"); re-asked in error, registered so it is not asked a third time |
| Movement D absorbs the orientation problem — a handoff is an advisory shift-change orientation; re-adjudication and mis-orientation are one defect with one mechanism | 08-17 interview (C.7) | CARRIED → Movement D |
Simultaneity substitute is a + b + c — operator is the overlap · ledger is the overlap · time-inverted overlap. Position Relief Checklist becomes a per-project schema-validated artifact. Handoffs are advisory/informative only and gate nothing; gz git-sync is never gated and is always permitted first after a handoff |
08-17 interview (C.7) | CARRIED → Movement D; git-sync arm restates ADR-0.37.0 BI #5 |
prosthetic ≈ synthetic memory — one concept, two names; settle one term (PRD § Ubiquitous Language) |
08-17 interview (D.8) | CARRIED — capture owed |
The airlock is not a verification gate — awareness + synthetic memory, orientation, contamination watch, disturbance monitoring; it and the handoff cooperate. Three of four purposes appear nowhere in ADR-0.33.0; cooperation is refinement, not drift, already designed at OBPI-0.37.0-05 |
08-17 interview (D.9) | CARRIED — supersedes the review's defer-the-airlock recommendation; capture owed to AGENTS.md § Operator Doctrine |
The campaign-narrative guard was never written — the adversarial_validation record for OBPI-0.33.0-06 cites a test that does not exist. Added to Movement D scope; the false L2 record stands unretracted |
08-17 interview (E.10) | CARRIED → Movement D |
| Movement E is created — §1 declared the forcing function a Movement on 2026-07-18 and §6 never made one | 08-17 interview (F.11) | CARRIED → §6 |
| Movement E internal sequence is binding: vocabulary before sortie. §5 says non-gzkit, not non-Python, so a sortie flown first is a vacuous pass — the empty-seam-map failure one Movement over | 08-17 interview (G.12) | CARRIED → Movement E items 2, 3 |
Two rulings above overturn recommendations in the review that produced them, and both are registered as such rather than quietly dropped: the airlock is not deferred (D.9), and
ADR-0.36.0OBPI-09 is not dropped (§ Corrections). The review's five layer-parity findings survive unchanged — they rest on measured absence (grep, ledger, registry), not on ADR prose.
9a. Recovered from the 06-10 edition (dispositioned 2026-07-18)¶
The 06-30 edition claimed 06-10 carried "77 amendment blocks." Counted: 17 (plus 4 scope decisions and a goal-state). The "77" was itself an unverified number this campaign had been repeating. All are dispositioned below — none left undefined.
| Ruling (06-10) | Disposition |
|---|---|
| "we don't direct edit AGENTS.md; the CMS must be near-top priority" (06-10) | CARRIED — AGENTS.md is corpus-rendered; the 2026-07 corpus-derivation work is this |
Buetow practices adopted → ADR-0.0.70 (06-12) |
CARRIED — delivered, Validated |
| Firewall foundation ADR — classify every delivered surface by destiny (wheel-borne / authored-into-battlefield / lab-only-jig); "the rigging and jigs do not remain attached to the fuselage" (06-14) | CARRIED — UNDELIVERED. No Firewall ADR exists. Load-bearing for §1's "public product" trajectory: today an adopter inherits the lab jigs. Booked as a Movement C box. |
Constitution as enduring root; tree ordered by stability gradient — Constitution → PRD → ADR → OBPI; the legacy PRD → Constitution spine is backwards (06-14) |
CARRIED, amended 2026-09-25. Constitution → PRD product grounding stands. §3 now distinguishes independent durable requirements from bounded assignments; the old linear tree is no longer the rendering target. All-surface reconciliation remains owed in Movement C; catalog/runtime migration is unimplemented and receives no schedule or new completion condition from this amendment. |
| CMS ↔ hierarchy coupling; disclosure tier ∝ inverse volatility (06-14) | CARRIED — realized as progressive disclosure + the always-injected router |
Dispatch drift-guards #617 (CLI handler resolution) / #618 (validate() scopes) (06-14) |
CARRIED — #618 → Movement C; #617 status unverified, folded into that box |
| Governance-friction drainage empowered to the campaign; file the GHI in the moment of discovery (06-14) | CARRIED — now AGENTS.md § Defect-fix routing |
| Turn-end claim-grounding gate #620 → E.6 (06-14) | CARRIED — delivered, ADR-0.0.70 Stop hook, commit d83db8a2 |
| Pure-A reconciliation of the off-campaign 0.0.65/0.0.72 session (06-14) | SUPERSEDED by live state — both are Validated (5/5 and 3/3) |
| Pydantic schema-enforcement of fillable artifacts; frontmatter is rendered + hands-off (06-15) | CARRIED — the hands-off half is AGENTS.md § Never #8; the enforcement half (GHI #615, 597/600 briefs on LegacyBriefShape) is still OPEN |
| Compliance-strength family; direct-fix moratorium stands as default (06-15) | WITHDRAWN — superseded by operator canon "GHIs are AUTHORIZED for direct repair, always" and the 2026-06-01 anti-reflexive-GHI moratorium |
Airlock North Star; gz-obpi-pipeline is the proven reference implementation → E.7 (06-16) |
CARRIED — delivered ADR-0.33.0; extended by Movement B |
| Work-phase theories are a 1.0 completion gate (06-17) | CARRIED — discharged by OBPI-0.33.0-06 |
| The heap reckoning — "don't forget what a garbage heap gzkit has evolved into" (06-19) | CARRIED → §2, and corroborated again by the 2026-07-18 measurements |
| Sanity Reduction track — completion-before-reduction overridden for named, parity-proven cuts BEFORE 1.0 (06-19) | CARRIED → Movement C. Note: this already overrode the reduction deferral in June; the "reductive moves wait for post-1.0" line that deadlocked 06-30 was therefore contradicting a ruling that predated it |
ADR-0.0.74 MX seated as topmost P0 (06-20) |
CARRIED — delivered, released 0.29.0 |
| Scope decision #1 — "Full pool build-out. All 139 live pool items … to a terminal disposition. No item left undecided at 1.0." | WITHDRAWN 2026-07-18 — directly contradicted by today's ruling that the pool backlog is the post-1.0 release line (§7). This is exactly the orphan that would have resurfaced later as "but we booked full pool build-out for 1.0." |
| Scope decision #2 — Canon Foundation workstream booked into 1.0 | WITHDRAWN — foundation is a closed kind (§3); the workstream's live content routes to pool/feature |
Scope decision #3 — per-ADR done-bar is Validated or operator-parked |
CARRIED |
| Scope decision #4 — in-flight first, then MOTD | WITHDRAWN — MOTD never shipped and is not in §5; superseded by the current Movement order |
| 06-10 goal state (census 100% terminal · MOTD shipped · Canon Foundation Validated · #519 closed) | WITHDRAWN — superseded wholesale by §5. MOTD and the census-terminal bar were unbounded gates of the same class §5 exists to retire |
Archive¶
build-to-1.0-campaign-2026-06-30.md— predecessor (554 lines). Superseded 2026-07-18. All 10 of its amendment blocks are dispositioned in § Rulings Register (verified by count, not asserted).build-to-1.0-campaign-2026-06-20.md·build-to-1.0-campaign-2026-06-10.md— retained for audit.
Orphan recovery: complete, not deferred. The 06-10 edition's rulings — orphaned when 06-20/06-30 superseded it naming only three live threads — were recovered in-session on 2026-07-18 and are dispositioned in § 9a. Counted 17 amendments + 4 scope decisions + a goal-state; the "77 amendment blocks" this campaign had been repeating was an unverified number. No ruling from any edition is now undefined.
Amendments¶
2026-09-29 (latest) — corrections to a Validated ADR are exempt from strict ascending order (operator-ratified)¶
Operator (g0), verbatim: "Exempt corrections (Recommended)" (ruling docket, 2026-09-28, GHI #871),
then, choosing how to carry it, "canon plus campaign" (2026-09-29).
The collision this resolves (GHI #871). A correction whose owning ADR is Validated cannot be
appended to it (the settled re-homing ruling), so it re-homes to a feature ADR; strict ascending
order then withheld every feature slot above the in-flight one, and planned Movements already book
those slots by subject (ADR-0.38.0 Movement E, ADR-0.39.0 config, ADR-0.40.0 amendment verbs).
Two Critical/High handoff_api.py findings from the 2026-08-23 tech-debt dossier had no permitted
home. Operator doctrine names what they are: "discovering that more is needed to fulfill the intent
of a feature is not an enhancement, it is a correction."
What changes.
- Strict ascending order binds new-design work only. Residual scope re-homed from a
ValidatedADR, because its shipped surface does not fulfill its declared intent, takes the next unallocated feature semver at authoring time and may be authored and worked ahead of the in-flight ADR. - Canon carries it, not this plan alone. The ascending-order ruling says "The campaign selects
work but cannot override that order", so the exception is written into the ruling itself, at
every skill that carries it verbatim (
gz-obpi-pipeline,gz-adr-create,gz-design,gz-plan,gz-status; carried there since 2026-09-17, GHI #921). The AGENTS.md corpus records the amended wording in its history. This entry is the campaign's half. - § Amendments 2026-09-27 (3) is superseded where it says ADR order stays absolute "with no
exception" — for corrections to a
ValidatedADR only. Its ADR-WORK-FIRST sequencing is otherwise unchanged.
What does not change. New-design feature ADRs stay in strict ascending order; ADR-0.35.0
remains TOPMOST. Only the operator initiates OBPI work (IRON LAW), so a correction ADR is authored
and drawn when the operator initiates it. Booked slots keep their owners. Defects in hand are still
fixed immediately under AGENTS.md § PRIME DIRECTIVE, and a GHI still authorizes direct repair —
this exception is for residual that genuinely needs an ADR, not a route around direct fixes.
Next concrete action (operator-initiated): re-home the two handoff_api.py findings
(governance-resume-contract-not-mechanized, governance-time-only-staleness,
.gzkit/audits/tech-debt/2026-08-23/findings.json) into a correction ADR at the next unallocated
feature semver, parented on ADR-0.0.65-handoff-system-consolidation.
2026-09-27 (3) — ADR WORK FIRST: feature ADRs in ascending order ahead of Movement C refactoring (operator-ratified)¶
Operator (g0), verbatim:
no, we have campaign plans to fix this, so until it is fixed, I don't want to break how gzkit currently works. this makes it clear ot me that we need to get going on adr work in the campaign. get these all made, then go back to other refactoring
Asked which reading applied — (A) ADR work in ascending order comes first and Movement C refactoring waits; (B) only author the queued ADRs now, then return to refactoring; (C) run both side by side. Operator, verbatim: "A, ADR work first, record it".
What changes.
- The work drawn is feature ADR work, in ascending order:
ADR-0.35.0(TOPMOST) →ADR-0.36.0→ADR-0.37.0→ADR-0.38.0→ADR-0.39.0→ the amendment ADR funded by § Amendments 2026-09-27 (2). Movement C's refactoring boxes (the doctrine-declared-without-mechanism family, surface mirroring, oversized modules and the rest) resume after this sequence. - The 2026-09-02 amendment is superseded where it placed Movement C's
Close the doctrine-declared-without-mechanism familybox at NEXT-IN-PRIORITY, directly behind TOPMOST. The 2026-09-15 drawn-work order is superseded to the same extent: it ranked work drawn at that position, and that position is now ADR work. The two entries stay in this file as the record of what was ruled then. - Pointers were added at the § Topmost block and the Movement C header so neither reads as current. Every other box, Movement and ruling is unchanged.
What does not change. Only the operator initiates OBPI work (IRON LAW); ADR work
proceeds as the operator initiates it through gz-obpi-pipeline. ADR order stays absolute,
with no exception (§ Amendments 2026-09-27 (2)). Defects found in flight are still fixed
immediately under AGENTS.md § PRIME DIRECTIVE; this ruling governs which planned work is
drawn, not whether a defect in hand is repaired. The pre-1.0 DDD-discipline R&D run
(§ Amendments 2026-09-27) is operator-invoked and is not resequenced by this entry.
2026-09-27 (2) — an ADR amendment verb family is funded as pre-1.0 ADR work, in ascending order (operator-ratified)¶
Operator (g0), verbatim, signing off the R&D run
docs/rnd/design-amendment.md:
fund it, pre-1.0, we need it now. I have no idea what to do with it - we are stuck (and this has plagued me the entire gzkit run) keeping in sequence.
And on sequencing, verbatim:
no, we have campaign plans to fix this, so until it is fixed, I don't want to break how gzkit currently works. this makes it clear ot me that we need to get going on adr work in the campaign. get these all made, then go back to other refactoring
What is funded. A heavy-lane feature ADR for an ADR amendment verb family: revising an
attested design without a new ADR or a reopened one. An amendment rides with its original
ADR, adds new REQs without changing the old ones, retires the old ones by an attested
ledger event, is verified by an adversary sized to the change, and ships as a mandatory
patch release. The run record carries the design decisions (Q1–Q10), the open design
questions, and the prior art the ADR must reconcile: ADR-pool.adr-amendment-tracking,
gz obpi supersede, GHI #611, and the 2026-09-25 grounding pivot's "Amendments are new
contract versions." Its first use is gzkit's own ADR-0.0.32: in an adopter repo,
gzkit's shipped tooling is gzkit's and upgrades overwrite adopter edits.
AGENTS.md § Architectural Boundaries 1 is answered for this ADR only. The rule,
verbatim: "Do not promote post-1.0 pool ADRs into active work." The operator's ruling,
verbatim: "fund it, pre-1.0". The pool ADR it absorbs is therefore not post-1.0 work.
Placement: no exception to ADR order. The ADR takes the next feature ADR number in
ascending order (after ADR-0.39.0 as the queue stands) and is authored and completed in
turn. The 2026-08-16 ruling "i will NOT go out of adr order, whatsoever" and the
2026-09-20 ruling "I will not complete adrs out of order" stand unchanged. The agent had
recommended a named completion-order exception; the operator declined it.
Combined with the pool ADR; authored in turn. Operator, verbatim, the same day: "we
combine both uses of the verb - today's design and the pool's design." and, on whether to
author it ahead of the unauthored ADR-0.38.0: "Wait for 0.38.0". The ADR is
ADR-0.40.0 as the queue stands. It covers both mid-flight design changes
(ADR-pool.adr-amendment-tracking's subject) and amendments to attested designs, and it is
authored after ADR-0.38.0. No authoring exception is granted.
Scope of the ruling. No ADR is authored or booked by this amendment; only the operator
initiates ADR work. TOPMOST remains ADR-0.35.0.
2026-09-27 — an R&D run on DDD discipline is pre-1.0 work (operator-ratified)¶
Operator (g0), verbatim:
you keep the need for a DDD run in both a h/o AND in the magna carta. I am NOT waiting for post 1.0 for that.
Pocock's CONTEXT.md system is good and worthy of appropration. He must have some naming convention for them, this is highly worthy of appropriate during the DDD design makeup.
Earlier the same session, verbatim: "I think a ball was dropped here where I am under the belief that our DDD use/discipline is as active as our TDD and BDD."
What was found. Recorded with citations in
docs/rnd/design-amendment.md (the R&D run that surfaced it):
- DDD's model arm is live:
.gzkit/rules/hexagonal-architecture.md§ The cascade binds DDD as stage 1 of DDD → HA → BDD → TDD, with the domain modelled as the ontology (ADR-0.32.0). - DDD's language arm has no mechanism. TDD has Gate 2 and
@covers, BDD has Gate 4 andfeatures/; ubiquitous language has no gate, validator or skill step. - Canon names two glossary homes and neither is built: PRD § 2.1 Ubiquitous Language
(17 terms, touched three times since creation on 2026-05-22), and the 2026-09-17 R&D
ruling's root
GLOSSARY.md, which rested on the false premise "no glossary surface" and was never created. - The DDD cascade design (formerly ADR-0.0.43) sits in the pool as
ADR-pool.ddd-domain-cascade, with all four OBPIs unbuilt.docs/governance/agent-contract-rationale.md:349still describes it as pinned bygz validatescopes, which is false.
What is adopted. An R&D run on DDD discipline is pre-1.0 work. It asks why the
language arm lapsed, where the glossary lives, how it stays current beside TDD and BDD, and
how it fits the hexagonal rule and the ontology. Its inputs include Pocock's CONTEXT.md /
CONTEXT-MAP.md convention and its naming, marked by the operator as worth appropriating.
The run is carried on the new R&D workflow front and, because it is the doctrine-side
arm's shape (a foundational discipline declared with no witness), it is an instance of
Movement C's Close the doctrine-declared-without-mechanism family box.
Scope of the ruling. Only the operator opens an R&D run (gz-rnd,
disable-model-invocation: true); this amendment schedules the need, not the run. It
creates no Movement, gate or queue position, promotes no pool ADR, and leaves TOPMOST,
ascending ADR order and operator initiation unchanged. Where a glossary lives, and
whether ADR-pool.ddd-domain-cascade is promoted, are that run's questions.
2026-09-25 — requirements have independent authority; briefs carry bounded assignments (operator-ratified)¶
Operator (g0), full message verbatim:
di it: "There is one substantive reconciliation we must address: §3 currently places REQs beneath OBPIs in the intent hierarchy. Adoption of this pivot requires an explicit amendment to that relationship and its governing surfaces. Adding a proposal link alone would leave the transition ambiguous"
The superseded §3 text, explicitly:
Intent hierarchy: Constitution → PRD (one per major) → ADR → OBPI → REQ → TASK.
What is adopted. Durable product requirements have authority and change history independent of any assignment. Constitution and PRD supply their product grounding. The catalog carries authoritative definitions; bounded mADR/ADR → brief/OBPI → plan/specification/tasks work references the exact applicable requirement states. Briefs retain their local acceptance criteria, promised contributions, boundaries and evidence references. mADRs retain decisions, rationale, scope and constraints. A brief can therefore present requirements, work and evidence together without taking ownership of the requirements.
Acceptance names its requirement state and product configuration. Completing a brief accepts its assigned contribution; whole-requirement satisfaction and actual release content remain separate claims. Changed needs do not rewrite prior evidence or acceptance. These ownership and claim distinctions reconcile §3 with the accepted grounding pivot. The session record retains the reasoning and alternatives; unselected mechanics remain proposals in the candidate record.
The transition is explicit. This is a doctrine amendment, not a claim that the catalog reader, schema, identity grammar, acceptance binding or migration already exists. Current legacy identifiers, parsers, proof paths and historical ledger subjects continue to govern execution until their replacements are implemented through the existing authorized routes. No catalog command or new proof channel is introduced by prose. The stability-gradient box and its carried ruling are reconciled to the amended relationship and remain open; changing this file does not complete all-surface or runtime migration.
Scope of the ruling. No new Movement, queue position or 1.0 gate is created. TOPMOST, ascending ADR order, operator initiation, existing gates and release rulings remain in force. This amendment authorizes neither the candidate pilot nor migration implementation, and adopts no capability hierarchy or identifier rename. IEEE and test review continue under their existing investigative scope.
Agent-contract retention review. A separate GPT-6 Sol reviewer extracted
the six relationships in the old root-contract chain and checked the author's
map against the generated candidate. Constitutional authority over ADRs,
ADR-to-brief assignment, current local REQ-to-TASK traceability and human
acceptance are retained; no other committed block is removed. The map records
two retired conditions: intent (PRD → Constitution, replaced under the
already-ratified Constitution-first ruling in §9a) and REQs (OBPI → REQ,
replaced by the ownership ruling above). The reviewer noted that these map IDs
were assigned after the operator's ruling. No new approval of those IDs is
claimed: the amendment relies on the already-booked substantive authorizations.
The persisted map is .gzkit/renditions/AGENTS.md/root.retention.json.
2026-09-24 — a ruling that stays an enforcement must name its sites (operator-ratified)¶
Operator (g0), verbatim: "C with the Movement D amendment", choosing among
the shapes GHI #1087 offered: a registry mapping rulings to sites, a resolvable
ruling-id citation convention, dated manual sweeps, or nothing.
GHI #1087 found that the 2026-08-17 control-surface budget stay was applied by hand, one site at a time. Nothing recorded where it bound, so the sweep could not be shown to be complete. GHI #1086 is the instance that got through: a test kept blocking Gate 2 for five weeks after the stay.
Now: a dated manual census, the cheapest of the four shapes. It is recorded in
docs/governance/instructions-files-budget-history.md § 2026-09-24 (2), and the
four stay-type rulings in the rulings store all concern control-surface budgets.
Movement D's Rulings become first-class box gains one requirement. A ruling
that stays, relaxes or retargets an existing enforcement names the sites it
governs, and those sites resolve against the ruling mechanically. Rulings carry
no identity today (a rulings-store row is ts, source and text), so both the
registry and the citation convention depend on the ruling_issued event this box
already plans. Building either before it would add machinery with nothing stable
to key on. A ruling that names no enforcement site is unaffected.
TOPMOST, ADR order and the operator initiation boundary are unchanged. This amendment authorizes no feature execution.
2026-09-20 — ADR ORDER IS EXCEPTED, once, for the config ADR (operator-ratified)¶
Operator ruling, verbatim: "logical keys, and author 0.39.0 now — I'll except ADR order".
This supersedes a ruling this plan calls absolute, and says so plainly.
§ Amendments 2026-08-16 records the standing canon verbatim: "i will NOT go out
of adr order, whatsoever." That ruling stands as the rule; this is a named,
single exception to it, granted by the same authority that made it. It is not
a repeal and not a precedent: ADR-0.35.0 remains TOPMOST, 0.36.0, 0.37.0
and 0.38.0 keep their places, and the next ADR authored out of order needs its
own exception.
What is excepted, precisely — and what is NOT. Operator, clarifying the same day, verbatim: "wait, I will not complete adrs out of order."
- EXCEPTED: authoring.
ADR-0.39.0may be written now, ahead of four authored-and-unlanded feature ADRs, so the design has a home and the OBPI decomposition exists. - NOT EXCEPTED: completion. ADRs still complete in ascending semver
order.
ADR-0.39.0lands after0.35.0,0.36.0,0.37.0and0.38.0, and no OBPI of it may be drawn or completed ahead of them.
Authoring is not working. The exception buys a written decision, not a place in the queue, and the IRON LAW is untouched — only the operator initiates OBPI work. An ADR authored out of order that then completed out of order would convert a one-line exception into the repeal the standing ruling forbids.
Why the exception was sought rather than routed around. The doctrine,
followed exactly, made the most urgent item wait longest: AGENTS.md §
Defect-fix routing sends runtime-contract work to OBPI, OBPI needs a parent ADR,
and ADR order put that ADR fifth. The agent had treated that as the operator's
problem and built only the additive fence; the operator named that as dodging.
The loader and the fences landed as direct repair under GHIs #1066 and #1067,
and what remained — the surface itself — genuinely needed an ADR. The exception
is what lets it be authored instead of deferred.
Addressing is ruled in the same breath: LOGICAL KEYS.
gzkit.registries.load_registry will address thresholds.audit, not
audit_thresholds.json. The design record argued both; keys win because every
reader migrates exactly once under the 2026-09-20 sequencing ruling, so the
rename is free at the cheapest possible moment, while filenames would have
encoded the pre-config layout permanently into the post-config API.
The design is already written and is the ADR's input.
config-surface-design-2026-09-20.md
places all 48 files, adopts the five ../airlineops/config principles verbatim,
and carries the four rulings of 2026-09-20 that scoped it.
2026-09-20 — the 1.0 target moves to ≈2027-08 by declaration (operator-ratified)¶
Operator ruling, verbatim: "move the date to 2027-08 and record the declaration."
≈2027-04 → ≈2027-08. The four months fund Movement F, whose work the original
§ 7 arithmetic never counted: that figure was ≈60 unlanded OBPIs at the
ADR-0.34.0-observed rate of ≈3.8 days each, computed before a config system was
a gate. Moved at § 5's header and at the § 9 Rulings Register row that carries the
same claim; the dated amendment blocks that quote ≈2027-04 are records of what was
true when written and are left unedited.
What the date is for, stated plainly because it is now fair to ask. It is not
a prediction and it was never load-bearing as one. § 5 was re-cut on 2026-08-17
because FINITE alone asserted a boundedness the plan did not have; the date
exists so that enlarging 1.0 costs something visible. The alternative the
operator rejected that day was shrinking the gate set — verbatim, "Nothing — move
the date instead." So the date is the ledger entry for scope: every gate added
has to be paid for somewhere, and this is where.
And the honest counter, recorded rather than left for a reader to notice. A date that absorbs every enlargement is not a bound, it is a cushion. This is the second enlargement: 2026-08-17 added five gates and moved the date zero months; 2026-09-20 adds one gate and moves it four. On that trend the mechanism describes scope growth rather than constraining it, and § 2's own diagnosis — gzkit has no external forcing function — would apply to the plan as well as to the product.
What would make the date bind rather than absorb. Nothing here does that, and no such mechanism is proposed by this amendment. The two candidates on the record are Movement E's flight-test sortie, which is the only § 5 gate that answers to something outside gzkit, and § 5's own untouched escape: "the standard is not negotiable, the calendar is" — which reads as licence to move the date forever unless something else is negotiable instead. Naming that hole is not closing it. It is the operator's to rule on, and this amendment deliberately does not.
2026-09-20 — one config system becomes a 1.0 gate; Movement F is created to carry it (operator-ratified)¶
Operator ruling, verbatim: "gzkit lacks a comprehensive and all-encompassing config system like airlineops had, we need to adopt this as a pre-requisite for 1.0. this is inexcusable. there are so many janky and undocumented rules, thresholds and pseudo-settings handing around gzkit. it is a travesty" (spelling preserved).
§ 5 gains a gate and Movement F is created in the same amendment. Adding a 1.0 gate without a Movement to carry it is the exact defect this plan closed on 2026-08-17, when the forcing-function gate was found to have gone two months untracked — "the only §5 gate no Movement tracked", which the plan named as Movement C item 162's own family reproduced inside the plan. Creating both at once is that lesson applied rather than restated.
The shape is the operator's prior art, not a fresh design.
../airlineops/config/ states five principles under ADR-0.0.22: single entry
point (settings.json is THE config, all code calls load_settings()),
categorical subdirectories, no parallel systems, config is not documentation, and
no duplication — each value has ONE authoritative location, with a declared merge
order of packaged defaults → project settings → optional local overrides. Movement
F adopts that shape; it does not re-derive it.
The measurement behind the ruling. Taken the same day at the operator's
question "how many other arbitrary and random rules do we have lingering?" and
recorded at
config-derivation-census-2026-09-20.md,
whose script carries no literals and reports whatever tree it is run against: 45
registries under data/, 19 with no traceable derivation;
src/gzkit/config.py governing none of them; 56 numeric policy constants in
module bodies that data/config_registry.json cannot reach, because it declares
itself exhaustive over data/*.json alone. Five policy names already hold two
homes, two of them disagreeing.
What is NOT rebuilt. GHI #929 produced config_registry.json, which
fail-closes on an undeclared registry and verifies each declared owner actually
reads the file. The ownership half works and stays. The loader,
coherence and derivation halves are Movement F's debt — #929's title named
the first two and it closed without them, which is why its class kept producing
(GHI #1064 and #1065, both this week).
Two consequences stated rather than left implicit.
- ADR order puts this fourth in line.
ADR-0.35.0,0.36.0,0.37.0and0.38.0are authored and unlanded, and ADR order is absolute (2026-08-16, "i will NOT go out of adr order, whatsoever."). The config ADR isADR-0.39.0and is not drawable until those four land. - This gate makes 1.0 later, and the date has not been moved. § 5's declared target of ≈2027-04 was arrived at by § 7 arithmetic that does not include this Movement. The 2026-08-17 precedent for enlarging the gate set is operator verbatim — "Nothing — move the date instead" — so the gate stands and the date is owed a declaration, which only the operator makes. It is recorded here as outstanding rather than silently adjusted: the date moves by declaration, never by slippage.
Sequencing is otherwise UNCHANGED. ADR-0.35.0 remains TOPMOST, Movement C's
family-closure box remains NEXT-IN-PRIORITY, Movements B, D and E are unmoved.
Movement F is created at the back of the ADR queue, not inserted ahead of anything.
2026-09-20 — THIS EDITION: the reckoning is re-measured and becomes a pointer; the zero-transits premise is retired (operator-ratified)¶
Operator ruling, selected from a four-option picker over how to repair the stale measurements: "New edition — full re-evaluation." The alternatives — amend with pointers, amend Movement B only, or hold and measure first — were declined in favour of a dated edition, following the 2026-08-16 precedent that a re-evaluation against the live tree earns its own identity.
What prompted it. The operator observed that the campaign was "a month old". The content was not: five operator-ratified amendments had landed since 2026-08-16, the most recent the same day. What HAD gone stale was the evidence — the plan's rulings were current while the measurements justifying its sequencing were 35 to 64 days old and had never been re-taken.
The finding that forced the edition. The 08-16 edition's sharpest argument
was "the sharpest finding is the number that did not move": airlock_in 23 /
airlock_out 5, zero transits, the ungoverned door widening while the governed
one stayed shut. Re-measured at this edition: 71 / 29. That premise is
retired. Movement B is NOT retired with it — the accounting gap grew from 18
unaccounted exits to 42, and fix still runs 40.1% of commits against 2.6%
feat — but B must be re-argued from the gap and the ratio, never again from the
counters.
What was re-tested and HELD. The 07-18 root-cause diagnosis — gzkit has no
external forcing function, and its only consumer is its own construction —
survives: feat was 2.9% of commits at 07-18 and is 2.6% now, across 252 more
commits. gz git-sync's share fell 47% → 30.3%, the one structural improvement on
the board. Oversized modules went 33 → 51 → 66, still the largest regression.
Sequencing is UNCHANGED at creation. ADR-0.35.0-canon-entry-corpus-landing
remains TOPMOST, Movement C's family-closure box remains NEXT-IN-PRIORITY,
Movement B remains behind them, Movement A remains HELD. A re-measurement is not a
re-sequencing, and no box moved on the strength of these numbers.
The reckoning is now a pointer. Its figures live in
reckoning-2026-09-20-evidence/reckon.py,
which carries no literals from its authoring date and reports whatever tree it is
run against. This applies the "Pointer, not value" ruling of 2026-09-20 to the
reckoning itself — the surface whose transcribed 19 of 32 survived 18 days
earlier the same week. Counting methods are stated in that directory's README,
including the glob that explains why the brief count reads 545 here and 659 at
08-16.
Supersession performed. data/active_campaign.json moves 2026-08-16 to
superseded and names this edition active; that list move IS the supersession,
never the banner. data/transcribed_count_surfaces.json is repointed in the same
commit — the coupling test added under GHI #1064 the same day fails closed if it
is not, which is the mechanism working on its first real supersession.
Carry-forward is total. Every box, movement, amendment and register entry from 2026-08-16 travels inline and in place. No § Rulings Register disposition pass is owed (§ 8, the 2026-07-18 rule).
2026-09-20 — the family-share premise is re-measured and VERIFIED; the transcribed figure becomes a pointer (operator-ratified)¶
Operator (g0), ruling on the options put to them: "Pointer, not value" — selected
over correcting 32 to 37 in place and over an amendment that left both live sites as
ratified.
Nothing is resequenced. ADR-0.35.0-canon-entry-corpus-landing remains TOPMOST and the
Close the doctrine-declared-without-mechanism family box remains NEXT-IN-PRIORITY. This
amendment changes how the box's evidence is cited, and records that its placement premise
was re-measured rather than assumed.
What was measured. docs/rnd/ghi-landscape-reorganization.md closed 2026-09-20 naming
one measurement it did not take: whether this family is genuinely shrinking in share. It
recorded 19 of 32 (59%) from this plan against 14 of 57 (~25%) from its own pass, and said
plainly that "two judgments by different readers are not a measurement." The measurement
was then taken on the operator's work selection and is recorded, with its method and a
read-only evidence script, in
f1-family-share-measurement-2026-09-20.md.
The premise is VERIFIED and is stronger than this plan claimed it. One reader, one criterion — the box's own, from GHI #537 — applied to both cohorts on one day: the family is 75.7% of the open queue on 2026-09-02 and 67.9% today, a 7.8-point share drift while the absolute stock grows 36%. Eleven borderline calls were carried and flipped in both directions; under every treatment the family is 57–81% of the queue at both dates and the count rises. Flow over the 18 days: 10 members closed, 20 filed. The box's own finding — instances close same-session, the class keeps producing — is confirmed and quantified at a 2:1 production rate.
The share decline is not discharge, and does not move the box. Share fell because the queue grew 51% while the family grew 36%; both grew. The faster-growing remainder is 18 issues across eleven other families, most with two to six members, which the R&D record found "wants a different mechanism" each and does not consolidate — it grows faster and cannot be drawn as one piece, so it does not compete for this slot.
The 2026-09-02 denominator was wrong by 5, and the numerator was sound. That pass is
reproducible because it stated its criterion and listed its 19 members; all 19 verify as
open at its measurement instant, pinned to #933's creation time. The open queue held 37
at that instant, not 32, and never held 32 on that date — it passed through 32 around
2026-08-25/26. The claim as written is 19 of 37 = 51.4%, not 59.4%. The section heading
it sits under, "Half the open GHI queue is this family", survives the correction; the
percentage does not.
Why the figure becomes a pointer rather than a corrected number. Replacing 32 with
37 would re-create the same defect one integer later, with nothing observing it — and a
transcribed measurement in live sequencing text, binding on what sessions draw, with no
witness over whether it is still true, is an instance of the very family this box exists to
close. The 2026-09-02 amendment block, capability-control-review-2026-09-12.md and the R&D
record are left untouched: each is a dated record accurately quoting what it found, and
editing evidence inside an archive falsifies it. The measurement record is their linked
follow-up. This plan already applies the same discipline to the ADR's landed count in the
same sentence; it now applies it to the family share beside it — AGENTS.md, verbatim:
"Cite the authority, not the value."
Limits, stated because they bound the claim. The criterion is a reading; only the cohort reconstruction and the arithmetic are mechanical, and the evidence script fails closed on three asserts rather than proving the judgment. The measurement cannot separate enumeration from creation — some of the 20 new members were filed by sessions working this campaign, which is filing working as Prime Directive 6 requires. If the production is largely enumeration, the class is larger than has been counted, which argues for the box more.
2026-09-19 — three-pillars repairs delivered; #1028 held (operator-ratified)¶
Operator (g0), verbatim: "ok, we need to hold off on 1028. update handoff, update campaign."
The selected three-pillars corrective work is delivered in cc5ed5bfa and
59c4af622; the ten repair GHIs closed with individual evidence. The
corrective delivery account
carries the repair inventory and verification. That delivery is separate from
GHI #1028's still-unobserved production comparison.
GHI #1028 is HELD at the operator's direction. Keep the issue open, but do not draw its observation work, request a new OBPI to discharge it, or treat a future qualifying run as permission to resume it. Resume only when the operator lifts this hold. The hold preserves the issue's evidence and exit requirements; it records neither completion nor cancellation.
The campaign's TOPMOST ADR-0.35.0, feature order, and operator initiation boundary remain in force. ADR-0.36.0 received draft reconciliation only; bounded advisory impact remains pooled and unbuilt. This amendment authorizes no feature execution.
2026-09-15 — drawn work rebalanced: R&D and the chore estate ahead of issue-by-issue repair (operator-ratified)¶
Operator, verbatim: "the rate at which new GHIs grow in gzkit far outstretches getting any feature work done. this is dismaying." Ruling on the options put to them: "A and C together". Ruling on this amendment's draft: "Ratify 1–3, rule 4 apart (Recommended)".
The measurement, dated 2026-09-15 — a record, not a threshold. Over 30 days, 207 issues
were opened and 176 closed; 44 are open. Over 14 days, 142 fix commits landed against 3
feat. One session that day closed one GHI and opened two. Re-derive with the GitHub search
API and git log --since='14 days ago' --format='%s' rather than trusting these figures.
Why the 2026-09-02 placement produced this. That amendment raised the family-closure box because it is "drawable without the operator". Every session could draw it, and GHI repair was the cheapest arm to draw. The same amendment observed that "instances close same-session, the class keeps producing." Without an order among drawable work, the producing class out-ran the R&D and chore work that the 2026-09-12 sessions designed.
What changed.
- Drawn-work order. At the NEXT-IN-PRIORITY position, work drawn without the operator is taken as: (a) the R&D front; (b) the chore estate — the conversion directive and the overdue board, which is the box's agent-side arm; (c) GHI direct repair, only when the GHI closes a named arm of the box, blocks (a) or (b), or is an emergency. The banner and the box carry this order.
- Handoff menus. A multi-session thread is carried as its own named line with a pointer to its design record. It is never compressed into one option listed beside short GHI fixes — the compression that reduced the 2026-09-12 R&D thread to "(d) R&D skill design" across nineteen handoffs.
- § Workflow fronts, R&D entry. Rewritten to name R&D as the headwater of most gzkit design and to point at its governing skill and records.
Item 4 is ruled apart and NOT enacted here. The draft proposed that a mid-session finding
which does not block the current work be recorded with gz insights remember rather than
filed as a GHI. That conflicts with canon a campaign amendment cannot override — AGENTS.md
§ PRIME DIRECTIVE #6: "Priority order for out-of-scope: file a GHI via /ghi-author …,
append to .gzkit/insights/agent-insights.jsonl, or note in the brief's evidence section" —
and with this plan's own 2026-09-02 finding that "filing is working exactly as Prime
Directive 6 requires." Ruled the same day, verbatim: "don't change anything about the
PD". Item 4 is withdrawn; Prime Directive #6 stands unchanged, and this question is closed.
What this does NOT license. No ADR is authored, and no OBPI is drawn, started or authored;
the IRON LAW is untouched. TOPMOST ADR-0.35.0 and ascending ADR order are unchanged. No GHI
is closed or deprioritized by label: an open GHI remains an authorized work order, and this
amendment orders only what a session draws on its own.
2026-09-02 — the doctrine-declared-without-mechanism box is pulled forward to NEXT-IN-PRIORITY (operator-ratified)¶
Operator ruling, verbatim: "pull the family-closure box forward, amend the campaign" — corrected in the same session to "forward in the queue, closer to next (topmost)".
The first pass over-read the ruling and the operator corrected it. The error is recorded here rather than rewritten away. As first written this block moved the box to TOPMOST and stepped
ADR-0.35.0down, displacing a position the operator had ratified the previous day (§ Amendments 2026-09-01) on the strength of a single direction word. Forward is a relative move: it does not name the top slot, and this plan's TOPMOST is one machine-read marker that another ruling already occupied. Landed wrong atdd2a8185and corrected in place, because the ruling is one ruling — a second amendment block for a clarification of the same instruction would be the re-adjudication this plan names as a disease (§ Amendments 2026-07-18). Recorded as animprovementin.gzkit/insights/agent-insights.jsonlper Behavior Rules — Always #11.
What changed. Movement C's Close the doctrine-declared-without-mechanism
family box is pulled forward to NEXT-IN-PRIORITY — directly beneath
TOPMOST, ahead of Movement B and ahead of every other box in its own Movement.
ADR-0.35.0-canon-entry-corpus-landing remains TOPMOST, unchanged from
2026-09-01. Movement B steps down one place. Movement A remains HELD as a
Movement.
A box outranking its own Movement is precedented, not novel. The 2026-09-01
amendment made Movement A's ADR-0.35.0 box TOPMOST in its own right while
Movement A itself stayed HELD. This is the same shape one position down: the box
moves, Movement C does not.
Nothing is removed and no ADR is resequenced. This box is not ADR work. Its
three arms discharge through rule-text amendment, scorecard scoring, and
GHI-shaped direct repair — and GHI repair is its own work order under operator
canon ("GHIs are AUTHORIZED for direct repair, always … the GHI is the work
order and the receipt"). Ascending semver is untouched: ADR-0.35.0 is still
the ADR the order selects and no higher-semver feature ADR may be worked ahead
of it (§ Amendments 2026-08-16 — ADR ORDER IS ABSOLUTE).
Why the box earns a position this high. It is drawable without the operator. Under the IRON LAW only the operator initiates OBPI work, so TOPMOST has never been able to cause a brief to be drawn; this box can be worked the moment a session opens. Placing it directly beneath TOPMOST is therefore the highest position that changes anything without touching what TOPMOST means.
The evidence, measured 2026-09-02 rather than asserted.
- Half the open GHI queue is this family. Of 32 open issues, 16 carry
the core shape — a witness whose subject is narrower than the claim it
carries — verified by reading each body rather than classifying off titles:
#766, #799, #803, #807, #810, #813, #849, #851, #888, #889, #894, #907, #919,
#922, #926, #933. Three more are the same family in a different key (a
declared mechanism that never fires or never schedules): #804, #808, #870.
19 of 32. #877 was examined and excluded — two witnesses disagreeing is
a coherence defect, not an unwitnessed discipline. Re-derive with
gh issue list --state open; the classification rule is the box's own criterion, so the next reader can check this rather than trust it. - The queue's growth is this family being enumerated, not a triage failure. Open stock was 9 on 2026-08-10 and is 32 today — a monotonic four-week climb of roughly 6/week net — while 179 issues closed in the trailing 30 days at a median age of 0.15 days. Instances close same-session; the class keeps producing. That is the box's own 2026-08-08 re-scope finding ("the six named issues all closed and the box did NOT discharge") reappearing one altitude up, and it is why filing discipline is not the remedy: filing is working exactly as Prime Directive 6 requires.
- The third state is rising, and the rise is predicted behaviour rather than
new drift. The criterion was ratified 2026-08-08 against 9 Promotable on a
91-row scorecard; 2026-08-16 recorded the rules arm regressing 0 → 8 when
.gzkit/rules/cli.mdwas scored for real. The live fenced Summary table now reads 30 Promotable, 0 Ambiguous across 157 scored rows. Most of that rise is surfaces measured for the first time landing in the forbidden third state — exactly what the 2026-08-16 amendment warned: "its completion criterion cannot be treated as converging while unscored surfaces remain." Read the live figure fromuv run gz validate --advisory-scorecard, never from this line.
The criterion is unchanged and no arm is dropped. All three arms still bind —
rules (every Promotable/Ambiguous row reaches zero by mechanization or by
amending the rule text; re-scoring alone is laundering), skill (still
unmeasured, which is not the same as passing), debt (mechanized, no new
work). The 2026-08-17 doctrine-side third arm stands with its residual stated as
it was: a general doctrine↔code witness is unbuilt, and gzkit does not today know
how to mechanize "this prose binds that code." Pulling the box forward
schedules the arms; it does not soften them.
What this does NOT license. No ADR is authored for this box — Architectural
Boundary 2 forbids adding pool ADRs to the runtime track, and the box is a
subtraction move, which is what Movement C is for. No OBPI is drawn, started, or
authored; the IRON LAW is untouched and ADR-0.35.0's undrawn briefs stay
undrawn until the operator initiates them. Whoever works this box states which
arm they are closing, per the box's own text.
2026-09-01 — the CMS / corpora / rendering work is TOPMOST; Movement B steps down (operator-ratified)¶
Operator ruling, verbatim: "i want this cms/corpora/rendering issue to move to the top of the campaign queue now."
What changed. ADR-0.35.0-canon-entry-corpus-landing — the CMS / corpora /
rendering work — is TOPMOST. Movement B steps down from TOPMOST to
next-in-priority. Movement A remains HELD as a Movement; its ADR-0.35.0 box
is now TOPMOST in its own right rather than the next work under ADR order.
This removes a split the plan had been explaining rather than fixing. From
the 2026-08-14 amendment onward, TOPMOST named a Movement that ADR order
forbade drawing ("ADR-0.37.0 is the THIRD of three open feature ADRs, so
Movement B is TOPMOST in priority and NOT pullable"), while the work actually
drawn every session was a checkbox inside a HELD Movement. Two amendments
were spent on that shape rather than on removing it: 2026-08-16 argued a
Movement can be "TOPMOST and gated", and 2026-08-23 corrected a § 6 header
that had drifted into calling the HELD Movement TOPMOST — drift that is the
predictable cost of a label pointing away from the work. TOPMOST now names
drawable work, and the label agrees with ascending semver instead of pulling
against it.
Nothing is resequenced and no box is removed. ADR order is untouched and
still absolute; ADR-0.35.0 was already the ADR the order selected, so this
amendment changes what the plan SAYS is topmost, never which ADR is worked.
Movement B's step-down is not a judgement on the airlock: the inertness measured
2026-08-14 and re-measured 2026-08-16 is unchanged and unaddressed, and Movement
B is drawn the moment ADR-0.35.0 and ADR-0.36.0 land.
Why the CMS work earns the position, measured 2026-09-01 rather than
asserted. The corpus is the declared SOURCE that AGENTS.md is generated from
(ADR-0.35.0 § Decision, SOURCE-OF-TRUTH DIRECTION, operator-ruled at
authoring), and the gap between that claim and the tree is where the open GHI
queue has been silting up:
- Four open GHIs strand on this ADR and nothing else — #921 (
.gzkit/rules/**uncorpused, fanning out to every generated nestedAGENTS.md), #922 (no trust audit shape-checks the Layer-1 corpus at all), #815 and #533 (the delivery-cap and budget pair). - Two of those four were queued behind a design that was CANCELLED. #533
states the 5k target unblocks when "ADR-0.0.37 … is fully landed … remaining
5 OBPIs deliver the registry-projection path", and #815's second remedy names
the same registry-projection migration. Those briefs are precisely
ADR-0.0.37's Abandoned set — the density-dial / registry-projection design retired on 2026-06-03 and replaced by corpus→compress→rendition→playback (OBPI-0.0.37-27§ Objective, Completed and attested)..gzkit/invariants/still holds four entries. Both issues have been waiting on work that was deliberately cancelled, and nothing on either issue said so. - The number moved the wrong way while they waited. #533 measured the
rendered root contract at 31,387 chars. Measured 2026-09-01:
wc -c AGENTS.md→ 46,876, against a 15,000 target, a 5,000 aspiration, and a 32,768-byte Codex delivery cap thatgz validate --instructions-files-budgetreports as three advisory warnings. Two must-survive sections are affected.
Landed into the ADR the same day, ahead of this amendment. ADR-0.35.0
§ Decision's binding fold algebra was amended (operator ruling: split the
retires / supersedes roles) and implemented — 6072792b, d4caa874,
closing GHI #873, which had been waiting on a ruling since 2026-08-24. The
checklist gained items 11 and 12 for #922 and #921 in d3ff4ae9, with the
Decomposition Scorecard moved on this ADR's own recorded rule that added scope
moves the BASELINE, never a split adder. Run
uv run gz adr status ADR-0.35.0-canon-entry-corpus-landing for the count; it is
deliberately not transcribed here.
No OBPI work was started and none is authored. Under the IRON LAW the
operator initiates OBPI work via the gz-obpi-pipeline skill. This amendment
and the checklist items give that work a home to be drawn from; they do not
draw it.
2026-08-23 — the § 6 Queue header labelled the HELD Movement TOPMOST; corrected¶
Operator ruling, verbatim: "correct stale header, then I'll decide. report back"
Recording under § 8 "living: items check off with command evidence" — not a
sequencing amendment. No box is removed, nothing is resequenced, no ruling is
carried or withdrawn. Movement B remains TOPMOST and gated, Movement A remains
HELD, and ADR-0.35.0 keeps the in-flight feature position as the next work.
What was false. The § 6 Queue header for Movement A read "(TOPMOST; forward engine; closes a kind — reductive)". Every other site in this plan that names the pair says the opposite — the § Topmost line ("AMENDED 2026-08-14 — Movement B is TOPMOST; Movement A is HELD"), the 2026-08-14 amendment that made the move, and each entry after it recording "Movement B remains TOPMOST, Movement A remains HELD." The 2026-08-14 amendment moved Movement B ahead and never updated the header it displaced.
The stale label survived because it routed correctly by accident. § 6 instructs
"Work top-down", and Movement A's first live box is ADR-0.35.0 — the ADR
that ascending order independently makes the next work. A reader obeying the false
label reached the right ADR for the wrong reason, so the error produced no visible
misroute for anyone to trip over. It is the § Amendments 2026-08-16 (later) finding
recurring on the same axis: a claim contradicted inside the same document, on the
sequencing question, surviving because nothing consumed it. That entry's own
conclusion applies unchanged — "the habit, not the oversight, is the finding."
Correction shape. The header now carries HELD as of 2026-08-14
(operator-ratified; § Amendments) in the same form Movement B's header uses for its
TOPMOST claim, plus the disambiguation the bare word would otherwise destroy:
Movement A is HELD as a Movement while its ADR-0.35.0 box is the next work
under ADR order. Correcting to HELD alone would have replaced one misreading with
its inverse — that ADR-0.35.0 should not be worked — and that is the live question
at the top of every session. The § Topmost line and Movement B's header are
unchanged; neither was wrong. Surfaced during handoff-GHI triage, 2026-08-23.
2026-08-17 — the doctrine-declared-without-mechanism family gains a THIRD ARM: doctrine-side (operator-ratified)¶
Operator instruction, verbatim: "This is a MASSIVE deficit: ' and doctrine against code not at all' ... This needs redress in the campaign with high certainty."
No box removed, nothing resequenced. Movement B remains TOPMOST, Movement A remains HELD, ADR order stays absolute, and ADR-0.35.0 keeps the in-flight feature position. One box gains an arm.
1. The family's two arms did not cover the case that fired. Movement C's Close the doctrine-declared-without-mechanism family box names validator-side (a check whose subject is narrower than its name) and agent-side (a skill mandate with no receipt). Both live inside the machine. The 2026-08-17 instance is neither: a foundation-tier doctrine document declared a binding claim — agent-control-surface-rendering-substrate.md:211, gz content render agent_contract --vendor=root, one root AGENTS.md serving every harness — and no witness of any kind existed. Measured the same day: "root" appears zero times in src/gzkit/content/ or compose.py.
2. The drift reached executable surfaces and a Heavy-lane brief. Three copies of the per-consumer shape displaced the doctrine — the same doctrine file's § Agent Orientation Index (Layer-3, 65 lines below the Layer-1 worked example it contradicts), data/vendor-manifest.json, and vendors.py:21 _FALLBACK_ROUTES — and then REQ-0.35.0-09-02 specified playback to a second AGENTS.md at a path no harness loads. That brief passed --brief-reconcile, --req-kind-discipline, gz obpi validate --authored, and its own Discovery Checklist. Every gate was green and every gate was answering a different question, because ADR-0.35.0 § Decision item 8 says only "wires to a real surface" and no check asks whether a Decision item is specific enough to constrain its brief.
3. What this costs the criterion. The box's completion criterion — "a declared discipline either carries a mechanical witness or is demoted to advisory in its own text — no third state" — is now measurably harder than the closed-exemplar list suggested, because gzkit's witnesses compare artifact↔artifact and claim↔receipt exhaustively and doctrine↔code not at all. Two sibling boxes in this same Movement are the identical wound: "Render the stability-gradient spine" (the 06-14 ruling that PRD → Constitution is backwards, still shipping the superseded order across ~12 surfaces) and "Surface mirroring."
4. Instance closed; class open, and stated as open. Landed 2026-08-17 under ADR-0.35.0 / OBPI-0.35.0-09 (re-scoped in place: root-only routing, a manifest fence refusing a multi-vendor AgentContract, a fail-closed agreement check between _FALLBACK_ROUTES and the manifest, and min-cap measurement of the single delivered surface), plus an invariant-tier corpus entry carrying the root-contract doctrine into the per-turn surface, and a corpus entry replacing the "90% convinced" bullet (operator verbatim: "forget 90%, you have zero basis for any certainty"). A general doctrine↔code witness is NOT built and is not scheduled here. The honest statement of the residual: gzkit does not today know how to mechanize "this prose binds that code." Naming it is the amendment; building it is unclaimed.
2026-08-17 — the architecture review is dispositioned: §5 is re-cut against a declared date, and Movement D absorbs orientation + findings (operator-ratified)¶
Provenance. An architectural and roadmap review of gzkit against the August-2026
agentic-development stack was run this session and retained at
docs/evals/gzkit-campaign-architecture-review-2026-08-17.md,
against the prompt retained beside it. The review was then dispositioned through a
one-question-at-a-time operator interview; every ruling below carries the operator's verbatim
words. The review is evidence routed at this plan; it is not itself a plan, and it carried
errors — see § Corrections below, which exist so this amendment does not launder them into
canon.
A. §5 is re-cut — still bounded, now against a declared date¶
Three rulings, in order taken.
- Which station of §1's trajectory 1.0 marks. Verbatim: "I want it to be a complete and contemporary toolkit for agentic work, but I am willing to let scope change on some things. public product and personal toolkit." → BOTH stations. 1.0 = a complete and contemporary toolkit. Scope is negotiable per item; the standard is not.
- Layer scope. The review measured gzkit absent or single-vendor on five layers of the contemporary stack — harness portability · foreign skills · MCP/tools · agent-and-session identity · eval. Verbatim: "All five, properly built" → capability-modelled harness adapters, skill trust/provenance policy, real MCP governance, a full session/agent model, and an eval suite with baselines. Not thin instances; not schema-only. Selected against a stated cost of "quarters of work" and "highest risk of 1.0 receding."
- What comes out to fund it. Verbatim: "Nothing — move the date instead" → every current §5 gate is retained, including "the membrane is on the real doors" and "the accretion is reduced."
Consequence, booked rather than softened. §5's header still reads FINITE (amended
2026-07-18), and that word was added precisely because unbounded gates made 1.0
unreachable. Ruling 3 enlarges the gate set while keeping every prior gate, so §5 must be
re-cut to read finite against a declared target of ≈2027-04, not finite simpliciter. Left as
the bare word, §5 asserts a boundedness the plan no longer has — the same class as the
campaign-Status: defect .gzkit/rules/governance-core.md 0.11.0 just discharged. The
date moves by declaration, never by slippage. Arithmetic on the record, by this plan's own §7
method: ~25 OBPIs unlanded across ADR-0.35.0/0.36.0/0.37.0, plus ~25 for ruling 2, plus
~10 for portability/Firewall/mirroring/PRD/radar ≈ 60 OBPIs; at the observed rate from
ADR-0.34.0 (5 OBPIs, 2026-07-12 → 07-31 ≈ 3.8 days each) that is ≈230 days.
B. §6 sequencing — held, and one gate is owed a checkbox¶
-
The external forcing function. The review found §5's gate "one external forcing function exists — at least one flight-test sortie flown against a non-gzkit substrate" is carried by no Movement checkbox in §6, and recommended sequencing it first. Verbatim: "Wait for ADR-0.38.0 in strict order" → ADR-order-is-absolute holds; no exception granted. Portability (project-declared, gzkit-locked verification vocabulary) and the
flighttestverb becomeADR-0.38.0, authored after0.35.0,0.36.0and0.37.0land. Both the pull-ahead and the fly-a-Python-substrate-now options were declined. Accepted consequence: the forcing function certifies rather than informs — the ~25 queued OBPIs are built on internal judgment, and external signal arrives ≈95 days out. OWED: §6 still needs an owning checkbox for this gate, reading "flies afterADR-0.38.0", so it stops being an unowned 1.0 gate. Not discharged by this amendment. -
Execution-layer ownership. The README claims "governance meta-harness and agent runner"; no code runs a harness. Verbatim: "Hybrid — runner for integrity gates only" → adapter by default; runner only where independence requires vendor control. gzkit invokes the cross-vendor reviewer itself and records the verdict; the gate reads gzkit's record, never the subject agent's claim. Rationale on the record: a self-summoned adversary is not an adversary. Full orchestration declined.
pipeline_dispatch.pyshrinks to a recorder for all non-integrity dispatch; the README's "agent runner" language is narrowed to match, not deleted. -
Step 4b scope — restated, not newly ruled. Verbatim: "yes, absolutely yes" → Step 4b is mandatory and unconditional before Gate 5 on OBPI completion — no lane, kind, sensitivity, or sampling exception. Measured basis: 28 completions/month and falling; of 17
adversarial_validationevents, 6not-refuted/ 7refuted-with-caveats/ 4refuted— 65% found something, including a negative control Codex refuted as "a gameable facade" and two taxonomy scanners that would have shipped a permanent gate inert. And verbatim: "not presently… obpis are feature implementation - new intended behavior. ghi direct fix is repair and correction. Even if the adr/obpi were defective, and we need to revisit it via a ghi, I'd consider that akin to an 'airworthiness directive' and not a new feature driven by an obpi. So, the 4b gate is QC for new feature work." → GHI direct-fix / MX work acquires no Step 4b requirement. This ruling was already canon —ADR-0.36.0§ Intent records it verbatim as "step 4b is just for obpi feature work, like handoffs, and the airlock" — and asking for it again induced re-adjudication of a settled decision, which is the disease this Movement exists to stop. Recorded so it is not asked a third time.
C. Movement D is re-scoped — orientation and findings are absorbed¶
- Verbatim: "yes, and Movement D should absorb the orientation problem. a handoff is there to orient a new session from the prior session - it is an advisory shift change orientation." And: "yes, findings in scope for Movement D."
Why orientation belongs here. Movement D already names "the campaign body as a rendered
Layer-3 view." The review supplied the reason that box exists: this plan is what
scripts/session_orientation.py hands every fresh session, and its transcriptions of its
own ADRs are lossy in one consistent direction — they preserve status, counts and citations
and drop the reasoning. This session is the worked example: a full architecture review built
on those transcriptions produced confident, wrong characterizations of three feature ADRs
(§ Corrections). Re-adjudication and mis-orientation are therefore one defect with one
mechanism, which is why they share a Movement.
The governing model is operator-supplied and external: the FAA Position Relief Briefing
(FAA Order JO 7110.65 App A; JO 7210.3) — four ordered beats, with "both the specialist being
relieved and the relieving specialist share equal responsibility for the completeness and
accuracy of the transfer." Mapped against the shipped handoff system, beats 1 and 2 are
substantially present (and in places stronger than the source — NextStep.references resolve
against live state rather than being recited), beat 3 is present but one-sided, and beat 4 is
absent. The load-bearing gap is that equal responsibility requires simultaneity, and in
gzkit the relieved party is gone before the relieving party arrives: 373 handoffs exist and
nothing measures whether any briefing was accurate.
Operator ruling on the substitution for simultaneity, verbatim: "it really is a + b + c. yes to checklist, BUT, handoffs are advisory/informative to operator. also, a git-sync is always a permitted first operation after a handoff is created."
| Beat | FAA | Mechanism added | Substitution |
|---|---|---|---|
| Exit verification | 4 — "confirms SIA data accuracy" | Outgoing session re-resolves its own authored next steps and cited references against L2, writes each claim carrying its verification state, records the turnover timestamp. Then git-sync, unobstructed. |
(b) the ledger is the overlap |
| Preview | 1 — SIA, environment, monitor jack | Orientation runs first and alone; the briefing is not yet delivered. Gains a non-empty seam map once ADR-0.37.0 D1 lands |
existing + ADR-0.37.0 |
| Readiness call | 1 — "preview complete, begin briefing" | The missing ordered two-beat. Today SessionStart delivers orientation and the resumed handoff simultaneously, so the briefing has nothing to be checked against and becomes the picture instead of being tested by it | new |
| Briefing | 2 — Position Relief Checklist | The handoff rendered against a per-project, schema-validated Position Relief Checklist (FAA's checklist is facility-specific; gzkit has one global template), including an explicit abnormal items section whose contract is what the tooling will not tell you | new artifact |
| Assumption | 3 — "I assume position responsibility" | gz handoff decide --operator-text. The operator is the only party continuous across both sessions, therefore the briefing's second party rather than a supervisor. Formal in booking the turnover; advisory in never blocking work |
(a) the operator is the overlap |
| Deferred review | 4 — overlap, run backwards in time | After working, the incoming session books a handoff_discrepancy finding for a wrong next step, a stale reference, or an unbriefed abnormal item — attributable to the handoff that misbriefed |
(c) time-inverted overlap |
Two binding constraints on all of the above.
- Advisory, never authorizing. No beat here may gate anything. This confirms the direction
of
OBPI-0.37.0-05: authorization migrates to the airlock; the handoff keeps only briefing — theAGENTS.md§ Operator Doctrine three-system fence (transit authorizes, handoff refreshes memory) realized in mechanism rather than merely asserted. Equal responsibility survives through (c) rather than through a gate: responsibility becomes legible — a discrepancy names the handoff — which is how the source model works, where the sign-off is administrative and accountability lives in the record. gz git-syncis never gated, and is always a permitted first operation after a handoff is created. Standing canon, already recorded at three sites inADR-0.37.0(BI #5 and twice in its forcing-function answers), verbatim: "I EXPLICITLY want this" and "handoffs should never, never, never, ever, block git-sync. NEVER." Verified this session: the shippedhandoff_resume_gate.pydeclaresexempts=EXEMPTS_NONEand that declaration is accurate — its arm isWrite|Edit|NotebookEditandgit-syncruns throughBash, so it never sees it. No defect; no repair owed.
Movement D's box therefore gains: handoff_discrepancy as a typed finding event (the
first accuracy signal over 373 handoffs, today unmeasurable); the finding entity as a
first-class kind distinct from facts, judgments and decisions; the per-project Position
Relief Checklist artifact; and the preview → readiness → briefing ordering at
SessionStart. The existing scope — ruling_issued/ruling_superseded, a ruling verb,
Settled and attribution as rendered projections, the campaign body as a rendered Layer-3
view, supersession fail-closed on orphaned rulings — is carried unchanged. Sibling GHI #611
stands.
D. Two terminology rulings¶
prosthetic≈syntheticmemory. Verbatim: "probably the same" → one concept, two names.ADR-0.33.0says prosthetic (5 files); the handoff system andAGENTS.mdcanon say synthetic (7 files). Measurable cost:rg syntheticmisses the airlock andrg prostheticmisses the handoff system, so the two most memory-relevant subsystems are mutually invisible to search. Settle one term; PRD § Ubiquitous Language is the home.- The airlock is not a verification gate. Verbatim: "The airlock is an awareness and
synthetic memory approach to keep an agent oriented about its actions within the system. we
call it airlock as we want to control movement within the project when the agent enters that
environment. it is to keep the agent focused and oriented, watch for contamination, and
monitor results/disturbance. The handoff system and the airlock are meant to cooperate with
(and provide) synthetic memory." Measured against
ADR-0.33.0(34.5 KB):synthetic0,orient0,contaminat0,awareness0 — three of the four stated purposes appear nowhere in the governing ADR, which carries the memory purpose only, as "Prosthetic memory." Capture is owed. The airlock↔handoff cooperation is refinement, not drift, and its mechanism is already designed:OBPI-0.37.0-05item #5 — "SessionStart fires airlock-IN; the handoff-resume-gateWrite|Edit|NotebookEditarm retires into it."AGENTS.md§ Operator Doctrine needs a cooperation clause so a reader meets the join and not only the fence.
E. The campaign-narrative guard is owed — added to Movement D scope after ratification¶
(Added to this amendment after the body edits were ratified and pushed at b342f0f28, on a
ruling taken minutes later in the same session. Appended rather than folded into A–D so the
ratified text is not rewritten.)
- A fabricated enforcement claim sits in Layer 2. The
adversarial_validationrecord forOBPI-0.33.0-06states its fix is "now guarded bytest_campaign_has_no_stale_unchecked_narrative." Measured 2026-08-17:grep -rn 'stale_unchecked|no_stale|unchecked_narrative' tests/ src/returns no match, andtests/governance/test_active_campaign_registry.pycarries 7 tests, all of which assert declaration coherence (which plan is active, does each path resolve, does prose agree with the registry) and none of which assert narrative coherence. Operator ruling, verbatim: "it was never written - add the guard to Movement D scope."
Why this belongs in Movement D and not in a GHI alone. The claim is not a missing test in
isolation — it is §4's enforcement-claim rule violated inside the output of the mechanism built
to catch violations of it. .claude/rules/agent-failure-modes.md names the pattern twice:
Fabrication ("synthesized claim/receipt/attestation not observed from primary source") and
Metagaming ("shapes output to satisfy the check rather than the intent it proxies") — naming
a guard reads as mechanization to any later reader without anything being built. And the subject
it claimed to guard is campaign narrative coherence, which is precisely the surface this
Movement is absorbing: a stale campaign claim is what a fresh session reads first.
The false record stands; it is not retracted. AGENTS.md § Never #2 forbids editing the
ledger, and an append-only Layer 2 that could be corrected in place would not be evidence. The
correction lives here, in .gzkit/insights/agent-insights.jsonl (defect, 2026-08-17), and in
the guard once built.
Added to Movement D scope: a campaign-narrative coherence guard — a test that fails when
the plan's prose contradicts its own checkbox state (the original instance: a 4/6 narrative
line surviving beside a 6/6 reality). It composes with the Movement's rendered-projection work
rather than duplicating it: rendering the campaign from ADR canon removes the class; the guard
is what fails closed until it is rendered, and afterwards is what proves the rendering did not
regress. Nothing is checked off by this ruling.
Observation, deliberately not acted on: OBPI-0.33.0-06 reached attested_completed with
this citation in its resolution text. Whether an attestation citing a guard that never existed is
a defective attestation, or an honest attestation with a false supporting sentence, is a question
this amendment does not decide — no scope was ruled for it and ADR-0.33.0 stays Validated.
F. Movement E is created — the forcing-function gate finally has an owner¶
(Appended after E, same session, on the ruling that followed it. A–D stay as ratified.)
- Operator ruling, verbatim: "add the flight-test checkbox to §6."
Placement was an agent judgment and is disclosed as one. The ruling authorized a checkbox; a checkbox needs a home, and none of A–D fits — the forcing function is not the Foundation Sunset, not the membrane, not reductive, and not ruling-lifecycle. §1 had already decided it: amended 2026-07-18, "One external forcing function is a Movement, not a nicety." §6 never created one, so Movement E discharges the plan's own two-month-old declaration rather than inventing structure. That gap was itself an instance of Movement C item 162's family — "Layer X declares a discipline that Layer X does not mechanically enforce" — occurring in the plan that names the family. Move it if the placement is wrong; the boxes travel intact.
Movement E carries three boxes, none checked: ADR-0.38.0 authored; the verification
vocabulary moved from gzkit to the project (CANONICAL_STEP_COMMANDS is uv/ty/unittest/
mkdocs, so a non-Python project cannot produce a canonical receipt and this Movement's own
gate is unsatisfiable against most substrates until it moves); and S1 flown against a non-gzkit
substrate. Sequenced last as a consequence of ADR order, not as a preference — and the
certifies-rather-than-informs cost from B.4 is restated at the Movement so a reader meets it
where the work is.
§5's forcing-function gate line was updated in the same edit — it had read "owed an owning §6
checkbox," which this ruling makes false. Coupled-surface coherence under AGENTS.md DO IT
RIGHT 1a: the consumer's claim is corrected in the same change that invalidates it.
G. Movement E gains a binding internal sequence — vocabulary before sortie¶
(Appended after F, same session. A–D stay as ratified.)
- Operator ruling, verbatim: "sequence the vocabulary box before the sortie box."
The two boxes were already in that order on the page, but §6's "work top-down" makes order an implication, not a dependency, and an implication is what a hurried session routes around. The ruling makes it binding, using Movement B item 0's established convention (a numbered box with an explicit "sequenced ahead of" note).
Why the block is load-bearing rather than tidy. §5's gate says non-gzkit substrate, not
non-Python. A sortie flown while CANONICAL_STEP_COMMANDS is still uv/ty/unittest/
mkdocs would therefore have to fly against a Python project — satisfying the gate's letter,
recording a real sortie to L2, and proving almost nothing about portability, which is the
property the forcing function exists to test. That is a vacuous pass, and its shape is already
documented one Movement over: ADR-0.37.0 § Intent on the airlock — "the fail-closed _decide
returns PROCEED vacuously… the logic is sound; the input set is empty." Twenty of twenty-three
transits. The same failure was available here, at the gate that certifies 1.0.
Item 3's done-criterion is tightened accordingly: "sortie flown on a substrate whose verification vocabulary is not gzkit's." Without that clause the box could be checked honestly and still leave the gate unproven.
Corrections — the review's own errors, recorded so they are not inherited¶
The review characterized three feature ADRs from this plan's transcriptions of them rather
than their bodies. Operator correction, verbatim: "i fear that you riff on things without
rereading docs." Logged as an improvement insight in
.gzkit/insights/agent-insights.jsonl, 2026-08-17. The corrections that bear on this plan:
- The airlock is not over-built ceremony.
ADR-0.33.0§ Persona: it "earns trust by biting, never by ceremony." It is memory and gate by design — the gate is what makes map-maintenance an unavoidable byproduct. The review's recommendation to defer it was wrong, and ruling 3 (nothing comes out) is better justified than the review's own analysis. - The 20-of-23 empty seam-maps are a disclosed residual, not an undetected defect —
operator-attested 2026-07-10 as
ADR-0.33.0§ Calibration frontier, naming the exact cause, with Stage 1 deliberately held diagnostic-only so a mis-calibrated gate cannot "2am-wall a real pipeline." ADR-0.37.0is not tuning. It repairs a self-granting accounting predicate:accounted = inv in brief_textis a substring test over a file the entering agent controls — "the cheapest way to clear six invariants would be to paste six headings."ADR-0.36.0OBPI-09 must not be dropped. It is the always-on arm, and "Install an always-on '2nd opinion'" is that ADR's first sentence; its metaphor is Crew Resource Management, not adversarial review. Recommendation withdrawn.ADR-0.35.0was mischaracterized as inward plumbing. It drains three facades on the surface every agent loads every turn: a witness that cannot fail (composer.py:63-65reportscompressible_bytes_after22,378 againstbefore354 — a 63× inflation labelled compression), an attested and floor-gatedcodex.mdsetpoint that nothing plays back, and only 31.2% ofAGENTS.mdwitnessed (9,966 B of 31,990 B; 8 of 22 sections).session_exit_bookmark_skippedis the mechanism working, not a broken pair.session_exit.py:62-64:skipped=Truemeans "nothing needed booking"; 36 of 44 carryexit_reason: clearbecause a covering handoff already exists. Any future citation of "N skips / 0 writes" as a defect should state which of the two states it means.
Body edits ratified. This amendment made three coupled edits to the plan body, disclosed
to the operator before ratification and approved verbatim: "ratify the body edits and
git-sync" (2026-08-17). They are (i) §5's header qualified from FINITE to FINITE, against a
declared target with the re-cut blockquote; (ii) §5's gate list gaining the five-layer gate and
naming ADR-0.38.0 on the forcing-function gate; (iii) Movement D's box gaining its
scope-change blockquote. Deliberately NOT done: adding the owed flight-test checkbox to §6
— placing a box in a Movement is a sequencing act, not bookkeeping, and it remains owed.
Evidence at ratification: uv run gz validate → 13 scopes, all passed;
tests.governance.test_active_campaign_registry 7/7.
What this amendment does NOT change. Movement order (A → B → C → D) is unchanged. Movement
B remains TOPMOST and gated by ADR order; Movement A remains HELD. ADR-0.35.0 is still the
in-flight feature and Draft still HOLDS through implementation (ruled 2026-08-12 — do not
re-raise). The post-1.0 pool ruling (§7) stands. No box is checked by this amendment. Every §5
gate is retained.
2026-08-16 — ADR ORDER IS ABSOLUTE, and this plan now says so¶
Operator ruling, verbatim: "i will NOT go out of adr order, whatsoever." (spelling
preserved). Reaffirms the standing ruling "we will NOT go out of adr order", which had
refused ADR-0.37.0 implementation as third of three open ADRs.
Recording under § 8 — an operator-ratified amendment, recorded with the operator's verbatim words. No Movement is resequenced and no box is touched.
The gap this closes. Grep this plan before this entry and it contains no ADR-order language at all — not in § Topmost, not in any Movement header, nowhere. The constraint that decides which ADR may be worked lived only in handoff Settled Rulings, while this plan declared TOPMOST a Movement carried by the last of three open ADRs. Nothing contradicted anything: ADR order was ratified canon and Magna Carta was simply silent on it. Silence is the defect — every session re-derives the constraint or trips over it, and this session did trip, presenting the two as a conflict needing an operator ruling when one of them was merely unrecorded.
Movement priority and ADR order are different axes, and both bind. Movement B remains TOPMOST: it is the highest-value work and the airlock's inertness is still the priority problem. ADR order governs what may be pulled next, and it is not a preference to be traded against priority. The consequence is arithmetic rather than judgment:
| Open feature ADR | Position | May be worked? |
|---|---|---|
ADR-0.35.0-canon-entry-corpus-landing |
first | yes — this is the next work |
ADR-0.36.0-convergence-moment-cross-family-critic |
second | not until 0.35.0 lands |
ADR-0.37.0-airlock-calibration-and-compulsion |
third (carries Movement B) | not until 0.35.0 and 0.36.0 land |
Read each ADR's lifecycle and landed count from
uv run gz adr status <ADR-ID>; no count is transcribed here.
So Movement B is TOPMOST and gated. A Movement can be the highest priority and still
be blocked — those are not in tension, and reading "TOPMOST" as a licence to pull
ADR-0.37.0 ahead of its position is the misreading this entry exists to prevent. The
practical effect: ADR-0.35.0 is the work, and Movement B's item 0 waits behind it.
2026-08-16 (later) — the Topmost line claimed Movement B's feature ADR was unauthored; corrected at three sites¶
Operator ruling, verbatim: "Fix the stale Topmost line (Recommended)."
Recording under § 8 "living: items check off with command evidence" — not a sequencing amendment. No box is removed, nothing is resequenced, no ruling is carried or withdrawn. Movement B remains TOPMOST and Movement A remains HELD.
What was false. Three sites asserted that Movement B's feature ADR did not
exist: the § Topmost line ("none is authored yet"), the § Movement B header
("new feature ADR extending ADR-0.33.0"), and item 0's Destination clause
("The feature slot is unallocated until that ADR is authored; read the next free
one off disk"). ADR-0.37.0-airlock-calibration-and-compulsion was authored
2026-08-14 — kind: feature, lane: heavy — and its ## Intent re-homes
ADR-0.33.0's two disclosed residuals in the same terms item 0 uses, citing the
same ADR-0.35.0 precedent.
Magna Carta asserted both halves at once. The § Amendments 2026-08-15 record cites that ADR by id and lifecycle in the course of explaining why the resume gate's arm had no door to retire into — 441 lines below a Topmost line saying no such ADR existed. The claim was therefore not merely stale; it was contradicted inside the same document, on the item this plan declares TOPMOST.
The class is this edition's own named failure. .gzkit/rules/governance-core.md
0.10.0 — landed earlier the same day — binds that a value written in a Markdown
doc is illustrative, never authoritative, and carves out campaign Status:-style
prose-as-state as "a defect with a home, not a pattern to copy", homed at
Movement D. This is that defect on the highest-traffic sentence in the repository:
the Topmost line is rendered into every SessionStart digest, so a false premise
there misdirects the sequencing question at the top of every session. Note the
same paragraph already does it correctly one sentence earlier — "run uv run gz
adr status ADR-0.33.0-airlock-membrane … rather than trusting a figure
transcribed here" — and then hardcodes an existence claim it should have cited.
The habit, not the oversight, is the finding.
Correction shape. All three sites now name the ADR and point at
uv run gz adr status ADR-0.37.0-airlock-calibration-and-compulsion for lifecycle
and landed count; no count is transcribed. Item 0 additionally records that D1 was
revised 2026-08-15 (the original inverse-reach form withdrawn on measurement)
and that OBPI-01's slug is tracked rename debt, so the next reader does not take
either at face value.
2026-08-16 — Movement C: rules arm regresses 0 → 8; adoptable-mechanisms box added (operator-directed)¶
Operator instruction, verbatim: "ensure that any deficiencies from your four proposals have a home in the campaign work, remedy that now."
No box removed, nothing resequenced. Movement B remains TOPMOST; Movement A remains HELD; the post-1.0 pool ruling is unchanged and the 190 pool items stay frozen. Two changes, both inside Movement C.
1. Item 162's rules arm regressed from 0 to 8, recorded rather than absorbed.
.gzkit/rules/cli.md was scored for real under GHI #810, which dropped its
0.3.1 grandfather pin by construction. The honest score produced 8 Promotable
rows — the third state the box forbids. The box's own criterion is what makes
this reportable rather than hideable: re-scoring to Judgment without amending
the rule text is laundering, so the arm is genuinely open until the arms are
built. Recorded at the box; tracked at GHI #810. The debt arm moved the right
way in the same pass (grandfather registry 15 → 14 against baseline_count 23).
This is the second time in nine days the family-closure box has been reopened by
measuring a surface nobody had measured. That is the box working — but it also
means its completion criterion cannot be treated as converging while unscored
surfaces remain. The scorecard covers CLAUDE.md + .gzkit/rules/**; arm 2
already records that .gzkit/skills/** is unmeasured. docs/design/** standards
cited as canonical by a Validated ADR were likewise unmeasured until this week.
2. New box — name the adoptable mechanisms. Item 160 (The Firewall) defines what does not ship; nothing defined what an adopter gets. Two working mechanisms — the shrink-only waiver ratchet and the verifier-pipe-gate hook — had no home describing them as a deliverable surface. Both fired against this session's own agent work, which is the evidence they are worth naming. Sequenced with item 160, not ahead of it, and explicitly not a new pool ADR (Architectural Boundary 2).
3. Full re-evaluation pass (operator: "update that campaign document with today's
date - re-evaluate it thoroughly"). Every live claim in the document was
re-measured rather than re-read. This edition carries the result. The first pass
stamped the findings inline in the 2026-07-18 edition on the reasoning that
re-evaluation is an amendment (as 2026-08-14 was) and that a new edition is a
supersession act needing an explicit ruling. The operator's follow-up — "did you
update a fresh document with today's date and sunset the prior?" — settled it the
other way: a full re-evaluation earns a dated edition. The 07-18 edition is
sunset, this one is ACTIVE, and the carry-forward is total.
What changed:
| Claim | Was | Now | Where |
|---|---|---|---|
| Oversized modules (>600 lines) | 33 | 51 | § Movement C item |
fix commits, 90d |
524 | 528 | § Topmost |
airlock_in / airlock_out |
23 / 5 | 23 / 5 — unchanged | § Topmost |
| Scorecard Promotable rows | 0 | 8 | item 162, above |
| Pool ADRs | — | ~199 .md under docs/design/adr/pool/ |
§ 7 |
What held: ADR-0.35.0 Draft, ADR-0.36.0 Proposed, ADR-0.33.0
Validated, GHI #766 and #611 open, and the surface-mirroring ratio (~49% over a
stated 90-day window vs the 47% recorded).
The sharpest finding is the one that did not move. The airlock counters are
identical two days into Movement B holding TOPMOST — zero transits — while fix
commits rose by four. The ungoverned door widened while the governed one stayed
shut, which is item 150's gap (GHI : MX :: OBPI : Build) reproducing in the
window where the Movement was supposedly being worked. It is also evidence for
item 0's sequencing: calibrating a gate nobody passes through is cheaper than
widening it to three more doors.
Method note. The surface-mirroring figures were NOT overwritten, because the
window they were taken over is unrecorded; substituting a differently-scoped
measurement would manufacture a false comparison. Today's numbers are recorded
alongside with the window stated. This is the same discipline
gz validate --transcribed-adr-counts enforces mechanically — it refused a draft
of this very amendment for transcribing a Layer-2 OBPI count into live prose.
Origin, stated plainly so it is not mistaken for an independent finding. Both changes come from an agent-proposed framing during a 2026-08-16 competitive review, which the operator directed be homed. The review measured the category as flourishing on the authoring side (GitHub Spec Kit 93k stars; BMAD-METHOD 46.7k; OpenCode 160k) with the enforcement side unoccupied in OSS — present only as academic work and enterprise compliance platforms. The proposal was positioning, not wind-down: gzkit's differentiator is the enforcement layer, and it is currently undescribed to anyone outside this repository.
2026-08-14 — Movement B is TOPMOST; Movement A is HELD; calibration precedes widening (operator-ratified)¶
Operator ruling: "the airlock's incompletemess is a problem that needs priority address.", ratified "yes, ratify" (spelling preserved).
What changed. Movement B (put the membrane on the real doors) moves ahead of
Movement A (close the Foundation Sunset). ADR-0.35.0-canon-entry-corpus-landing
is HELD in the in-flight position at 0/10 — not withdrawn, not superseded, and
still the next feature when B releases the queue. One-feature-at-a-time is
unchanged. A new item 0 — calibrate the seam-map is added ahead of Movement
B's five existing checkboxes, and the accounting-gap box's count is corrected.
Why this is new evidence, not a change of mind. The session that produced this
ruling started as a false-refusal complaint against the handoff resume gate and
ended by reading ADR-0.33.0 properly. Three findings, each measured live rather
than transcribed:
- The airlock is BUILT, not unfinished.
ADR-0.33.0isValidated, 6/6attested_completed. "Incomplete" means installed on one door, which is what Movement B has always said: "The doors mostly exist. They do not fire… an opt-in gate is not a gate." Nothing about the mechanism needs re-designing. - It does not bite where it does fire. 20 of 23 transits computed an EMPTY
seam-map and auto-proceeded; 3 bit correctly (3/4/7 unaccounted →
hold). The cause isADR-0.33.0's own calibration-frontier note —reach()returns dependents, a leaf OBPI has none, andparent_invariantsis never passed. This is WWHTBT-(a), the ADR's self-declared load-bearing condition, deferred past the FC-2 tracer and never landed. It is not in Movement B's checklist at all; item 0 adds it. Widening before calibrating installs three more inert gates and is § Negative #1 arriving through the front door. - The accounting gap is worse than recorded — 23 in / 5 out, not 23/10.
What this ruling does NOT do. It does not reopen ADR-0.33.0, whose
attestations stand. It does not make the airlock a gz validate scope (BI #6: the
L3 projection informs the gate, never gates). It does not disturb Movements C or
D, which remain after B and A.
Sequencing within Movement B (agent-proposed under this ratification; operator may reorder). 0 calibrate → accounting gap → the "never entered at all" NC → GHI/MX door (highest volume) → session entry → ad-hoc/permitted. The two NC-first alternatives were considered and rejected: the new NC cannot be written until "should have entered" is defined per door, and it would fail on 524 commits/quarter before any door exists to close.
Collateral — retired ahead of the door by operator ruling (AMENDED 2026-08-15).
The handoff-resume-gate hook's Bash arm was removed on 2026-08-14
(bc9b72f67) as a forked fourth door — an un-extracted variant with its own copy
of the airlock's proceed|pause|hold|revert grammar, triggering on
artifact-presence rather than on entry. This paragraph then said its surviving
Write|Edit|NotebookEdit arm "retires into" Movement B item 3 "rather than
as a loose direct fix, so no gap opens in front of the governed door."
That is not what happened, and the plan is corrected rather than left standing.
The operator retired the whole hook on 2026-08-15 — verbatim: "the handoff should
be an advisor, not a gate-keeping nanny" — with ADR-0.37.0 at Pending 0/6 and
no implementation, so item 3's door did not exist to retire into. A gap IS open in
front of it, deliberately and on the record: the arm's entire measured lifetime was
9 lifts to 1 block across the single day refusal-recording existed, against 13
admission-breadth corrections in 29 days. REQ-0.37.0-05-02 is amended in the same
commit. Movement B item 3 is unchanged in substance — the door is still owed — but
it no longer inherits a retirement, and it must not re-create the forked entry gate
the arm was.
2026-08-11 — the pull-ahead is WITHDRAWN; ADR-0.35.0 returns to the in-flight position (operator-ratified)¶
Operator ruling: "not sure i wan't to author 0.36.0 while we haven't finished 0.35.0", ratified "yes, amend campaign" (spelling preserved).
What changed. The 2026-08-09 amendment pulled
ADR-0.36.0-convergence-moment-cross-family-critic ahead of
ADR-0.35.0-canon-entry-corpus-landing. That pull-ahead is withdrawn.
ADR-0.35.0 is the in-flight feature; ADR-0.36.0 is next-drawn, after it lands.
One-feature-at-a-time is unchanged — this restores which feature is in flight
rather than running two.
Why this is new evidence, not a change of mind. The 2026-08-09 (2) amendment
made the critic's delivery STAGED: OBPI-09's automatic AskUserQuestion door
ships dark, lit only after OBPI-08's pilot measures false blocks, latency,
operator reading time, and decisions changed. The ADR states the cost in its own
words — "Until that door lights, this ADR does not deliver a second opinion at
every structured choice." The pull-ahead's justification was that every session
without the critic is a session unguarded; staging means the guard is still off
when all nine OBPIs land. So the trade being made was: pause the feature with ten
authored briefs, to author nine more for a feature that still would not supply
the always-on critic. The staging ruling and the pull-ahead were ratified in the
same session and their interaction was not adjudicated then; it is adjudicated
here.
Measured at the amendment (Layer-2, not transcribed). Neither feature has
landed an OBPI — ADR-0.35.0 0/10, ADR-0.36.0 0/9. The asymmetry is in
readiness, not progress: ADR-0.35.0 carries ten authored briefs passing
gz obpi validate --authored 10/10, a 299-line DESIGN_FORCING_FUNCTIONS.md,
seven Boundary Invariants, and Fidelity Assertions whose coverage figure is part
of the thesis. ADR-0.36.0 carries three briefs authored 2026-08-11, six
draft (scaffold), empty Forcing Functions, and a Fidelity Assertions table
still holding the scaffold's example row.
What is NOT withdrawn. The promotion (2026-08-09 (3)) stands — ADR-0.36.0
remains a promoted feature ADR with nine briefs, and its pool file remains
Superseded. The staged-delivery ruling (2026-08-09 (2)) stands and is the
reason for this amendment. The three briefs authored 2026-08-11 (1b808b18d)
keep their value and are not reverted; authoring is durable and re-usable
whenever ADR-0.36.0 is drawn.
Re-adjudication check. This edition's own § Amendments names re-adjudication as the disease, so the test is stated rather than assumed: this amendment is admitted because it rests on a fact the 2026-08-09 rulings did not weigh — the interaction between staging and sequencing — and not on re-arguing either ruling on its original terms. A future amendment restoring the pull-ahead needs new evidence in the same way; the pilot lighting the dark door would be it.
Evidence. uv run gz adr status ADR-0.35.0-canon-entry-corpus-landing (0/10,
ten draft); uv run gz adr status ADR-0.36.0-convergence-moment-cross-family-critic
(0/9); uv run gz obpi validate --adr ADR-0.35.0-canon-entry-corpus-landing --authored
(10/10 PASS, exit 0); ADR-0.35.0 body repairs at 584778396.
2026-08-09 (3) — the critic is PROMOTED; the box's promotion debt is discharged (operator-ratified)¶
Operator ruling: "well, clearly the campaign needs updating. do so please."
What changed in the world. ADR-pool.convergence-moment-cross-family-critic
was promoted to ADR-0.36.0-convergence-moment-cross-family-critic
(kind: feature, lane: heavy, status: Proposed) with nine OBPI briefs,
1:1 with the Feature Checklist; the pool file is Superseded. Authored at
8763ec633, promoted at dc5fe4d39. gz register-adrs exit 0 (86 ADRs);
gz validate --sensitivity exit 0 across 24 briefs, up from 15.
Why this amendment is a correction, not a completion. The Movement A item 2
box carried four claims that were true when written and false by the end of
2026-08-09: that the pool ADR "owes four things first", that
uv run gz adr promote "is fail-closed until the pool ADR gains a
## Target Scope… it has neither today", that the design sits at
status: Pool, and the instruction to "promote to a feature ADR". All four
described discharged obligations. The box remains UNCHECKED — the critic is
not installed, 0 of 9 OBPIs are built, and nothing runs at the convergence
moment today. Correcting a stale precondition is not progress on the item, and
this amendment must not be read as such.
How the four owed items were discharged, each traceable in the promoted ADR
§ Target Scope rather than restated here: decomposed against the three doors
with the PreToolUse adapter isolated as OBPI-09 landing dark; Step 4b's
resolution shape generalized as OBPI-07 without editing 4b; A3 and A4
carried forward ADOPT-NARROWED as OBPI-05 and OBPI-06; and the adversary re-run
already discharged by amendment 2026-08-09 (2) above, whose
PERFORATED-BUT-NARROWABLE verdict is what forced the staged shape.
The staging survives promotion intact, including its cost. Until OBPI-08's calibrated pilot measures "false blocks, latency, operator reading time, and decisions changed", OBPI-09 stays dark and this does not deliver a second opinion at every structured choice. That sentence is carried verbatim into the promoted ADR's § Target Scope and § Persona precisely so it cannot be dropped from a status report.
Sequencing is unchanged. ADR-0.35.0-canon-entry-corpus-landing remains next
after, still Draft; one feature at a time still binds, and the pull-ahead
exchanged which feature is in flight rather than starting a second.
2026-08-09 (2) — the pull-ahead is STAGED, on the adversary's re-run verdict (operator-ratified)¶
Operator ruling: "Amend to staged delivery, keep the pull-ahead." Selected from a four-option picker; the alternatives were land as written and stage inside the ADR, revert the pull-ahead, and take the no-build-yet path.
This amendment exists because the obligation in the prior one was actually
discharged. ADR-pool.convergence-moment-cross-family-critic § Promotion plan
demanded a re-run of the adversary against the post-R1–R4 design, on the ground
that "per this ADR's own thesis, that re-test is the point." It was run
2026-08-09 against the current document and returned
PERFORATED-BUT-NARROWABLE — neither the rubber stamp that would have
justified promoting as written, nor a repeat of the two prior PERFORATED
verdicts that would have justified reverting.
What R1–R4 genuinely repaired: Pass 1 axis 2 (the forbidden same-family critic) is dissolved by R4, and Pass 2's missing-policy attack is dissolved at the policy level by R3. The old verdicts cannot transfer wholesale, which is why the pull-ahead survives.
What still perforates, and therefore what the box now requires be staged: the automatic door binds to a UI affordance carrying mandatory clarification as well as recommendations, so it "can prevent the very question those rules require"; prose bypasses it; strong subject binding is explicitly unbuilt; and R1 left the scope-time-vs-conclusion-time question the ADR calls "live" unresolved. Axes 1, 3 and 4 are partially addressed, not dissolved.
The staging, and its stated cost. Skill, three doors, scope-first challenge,
A3 envelope, R3 transition and provenance binding land first; the automatic
AskUserQuestion door ships dark and lights only after a calibrated pilot
measures "false blocks, latency, operator reading time, and decisions changed."
The cost is recorded rather than softened: until that door lights, the operator
does not get the second opinion at every structured choice that prompted the
whole amendment. A3 and A4 are both ruled ADOPT-NARROWED.
A premise correction this session forced. R4 reasoned that the shipped
Anthropic plugin already supplies the transport. Measured 2026-08-09: the
plugin's adversarial-review command reviews branch diffs — invoked against
this repository it returned "No branch diff against main was provided or
present" — and the codex:codex-rescue forwarder is contracted to "return
nothing" when Codex cannot be invoked, which is what two empty returns looked
like. R4's ruling (run the current Codex, keep it simple) stands; its
factual premise about the built-in already covering decision critique does
not. Corrected in the ADR at § R4 transport correction and filed as GHI #786 so
the question survives the ADR's own lifecycle. This also weakens the adversary's own
strongest no-build argument, which rested on that same premise.
2026-08-09 — the cross-family critic is pulled ahead of ADR-0.35.0 (operator-ratified)¶
Operator ruling: "Amend the campaign — pull the critic now." Selected from a three-option picker; the alternatives were scope a minimal always-on hook now, full ADR later and hold sequencing, record today as evidence on the ADR.
What prompted it, operator verbatim, 2026-08-09:
what happened to our 2nd opinion work? it is supposed to kick in anytime you invoke AskUserQuestion.
It has never kicked in, because it was never built. Verified this session:
.claude/hooks/ contains no critic script, and .claude/settings.json
PreToolUse carries matchers for ExitPlanMode, Write|Edit and Bash only —
there is no AskUserQuestion matcher. ADR-pool.convergence-moment-cross-family-critic
is status: Pool, unpromoted, holding the full design recovered verbatim from
the three 2026-08-06/07 design transcripts.
The prior placement, now superseded. The 2026-08-07 session recorded placement as "after 0.35.0 I guess, not ready to decide" — provisional on its face — while the same session's register names the real blocker in the operator's words: "we need to allow the critic to operate, so that needs resolution." Those two have sat in tension since; this amendment resolves it in favour of the second.
The observed instance that forced it. In the session that produced this
amendment the agent presented a four-option AskUserQuestion picker on GHI #782
in which it had invented a fourth option, argued in the issue body that the
option dominated the three the issue's author had listed, and recommended it.
The operator accepted it. No cross-family challenge to that premise existed at
any point, and the only scrutiny the recommendation received was the recommending
agent's own. That is precisely the convergence moment § Intent of the pool ADR
names, and it passed unchallenged — the design's own worked example, produced
while the design sat parked.
Consequence for the one-feature-at-a-time ruling (§ Rulings Register). The
standing ruling is "only one feature at a time, feature, finish, draw from
pool." It is NOT relaxed. ADR-0.35.0-canon-entry-corpus-landing is Draft at
0/10 OBPIs — authored, never started — so pulling the critic ahead exchanges
which feature is in flight rather than running two. ADR-0.35.0 returns to the
queue at the position the critic vacates and is the next feature drawn.
Scope of this amendment. Movement A's remaining items are re-ordered; no box is removed, no Movement B/C/D box is touched, and the post-1.0 pool ruling (§7) is unchanged. The critic is promoted from pool to a feature ADR and worked through the governed path — ADR → OBPI → gates — not hand-wired as a hook, which was the declined second option.
2026-08-08 (2) — the family-closure box is re-scoped, not checked off (operator-ratified)¶
Operator ruling: "Keep open, re-scope to the criterion." Selected from a three-option picker; the alternatives were check it off and split the box. No box removed, nothing resequenced, no change to Movements A, B, or D, and no change to the post-1.0 pool ruling.
What prompted the question. All six issues the box names by number are
CLOSED — validator-side #692, #693, #770; agent-side #459, #574,
#620 (verified via gh issue view, 2026-08-08). The corrected failure-class
index puts live work in three other chains. On the enumerated reading the box
was dischargeable.
Why it is not. The box's own completion criterion is class-level and says so in its last sentence: "it closes the family rather than the instance." The six numbers are exemplars proving the class exists. Checking the box on their strength would be the enumerate-the-exemplars habit the criterion was written to resist — and it is the failure shape §9a records for the 06-14 rulings that were "booked and never rendered": work marked done because its visible instances closed, while the discipline it declared went unwitnessed.
The re-scope, and the instrument that makes it measurable. No new machinery
is proposed. docs/governance/advisory-rules-audit.md already scores every
clause of CLAUDE.md + .gzkit/rules/** on four values and is self-tested by
gz validate --advisory-scorecard. Those four values are this box's criterion,
which nobody had noticed:
| Scorecard score | Criterion state |
|---|---|
| Mechanical | carries a mechanical witness ✓ |
| Judgment | demoted to advisory in its own text ✓ |
| Promotable | the third state — declared, no witness, not marked advisory |
| Ambiguous | the third state — scope unclear enough that nothing can witness it |
The box completes against that criterion and two named arms — the rules arm
(drive the third state to zero, by mechanizing or by amending the rule text;
re-scoring alone is laundering) and the skill arm (.gzkit/skills/**/SKILL.md
mandates have zero scorecard coverage, which is exactly where all three
agent-side exemplars lived). The debt arm is already mechanized and carries no
new work.
Count corrected 2026-08-08 — the ratified criterion above stands unchanged; only the measurement under it was wrong. As first written this paragraph read "Measured 2026-08-08 over the audit: 63 Mechanical, 27 Judgment, 12 Promotable + 2 Ambiguous = 14 rows in the forbidden third state" and the rules arm read "drive 14 → 0." No figure reproduces: the audit had not been touched since 2026-08-06, and the third state is 9
Promotable, 0Ambiguous. The2 Ambiguouswas the legend row plus the Summary row counted as rules — agrep -cover a rendered table, which is the exact failure the same session recorded in its own handoff as "an existence check wearing a truth check's clothes." The live count now lives only in the scorecard's Summary table and is fenced there bygz validate --advisory-scorecard, per the GHI #768 ruling on this class.
One limit recorded, not hidden. The skill arm is not failing today — it is unmeasured. Stating it as an open arm rather than a clean one is deliberate: an uncovered surface reported as green is the same defect this whole family names, and the box would otherwise inherit it.
2026-08-08 — C2 checked off; the "single source" claim made true (operator-ratified)¶
Operator rulings, verbatim, in order: "Determine C2 status first", then "Close the residual now (Recommended)", then "Check C2 + sync".
Why this amendment exists at all. The resumed handoff advised "Land the C2
enrollment fail-close (GHI #744)" as its second next step. That step was
stale on the day it was authored — #744 closed COMPLETED 2026-08-02 at
0f671b31c, six days earlier. The handoff had read the (GHI #744) parenthetical
in this box — a citation for the criterion the 2026-08-07 amendment adopted — as
unlanded scope. The agent's own recommendation was to set that step aside and pull
GHI #770 instead; the operator overrode it to verify this box's criterion against
source first. That verification is what found the residual below. Recorded as an
improvement insight under scope campaign-item-verification.
What the determination found. Two of the three sub-claims already held. The
third did not, and had not since the #618 collapse: VALIDATOR_REGISTRY's header
called itself "Single source of validate dispatch" while --qc-binding,
--fidelity-presence and --waiver-ratchet reached gz check without ever
appearing in it. The roster accommodated them (reached_outside_registry)
rather than closing the gap, and tests/governance/test_check_scope_parity.py
documented the contradiction in its own docstring while asserting only that the
exceptions were classified.
This residual was a member of the family the 2026-08-07 amendment ratified a box to close — a declared discipline with no mechanism behind it, the same shape as
770, #692 and #693. It had already produced one real defect: GHI #630 found every¶
SUPPORT REQ citing one of the three resolving unproven-support regardless of
truth, because _dispatch_validator_scope resolves scopes through the
registry-derived runner maps. That was patched by hand-wiring a third copy of
the scope→audit knowledge (_early_return_scope_audit) — fixing the instance, not
the class.
The fix is reductive, which is the point of Movement C. Registering the three
(tier explicit, in_other_scopes=False, matching the sensitivity /
unscoped_rules / evaluation_justify_binding precedent) retired that map:
+27 source lines, −45, net −18. The fence now asserts reached − registry == ∅
rather than accommodating the exception, and the exclusion-set golden gained a
_POST_SNAPSHOT_OTHER_SCOPES_EXCLUDED hatch mirroring the GHI #741 pattern, so the
pre-collapse snapshot stays measured evidence rather than being edited.
Observed behavior is unchanged in every case — _dispatch_early_return_scopes
still fires first and short-circuits, so each flag keeps its solo 0/2/3 lifecycle
and custom prose: the three solo invocations exit 0, --qc-binding --documents
still exits 1 with the GHI #704 refusal verbatim, and bare gz validate still runs
13 default scopes.
| Verification | Result |
|---|---|
uv run gz arb ruff |
exit 0 · arb-ruff-317c63275e4b4da09715b23f44238a27 |
uv run gz arb typecheck |
exit 0 · arb-step-typecheck-23d951968d684fdeb626cabf3296cb6f |
uv run gz arb step --name unittest -- uv run -m unittest -q |
8089 tests OK, exit 0 · arb-step-unittest-32be07bf2f2545f8b92fc95b674b8ae7 |
uv run gz check |
exit 0 |
One limit recorded, not hidden. The stale "94 scopes" figure this box carried matched no enforced surface, and nothing coupled it to one. That is GHI #768's exact shape (transcribed counts couple to nothing) sitting inside the campaign that governs sequencing — the same class of defect as the stale advised step that opened this session. #768 remains open with no remedy selected.
2026-08-07 (2) — Movement C gains a family-closure box; C2 retargeted off flag count (operator-ratified)¶
Operator ruling, verbatim: "ratify both, write handoff, git-sync".
Two changes to Movement C. No box removed, nothing resequenced, no change to Movements A, B, or D, and no change to the post-1.0 pool ruling.
1. New box — close the doctrine-declared-without-mechanism family. 2. C2 amended — completion criterion is family closure, not flag count. The surface read 81 scopes at GHI #618, 92 when the box was authored, and 94 on 2026-08-07: it grew while its reduction box waited. Collapsing the count without landing the enrollment fail-close (#744) leaves #704, #745, and #748 live.
Why this is a reframing, not an expansion. "Reduce the accretion" invites shrinking 94 scopes, but most are load-bearing one-off checks over a genuinely large surface. The evidence says the target is stopping two families from producing scope #95 — a different verb.
Evidence, and the instrument that produced it. The operator declined to
ratify against throwaway analysis ("Build the class-of-failure index first"),
so the detector was built as a real surface first: chore failure-class-index,
module src/gzkit/insights/failure_classes.py, commit ae4e6dc8c. It reports,
over the 333 GHIs closed since 2026-05-09:
| Measure | Value |
|---|---|
Carrying an authored ## Class of failure section |
288 of 333 (87%) |
| Declaring themselves a recurrence of a named prior class | 71 of 288 (25%) |
| Recurrence chains of depth ≥ 3 | 15 |
| Deepest chain | 12 |
The precedent this box is modeled on. Layer drift — the one family measurably
closing (10 → 7 → 6 → 1 across May–Aug) — closed because it got three things:
a doctrine (state-doctrine.md), a regenerator (gz register-adrs), and a
fail-close (gz validate --adr-status-fresh). The doctrine family has the first
two at best. That triple is the template.
Two limits recorded on the ratification, not hidden. The ~19-member figure spans two chains that no author has linked to each other — treating them as one family is an operator judgment, not a measurement. And the index detects declared recurrence only, so it is a floor: a family nobody names stays invisible to it too.
2026-08-07 — Movement A count correction: ADR-0.35.0 is 0/10, not 0/9 (operator-ratified)¶
Operator ruling, verbatim: "Fix it and file the class-level defect".
uv run gz adr status ADR-0.35.0-canon-entry-corpus-landing reports 0/10 —
ten briefs, 01–10, all pending/draft. The Topmost banner and Movement A
item 2 both read 0/9.
Not an authoring error — coupled-surface drift. 0/9 was accurate until
c5a2614db (2026-08-02) folded the classification reader in as item 10 under
GHI #737. That commit updated no surface that counts OBPIs, so the stale figure
survived and then propagated by transcription into
ADR-pool.primary-source-corroboration (authored 2026-08-07), which quoted the
campaign rather than Layer-2. Both live sites are corrected here; the ADR line
was corrected in the same pass.
The 2026-07-29 record at § Amendments is deliberately NOT changed. Its
"verified Draft 0/9" was true on the date it was written — OBPI-10 did not
exist for another four days. Amendment records are dated history; correcting one
to match today's count would falsify the record rather than repair it.
Class-level defect filed as GHI #768, per the same ruling: nothing couples
adding or removing an OBPI to the surfaces that quote its count. 135 files under
docs/ carry a transcribed count; the remedy family is undecided, including the
option of not writing the number down at all.
Derived-count correction, not a scope change. No checklist item moved, none was added or struck; sequencing is unchanged.
2026-07-31 — Movement A capstone reaches 5/5; remaining work is the ceremony, not OBPIs (operator-ratified)¶
Operator ruling, verbatim: "update handoff and campaign, then git sync".
OBPI-0.34.0-04 (d521ace53) and OBPI-0.34.0-05 both reached attested_completed,
so ADR-0.34.0 is 5/5. Verified against the governed read, not frontmatter:
uv run gz adr status ADR-0.34.0 --json renders lifecycle_status: "Pending",
gates 1–4 pass / 5 pending, Closeout READY, validated: false.
The item does not check off. § 9a scope decision #3 (CARRIED) sets the per-ADR
done-bar at Validated or operator-parked — not at 5/5 OBPIs. What changed is the
shape of the remainder: the line previously read "remaining is OBPI-04 and OBPI-05
alone" and now reads the closeout ceremony alone. Movement A's capstone is one
Gate-5 attestation from done, and the Topmost banner is repointed accordingly.
Fourth occurrence of the identical drift on the identical line (1/5 → 2/5 → 3/5 →
5/5). The 07-29 mitigation — labelling the number a snapshot and shipping
uv run gz adr status beside it — did not stop it, and could not have: the value
is still hand-carried in Layer-1 prose that the SessionStart banner quotes verbatim.
Labelling a transcribed derived value does not stop it going stale; only rendering it
does. This is the standing evidence for the Movement D box "the campaign body as
a rendered Layer-3 view" — that box is the actual fix, and every future recurrence of
this amendment is interest paid on not having built it.
Derived-count correction plus a remainder-shape correction. No checklist item moved, none was added or struck; no ruling is carried or withdrawn.
2026-07-29 — Movement A count correction: ADR-0.34.0 is 3/5, not 2/5 (operator-ratified)¶
Operator ruling, verbatim: "fix discrepancy".
OBPI-0.34.0-03-terminal-partition-gate-and-doctrine-retirement reached
attested_completed on 2026-07-29 (f6088fabc), so the true count is 3/5.
Verified against the governed read, not the frontmatter: uv run gz adr status
ADR-0.34.0 renders OBPI 3/5, with closeout BLOCKED on OBPI-04 and OBPI-05
alone.
This is the second occurrence of the identical drift on the identical line,
four days after the correction below — so the line no longer carries the number
alone. The capstone line hand-copies a value gz adr status computes, and the
session-boot banner quotes that line verbatim; every OBPI that lands therefore
re-stales the top of every session, and clearing it costs an operator ruling each
time. The count now ships with its refresh command beside it, labelled a
snapshot rather than a fact. Per docs/governance/state-doctrine.md, a Layer-1
doc hand-carrying a Layer-3 derived value is Architectural Boundary 6 read from
the other end: the drift is the same whether the derived view is mistaken for
truth or truth is transcribed from the derived view.
Also corrected, same class — this half is agent judgment; reverse it freely.
The Topmost line routed the NEXT item at GHI #623, CLOSED 2026-07-19.
Item 2 of Movement A already states "Do not reopen #623 or #654 to find
this scope; read the ADR" and names ADR-0.35.0-canon-entry-corpus-landing as
the tracker — so the banner contradicted the checklist it summarizes and aimed
scope discovery at a closed issue. Repointed at the ADR (verified Draft 0/9).
The item, its sequence position, and its checkbox are unchanged.
Derived-count correction, not a scope change. No checklist item moved, none was added or struck.
2026-07-25 — Movement A count correction: ADR-0.34.0 is 2/5, not 1/5 (operator-ratified)¶
Operator ruling, verbatim: "#715 + campaign line 131".
The Movement A capstone line recorded ADR-0.34.0 at 1/5. Layer-2 carries a
second attested completion — OBPI-0.34.0-02-authoring-time-kind-rejection,
attested_completed with full receipt evidence — so the true count was 2/5.
Verified against the governed read, not the frontmatter:
uv run gz adr status ADR-0.34.0 renders OBPI 2/5 with OBPI-01 and OBPI-02
both attested_completed.
This is a derived-count correction, not a scope change. No checklist item moved, none was added or struck. It is recorded here because the session-boot orientation banner quotes that line verbatim, so the stale count was re-injected into the top of every session — and it had been carried unedited across six handoffs, because campaign amendments are operator-ratified and no session had held the ruling to make it.
2026-07-18 — Disposition change: TSP routing, not a rush to 1.0 (operator-ratified)¶
Operator, verbatim: "we need to change the disposition of the campaign, it is not 'rush to 1.0 now.' it is, what is the best 'traveling salesman' path through the backlog to 1.0. I think there is a tone and temperament misalignment here."
CARRIED — binding on this and every successor edition. The plan optimizes the route, not the finish date. Consequences:
- The set is taken as given; the win is in the ordering. Set-shrinking moves (bounding gates by dated census, declaring items "explicitly NOT 1.0 gates", deferral rulings) are no longer the instrument of progress. Items are sequenced, not excluded. This is why they kept resurfacing as re-adjudication.
- Re-entry cost is the metric being minimized. Measured this session: ~40 orphaned governance docs, agents re-deriving structure from source each session and getting it wrong. That is a re-entry-cost failure, and it is gzkit's actual disease — not accretion volume.
- Adjacency is the primary object. Items that share setup cost are visited together.
- The pool is visited as we inch forward (operator, 2026-07-18) — not a post-1.0 wall. This AMENDS §7: the pool is a far cluster routed to late, not a category ruled out. Nothing gets orphaned; nothing resurfaces as "but we booked that for 1.0."
- Tone is not cosmetic — it selected the plan. The frustration register of this edition ("the road to 1.0 was dragging", "largest single line item on the board") produced Movement C item 1, which proposed deleting shipped product to reduce a commit count. Temperament defects become correctness defects.
2026-07-18 — The rhythm: four mechanisms, four jobs (operator-ratified)¶
Operator, verbatim: "AGENTS.md -> how we work; magna carta -> what we are working on. handoff -> what we were doing last. airlock -> a sortie into the environment. handoff -> a market [marker] for when we leave the session. That should be our rhythm."
Also: "much of agents is there to remind you how I'd like for our working partnership to exist. the magna carta should help tell the 'story of gzkit' so we stay focused on emerging priorities AND the executive summary of what gzkit is. It is there to help you." And: "the airlock and magna carta gives us a sense of connectedness/cohesion among the items."
| Mechanism | Job |
|---|---|
AGENTS.md |
how we work — the working partnership, behavioral contract |
| Magna Carta | what we are working on — the story of gzkit, the executive summary of what gzkit is, and emerging priorities |
| handoff (entry) | what we were doing last — informs the airlock entry |
| airlock | a sortie into the environment |
| handoff (exit) | a marker for when we leave the session |
Binding consequence: the Magna Carta MUST carry the story and the executive summary. This edition does not — §1 is three lines and the remaining ~24KB is movements, rulings, and census tables. The story half atrophied, which is why each session re-derives what gzkit is from source. Restoring it is not decoration; it is the orientation organ, and it lives here rather than in a hook. Airlock + Magna Carta together supply connectedness/cohesion among the items — the route is not a flat list.
2026-07-18 — Movement C item 1 retires: install-time assembly already ships¶
Evidence, this session: gz init (src/gzkit/commands/init_cmd.py:894) copies only
canonical inputs from the wheel via importlib.resources, then calls sync_all(),
which generates every vendor surface in the adopter tree. No pre-rendered AGENTS.md
or CLAUDE.md ships in the wheel; adopters have never received one. The surviving
file-copy (sync_pkg_surfaces, sync_surfaces.py:701) is wheel-payload staging, hard
no-op'd for adopters by _pkg_surface_exists (:626).
- "Generate at install, not at commit" is already true for the product. Item retires as delivered, not as wrong.
- Operator ruling: gzkit keeps committing its own mirrors while dogfooding — verbatim:
"we are dogfooding, so we have to keep on generating/mirroring until the product settles
a bit more." The 703
gz git-synccommits are the dogfooding artifact, an accepted cost, and not a reduction target. - The control surfaces are integral product (operator, verbatim: "five copies are
wheel-borne. the control surfaces are an integral part of the product"). Already
mechanized at
.gzkit/manifest.json:45-59+gz validate --distribution(ADR-0.0.31); the prose surfaces contradict it by calling them "mirrors / generated / do not edit", which misled an agent twice this session.
2026-07-18 — Findings booked this session (route inputs, not yet sequenced)¶
- ~40 orphaned governance docs (~450KB) under
docs/governance/: 2 DELIVERED, ~24 POINTER-ONLY, ~40 ORPHANED. Includesagent-control-surface-rendering-substrate.md(26KB, foundation-tier) whose own## Agent Orientation Indexopens "Do not re-derive the rendering architecture from source each session" — and which has zero referrers anywhere in the per-turn surface. - The repo diagnosed this on 2026-05-30 (
.gzkit/insights/agent-insights.jsonl:146): "nothing loads relevant prior learning at decision time … Capture without re-injection does not bind." Prescribed fix: a hook. Shipped (OBPI-0.0.37-27, attested 2026-06-15): a markdown section inside the unread document. Correction, not enhancement — routes under ADR-0.0.37. instructions-files-dietchore acceptance criterion #9 treats the existence of a hyperlink as proof pedagogy is reachable (CHORE.md:152); all six evidence commands measure weight reduction, none measures retrieval.- Two CMS facades (§4 class):
validate_renderfires only whenproject_rootis passed, andsync_agents_md(sync_surfaces.py:407) does not pass it — the one render that ships a surface skips fidelity validation. Temperature is inert —pipeline.py:96-101documents output is byte-identical across all valid temperatures. render_content_surface()(sync_surfaces.py:637) — the doctrine-conformant render bridge — has zero production callers; one test keeps it alive.- Still no
Corpus → strmaterializer;compose()validates a hand-authored candidate. Prior session's finding stands unrefuted.
2026-07-18 — Re-adjudication is the named disease, and it fired again¶
Operator, verbatim: "I swear we've covered this before." Movement D already diagnoses exactly this — "nothing in gzkit represents the state 'settled'" — and its fix
(ruling_issued / ruling_superseded typed events, a ruling verb) is unbuilt, with
this register as the manual stand-in. The pattern across all three of this session's
findings: the diagnosis was correct, written down, and terminated in prose instead of a
mechanism. Orphaned maps (authored, not retrieved) · orientation index (prescribed as a
hook, shipped as a paragraph) · rulings (diagnosed as needing typed events, shipped as a
table someone must remember to fill).
2026-07-18 (later session) — Movement A item 1 closed; audit route inputs booked¶
Recording under § 8 "living: items check off with command evidence" — not a sequencing amendment. Movement A item 1 is checked off with the evidence inline; the queue order is untouched and no ruling is carried or withdrawn here. Anything below that would change sequencing is marked as needing operator ratification.
ADR-0.0.37 is Validated (b40a8026). The /gz-adr-audit ceremony ran with the
independent persona dispatches the skill mandates, and they disagreed — which is the point:
spec-reviewerPASS — every BEHAVIOR REQ on all 15 linked OBPIs is@covers-covered. The 57-REQ advisory is honest: of the 27 belonging to linked briefs, 26 are[SUPPORT]and 1 is[structural-fence], exempt by proof channel underADR-0.0.59.quality-reviewerCONCERNS — Layer-1 attribution drift, remediated before the receipt was emitted. The driver independently verified each claim and refuted one (F3:tier_policydoes have live consumers atcomposer.py:20,rendition_floor_coherence.py:24).
Route inputs (not yet sequenced):
- GHI #700 — FIXED,
77ad9d70._AC_LINE_PATTERNtolerated markdown emphasis around the REQ id but not around the kind tag, so**[BEHAVIOR]**lines fell to a warn-only skip branch.ADR-0.34.0-foundation-sunset— the Movement A item 3 capstone — was silently losing 6 REQs, 5 of them BEHAVIOR, whileaudit-checkreported exit 0. Repo-wide scan after the fix: 0 remaining unparseable REQ lines. Item 3's coverage arithmetic could not have been trusted before this landed. - GHI #701 — the uncovered-REQ advisory is REQ-kind-agnostic, reporting SUPPORT and
STRUCTURAL-FENCE REQs as owing
@covers. Steers agents directly into the.claude/rules/adr-audit.mdRules (c) anti-pattern. Same limitation already documented for the sibling behave gate atdata/behave_coverage_waivers.json:79,80,82. - GHI #702 — a fidelity assertion row can name the fidelity gate as its own command.
ADR-0.0.37row 4 asserted "the block is parseable by the fidelity gate", verified by running that gate; it cannot fail while being evaluated. This is §4's failure class inside the mechanism ADR-0.0.73 built to enforce §4 — cross-linked to GHI #699 as a sibling cut (#699 audits the 47 enforcement claims; #702 is the same shape on the fidelity-assertion surface, which #699's audit did not cover). A sweep of existing## Fidelity Assertionsblocks for the same row is unscoped. - GHI #703 —
REQ-0.0.37-15-05/-06are[SUPPORT]yet@covers-decorated: the inverted proof channel, inflating apparent coverage. Non-blocking (withdrawn brief).
Observation for Movement A item 2 (GHI #623), needs no ratification but changes what the
successor inherits. The audit's Attribution repair is now the honest inventory: the
composition engine's shipped half — rendition_store.py, rendition_freshness.py,
composer.py, tier_policy.py — originates in the withdrawn briefs 21/22 and is
load-bearing. What is genuinely absent is the attributable corpus→candidate generator and
the rendition ⊆ corpus lineage gate. The feature ADR re-homing this should scope to the
absent half, not re-declare the shipped half as new work.
Workflow fronts¶
Operator-directed 2026-09-12: consider all four fronts in project status, ordinary status inquiries, and session continuity. This is the standing work map; current progress requires live evidence. Front order here is an inventory; the campaign sequence, ascending feature ADR order, and operator initiation of OBPI work continue to govern execution.
- handoff system — Preserve the session's model, decisions, and open loops. Read the authored handoff, its lineage and rulings, then verify what resume actually consumes. The reported GHI #870 chain-consumption gap belongs here; check its current work order and runtime evidence before prescribing a fix.
- ghi triage — Read the live issue queue through
ghi-triage; distinguish selected repair, eligible unselected work, and actual blockers. Existing GHIs are work orders for direct repair. A queue count alone is not a health verdict. - adr/obpi campaign — Read this campaign's sequencing and ledger-backed ADR and OBPI status. Honor the lowest feature ADR with unlanded work and the operator's initiation boundary. Airlock calibration already has its successor in ADR-0.37.0; its place in the sequence is unchanged.
- new R&D — The headwater of most gzkit design (operator, 2026-09-12: "MOST
future ADRs come form work exactly like this work"). An R&D run is governed by
the operator-invoked
gz-rndskill and writes a record underdocs/rnd/. Design and rulings:docs/governance/rnd-discipline.md; evidence:docs/governance/mpas-appropriation-analysis.md. Carry the open threads indocs/governance/rules-tools-audits-refactors-alignment.mdanddocs/governance/capability-control-review-2026-09-12.md. A gap against existing declared intent remains corrective work under its owner; research does not automatically authorize a new ADR or implementation. Amended 2026-09-15.
For a general status answer, report each front's observed state, evidence date
or unresolved verification, and next action. For a focused inquiry, answer its
scope and mention material dependencies on the other fronts. Handoffs carry
this map's source plus session-specific changes; the map does not certify that
all four fronts were freshly inspected by gz status. A multi-session thread is
carried as its own named line with a pointer to its design record, never
compressed into one option beside short GHI fixes (§ Amendments 2026-09-15).
Three-pillars continuity — 2026-09-19¶
Repairs delivered; production observation HELD. The delivery account records the completed corrective scope. GHI #1028 remains open under the explicit hold in § Amendments 2026-09-19; it is not a next action until the operator resumes it. Carry this named thread and hold through handoffs without changing the four workflow fronts or campaign sequence.