docs(render): OVERHAUL ledger — S2 code-complete, G2 provisional PASS, morning handoff

§13: S2 row records chunk 5 + closeout `c94a1a40`, the review fix batch, the
gate counts, every self-gate run (the chunk-5 FAIL on the Facility wall
panels and the candidate PASS), the membership-probe run and the chunk-4
connected soak; the gate table names the six S2 commits and the revert rule.
The G2 morning handoff gives the owner the candidate build, the checklist,
the PNG paths and the automated-gate summary; G2 stays provisional until the
owner double-checks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-03 01:03:26 +02:00
parent c94a1a407e
commit 78068b2cfe
2 changed files with 97 additions and 2 deletions

View file

@ -659,7 +659,7 @@ Update immediately when a slice changes state. Chat is not the ledger.
| v1 OH1 | SUPERSEDED | research contracts committed at `5cd4fd2c`/`5d907ae9` (kept, binding) | T0T3 evidence grammar parked on `quarantine/oh1-evidence-grammar-2026-09-02` | reviews found the grammar a false oracle three times | n/a | n/a | see §15 | | v1 OH1 | SUPERSEDED | research contracts committed at `5cd4fd2c`/`5d907ae9` (kept, binding) | T0T3 evidence grammar parked on `quarantine/oh1-evidence-grammar-2026-09-02` | reviews found the grammar a false oracle three times | n/a | n/a | see §15 |
| S1 Geometry | **CLOSED — G1 PASSED 2026-09-02** | `oh2-cellstruct-surface-contract.md` (§3.5 arbitrated on the binary) | chunk A `acf17246`; chunk B `b681717c`; hygiene `0840d5fb`; review fixes `e2543d0e`; G1 regression fix `8c6563ca` (segment/batch pairing) + its pin test (next commit) | lead verified both chunks against the named pseudo-C and the paired binary; two Opus lens reviews, 8 findings all verified by the lead and fixed; the review round's own upload-order change desynchronized cell-shell index segments from batches (first G1 launch: magenta/stretched/missing walls in every dungeon) and was root-caused and fixed by the lead before the re-gate | build 0/0; Content 213/213 (incl. PreparedPackage on the recipe-8 pak); Core 4,948/4,948 (one load-sensitive allocation test outside S1 passes alone); Bake 21/21; Launcher.Core 365/365; Runtime 1,884/1,884; App hermetic 6,757/6,757 | **G1 PASS**: Facility Hub stairs/doorways, Holtburg house interior, ordinary dungeon, town portal network all whole with correct materials on `8c6563ca` + recipe 8; cathedral shows the ORIGINAL symptom family (neighbor-cell walls drawn through portals over the room), explicitly outside G1 and carried to S3/S4 | dev pak recipe 8 (597,369,112 B; `acdream.recipe7.pak` kept); TOC delta explained; corpus scan old-only 3,197 (all untextured), new-only 0, unexplained 0 | | S1 Geometry | **CLOSED — G1 PASSED 2026-09-02** | `oh2-cellstruct-surface-contract.md` (§3.5 arbitrated on the binary) | chunk A `acf17246`; chunk B `b681717c`; hygiene `0840d5fb`; review fixes `e2543d0e`; G1 regression fix `8c6563ca` (segment/batch pairing) + its pin test (next commit) | lead verified both chunks against the named pseudo-C and the paired binary; two Opus lens reviews, 8 findings all verified by the lead and fixed; the review round's own upload-order change desynchronized cell-shell index segments from batches (first G1 launch: magenta/stretched/missing walls in every dungeon) and was root-caused and fixed by the lead before the re-gate | build 0/0; Content 213/213 (incl. PreparedPackage on the recipe-8 pak); Core 4,948/4,948 (one load-sensitive allocation test outside S1 passes alone); Bake 21/21; Launcher.Core 365/365; Runtime 1,884/1,884; App hermetic 6,757/6,757 | **G1 PASS**: Facility Hub stairs/doorways, Holtburg house interior, ordinary dungeon, town portal network all whole with correct materials on `8c6563ca` + recipe 8; cathedral shows the ORIGINAL symptom family (neighbor-cell walls drawn through portals over the room), explicitly outside G1 and carried to S3/S4 | dev pak recipe 8 (597,369,112 B; `acdream.recipe7.pak` kept); TOC delta explained; corpus scan old-only 3,197 (all untextured), new-only 0, unexplained 0 |
| Capture | READY | §7 + `tools/walk-oracle/oh/README.md` | scripts committed `ebaa41df` + `14d8fe64`; lead resolved DBObj::m_DID=+0x28 and the cdecl alpha-function conventions; recon attach re-confirms | — | recon dt/x/uf dumps at session start | owner session ~1 h | before S3 | | Capture | READY | §7 + `tools/walk-oracle/oh/README.md` | scripts committed `ebaa41df` + `14d8fe64`; lead resolved DBObj::m_DID=+0x28 and the cdecl alpha-function conventions; recon attach re-confirms | — | recon dt/x/uf dumps at session start | owner session ~1 h | before S3 |
| S2 World graph | IN PROGRESS | `s2-membership-ownership-map.md` (`e7ad25a7`) + Contracts A/B | chunk 1a `059b8883`; chunk 1b `5a2792d6`; chunk 2 `707d2803` (render statics borrow the registry's retail array; render flood deleted); chunk 3 `afbd2410` (one flood per registration feeds collision rows and render entries; staged SetPosition carries both products); chunk 4 `75ea269d` (movement publishes from the transition's cells; children inherit at registration); chunk 5 (borrowed per-cell views, render-only registration for effect objects, delete the per-frame sweeps and fallbacks) in progress in an isolated worktree | lead corrected 1a's route decision before landing; chunk 2 verified by the lead (resolvers, stair pin identity fix) | after chunk 4: Core 4,970/4,970; App hermetic 6,761/6,761; targeted 166/166; Runtime 1,884/1,884 | G2 pending. Self-gate runs (kit `ea546f38`): `logs/selfgate-20260902-231426-baseline-g1-binary` (G1-equivalent binary, 4 PNGs) `logs/selfgate-20260902-231642-s2-chunk3` (chunk-3 build `ea546f38`) and `logs/selfgate-20260902-233845-s2-chunk4` (chunk-4 build `6717a3e5`): cathedral stairs, Facility Hub stairs, Holtburg house render identically to the baseline, no anomalies, graceful logout; connected R6 soak on the chunk-4 build `6717a3e5` (`logs/connected-r6-soak-20260902-234016.report.json`): 9 destinations materialized in 511 s, 3 canonical checkpoints with zero invariant failures and idle transit ownership, graceful exit, binary matches source — route PASS; the script's `-CollisionShadowEvery` referee reported "did not sample any query" because it is the Slice I5 graph-vs-flat comparator with no parsed graph in production since I7 (obsolete switch, retire in S5), not a membership finding; warnings are server-side population drift | chunk 4 dynamics/children, chunk 5 consumer cutover next; connected R6 soak + collision-shadow referee owed once the owner client exits | | S2 World graph | CODE-COMPLETE — G2 PROVISIONAL PASS (self-gate 2026-09-03, owner double-check owed) | `s2-membership-ownership-map.md` (`e7ad25a7`) + Contracts A/B; closeout evidence §8/§9 | chunk 1a `059b8883`; chunk 1b `5a2792d6`; chunk 2 `707d2803` (render statics borrow the registry's retail array; render flood deleted); chunk 3 `afbd2410` (one flood per registration feeds collision rows and render entries; staged SetPosition carries both products); chunk 4 `75ea269d` (movement publishes from the transition's cells; children inherit at registration); chunk 5 + closeout `c94a1a40` (borrowed per-cell views, render-only registration, sweeps/fallbacks deleted; reflood forwards the part array; NON-COLLIDING DAT STATICS register render-only from both publishers; the dual-review fix batch: Suspend clears the retail product, attach/detach advance the mutation revision, an attached child never floods on its own, RemoveLandblock/RetireOwnerFromLandblock prune retail rows, render-only owners move with their destination cell (AD-117), empty part array == null, per-move closures removed, EnvCell shells out of the entity-id index, index predicate compares the id, dead per-cell scene indices deleted) | lead corrected 1a's route decision before landing; chunk 2 verified by the lead; chunk 5's agent report missed the non-colliding-static population (found by the self-gate PIXEL DIFF, not by eye: Facility wall panels grey); S2 dual review (arch + retail lens, Opus) produced 12 + 7 findings, every one lead-verified against the source before an edit; the four BLOCKING/MAJOR lifetime gaps were real | at `c94a1a40`: Core 4,984/4,984; Content 214/214; Runtime 1,884/1,884; App hermetic lane 6,760/6,760; App InstalledDat 217 pass / 1 skip / 2 pre-existing #383; App Windows 1/1 | G2 PROVISIONAL PASS. Self-gate runs (kit `ea546f38`, pwsh): `logs/selfgate-20260902-231426-baseline-g1-binary` (reference), `…231642-s2-chunk3`, `…233845-s2-chunk4` (identical), `logs/selfgate-20260903-002632-s2-chunk5-reflood` (FAIL: Facility wall panels grey, left-wall mean RGB 29,26,23 vs baseline 65,17,21 — missing non-colliding statics), `logs/selfgate-20260903-010022-s2-review-fixes-3` (candidate: panels back at 79,20,25 = chunk-3/4; cathedral 13.6% / Facility 15.0% / house 13.4% px differ vs baseline, the chunk-3/4 band; graceful logout, zero exceptions). Membership-probe run `logs/selfgate-20260903-003013-s2-chunk5-membership-probe`: `[walk-membership]` fired only on two transient Holtburg login frames, never in Facility Hub or the cathedral. Connected R6 soak on the chunk-4 build `6717a3e5` (`logs/connected-r6-soak-20260902-234016.report.json`): 9 destinations in 511 s, zero invariant failures, graceful exit — route PASS (its `-CollisionShadowEvery` referee is the obsolete I5 graph-vs-flat comparator; retire in S5). Morning handoff: `docs/research/2026-09-01-overhaul/2026-09-03-g2-morning-handoff.md` | owner double-checks G2 (handoff checklist); then the owner capture session (add a `CTransition` trace at `num_sphere == 0` to retire AD-117 item 1); then S3 |
| S3 Walk | PLANNED | built-mesh/world contracts + captures | — | — | — | folded into G3 | | | S3 Walk | PLANNED | built-mesh/world contracts + captures | — | — | — | folded into G3 | |
| S4 Depth + alpha | PLANNED | depth/alpha contracts + captures | — | — | — | G3 | retires AP-34 | | S4 Depth + alpha | PLANNED | depth/alpha contracts + captures | — | — | — | G3 | retires AP-34 |
| S5 Consumers + closeout | PLANNED | landscape contract; AP-232 | — | — | — | G4 | retires AP-117/AP-232; deletes probes | | S5 Consumers + closeout | PLANNED | landscape contract; AP-232 | — | — | — | G4 | retires AP-117/AP-232; deletes probes |
@ -671,7 +671,7 @@ Update immediately when a slice changes state. Chat is not the ledger.
| FW closeout | `b8befded`, `4808d4d1`, `4683ac6f`, `e8808602` | FW/Tusker gates | historical anchors only | | FW closeout | `b8befded`, `4808d4d1`, `4683ac6f`, `e8808602` | FW/Tusker gates | historical anchors only |
| v1 OH0 | `b3b7d922` | n/a | `git revert b3b7d922` removes the investigation candidates including the Facility stair fix; not a visual claim | | v1 OH0 | `b3b7d922` | n/a | `git revert b3b7d922` removes the investigation candidates including the Facility stair fix; not a visual claim |
| S1 | `acf17246`, `b681717c`, `0840d5fb`, `e2543d0e`, `8c6563ca` (+ pin test) | G1 PASS 2026-09-02 | revert newest-first; then restore `acdream.recipe7.pak` over `acdream.pak` in the dev DAT dir (the recipe-8 consumer rejects a recipe-7 pak, and vice versa) | | S1 | `acf17246`, `b681717c`, `0840d5fb`, `e2543d0e`, `8c6563ca` (+ pin test) | G1 PASS 2026-09-02 | revert newest-first; then restore `acdream.recipe7.pak` over `acdream.pak` in the dev DAT dir (the recipe-8 consumer rejects a recipe-7 pak, and vice versa) |
| S2 | — | G2 | fill | | S2 | `059b8883`, `5a2792d6`, `707d2803`, `afbd2410`, `75ea269d`, `c94a1a40` | G2 PROVISIONAL PASS 2026-09-03 (lead self-gate; owner double-check owed) | revert newest-first `c94a1a40``059b8883`; the registry's retail product and the walk's borrowed views go together — do not revert a middle chunk alone |
| S3 | — | G3 | fill | | S3 | — | G3 | fill |
| S4 | — | G3 | fill | | S4 | — | G3 | fill |
| S5 | — | G4 | fill | | S5 | — | G4 | fill |

