Record Soul's pass on the Cut 6d follow-up, and rule the reinstatement case

The reopen and transfer paths hold over real stores. Two things do not:
replaying a batch that derived a write is refused instead of answered
from its receipt, and a withdrawal of a withdrawal can put an earlier
record back in force beside a later one. The second gets a rule that
extends Q19's own rationale. The depth cap's wording is corrected to the
nesting reading the code and the ruling implement, and Cut 12 learns that
history imports one record per batch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-16 20:10:48 +02:00
commit 94df3a8fc7

View file

@ -76,7 +76,30 @@ schema-ownership phase inside Epiphany, not because the campaign stops.
recursive in-force, the four sequence and in-force refusals, the Q19 cap,
the collision arm deleted) and `fcb7fdd` (entries H40-H51 including the
six Cut 8 test gaps, README stubs); 33 tests each side; H1-H51 killed.
Soul in flight on both. Cut 9 is mapped after it closes.
**Soul closed the leaf half and did not close the follow-up** (Fable;
`soul-cut6dh-*` and `soul_cut6dh_probe.rs` in the session scratchpad,
real redb over two stores). Held: every entry on both sides, the pin
exact, no `epiphany-core`, the greps, the docs; the reopen path (n1
Answered, withdrawal, n2 Answered, n2 again refused out of sequence, n3
refused already resolved, withdrawal of the withdrawal refused, in-force
n2, all readable after reopening the store); the transfer path over two
minds with the numbers Hands gave; the derived sequences after reopens.
Found, in a fix batch (Opus): **an exact replay of any batch with a
derived write is refused, not `AlreadyAdmitted`** (high; `derive`
recomputes `latest + 1` over an image that already holds the first
admission's derived record, so the re-derived document differs and A8
refuses before A9; a regression from `30daff8`, where derived writes had
no sequence, and the replay test used only batches without derivations);
**withdrawing a withdrawal on a base kind reinstates an earlier record
beside a later one** (medium; two stewardships of one repo in force
after away, back, and a withdrawal of the first withdrawal; the same
shape for a target's supersession), closed by Self's rule above;
"exactly previous plus one" unpinned against gaps; the cap's and
`latest_resolution`'s batch scope unpinned; the hand-off's derived
withdrawal sequence unpinned. Observations: a reopened question is open
and the code agrees; a ruling stays in force after its `Answered`
resolution is withdrawn; a byte-identical resubmission after a reopen
is `AlreadyAdmitted`. Cut 9 is mapped after the fix batch closes.
- **Cut 8 landed**: the Epiphany half at `a65c6420` (Soul-closed) with the
Cut 10 prerequisite at `b4b17fc`; the Huginn half on `eureka/memory-organ`
at `946758f`, `a4c5b79`, `0bd7133`, `ca30d3e`, fix batch `1cfa81d`,
@ -2989,8 +3012,16 @@ checks sequence then in-force: `sequence` must equal the latest for the
subject (or the `(instance, repo)`) plus one, else `ResolutionOutOfSequence`
/ `StewardshipOutOfSequence`; and no resolution (stewardship) may be in
force for that subject (repo), else `AlreadyResolved` / `AlreadyStewarded`.
A withdrawal cannot itself be withdrawn (Q19 A): a resolution whose subject
is a resolution with outcome `Withdrawn` is refused after the matrix.
A withdrawal cannot itself be withdrawn (Q19 A), read as nesting depth: a
resolution whose subject's own subject is a resolution is refused after
the matrix, so a chain is at most base, closure, withdrawal. *(First
written here as an outcome reading, "a resolution with outcome
`Withdrawn`"; the code and the ruling text implement the nesting reading,
which Soul confirmed. Corrected 2026-09-16.)* Under Self's ruling
extending Q19's rationale, a withdrawal is also refused when the base
subject already has an in-force record later than the one the withdrawal
would reinstate (`WouldReinstateOverLater`), so no base ever has two
records in force.
| Kind | Rule | Refusal |
|---|---|---|
@ -3371,6 +3402,13 @@ collection.
transfer, not a lease (Q18); this cut models no return and gains one
test, `a_repo_handed_back_takes_the_next_sequence`, that two hand-offs
A→B→A leave A stewarding at n2 and B withdrawn.)*
- **Import replays in sequence order, one record per batch where a
subject's history is concerned.** Soul on the Cut 6d follow-up: each
record in a batch sees the later one as the subject's latest, so
`[n1, n2]` in one batch is `OutOfSequence { 3, 1 }` and reversed is
`AlreadyResolved`. Spec-consistent, and a constraint on this cut's
import loop. Replay is idempotent per batch (`AlreadyAdmitted`),
including batches with derived writes, after the follow-up's fix batch.
- `import(&mut Mind, foreign: &Path, HandOffRef)` replays the named
documents' exact envelopes through `admit` against the target mind. Envelope
bytes are carried, not reserialised, so additive fields written by a newer