P13-S27 amendment 4: an inferred gate result is not a gate result

The independent review of amendment 3 returned two findings; sweeping the row
adjacent to the second found a third. Three findings, all blocking.

1. Gates 1-3 were no longer evidenced against the final staged tree, and two
   claims asserted otherwise. Amendment 1 corrected the false writer comment
   IN CODE, after the gates had run. Amendment 3 then wrote both "the
   implementation has survived all three reviews unchanged" and "gates 1-3
   stand on an unchanged staged tree." Both false.

   A comment cannot change behaviour, but the gate is specified over the
   staged artifact, not over one a reader is invited to infer is equivalent.
   This is the substitution CLAUDE.md forbids by name -- "reasoning that a
   mutation would fail signs nothing" -- committed in the document whose
   subject is a check that was a tautology because nobody had measured it.

   Both claims corrected, and gates 1-3 re-run cold after cargo clean -p on
   all four touched crates:

     gate 1  1577 passed / 0 failed / 0 ignored, 42 suites, cargo exit 0
     gate 2  1.95.0, exit 0, 0 warning/error lines, all four crates
             observed re-Checking-ed, so not a cache replay
     gate 3  1.95.0, exit 0

   The 1577 is unchanged from execution, which is the expected outcome for a
   comment fix -- but it is now measured rather than predicted, and that
   distinction is the finding.

   Method note: both re-runs were first captured through tail, which
   truncated the aggregate counts and the Checking lines -- the same
   truncated-evidence failure §0.4 records as its second instrument failure.
   Caught and re-run with full capture before reporting. A gate result read
   through tail is not a gate result.

2. Round 9's finding-1 disposition still gave M7's reference home as
   epiphany-testkit, superseded in round 12 -- which found
   render_text_document is pub(crate) to epiphany-textproj and pinned the
   harness there. Supersession pointer added, following the convention round
   8's cell already uses.

3. Sweep: round 9's finding-2 disposition had the same defect. Its clause
   "with any difference enumerated and classified rather than assumed" was
   superseded in round 10, which found a byte difference would have a third
   cause outside both permitted classifications. Pointer added naming rounds
   10, 11, 13 and 14 as the chain that replaced it.

Findings 2 and 3 are the shape amendments 2 and 3 kept finding: a statement
true when written, left standing unmarked once a later round overruled it. A
disposition column is a history; unmarked, it reads as instruction.

Gates 4, 4a and §2 rules A/B re-run rather than inferred: staged 21, gate 4
--check clean, parse.rs/vectors.rs/text_projection.tex absent,
COMPANION_VERSION (0, 14, 0) both sides.

Amendment 4 changed no pin, no gate mechanic, no touch row and no staging
rule. Implementation still staged, still not accepted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ps1szk2mSfgp4Cz21eVH9x
This commit is contained in:
Levi Neuwirth 2026-08-09 14:02:41 +02:00
parent 727f9393a2
commit 1c0a6f02dc
No known key found for this signature in database
1 changed files with 81 additions and 11 deletions

View File

