docs: T6 (BR-7) ship closeout - #99/#90 closed, #97 likely-closed note, #116 filed, plan stamped

- ISSUES.md: #99 DONE (per-cell shadow architecture, dbfbf85+ca4b482;
  visual rides T5); #90 DONE (stickiness workaround removed, retail
  ordered-pick owns doorway hysteresis); #97 likely-closed note (the +5m
  pad producer deleted - verify at T5); #116 filed (slide-response
  family: tick-22760 lateral-slide loss + BSPStepUp D4 first-frame
  behavior, both pre-dating BR-7, oracle-first fix shape).
- Port plan: execution stamp updated to BR-2..BR-7 ALL CODE-COMPLETE
  with the per-commit map; BR-7 section marked code-complete; remaining
  = T5, the single comprehensive user visual gate.
- Memory digests (physics + render + MEMORY.md index) updated in the
  same session per the digest protocol.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-11 14:49:18 +02:00
parent ca4b482f8b
commit 60c10707a3
2 changed files with 52 additions and 15 deletions

View file

@ -752,9 +752,17 @@ propagates through portal connectivity data in `CEnvCell`.
---
## #90 — Cell-id ping-pong at indoor doorway threshold
## #90 — Cell-id ping-pong at indoor doorway threshold — [DONE 2026-06-11 · ca4b482, T6/BR-7]
**Status:** OPEN — **WORKAROUND in place (sphere-overlap stickiness, commit `4ca3596`). M1.5 scope (A6.P4) — workaround removal after underlying push-back fix.** User-visible symptom resolved 2026-05-20; root cause still to investigate.
**Status:** DONE — the `4ca3596` sphere-overlap stickiness workaround was
REMOVED in T6/BR-7: it had become dead code (its only caller path was the
cache-null test fallback in `ResolveCellId`), and the retail mechanism that
owns doorway hysteresis is the ordered-pick (current cell at CELLARRAY
index 0, interior-wins-break — `BuildCellSetAndPickContaining`, the
collide-then-pick advance), which production has used since the membership
rewrite. The ping-pong's original harm (outdoor ticks bypassing indoor BSP)
is structurally gone under the per-cell query: both classifications collide
the same per-cell lists at the threshold.
**Severity:** HIGH (workaround unblocks indoor visibility for M1.5 baseline; M1.5 acceptance requires the proper fix)
**Filed:** 2026-05-20
**Component:** physics — cell tracking
@ -877,7 +885,13 @@ Retail oracle for cell-id hysteresis: `acclient_2013_pseudo_c.txt:308742-308783`
## #97 — Phantom collisions + occasional fall-through on indoor 2nd floor (post-slice-1 happy-testing)
**Status:** OPEN — **investigate after issue #96 lands** (hypothesized to be a side-effect)
**Status:** OPEN — **LIKELY CLOSED by T6/BR-7 (2026-06-11), verify at the T5
visual gate.** The +5 m radial query pad that made spheres test objects in
cells they never overlapped (the structural producer of this phantom class,
per the WF1 verification) is deleted with the per-cell query; indoor 2nd
floor now tests only the overlapped cells' own shadow lists. If T5's inn
2nd-floor walk is clean, close; if phantoms persist they have a different
mechanism and this gets a fresh capture.
**Severity:** MEDIUM (intermittent; doesn't block stair-walking which works post-slice-1)
**Filed:** 2026-05-21
**Component:** physics, ContactPlane stability
@ -946,9 +960,24 @@ Decomp anchors (`docs/research/named-retail/acclient_2013_pseudo_c.txt`):
---
## #99 — Run-through doors at building thresholds (regression from b3ce505)
## #99 — Run-through doors at building thresholds (regression from b3ce505) — [DONE 2026-06-11 · dbfbf85 + ca4b482, T6/BR-7]
**Status:** OPEN
**Status:** DONE — closed ARCHITECTURALLY by the A6.P4 per-cell shadow port
(T6/BR-7): registration computes cell membership via the retail
sphere-overlap portal flood (`CellTransit.BuildShadowCellSet` =
`CObjCell::find_cell_list`, Ghidra 0x0052b4e0), the query iterates strictly
per cell (`FindObjCollisionsInCell` = `find_obj_collisions` 0x0052b750,
primary + `CheckOtherCells` per retail order), building shells dispatch via
the per-LandCell building channel (`FindBuildingCollisions` =
`CSortCell::find_collisions` 0x005340a0), and the b3ce505 indoor gate +
radial sweep + 5 m pad + isViewer exemption are DELETED. The door is
covered twice like retail: registered into every cell its spheres overlap,
and reached from the indoor side via the straddle-admitted outdoor cells in
the player's own array. Pins: tick-13558 (indoor approach BLOCKS),
tick-22760 (outdoor block invariant), the flipped door apparatus, and the
registry membership tests. Residual: the lateral-slide delta at
near-perpendicular approach is #116 (slide response, pre-existing).
Visual confirmation rides the T5 comprehensive gate.
**Severity:** HIGH (M1 demo regression — opening doors was previously a working demo target)
**Filed:** 2026-05-24
**Component:** physics, shadow-object collision query

View file

@ -1,14 +1,22 @@
# The holistic building-render port plan (Phase B) — one drawing discipline
**EXECUTION STATUS (2026-06-11 end of day): BR-2…BR-6 are CODE-COMPLETE on
the branch (HEAD `4a307d3`), executed as the fused tasks T1T4 — see the
render digest's ledger for the per-commit map (T1 `579c8b0` frame order;
T2 `cf8a2c3`/`529dfcf`/`88f3ce1` flood fidelity, two retail constants refuted
by the conformance gate and kept at documented tolerances; T3 `a6aec8c`
viewconeCheck; T4 `4a307d3` one-gate deletions). REMAINING: BR-7 (T6,
collision A6.P4) → then T5, the single comprehensive visual gate. The 4
pre-existing #99-era Core test failures double as BR-7's built-in
acceptance signal (they should flip green as A6.P4 lands).**
**EXECUTION STATUS (2026-06-11, post-BR-7): BR-2…BR-7 are ALL CODE-COMPLETE
on the branch — the render arc as the fused tasks T1T4 (T1 `579c8b0` frame
order; T2 `cf8a2c3`/`529dfcf`/`88f3ce1` flood fidelity, two retail constants
refuted by the conformance gate and kept at documented tolerances; T3
`a6aec8c` viewconeCheck; T4 `4a307d3` one-gate deletions), and BR-7 (T6,
collision A6.P4) as `6ec4cde` (signed OtherPortalId gate) + `abf36e2`
(BuildShadowCellSet flood) + `dbfbf85` (per-cell architecture: flood
registration, building channel, per-cell query, b3ce505 DELETED — closes
#99) + `ca4b482` (straddle-only outside-add, A6.P5 widening + #90
stickiness removed). Of the 4 #99-era Core reds, 3 flipped green as
designed (door apparatus + tick-13558 + tick-22760's blocking invariant);
the 4th (BSPStepUp D4) + 22760's lateral-slide delta proved to be a
SEPARATE pre-existing slide-response family — filed #116, D4 skipped with
the reference (probes show the cell-set layer innocent). Suites: Core
1416/0/2skip, App 225, UI 420, Net 294. REMAINING: **T5 — the single
comprehensive visual gate with the user** (checklist in the render
digest's ledger), then roadmap/digest closeout.**
**Status: APPROVED + AMENDED (2026-06-11). EXECUTION DIRECTIVE CHANGED BY THE
USER: "I don't care if it is non-playable… I want everything ported, then we
@ -235,7 +243,7 @@ center/radius window.
green.
- **Size:** ~3 commits, mostly deletions (each independently revertable).
### BR-7 — Interior collision: per-cell shadow lists (A6.P4, verified)
### BR-7 — Interior collision: per-cell shadow lists (A6.P4, verified) — ✅ CODE-COMPLETE 2026-06-11 (`6ec4cde`+`abf36e2`+`dbfbf85`+`ca4b482`; visual confirmation rides T5)
**What:** ship the A6.P4 architecture with the investigation's corrections:
registration builds the cell set by sphere-overlap portal flood (not an XY