P13-S16 post-acceptance reconciliation: the three documents §4a held back

Contract 4a deliberately kept these out of aee4ff9 because they describe the
state of the repository rather than the change, and staging them during
execution would have asserted that S16 had landed. It has, so they move now.

CLAUDE.md
  - Green baseline 1577 -> 1583, still the single origin for the count.
  - Added: use --no-fail-fast whenever anything is failing. The bare command
    stops at the first failing suite, which is exactly the situation every
    mutation creates -- S16's M6a read six failures over four suites bare and
    seven over all forty-two with the flag.
  - The authority is currently 1, not 0, and a base materialized before S16
    must be rebuilt rather than reused.
  - The bump rule now names BOTH classes it always covered: a change to a
    reduction verdict OR to canonical reduced state. S16 carried one of each,
    and the state-only kind is the easier to overlook while invalidating a
    base just as completely.
  - Two-tracks table: S16 LANDED, with a pointer to its unamended findings.

spec/HANDOFF_2026-08-07.md
  - Chain state and §4.3 item 9 -> LANDED at aee4ff9, each retaining what it
    said before, since the block is a record of what moved.
  - The POST-S27 authority paragraph -> currently 1, both bump classes named.
  - Records the two S16 findings that bite outside their own contract: the
    --no-fail-fast truncation, and invariant 21 abstaining on dangling
    membership rather than detecting the undo hole 0.6 attributed to it.

spec/PASS13_CANDIDATES.md
  - The S16 row is appended to, not rewritten: ACCEPTED AND LANDED at aee4ff9,
    superseding its own "EXECUTED ... NOTHING IS STAGED" sentence, RESOLVED,
    and the six contract findings listed as outstanding follow-up.

The six findings remain unamended against CONTRACT_P13S16_PROJECTION.md. Its
pins are frozen, so each needs its own amendment and review round; recording
them at both ends is what keeps them visible until then.

spec/EVIDENCE_P13S16_EXECUTION.md stays untracked -- no touch row covers it,
and adding one is an amendment, not a keyboard decision.

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-10 17:30:27 +02:00
parent aee4ff92b7
commit 3328b2c0e2
No known key found for this signature in database
3 changed files with 40 additions and 12 deletions

View File

@ -17,7 +17,7 @@ model with a LaTeX specification suite as its source of truth.
| Track | Lives in | Current head |
|---|---|---|
| **Spec / Pass 13** — wire format, bundle, ops, text projection, the `.tex` suite | `spec/`, `crates/epiphany-{core,ops,bundle,textproj,testkit}` | **P13-S27 LANDED** (`4df8e25`); **P13-S16 RATIFIED and dispatchable, pins frozen, not dispatched** |
| **Spec / Pass 13** — wire format, bundle, ops, text projection, the `.tex` suite | `spec/`, `crates/epiphany-{core,ops,bundle,textproj,testkit}` | **P13-S27 LANDED** (`4df8e25`); **P13-S16 LANDED** (`aee4ff9`) — six findings against its own contract are unamended, see its `PASS13_CANDIDATES.md` row |
| **Editor / T4** — the editing seam, engraving, the toolkit spike | `spec/PLAN_EDITOR_APP.md`, `spec/CONTRACT_EDITOR_*`, `spikes/`, `crates/epiphany-{editor-core,editor-gui,engrave,layout-ir,glyphs,render-svg}` | T4 spike, round 2 built but not run |
They are currently independent. The T1b/P13-S27 collision in
@ -85,12 +85,17 @@ reach today.
## Green baseline
```
cargo test --workspace # expect 1577 passing, 0 failed, 0 ignored
cargo test --workspace # expect 1583 passing, 0 failed, 0 ignored
cargo clippy --workspace --all-targets -- -D warnings # clean
```
**This is the single origin for the count** — `spec/HANDOFF_2026-08-07.md` used to
repeat it in three places and now points here. It moved 1570 → 1577 when P13-S27 landed.
repeat it in three places and now points here. It moved 1570 → 1577 when P13-S27 landed,
and 1577 → 1583 when P13-S16 landed (six net-new tests).
**Use `--no-fail-fast` whenever anything is failing.** The bare command stops at the
first failing suite, so a partial failure set reads as the whole one — P13-S16's M6a
reported six failures over four suites bare, and seven over all forty-two with the flag.
If the count differs on arrival, reconcile that **before** starting new work —
the mutation discipline above depends on a known-green baseline.
@ -103,14 +108,25 @@ applies, and base-bearing bundles are constructible again through the ordinary A
**What replaced it, and it is not "anything goes":** a canonical base is accepted only
when its `reduction_algorithm_version` equals the running authority,
`epiphany_ops::CURRENT_REDUCTION_ALGORITHM_VERSION`**currently `0`**. A mismatch is
`epiphany_ops::CURRENT_REDUCTION_ALGORITHM_VERSION`**currently `1`**. A mismatch is
`CanonicalBaseRequiresRebuild { base, current }`, refused on **both** the read side
(`open`) and the write side (`commit`/`commit_versioned`). Legacy-epoch bundles still
refuse a base outright.
**Any base materialized before P13-S16 must be rebuilt, not reused** — it declares `0`
and holds state the current semantics would not have computed.
**The bump discipline is the whole guarantee.** Any change to a canonical reduction
verdict MUST bump that constant — **no mechanism can detect a semantics change**, so
nothing will catch a missed bump. P13-S16 is the first rung that must move it to `1`.
verdict **or to canonical reduced state** MUST bump that constant — **no mechanism can
detect a semantics change**, so nothing will catch a missed bump. Both classes are named
because a change leaving every verdict intact while altering the reduced graph is the
easier one to overlook, and it invalidates a base just as completely.
P13-S16 made the first bump, `0``1`, and carried one change of each kind:
`CreateStaffGroup`'s verdict (applied → `ContainerNotEmpty` no-op) and `CreateStaff`'s
reduced state (it still applies, but now maintains `StaffGroup.members`). The constant's
own `Bumps` list is the record of why each version exists; a bump without its entry
leaves a number nobody can account for.
Fixtures deliberately exercising arbitrary wire versions take
`BundleCapabilities::synthetic_for_fixture(v)`; production paths take the crate-local

