95 lines
7 KiB
Markdown
95 lines
7 KiB
Markdown
# 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=<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.
|
||
```
|