Post-S27 docs: scope the supersessions properly in handoff and S16 contract

Follow-up review found the previous reconciliation half-done in two places.
Documentation only; the accepted S27 code is untouched.

spec/HANDOFF_2026-08-07.md -- it declared CLAUDE.md the sole origin for the
green baseline and then stated the number twice anyway, once in its own update
table and once in §3.5. Both replaced by pointers; the figure now exists in
exactly one file. The §1.2 marker also said everything following it was
pre-S27 while two post-S27 notes sat inside that section. The notes are
deleted and their substance folded up into the top block's table rows -- the
permanent acceleration_snapshots warning onto the conformance row, the
"may not degrade to read-only" carry-over onto the errors row -- so §1.2 is
now purely a dated record. The marker is also scoped to §1.2 rather than
"everything after," which would have wrongly claimed §1.4 onward.

spec/CONTRACT_P13S16_PROJECTION.md -- pin 0 still carried live pre-S27
instructions: no authority exists, no mechanism detects a stale base,
ids.rs:288's catalog claim is false, this rung cannot execute, the ledger
stays blocked on P13-S27, and file S27. A status-and-ledger update did not
reach any of them.

- Pin 0 now carries a discharge marker BEFORE the pin, not only after it, so a
  top-down reader meets the correction before the false claims.
- The discharge answers each falsified claim individually in a table, and
  replaces all three numbered requirements. Pin 0's deliberate narrowing --
  that no history audit was done, so the stronger "never detectable" claim
  must not be written -- survives and still binds.
- Requirement 3 inverts rather than disappears: stale bases are now rejected
  and S27 owns those tests, so this rung must not add a second detection path;
  what it must do instead is bump CURRENT_REDUCTION_ALGORITHM_VERSION to 1.
- Pin 11's live "File P13-S27 in the same edit" instruction is struck inline,
  not only in its preamble, and the retained reasoning is properly blockquoted
  with every claim in it marked false.
- §6 report requirement 2a required confirmation that nothing was added
  detecting stale bases -- the opposite of what is now correct. Rewritten to
  require the version bump with its Bumps-list entry, no second detection
  path, and the unchanged operation_catalog.tex rebuild note.
- "The P13-S16 row is marked blocked on P13-S27" corrected; "does NOT move to
  RESOLVED" is retained, since it is still true and is the distinction that
  matters -- unblocked, dispatchable and resolved are three different states.

Line-number citations throughout the S16 contract predate S27's 795-line
bundle.rs change and are NOT re-derived here; that is recorded as part of
ratification rather than silently patched.

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 15:39:50 +02:00
parent 8df798d907
commit 9153623aa1
No known key found for this signature in database
2 changed files with 112 additions and 36 deletions

View File