View File

@ -16,16 +16,28 @@ unpushed commits on any branch.
> | **§1.2 the live constraint** | no bundle anywhere may carry a canonical base | **LIFTED.** A base is accepted when its `reduction_algorithm_version` matches the running authority and refused with `CanonicalBaseRequiresRebuild { base, current }` when it does not — read side in `open`, write side in `commit`/`commit_versioned` |
> | §1.2 conformance criterion 4 | canonical-base wiring **suspended** | **RESTORED.** Both lapsed assertions are back and the suspension marker is gone from `testkit/src/roundtrip.rs`. **§1.2's warning against re-homing the snapshot to `acceleration_snapshots` stands permanently** — it was never about the suspension |
> | §1.2 the third error | `ReductionAuthorityUnavailable`, temporary | **DELETED**, replaced by `CanonicalBaseRequiresRebuild { base, current }`. The two permanent repack errors are unchanged, and **§1.2's "none may degrade to read-only" rule carries to the new error verbatim** — a stale base is the wrong materialization, not a restricted-but-correct view |
> | §1.4 chain state | `P13-S27 (UNBLOCKED) → P13-S16 (blocked on S27)` | `P13-S27 (LANDED)`**`P13-S16 (RATIFIED 2026-08-09, pins frozen, dispatchable — not dispatched, nothing implemented)`** |
> | §1.4 chain state | `P13-S27 (UNBLOCKED) → P13-S16 (blocked on S27)` | `P13-S27 (LANDED)`**`P13-S16 (LANDED 2026-08-10, `aee4ff9`)`**. *(Read "RATIFIED … dispatchable — not dispatched, nothing implemented" until S16 landed.)* |
> | §2.6, §4.3 collision | T1b and P13-S27 must not fly together | **RESOLVED** — S27 has landed. **T1b is NOT thereby free:** it remains blocked on Ruling B blocker (ii), versioned decode — see §2.3, which is still accurate |
> | §3.5, §4.2, §4.3 baseline | 1570 passing | **Moved when S27 landed. The count is in `CLAUDE.md`'s *Green baseline* and is deliberately not stated here, or anywhere else in this document** — it was kept in three places and went stale in all three |
> | §4.3 item 7 | dispatch P13-S27 | **done** |
> | §4.3 item 9 | P13-S16 dispatchable the moment S27 lands | **unblocked — but its contract is a DRAFT and needs ratification before dispatch** |
> | §4.3 item 9 | P13-S16 dispatchable the moment S27 lands | **DONE — ratified, executed and landed at `aee4ff9` (2026-08-10).** *(Read "unblocked — but its contract is a DRAFT and needs ratification before dispatch" until ratification.)* |
>
> **The authority is `epiphany_ops::CURRENT_REDUCTION_ALGORITHM_VERSION`, currently
> `0`.** Any change to a canonical reduction verdict MUST bump it, and **no mechanism
> can detect a semantics change** — the discipline is the entire guarantee. **P13-S16 is
> the first rung that must move it to `1`.**
> `1`.** Any change to a canonical reduction verdict **or to canonical reduced state**
> MUST bump it, and **no mechanism can detect a semantics change** — the discipline is
> the entire guarantee. **P13-S16 made the first bump, `0` → `1`**, carrying one change
> of each kind: `CreateStaffGroup`'s verdict and `CreateStaff`'s reduced state. *(This
> read "currently `0` … P13-S16 is the first rung that must move it to `1`" until S16
> landed.)* **A base materialized before S16 declares `0` and must be rebuilt, not
> reused.**
>
> **P13-S16 also left six findings against its own contract** — see the `EXECUTED`
> append on its `spec/PASS13_CANDIDATES.md` row, and
> `spec/EVIDENCE_P13S16_EXECUTION.md` (untracked review artifact) for the runs behind
> them. The two that bite hardest elsewhere: `cargo test --workspace` **truncates the
> failure set** at the first failing suite, so mutation work needs `--no-fail-fast`;
> and invariant 21 **abstains on dangling membership**, which is invariant 10's
> concern, so it is not the detector for the undo hole §0.6 attributed to it.
**Scope.** Written from the **spec / Pass-13 / format-epoch** session. A second
session has been committing to this repository in parallel on the **editor /

File diff suppressed because one or more lines are too long