diff --git a/docs/research/2026-09-01-overhaul/s3-walk-ownership-map.md b/docs/research/2026-09-01-overhaul/s3-walk-ownership-map.md index 0c462597..cc2559f3 100644 --- a/docs/research/2026-09-01-overhaul/s3-walk-ownership-map.md +++ b/docs/research/2026-09-01-overhaul/s3-walk-ownership-map.md @@ -849,6 +849,49 @@ worktree on top of `079483bb6`; round 1 of the two the plan allows. bespoke Facts (doorway-still, foundry-deep) — they need the full DAT-built world the theory body already uses, so either shape is acceptable; say why in a one-line comment. +- **G7 — `SC` sits at `DrawSortCell` ENTRY, before `DrawBuilding` (blocking, + transcript lens).** Retail's `bp 0059f140` fires at `RenderDeviceD3D::DrawSortCell` + entry and `DrawBuilding` @0x0059f2a0 is called from INSIDE it, so retail + prints `LC` → `SC` → `BLD` (`terrace-edge.walk.log:2331-2333`; a not-in-view + cell prints `SC` then `BLD` with no `LC`, `:1042-1044`). acdream prints `SC` + from `OnLandscapeCellTurn`, which `RetailFrameWalk` calls AFTER + `DrawBuilding`. Fix: `RetailFrameWalk.DrawLandscape` calls a new + `IWalkEventSink.OnSortCellTurn(landblockId, side, cellIndex)` at the + `DrawSortCell` entry point (after the LC turn, before `DrawBuilding`, under + the same `AlwaysDrawObjects || in view` gate); the driver prints `SC` + there and nowhere else; the object-list turn after the building is + unchanged. MUTATION: with the print moved back after `DrawBuilding`, the + terrace-edge conformance row (G10) must fail on the first building. +- **G8 — the trailing `OC ` of every outdoor frame (major).** + It is retail's WEATHER pass: `GameSky::Draw` @0x00506ff0 with `arg2 == 1` + runs `if (LScape::weather_enabled != 0) + DrawObjCellForDummies(this->after_sky_cell)` @0x005070da — the rain + emitters live in the after-sky cell, whose DID is the viewer's land cell + (`terrace-edge.walk.log:1416` `OC f418000b` = the `P` cell, once per + complete frame; 12 EC vs 16 OC in that capture are exactly these four). It + is NOT a walk turn and NOT the creature-mode `DrawObjCellForDummies(creature_cell)` + @0x00452be1. acdream's equivalent is `RenderWeather` + (`RetailPViewPassExecutor.DrawLandscapeSliceLate`, gated on the player + being outside): print `OC ` at that call when the weather + pass actually runs, print-only, with the addresses in the comment; rewrite + `PrintObjectCellTurn`'s doc, which currently denies the line exists. +- **G9 — the EC evidence comment is false (minor).** "EC and OC counts are + always equal" — terrace-edge has 12 EC / 16 OC (G8). The conclusion (EC is + per flood visit; the stamp dedupe lives inside `DrawEnvCell`, past the + breakpoint) is right; the proof is `holtburg-doorway-still.walk.log:1126, + 1131, 1134, 1137` — `EC a9b40100` four times in one frame across four + look-in `DC` turns. Fix both comment sites. +- **G10 — the conformance signature must see the new kinds (minor → required).** + `WalkTraceReplayContext.Signature` drops LC/SC/EC/OC, so no test compares + their placement against retail — which is how G7 shipped green. Extend + the test-side `Recorder` with `OnLandCellTurn`/`OnSortCellTurn` and include + `LC`/`SC` in BOTH signatures; derive `EC`/`OC` for each `DC` from its cell + list (retail's two reverse loops: every shell far-to-near, then every + object list far-to-near — the driver's own order) on both sides; exclude + the trailing weather `OC` from the comparison (assert separately that an + outdoor retail frame ends with `OC

`). The four kit-pose rows must + then reproduce at the eight-kind level, or the FIRST divergence is + reported in deviations with its position (a real finding, not a skip). - Gates unchanged (§11.3); the InstalledDat lane must still show only the three known failures; the new still-fixture rows must still reproduce.