View file

@ -0,0 +1,95 @@
# Campaign OVERHAUL — G2 morning handoff (2026-09-03)
**Status:** S2 (World graph) is CODE-COMPLETE and self-gated PROVISIONAL
PASS. The owner double-checks the three spots below; G2 is PASSED only when
the owner says so (plan §13).
**Candidate build:** commit `c94a1a40` (code; the ledger/handoff commit follows it) on `claude/campaign-w-retail-frame-walk`
(worktree `.claude/worktrees/peaceful-blackburn-5333f0`), Release, dev pak
`acdream.pak` recipe 8 in `%USERPROFILE%\Documents\Asheron's Call`.
Launch exactly the way the self-gate does (direct login, no select screen):
```powershell
pwsh -NoProfile -File tools\overhaul-selfgate\run-selfgate.ps1 -Label owner-g2
```
or play it by hand with the usual `ACDREAM_LIVE=1` launch and the three
`/teleloc` poses in `tools\overhaul-selfgate\route.txt`.
## What S2 changed (one paragraph)
The physics registry's retail cell array (`CPhysicsObj::calc_cross_cells_static`
+ `add_shadows_to_cells`) is now the ONLY thing that decides which cells an
object is drawn from. One flood per registration feeds both the collision rows
and the per-part render rows; movement republishes from the transition's cells;
equipped children inherit the root's cells; the walk reads the registry's per-cell
part list and nothing else (every render-side flood, sweep, bucket and fallback is
deleted). Statics with no collision geometry (decorative trim, wall panels) now
register render-only instead of riding a deleted fallback.
## What the night found and fixed after chunk 5
| # | Finding | Fix | Pin |
|---|---|---|---|
| 1 | Streaming reflood re-registered from collision shapes only → every reflooded owner lost render membership | `RefloodOwnerForLandblock` forwards the retained part array | `RefloodLandblock_Keeps*` (Core) |
| 2 | **Self-gate pixel diff:** Facility Hub's purple-lit wall panels went grey — they were MISSING statics (non-colliding, never registered), not a lighting change | both static publishers register non-colliding statics render-only | `CompletePublication_NonCollidingStaticRegistersRenderOnly` (App), `PublishStaticCollision_NonCollidingGfxObjStatic_RegistersRenderOnly` (Content) |
| 3 | Dual review (arch + retail lens): `Suspend` kept render rows; attach/detach invisible to staged commits; an attached child re-flooded on re-registration; landblock removal/retirement left retail rows (unbounded growth); render-only owners could never move; empty part array claimed cells; per-move closures; EnvCell shells aliasing the entity-id index; index predicate missing the id; dead per-cell scene indices | all fixed in the registry / scene | seven new Core pins + two `ArchRenderSceneTests` pins |
Register: AD-116 (chunk 5) and AD-117 (four residual Contract A/B readings, filed
tonight — the render-only destination-cell rule is the one a cdb trace should
retire at the capture session).
## Owner checklist (the G2 gate, plan §10)
Look for objects that flicker, pop, or vanish as you MOVE and ROTATE (the walk
now draws exactly what the registry says, so a membership bug shows as an
object missing from one viewpoint and present from another).
1. **Cathedral (pose 1)** — the floating stairs and the ramp (Setup `0x020009A2`)
stay solid while you walk up/down and turn; no panel of the outside structure
pops through interior walls MORE than on the G1 build (the cathedral leak
itself is S3/S4's target, not G2's).
2. **Facility Hub (pose 2)** — the purple-lit wall panels beside the corridor are
BACK (compare `02-facility-stairs.png` in the two runs below); the stairs
(Setup `0x02000623`) stay solid from both cells `0x8A02015E`/`0x8A02015F`
while moving and rotating on them; the drudge draws in the room.
3. **Holtburg house (pose 3)** — barrel, chest, table, bottle, books all present;
step outside and back in.
4. **Dense Tuskers / remote players** (free roam) — a remote player seen across a
cathedral wall through a portal is drawn where it stands, not where it was;
nothing stays behind after it leaves a room (suspend/retire fixes).
5. **Spell cast** — a travelling spell effect draws along its path (render-only
owners now move with their destination cell).
## Self-gate evidence (lead-run, provisional)
| Run | Build | Verdict |
|---|---|---|
| `logs/selfgate-20260902-231426-baseline-g1-binary` | G1-accepted binary | reference frames |
| `logs/selfgate-20260903-002632-s2-chunk5-reflood` | chunk 5 + reflood fix | **FAIL** — Facility wall panels grey (left-wall mean RGB 29,26,23 vs baseline 65,17,21) |
| `logs/selfgate-20260903-010022-s2-review-fixes-3` | this candidate | **PROVISIONAL PASS** — wall panels back (left-wall mean RGB 79,20,25, identical to the chunk-3/4 builds); cathedral 13.6% / Facility 15.0% / house 13.4% px differ vs baseline, the same band the accepted chunk-3/4 runs sat in (drudge pose + noise); graceful logout, zero exceptions |
Per-pose PNGs sit in `<run>/artifacts/screenshots/0{1,2,3}-*.png`; the client log
is `<run>/client.log`.
## Automated gate on the candidate
Release build 0 errors. Core 4,984/4,984 · Content 214/214 · Runtime 1,884/1,884 · App hermetic lane (CI filter) 6,760/6,760 · App InstalledDat lane 217 pass / 1 skip / 2 pre-existing #383 failures · App Windows lane 1/1.
Known pre-existing non-S2 failures (unchanged tonight): the two installed-DAT
layout sweeps (`LayoutImporterMediaBearingChildSweepTests`,
`LayoutImporterInvisibleSweepTests`#383 fixture drift) and
`TowerAscentReplayTests.TowerAscent_StaircaseStaysConeVisible_EveryStep`
(#119 residual, S3 viewcone).
## After G2
1. The owner's ~1 h retail capture session (`tools/walk-oracle/oh/`, recon attach
first) — add a `CTransition` trace at `num_sphere == 0` to retire AD-117(1).
2. S3 Walk.
Open tails carried into S5: retire the obsolete `-CollisionShadowEvery` referee in
`tools/run-connected-r6-soak.ps1`; the `[walk-membership]` line rides the #177
probe flag scheduled for deletion; `GetRetailPartEntriesInCell` hands out the live
list (document or copy-on-read if a walk-time mutation ever appears).