From 9b55d78a286933587132b0546b4c901317f80f2c Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 3 Sep 2026 11:52:36 +0200 Subject: [PATCH] =?UTF-8?q?docs(render):=20S3=20chunk=201=20fix=20round=20?= =?UTF-8?q?2=20=E2=80=94=20one=20weather=20OC=20per=20frame=20(pinned),=20?= =?UTF-8?q?literal=20EC/OC=20comparison,=20cost/wording=20items?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- .../s3-walk-ownership-map.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) 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 cc2559f3..1642950f 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 @@ -895,6 +895,73 @@ worktree on top of `079483bb6`; round 1 of the two the plan allows. - Gates unchanged (§11.3); the InstalledDat lane must still show only the three known failures; the new still-fixture rows must still reproduce. +### 11.6 Chunk 1 fix round 2 (lead, 2026-09-03 — the LAST round the plan allows; after the three-lens re-review of `36be6b598`) + +Round 1 closed G1–G7 and G10's LC/SC half with documented mutation checks, +and delivered the milestone (three of four kit poses reproduce exactly at +the eight-kind level; the fourth is #458, a walk finding, not chunk 1's). +The re-review FAILED on the weather `OC` and on what the EC/OC comparison +actually compares. Every item below is lead-verified. + +- **H1 — one weather `OC` per frame, at the one weather draw (blocking).** + The print sits inside `DrawLandscapeSliceLate`, which the renderer calls + ONCE PER OUTSIDE-VIEW SLICE (`RetailPViewRenderer`'s "GameSky's weather + pass still runs through each active landscape view" loop), so an interior + root with the player outdoors prints 2–4 `OC` lines where retail prints + one. Retail draws the weather ONCE: `GameSky::Draw(sky, 1)` @0x00506ff0 → + `if (LScape::weather_enabled) DrawObjCellForDummies(after_sky_cell)` + @0x005070da, after `LScape::draw`'s blocks (@0x00506396). Fix: move the + weather draw (`_sky.RenderWeather(...)`) AND the `OC` print out of the + per-slice method into ONE call after the slice loop (a new + `RetailPViewPassExecutor.DrawWeatherOnce(frame)`, gated exactly as today + on `RenderSky && RenderWeather && playerOutside`), unclipped, no scissor — + chunk 4 later deletes the slice loop's remaining scissor/clip apparatus. + The `OC` id: retail sets the after-sky cell's DID from the position the + sky is updated with each frame (`after_sky_cell->SetDID(arg2->objcell_id)` + @0x00506dde), and every capture's `OC` equals the frame's `P` cell — so + print the SAME cell id the frame-root `P` line prints (the camera/viewer + cell), not the player's cell; say so in the comment. PIN: a test that + drives the executor's weather path with the flag on for (a) an outdoor + root and (b) an interior root with two exit-view slices, asserting EXACTLY + ONE `OC ` line per frame and none when the player is inside. + MUTATION: delete the print → the pin fails (quote it). +- **H2 — G9's second comment site (blocking as reported).** `WalkFrameDriver`'s + EC print comment still claims "EC and OC counts are always exactly equal"; + replace with the real proof (`holtburg-doorway-still.walk.log:1126,1131, + 1134,1137` — `EC a9b40100` four times in one frame across four look-in + `DC` turns; terrace-edge has 12 EC / 16 OC because of the weather `OC`). +- **H3 — compare retail's LITERAL EC/OC (minor → required).** The oracle + side of `Signature8` drops the captured `EC`/`OC` events and derives them + from the `DC` lists, so both sides derive and the EC/OC half can never + fail. Fix: the ORACLE side keeps its captured `EC`/`OC` events verbatim + (excluding only the trailing weather `OC` — the last event of an outdoor + frame when its id equals the `P` cell); the REPLAY side derives EC/OC from + the driver's real two reverse loops (the existing derivation), with the + same non-look-in deferral on both sides (close the `pendingRootCells` + asymmetry the note found). The four kit rows must still reproduce (three + exactly; #458's row stays `KnownFailure` at its documented position — if + the literal EC/OC comparison moves that first divergence EARLIER, record + the new position in #458's row comment). MUTATION: reverse the replay + derivation (OC before EC) → the cathedral-arrival row fails on an EC/OC + token (quote it). +- **H4 — the SC hook's flag-off cost (minor).** `OnSortCellTurn` runs + `RequireOpenFrame` and two range validations before reading the flag. + Read the flag FIRST and return; the remaining flag-off cost is one + interface call per land cell (state that in the hook's doc and in H5). +- **H5 — launch-options wording (minor).** Flag on: measured ≈1,200–1,400 + lines per outdoor frame (terrace-edge 1,384; cathedral-arrival 1,269; + doorway 1,187) — write the measured range, not "600–800". Flag off: one + bool read per print site plus one interface call per land cell for the + `SC` hook, nothing else. +- **H6 — #458 citation (note).** The `KnownFailure` row's comment cites + `docs/ISSUES.md #458` and the divergence position; the InstalledDat lane's + known-failure set is now FOUR (two #383 layouts, TowerAscent, #458) — the + build lens compares against that set. +- Gates: §11.3 unchanged; hermetic fully green; InstalledDat exactly the four + known failures. If this round does not close every item, chunk 1 STOPS and + is written up (plan rule §5) with the emitter kept as-is and the open items + carried to the S3 review round. + ### 11.4 Out of scope Any validator, canonical format, or dashboard; any behavior change; any