From e813aa1f454e66c3ce30940e806528aadffbdc83 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 3 Sep 2026 11:08:01 +0200 Subject: [PATCH] =?UTF-8?q?docs(render):=20ledger=20=E2=80=94=20S3=20chunk?= =?UTF-8?q?=203=20CLOSED;=20perf=20gate=20passed=20against=20a=20same-sess?= =?UTF-8?q?ion=20A/B=20(the=20flat=2031=20ms=20was=20RDP=20pacing)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- docs/plans/2026-09-01-campaign-overhaul-world-solidity.md | 4 ++-- 1 file changed, 2 insertions(+), 2 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 489675fb..9f21f33b 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -660,7 +660,7 @@ Update immediately when a slice changes state. Chat is not the ledger. | 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 | | S2 World graph | CLOSED — G2 PASSED (owner, 2026-09-03): Facility Hub PASS, Holtburg house PASS, cathedral leak unchanged/not worse (S3/S4 target), portal haze FIXED by chunk 6 and owner-confirmed; the terrain doorway-punch finding is carried to S4; the chunk-6 retail-lens review (Opus) returned no blocking finding; its one MAJOR (a cell reached through two portals got two particle turns per frame) and the minor items are fixed in the follow-up commit: frame-scoped particle-turn dedupe beside the shell dedupe, zero-emitter cells cost one count check, the scope-cost counter maintained on the cell path, the dead `OutdoorSceneParticleEntityIds` stub chain deleted through the composition root, AD-117 item 4 names the owner-cell substitution and the absent per-emission `AddPartToShadowCells`, and a sink-level pin that an emitter's cell membership is the owner's pose cell and survives the projection-visibility switch (the review's F7 one-frame eligibility lag is the per-frame view pass, documented in the pin). RETAIL AXIOM (owner, 2026-09-03, at the capture session, 2013 v11.4186 client on local ACE): standing on the cathedral stairs, RETAIL ITSELF shows part of the same artifact — the outside structure leaking into the interior — CONFIRMED in BOTH the 2013 v11.4186 client and the 2015 EoR client (owner switched clients to check), so the cathedral leak is retail behavior S3/S4 must REPRODUCE, not remove; the retail transcript at that pose is captured as `logs/oh-capture/cathedral-leak.{walk,parts,alphadepth}.log` (walk 5 frames with LC/SC landscape order, parts 3 frames, alpha-depth 5 frames, recon-verified offsets); owner's retail screenshot at the pose: an exterior wall slab cutting diagonally through the stair chamber over the interior ramps (`logs/oh-capture/cathedral-leak.retail.png`, owner-saved) | `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 (retail's zero-sphere `find_cell_list` 0x0052b4e0, verified statically 2026-09-03 — AD-117 item 1 dropped), 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). Connected R6 soak on the FINAL S2 build (`logs/connected-r6-soak-20260903-010403.report.json`, binary matches source, exit 0, graceful=True): 9 canonical checkpoints, 0 failures, 10 warnings (server-side population drift + DAT VFX table messages), 522 s — route PASS. OWNER G2 CHECK 2026-09-03 (client at `4b0b29e4`): Facility Hub PASS, Holtburg house PASS; cathedral: the original leak unchanged, NOT worse (S3/S4 target, G2 bar met); TWO NEW OWNER FINDINGS block G2 closure — (a) parts of buildings leak through terrain outdoors in Holtburg — owner screenshot shows doorway-sized fragments of the houses on the terrace BELOW showing through the hill; mechanism identified: `PortalDepthMaskRenderer` draws every visited cell's `OtherCellId == 0xFFFF` portal fan (`RetailPViewPassExecutor` `DrawDepthFan`) with depth compare `Always` + depth write, so a building doorway BEHIND terrain still punches far depth through the hill and the interior draws through the hole; retail's far punch cannot be `Always` against terrain — the exact z-func is S4's first question (the #117 punch stencil is already on S4's delete list; the retail-world contract §5.4 wording must be re-read at the capture). Pre-existing (not an S2 regression), assigned to S4; (b) the purple portal-exit haze on the character no longer appears on arrival — ROOT CAUSE FOUND (instrumented runs `logs/selfgate-20260903-053731-haze-candidate`, `…-054153-haze-candidate-2`, chunk-4 control `…/bisect-chunk4/logs/selfgate-20260903-054328-haze-chunk4`): the server keeps the player Hidden until acdream sends LoginComplete at reveal `complete` (retail-correct); the Hidden-state script's emitters spawn in the arrival cell at `materialized`, are view-eligible at `world-visible`, and are never DRAWN (frame `h02-arrive-400ms`: room, no character, no cloud) because the walk draws an owner's emitters only through the owner's registry rows and a hidden owner's shadow is suspended; the deleted chunk-5 fallback used to carry them. Retail gives every emitter its OWN cell membership (`add_particle_shadow_to_cell` 0x00514a70, one shadow in its own cell, no clip planes, drawn at that cell's turn regardless of the parent's hidden state) — the branch AD-117 item 4 had deferred as 'no production path'. Fix = S2 chunk 6 `f6b4584b` (packet §10): `ParticleSystem` per-pass cell→handles index + `DrawForCell`; the walk draws particles BY CELL at the existing turns; every owner-union particle path deleted; the post-replay per-cell pass deleted (it double-submitted the root flood — the implementer flagged it, the lead verified `EmitCellContentsTurn` fires `CellParticles` for root-flood and look-in cells alike); AD-117 item 4 → port note; temporary probes removed. VERIFIED: `logs/selfgate-20260903-062522-haze-chunk6` frame `h02-arrive-400ms` shows the purple cloud at the character in Facility Hub; three-pose self-gate `logs/selfgate-20260903-062615-s2-chunk6` in the accepted band (cathedral 12.7% / Facility 15.1% / house 13.9% px vs baseline, wall-panel mean 79,20,25), zero exceptions. Gates at `f6b4584b`: Core 4,987/4,987; Content 214/214; Runtime 1,884/1,884; App hermetic 6,760/6,760; App InstalledDat 217 / 2 pre-existing #383. Owner re-check of the haze: CONFIRMED FIXED 2026-09-03 ("Ok yeah it is fixed now"). 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 (the S3 packet §7 names the two traces); then S3 | -| S3 Walk | CHUNK 2 LANDED 2026-09-03 (`be9b4c1f` + comment `2f5373c7` + review follow-ups `434a7df2`); CHUNK 3 DISPATCHED (contract §9); contracts §8–§11 written; CAPTURE SESSION COMPLETE (five poses, fixtures at `docs/research/2026-09-01-overhaul/oh-capture/`). Chunk 2 verification: three Opus lenses (retail decomp / driver correctness / build+test truth) all PASS — one MINOR (the off-by-default seal-skip probe had gained a second effect through the seal count → probe DELETED in `434a7df2`), notes on the Collect/Replay consume-vs-re-arm split (no retail analogue, documented), the enumerated-vs-degenerate-guarded seal count (inert: the consumer is `!= 0`), and two weak-but-in-spec pins (the interior PView flag is now wired explicitly). Implementer deviations (accepted): the two-floods-in-one-Collect whole-once test stays at ov=0 (no retail analogue for two root floods per frame); R1 pinned as field wiring, not a look-in integration fixture. Gates at `be9b4c1f`/`434a7df2`: App hermetic 6,765/6,765; focused 297/1 skip; InstalledDat 241 pass / 1 skip / 3 known (2× #383 + TowerAscent KnownFailure). Self-gate `logs/selfgate-20260903-075507-s3-chunk2` at `4c364412` (four poses incl. the NEW owner-supplied Holtburg terrain-leak pose): vs the chunk-6 run 1.8% / 4.0% / 1.6% px differ — ONLY the player's idle pose, the Facility drudge, and daylight through the Holtburg doorway (diff sheet inspected), no structural change; Facility wall-panel mean (78,20,25) = panels present; zero exceptions. `04-holtburg-terrain-leak.png` shows the doorway-sized fragments through the hill = chunk 3's BEFORE reference. Chunk 3 contract finding: the ported ring order, closest-cell table and ring-to-LOD mapping reproduce every captured LC/SC sequence at both cathedral poses with zero mismatches (LOD cell ids are `x*8+y+1` in LOD coordinates). Chunk 2 finding: retail gates the landscape flush, stamp advance, Z clear and exit seals on `outside_view.view_count > 0` (`PView::DrawCells` 0x005a4840) and the Z clear additionally on the persistent seal counter `D3DPolyRender::portalsDrawnCount` (fed by exit seals alone in the building path) — acdream's unconditional clear/seals and the `_skyDrawnThisFrame` proxy are the divergence chunk 2 retires | `s3-walk-ownership-map.md` (retail table, current owners, four chunks, review lenses, gate, the three exact captures to ask for) + built-mesh/world contracts | — | — | — | folded into G3 | CHUNK 1 IMPLEMENTED `079483bb6` (worktree `s3-chunk1-impl`: the print-only `ACDREAM_DUMP_WALK_TRANSCRIPT` emitter, EC/OC parsing + parts/alpha-depth readers, the five OH captures as fixtures, the four kit poses in the still-frame conformance harness — the foundry-deep row exposed that its exit chain reaches 12 real buildings the FW0 stub landscape never had, fixed with the full DAT-built world; hermetic 6,814/6,814; InstalledDat 245/1 skip/3 known); its three-lens review FAILED on real findings → FIX ROUND 1 in progress (§11.5 G1–G10): a vacuous flag-off pin (one frame + a parser that drops the open frame), LC/SC LOD-id arithmetic outside the flag, no flag-on LC/SC/BLD round trip, and — the transcript gate's first two real catches — `SC` printed AFTER `BLD` (retail's `DrawSortCell` entry precedes `DrawBuilding`, which it calls) and the trailing outdoor `OC ` that is retail's weather pass (`GameSky::Draw` 0x00506ff0 → `DrawObjCellForDummies(after_sky_cell)` 0x005070da); every new pin now carries a mutation check. CHUNK 3 LANDED 2026-09-03 (`4ee2866a` implementer + `651badc2` fix round 1 + `e10765aa` review follow-ups). SELF-GATE `logs/selfgate-20260903-100043-s3-chunk3` at `e10765aa`: the Holtburg terrain-punch fragments are GONE at the owner's pose (`04-holtburg-terrain-leak.png`, clean hill) with NO depth-function change — the §9 R4 order-only hypothesis holds; cathedral / Facility / house structurally unchanged (diffs 10.5% / 0.9% / 7.0% vs the chunk-2 run = dawn-vs-night lighting + actors; the cathedral's upper opening shows sky in both runs; Facility wall-panel mean (79,20,25)); zero exceptions. Re-review after fix round 1: three Opus lenses PASS (remaining minor/notes fixed in `e10765aa`: enum doc, alpha-mark comment, pending-batch clears, try/finally around the terrain-frame completion, particle doc order, the outdoor pin now observes a cell turn). Gates at `e10765aa`: App hermetic 6,795/6,795; focused 335/1 skip; InstalledDat 241/1 skip/3 known; Core Vfx 109/109. PERF GATE FAILED at `e10765aa` (soak `logs/connected-r6-soak-20260903-100400` vs the S2-final `…-010403`, same runner, both Uncapped=false): CPU p50 31.2 ms flat at every outdoor destination (baseline 2.0–15.5), FPS 32 (baseline 51–452), GPU p50 2–4× — ~500 terrain submissions/frame because a StreamMark after nearly every land cell (scenery statics) splits the batch. FIX ROUND 2 (§9.7, the last allowed): an opaque ordered-stream flush is not a terrain flush point (opaque-vs-opaque is depth-resolved; only punches, alpha drains, clear/seals, sky, shells and emitting particle turns split), with a punch-order pin and the soak re-run as the gate. ROUND 2 LANDED (`896c63fe` fixer + `74ac7aa2` lead follow-up): the StreamMark arm no longer flushes the terrain batch (pipeline-state citation: the ordered stream is opaque-only, `GpuBlendMode.None`, depth test+write — `WalkStaticStreamPopulator.cs:179`, `WbDrawDispatcher.OrderedStream.cs:569-571`, `WbDrawDispatcher.Rhi.cs:240/245/343`); three lenses: driver PASS, order and build FAIL on ONE finding — the re-expressed StreamMark pin was vacuous (an empty landscape view admitted no statics, so no StreamMark fired) — fixed by the lead in `74ac7aa2` (real full-viewport view + trace: two FLUSH lines precede the merged three-cell batch); hermetic 6,796/6,796 at `74ac7aa2`. GATE PENDING: the soak re-run + four-pose self-gate at `74ac7aa2` (running). History — chunk 3 fix round 1 (worktree `s3-chunk3-impl`: implementer commit `671eb3ad`; the three-lens review found three BLOCKING defects — terrain slot map keyed `0xXXYYFFFF` vs the walk's `0xXXYY0000` (no terrain drawn at all), adjacent-same-landblock batching that can never merge because retail's own sort turn interposes a particle event after every land cell (~530 terrain submissions/frame), and the timing diagnostic moved inside the per-batch loop — plus the deleted `TERRAIN:0` pins, an inverted mechanism comment, a vacuous T2 assertion and a stale oh1 row; all lead-verified real; §9.6 is the fix contract: normalized slot key, ONE pending terrain batch across landblocks flushed only before a submitting leaf with empty particle turns kept open (order-identical by construction), one timing sample per frame, LandCell driver pins). Round 1 of the two the plan allows. After it: chunk 1 (§11), chunk 4 (§10), the S3 review round (§5) | +| S3 Walk | CHUNK 2 LANDED 2026-09-03 (`be9b4c1f` + comment `2f5373c7` + review follow-ups `434a7df2`); CHUNK 3 DISPATCHED (contract §9); contracts §8–§11 written; CAPTURE SESSION COMPLETE (five poses, fixtures at `docs/research/2026-09-01-overhaul/oh-capture/`). Chunk 2 verification: three Opus lenses (retail decomp / driver correctness / build+test truth) all PASS — one MINOR (the off-by-default seal-skip probe had gained a second effect through the seal count → probe DELETED in `434a7df2`), notes on the Collect/Replay consume-vs-re-arm split (no retail analogue, documented), the enumerated-vs-degenerate-guarded seal count (inert: the consumer is `!= 0`), and two weak-but-in-spec pins (the interior PView flag is now wired explicitly). Implementer deviations (accepted): the two-floods-in-one-Collect whole-once test stays at ov=0 (no retail analogue for two root floods per frame); R1 pinned as field wiring, not a look-in integration fixture. Gates at `be9b4c1f`/`434a7df2`: App hermetic 6,765/6,765; focused 297/1 skip; InstalledDat 241 pass / 1 skip / 3 known (2× #383 + TowerAscent KnownFailure). Self-gate `logs/selfgate-20260903-075507-s3-chunk2` at `4c364412` (four poses incl. the NEW owner-supplied Holtburg terrain-leak pose): vs the chunk-6 run 1.8% / 4.0% / 1.6% px differ — ONLY the player's idle pose, the Facility drudge, and daylight through the Holtburg doorway (diff sheet inspected), no structural change; Facility wall-panel mean (78,20,25) = panels present; zero exceptions. `04-holtburg-terrain-leak.png` shows the doorway-sized fragments through the hill = chunk 3's BEFORE reference. Chunk 3 contract finding: the ported ring order, closest-cell table and ring-to-LOD mapping reproduce every captured LC/SC sequence at both cathedral poses with zero mismatches (LOD cell ids are `x*8+y+1` in LOD coordinates). Chunk 2 finding: retail gates the landscape flush, stamp advance, Z clear and exit seals on `outside_view.view_count > 0` (`PView::DrawCells` 0x005a4840) and the Z clear additionally on the persistent seal counter `D3DPolyRender::portalsDrawnCount` (fed by exit seals alone in the building path) — acdream's unconditional clear/seals and the `_skyDrawnThisFrame` proxy are the divergence chunk 2 retires | `s3-walk-ownership-map.md` (retail table, current owners, four chunks, review lenses, gate, the three exact captures to ask for) + built-mesh/world contracts | — | — | — | folded into G3 | CHUNK 1 IMPLEMENTED `079483bb6` (worktree `s3-chunk1-impl`: the print-only `ACDREAM_DUMP_WALK_TRANSCRIPT` emitter, EC/OC parsing + parts/alpha-depth readers, the five OH captures as fixtures, the four kit poses in the still-frame conformance harness — the foundry-deep row exposed that its exit chain reaches 12 real buildings the FW0 stub landscape never had, fixed with the full DAT-built world; hermetic 6,814/6,814; InstalledDat 245/1 skip/3 known); its three-lens review FAILED on real findings → FIX ROUND 1 in progress (§11.5 G1–G10): a vacuous flag-off pin (one frame + a parser that drops the open frame), LC/SC LOD-id arithmetic outside the flag, no flag-on LC/SC/BLD round trip, and — the transcript gate's first two real catches — `SC` printed AFTER `BLD` (retail's `DrawSortCell` entry precedes `DrawBuilding`, which it calls) and the trailing outdoor `OC ` that is retail's weather pass (`GameSky::Draw` 0x00506ff0 → `DrawObjCellForDummies(after_sky_cell)` 0x005070da); every new pin now carries a mutation check. CHUNK 3 LANDED 2026-09-03 (`4ee2866a` implementer + `651badc2` fix round 1 + `e10765aa` review follow-ups). SELF-GATE `logs/selfgate-20260903-100043-s3-chunk3` at `e10765aa`: the Holtburg terrain-punch fragments are GONE at the owner's pose (`04-holtburg-terrain-leak.png`, clean hill) with NO depth-function change — the §9 R4 order-only hypothesis holds; cathedral / Facility / house structurally unchanged (diffs 10.5% / 0.9% / 7.0% vs the chunk-2 run = dawn-vs-night lighting + actors; the cathedral's upper opening shows sky in both runs; Facility wall-panel mean (79,20,25)); zero exceptions. Re-review after fix round 1: three Opus lenses PASS (remaining minor/notes fixed in `e10765aa`: enum doc, alpha-mark comment, pending-batch clears, try/finally around the terrain-frame completion, particle doc order, the outdoor pin now observes a cell turn). Gates at `e10765aa`: App hermetic 6,795/6,795; focused 335/1 skip; InstalledDat 241/1 skip/3 known; Core Vfx 109/109. PERF GATE FAILED at `e10765aa` (soak `logs/connected-r6-soak-20260903-100400` vs the S2-final `…-010403`, same runner, both Uncapped=false): CPU p50 31.2 ms flat at every outdoor destination (baseline 2.0–15.5), FPS 32 (baseline 51–452), GPU p50 2–4× — ~500 terrain submissions/frame because a StreamMark after nearly every land cell (scenery statics) splits the batch. FIX ROUND 2 (§9.7, the last allowed): an opaque ordered-stream flush is not a terrain flush point (opaque-vs-opaque is depth-resolved; only punches, alpha drains, clear/seals, sky, shells and emitting particle turns split), with a punch-order pin and the soak re-run as the gate. ROUND 2 LANDED (`896c63fe` fixer + `74ac7aa2` lead follow-up): the StreamMark arm no longer flushes the terrain batch (pipeline-state citation: the ordered stream is opaque-only, `GpuBlendMode.None`, depth test+write — `WalkStaticStreamPopulator.cs:179`, `WbDrawDispatcher.OrderedStream.cs:569-571`, `WbDrawDispatcher.Rhi.cs:240/245/343`); three lenses: driver PASS, order and build FAIL on ONE finding — the re-expressed StreamMark pin was vacuous (an empty landscape view admitted no statics, so no StreamMark fired) — fixed by the lead in `74ac7aa2` (real full-viewport view + trace: two FLUSH lines precede the merged three-cell batch); hermetic 6,796/6,796 at `74ac7aa2`. GATE PASSED 2026-09-03: (a) four-pose self-gate `logs/selfgate-20260903-104516-s3-chunk3-r2` at `74ac7aa2` — the Holtburg fragments still gone in full daylight, cathedral/Facility/house 2.3% / 1.3% / 1.9% px vs the chunk-3 run (actors + weather), wall-panel mean (79,20,25), zero exceptions; (b) PERF: the first two soaks (`…-100400` at `e10765aa`, `…-104718` at `674fa8e8`) read a flat CPU p50 31.2 ms / 32 FPS at EVERY destination — an ENVIRONMENT signature, not a workload one: the S2 baseline soak (`…-010403`) ran at 01:04 on the console (only the AMD adapters listed) while today's ran under the owner's RDP session (`query session` → `rdp-tcp#0 Active`; `VideoControllers` gained a Microsoft Remote Display Adapter), whose presentation cadence caps every frame at ~31 ms. Honest A/B: the S2-final binary (`78068b2c`, worktree `.claude/worktrees/s2-final-ab`, kept for future same-session baselines) soaked under the SAME RDP session (`s2-final-ab/logs/connected-r6-soak-20260903-105827`) reads the identical 31.2 ms / 32 FPS everywhere; GPU p50 S2-final vs chunk-3 round 2: Caul 10.6→7.7, Sawato 0.6→0.6, Rynthid 1.7→2.0, Aerlinthe 2.4→3.1, Holtburg 3.8→4.4, Caul return 9.8→12.0, Caul plateau 9.5→8.6 — every destination within the §9.7 gate (≤1.3× +0.5 ms); round 2's batching cut Caul's GPU from round 1's 12.9 to 7.7. CHUNK 3 CLOSED (implementer `4ee2866a`, fix round 1 `651badc2`+`e10765aa`, fix round 2 `896c63fe`+`74ac7aa2`; two fix rounds used, the plan's maximum). Lesson filed: [[feedback_soak_numbers_need_same_session_type]]. History — chunk 3 fix round 1 (worktree `s3-chunk3-impl`: implementer commit `671eb3ad`; the three-lens review found three BLOCKING defects — terrain slot map keyed `0xXXYYFFFF` vs the walk's `0xXXYY0000` (no terrain drawn at all), adjacent-same-landblock batching that can never merge because retail's own sort turn interposes a particle event after every land cell (~530 terrain submissions/frame), and the timing diagnostic moved inside the per-batch loop — plus the deleted `TERRAIN:0` pins, an inverted mechanism comment, a vacuous T2 assertion and a stale oh1 row; all lead-verified real; §9.6 is the fix contract: normalized slot key, ONE pending terrain batch across landblocks flushed only before a submitting leaf with empty particle turns kept open (order-identical by construction), one timing sample per frame, LandCell driver pins). Round 1 of the two the plan allows. After it: chunk 1 (§11), chunk 4 (§10), the S3 review round (§5) | | S4 Depth + alpha | PLANNED — the Holtburg terrain-punch finding carried from G2 may close in S3 chunk 3 by draw ORDER alone (retail draws every nearer land cell's terrain AFTER a farther building's far-Z punch; acdream draws all terrain first — `s3-walk-ownership-map.md` §9 R4); S4 re-reads its "exact z-func" question only if the Holtburg self-gate still shows the fragments after chunk 3 | depth/alpha contracts + captures | — | — | — | G3 | retires AP-34 | | S5 Consumers + closeout | PLANNED | landscape contract; AP-232 | — | — | — | G4 | retires AP-117/AP-232; deletes probes | @@ -672,7 +672,7 @@ Update immediately when a slice changes state. Chat is not the ledger. | 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) | | 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` | G3 | revert newest-first `434a7df2` → `be9b4c1f` (the counter, the leaf split and the flag deletion go together) | +| S3 | chunk 2: `be9b4c1f`, `2f5373c7`, `434a7df2`; chunk 3: `4ee2866a`, `651badc2`, `e10765aa`, `896c63fe`, `74ac7aa2` | 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 | fill | | S5 | — | G4 | fill |