@ -148,6 +148,16 @@ There are 20 invariants (`invariants.rs:149`, count guard `:6064`). 21 is free.
## §1. Pins
> ### PIN 0 IS DISCHARGED — read this before the pin. P13-S27 landed 2026-08-09.
>
> **Everything in pin 0 below is a dated record of the pre-S27 tree.** Its central
> claims — that no constant names the current reduction semantics, that no mechanism
> detects a stale base, that `ids.rs:288`'s catalog claim is false, and that **this rung
> therefore cannot execute** — are **all now false**, and its three numbered
> requirements are superseded. **The discharge, with each claim answered individually
> and the replacement requirements, is at the end of this pin.** Read the pin as history;
> do not execute it.
**Pin 0 — declare the reduction-semantics break; do not pretend it is
containable.**
@ -226,6 +236,55 @@ S27's disposition. What pin 0 still requires of the eventual rung:
rejected; nothing rejects them. The break is recorded, not guarded, and the
contract says so plainly rather than implying coverage.
---
### PIN 0 IS DISCHARGED — P13-S27 LANDED 2026-08-09 (`4df8e25`)
**Everything above in pin 0 is a dated record of the pre-S27 tree and MUST NOT be
executed as written.** S27 built the machinery whose absence pin 0 documented, so the
pin's premises, its conclusion, and all three of its numbered requirements are
superseded. They are retained because the *reasoning* is what motivated S27, and because
`operation_catalog.tex`'s rebuild note still has to be written.
**Which of pin 0's factual claims are now FALSE**, stated individually so none is left
standing by implication:
| Pin 0 said | Now |
|---|---|
| "no constant or accessor naming the implementation's current reduction semantics" | **`epiphany_ops::CURRENT_REDUCTION_ALGORITHM_VERSION`** (currently `0`), plus `Bundle::capabilities()` as the accessor |
| "`ids.rs:288``:289` … asserts a false fact about another crate" | **Made true** by S27's pin 8 — the same doc comment now names the real location and mechanism |
| "the current implementation has **no mechanism** to detect a reduction-semantics change" | A mismatch is refused with `CanonicalBaseRequiresRebuild { base, current }` on **both** the read path (`open`) and the write path (`commit`/`commit_versioned`) |
| "**this rung cannot execute**" | **It can.** This contract is UNBLOCKED — see the status block. It is still a DRAFT and needs ratification, which is a different bar |
**Pin 0's narrowing survives and still binds.** *This inspection does not establish that
no reduction-semantics change in the project's history was ever detectable* — S27 did
not perform that history audit either, and the stronger sentence still must not be
written into the ledger.
**What replaces the three requirements:**
1. **State the break** in `operation_catalog.tex`'s Revision History exactly as written
above — canonical bases materialized before this rung must be **rebuilt**, not
reused. **Unchanged.** But the ledger half is superseded: the P13-S16 row is
**UNBLOCKED, not blocked on P13-S27** — see pin 11, amended the same day.
2. ~~**File P13-S27**~~**DISCHARGED.** S27 has its own row, its own ratified
contract, and its own `RESOLVED — IMPLEMENTED 2026-08-09 (pin 10)` marker. Nothing
here is left to file.
3. **Assert nothing it cannot enforce** — **the principle stands; its application
inverts.** Stale bases *are* now rejected, and S27 owns the tests that prove it. So
this rung must not re-assert S27's guarantee, and must not add a second detection
path. **What it MUST do instead is bump `CURRENT_REDUCTION_ALGORITHM_VERSION` to
`1`**, because it changes `CreateStaffGroup`'s reduction verdict. **No mechanism can
detect a missed bump** — S27's authority doc is explicit that the discipline is the
entire guarantee — so the bump is this rung's obligation and nothing will catch its
absence.
> **Line-number citations in this contract predate S27 and have NOT been re-derived.**
> S27 changed `bundle.rs` by 795 lines, so `bundle.rs:989`, `:396` and `ids.rs:288`
> above — and every other `bundle.rs` reference in this document — are stale as
> locators even where the claim about them is historical. **Re-deriving them is part of
> ratification**, not something this supersession did.
**Pin 1 — refuse a non-empty carried `members`, using the existing helper.**
In `create_staff_group` (`reduce.rs:4458`), before the liveness loop, refuse a
carried non-empty `members` with `container_not_empty()`. Match the idiom and
@ -406,24 +465,38 @@ unnecessary), the base-ingest hazard, the `t8b` inversion, the `t6`/`t7`/`t9`
revisions, and — per pin 0 — that canonical bases materialized before this rung
must be rebuilt rather than reused.
**File P13-S27 in the same `spec/PASS13_CANDIDATES.md` edit** — it is a
prerequisite discovered by this rung, not independent ledger cleanup, and the
two rows must land together so the blocking relation is visible from either end.
Its claim, at the scope §0's inspection supports: the reduction-version
machinery is **self-referential**`reduction_version_for` (`bundle.rs:989`)
sources a new superblock's version from the canonical base's own self-report,
and `open` (`bundle.rs:396`) checks only that the two agree — so **the current
implementation has no mechanism comparing either against the semantics it
actually implements**, and `core_spec.tex:11614`'s rebuild requirement is
unenforced. Supporting: no constant or accessor names the current semantics, and
`ids.rs:288`'s claim that the catalog lives in `epiphany-ops` is false — a
second instance of **P13-S26**'s pattern.
~~**File P13-S27 in the same `spec/PASS13_CANDIDATES.md` edit**~~ — **DISCHARGED
2026-08-09; do not execute.** S27 was filed, contracted, ratified, implemented and
landed at `4df8e25`, and its row carries `RESOLVED — IMPLEMENTED 2026-08-09 (pin 10)`.
The blocking relation this instruction existed to make visible from both ends is now a
*resolved* relation recorded at both ends. **The reasoning below is retained as the
record of why S27 was filed, not as work to do.**
> It is a
> prerequisite discovered by this rung, not independent ledger cleanup, and the
> two rows must land together so the blocking relation is visible from either end.
> Its claim, at the scope §0's inspection supports: the reduction-version
> machinery is **self-referential**`reduction_version_for` (`bundle.rs:989`)
> sources a new superblock's version from the canonical base's own self-report,
> and `open` (`bundle.rs:396`) checks only that the two agree — so **the current
> implementation has no mechanism comparing either against the semantics it
> actually implements**, and `core_spec.tex:11614`'s rebuild requirement is
> unenforced. Supporting: no constant or accessor names the current semantics, and
> `ids.rs:288`'s claim that the catalog lives in `epiphany-ops` is false — a
> second instance of **P13-S26**'s pattern.
>
> *(**Every claim in this quoted block is now false** — S27 built the machinery,
> `ids.rs:288` was made true by its pin 8, and `core_spec.tex:11614` is enforced. It is
> kept verbatim as the filing that produced S27, not as a description of the tree.)*
**Do not write the stronger historical claim** ("no reduction-semantics change
has ever been detectable"); §0 does not establish it.
**The P13-S16 row does NOT move to RESOLVED in this edit.** It records the
disposition-A plan, names this contract, and is marked **blocked on P13-S27**.
disposition-A plan, names this contract, and is marked ~~**blocked on P13-S27**~~
**UNBLOCKED — S27 landed `4df8e25`** *(corrected 2026-08-09)*. **"Not RESOLVED" still
holds** and is the part that matters here: this rung has not been implemented, and
unblocked, dispatchable and resolved are three different states.
---
@ -543,8 +616,20 @@ its evidence at `invariants.rs:69``:71` must stay intact.
1. The nine mutations (M1M9), each with verbatim failure output.
2. The nine gate results, each with its command.
2a. For pin 0: confirmation that **nothing** was added claiming to reject or
detect stale canonical bases, and that the break is recorded only in prose.
2a. **REWRITTEN 2026-08-09 — it required the opposite of what is now correct.** It read:
*"For pin 0: confirmation that **nothing** was added claiming to reject or detect
stale canonical bases, and that the break is recorded only in prose."* That was right
while nothing rejected them. **S27 now does**, on both the read and write paths, so a
report obeying the old text would confirm the absence of a guarantee that exists.
**As rewritten, the report must state:**
- that **`CURRENT_REDUCTION_ALGORITHM_VERSION` was bumped to `1`**, with the bump's
entry added to the constant's own "Bumps" list — this rung changes
`CreateStaffGroup`'s reduction verdict, and **nothing can detect a missed bump**;
- that **no second detection path was added.** S27 owns the check and its tests; a
rung that re-implements the guarantee it depends on has built a duplicate that can
disagree with the original;
- that the rebuild break is recorded in `operation_catalog.tex`'s Revision History,
**which is unchanged from the original requirement.**
3. The staged file list, and the test-count delta with its cause.
4. The four pin-8 verdicts, and the `t6`/`t7`/`t9` revisions with what each
asserted before and after.

View File

@ -14,11 +14,11 @@ unpushed commits on any branch.
> | Section | Said | Now |
> |---|---|---|
> | **§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 the third error | `ReductionAuthorityUnavailable`, temporary | **DELETED**, replaced by `CanonicalBaseRequiresRebuild`. The two permanent repack errors are unchanged |
> | §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 (UNBLOCKED, DRAFT — needs ratification)`** |
> | §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 | **1577 passing, 0 failed, 0 ignored, 42 suites.** `CLAUDE.md`'s *Green baseline* is the single origin; this document no longer repeats the figure |
> | §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** |
>
@ -142,10 +142,10 @@ Normative text: `core_spec.tex` §"The Container Epoch" +
### 1.2 The live constraint — LIFTED 2026-08-09 by P13-S27 (`4df8e25`)
> **This section is a dated record, not a live rule. See the POST-S27 UPDATE at the top
> for the state that replaced it.** The constraint below held only until S27 landed, and
> S27 has landed. Bases are now validated against the running authority rather than
> refused categorically. **Everything after this marker describes the pre-S27 world.**
> **This section is a dated record, not a live rule.** The constraint it states held only
> until S27 landed, and S27 has landed. **The rest of §1.2 — down to §1.3 — describes the
> pre-S27 world and must not be followed.** What replaced it is in the **POST-S27 UPDATE
> at the top**, which is the only place that state is given; it is not restated here.
**Until P13-S27 lands, no bundle anywhere may carry a canonical base** — not in
production, not in tests, not in the conformance suite. Four rules compose to
@ -161,10 +161,7 @@ Consequences you will hit immediately if you forget:
superblock bytes directly through the public `encode()`s.
- Two refusal tests are unit tests over `Manifest`, not end-to-end, for exactly
this reason, and say so in their doc comments.
- *(**POST-S27: no longer suspended.** S27 restored both assertions and deleted the
marker. The warning below about re-homing the snapshot to `acceleration_snapshots`
stands permanently — it was never about the suspension.)*
Conformance criterion 4's canonical-base wiring is **suspended**, marked in
- Conformance criterion 4's canonical-base wiring is **suspended**, marked in
`crates/epiphany-testkit/src/roundtrip.rs` with a comment naming P13-S27. Its
serialize → load → decode → reserialize cycle still runs via a direct
`ChunkRef` read. **Do not "restore" it by re-homing the snapshot to
@ -178,12 +175,6 @@ both name **repack**), and `ReductionAuthorityUnavailable` (temporary, names
**P13-S27**, must **not** say repack — a major-1 container is already the right
epoch).
> **POST-S27:** the two permanent errors are unchanged. **`ReductionAuthorityUnavailable`
> no longer exists** — S27 deleted it and put `CanonicalBaseRequiresRebuild { base,
> current }` in its place, which is a real capability check rather than a placeholder.
> The "may not degrade to read-only" rule carries over to it verbatim: a stale base is
> the wrong materialization, not a restricted-but-correct view.
### 1.3 Text projection lost a capability, deliberately
Base-bearing documents no longer round-trip through text. All three sides refuse
@ -494,10 +485,10 @@ cargo fmt -p epiphany-bundle -p epiphany-textproj -p epiphany-testkit --check
```
**The expected count lives in `CLAUDE.md`'s *Green baseline* and is NOT repeated here —
changed 2026-08-09.** This document stated `1570` in three places; S27 moved it to
**1577**, and a figure kept in four places goes stale in three of them. If the observed
count differs from `CLAUDE.md`'s, reconcile that **before** starting new work — this
thread's whole method depends on a known-green baseline to mutate against.
changed 2026-08-09.** This document stated it in three places and S27 moved it, so all
three went stale together; a figure kept in four documents goes stale in three of them.
If the observed count differs from `CLAUDE.md`'s, reconcile that **before** starting new
work — this thread's whole method depends on a known-green baseline to mutate against.
---