Agent 2 — Act 1 cold read of the canonical register¶
Read 2026-09-23. Tier: historical — raw record, frozen at its date. This is what one agent reported, not a canonical finding. It binds nothing. Where its observations have since been acted on, § Disposition says so; the body above that section is left as reported and is not edited to match what the register looks like now.
Subject: the register, not gzkit. Pieces 01 and 02 assess the repository;
Astra's Phase 2 report assesses piece 01. This assesses whether
FINDINGS.md and its companions stand on their own for a reader
who arrives with nothing — the falsifiability test README.md
§ Agent 2 sequencing constraint describes.
Method, and its one caveat¶
Run as an isolated agent holding no prior context, dispatched by the main
session after the operator ruled the cold read ahead of the Phase 3
reconciliation pass. Reading was bounded to the five canonical files —
README.md, FINDINGS.md, DISAGREEMENTS.md, OPEN-QUESTIONS.md,
consequence-bands.md. The numbered pieces, raw/, Astra's report and
.gzkit/handoffs/** were not opened. Files outside docs/governance/ieee/ were
opened only to test whether a cited anchor resolves, never to supply
investigation substance. The reader wrote nothing.
The caveat, recorded because it bounds the result. The main session was by then anchored — it had read the resumed handoff chain, which carries Astra's verdict and the Agent-0 discipline failure. It was therefore not eligible to give this reading, and dispatched an unanchored agent instead. That is the correct application of the sequencing constraint, but it means the reading was taken by an agent the operator did not directly instruct. The reading is evidence, not authority, in the same sense as Astra's report.
Verdict¶
It stands with qualifications — and the qualifications are load-bearing.
Reported in full:
I can state what this investigation is, what it holds, what it prohibits and most of what it ruled, from the five files alone, and the architecture of the register (tiers, status vocabulary, class vocabulary, the "canonical is not normative" guard, the anti-convergence warnings) is unusually well built and survived a cold read intact. But I cannot state two things the register itself treats as central. First, I cannot say which findings are under challenge […] so I know roughly a quarter of the register is contested and cannot tell you which quarter, which is the one fact that governs how much weight any row can carry today. Second, I cannot state the forward plan, because eight findings route their disposition to
M-A…M-H, and the register deliberately holds those definitions only in piece 01 § 12 — a file the same register forbids Act 1 to open. […] It does not fail; it leaks at exactly the joints Phase 3 was supposed to close.
Where the attempt broke down. Asked to state the investigation's position in its own words, the reader completed every part except one:
I cannot complete the sentence "what happens next." README says the next permitted step is "Receive the Phase 2 adversarial review (
Q-13), then reconcile it row by row" — butQ-13is ruled and the report is received, so the first clause is already done, and the second is "deferred by operator decision" with no statement anywhere of what un-defers it, who resumes it, or why it was deferred. A newcomer inheriting this directory today would not know whether to wait, and for what.
Gaps, as ranked by the reader¶
- Which findings Astra rejected.
DISAGREEMENTS.mdgave a tally and a prose hint and noF-###mapping. "It is the worst gap because it is the one fact that changes how every other row is read." M-A…M-Hare undefined inside the boundary. Cited as the disposition of F-001, F-002, F-003, F-006, F-013, F-019, F-021, F-025 and ofQ-04, and held only in piece 01 § 12. Consequence: F-021 callsM-D"Highest-risk item in the program" and a newcomer cannot evaluate the claim.M-Fis never cited anywhere in the five files, so its existence cannot be determined.- Whether an operator ruling changes a row's status.
OPENis defined as "disposition not yet settled", yet F-008 and F-015 read "is settled" onOPENrows. The register uses settled in two senses — evidence-settled and operator-settled — and never separates them. - Why the reconciliation was deferred, and what resumes it. Stated as fact in three places; never given a reason, an owner or a trigger.
- Provenance of thirteen of sixteen consequence-band rows. The PROVISIONAL
block names three findings, then asserts "Every
D2score in this file is derived from a Phase 1 finding." SevenD2rows name no finding. - What the IRON LAW is. Cited four times, never stated or pointed at.
- What Architectural Boundaries 1 and 2 say. Binding at
Q-03,Q-09and F-006; never quoted. - Re-derivation is unavailable to the cold reader. Group-B re-derivations
route to
02-requirements-vs-release-evidence/measure.py, inside the prohibited tier — structural, and probably unavoidable.
Internal contradictions, as reported¶
- Has the Phase 2 report been read? README § Handoff said "has not been
read";
DISAGREEMENTS.md§ Status and README's own phase table said it had. Two different gate conditions on the same act: README barred promotion toCONFIRMED"before the Phase 2 report is read",DISAGREEMENTS.mdbarred it "until this file is populated." - Is
F-###ratified?Q-11ruled it ratified;FINDINGS.md§ Identifier convention,FINDINGS.md§ Amendments and README § What must not be assumed all said it was not. "Three of five files contradict the ruling." Q-12rules and un-rules itself in one entry — headed RULED, ending "Unratified." four lines later.- Where Astra deposits. README § Roles said
raw/; the file table andQ-13said the directory root. The file is at the root. - Nine vs. ten
D2surfaces.consequence-bands.mdsaid nine; its own table scores ten. Replicated into F-019. - The challenge tally does not sum. "of roughly 26 rows, 8 REJECT, 3 DOWNGRADE TO HYPOTHESIS, 11 CONFIRM WITH QUALIFICATION, 1 CONFIRM, 1 NEEDS MORE EVIDENCE" = 24.
- Orphaned conditional. README § Current gate: "Until then no finding may be
promoted to
CONFIRMED" — no antecedent, in a binding paragraph. - Change logs deny their own bodies.
DISAGREEMENTS.md§ Amendments recorded the Phase 2 report as "Awaiting";FINDINGS.md's single amendment described a ruling-free file carrying eight operator-ruling blocks. "Since every event is dated 2026-09-22, the change logs cannot disambiguate order."
Anchors checked¶
Resolved as cited, verified by opening the line: adr_demote.py:475;
obpi_lifecycle.py:256-260; triangle.py:24-31; arb/validator.py:279;
.claude/hooks/pipeline-gate.py:156-158; airlock/enter.py:158-170;
commands/airlock.py:14-18; session_start.py:185 and handoff_api.py:1181;
tautological_tests.py:108-134; enforcement-claim-nc-audit-2026-07-18.md:50;
RELEASE_NOTES.md:1226; adr_promote.py:156;
Ledger.get_post_validation_failed_gates; data/mechanical_witness_grandfather.json;
ADR-0.0.20; ADR-pool.feature-adr-semver-discipline.md; gz validate
--unscoped-rules and --invariant-coherence.
F-034's residue claim was verified true: the parking verb it says does not exist
still does not exist, though parser_obpi.py's own docstring claims it is
registered.
Did not resolve as cited: src/gzkit/gates.py (no such path; and at the real
path the line numbers land on Gate 4's PASS/FAIL, not _run_gate_5);
src/gzkit/deprecations.py:41 (line right, path wrong);
version_sync.py:289 (claim belongs at :46); src/gzkit/.../release.py:201-203
(path elided in the register); pool-curation.md:47 (quote accurate, sits at
:106); a dangling "Phase 3 Q4"; stale Q8 and Q2; and
design-candidates.md, ruled into existence by Q-12 and absent.
Load-bearing terms used without definition¶
The two that blocked the reading: IRON LAW — "Q-05 is a ruling about
it; you cannot evaluate the ruling without it" — and Architectural
Boundaries 1 and 2.
Assumed throughout, never defined: OBPI, brief, ADR, REQ, TASK, PRD; lane and
kind; the five gates and Gate 5; the ledger and the L1/L2/L3 layering; corpus and
rendition; @covers; ARB receipt; airlock and seam; handoff; pool ADR and
promote/demote/park; GHI; FAIL-CLOSED; grandfather file and ratchet; drift and
reconcile.
Standards vocabulary assumed: the normative force of shall/should, used
as an argument throughout and never explained; integrity level; baseline and the
functional/developmental split; declared undeveloped argument; correspondence
method, viewpoint, view; information item; test oracle; V&V independence; and
embedded, an IEEE 1012 Annex C category used in README as if defined, with
its only explanation inside a prohibited file.
Coined and not defined: the Class: — value on F-025, F-032, F-034, F-035 —
the class vocabulary admits four values and — is not one of them.
What the reader did not open, and what it believed was there¶
I wanted Astra's review, twice and hard — once for the eight
REJECTrows, once to test whetherDISAGREEMENTS.md's characterisation of them […] is the whole of what was rejected or a summary of it. That wanting is the finding: the register's most important current fact about itself is held only in a file it labels "historical… challenge input, not a second register," and the summary it offers in its place is not enough to act on.
It did not want the numbers: "the ILLUSTRATIVE doctrine is stated clearly enough that I never felt the need to check one, which is the register working as designed."
What I did not miss, and this is the strongest thing I can say for the register: I never once needed a piece to understand what kind of thing this investigation is, what it forbids, or why it forbids it. […] The failures are at the seams — a deferred pass, a ruling that landed in one file and not the other four, and an evidence tier that four dispositions route into. Those are repairable in the register without touching the pieces.
Disposition, as of 2026-09-23¶
Recorded here so a later reader can tell the reading from its consequences. The body above is not edited to match.
| Item | Disposition |
|---|---|
| Gap 1 — which findings Astra rejected | Closed. The reconciliation pass mapped all 25 challenge rows onto F-### ids. Also corrected a miscount the reading inherited: the table has 25 rows and 9 REJECT, not 26 and 8 |
Gap 2 — M-A…M-H undefined; M-F uncited |
Closed. Summarised at README.md § The measurement program, from 01 § 12. M-F does exist — Gate 4 vs Gate 2 duplication — and is the measurement home of D-08. M-H is already discharged by consequence-bands.md, so the program is 7/8 outstanding |
| Gap 3 — two senses of settled | Open. No ruling yet separates evidence-settled from operator-settled |
| Gap 4 — why the deferral, what resumes it | Closed by event. The operator lifted it and the pass ran |
Gap 5 — provenance of seven D2 rows |
Partly closed. Traced row by row: seven of ten are finding-derived, not three; three genuinely are not (Attestation/completion, @covers binding, Distribution/gz init) and are now recorded as independently observed. Whether to author findings for those three is a Phase 4 decision |
| Gaps 6–7 — IRON LAW, Architectural Boundaries | Closed. README § Terms this series cites as binding now points at the authority for both |
| Gap 8 — re-derivation unavailable in-boundary | Narrowed. The evidence directory is now tiered as tooling, not narrative: measure.py holds no conclusions and carries no literals from its authoring date, so reading it cannot anchor a future Act 1. The numbered pieces and raw/ remain barred. This narrows a binding reading list and the operator may overturn it |
| Contradiction — has the report been read | Closed. Reconciliation resolved it; the CONFIRMED bar was narrowed to a row the review never reached |
Contradiction — F-### ratified |
Closed. Q-11 confirmed 2026-09-23; the three denying files corrected |
Contradiction — Q-12 self-contradictory |
Closed. Q-12 confirmed; "Unratified." struck; the file is created when Phase 4 opens, so its absence is now the ruling working |
| Contradiction — Astra's deposit path | Closed. README § Roles now states the report sits at the directory root by Q-13, with raw/ holding the tier statement |
Contradiction — nine vs. ten D2; the 24/26 tally |
Closed. Both corrected, in consequence-bands.md, F-019 and DISAGREEMENTS.md |
| Contradiction — orphaned "Until then" | Closed. Reworded to name the reconciliation pass; no prohibition changed |
| Contradiction — change logs denying their bodies | Partly closed. Superseded entries are retained as dated records rather than rewritten; new entries are dated 2026-09-23 so the log can order itself |
| Anchors that did not resolve | Closed in the five canonical files. Still present in frozen pieces 01 and 02, which may be corrected only by a later piece |
| Undefined vocabulary beyond the two named | Open. No glossary exists for the series |
The reading's own status. It is not a finding and carries no F-###. Its
strongest claim — that the register leaks at the seams rather than failing — was
tested by the reconciliation pass that followed, which found one further gap the
cold read could not see from inside its boundary: a challenge row with no
F-### to land on, recorded at DISAGREEMENTS.md D-08. The seeding of
FINDINGS.md from the pieces was not exhaustive either.