acdream/docs/research/2026-06-12-night-session-handoff-108-residual-next.md
Erik bf965000da handoff: add the M1.5 dungeon-demo exit gate to the next-session work order
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 21:21:51 +02:00

95 lines
7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 ±13
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=<ids>` 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.
3. When the ledger clears: run the M1.5 DUNGEON DEMO as the milestone
exit gate (milestones doc: enter any dungeon via portal, 3-5 rooms,
walls block / stairs work / lighting correct / transitions smooth).
The old blocker #95 died with the Option A rewrite (the ACME BFS it
lived in was deleted in T4); the portal entry flow is field-tested
(the 2026-06-12 accidental teleport). Dungeon-specific findings
(likely A7 lighting items) get fixed inside M1.5; a clean demo lands
M1.5 -> update the milestones doc + CLAUDE.md and start M2 (kill a
drudge; first port target per the research memos: CombatMath).
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.
```