From 36866ba663b11416ac36256e71c38f5e1bdfc620 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 3 Sep 2026 21:26:58 +0200 Subject: [PATCH] docs(issues): #464 running reproduction (camera outside the stairwell at movement start); file #467 run-in-place at the corridor mouth The held-forward route captured the owner's running symptom: the first frame after the press has the chase camera above and outside the stairwell, the next is clean. Same defect as the zoom-out. The runs also showed the character running in place at one corridor spot for 5+ s (#467, movement, outside the campaign). Co-Authored-By: Claude Fable 5.1 --- docs/ISSUES.md | 12 ++++++++++++ .../2026-09-01-campaign-overhaul-world-solidity.md | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 294b895b..81b94dab 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -39,6 +39,16 @@ confirmed closed by the owner, 11 need a focused live gate, and 43 are safe to remain closed. See [`docs/research/2026-08-28-owner-closed-issue-validity-audit.md`](research/2026-08-28-owner-closed-issue-validity-audit.md). +## #467 — Running forward from the cathedral stairwell stops at the corridor mouth: the character runs in place + +**Status:** OPEN — found 2026-09-03 21:19 by the lead's #464 running reproduction (Release `590fbb66c`, local ACE, GM character with run skill 15230). Not a Campaign OVERHAUL v2 item (movement/collision, not world solidity); tactical, own fix. +**Severity:** MEDIUM (a held forward key stops moving the character at a specific spot; unknown how common the spot class is) +**Component:** local movement/collision — the player mover's swept-sphere step (`PlayerMovementController`, the flat collision port) or the held-key motion state after a cell change + +**Symptom:** holding MovementForward from `F4180113 [39.50 19.59 181.12]` (and from `[39.36 21.29 179.77]`), the character descends two flights, passes the central pointed arch into the narrow corridor, and then stays at the same corridor spot with the run animation cycling for the remaining 5.4 s of the hold (`logs/selfgate-20260903-211930-464-run/artifacts/screenshots/464-run-03..10.png`, frames 0.77 s apart, identical world and camera, changing run pose) and again at the same spot on the second run (`464-run-24..27-stopped.png`). The corridor floor is open for roughly ten metres ahead to the arched doorway. The client log carries no position, cell or collision line for the hold (no probe was on) and no server correction line. + +**Unknowns:** whether this is a collision stop (a step the mover cannot climb, a portal polygon treated as solid, sliding into the corridor's side walls at this character's very high run speed), a motion-state fault (the held key no longer producing forward motion after the cell change, with the run animation still playing), or an ACE-side correction. **First checks, in order:** (1) repeat the run with the explicit collision diagnostics on (`ACDREAM_PROBE_*`, see `docs/launch-options.md`) and a position line per frame; (2) compare the MoveToState cadence before and after the arch; (3) the owner runs the same line in retail and in acdream by hand (a normal run skill) to see whether the spot stops them too. + ## #466 — Ravenous Eater (`/create 35121`) renders with stretched stripes and flat, untextured patches over half its body **Status:** OPEN — owner-reported 2026-09-03 night (Release at `ea76a3803`, local ACE, GM `/create 35121` in the cathedral). Not a Campaign OVERHAUL v2 item (creature appearance, not world solidity); tactical, own fix. @@ -78,6 +88,8 @@ remain closed. See **Matrix:** row added to the campaign plan §10 ("Cathedral stairwell, camera zoomed out") with the invariant; a read-only investigation against the decomp is running (mechanism, differences from retail's sweep, root cause, retail-faithful fix). Not an S4 depth/alpha item; it is the camera-versus-cell rule, and it blocks G3. +**Moving reproduction (lead, 2026-09-03 21:19, Release `590fbb66c`, `logs/selfgate-20260903-211930-464-run/`, route `tools/overhaul-selfgate/route-464-run.txt`):** from the mid pose `F4180113 [39.36 21.29 179.77]` at rest the frame is the enclosed stairwell (`464-run-21.png`); 0.75 s after MovementForward is pressed, `464-run-22.png` shows the chase camera several metres above and behind the stairwell, outside the cell: a dark exterior slab fills the lower half of the frame, the balcony wall and the vaulted hall are drawn beyond it, and only the character's head shows above the slab; 0.78 s later (`464-run-23.png`) the camera is back inside and the frame is clean. So the owner's "running down the stairs" symptom is this defect: the chase camera transiently occupies a position outside the stairwell when it starts to follow, and the frame roots from there. From the top pose the moving frames (`464-run-01..03`) stay consistent. The frames are 0.77 s apart (the screenshot readback costs about 0.6 s), so the transient's true duration is unknown (at most about 1.5 s). + ## #463 — Soak `turn` samples can report a 0.1 ms GPU p50 (the turn window catches non-world frames) **Status:** OPEN — found 2026-09-03 by the Campaign OVERHAUL v2 S3 review's perf re-measure. 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 105227e5..0e04fb48 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -661,7 +661,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 4 IMPLEMENTED `6ba4b0b8` (cherry-picked `62c2231d`): the per-slice weather loop, the dead clip routing, the slot-list classifier shape, six cathedral probes + rows, equivalence pins for the kept seal/punch clips, and chunk 1's O1–O4 (the weather `OC` printed at Collect time with real pins); review: retail lens PASS, build/renderer lenses FAIL on the once-per-frame weather pin (counts calls, so a loop still passes) plus leftovers → FIX ROUND 1 (§10.4 K1–K8, incl. K4: the sky drawn once unclipped like terrain/weather) = `d60ca4ea0`, FAILED all three lenses 2026-09-03: BLOCKING (all three) the draw-side weather gate is unpinned — restoring the round-0 gate `clipAssembly.OutsideViewSlices.Length != 0` leaves every lane green, and the transcript test's doc falsely claims to be the draw-side pin; MAJOR: K4 kept `BeginScissor/EndScissor`/`NdcScissorRect` on the false comment 'ClearInteriorDepth still ends an active scissor' (zero producers remain); `sky.vert:88-102` still says retail clips the sky and cites the deleted `SetTerrainClip`; the K6 pin runs through `ClipFrameAssembler.Assemble` (zero production callers; the slice construction is duplicated at :394/:533); MINOR: K3 replaced one per-frame publish with a 144-byte zeroed ring allocation per terrain flush + per sky draw, kept dead `_terrainBytes` state for an unfailable pin, left `ClipFrame.cs:140` naming the deleted method, left `Issue130DoorwayStripTests` pinning the deleted scissor, no `DrawWalkSky` loop-shape pin, and the commit message deferred the mutation texts. → FIX ROUND 2 (§10.5 L1–L9, the LAST allowed: pin the gate's CONDITION in IL with three mutations; delete the scissor stack and the dead TerrainClip UBO from the three shaders with recompiled SPIR-V; one shared outside-view slice constructor for the K6 pin; #130 test cut to what production reads; sky loop-shape pin; every mutation text inline) contract `65675e77a`; the fixer landed round 2 as `2e3ae95ff` in `s3-chunk4-impl` (hermetic 6,827/6,827; InstalledDat 244/1/4 known; five mutation checks inline; lead-verified: the 570-line `WorldScenePassExecutor.cs` diff is a CRLF→LF normalization around two deleted `BindTerrainClip()` calls, and Vulkan legality rests on `VulkanFrameBindings` seeding every declared uniform binding with the dummy range). LEAD SELF-GATE of round 2 (Release at `2e3ae95ff`, `logs/selfgate-20260903-153812-s3-chunk4-r2-validation` under the chunk-4 worktree, Khronos validation layer forced through the loader): 00-login / 01-cathedral-stairs / 02-facility-stairs / 03-holtburg-house / 04-holtburg-terrain-leak all PASS provisional — vs the chunk-3 r2 baseline the cathedral, facility and house frames differ only at actors and the player (4.4 / 1.7 / 4.5 %), the hill frame differs 80 % from a five-hour daylight shift with the terrain-punch fragments still gone and no sky through interior walls at the house pose; validation: ONE error (`VUID-VkShaderModuleCreateInfo-pCode-08740`, five fragment shaders declare `DemoteToHelperInvocation` without the feature — pre-existing, the SPIR-V set is identical on the tip; filed #459) and ten pre-existing 'vertex attribute at location 1 not consumed' perf warnings; nothing from round 2. A SAME-TIME tip baseline (`logs/selfgate-20260903-154036-tip-validation-baseline`, two minutes later, same validation set: 2 errors / 10 perf warnings) tightens the diff to 1.2 / 3.3 / 1.3 / 15 % with the hill's 15 % confined to the drifting sky band and the player — terrain, trees and houses identical. Three-lens re-review: FIVE attempts (Opus, then the session model, parallel then sequential) killed by API overload (529) at zero tokens over ~90 minutes. LEAD VERIFICATION instead (recorded here so the owner can audit it): L1 pin read + M1 re-performed by hand (fails `Expected: typeof(WalkFrameDriver) / Actual: typeof(ClipFrameAssembly)`, passes restored); L4 one `AppendOutsideSlice` helper called from both `Assemble` and `ReassembleOutsideViewFromWalk`, the pin drives `BeginWalkFrame` + `ReassembleOutsideViewFromWalk`; L2 zero `BeginScissor/EndScissor/NdcScissorRect` hits, the pass encoder sets the full scissor at pass begin (`VulkanGpuPassEncoder.cs:87`) and nothing narrows it; L3 `VulkanFrameBindings` seeds every declared uniform binding with the dummy range (`VulkanFrameBindings.cs:128-130`), binding 2 now bound by the portal-depth clip only, the 34 shader tests (descriptor contract / manifest / SPIR-V validator / sky layout) pass; L5/L6/L7 comments truthful (sky.vert:88-99, both terrain shaders, `Issue130DoorwayStripTests` cut to the plane half the punch fans consume); L8 pin present; lanes reproduced (hermetic 6,827/6,827; InstalledDat 244/1/4 known); the `TerrainClipMode` enum stays for `WorldSceneRenderer`'s flat-path flag (documented). **CHUNK 4 LANDED** on the campaign branch as `ff607a1e0` (round 1) + `7df0b94c9` (round 2); the three independent lenses run POST-HOC as soon as subagent capacity returns and BEFORE the S3 review is dispatched — a blocking post-hoc finding becomes an S3-review item, not a third chunk round. **POST-HOC LENSES RAN 2026-09-03 16:59–17:16 (after six overload kills): ALL THREE PASS** on `2e3ae95ff` — production-path safety, retail faithfulness + pin non-vacuity, build/test truth (the third lens re-performed M1 by hand and re-ran every lane). Findings are documentation/dead-state hygiene, itemized in the S3 packet §10.6: AD-17's scissor text (already rewritten on the branch at `5b43d8d55`; its particle clause corrected — the walk feeds parts and particles the whole-mesh slot), the #130 harness header claiming two zero-caller stages, `ClipPlaneSet`'s scissor-era members/docs, dead terrain-clip parameters on `TerrainModernRenderer.Draw` and `PrepareClipFrame`, several stale sentences, and a pin limit (the L1 condition pin accepts a conjoined gate). Dispatched as the landing-hygiene chunk H (one Sonnet agent in `s3-hygiene` at `6435655d7`, one lens, no third round). **CHUNK H LANDED** as `99d9c6d56` (cherry-pick of `faf964155`): `ClipPlaneSet` loses `ScissorNdcAabb`, `UseScissorFallback` → `IsPlaneOverflow`; `TerrainModernRenderer.Draw`/`CollectVisibleCells` frustum-only, `PrepareClipFrame()` parameterless; `TerrainClipMode.Scissor` deleted; the #130 harness deleted (its two driven paths have zero production callers; `ClipPlaneSet.From` stays pinned through the K6 producers); the H5 pin rejects a conjoined weather gate (mutation text inline). Lens: FAIL on ONE blocking item — the EnableClipDistances doc sentence §10.6 itself prescribed ('only portal_depth.vert writes gl_ClipDistance') is false (five mesh/particle shaders still write it from the per-cell region table; dormant in the walk, live in the flat path) — plus one stale `AppendSlot` doc. Both are the lead's own wording errors, corrected by the lead in `d0c981212` (no third round needed: no code changed). Lanes at the tip: hermetic 6,825/6,825; InstalledDat 243/1/4 known (one fewer test after H3). **S3 REVIEW (two Opus lenses, `51d532320..e6f5a156b`, 2026-09-03 18:27–18:45): BOTH FAIL.** Retail lens BLOCKING: the punch fan indexes `OutsideViewSlices` by the walk's `ActiveViewIndex`, but `ReassembleOutsideViewFromWalk` appends nothing for a collapsed view polygon, so the slice array can be shorter than the view list — a fan can take the NEXT view's planes or (`: default`) draw UNCLIPPED (retail clips each fan under its own pinned `building_view`); major: the exit-seal equivalence pin drives `ClipFrame.AppendSlot(ClipPlaneSet)`, which has zero production callers (production = `WalkFrameDriver.AppendClipSlot`); minor: the false 'KEEP clips bracket their draws with Enable/DisableClipDistances' comment; notes: EC printed per cell where retail's breakpoint fires per (cell × view); the conformance Recorder drops the weather OC on both sides; the weather gate reads the player cell while the print carries the viewer cell (open question). Shader/perf lens BLOCKING on EVIDENCE: the chunk-3 perf gate was recorded PASS on the `turn` phase only — the same two report files' `stationary` phase has **Aerlinthe 4.00→5.80 ms GPU p50 (1.45×, +1.8 ms; p95 4.20→6.00)**, outside the ≤1.3× gate, and two destinations (Sawato revisit/plateau) were omitted (complete table: Caul 9.8→9.9 / Sawato 0.7→0.8 / Rynthid 1.5→1.9 (1.27×) / Aerlinthe 4.0→5.8 / Sawato revisit 0.7→0.7 / Holtburg 4.3→5.3 (1.23×) / Caul return 9.5→10.1 / Sawato plateau 0.7→0.7 / Caul plateau 9.6→10.7, stationary GPU p50 ms, S2-final → chunk-3 r2); major: `WbDrawDispatcher.SetClipRouting` has zero callers, so the per-cell clip-region table can NEVER be armed in ANY path — five mesh/particle pipelines write eight always-passing `gl_ClipDistance`s per vertex for nothing (§10.6's 'live for the flat path' was wrong); minors: two order-preserving batch reductions available (skip the terrain flush when the alpha queue is empty; coalesce per-cell runs into fewer indirect commands — the indirect command count rose ~4.5× at terrace-edge) → S5 perf chunk. **Chunk 3's status is corrected to STOPPED-LANDED with an open perf item** (the lead's PASS was an evidence error: turn phase only). FIX ROUND 1 contract §12 (F1–F5; E1 = the lead re-measures the current tip vs S2-final in the same session) dispatched `s3-review-fix1.js` in `s3-review-fix`. **E1 RE-MEASURED 2026-09-03 18:50–19:07 (same session, back to back, `logs/connected-r6-soak-20260903-185034.report.json` = tip `a614c8fd4` vs `.claude/worktrees/s2-final-ab/logs/connected-r6-soak-20260903-185904.report.json` = S2-final `78068b2c`; both RESULT=PASS):** STATIONARY GPU p50 ms baseline→tip: Caul 5.8→6.0 (1.03×), Sawato 0.4→0.3, Rynthid 0.9→1.0 (1.11×), **Aerlinthe 2.1→2.4 (1.14×)**, Sawato revisit 0.4→0.4, Holtburg 2.5→2.6 (1.04×), Caul return 5.7→5.9 (1.04×), Sawato plateau 0.4→0.4, Caul plateau 5.8→6.4 (1.10×) — every destination inside the §9.7 gate. The morning's Aerlinthe 1.45× does not reproduce (every morning value was ~2× these — the RDP session). TURN phase: the baseline's p50 reads 0.1 ms at Caul, Holtburg and Caul plateau (a turn window catching non-world frames — p95s 10.5/10.8, 3.0/2.8, 8.0/8.1 are within 7 %), so the 23× and 43× 'ratios' there are the soak tool's artifact, filed #463; the remaining turn rows are 0.75–1.25×. **Chunk 3 returns to CLOSED** on this complete, same-session evidence; the shader lens's two order-preserving reductions stay S5 perf candidates. **S3 REVIEW FIX ROUND 1 = `6575cfcee` (Sonnet), BOTH LENSES PASS (retail 20:00, production 20:15):** F1 one index-aligned slice per walk view (a collapsed polygon = a nothing-visible slice; the punch leaf draws nothing for it and throws on an out-of-range index — never unclipped); F2 the seal pin drives `CaptureViews`/`AppendClipSlot` and reads back through `InteriorFloodViewClipPlanesAt`, plus both >8-vertex overflow cases (seal: four AABB planes; punch: zero planes, unclipped); F3 the false bracket comment gone with the six no-op calls; F4a `EC` printed once per live view; F4b the Recorder carries the weather `OC` and the oracle keeps it (the replay context gained the `is_player_outside` gate so terrace-edge still reproduces); F5 the per-cell clip routing and the five shaders' `clipRegions` fetch + `gl_ClipDistance` loops DELETED (recompiled, three retail-oracle hashes re-pinned), the `ACDREAM_CLIP_DEBUG` probe and a 12-test file pinning the deleted policy gone; six mutation texts inline. Lenses' leftovers, closed by the lead in the landing: AD-23 RETIRED (it described the deleted culling), AD-17 corrected (deleted, not dormant; residue = the vertex-layout slot inputs fed 0 and the CPU-side `ClipRegions` byte-pack/publish with no GPU reader → S5 cleanup inventory), the `ProbeClipRouteEnabled` doc, the per-view `EC` loop guarded at its call site, and the conformance harness's known limit (replay derives one `EC` per cell; no fixture holds a two-view flood cell → S5). One admission reading in the retail direction: the ownerless-outdoor-emitter gate now tracks `outside_view.view_count > 0` like retail rather than the surviving-polygon count. LANDED as `89c4494d0` + closeout `ea76a3803`. **S3 CLOSED** (chunks 2/3/4 closed, chunk 1 stopped-landed with #458 resolved as precision, hygiene H, review round 1); the lead's validation self-gate at the closeout tip follows in this row. **S3-CLOSED VALIDATION SELF-GATE (Release at `6385f4411` = code `ea76a3803`, `logs/selfgate-20260903-201825-s3-closed-validation`, Khronos validation layer on):** ZERO validation errors (only the ten pre-existing unconsumed-attribute perf warnings of #459's note); graceful logout; vs the same-day tip baseline (`selfgate-20260903-154036`, five hours earlier): 01-cathedral-stairs 1.3 %, 02-facility-stairs 3.3 %, 03-holtburg-house 0.3 %, 04-holtburg-terrain-leak 18.4 % — the hill's difference is the sky band and the tree line against it after five hours of daylight plus the player (terrain, houses and hills black in the diff), the other three are actors and the player only. All four PASS provisional; the five mesh/particle shaders that lost their clip loops draw pixel-identically where the daylight allows the comparison. **OWNER DOUBLE-CHECK 2026-09-03 night (interactive client at `ea76a3803`, launched for the owner):** every pose PASS except the cathedral: at `0xF4180113 [39.502899 19.589222 181.119247]` (and within a metre) the camera zoomed fully out and tilted up shows the vaulted hall, an archway with sky, a balcony and floating stair slabs through the stairwell walls; retail at the same pose keeps the eye under the stairwell ceiling with solid walls (owner's retail screenshot). Classified as the camera-versus-cell rule, NOT depth/alpha: the eye leaves the cell where retail's swept viewer sphere stops it, and the frame roots from outside. Filed #464, matrix row added (§10), read-only investigation dispatched against `SmartBox::update_viewer` @0x00453ce0 / `CTransition::find_valid_position`; it blocks G3 (zoom is a named pass criterion) and is scheduled ahead of S4 chunk 2. The S3-state G3 pre-run's cathedral rows are therefore PROVISIONAL-FAIL for the zoomed camera and PASS for the standing camera. The owner also reports problems when merely RUNNING down those stairs (symptom not yet described). Lead reproduction attempt 2026-09-03 21:14 (`logs/selfgate-20260903-211420-464-stairs`, code `ea76a3803`): a nine-step teleport ladder down the exact stair line (top `F4180113 [39.50 19.59 181.12]` → bottom `F4180112 [39.07 22.55 178.78]`, facing +y, chase camera at rest) plus the G2 stairs pose — every standing frame is structurally consistent step to step (stairwell walls, the left ledge over the lower pit, the hall's arch and sky beyond), no popping walls, no floating slabs, no wall-textured triangles; the standing frames do not reproduce the running symptom, so it is motion-bound (the camera in motion, or a membership flip between frames) and needs either the owner's description/mid-run screenshot or a retail walk capture at the top pose. Side observation: the 'In Portal Space - Please Wait…' caption is still drawn 4.5 s after world-visible in every ladder frame (the G3 frames with a 6 s settle never show it) — the caption's post-arrival lifetime vs retail's is unverified; noted, not filed. Open S5 items from S3: the weather gate/print cell question (one retail capture), the replay-side per-view `EC`, the `ClipRegions` residue, the two perf reductions, #460–#463. Register: AD-17 rewritten and AP-117 narrowed in the landing docs commit (the scissor fallback they described no longer exists). **G3 SELF-GATE part A (lead, 2026-09-03 16:20, Release at `5b43d8d55` = code `7df0b94c9`, `logs/selfgate-20260903-162027-g3/artifacts/screenshots/`, Khronos validation layer on — same two pre-existing #459 errors, nothing new):** 00-login PASS; 01-cathedral-stairs PASS (retail's own exterior slab reproduced, nothing extra); 02-facility-stairs PASS; 03-holtburg-house PASS (no sky through walls); 04-holtburg-terrain-leak PASS (no house fragments through the hill); 05-cathedral-south-0106 PASS and 06-cathedral-south-0104 PASS (player and walls whole, no depth inversion at the transition); 07-cathedral-stairs-0107 PASS and 08-cathedral-stairs-0112 PASS (every slab stable, no wall-textured triangles); 09-cathedral-terrace-edge PASS (the #456 pose: terrace, arches and the lit lantern whole, no panel loss); 10-facility-015E PASS and 11-facility-015F PASS (stairs, pillars and the drudge stable). 12-nanto-falls INCOMPLETE: the reveal for `0xE43D001E` outran the route's 90 s wait (probe timeout at `client.log:709`, readiness at `:714`, world-visible at `:718`), the probe aborted before its `close-client`, and the client then ignored two external close requests (filed #460); re-run as part C with a 300 s wait. NOT COVERED by the self-gate (owner items): the cathedral wall actor (two clients), the exterior ramp (no coordinates in the matrix), Tusker Island, the Holtburg town route beyond poses 03/04, and the two ordinary dungeons (unnamed). All verdicts PROVISIONAL until the owner looks. **G3 SELF-GATE part B (lead, 2026-09-03 16:56, the four retail capture poses as PLAYER poses — each walk log's frame-2 `P` line is the camera eye, so the player lands on the floor below it with the camera's yaw; `logs/selfgate-20260903-165634-g3b/artifacts/screenshots/`, validation on, same #459 error only, graceful logout confirmed):** 13-capture-terrace-edge PASS (cathedral exterior wall and grass whole); 14-capture-cathedral-arrival PASS (lit lantern, walls whole, retail's own exterior slab at the lower left — the axiom, nothing extra); 15-capture-holtburg-doorway PASS (the player lands outside the house: house, door, NPC, hills and water whole); 16-capture-foundry-deep PASS (walls and the portal glow whole). PROVISIONAL. **G3 SELF-GATE part C (lead, 2026-09-03 17:04, Nanto with a 300 s readiness wait, three headings; `logs/selfgate-20260903-170456-g3c/artifacts/screenshots/`, validation on, same #459 error only, graceful logout confirmed):** 12-nanto-falls PASS (hut, torches and the falls' spray at the left edge whole); 12b-nanto-falls-east PASS (the falls visible behind the pier, torches and rocks — the houses occlude, the falls persist); 12c-nanto-falls-west PASS (pagoda, trees and hills whole). The matrix invariant is sampled at three static headings, not a continuous rotation — the owner's spin is still the real test. Part C's FIRST attempt (`selfgate-20260903-165745-g3c`) never left portal space: the Login reveal into the foundry stalled `ready=True materialized=False` for 180 s (#462, intermittent — the next two logins into the same cell materialized), the aborted script requested a graceful logout, and a late local-player motion update then crashed the client on the retired movement controller (#461, exit `0xE0434352`). **G3 self-gate summary:** 20 of 20 captured frames PASS provisional (poses 00–16 plus the two extra Nanto headings); three matrix rows remain owner-only (wall actor, exterior ramp, Tusker) and the ordinary-dungeon row is unnamed; three lifecycle defects filed from the run (#460, #461, #462) and one validation defect (#459). **#459 FIXED** the same evening (`e33fd2472`, lead — a one-feature enable in the existing Vulkan 1.3 chain plus the required-feature gate): the four-pose validation launch at that commit (`logs/selfgate-20260903-171009-fix459-validation`, `logs/vk-validation-459.log`) reports ZERO validation errors; ten pre-existing unconsumed-vertex-attribute perf warnings remain (noted in #459). The validation layer is now a clean signal for every later gate. S4 packet DRAFT written (`s4-depth-alpha-packet.md`): S3 chunk 2 already delivered S4's chunk-1 latch/gate/seal scope; S4's body is the two-list alpha cutover. **#458 RESOLVED 2026-09-03** (`37e42aafc`, register AD-118): two live cdb captures at the Holtburg doorway (`oh-capture-blockset` / `oh-capture-blockcheck` templates) show retail tests `a9c9` twice a frame and that acdream's replay at the same P pose reproduces the interval sentinels, the four edge planes and both verdicts — the fixture's extra `LC:a9c9` is a 0.5 % edge-plane precision boundary (one far block, one corner, one plane; retail's clip heights 300.4/310.2 m vs ours 298.8/308.5 m), not a walk defect; the KnownFailure row stays as the standing example; the tip with chunk 4 cherry-picked (`62c2231d`, docs `386b1327`) is green: hermetic 6,829/6,829, InstalledDat 244/1 skip/4 known, zero `PROBE_CATHEDRAL` rows. Prior: CHUNK 4 DISPATCHED (worktree `s3-chunk4-impl` at `38cedde0`, §10 + chunk 1's carried O1–O4 on the weather path); then the S3 review round (§5; script ready) and the G3 self-gate over the §10 matrix + the four capture poses + a rainy interior pose. 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. ROUND 1 LANDED (`02a82881` chunk + `be81475c` round 1; four mutation checks documented) — MILESTONE: at the eight-kind level (LS/LC/SC/BLD/DI/DC/EC/OC) the walk reproduces retail's transcript EXACTLY for three of the four kit poses (terrace-edge, cathedral-arrival, foundry-deep); the fourth, holtburg-doorway-still frame 2, diverges at token 165: acdream admits land block `a9c9` (`LC/SC a9c90001`) that retail does not draw at that position — a `WalkLandscape.CheckBlocks` block-visibility question at a LOD-ring boundary, filed as #458 and tagged `Status=KnownFailure` on its conformance row (the InstalledDat lane therefore shows FOUR known failures until #458 is resolved; it is an OPEN S3 item for the review round, not a chunk-1 defect). The re-review (three lenses) FAILED on: the weather `OC` printed per outside-view SLICE inside `DrawLandscapeSliceLate` (2–4 lines for an interior root with the player outside; retail prints one) with the viewer cell instead of the after-sky land cell and NO pin/mutation check; G9's second comment site untouched; the oracle side's EC/OC derived from DC lists (non-discriminating — retail's literal EC/OC lines must be compared); the unconditional `OnSortCellTurn` validation ahead of the flag read; the launch-options volume figure (measured ≈1,200–1,400 lines/outdoor frame). → FIX ROUND 2 (§11.6) LANDED `88c70072` (fixer `ea4da8c7`): H2–H6 closed with two documented mutation checks (the literal EC/OC comparison now fails on a reversed derivation at cathedral-arrival token 1241); H1's production change is retail-faithful and STAYS (the weather mesh is drawn ONCE, unclipped, after the landscape — `GameSky::Draw(sky,1)` 0x00506ff0 / 0x005070da — instead of N scissored per-doorway draws; the ledger notes it here because no capture/visual gate has looked at rain since; the G3 self-gate adds a rainy interior pose). The re-review (three lenses) still FAILS H1's PIN: the IL-offset order check cannot fail when `DrawWeatherOnce` is moved back inside the slice loop (the reviewers reproduced the round-1 regression with the suite green), nothing pins the OC's cell argument (`ViewerCellId` vs `PlayerCellId`), and for an INTERIOR root the weather `OC` prints at the frame's end (the Replay-time LandscapeFlush leaf) where retail prints it between the landscape and the flood — plus a dead `EnableClipDistances` in `DrawLandscapeSliceLate`. CHUNK 1 STOPS HERE per plan rule §5 (two fix rounds used) and is written up, not forced: the emitter, the parser/readers, the fixtures, the offline diff and the three exactly-reproducing poses are LANDED and useful; OPEN ITEMS carried: O1 a real once-per-frame pin for the weather OC (observe the printed lines through the executor's post-loop call, not IL offsets); O2 pin the OC cell argument = the `P` cell; O3 interior-root OC position (print it at the Collect-time landscape turn's end, i.e. where `LandscapeFlush` is emitted, so the transcript order matches retail's `GameSky::Draw(1)` slot; the DRAW itself stays at Replay); O4 the dead `EnableClipDistances`; O5 #458 (see the degrade note below). O3/O4 fall naturally to chunk 4 (it deletes the per-slice loop and gives the weather draw its single home); O1/O2 are for chunk 4's review or the S3 review round. NOTE on #458 (transcript lens): the FW0 doorway row pins `DegradeMultiplier = 0f` because that capture ran under cdb load with `Render::deg_mul` depressed; the OH doorway capture ALSO ran under cdb (this session) — the extra `a9c9` block may be a degrade-level difference rather than `CheckBlocks`; #458 amended. Lanes at `88c70072`: hermetic 6,823/6,823; InstalledDat 244/1 skip/4 known (2× #383, TowerAscent, #458). 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) | +| 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 4 IMPLEMENTED `6ba4b0b8` (cherry-picked `62c2231d`): the per-slice weather loop, the dead clip routing, the slot-list classifier shape, six cathedral probes + rows, equivalence pins for the kept seal/punch clips, and chunk 1's O1–O4 (the weather `OC` printed at Collect time with real pins); review: retail lens PASS, build/renderer lenses FAIL on the once-per-frame weather pin (counts calls, so a loop still passes) plus leftovers → FIX ROUND 1 (§10.4 K1–K8, incl. K4: the sky drawn once unclipped like terrain/weather) = `d60ca4ea0`, FAILED all three lenses 2026-09-03: BLOCKING (all three) the draw-side weather gate is unpinned — restoring the round-0 gate `clipAssembly.OutsideViewSlices.Length != 0` leaves every lane green, and the transcript test's doc falsely claims to be the draw-side pin; MAJOR: K4 kept `BeginScissor/EndScissor`/`NdcScissorRect` on the false comment 'ClearInteriorDepth still ends an active scissor' (zero producers remain); `sky.vert:88-102` still says retail clips the sky and cites the deleted `SetTerrainClip`; the K6 pin runs through `ClipFrameAssembler.Assemble` (zero production callers; the slice construction is duplicated at :394/:533); MINOR: K3 replaced one per-frame publish with a 144-byte zeroed ring allocation per terrain flush + per sky draw, kept dead `_terrainBytes` state for an unfailable pin, left `ClipFrame.cs:140` naming the deleted method, left `Issue130DoorwayStripTests` pinning the deleted scissor, no `DrawWalkSky` loop-shape pin, and the commit message deferred the mutation texts. → FIX ROUND 2 (§10.5 L1–L9, the LAST allowed: pin the gate's CONDITION in IL with three mutations; delete the scissor stack and the dead TerrainClip UBO from the three shaders with recompiled SPIR-V; one shared outside-view slice constructor for the K6 pin; #130 test cut to what production reads; sky loop-shape pin; every mutation text inline) contract `65675e77a`; the fixer landed round 2 as `2e3ae95ff` in `s3-chunk4-impl` (hermetic 6,827/6,827; InstalledDat 244/1/4 known; five mutation checks inline; lead-verified: the 570-line `WorldScenePassExecutor.cs` diff is a CRLF→LF normalization around two deleted `BindTerrainClip()` calls, and Vulkan legality rests on `VulkanFrameBindings` seeding every declared uniform binding with the dummy range). LEAD SELF-GATE of round 2 (Release at `2e3ae95ff`, `logs/selfgate-20260903-153812-s3-chunk4-r2-validation` under the chunk-4 worktree, Khronos validation layer forced through the loader): 00-login / 01-cathedral-stairs / 02-facility-stairs / 03-holtburg-house / 04-holtburg-terrain-leak all PASS provisional — vs the chunk-3 r2 baseline the cathedral, facility and house frames differ only at actors and the player (4.4 / 1.7 / 4.5 %), the hill frame differs 80 % from a five-hour daylight shift with the terrain-punch fragments still gone and no sky through interior walls at the house pose; validation: ONE error (`VUID-VkShaderModuleCreateInfo-pCode-08740`, five fragment shaders declare `DemoteToHelperInvocation` without the feature — pre-existing, the SPIR-V set is identical on the tip; filed #459) and ten pre-existing 'vertex attribute at location 1 not consumed' perf warnings; nothing from round 2. A SAME-TIME tip baseline (`logs/selfgate-20260903-154036-tip-validation-baseline`, two minutes later, same validation set: 2 errors / 10 perf warnings) tightens the diff to 1.2 / 3.3 / 1.3 / 15 % with the hill's 15 % confined to the drifting sky band and the player — terrain, trees and houses identical. Three-lens re-review: FIVE attempts (Opus, then the session model, parallel then sequential) killed by API overload (529) at zero tokens over ~90 minutes. LEAD VERIFICATION instead (recorded here so the owner can audit it): L1 pin read + M1 re-performed by hand (fails `Expected: typeof(WalkFrameDriver) / Actual: typeof(ClipFrameAssembly)`, passes restored); L4 one `AppendOutsideSlice` helper called from both `Assemble` and `ReassembleOutsideViewFromWalk`, the pin drives `BeginWalkFrame` + `ReassembleOutsideViewFromWalk`; L2 zero `BeginScissor/EndScissor/NdcScissorRect` hits, the pass encoder sets the full scissor at pass begin (`VulkanGpuPassEncoder.cs:87`) and nothing narrows it; L3 `VulkanFrameBindings` seeds every declared uniform binding with the dummy range (`VulkanFrameBindings.cs:128-130`), binding 2 now bound by the portal-depth clip only, the 34 shader tests (descriptor contract / manifest / SPIR-V validator / sky layout) pass; L5/L6/L7 comments truthful (sky.vert:88-99, both terrain shaders, `Issue130DoorwayStripTests` cut to the plane half the punch fans consume); L8 pin present; lanes reproduced (hermetic 6,827/6,827; InstalledDat 244/1/4 known); the `TerrainClipMode` enum stays for `WorldSceneRenderer`'s flat-path flag (documented). **CHUNK 4 LANDED** on the campaign branch as `ff607a1e0` (round 1) + `7df0b94c9` (round 2); the three independent lenses run POST-HOC as soon as subagent capacity returns and BEFORE the S3 review is dispatched — a blocking post-hoc finding becomes an S3-review item, not a third chunk round. **POST-HOC LENSES RAN 2026-09-03 16:59–17:16 (after six overload kills): ALL THREE PASS** on `2e3ae95ff` — production-path safety, retail faithfulness + pin non-vacuity, build/test truth (the third lens re-performed M1 by hand and re-ran every lane). Findings are documentation/dead-state hygiene, itemized in the S3 packet §10.6: AD-17's scissor text (already rewritten on the branch at `5b43d8d55`; its particle clause corrected — the walk feeds parts and particles the whole-mesh slot), the #130 harness header claiming two zero-caller stages, `ClipPlaneSet`'s scissor-era members/docs, dead terrain-clip parameters on `TerrainModernRenderer.Draw` and `PrepareClipFrame`, several stale sentences, and a pin limit (the L1 condition pin accepts a conjoined gate). Dispatched as the landing-hygiene chunk H (one Sonnet agent in `s3-hygiene` at `6435655d7`, one lens, no third round). **CHUNK H LANDED** as `99d9c6d56` (cherry-pick of `faf964155`): `ClipPlaneSet` loses `ScissorNdcAabb`, `UseScissorFallback` → `IsPlaneOverflow`; `TerrainModernRenderer.Draw`/`CollectVisibleCells` frustum-only, `PrepareClipFrame()` parameterless; `TerrainClipMode.Scissor` deleted; the #130 harness deleted (its two driven paths have zero production callers; `ClipPlaneSet.From` stays pinned through the K6 producers); the H5 pin rejects a conjoined weather gate (mutation text inline). Lens: FAIL on ONE blocking item — the EnableClipDistances doc sentence §10.6 itself prescribed ('only portal_depth.vert writes gl_ClipDistance') is false (five mesh/particle shaders still write it from the per-cell region table; dormant in the walk, live in the flat path) — plus one stale `AppendSlot` doc. Both are the lead's own wording errors, corrected by the lead in `d0c981212` (no third round needed: no code changed). Lanes at the tip: hermetic 6,825/6,825; InstalledDat 243/1/4 known (one fewer test after H3). **S3 REVIEW (two Opus lenses, `51d532320..e6f5a156b`, 2026-09-03 18:27–18:45): BOTH FAIL.** Retail lens BLOCKING: the punch fan indexes `OutsideViewSlices` by the walk's `ActiveViewIndex`, but `ReassembleOutsideViewFromWalk` appends nothing for a collapsed view polygon, so the slice array can be shorter than the view list — a fan can take the NEXT view's planes or (`: default`) draw UNCLIPPED (retail clips each fan under its own pinned `building_view`); major: the exit-seal equivalence pin drives `ClipFrame.AppendSlot(ClipPlaneSet)`, which has zero production callers (production = `WalkFrameDriver.AppendClipSlot`); minor: the false 'KEEP clips bracket their draws with Enable/DisableClipDistances' comment; notes: EC printed per cell where retail's breakpoint fires per (cell × view); the conformance Recorder drops the weather OC on both sides; the weather gate reads the player cell while the print carries the viewer cell (open question). Shader/perf lens BLOCKING on EVIDENCE: the chunk-3 perf gate was recorded PASS on the `turn` phase only — the same two report files' `stationary` phase has **Aerlinthe 4.00→5.80 ms GPU p50 (1.45×, +1.8 ms; p95 4.20→6.00)**, outside the ≤1.3× gate, and two destinations (Sawato revisit/plateau) were omitted (complete table: Caul 9.8→9.9 / Sawato 0.7→0.8 / Rynthid 1.5→1.9 (1.27×) / Aerlinthe 4.0→5.8 / Sawato revisit 0.7→0.7 / Holtburg 4.3→5.3 (1.23×) / Caul return 9.5→10.1 / Sawato plateau 0.7→0.7 / Caul plateau 9.6→10.7, stationary GPU p50 ms, S2-final → chunk-3 r2); major: `WbDrawDispatcher.SetClipRouting` has zero callers, so the per-cell clip-region table can NEVER be armed in ANY path — five mesh/particle pipelines write eight always-passing `gl_ClipDistance`s per vertex for nothing (§10.6's 'live for the flat path' was wrong); minors: two order-preserving batch reductions available (skip the terrain flush when the alpha queue is empty; coalesce per-cell runs into fewer indirect commands — the indirect command count rose ~4.5× at terrace-edge) → S5 perf chunk. **Chunk 3's status is corrected to STOPPED-LANDED with an open perf item** (the lead's PASS was an evidence error: turn phase only). FIX ROUND 1 contract §12 (F1–F5; E1 = the lead re-measures the current tip vs S2-final in the same session) dispatched `s3-review-fix1.js` in `s3-review-fix`. **E1 RE-MEASURED 2026-09-03 18:50–19:07 (same session, back to back, `logs/connected-r6-soak-20260903-185034.report.json` = tip `a614c8fd4` vs `.claude/worktrees/s2-final-ab/logs/connected-r6-soak-20260903-185904.report.json` = S2-final `78068b2c`; both RESULT=PASS):** STATIONARY GPU p50 ms baseline→tip: Caul 5.8→6.0 (1.03×), Sawato 0.4→0.3, Rynthid 0.9→1.0 (1.11×), **Aerlinthe 2.1→2.4 (1.14×)**, Sawato revisit 0.4→0.4, Holtburg 2.5→2.6 (1.04×), Caul return 5.7→5.9 (1.04×), Sawato plateau 0.4→0.4, Caul plateau 5.8→6.4 (1.10×) — every destination inside the §9.7 gate. The morning's Aerlinthe 1.45× does not reproduce (every morning value was ~2× these — the RDP session). TURN phase: the baseline's p50 reads 0.1 ms at Caul, Holtburg and Caul plateau (a turn window catching non-world frames — p95s 10.5/10.8, 3.0/2.8, 8.0/8.1 are within 7 %), so the 23× and 43× 'ratios' there are the soak tool's artifact, filed #463; the remaining turn rows are 0.75–1.25×. **Chunk 3 returns to CLOSED** on this complete, same-session evidence; the shader lens's two order-preserving reductions stay S5 perf candidates. **S3 REVIEW FIX ROUND 1 = `6575cfcee` (Sonnet), BOTH LENSES PASS (retail 20:00, production 20:15):** F1 one index-aligned slice per walk view (a collapsed polygon = a nothing-visible slice; the punch leaf draws nothing for it and throws on an out-of-range index — never unclipped); F2 the seal pin drives `CaptureViews`/`AppendClipSlot` and reads back through `InteriorFloodViewClipPlanesAt`, plus both >8-vertex overflow cases (seal: four AABB planes; punch: zero planes, unclipped); F3 the false bracket comment gone with the six no-op calls; F4a `EC` printed once per live view; F4b the Recorder carries the weather `OC` and the oracle keeps it (the replay context gained the `is_player_outside` gate so terrace-edge still reproduces); F5 the per-cell clip routing and the five shaders' `clipRegions` fetch + `gl_ClipDistance` loops DELETED (recompiled, three retail-oracle hashes re-pinned), the `ACDREAM_CLIP_DEBUG` probe and a 12-test file pinning the deleted policy gone; six mutation texts inline. Lenses' leftovers, closed by the lead in the landing: AD-23 RETIRED (it described the deleted culling), AD-17 corrected (deleted, not dormant; residue = the vertex-layout slot inputs fed 0 and the CPU-side `ClipRegions` byte-pack/publish with no GPU reader → S5 cleanup inventory), the `ProbeClipRouteEnabled` doc, the per-view `EC` loop guarded at its call site, and the conformance harness's known limit (replay derives one `EC` per cell; no fixture holds a two-view flood cell → S5). One admission reading in the retail direction: the ownerless-outdoor-emitter gate now tracks `outside_view.view_count > 0` like retail rather than the surviving-polygon count. LANDED as `89c4494d0` + closeout `ea76a3803`. **S3 CLOSED** (chunks 2/3/4 closed, chunk 1 stopped-landed with #458 resolved as precision, hygiene H, review round 1); the lead's validation self-gate at the closeout tip follows in this row. **S3-CLOSED VALIDATION SELF-GATE (Release at `6385f4411` = code `ea76a3803`, `logs/selfgate-20260903-201825-s3-closed-validation`, Khronos validation layer on):** ZERO validation errors (only the ten pre-existing unconsumed-attribute perf warnings of #459's note); graceful logout; vs the same-day tip baseline (`selfgate-20260903-154036`, five hours earlier): 01-cathedral-stairs 1.3 %, 02-facility-stairs 3.3 %, 03-holtburg-house 0.3 %, 04-holtburg-terrain-leak 18.4 % — the hill's difference is the sky band and the tree line against it after five hours of daylight plus the player (terrain, houses and hills black in the diff), the other three are actors and the player only. All four PASS provisional; the five mesh/particle shaders that lost their clip loops draw pixel-identically where the daylight allows the comparison. **OWNER DOUBLE-CHECK 2026-09-03 night (interactive client at `ea76a3803`, launched for the owner):** every pose PASS except the cathedral: at `0xF4180113 [39.502899 19.589222 181.119247]` (and within a metre) the camera zoomed fully out and tilted up shows the vaulted hall, an archway with sky, a balcony and floating stair slabs through the stairwell walls; retail at the same pose keeps the eye under the stairwell ceiling with solid walls (owner's retail screenshot). Classified as the camera-versus-cell rule, NOT depth/alpha: the eye leaves the cell where retail's swept viewer sphere stops it, and the frame roots from outside. Filed #464, matrix row added (§10), read-only investigation dispatched against `SmartBox::update_viewer` @0x00453ce0 / `CTransition::find_valid_position`; it blocks G3 (zoom is a named pass criterion) and is scheduled ahead of S4 chunk 2. The S3-state G3 pre-run's cathedral rows are therefore PROVISIONAL-FAIL for the zoomed camera and PASS for the standing camera. The owner also reports problems when merely RUNNING down those stairs (symptom not yet described). Lead reproduction attempt 2026-09-03 21:14 (`logs/selfgate-20260903-211420-464-stairs`, code `ea76a3803`): a nine-step teleport ladder down the exact stair line (top `F4180113 [39.50 19.59 181.12]` → bottom `F4180112 [39.07 22.55 178.78]`, facing +y, chase camera at rest) plus the G2 stairs pose — every standing frame is structurally consistent step to step (stairwell walls, the left ledge over the lower pit, the hall's arch and sky beyond), no popping walls, no floating slabs, no wall-textured triangles; the standing frames do not reproduce the running symptom, so it is motion-bound (the camera in motion, or a membership flip between frames) and needs either the owner's description/mid-run screenshot or a retail walk capture at the top pose. Side observation: the 'In Portal Space - Please Wait…' caption is still drawn 4.5 s after world-visible in every ladder frame (the G3 frames with a 6 s settle never show it) — the caption's post-arrival lifetime vs retail's is unverified; noted, not filed. Running reproduction 2026-09-03 21:19 (`logs/selfgate-20260903-211930-464-run`, code `590fbb66c`, route `route-464-run.txt`; frames 0.77 s apart because the screenshot readback costs about 0.6 s): from the mid pose, the first frame after MovementForward is pressed (`464-run-22.png`) has the chase camera several metres above and outside the stairwell — exterior slab across the lower half, balcony wall and vaulted hall beyond, the character's head above the slab — and the next frame is clean again, so the owner's running symptom IS #464 (a transient of the same camera-outside-cell defect), which makes the camera fix the G3 blocker ahead of S4-c2; the same runs also exposed #467 (the character runs in place at the corridor mouth beyond the arches, both runs, 5+ s), a movement/collision issue outside the campaign. Open S5 items from S3: the weather gate/print cell question (one retail capture), the replay-side per-view `EC`, the `ClipRegions` residue, the two perf reductions, #460–#463. Register: AD-17 rewritten and AP-117 narrowed in the landing docs commit (the scissor fallback they described no longer exists). **G3 SELF-GATE part A (lead, 2026-09-03 16:20, Release at `5b43d8d55` = code `7df0b94c9`, `logs/selfgate-20260903-162027-g3/artifacts/screenshots/`, Khronos validation layer on — same two pre-existing #459 errors, nothing new):** 00-login PASS; 01-cathedral-stairs PASS (retail's own exterior slab reproduced, nothing extra); 02-facility-stairs PASS; 03-holtburg-house PASS (no sky through walls); 04-holtburg-terrain-leak PASS (no house fragments through the hill); 05-cathedral-south-0106 PASS and 06-cathedral-south-0104 PASS (player and walls whole, no depth inversion at the transition); 07-cathedral-stairs-0107 PASS and 08-cathedral-stairs-0112 PASS (every slab stable, no wall-textured triangles); 09-cathedral-terrace-edge PASS (the #456 pose: terrace, arches and the lit lantern whole, no panel loss); 10-facility-015E PASS and 11-facility-015F PASS (stairs, pillars and the drudge stable). 12-nanto-falls INCOMPLETE: the reveal for `0xE43D001E` outran the route's 90 s wait (probe timeout at `client.log:709`, readiness at `:714`, world-visible at `:718`), the probe aborted before its `close-client`, and the client then ignored two external close requests (filed #460); re-run as part C with a 300 s wait. NOT COVERED by the self-gate (owner items): the cathedral wall actor (two clients), the exterior ramp (no coordinates in the matrix), Tusker Island, the Holtburg town route beyond poses 03/04, and the two ordinary dungeons (unnamed). All verdicts PROVISIONAL until the owner looks. **G3 SELF-GATE part B (lead, 2026-09-03 16:56, the four retail capture poses as PLAYER poses — each walk log's frame-2 `P` line is the camera eye, so the player lands on the floor below it with the camera's yaw; `logs/selfgate-20260903-165634-g3b/artifacts/screenshots/`, validation on, same #459 error only, graceful logout confirmed):** 13-capture-terrace-edge PASS (cathedral exterior wall and grass whole); 14-capture-cathedral-arrival PASS (lit lantern, walls whole, retail's own exterior slab at the lower left — the axiom, nothing extra); 15-capture-holtburg-doorway PASS (the player lands outside the house: house, door, NPC, hills and water whole); 16-capture-foundry-deep PASS (walls and the portal glow whole). PROVISIONAL. **G3 SELF-GATE part C (lead, 2026-09-03 17:04, Nanto with a 300 s readiness wait, three headings; `logs/selfgate-20260903-170456-g3c/artifacts/screenshots/`, validation on, same #459 error only, graceful logout confirmed):** 12-nanto-falls PASS (hut, torches and the falls' spray at the left edge whole); 12b-nanto-falls-east PASS (the falls visible behind the pier, torches and rocks — the houses occlude, the falls persist); 12c-nanto-falls-west PASS (pagoda, trees and hills whole). The matrix invariant is sampled at three static headings, not a continuous rotation — the owner's spin is still the real test. Part C's FIRST attempt (`selfgate-20260903-165745-g3c`) never left portal space: the Login reveal into the foundry stalled `ready=True materialized=False` for 180 s (#462, intermittent — the next two logins into the same cell materialized), the aborted script requested a graceful logout, and a late local-player motion update then crashed the client on the retired movement controller (#461, exit `0xE0434352`). **G3 self-gate summary:** 20 of 20 captured frames PASS provisional (poses 00–16 plus the two extra Nanto headings); three matrix rows remain owner-only (wall actor, exterior ramp, Tusker) and the ordinary-dungeon row is unnamed; three lifecycle defects filed from the run (#460, #461, #462) and one validation defect (#459). **#459 FIXED** the same evening (`e33fd2472`, lead — a one-feature enable in the existing Vulkan 1.3 chain plus the required-feature gate): the four-pose validation launch at that commit (`logs/selfgate-20260903-171009-fix459-validation`, `logs/vk-validation-459.log`) reports ZERO validation errors; ten pre-existing unconsumed-vertex-attribute perf warnings remain (noted in #459). The validation layer is now a clean signal for every later gate. S4 packet DRAFT written (`s4-depth-alpha-packet.md`): S3 chunk 2 already delivered S4's chunk-1 latch/gate/seal scope; S4's body is the two-list alpha cutover. **#458 RESOLVED 2026-09-03** (`37e42aafc`, register AD-118): two live cdb captures at the Holtburg doorway (`oh-capture-blockset` / `oh-capture-blockcheck` templates) show retail tests `a9c9` twice a frame and that acdream's replay at the same P pose reproduces the interval sentinels, the four edge planes and both verdicts — the fixture's extra `LC:a9c9` is a 0.5 % edge-plane precision boundary (one far block, one corner, one plane; retail's clip heights 300.4/310.2 m vs ours 298.8/308.5 m), not a walk defect; the KnownFailure row stays as the standing example; the tip with chunk 4 cherry-picked (`62c2231d`, docs `386b1327`) is green: hermetic 6,829/6,829, InstalledDat 244/1 skip/4 known, zero `PROBE_CATHEDRAL` rows. Prior: CHUNK 4 DISPATCHED (worktree `s3-chunk4-impl` at `38cedde0`, §10 + chunk 1's carried O1–O4 on the weather path); then the S3 review round (§5; script ready) and the G3 self-gate over the §10 matrix + the four capture poses + a rainy interior pose. 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. ROUND 1 LANDED (`02a82881` chunk + `be81475c` round 1; four mutation checks documented) — MILESTONE: at the eight-kind level (LS/LC/SC/BLD/DI/DC/EC/OC) the walk reproduces retail's transcript EXACTLY for three of the four kit poses (terrace-edge, cathedral-arrival, foundry-deep); the fourth, holtburg-doorway-still frame 2, diverges at token 165: acdream admits land block `a9c9` (`LC/SC a9c90001`) that retail does not draw at that position — a `WalkLandscape.CheckBlocks` block-visibility question at a LOD-ring boundary, filed as #458 and tagged `Status=KnownFailure` on its conformance row (the InstalledDat lane therefore shows FOUR known failures until #458 is resolved; it is an OPEN S3 item for the review round, not a chunk-1 defect). The re-review (three lenses) FAILED on: the weather `OC` printed per outside-view SLICE inside `DrawLandscapeSliceLate` (2–4 lines for an interior root with the player outside; retail prints one) with the viewer cell instead of the after-sky land cell and NO pin/mutation check; G9's second comment site untouched; the oracle side's EC/OC derived from DC lists (non-discriminating — retail's literal EC/OC lines must be compared); the unconditional `OnSortCellTurn` validation ahead of the flag read; the launch-options volume figure (measured ≈1,200–1,400 lines/outdoor frame). → FIX ROUND 2 (§11.6) LANDED `88c70072` (fixer `ea4da8c7`): H2–H6 closed with two documented mutation checks (the literal EC/OC comparison now fails on a reversed derivation at cathedral-arrival token 1241); H1's production change is retail-faithful and STAYS (the weather mesh is drawn ONCE, unclipped, after the landscape — `GameSky::Draw(sky,1)` 0x00506ff0 / 0x005070da — instead of N scissored per-doorway draws; the ledger notes it here because no capture/visual gate has looked at rain since; the G3 self-gate adds a rainy interior pose). The re-review (three lenses) still FAILS H1's PIN: the IL-offset order check cannot fail when `DrawWeatherOnce` is moved back inside the slice loop (the reviewers reproduced the round-1 regression with the suite green), nothing pins the OC's cell argument (`ViewerCellId` vs `PlayerCellId`), and for an INTERIOR root the weather `OC` prints at the frame's end (the Replay-time LandscapeFlush leaf) where retail prints it between the landscape and the flood — plus a dead `EnableClipDistances` in `DrawLandscapeSliceLate`. CHUNK 1 STOPS HERE per plan rule §5 (two fix rounds used) and is written up, not forced: the emitter, the parser/readers, the fixtures, the offline diff and the three exactly-reproducing poses are LANDED and useful; OPEN ITEMS carried: O1 a real once-per-frame pin for the weather OC (observe the printed lines through the executor's post-loop call, not IL offsets); O2 pin the OC cell argument = the `P` cell; O3 interior-root OC position (print it at the Collect-time landscape turn's end, i.e. where `LandscapeFlush` is emitted, so the transcript order matches retail's `GameSky::Draw(1)` slot; the DRAW itself stays at Replay); O4 the dead `EnableClipDistances`; O5 #458 (see the degrade note below). O3/O4 fall naturally to chunk 4 (it deletes the per-slice loop and gives the weather draw its single home); O1/O2 are for chunk 4's review or the S3 review round. NOTE on #458 (transcript lens): the FW0 doorway row pins `DegradeMultiplier = 0f` because that capture ran under cdb load with `Render::deg_mul` depressed; the OH doorway capture ALSO ran under cdb (this session) — the extra `a9c9` block may be a degrade-level difference rather than `CheckBlocks`; #458 amended. Lanes at `88c70072`: hermetic 6,823/6,823; InstalledDat 244/1 skip/4 known (2× #383, TowerAscent, #458). 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 |