@ -21,10 +21,18 @@ and the rung-type paragraph, so it **needs its own independent pass before
completion is accepted.** The implementation remains staged and uncommitted; only completion is accepted.** The implementation remains staged and uncommitted; only
the amendments are committed. the amendments are committed.
**The implementation has survived all three reviews unchanged.** Every defect found **The implementation has changed ONCE since execution, and only once: amendment 1
since execution has been in this contract, not in the 21 staged files — worth corrected a false comment in `bundle.rs`.** *(Amendment 3 claimed it had "survived
stating plainly, because three rounds of amendment traffic can read as instability all three reviews unchanged"; that was false, and amendment 4 corrects it.)* Every
in the work when it is instability in the document describing it. other defect found since execution has been in this contract rather than in the 21
staged files — worth stating, because four rounds of amendment traffic can read as
instability in the work when it is instability in the document describing it. But
**"only a comment" is not a licence to infer a gate result**, which is what amendment
3 did.
**Gates 13 were therefore RE-RUN against the final staged tree, cold, on
2026-08-09** — `cargo clean -p` on all four touched crates first, so the result is
the artifact and not a cache. See amendment 4.
**Gate 4's earlier "clean" result is WITHDRAWN**, and the reason belongs at the **Gate 4's earlier "clean" result is WITHDRAWN**, and the reason belongs at the
top: it was measured against §2's touch table alone, while §2 also carried an top: it was measured against §2's touch table alone, while §2 also carried an
@ -214,7 +222,8 @@ rows — read it off, do not restate it.
| execution review 1 | 5 | 3 | **yes — against the staged tree** | | execution review 1 | 5 | 3 | **yes — against the staged tree** |
| execution review 2 | 5 | 4 | **yes — 4 of 5; the fifth from the fix-every-site sweep** | | execution review 2 | 5 | 4 | **yes — 4 of 5; the fifth from the fix-every-site sweep** |
| execution review 3 | 6 | 5 | **yes — 3 of 6; three from the sweep, two of those in a pin** | | execution review 3 | 6 | 5 | **yes — 3 of 6; three from the sweep, two of those in a pin** |
| **Total** | **81** | **59** | one amendment per row | | execution review 4 | 3 | 3 | **yes — 2 of 3; the third from sweeping the adjacent row** |
| **Total** | **84** | **62** | one amendment per row |
**This block previously read "amended three times … fifteen findings so far, **This block previously read "amended three times … fifteen findings so far,
eight of them blocking"** — the round-2 figures, left standing through rounds 3 eight of them blocking"** — the round-2 figures, left standing through rounds 3
@ -374,8 +383,17 @@ both blocking, **both in M7's comparator — the text round 8 had just rewritten
| # | Finding | Disposition | | # | Finding | Disposition |
|---|---|---| |---|---|---|
| 1 | **Test 10b is not a "genuinely validated" reference.** Its write-side capability is `synthetic_for_fixture(0)`; only its *reopen* uses the real authority. M7 would have compared one synthetic fixture against another, with the validated half of the claim simply absent | M7 now **builds its own reference** in `epiphany-testkit`: commit a base under `caps` derived from the real constant, so pin 3a validates it on the way in | | 1 | **Test 10b is not a "genuinely validated" reference.** Its write-side capability is `synthetic_for_fixture(0)`; only its *reopen* uses the real authority. M7 would have compared one synthetic fixture against another, with the validated half of the claim simply absent | M7 now **builds its own reference**: commit a base under `caps` derived from the real constant, so pin 3a validates it on the way in. **The crate this cell named — `epiphany-testkit` — was SUPERSEDED IN ROUND 12**, which found `render_text_document` is `pub(crate)` to `epiphany-textproj` and pinned the harness **there**. Read M7 |
| 2 | **The field enumeration could not support its conclusion.** It claimed "everything that could carry provenance" while omitting `FixedHeader.file_uuid`**the field it required to match** — plus the superblock's `generation`, `manifest_offset`, `manifest_length`, `manifest_hash`, and the manifest outside `canonical_base` | Replaced with **whole-`image()` byte comparison**, with any difference enumerated and classified rather than assumed | | 2 | **The field enumeration could not support its conclusion.** It claimed "everything that could carry provenance" while omitting `FixedHeader.file_uuid`**the field it required to match** — plus the superblock's `generation`, `manifest_offset`, `manifest_length`, `manifest_hash`, and the manifest outside `canonical_base` | Replaced with **whole-`image()` byte comparison**. **The clause "with any difference enumerated and classified rather than assumed" was SUPERSEDED IN ROUND 10**, which found a byte difference would have a *third* possible cause outside both permitted classifications — making the classification unsound and the comparison meaningless. Round 10 replaced it with an inherited-alignment round trip; rounds 11, 13 and 14 then added `B_fixed`, the control, and necessary-but-insufficient equality. Read M7 |
> **Both cells above carried superseded dispositions with no marker — found by
> amendment 4, one from the review and one from sweeping the adjacent row.** The
> convention exists: round 8's cell says outright that it *"records what round 8
> decided, not what the contract now says."* Round 9's two cells never got it, and
> read as current for ten rounds. **A disposition column is a history, and history
> without supersession markers reads as instruction** — which is how a reader arrives
> at M7 expecting a `epiphany-testkit` harness that two rounds ruled cannot exist
> there.
**Finding 1 is a collision between two of this contract's own designs, not a **Finding 1 is a collision between two of this contract's own designs, not a
typo.** Round 4 made test 10b synthetic-on-write **deliberately**, so M5b's two typo.** Round 4 made test 10b synthetic-on-write **deliberately**, so M5b's two
@ -744,10 +762,62 @@ consecutive reviews have now left those untouched.**
**Status: the staged implementation is still NOT accepted.** Amendment 3 changed **Status: the staged implementation is still NOT accepted.** Amendment 3 changed
**pin 3**, which is a stronger claim than amendment 2's changes and needs its own **pin 3**, which is a stronger claim than amendment 2's changes and needs its own
independent pass. **No gate needs re-running for amendment 3** — it changed no independent pass. Amendment 3 changed no staging rule, no gate mechanic and no touch
staging rule, no gate mechanic and no touch row; gates 13 stand on an unchanged row, so gates 4, 4a and §2's rules A/B were re-run under amendment 2 and are
staged tree, and gates 4, 4a and §2's rules A/B were re-run under amendment 2 and unaffected.
are unaffected.
> **This paragraph also said "gates 13 stand on an unchanged staged tree", and that
> was FALSE — corrected by amendment 4.** The staged tree was **not** unchanged:
> amendment 1's finding 5 was *"corrected in code"* in `bundle.rs`, after the original
> gate run. **Gates 13 have been re-run cold; see amendment 4 for the results.**
**Post-ratification amendment 4 — 2026-08-09, on the independent review of
amendment 3.** Three findings, **all three blocking**. Two from the review, the third
from sweeping the row adjacent to the second.
| # | Finding | Disposition |
|---|---|---|
| **1** | **Gates 13 were no longer evidenced against the final staged tree, and two claims asserted otherwise.** Amendment 1 corrected the false writer comment **in code**, after the gates had run; amendment 3 then wrote both *"the implementation has survived all three reviews unchanged"* and *"gates 13 stand on an unchanged staged tree"*. **Both false.** A comment cannot change behaviour, but the gate is specified over the staged artifact, not over an artifact a reader is invited to infer is equivalent | Both claims corrected, and **gates 13 re-run cold** with `cargo clean -p` on all four touched crates first. Results below |
| **2** | **Round 9's finding-1 disposition still gave M7's reference home as `epiphany-testkit`** — superseded in round 12, which found `render_text_document` is `pub(crate)` to `epiphany-textproj` and pinned the harness there. The cell read as current | Supersession pointer added at the round-9 site, following the convention round 8's cell already uses |
| **3** | **Round 9's finding-2 disposition had the same defect.** *(Sweep.)* Its clause *"with any difference enumerated and classified rather than assumed"* was superseded in **round 10**, which found a byte difference would have a third possible cause outside both permitted classifications — making the classification unsound | Supersession pointer added, naming rounds 10, 11, 13 and 14 as the chain that replaced it |
**Finding 1 is the one that matters, and it is an instance of this repository's
central rule.** `CLAUDE.md` requires that a mutation be *observed* to fail, because
**"reasoning that a mutation would fail signs nothing."** Amendment 3 reasoned that a
comment-only change could not move a gate result and reported the gate as standing.
**That is the same substitution — an inference where a measurement is specified** —
committed in the document whose subject is a check that was a tautology because
nobody had measured it. The gates are cheap; the inference cost four rounds of
credibility.
**Gates 13, re-run cold against the final staged tree, 2026-08-09:**
| Gate | Toolchain | Result |
|---|---|---|
| 1 `cargo test --workspace` | default (1.97.1) | **1577 passed / 0 failed / 0 ignored, 42 suites**; `cargo` exit 0 |
| 2 `clippy --workspace --all-targets -- -D warnings` | **1.95.0** | exit 0, **0** warning/error lines; all four touched crates observed re-`Checking`ed after `clean -p`, so the result is not a cache replay |
| 3 `fmt -p …×4 --check` | **1.95.0** | exit 0 |
The 1577 figure is unchanged from execution, which is the *expected* outcome for a
comment correction — **but it is now measured rather than predicted**, and that
distinction is the whole of finding 1.
> **Method note, recorded because gate evidence is what this amendment is about.**
> Both gate re-runs were first captured through `tail`, which **truncated the
> aggregate test counts and the `Checking` lines** — the same
> truncated-evidence failure §0.4 records as its second instrument failure, and one
> `CLAUDE.md` names by name. Caught and re-run with full capture before anything was
> reported. **A gate result read through `tail` is not a gate result.**
**Findings 2 and 3 share the shape amendments 2 and 3 kept finding:** a statement that
was true when written, left standing without a marker once a later round overruled it.
The disposition column is a *history*; unmarked, it reads as *instruction*.
**Status: the staged implementation is still NOT accepted.** Amendment 4 changed no
pin, no gate mechanic, no touch row and no staging rule — it corrected two false
status claims, re-ran gates 13, and marked two superseded dispositions. It still
needs an independent pass, but it is the first amendment whose changes are confined to
the historical record and the gate evidence.
**Review round 19 — 2026-08-08, independent, against the round-17/18 working **Review round 19 — 2026-08-08, independent, against the round-17/18 working
tree. ZERO FINDINGS. The first clean round in nineteen.** tree. ZERO FINDINGS. The first clean round in nineteen.**