docs(overhaul): record s5 closeout retail capture stop

This commit is contained in:
Erik 2026-09-05 06:03:12 +02:00
parent 4237a6b2b3
commit 7c7ccc6252
3 changed files with 134 additions and 3 deletions

View file

@ -1,7 +1,8 @@
# Campaign OVERHAUL v2 — S5 consumers, material, and closeout packet
**Status:** S5-c1 through S5-c4 plus #470/#469 LANDED + REVIEW-CLOSED with lead
graphical gates PROVISIONAL PASS; S5-c5, closeout, and G4 remain.
**Status:** S5-c1 through S5-c5 plus #470/#469 LANDED + REVIEW-CLOSED with lead
graphical gates PROVISIONAL PASS; closeout C1 passed; C1a is STOPPED on the
retail-live fact in #472; connected/performance C2 and G4 remain.
**Branch:** `claude/campaign-w-retail-frame-walk`.
**Gate:** G4 remains unpassed. Nothing merges to `main` before G4.
@ -3493,3 +3494,98 @@ registration dispatch, canonicalization boundaries, InstalledDat lane
provenance, manifest truth, and allowed scope. A failed lens gets one bounded
fix contract; review stops only after pass 10. After C1a lands, C2 runs the
connected lifecycle/performance closeout and G4 follows.
## 38. S5 closeout C1a stopped result — one observer defect and one unrecoverable static fact
### 38.1 The contracted exact transcript gate stopped before landing
The OpenAI implementer worked in the clean scratch worktree
`s5-closeout-harness` at contract base
`4237a6b2b3d4e51ec0948257e2ff6f951b08c97c`. The ordinary parser consumer for
`cathedral-stair-arch.walk.log` passed, and a draft of the independent
geometry/membership digest formed a real product, but the required every-frame
`Signature8` comparison failed. Section 37.4 says that inability to reproduce
the committed fixture stops the whole chunk. The implementer therefore made no
commit, ran no official gate or mutation, changed no production source or
fixture, launched no client, and restored the scratch worktree clean at the
contract base. The draft product hash is not evidence and is deliberately not
landed or quoted as a golden.
All four complete marked frames have the same exact alignment:
- retail tokens: 2,158; replay tokens: 2,158; LCS: 2,156;
- tokens 0 through 374 agree;
- replay inserts `LC:e2290001` and `SC:e2290001` at replay positions 375376;
- retail contains a second consecutive `EC:f4180106` at retail position 2,126
and another at 2,141; replay emits one at each site.
Per-frame `WalkLandscapeDatBuilder.SetViewer`, one discarded same-pose warmup,
and both together produce the identical edit script in every frame. This is
not stale viewer state, a first-frame-only effect, or a broad sequence shift.
### 38.2 The two missing EC tokens are a test-recorder defect, not renderer behavior
Retail `PView::DrawCells` (`0x005A4840`) reads a flood cell's live view count at
`0x005A4AA9` and loops `setup_view` plus `RenderDeviceD3D::DrawEnvCell` at
`0x005A4AB10x005A4ACC`; the paired bytes contain the `47 4B 75 E8` loop. Its
object/`OC` pass remains once per cell at `0x005A4ADE0x005A4B1A`.
The InstalledDat test recorder instead calls
`WalkTraceReplayContext.AppendFloodTurns`, which emits one `EC` per cell. Its
own class comment already names this known limit and says S5 must remove it.
Production is already correct: `WalkFrameDriver.EmitFloodTurns` captures each
cell's route and prints one `EC` per `SliceCount`, then keeps one object turn per
cell. The eventual test-only correction is bounded: while the callback still
owns the live flood state, read each cell's `TopView.ViewCount`, emit that many
`EC` tokens in reverse-cell order, then one `OC` per cell. It must not change
production or weaken `Signature8`.
### 38.3 The e229 cause cannot be recovered statically
The named retail decomp and paired executable prove two distinct no-`LC`
causes inside `LScape::draw_check_blocks` (`0x00505F80`): the
`land_blocks` slot is null at `0x00506184`, or a resident block's
`Render::block_check` call at `0x005061DF` returns `OUTSIDE`. The paired bytes
at the latter site are `E8 6C 7A 04 00` (call `0x0054DC50`) followed by
`85 C0 74 0E`. `WalkLandscape.CheckBlocks` has the same control-flow shape.
The replay test builder eagerly installs every extant DAT block in its 51 × 51
grid. Production `WalkLandscapeAssembler` deliberately leaves unstreamed slots
null. The walk transcript records only submitted `LC`/`SC` turns; it does not
record retail residency or rejected block checks. Therefore absence of
`LC:e2290001` cannot distinguish the two retail causes from static evidence.
The block is a one-cell coarse ring-18 block, so AD-118's measured D3D/x87
edge-plane boundary is the strongest hypothesis, but applying that row without
the missing residency/verdict fact would be speculation. No production
visibility change, `KnownFailure`, fixture normalization, or new divergence
row is authorized.
The retail lens reverified the paired binary: executable SHA-256
`006FFEADC5D679C871497112A5BD1F87714D0E273E2166BAE5052DDE369297B1`, CodeView
GUID `{9E847E2F-777C-4BD9-886C-22256BB87F32}`, age 1.
### 38.4 Exact owner capture that unblocks C1a
Issue #472 owns the stop. Reuse
`tools/walk-oracle/oh/oh-capture-blockset.cdb.template` and
`oh-capture-blockcheck.cdb.template`, changing the filtered DID to
`0xE229FFFF`, at the exact first complete-frame pose from the committed
fixture:
```text
P f4180114 421e545d 4187e406 4336c9e1 3f800000 b71e18af 30947ee4 348114b1
```
Keep the output as
`cathedral-stair-arch-e229.blockset.log` and
`cathedral-stair-arch-e229.blockcheck.log` beside the other OH captures. The
blockset must prove whether retail has a resident e229 slot. If it is resident,
the filtered capture must record every active-view interval vector, the z slab,
and each `block_check` verdict. A null slot contracts a replay-residency harness
correction; resident plus `OUTSIDE` contracts the test-recorder correction and
classifies the remaining difference under AD-118. Any different result gets a
new bounded contract from the observed facts.
This is the campaign's explicit “retail fact cannot be recovered statically”
stop condition. C1a, connected/performance C2, and G4 do not proceed until the
capture exists. Nothing has merged to `main`.