Record the fourth gate: it opens, and four items close before the merge
Every comparator component that decides output now dies under mutation in both runtimes, and the new fixtures are killers rather than coincidences. The headline claim is two-sided: each runtime serializes and asserts independently, and every C# vector fails when a single hex digit of its expected constant is flipped. Soul found one real hole. The all-absent Edge vector exists only in Rust, because the all-absent header is covered incidentally by the envelope and the edge is not. A C# encoder that resumed omitting a null payload would pass everything. Five lines closes it, so it closes before the merge rather than after: shipping over a known asymmetry with a note promising to return is the thing this cut exists to prevent. Two misses are mine. R-AT asserted to.schemaId dies alone, which Hands never claimed and which is not true; it is now construct a killer or delete the component, because a line no input can distinguish still has to be reasoned about. And I deleted the false equivalence argument where batch 6 restated it while leaving the original standing as a live instruction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
f6d7f203d6
commit
9e9269d4f8
1 changed files with 81 additions and 0 deletions
|
|
@ -3451,3 +3451,84 @@ Everything else is tests and docs.
|
|||
|
||||
**Every condition Soul set for merging is now met.** A final gate pass
|
||||
follows.
|
||||
|
||||
## Soul, the merge gate, fourth pass, 2026-09-23
|
||||
|
||||
Opus. Four sequential Yggdrasil jobs, one slot, Rust at `-j1`. Merge to
|
||||
`origin/main` is conflict-free; main's 42 divergent commits touch no file this
|
||||
cut touches.
|
||||
|
||||
### **Verdict: Cut 1 may merge.**
|
||||
|
||||
**Baselines, with one correction.** Rust 264 across 12 binaries, Mesh 255,
|
||||
Caching 190 / 3 — all as reported. **C# Networking is 283 passed / 2 skipped,
|
||||
not the 280 reported.** Under-reported this time rather than over; the count
|
||||
still went into the record wrong.
|
||||
|
||||
### The five conditions
|
||||
|
||||
1. **Met for everything that decides output, not met on the letter.** Killed
|
||||
in both runtimes: dropping both `to` components, dropping `to.record_key`
|
||||
alone, reversing it, dropping `record_key` from the row comparator, plus
|
||||
`from.record_key` and `role` in Rust. **The batch's new fixtures are the
|
||||
killers and they are not coincidental** — Soul attacked them with
|
||||
single-component variants and they held.
|
||||
|
||||
**But `to.schemaId` survives both dropping and reversing, in both
|
||||
runtimes.** Hands never claimed it dies alone; **R-AT did, and R-AT was
|
||||
mine.** Soul could not construct a selection where it decides anything —
|
||||
under D10b a role resolves to one declared target type and reference
|
||||
resolution yields at most one row per (role, key) — but says plainly that
|
||||
is a claim, not a proof, **and the same shape of argument that has been
|
||||
wrong twice here.** Hence the follow-up is "construct a killer **or delete
|
||||
the component**", not "record it as equivalent".
|
||||
2. **Partially met, and the miss is mine.** The false argument is gone where
|
||||
batch 6 restated it and **still stands, unstruck, at its original site** —
|
||||
the `EdgesFor` paragraph and ruling **R-AC** ("Recorded, not to be chased").
|
||||
Those read as live instructions. I deleted the copy and left the original,
|
||||
which is the same sweep failure this map has recorded before.
|
||||
3. **Met.** `runtime-parity-scope.md` carries the row in R-AY's words, naming
|
||||
four files that all exist.
|
||||
4. **Met**, and the constants were right all along.
|
||||
5. **Met, and genuinely two-sided.** The three constants are byte-identical
|
||||
strings in both files; each runtime serializes and asserts independently,
|
||||
so **neither reads the other's answer**. All three C# tests pass and **all
|
||||
three fail when Soul flipped one hex digit** of the expected constant. 239,
|
||||
261 and 376 are real MessagePack C# 3.1.7 output.
|
||||
|
||||
### SM-10, CONFIRMED. The 246-byte all-absent `Edge` vector is Rust-only.
|
||||
|
||||
The 228-byte all-absent header is nested inside the 376-byte envelope, so C#
|
||||
regenerates it. **The edge has no such cover.** A C# edge encoder that resumed
|
||||
omitting a null `payload`/`payloadEncoding` would still pass the 261-byte
|
||||
populated vector, and **nothing on the C# side would fail** — which is exactly
|
||||
what R-AP existed to kill. It leaves `runtime-parity-scope.md`'s "verified at
|
||||
populated and absent optional values" true for three cells of four.
|
||||
|
||||
**Five lines of C# closes it.**
|
||||
|
||||
### Self's decision: close four items, then merge
|
||||
|
||||
Soul named this the follow-up it "would put a name on". A known hole that a
|
||||
five-line test closes is not a follow-up — merging over it would be shipping
|
||||
the exact asymmetry the cut exists to prevent, with a note promising to come
|
||||
back. **Batch 8 closes items 1 to 4, then the cut merges.**
|
||||
|
||||
- **R-AZ (SM-10).** Mirror the 246-byte all-absent `Edge` constant into
|
||||
`SelectionWireParityTests.cs`, so both runtimes assert all four cells.
|
||||
- **R-BA.** Settle `to.schemaId`: **construct a killer, or delete the
|
||||
component from both comparators.** A component no input can distinguish is
|
||||
not free — it is a line the next reader must reason about, and the reasoning
|
||||
has been wrong twice.
|
||||
- **R-BB.** Correct the landing note to 283 passed / 2 skipped.
|
||||
- **R-BC.** Strike R-AC and the `EdgesFor` equivalence paragraph **at their
|
||||
original site**, not with a note beside them.
|
||||
|
||||
**Not blocking, recorded as genuine follow-ups**, none a known defect in the
|
||||
cut's behaviour and all outside the selection surface: the C# Stryker survivor
|
||||
list untriaged; `contracts.rs` and `schema_discovery.rs` unmeasured with batch
|
||||
5's partial `validate_*` signal hanging; the `--since`/`GitInfoProvider` crash
|
||||
unrooted; Caching's three, which **need a non-root container to prove and must
|
||||
not be "fixed"**.
|
||||
|
||||
Rig: `C:\Users\Meta\eureka-soul-probes\cultnet-selection-cut1-fix7\`.
|
||||
|
|
|
|||
Loading…
Reference in a new issue