docs: wrap session — doorway flap FIXED (membership + blue-hole); A/B/C render residuals next

Canonical handoff: docs/research/2026-06-03-membership-and-bluehole-shipped-handoff.md
(what shipped: membership Stage 1 ordered-CELLARRAY port + the blue-hole render-root
clobbering fix; the full remaining-issues list — A camera-collision, B R1b particles,
C R2 outside-looking-in, Stage 2 membership, #7 stairs, the 5-test baseline; KEEP/
DON'T-REDO; key files + decomp anchors; copy-paste pickup prompt for next session).

- ISSUES.md: recorded the cottage doorway flap DONE (both causes) in Recently closed.
- render design spec §7: R1 + flap marked DONE; A/B/C mapped to the next render phases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-03 11:09:57 +02:00
parent 79fb6e7c23
commit a1b49f9b24
3 changed files with 326 additions and 0 deletions

View file

@ -3674,6 +3674,33 @@ Unverified. The likely culprits, ranked by suspected probability:
# Recently closed
## Cottage doorway "flap" — [DONE 2026-06-03 · 22a184c + e5457f9 + 79fb6e7] membership pick + render-root clobbering (the TWO causes)
**Status:** DONE (user-verified inside-looking-out)
**Closed:** 2026-06-03
**Commits:** `b44dd14`/`bc56545`/`22a184c`/`e5457f9` (membership Stage 1) + `79fb6e7` (blue-hole render-root)
**Component:** physics/membership, rendering
**Resolution:** The cottage doorway flap (full-screen bluish void + flicker) had TWO independent
causes, both fixed this session:
1. **Membership pick ping-pong**`CellTransit.BuildCellSetAndPickContaining` used an unordered
`HashSet` + a pre-pick fork in `FindEnvCollisions`. Ported retail's verbatim ordered `CELLARRAY`
`find_cell_list` pick (current cell at index 0, interior-wins-break) + the collide-then-pick order
(`find_env_collisions``check_other_cells`, removing the pre-pick that swapped collision geometry
with the cell mid-tick). `[cell-transit]` 47→13→DELTA=0 while standing still. (Stage 1; faithful.)
2. **Render-root clobbering**`CellGraph.CurrCell` ("the player's cell", the render root) was
written by the PER-ENTITY `ResolveWithTransition`/`ResolveCellId`. A jumping Holtburg NPC near the
doorway overwrote the player's render root every tick → render rooted at the NPC's tiny connector
cell (0170) instead of the player's room (0171) → only its ~8-tri shell drew, rest = GL clear color
= the blue void. Fixed: `CurrCell` is now written ONLY by the player
(`PhysicsEngine.UpdatePlayerCurrCell` via `PlayerMovementController.UpdateCellId`).
Diagnosed via `[flap-cam]`/`[shell]`/`[cell-transit]` (player stable in 0171, render rooted at 0170
for 77,951 frames). **Residuals are NOT the flap** — three known render phases remain (A
camera-collision: walls grey while inside; B R1b/#104 particles through ground; C R2 outside-looking-in
transparent walls) + membership Stage 2 (uniform collision + intrinsic entry, faithfulness debt). Full
record: [`docs/research/2026-06-03-membership-and-bluehole-shipped-handoff.md`](research/2026-06-03-membership-and-bluehole-shipped-handoff.md).
## Phase U.4c doorway "flap" — [DONE 2026-05-31 · 0ee328a] indoor visibility rooted at the camera eye
**Status:** DONE (Phase U.4c flap sub-step)