docs: issue #101 — broken stairs cyl phantom (post-A6.P7 finding)

Visual verification of A6.P7 at Holtburg cottage door passed cleanly
(1187 [cyl-skip-bsp] guard fires, 0 [cyl-test] on doors, 30/30
axis-aligned hits, smooth NE/SE slide along door face). While
exploring post-verification, the user discovered a different
staircase in cells 0xA9B40159 + 0xA9B4015A where the sphere cannot
climb at all.

Captured working baseline (stairs-working.jsonl, cottage cellar
stairs in cells 0xA9B40143/146/147 — clean ↔ Z=90.95-94.00 traversal)
and broken scenario (stairs-broken.jsonl, Z stays at 94.00 the entire
4216-record capture).

Root cause is NOT a regression of A6.P7. It's a different bug shape:
the staircase is built as a multi-part EnvCell entity (entityId
0x0040B500, ~150 parts), with 10 of those parts being 0.80m-radius
cylinders forming the steps. Each cyl carries state=0x00000000 — no
HAS_PHYSICS_BSP_PS — so A6.P7's BspOnlyDispatch guard correctly
doesn't fire. Cyl height 0.80m exceeds A6.P6's step-up budget 0.60m
so grounded step-over fails. Falls through to wall-slide which
produces the same diagonal radial phantom A6.P7 closed for the door.

The [resolve-bldg] lines reveal 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. That
synthesis path is the suspected misregistration.

Filed as issue #101 with severity HIGH. Investigation handoff written
covering 4 retail-research questions (cdb on retail at this stair
location, Setup trace via entity-source probe, ShadowShapeBuilder
vAabbR fallback audit, cell BSP poly dump), do-not-retry list, and 3
candidate fix shapes (don't synthesize cyl from vAabbR / cell BSP for
stairs / cyl-height-tolerant step-over). The handoff explicitly
defers implementation to a later session pending retail evidence.

Files:
- docs/research/2026-05-25-stairs-cyl-investigation-handoff.md (new)
- docs/ISSUES.md — added #101 entry

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-25 19:03:58 +02:00
parent 888272aad1
commit 8795655250
2 changed files with 398 additions and 0 deletions

View file

@ -761,6 +761,65 @@ 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