From cb71a92d51af6897a608010f358b215bc344af86 Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 4 Sep 2026 07:33:34 +0200 Subject: [PATCH] =?UTF-8?q?docs(overhaul):=20hand-off=20at=20S4-c2=20fix?= =?UTF-8?q?=20round=201=20DONE=20(cc8e5677a=20in=20s4-c2-impl)=20=E2=80=94?= =?UTF-8?q?=20what=20is=20left=20on=20chunk=202,=20the=20review=20and=20la?= =?UTF-8?q?nding=20procedure;=20ledger=20S4=20row=20updated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- ...-09-01-campaign-overhaul-world-solidity.md | 2 +- .../2026-09-04-s4-handoff.md | 104 +++++------------- 2 files changed, 28 insertions(+), 78 deletions(-) diff --git a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md index b474b5a9..599c8722 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -674,7 +674,7 @@ Update immediately when a slice changes state. Chat is not the ledger. | 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 | `059b8883`, `5a2792d6`, `707d2803`, `afbd2410`, `75ea269d`, `c94a1a40`, `f6b4584b` | G2 PASSED 2026-09-03 (owner-confirmed after the chunk-6 haze fix; terrain punch carried to S4) | 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 | chunk 2: `be9b4c1f`, `2f5373c7`, `434a7df2`; chunk 3: `4ee2866a`, `651badc2`, `e10765aa`, `896c63fe`, `74ac7aa2`; chunk 1: `02a82881`, `be81475c`, `88c70072` | G3 | chunk 3: revert newest-first `74ac7aa2` → `4ee2866a` as one unit (the per-cell terrain, the slot key, the deferred batching and the per-frame diagnostic go together); chunk 2: revert newest-first `434a7df2` → `be9b4c1f` (the counter, the leaf split and the flag deletion go together) | -| S4 | — | G3 | OPEN 2026-09-03 night. Packet `docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md`: §1 records that S3 chunk 2 already delivered S4's chunk-1 latch/gate/seal scope (the latch owner, the gated flush→stamp→clear→seal block, the counted seals); what remains of chunk 1 is small and dispatched as **S4-c1** (`s4-c1.js`, worktree `s4-c1-impl` at `6385f4411`, contract = packet §6): C0 the far-punch constant — `portal_depth.vert` carries `0.99999988` = bits `0x3F7FFFFE`, retail's is `0x3F7FFFEF` (15 ULPs nearer; the depth spec's "wrong constant" row was right; lead bit check 2026-09-03) → retail's exact bits + a source pin; C1 the ±12 local-input reject at both portal-polygon producers (Ghidra table row 0x59BCD6–0x59BD28); C2 the portal-depth color-state register row (ColorWrite off vs retail's zero-alpha blend, identical output); C3 the depth truth-table Theory, the cross-frame latch test, look-ins isolated from the root latch. Chunk 2 = the two-FIFO alpha-list cutover (packet §3); chunk 3 = deletions (packet §4). G3 is S4's owner gate; the lead's S3-state G3 pre-run (20/20 frames, in the S3 row) is the baseline to diff against. | **S4-c1 ROUND 0 = `c7ab5b6d8` (Sonnet), THREE LENSES FAIL (2026-09-03 21:00–21:20):** one BLOCKING defect seen by all three — the ±12 guard's quantifier is inverted (rejects on ANY vertex on ANY plane; retail's PDB-paired bytes at 0x59BCD6–0x59BD66 reject only when EVERY vertex lies on the SAME plane) — and the LEAD's §6 paraphrase carried the same inversion (corrected in §6; lesson saved to memory: quote the decomp predicate, never paraphrase it). The production lens's DAT scan: 2,889 portal polygons carry a ±12 vertex and 2,163 EXIT polygons lie ENTIRELY on a ±12 plane — so the guard is very likely retail's never-sealed 'panel' mechanism (the #456/#465 family), which makes the PM/PC depth-event transcript comparison against the four alphadepth captures the chunk's real gate (never run in round 0). Also: the register-test gate is vacuous (no test reads the register), the manifest comment's ULP direction is inverted. C0 (retail's exact far-punch bits, verified at the binary), C2 (AD-119) and C3 (three new truth-table/latch pins, nine mutation texts) verified. FIX ROUND 1 = S4 packet §7 (`s4-c1-fix1.js`, dispatched 21:20): the four per-plane predicates at both producers with five-case T2, the seal count order, the automated PM/PC gate over the captures (a diverging pose is tagged KnownFailure and written up, never weakened), comment truth. **S4-c2 CONTRACT DRAFTED** (packet §8, 2026-09-03 21:50): two FIFO lists of 3000, the spec §4 router as one pure function, the four flush sites (the sort-cell EXIT valve as a new walk event kind), `FlushFartherThan`/AP-34/every viewer distance deleted, and the AM/FL transcript gate over the five captures (10,556 `AM` lines, all `clip=0`; `FL` by site 13,705/309/18/23) as the proof; dispatched only after c1 lands. **S4-c1 FIX ROUND 1 = `2bd353234` (Sonnet, 295 tool calls), THREE LENSES 2026-09-03 22:07–23:00: retail-faithful PASS, production PASS, gate-honesty FAIL.** Confirmed at the bytes: the four per-plane accumulators at both producers, the count-after-guard order, the PM/PC gate's reading of retail's lines; five transcript poses pass (cathedral-arrival, cathedral-leak, foundry-deep, holtburg-doorway-still) with terrace-edge tagged KnownFailure. Findings, all on that one row plus one pin gap: (blocking) the KnownFailure write-up claims the PC sequence matches — false and never evaluated (the PM assert throws first); (major ×2) the divergence is a harness initial-condition choice — seed `portalsDrawnCount` from the fixture's first observed counter and the row turns green while the two-pass priming retires; (major) T2's five cases do not discriminate 'every vertex on SOME plane' from retail's 'every vertex on the SAME plane'; (minor ×4) stale seal-path summaries, an unobservable mutation named in the F2 pin's comment, doc-comment DAT figures an independent scan does not fully reproduce, a vacuous 'register tests' gate claim. The lead's own replay of the gate at `2bd353234` with the new `cathedral-stair-arch` capture added as a sixth Fact PASSES (its seed value is 8). **FIX ROUND 2 = packet §9 (the LAST round; dispatched 23:10):** seed the counter from the fixture (one pass), compare and print both sequences together, the discriminating ±12 case, the sixth pose, comment truth. **FIX ROUND 2 = `9ba8f013e` (Sonnet; on the two cherry-picked capture commits), THREE LENSES 2026-09-03 23:10–23:38: retail PASS (byte evidence: `portalsDrawnCount` has exactly one increment site 0x59BD74 and one reset site 0x5A489E under `view_count > 0`, `forceClear` has no writer; the discriminating case is admitted by retail's four per-plane accumulators), production PASS (round-2 src diff = comment text only; no pin weakened; gates reproduce on a fresh Release build), gate-honesty FAIL on comment truth only (the terrace-edge Fact's comment claimed a PC match that seeding, not the pre-fix state, produced; the stair-arch comment states a rejection count the PM/PC tuple cannot observe; a DAT-scan comment cites a pin that does not pin). All six transcript poses PASS (terrace-edge's KnownFailure removed; seed values 0/0/1/2/2/8). **S4-c1 LANDED 2026-09-03 23:38–23:40** as `d1e3e64f6` + `5de42a12f` + `323f5a334` (cherry-picks of rounds 0–2) + `766f9e749` (the LEAD corrected the four flagged sentences — a third implementer round is barred by §5; code unchanged; owner to review). Landing gates: Release 0 warnings; six transcript Facts 6/6; hermetic 6,833/6,833; InstalledDat 249 pass / 4 known (#383 ×2, TowerAscent, #458) / 1 skip. Landing self-gates: route.txt four poses `logs/selfgate-20260903-234934-s4c1-landed-route2` (Facility panels present, mean RGB (79,20,25)); capture poses `logs/selfgate-20260903-234030-s4c1-landed-g3b` and `…-235044-s4c1-landed-g3b2` — frames 13/14/16 in band, **frame 15 (holtburg-doorway) shows an empty plane under fog TWICE** where the S3-state run `logs/selfgate-20260903-165634-g3b` showed the village. Lead read 2026-09-04: the server snapped the requested y 13.39→17.39 in every run; the CLIENT then seated the player in the house-interior cell `0xA9B4013F` at (134.07, 17.36) in both landed runs versus the outdoor cell `0xA9B40029` at (133.60, 17.39) in the S3-state run (0.46 m apart on the doorway threshold), so the frame roots from the interior cell with the eye outside — a placement/membership boundary at the doorway, not a draw change; S4-c1 touched no placement code. A pre-S4 control at `6575cfcee` (`s3-review-fix/logs/selfgate-20260904-042324-pre-s4-g3b`) produced 0 frames: the login reveal at `0xA9B40176` never went visible (#462 class) and the process exited 0xE0434352 after the graceful logout (#461 class) → INCONCLUSIVE; the A/B re-run (landed tip twice + pre-S4 once) is owed before any further self-gate is trusted at that pose. **S4-c2 DISPATCH 2026-09-03 23:41 DIED** on the account's session limit / credit exhaustion with no commit; worktree `s4-c2-impl` reset clean at `766f9e749`. Session handed to a new account 2026-09-04 morning; ACE was NOT running at hand-over (no UDP 9000 listener), so every connected gate waits on the owner starting it. **HAND-OFF 2026-09-04 morning:** `docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md` (read order, landed state, the S4-c2 implementer dispatched ~08:35 into `s4-c2-impl`, the #464 RenderDoc plan, the Holtburg doorway A/B, owner-owed items, tooling gotchas, paste-prompt). **OWNER 2026-09-04 morning: running `766f9e749`, reports the cathedral stairwell artifact (#464) appears FIXED** — plausible mechanism = S4-c1's ±12 reject now drops the 12 hall-doorway punches retail also rejects; PROVISIONAL until the lead re-runs `route-464-tilt3.txt` at the tip and diffs frame `01-neg160` against `logs/selfgate-20260903-225434-464-tilt3` (owner client running — not launched yet). **S4-c2 IMPLEMENTER DONE 2026-09-04 09:35: `048d5b12f` in `s4-c2-impl`** (19 files, +1,697/−543): two FIFO lists + `RetailAlphaMeshRouter` + `SortCellExit` event + four flush sites, `FlushFartherThan`/viewer distance deleted; hermetic 6,855/6,855; shader classes 32/32; InstalledDat 249 pass + the 4 known + SIX new KnownFailure Facts. Implementer's own deviations for the lead to rule on: (a) C4 (EnvCell transparent subsets through the queue) NOT done; (b) AP-34 not retired but narrowed into AP-236 (EnvCell-immediate residual) + AP-237 (AlphaBlend cannot tell retail's ALPHA from the Translucent+ClipMap CLIP override; cloud GfxObj 0x01004C35); (c) G-c2's per-list drained-count dimension is KnownFailure on ALL six poses because the hermetic harness carries no mesh content — only the (site, threshold) sequence matches. REVIEW ROUND 1 dispatched. **REVIEW ROUND 1 (2026-09-04 ~10:00–10:40): retail lens FAIL** — every core predicate confirmed exact at the bytes (list select, 0xbb8 capacity, `test ah,5; jp` strict-less on both counts → 2250 drains, CLIP-then-ALPHA, rows 1–5, the four call sites, ::flush=0.75f, delay 0x0E, SortCellExit at 0x5a1a07 under the DrawSortCell gate); BLOCKING: the particle site's 'rows 1/2/4/5 unreachable' assert throws on an Opaque-classified mesh-particle batch (data-driven row 5; `TryAppendMeshDraws` filters nothing); MAJOR: the CLIP list is structurally unreachable for ordinary content (ClipMap kinds are `IsOpaque`, drawn alpha-to-coverage; 4,183/10,556 captured AM entries are CLIP) with no register row; contract C3's detail input hardcoded false while building shells reach the alpha path and the DRAIN applies the detail pass retail's replay never has (`DrawBuilding` installs `building_detail_surface` @0x0059f2eb before its flush/shell draw → row 1 immediate); `IsFirstForList` = first-since-drain where retail's `new` is per-DrawMesh-invocation (`0059d4cc/0059d4d0`; captures new=1 on 9,685/10,556); gate G-c2 all-KnownFailure → zero CI signal and zero SortCellExit drains exercised; MINOR: AP-237's cloud example is disproven (Type 0x10114 carries alpha-family bits → mask 0x02 both sides), DrawBlock cited at its loop head 0x005a18d0 instead of 0x005a17c0, 'return site' = the call address. Lead verification concurs and adds C4 (EnvCell detail-off append is bounded — `RenderTransparentOrdered` exists). **FIX ROUND 1 = packet §11 (M1–M8)**; **production/gate lens FAIL** (all four claimed gates reproduced, four mutation checks re-performed): same blocking particle throw; the count gate is unmatchable by construction (CLIP structurally empty — 75 % of cathedral-arrival's expected drains are CLIP — and per-instance vs per-subset cardinality); a THIRD production `FlushLandscapeAlpha` caller (`RetailPViewRenderer.cs:485`, the #132 outdoor-root drain) is mislabelled as retail's DrawCells flush, which never runs on an outdoor root; AP-236 REUSES an id filed and retired on main by #132; the unreachability enumeration lists masks that cannot occur; `ApplyScratchRetention` passes the entry count as the source count; §10 sequences off by one; the 'independent' router oracle is the same if-chain. Recorded as packet §11.1 (A1–A8). **FIX ROUND 1 DISPATCHED** (one Sonnet implementer in `s4-c2-impl` on `048d5b12f`, contract §11 + §11.1). **#464 CONFIRMED FIXED at `766f9e749` (2026-09-04 08:15 UTC+2, lead scripted route `logs/selfgate-20260904-061530-464-tilt3-s4c1`):** identical probe eye to the 2026-09-03 artifact run, solid wall above the arch, hall columns gone; matrix row 'Cathedral stairwell, camera zoomed out' = PASS (provisional). **Holtburg doorway frame RESOLVED — not render (2026-09-04 08:40): the player FALLS through the world at that pose** (probe run `logs/selfgate-20260904-063313-hd-probe`: seated in interior cell 0xA9B4013F at a floorless point, z 96 → −20 m; the frame is the terrain from below); filed **#468** (placement, tactical); route-g3b pose 15 moved to the good run's outdoor standing point in 0xA9B40029; the pre-S4 control stalled twice at login (#462 recurrence noted). +| S4 | — | G3 | OPEN 2026-09-03 night. Packet `docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md`: §1 records that S3 chunk 2 already delivered S4's chunk-1 latch/gate/seal scope (the latch owner, the gated flush→stamp→clear→seal block, the counted seals); what remains of chunk 1 is small and dispatched as **S4-c1** (`s4-c1.js`, worktree `s4-c1-impl` at `6385f4411`, contract = packet §6): C0 the far-punch constant — `portal_depth.vert` carries `0.99999988` = bits `0x3F7FFFFE`, retail's is `0x3F7FFFEF` (15 ULPs nearer; the depth spec's "wrong constant" row was right; lead bit check 2026-09-03) → retail's exact bits + a source pin; C1 the ±12 local-input reject at both portal-polygon producers (Ghidra table row 0x59BCD6–0x59BD28); C2 the portal-depth color-state register row (ColorWrite off vs retail's zero-alpha blend, identical output); C3 the depth truth-table Theory, the cross-frame latch test, look-ins isolated from the root latch. Chunk 2 = the two-FIFO alpha-list cutover (packet §3); chunk 3 = deletions (packet §4). G3 is S4's owner gate; the lead's S3-state G3 pre-run (20/20 frames, in the S3 row) is the baseline to diff against. | **S4-c1 ROUND 0 = `c7ab5b6d8` (Sonnet), THREE LENSES FAIL (2026-09-03 21:00–21:20):** one BLOCKING defect seen by all three — the ±12 guard's quantifier is inverted (rejects on ANY vertex on ANY plane; retail's PDB-paired bytes at 0x59BCD6–0x59BD66 reject only when EVERY vertex lies on the SAME plane) — and the LEAD's §6 paraphrase carried the same inversion (corrected in §6; lesson saved to memory: quote the decomp predicate, never paraphrase it). The production lens's DAT scan: 2,889 portal polygons carry a ±12 vertex and 2,163 EXIT polygons lie ENTIRELY on a ±12 plane — so the guard is very likely retail's never-sealed 'panel' mechanism (the #456/#465 family), which makes the PM/PC depth-event transcript comparison against the four alphadepth captures the chunk's real gate (never run in round 0). Also: the register-test gate is vacuous (no test reads the register), the manifest comment's ULP direction is inverted. C0 (retail's exact far-punch bits, verified at the binary), C2 (AD-119) and C3 (three new truth-table/latch pins, nine mutation texts) verified. FIX ROUND 1 = S4 packet §7 (`s4-c1-fix1.js`, dispatched 21:20): the four per-plane predicates at both producers with five-case T2, the seal count order, the automated PM/PC gate over the captures (a diverging pose is tagged KnownFailure and written up, never weakened), comment truth. **S4-c2 CONTRACT DRAFTED** (packet §8, 2026-09-03 21:50): two FIFO lists of 3000, the spec §4 router as one pure function, the four flush sites (the sort-cell EXIT valve as a new walk event kind), `FlushFartherThan`/AP-34/every viewer distance deleted, and the AM/FL transcript gate over the five captures (10,556 `AM` lines, all `clip=0`; `FL` by site 13,705/309/18/23) as the proof; dispatched only after c1 lands. **S4-c1 FIX ROUND 1 = `2bd353234` (Sonnet, 295 tool calls), THREE LENSES 2026-09-03 22:07–23:00: retail-faithful PASS, production PASS, gate-honesty FAIL.** Confirmed at the bytes: the four per-plane accumulators at both producers, the count-after-guard order, the PM/PC gate's reading of retail's lines; five transcript poses pass (cathedral-arrival, cathedral-leak, foundry-deep, holtburg-doorway-still) with terrace-edge tagged KnownFailure. Findings, all on that one row plus one pin gap: (blocking) the KnownFailure write-up claims the PC sequence matches — false and never evaluated (the PM assert throws first); (major ×2) the divergence is a harness initial-condition choice — seed `portalsDrawnCount` from the fixture's first observed counter and the row turns green while the two-pass priming retires; (major) T2's five cases do not discriminate 'every vertex on SOME plane' from retail's 'every vertex on the SAME plane'; (minor ×4) stale seal-path summaries, an unobservable mutation named in the F2 pin's comment, doc-comment DAT figures an independent scan does not fully reproduce, a vacuous 'register tests' gate claim. The lead's own replay of the gate at `2bd353234` with the new `cathedral-stair-arch` capture added as a sixth Fact PASSES (its seed value is 8). **FIX ROUND 2 = packet §9 (the LAST round; dispatched 23:10):** seed the counter from the fixture (one pass), compare and print both sequences together, the discriminating ±12 case, the sixth pose, comment truth. **FIX ROUND 2 = `9ba8f013e` (Sonnet; on the two cherry-picked capture commits), THREE LENSES 2026-09-03 23:10–23:38: retail PASS (byte evidence: `portalsDrawnCount` has exactly one increment site 0x59BD74 and one reset site 0x5A489E under `view_count > 0`, `forceClear` has no writer; the discriminating case is admitted by retail's four per-plane accumulators), production PASS (round-2 src diff = comment text only; no pin weakened; gates reproduce on a fresh Release build), gate-honesty FAIL on comment truth only (the terrace-edge Fact's comment claimed a PC match that seeding, not the pre-fix state, produced; the stair-arch comment states a rejection count the PM/PC tuple cannot observe; a DAT-scan comment cites a pin that does not pin). All six transcript poses PASS (terrace-edge's KnownFailure removed; seed values 0/0/1/2/2/8). **S4-c1 LANDED 2026-09-03 23:38–23:40** as `d1e3e64f6` + `5de42a12f` + `323f5a334` (cherry-picks of rounds 0–2) + `766f9e749` (the LEAD corrected the four flagged sentences — a third implementer round is barred by §5; code unchanged; owner to review). Landing gates: Release 0 warnings; six transcript Facts 6/6; hermetic 6,833/6,833; InstalledDat 249 pass / 4 known (#383 ×2, TowerAscent, #458) / 1 skip. Landing self-gates: route.txt four poses `logs/selfgate-20260903-234934-s4c1-landed-route2` (Facility panels present, mean RGB (79,20,25)); capture poses `logs/selfgate-20260903-234030-s4c1-landed-g3b` and `…-235044-s4c1-landed-g3b2` — frames 13/14/16 in band, **frame 15 (holtburg-doorway) shows an empty plane under fog TWICE** where the S3-state run `logs/selfgate-20260903-165634-g3b` showed the village. Lead read 2026-09-04: the server snapped the requested y 13.39→17.39 in every run; the CLIENT then seated the player in the house-interior cell `0xA9B4013F` at (134.07, 17.36) in both landed runs versus the outdoor cell `0xA9B40029` at (133.60, 17.39) in the S3-state run (0.46 m apart on the doorway threshold), so the frame roots from the interior cell with the eye outside — a placement/membership boundary at the doorway, not a draw change; S4-c1 touched no placement code. A pre-S4 control at `6575cfcee` (`s3-review-fix/logs/selfgate-20260904-042324-pre-s4-g3b`) produced 0 frames: the login reveal at `0xA9B40176` never went visible (#462 class) and the process exited 0xE0434352 after the graceful logout (#461 class) → INCONCLUSIVE; the A/B re-run (landed tip twice + pre-S4 once) is owed before any further self-gate is trusted at that pose. **S4-c2 DISPATCH 2026-09-03 23:41 DIED** on the account's session limit / credit exhaustion with no commit; worktree `s4-c2-impl` reset clean at `766f9e749`. Session handed to a new account 2026-09-04 morning; ACE was NOT running at hand-over (no UDP 9000 listener), so every connected gate waits on the owner starting it. **HAND-OFF 2026-09-04 morning:** `docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md` (read order, landed state, the S4-c2 implementer dispatched ~08:35 into `s4-c2-impl`, the #464 RenderDoc plan, the Holtburg doorway A/B, owner-owed items, tooling gotchas, paste-prompt). **OWNER 2026-09-04 morning: running `766f9e749`, reports the cathedral stairwell artifact (#464) appears FIXED** — plausible mechanism = S4-c1's ±12 reject now drops the 12 hall-doorway punches retail also rejects; PROVISIONAL until the lead re-runs `route-464-tilt3.txt` at the tip and diffs frame `01-neg160` against `logs/selfgate-20260903-225434-464-tilt3` (owner client running — not launched yet). **S4-c2 IMPLEMENTER DONE 2026-09-04 09:35: `048d5b12f` in `s4-c2-impl`** (19 files, +1,697/−543): two FIFO lists + `RetailAlphaMeshRouter` + `SortCellExit` event + four flush sites, `FlushFartherThan`/viewer distance deleted; hermetic 6,855/6,855; shader classes 32/32; InstalledDat 249 pass + the 4 known + SIX new KnownFailure Facts. Implementer's own deviations for the lead to rule on: (a) C4 (EnvCell transparent subsets through the queue) NOT done; (b) AP-34 not retired but narrowed into AP-236 (EnvCell-immediate residual) + AP-237 (AlphaBlend cannot tell retail's ALPHA from the Translucent+ClipMap CLIP override; cloud GfxObj 0x01004C35); (c) G-c2's per-list drained-count dimension is KnownFailure on ALL six poses because the hermetic harness carries no mesh content — only the (site, threshold) sequence matches. REVIEW ROUND 1 dispatched. **REVIEW ROUND 1 (2026-09-04 ~10:00–10:40): retail lens FAIL** — every core predicate confirmed exact at the bytes (list select, 0xbb8 capacity, `test ah,5; jp` strict-less on both counts → 2250 drains, CLIP-then-ALPHA, rows 1–5, the four call sites, ::flush=0.75f, delay 0x0E, SortCellExit at 0x5a1a07 under the DrawSortCell gate); BLOCKING: the particle site's 'rows 1/2/4/5 unreachable' assert throws on an Opaque-classified mesh-particle batch (data-driven row 5; `TryAppendMeshDraws` filters nothing); MAJOR: the CLIP list is structurally unreachable for ordinary content (ClipMap kinds are `IsOpaque`, drawn alpha-to-coverage; 4,183/10,556 captured AM entries are CLIP) with no register row; contract C3's detail input hardcoded false while building shells reach the alpha path and the DRAIN applies the detail pass retail's replay never has (`DrawBuilding` installs `building_detail_surface` @0x0059f2eb before its flush/shell draw → row 1 immediate); `IsFirstForList` = first-since-drain where retail's `new` is per-DrawMesh-invocation (`0059d4cc/0059d4d0`; captures new=1 on 9,685/10,556); gate G-c2 all-KnownFailure → zero CI signal and zero SortCellExit drains exercised; MINOR: AP-237's cloud example is disproven (Type 0x10114 carries alpha-family bits → mask 0x02 both sides), DrawBlock cited at its loop head 0x005a18d0 instead of 0x005a17c0, 'return site' = the call address. Lead verification concurs and adds C4 (EnvCell detail-off append is bounded — `RenderTransparentOrdered` exists). **FIX ROUND 1 = packet §11 (M1–M8)**; **production/gate lens FAIL** (all four claimed gates reproduced, four mutation checks re-performed): same blocking particle throw; the count gate is unmatchable by construction (CLIP structurally empty — 75 % of cathedral-arrival's expected drains are CLIP — and per-instance vs per-subset cardinality); a THIRD production `FlushLandscapeAlpha` caller (`RetailPViewRenderer.cs:485`, the #132 outdoor-root drain) is mislabelled as retail's DrawCells flush, which never runs on an outdoor root; AP-236 REUSES an id filed and retired on main by #132; the unreachability enumeration lists masks that cannot occur; `ApplyScratchRetention` passes the entry count as the source count; §10 sequences off by one; the 'independent' router oracle is the same if-chain. Recorded as packet §11.1 (A1–A8). **FIX ROUND 1 DISPATCHED** (one Sonnet implementer in `s4-c2-impl` on `048d5b12f`, contract §11 + §11.1). **FIX ROUND 1 DONE = `cc8e5677a` (Sonnet, 2026-09-04 ~12:10; 27 files, +1,248/−352):** every M/A item reported landed — the two router throws deleted with rows 1/5 drawn immediately (particle `has_alpha` from `CMaterial::CheckAlphaValues` @0x005396a0 / `SetTranslucencySimple` @0x005396f0 — TO VERIFY), the detail-surface router input + immediate building-shell draw (AD-120) + no detail on the drain, EnvCell detail-off FIFO (one token per cell), `IsFirstForList` deleted, the six Facts split into live `AlphaFlushSites_*` (InstalledDat lane) and KnownFailure `AlphaFlushCounts_*` with the truthful three-part reason, a live valve pin through `Replay`'s SortCellExit arm, the outdoor-root `FlushLandscapeAlpha` deleted (A1) with a renderer pin, register: `~~AP-34~~` restored, AP-236→AP-238, AP-237→AP-239, new AP-240 (structurally empty CLIP list), AD-120, AP header 159 / AD 92, AP-239's real instance surface `0x08000015` on GfxObj `0x010001EC`. Implementer gates: hermetic 6,864/6,864; InstalledDat 255/10 (4 known + 6 Counts)/1; shaders 32/32; six focused classes 120/120. Lead reproduction 12:15: Release build 0 errors, hermetic 6,864/6,864. **NEXT = review round 1 of `cc8e5677a` (two lenses), then landing** — hand-off `2026-09-04-s4-handoff.md` §3 carries the exact procedure. **#464 CONFIRMED FIXED at `766f9e749` (2026-09-04 08:15 UTC+2, lead scripted route `logs/selfgate-20260904-061530-464-tilt3-s4c1`):** identical probe eye to the 2026-09-03 artifact run, solid wall above the arch, hall columns gone; matrix row 'Cathedral stairwell, camera zoomed out' = PASS (provisional). **Holtburg doorway frame RESOLVED — not render (2026-09-04 08:40): the player FALLS through the world at that pose** (probe run `logs/selfgate-20260904-063313-hd-probe`: seated in interior cell 0xA9B4013F at a floorless point, z 96 → −20 m; the frame is the terrain from below); filed **#468** (placement, tactical); route-g3b pose 15 moved to the good run's outdoor standing point in 0xA9B40029; the pre-S4 control stalled twice at login (#462 recurrence noted). | S5 | — | G4 | fill | --- diff --git a/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md b/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md index 4f6ada5c..58371dbf 100644 --- a/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md +++ b/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md @@ -1,4 +1,4 @@ -# Campaign OVERHAUL v2 — hand-off at S4 chunk 2, fix round 1 (2026-09-04 ~11:00 local) +# Campaign OVERHAUL v2 — hand-off at S4 chunk 2, fix round 1 DONE / round review NOT started (2026-09-04 ~12:20 local) Clean state for a fresh session. Everything referenced is on disk under the Windows user `erikn`; a different Claude account on this machine reads it all. @@ -42,7 +42,7 @@ see §3 for how to find out what the chunk-2 fixer left behind. | Item | Value | |---|---| | Worktree | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\peaceful-blackburn-5333f0` | -| Branch | `claude/campaign-w-retail-frame-walk`; docs tip `2001103ca`, **latest renderer code `766f9e749`** (S4 chunk 1); clean | +| Branch | `claude/campaign-w-retail-frame-walk`; docs tip = the commit carrying this file, **latest renderer code ON THE BRANCH `766f9e749`** (S4 chunk 1); clean. Chunk 2 code is in `s4-c2-impl` only (§3). | | Base | `origin/main` `e102fb36` (2026-08-29); ~275 commits ahead; **nothing merges to main before G4** | | Dev pak | `%USERPROFILE%\Documents\Asheron's Call\acdream.pak`, bake recipe 8 | | Release binary | `src\AcDream.App\bin\Release\net10.0\AcDream.App.exe` built at `766f9e749` | @@ -53,7 +53,7 @@ Scratch worktrees (detached): | Worktree | At | Purpose | |---|---|---| -| `s4-c2-impl` | `048d5b12f` on `766f9e749` (+ the fixer's round-1 commit when it lands) | **S4 chunk 2 — the chunk commit and its fix round live HERE, not on the branch yet** | +| `s4-c2-impl` | `cc8e5677a` (fix round 1) on `048d5b12f` (the chunk) on `766f9e749`; clean | **S4 chunk 2 lives HERE, not on the branch yet** — review the round, then land (§3) | | `s4-c1-impl` | `9ba8f013e` | S4-c1 baseline BINARY, built (Release App + Cli) for the landing soak A/B; keep until S4-c2 lands | | `s2-final-ab` | `78068b2c` | S2-final binary for same-session perf A/B (keep) | | `s3-review-fix` | `6575cfcee` | pre-S4 control build; stalls at the foundry login (#462) — not usable as a control | @@ -95,86 +95,36 @@ every deviation gets a register row in the same commit. chamber; the zoomed-out FRONT view from the stairwell (hall arches + sky); #458's far-block admission (AD-118, 0.5 % edge-plane precision). -## 3. In flight: S4 chunk 2 — fix round 1 +## 3. S4 chunk 2 — where it stands (fix round 1 DONE, review of the round NOT started) -**What landed in the worktree:** `048d5b12f` in `s4-c2-impl` (Sonnet, 2026-09-04 -09:35): `RetailAlphaQueue` = retail's two FIFO lists (CLIP/ALPHA, 3000 each, -capacity drop), `RetailAlphaMeshRouter` (DrawMesh rows 1–5 + ConstructMesh -mask), the new `SortCellExit` walk event for DrawBlock's 0.75 valve, the four -flush sites, `FlushFartherThan`/every viewer distance deleted. Hermetic -6,855/6,855; shaders 32/32. +**Two commits sit in worktree `s4-c2-impl`, NOT yet on the campaign branch:** -**Review round 1 (both lenses FAIL; lead verified every finding at the source; -the core port is exact at the bytes):** -- BLOCKING: the particle site asserts DrawMesh rows 1/2/4/5 "unreachable" and - THROWS; `ParticleRenderer.TryAppendMeshDraws` appends Opaque-classified mesh - batches → mask 0x00 → row 5 → exception in the render loop. -- MAJOR: the CLIP list is structurally EMPTY for ordinary content (ClipMap - kinds are `WbDrawDispatcher.IsOpaque` → alpha-to-coverage, never routed; - 4,183 of 10,556 captured AM entries are CLIP) — no register row; - contract C3's detail input hardcoded false while building shells reach the - alpha path and the DRAIN applies the detail pass retail's replay never has - (`DrawBuilding` @0x0059f2a0 installs `building_detail_surface` @0x0059f2eb - before its flush → row 1 immediate); C4 (EnvCell detail-off append) skipped - though `EnvCellRenderer.RenderTransparentOrdered` makes it bounded; - `IsFirstForList` = first-since-drain where retail's `new` is per-DrawMesh - invocation (`0059d4cc/0059d4d0`); the AM/FL gate is all-KnownFailure and the - counts are unmatchable by construction; a THIRD `FlushLandscapeAlpha` caller - (`RetailPViewRenderer.cs:485`, the #132 outdoor-root drain) is mislabelled as - retail's DrawCells flush, which never runs on an outdoor root; AP-236 REUSES - an id filed and retired on main by #132. -- MINOR: AP-237's cloud example is disproven (Type 0x10114 has alpha-family - bits → mask 0x02 both sides); `DrawBlock` cited at its loop head - 0x005a18d0 (function is 0x005a17c0); "return site" = the call address; - scratch-retention argument; stale comments; §10 transcription off by one. -- Everything is itemized as **packet §11 (M1–M8) + §11.1 (A1–A8)** on the - campaign branch (`3813f0bbf`, `3e76f71d5`). +| Commit | What | State | +|---|---|---| +| `048d5b12f` | the chunk: two FIFO lists, `RetailAlphaMeshRouter`, the `SortCellExit` valve event, four flush sites, distance sort deleted | review round 1: both lenses FAIL (recorded in the ledger and packet §11) | +| `cc8e5677a` | **fix round 1 (Sonnet, 2026-09-04 ~11:00–12:10)** — every item of packet §11 M1–M8 and §11.1 A1–A8 | implementer reports all items landed; lead verified the commit shape (27 files, +1,248/−352), the register ids, the twelve split Facts and the A1 deletion; **the round's two review lenses have NOT run** | -**Dispatched:** one Sonnet implementer (plain Agent tool) at ~10:55 local into -`s4-c2-impl`, told to commit ONCE on top of `048d5b12f` with every mutation -check's actual failing assertion and every gate's real output line in the -commit body. **It runs inside the 2026-09-04 lead session; a session switch -kills it.** Find its state: +What `cc8e5677a` did, per the implementer's report (verify each claim against the source before trusting it — `feedback_verify_subagent_claims_against_source`): -```bash -git -C C:/Users/erikn/source/repos/acdream/.claude/worktrees/s4-c2-impl log --oneline -3 -git -C C:/Users/erikn/source/repos/acdream/.claude/worktrees/s4-c2-impl status --short -``` +- **M1** the two router throws deleted; new `ParticleRenderer.RouteParticleSubmission` (testable) and `DrawImmediateParticleSubmissionRhi` for rows 1/5; particle `materialHasAlpha` from retail's `CMaterial::CheckAlphaValues` @0x005396a0 (has_alpha = 0 only when all four channel alphas are 1.0; `CMaterial::SetTranslucencySimple` @0x005396f0 sets them to `1 − translucency`), i.e. "current alpha ≠ 1.0" from `ColorArgb`'s top byte. **Verify this quote and the reachability path `Particle::Update` @0x0051c290 → `CPhysicsPart::SetTranslucency` yourself; it is the round's one new retail rule.** +- **M3** detail-surface router input at both Wb sites; new `DrawImmediateAlphaInstance(Rhi)` draws a translucent building-shell instance at its own turn when building detail is on; the drain's detail branch deleted; new register row **AD-120** (the "in place → at the entity's stream mark" adaptation). +- **M6** `RetailPViewPassExecutor.SubmitOrDrawTransparentCellShell` + `EnvCellAlphaDrawSource` (one token per cell, replayed through `RenderTransparentOrdered`); `EnvCellRenderer.TransparentDetailEnabled`. +- **M4** `RetailAlphaEntry.IsFirstForList` deleted with its wrong pin. +- **M5** the six Facts split into `AlphaFlushSites_*` (live, but the class carries `Lane=InstalledDat`, so they pass in the InstalledDat lane, never hermetically) and `AlphaFlushCounts_*` (KnownFailure, three-part truthful reason); new live valve pin `WalkFrameDriverTests.SortCellExit_ValveDrainsThroughReplayAtTheExactBoundary`. +- **M2 / A2 / M8c** register: `~~AP-34~~` restored struck-through; AP-236→**AP-238**, AP-237→**AP-239**; new **AP-240** (the structurally empty CLIP list: clip-mapped subsets draw immediately alpha-to-coverage); AD count 92, AP count corrected. +- **M7** the cloud citation disproven; a real Translucent+ClipMap-without-alpha-family instance found by a live DAT scan: surface `0x08000015` on GfxObj `0x010001EC` (6,152 surfaces scanned, 27 matches). +- **A1** the mislabelled outdoor-root `FlushLandscapeAlpha()` at `RetailPViewRenderer.cs:485` deleted (the pass-end `RenderNormalMode` flush in `RetailAlphaQueue.EndFrame` is retail's outdoor drain); pin in `RetailPViewRendererTests.cs`. +- **A4** `ApplyScratchRetention` source-count argument fixed with a pin; **M8a/b/d, A3, A5–A7** citations/comments/§10 fixed; `worldbuilder-inventory.md:420` updated. +- Gates the implementer reports: Release 0 warnings; hermetic 6,864/6,864; InstalledDat 255 pass / 10 fail (4 pre-existing + 6 `AlphaFlushCounts_*`) / 1 skip; shaders 32/32; the six focused classes 120/120. Mutation checks with failing text are in the commit body (`git -C log -1 --format=%B`). +- **Lead reproduction on `cc8e5677a` (2026-09-04 12:15):** `dotnet build AcDream.slnx -c Release` → 0 Error(s); hermetic App lane → `Passed! - Failed: 0, Passed: 6864, Skipped: 0, Total: 6864`. The InstalledDat lane, the shader classes and the focused classes were NOT re-run by the lead — the review lens does that. -- A commit above `048d5b12f` → round 1 finished; its report is the commit - body. Run the two review lenses (below), verify their findings yourself. -- No commit, dirty tree → cut off mid-round. Read the diff against §11/§11.1; - finish it yourself or discard the worktree's changes (it is disposable: - `git worktree remove --force` + re-add detached at `048d5b12f`) and - re-dispatch §11 + §11.1 from scratch. Never stash. -- No commit, clean tree → never started; re-dispatch. +**What is left on chunk 2, in order:** -**Round-1 review:** two lenses (Opus or the session model; the Opus tier was -529-overloaded for ~90 min on 2026-09-03): retail-faithful, narrowed to the -decomp claims of M1/M3/M6 and the router inputs; production/gate-honesty (the -six live `AlphaFlushSites_*` Facts, the new valve pin, the immediate-draw -paths' allocation, the register). Lead verifies every finding against the -source (`feedback_verify_subagent_claims_against_source`). PASS → land. FAIL → -fix round 2 (the LAST) → PASS → land; a third round STOPS the chunk and is -written up in the ledger. +1. **Review round 1 of `cc8e5677a`** — two lenses (Opus, or the session model if Opus 529s): (a) retail-faithful, narrowed to M1's `CheckAlphaValues`/`SetTranslucencySimple` rule and reachability, M3's row-1 immediate path vs `DrawBuilding` @0x0059f2a0 (`curr_detail_surface` set @0x0059f2eb, cleared @0x0059f345; replay `detailEnabled = 0`), M6's `DrawEnvCell` @0x0059f170 detail rule, the router inputs at all three sites, A1's claim that nothing opaque draws between the deleted drain and the pass-end flush; (b) production/gate-honesty: reproduce every gate line, re-perform ≥3 mutation checks, check every sentence of the commit body and packet §10 against the tests, the immediate-draw paths' allocation, the register rows AP-238/239/240 + AD-120 for accuracy (AP-240's consequence text; AD-120's adaptation is honest), no file outside the allowed set. **The lead verifies every finding at the source before acting.** The prompts for both lenses are in this session's transcript (search `LENS = RETAIL FAITHFULNESS` and `LENS = PRODUCTION SAFETY + GATE HONESTY`) — reuse them narrowed to the round-1 diff. +2. PASS → **land** (procedure below). FAIL → **fix round 2 = the LAST** (write it as packet §12; a third round STOPS the chunk and is written up in the ledger). +3. **Landing:** cherry-pick `048d5b12f` then `cc8e5677a` onto the campaign branch — the packet conflicts (the worktree's copy has §10 + a "§11 result" paragraph under §10; the campaign's copy has §11/§11.1); resolve by keeping §10 (with its result paragraph) BEFORE §11. Then: Release build 0 warnings; hermetic lane; InstalledDat lane (expect the four known failures + the six `AlphaFlushCounts_*`, nothing else; the six `AlphaFlushSites_*` must PASS there); shader classes; the validation-on self-gate (`route.txt` four poses, then `route-g3b.txt`; one run per background command) diffed against `logs/selfgate-20260903-234934-s4c1-landed-route2` and `logs/selfgate-20260904-062148-g3b-tip-a2` (Facility left-wall mean RGB ≈ (79,20,25) = panels present); a STATIONARY-phase soak A/B against the S4-c1 binary already built in `s4-c1-impl` (`tools/run-connected-r6-soak.ps1 -SkipBuild -PreparedAssetPath "$env:USERPROFILE\Documents\Asheron's Call\acdream.pak"` on the tip, then `-Repository -SkipBuild`; same Windows session type; judge `stationary` only — #463). Then the §13 S4 row, the digest, and remove `s4-c2-impl`/`s4-c1-impl`. -**Landing procedure:** cherry-pick `048d5b12f` and the round-1 commit onto the -campaign branch (the packet will conflict on §10 vs §11 — both are appends; -keep both, §10 before §11); Release build 0 warnings; hermetic lane -(`dotnet test tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-build --filter "Lane!=InstalledDat&Lane!=PreparedPackage&Lane!=Live&Lane!=Manual&Lane!=Timing&Lane!=Windows&Lane!=Linux&Lane!=SystemFont&Purpose!=Diagnostic&Status!=KnownFailure"`); -InstalledDat lane (`ACDREAM_RUN_INSTALLED_DAT_TESTS=1`, -`ACDREAM_DAT_DIR="C:/Users/erikn/Documents/Asheron's Call"`, -`--filter "Lane=InstalledDat"`; expect exactly the four known failures plus -the six `AlphaFlushCounts_*` KnownFailure Facts); shader classes; the -validation-on self-gate (`route.txt` four poses + `route-g3b.txt`) diffed -against the S3-closed run `logs/selfgate-20260903-16*` / -`…-234934-s4c1-landed-route2` with `py scratchpad/selfgate-diff4.py ` -(PIL; the script lives in the OLD session's scratchpad — re-create it if -missing: per-frame mean-abs-diff sheet); a STATIONARY-phase soak A/B against -the S4-c1 binary in `s4-c1-impl` -(`tools/run-connected-r6-soak.ps1 -SkipBuild -PreparedAssetPath "$env:USERPROFILE\Documents\Asheron's Call\acdream.pak"`, -then `-Repository -SkipBuild`; same Windows session type; judge -`stationary` only — #463). Then the §13 S4 row, the register, and the digest. +**Known residuals that survive chunk 2 (registered, not bugs to chase now):** AP-240 (the CLIP list is fed only by clip-mapped mesh particles — every other clip-mapped subset is alpha-to-coverage opaque), AP-238 (EnvCell one-token-per-cell granularity), AP-239 (the Translucent+ClipMap mask collapse; one real instance), AD-120 (immediate translucent draw at the entity's stream mark rather than in place), AD-119 (portal-depth ColorWrite off vs zero-alpha blend). The `AlphaFlushCounts_*` Facts stay KnownFailure by construction (harness content + per-instance vs per-subset + AP-240); a content-bearing gate would be S5 evidence work only if a slice needs it. ## 4. After chunk 2 @@ -261,7 +211,7 @@ Read, in this order, and then tell me the summary you formed before acting: 2. CLAUDE.md, then docs/plans/2026-09-01-campaign-overhaul-world-solidity.md §13 (the S4 row tail). 3. claude-memory/project_overhaul_campaign.md "Current". 4. docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md §8, §11, §11.1. -Then check the S4 chunk 2 fixer's state per the hand-off's §3 and report: what landed, what is +Then confirm the two chunk-2 commits in s4-c2-impl per the hand-off's §3 and report: what landed, what is in flight, what you propose next. Continue under the campaign goal: drive the plan until the renderer is solid and G4 passes; never merge to main before G4; the §5 model (you write each bounded chunk contract, Sonnet implements, you verify every claim against the named retail decomp