diff --git a/docs/research/2026-06-12-night-session-handoff-108-residual-next.md b/docs/research/2026-06-12-night-session-handoff-108-residual-next.md new file mode 100644 index 00000000..ec9f6757 --- /dev/null +++ b/docs/research/2026-06-12-night-session-handoff-108-residual-next.md @@ -0,0 +1,87 @@ +# Night-session handoff (2026-06-12): nine closes shipped; NEXT = #108-residual + +**Branch state:** `claude/thirsty-goldberg-51bb9b`, pushed to BOTH remotes at +`49cffe6`. Suites green at every commit: App 261+1skip / Core 1439+2skips / +UI 420 / Net 294. CLAUDE.md "Current state" + the render digest +(`claude-memory/project_render_pipeline_digest.md`) are refreshed to this +truth — orient there first. + +## 1. What this session closed (all user-gated; do NOT re-litigate) + +| Closed | Root cause | Commits | +|---|---|---| +| **#130** doorway top-edge strip | TWO stacked causes: scissor box `Floor(origin)+Ceiling(size)` under-covers top/right (sub-pixel, `NdcScissorRect`); THE strip = the +0.02 m shell draw-lift missing from draw-space portal consumers post-f35cb8b (6.7 px @2.4 m, measured) | `6c4b6d6`, `5135066` (AP-32 row added) | +| **#129** doors leak through terrain at ~a landblock | constant 0.0005 NDC punch bias spans ~190 m of eye depth at distance; capped to 0.5 m eye-space (`MarkBiasNdc`) | `4ba7148` (AD-18 updated) | +| **#113** hill-cottage phantom stairs | dead via `2163308` (cache cross-serving) — re-gate confirmed | — | +| **#124** far-building back walls through openings | interior-root look-ins ported as a LANDSCAPE-STAGE sub-pass (decomp: LScape::draw runs FIRST in DrawCells' outside branch, pc:432719, pre-clear/pre-seal; seeds clip vs the INSTALLED view → `BuildFromExterior(seedRegion:)`; punch-all-then-draw). NEVER merge look-ins into the main frame (post-clear seal z-kill) | `77cef4c` (AP-33 added) | +| **#132** candle flame vs through-opening background | slice particles drew BEFORE the look-ins / merged interiors (no depth self-protection) — the FlushAlphaList deferral ported as the two-phase slice split + outdoor post-frame attached pass | `20d1730`, `87afbc0` (AP-34 added) | +| **#131** portal swirl missing through doorways | FOUR layers (see lesson below); final: the portal is a SERVER object inside the hall's PORCH cell (look-in cell) → partition.Dynamics → dynamics-last culls it (no look-in cells in the main cone) + post-seal z-fail. Fix: `DrawBuildingLookIns` draws look-in-cell dynamics + emitters (retail nested DrawCells/`DrawObjCellForDummies`) | `1d3f9a8`, `47f32cd`, `d208002` | +| **UN-2** GetMaxSpeed ×4 contradiction | the implementation was retail-correct; BN pseudo-C drops x87 fmuls — byte-verified (3× `fmul [0x7C8918]`=4.0f); doc rewritten, weenie-null default aligned to literal 1.0; row deleted | `0cb97aa` (verifier `tools/verify_un2_fmul.py`) | + +## 2. THE #131 LESSON (cost: 4 fix iterations) + +**Identify the ENTITY before theorizing about draw passes.** Three +real-but-adjacent fixes shipped before the elimination chain (teleport pCell +flip → owner cell; headless replay → flood admits it; partition routing → +exactly one possible drop site) forced the answer. Two tools that would have +shortened it to one iteration: +- **The pick line**: left-click prints `[B.4b] pick guid=… name=…` + + `[B.7] pick-info … setup=…` — names any clickable object in the log. +- **The teleport/pCell flip**: walking onto/into a thing prints its cell. +Both need zero new code. The register also already KNEW the answer (AP-33's +"look-in DYNAMICS are not drawn — deferred") — scan-the-register-on-symptom +applies to rows YOU wrote hours earlier. + +## 3. NEXT (the queue to the M1.5 → M2 boundary) + +1. **#108-residual — cellar-ascent grass window (NEXT, desk-first).** + Climbing out of a cellar, grass covers the exit door until the eye pops + above grade. Punch/seal exonerated; it is MEMBERSHIP/VIEWER-side (which + cell the camera resolves while the eye is below grade). Apparatus + designed: a VERTICAL exit-walk-harness variant (HouseExitWalkReplayTests + machinery driving the camera up cellar stairs, watching viewer-cell + resolution per step). Read the physics digest + ISSUES #108 before + starting. User needed only for the final cellar gate. +2. **#127 — distant-building admission churn** (flood size oscillates ±1–3 + cells at mm eye deltas; suspect list includes the PortalBounds frustum + pre-gate — machinery #124 now reuses for interior roots). +3. **#116 — slide-response family** (physics, oracle-first: one cdb session). +4. **#125 sticky-drop debt** — failed texture uploads never retried + (session-sticky invisible meshes); robustness, no visual gate. + +## 4. Apparatus added this session (all env-gated, kept) + +| Tool | How | For | +|---|---|---| +| `[outstage]`/`[outstage-pt]`/`[outstage-own]` | `ACDREAM_PROBE_OUTSTAGE=1` (+`ACDREAM_DUMP_ENTITY=` doubles as the owner watchlist) | outside-stage dynamics routing/cone verdicts; scene-particle owner matching | +| `Issue130DoorwayStripTests` | App.Tests | aperture-vs-gate top-edge gap in DRAWN (lifted) space; the lift-seam sensitivity pin | +| `NdcScissorRectTests` / `Issue129PunchBiasTests` | App.Tests | scissor containment; punch-bias eye-span cap | +| `Issue124LookInSeedRegionTests` | App.Tests | seedRegion semantics at the real corner-building door | +| `Issue131SetupProbeTests` | App.Tests | dat setup dumps + the porch-admission replay of a captured frame | +| `tools/verify_un2_fmul.py` | `py` | re-derive the GetMaxSpeed ×4.0 byte proof | + +## 5. Paste-ready pickup prompt + +``` +Pick up acdream as a SENIOR 3D ENGINE DEVELOPER on #108-residual (the +cellar-ascent grass window). Branch claude/thirsty-goldberg-51bb9b == +pushed both remotes at 49cffe6. Read FIRST: CLAUDE.md "Current state", +docs/research/2026-06-12-night-session-handoff-108-residual-next.md (THE +handoff), then BOTH digests (render + physics; DO-NOT-RETRY tables apply). + +WORK ORDER: +1. #108-residual — eye-below-grade membership at cellar exits. Build the + VERTICAL exit-walk harness variant (HouseExitWalkReplayTests machinery, + a cellar staircase fixture), watch viewer-cell resolution per step while + the eye is below terrain grade; pin where the resolver demotes to + outdoor/terrain. Punch/seal are exonerated — do NOT touch them. +2. Then #127 (admission churn; PortalBounds pre-gate suspect), #116 + (slide-response, oracle-first cdb), #125 sticky-drop debt. +Closing this list ≈ the M1.5 → M2 boundary (M2 = kill a drudge). + +The user's reports are AXIOMS. Visual gates are the acceptance tests. +Suites green per commit: App 261+1skip / Core 1439+2skip / UI 420 / +Net 294. Register discipline: new deviation = same-commit row. For any +object-specific render bug: IDENTIFY THE ENTITY FIRST (the pick line +[B.4b] names clicked objects; pCell flips name cells) — the #131 lesson. +```