diff --git a/CLAUDE.md b/CLAUDE.md index d4cba4b..6137a53 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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`), diff --git a/docs/ISSUES.md b/docs/ISSUES.md index ef344ff..08f1fd8 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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