docs: #101 — A6.P8 ship + ISSUES.md update (Outcome A)

Records the A6.P8 mesh-aabb-fallback suppression ship outcome
in CLAUDE.md and moves issue #101 to Recently closed. Visual
verification confirmed end-to-end ramp climb on GfxObj 0x01000C16's
BSP (walkable inclined polygon, Normal.Z=0.717).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-25 20:31:30 +02:00
parent 6ca872feba
commit 381561f5cf
2 changed files with 41 additions and 59 deletions

View file

@ -959,6 +959,19 @@ L-spotlight, indoor sling-out (Finding 3 family with #98), and the
("Kill a drudge") is deferred until M1.5 lands.** Full M1.5 writeup at
the corresponding block in `docs/plans/2026-05-12-milestones.md`.
**A6.P8 — Mesh-AABB-fallback phantom suppression for GfxObj-only stabs — SHIPPED 2026-05-25.**
Three commits: `f6305b1` (PhysicsDataCache.IsPhantomGfxObjSource + 3 unit tests),
`5240d65` (GameWindow.cs wire-in at line 6127), `6ca872f` (test-class doc
line-ref sync from code review). Issue #101 CLOSED — the 10 phantom stair
cyls on the Holtburg upper-floor cottage staircase are gone; collision
falls through to entity `0x40B50089` (GfxObj `0x01000C16`, `hasPhys=True`
BSP with walkable inclined polygon at `Normal.Z=0.717`, world ramp from
(111.10, 25.50, 94.00)→(107.50, 27.10, 97.50)). Visual-verified end-to-end
2026-05-25: holding W continuously climbs Z=94→97.5 over the full 45°
ramp; no phantom diagonal slides (`[cyl-test]` count on `obj=0x40B500*`
post-fix = 0 vs 7101 pre-fix). Spec:
[`docs/superpowers/plans/2026-05-25-issue-101-stairs-cyl-phantom.md`](docs/superpowers/plans/2026-05-25-issue-101-stairs-cyl-phantom.md).
**Today's pre-M1.5 baseline (2026-05-20).** Five surgical fixes
shipped to close the user-reported "logged in inside the inn, ran
through walls" bug: A4 (multi-cell BSP iteration, `691493e`),

View file

@ -761,65 +761,6 @@ family (sling-out — also likely).
---
## #101 — Stair-step cylinder phantom blocks player on multi-part EnvCell entity
**Status:** OPEN
**Severity:** HIGH (M1.5 — blocks stair climbing in at least one Holtburg
building; same symptom class as the just-closed A6.P7 door bug but
different root cause)
**Filed:** 2026-05-25
**Component:** physics, dat-handling
**Description:** At a Holtburg staircase in cells `0xA9B40159` +
`0xA9B4015A` (XY ≈ 110, 26; user-discovered post-A6.P7 visual
verification), the player sphere cannot climb the stairs. Walking into
the foot of the stairs from the east, the sphere hits a phantom slide
with radial-cyl normals (e.g. `(0.88, -0.47, 0)`) and never gains
altitude. Z stays at 94.00 for the entire 4216-record capture in
`stairs-broken.jsonl`.
**Root cause / status:** The staircase is built as ~10 stacked cylinder
parts of multi-part entity `entityId=0x0040B500`. Each cyl is
`radius=0.80m, height=0.80m` at `Y=26.60`, stepping up in X+Z by 0.25m
per step. All parts carry `state=0x00000000` — **no
`HAS_PHYSICS_BSP_PS` flag**, so A6.P7's `Transition.BspOnlyDispatch`
gate does NOT fire. Cyls are tested. Cyl height (0.80m) exceeds A6.P6's
step-up budget (0.60m), so grounded step-over fails too. Falls through
to wall-slide → diagonal radial normal → slide tangent driven into
perpendicular cell wall → stuck.
The `[resolve-bldg]` lines show `gfxObj=0x0100081A hasPhys=False
bspR=0.00 vAabbR=0.82` — the underlying `GfxObj` has NO physics BSP. We
appear to be synthesizing a cyl from the visual AABB radius
(`vAabbR=0.82` → registered as `r=0.80`). This synthesis path is the
suspected mis-registration.
This is NOT a regression of A6.P7 (the cottage door works correctly
post-A6.P7, visually verified). It's a separate bug shape that A6.P7's
fix didn't address.
**Files:**
- Captures: `stairs-broken.jsonl`, `stairs-broken.launch.log`,
`stairs-working.jsonl`, `stairs-working.launch.log` (gitignored, on
disk for the next session to read)
- Suspected mis-registration: `src/AcDream.Core/Physics/ShadowShapeBuilder.cs::FromSetup`
- Entity hydration site: `src/AcDream.App/Rendering/GameWindow.cs::BuildInteriorEntitiesForStreaming`
**Research:**
- [`docs/research/2026-05-25-stairs-cyl-investigation-handoff.md`](research/2026-05-25-stairs-cyl-investigation-handoff.md)
— full investigation handoff with 4 research questions, do-not-retry
list, and 3 candidate fix shapes
- A6.P7 background (closed companion):
[`docs/research/2026-05-25-a6-door-cyl-retail-dispatch-investigation.md`](research/2026-05-25-a6-door-cyl-retail-dispatch-investigation.md)
**Acceptance:** Walking west into the broken staircase at cells
`0xA9B40159` + `0xA9B4015A`, the player sphere ascends step-by-step to
the top (Z=96.47), then can walk back down to the bottom (Z=94.22) — no
phantom diagonal slide normals attributed to entity `0x0040B500`.
Comparable trajectory to `stairs-working.jsonl` cellar-stairs baseline.
---
## #100 — Transparent rectangular patches around every house (terrain rendering)
**Status:** OPEN
@ -3533,6 +3474,34 @@ Unverified. The likely culprits, ranked by suspected probability:
# Recently closed
## #101 — [DONE 2026-05-25 · 5240d65 + 6ca872f] Stair-step cylinder phantom blocks player on multi-part EnvCell entity
**Closed:** 2026-05-25
**Commits:** `f6305b1` — feat(physics): #101 — add IsPhantomGfxObjSource predicate; `5240d65` — fix(physics): #101 — suppress mesh-aabb-fallback for phantom GfxObj stabs; `6ca872f` — docs(test): #101 — sync stale GameWindow.cs line ref in test class doc
**Component:** physics, dat-handling
**Resolution.** `PhysicsDataCache.IsPhantomGfxObjSource(gfxObjId)` predicate returns `true` when a GfxObj
has no PhysicsBSP (`PhysicsRadius == 0`) and the cyl/sphere shadow shapes would be synthesized
from the visual AABB radius alone (`vAabbR > 0`). `GameWindow.RegisterGfxObjShadow` (line 6127)
gates `ShadowShapeBuilder.FromGfxObj` behind this predicate — if the source is a phantom, the
registration is skipped entirely. The 10 phantom stair cyls from `GfxObj 0x0100081A`
(`vAabbR=0.82, hasPhys=False`) that previously blocked the player at the foot of the Holtburg
upper-floor staircase are no longer registered. Collision falls through to entity `0x40B50089`
(GfxObj `0x01000C16`, `hasPhys=True` BSP with walkable inclined polygon at `Normal.Z=0.717`,
world ramp from (111.10, 25.50, 94.00)→(107.50, 27.10, 97.50)). 3 unit tests in
`PhysicsDataCacheTests.IsPhantomGfxObjSource_*` (no BSP + AABB → true; has BSP → false;
no BSP + no AABB → false) shipped alongside the predicate.
**Investigation:** [`docs/research/2026-05-25-a6-stairs-cyl-retail-investigation.md`](research/2026-05-25-a6-stairs-cyl-retail-investigation.md).
**Plan:** [`docs/superpowers/plans/2026-05-25-issue-101-stairs-cyl-phantom.md`](../superpowers/plans/2026-05-25-issue-101-stairs-cyl-phantom.md).
**Verification.** Visual-verified at Holtburg upper-floor cottage stairs 2026-05-25 — `[cyl-test]`
count on `obj=0x40B500*` post-fix = 0 (was 7101 pre-fix); `src=0x0100081A` mesh-aabb-fallback
count = 0 (was 28 pre-fix). Player climbed Z=94→97.5 holding W continuously over the full 45°
ramp — no phantom diagonal slides.
---
## #86 — [DONE 2026-05-19 · 3764867 + 4e308d5] Click selection penetrates walls
**Closed:** 2026-05-19