ship(phys): A6.P3 slice 3 — cell-resolver ping-pong CLOSED + #98 re-diagnosed

Slice 3 v2 (3e140cf) added point-in cell-stickiness in
ResolveCellId's indoor branch. User verification + slice3v2 capture
confirms: cell-resolver ping-pong is FULLY CLOSED.

Data:
- scen2_v2 capture (pre-slice-3): 20+ cell-transit events with
  rampant ping-pong (0xA9B4014B ↔ 0xA9B4014A ↔ 0xA9B4013F at the
  cellar boundary, Z stable ~96.4 — same tick re-classification)
- slice3v2 capture (post-fix): 1 cell-transit event (login teleport
  only) — ping-pong fully eliminated

Findings:
- A6.P2 Finding 3 (cell-resolver sling-out family) CLOSED.
- Issue #90 (sphere-overlap stickiness workaround in same function)
  now redundant; can be removed in A6.P4 after broader visual
  verification.
- Issue #97 (phantom collisions + fall-through on 2nd floor) hypothesis
  pending: same instability family, likely closed as side-effect of
  this fix. Re-test on next happy-test session.
- Issue #98 (cellar-up stuck) PERSISTS but with NEW DIAGNOSIS.
  Originally filed as cell-resolver ping-pong (which was true and now
  fixed), but user verification shows the cellar-up symptom remains
  with a DIFFERENT root cause: BSP step-physics at the cellar stair
  TOP. Push-back trace from slice3v2 capture:
    n=(0, -0.719, 0.695) sloped face (walkable per FloorZ=0.664)
    delta=(0, 0, 0.75) step-down probe lifts sphere by 0.75m
    winterp=1.0->0.0 entire walk-interp consumed per tick
  Player progresses up most of the stairs but blocks at top step
  where the cellar transitions to the cottage main floor. #98 issue
  updated with this re-diagnosis.

Includes:
- scen4_cottage_cellar_slice3 acdream.log (slice 3 v1 evidence;
  ping-pong already closed by v1's sphere-overlap stickiness, but
  v1 over-corrected by holding player in cellar during legitimate
  transitions)
- scen4_cottage_cellar_slice3v2 acdream.log (slice 3 v2 evidence;
  point-in stickiness fixes the over-correction; cellar-up reveals
  the deeper BSP step-physics bug)

Docs updated:
- ISSUES.md — #98 re-diagnosed
- docs/plans/2026-04-11-roadmap.md — A6.P3 slice 3 marked SHIPPED;
  slice 4 (or A6.P4) scoped for #98 step-physics investigation
- CLAUDE.md — Currently-working-toward block updated

Test suite: 1148 pass + 8 pre-existing fail (baseline maintained).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-22 12:11:56 +02:00
parent 3e140cfe71
commit ceeb06be7d
5 changed files with 165165 additions and 22 deletions

View file

@ -738,10 +738,18 @@ which BSP step_up depends on; matching retail would require deeper
refactor of AdjustOffset). Slice 2 verification surfaced a NEW
M1.5-blocking bug: **user cannot walk UP out of cottage cellar — stuck
at last step due to cell-resolver ping-pong (filed as issue #98,
Finding 3 family).** Current A6 phase: **A6.P3 slice 3 — Finding 3
cell-resolver stickiness (issue #98 + #90 workaround removal +
possibly closes #97)**. Retail oracle: `CObjCell::find_cell_list`
Position-variant at `acclient_2013_pseudo_c.txt:308742-308783`.
Finding 3 family).** **A6.P3 slice 3 SHIPPED 2026-05-22** (commits `8898166` v1 +
`3e140cf` v2): cell-resolver stickiness added in `ResolveCellId`'s
indoor branch (point-in check against `fallbackCellId`'s CellBSP
before falling through to FindCellList). Data confirms ping-pong is
FULLY CLOSED — scen4 cellar capture shows 1 cell-transit (login
teleport) vs 20+ pre-fix. **#90 workaround now redundant — deferred
to A6.P4 removal. #97 phantom collisions hypothesis pending re-test.
#98 cellar-up symptom PERSISTS with a NEW diagnosis** (re-filed in
#98 as BSP step physics issue at top of cellar stair flight; player
hits sloped step-face, push-back consumes all walk-interp; not
cell-resolver). Current A6 phase: **A6.P3 slice 4 (or A6.P4?) —
investigate #98 BSP step-physics at cellar stair top.**
Findings doc:
[`docs/research/2026-05-21-a6-cdb-capture-findings.md`](docs/research/2026-05-21-a6-cdb-capture-findings.md).
Original demo scenario (Holtburg Sewer end-to-end) is unreachable: sewer

View file

@ -664,12 +664,34 @@ Falsifiable: if #96 fix closes #97 as a side-effect, the hypothesis is confirmed
---
## #98 — Cellar ascent stuck at last step (cell-resolver ping-pong; Finding 3 manifestation)
## #98 — Cellar ascent stuck at top (BSP step physics; NOT cell-resolver)
**Status:** OPEN — **A6.P3 slice 3 target** (Finding 3 family)
**Status:** OPEN — **NEW diagnosis after A6.P3 slice 3 (2026-05-22)**
**Severity:** HIGH (blocks M1.5 demo cellar half — user can descend but cannot return)
**Filed:** 2026-05-22
**Component:** physics, cell resolver (ResolveCellId + CheckBuildingTransit)
**Component:** physics, BSP step_up / step_down at cellar stair geometry
**Diagnosis update 2026-05-22 (post A6.P3 slice 3):** The cell-resolver ping-pong (the original hypothesis when this issue was filed) WAS confirmed and is now FIXED by slice 3 (commits `8898166` v1 + `3e140cf` v2 — point-in stickiness check in `ResolveCellId`). Data confirms: scen4_cottage_cellar_slice3v2 capture shows only 1 cell-transit event (login teleport) vs 20+ pre-fix.
BUT the cellar-up symptom PERSISTS even with the cell-resolver fix. The remaining cause is a BSP step physics issue at the cellar stair geometry. User report: "I'm running up the stairs, at the top it looks like I'm running into something. Still running animation but not going up." Player can climb most of the stair flight but gets blocked at the TOP step where the cellar transitions to the cottage main floor.
**Evidence from slice3v2 capture:**
```
[push-back] site=adjust_sphere in=(*, -0.0752, 0.0077) out=(*, -0.0752, 0.7577)
delta=(0, 0, 0.7500) n=(0, -0.7190, 0.6950) d=-0.1007
r=0.4800 winterp=1.0000->0.0000 applied=True
```
- Surface normal `(0, -0.719, 0.695)` — sloped 44° (walkable per FloorZ=0.664)
- Push-back lifts sphere by 0.75m (step_down probe distance) repeatedly
- `winterp 1.0→0.0` — entire walk interpolation consumed by the lift each tick
- Player Z stays stuck around 0.0077 (relative to cell) → not progressing
**Hypothesis:** the step_down probe at the top of the cellar stair is hitting the sloped TOP step face (or possibly a wall poly), and consuming all walk interp pushing back. No remaining interp to actually walk forward over the top.
**Related:**
- Inn stairs UP works (different geometry, doesn't trigger this specific failure mode)
- Cellar descent works (only ascent fails — direction matters)
- Issue #90 (cell-id ping-pong workaround in `ResolveCellId`) is now superseded by slice 3 v2's stickiness check; can be removed in A6.P4 after broader visual verification
**Description:** Walking UP from a Holtburg cottage cellar in acdream gets stuck "just almost at the last step up." Stairs going UP elsewhere (inn 2nd floor) work fine post-A6.P3 slice 1. Cellar DESCENT works. Only the cellar ASCENT from the bottom back to ground level fails — specifically at the last step where the player should transition from the indoor cellar cell to the cottage ground-floor cell.

View file

@ -203,21 +203,24 @@ successfully 2026-04-30 for the steep-roof case. Matching binaries
Matching retail would require deeper refactor (e.g. AdjustOffset
fallback to body.ContactPlane). Guard is benign improvement;
further #96 closure deferred.
- **A6.P3 slice 3 — Finding 3 (cell-resolver stickiness)** (NEXT,
~1-2 days). New M1.5-blocking bug surfaced during slice 2
verification: **user cannot walk UP from cottage cellar — stuck
at last step due to cell-resolver ping-pong** (issue #98). Same
family as #90 (existing workaround) + scen4 sling-out (Finding 3
from A6.P2). Retail oracle: `CObjCell::find_cell_list`
Position-variant at `acclient_2013_pseudo_c.txt:308742-308783`.
Port retail's cell-array hysteresis: prefer previous tick's
CellId when sphere is close to (but slightly outside) previous
cell's CellBSP volume. May close issues #98 (target), #97
(phantom collisions; same instability family), #90 (workaround
removal), and scen4 sling-out together. **No re-captures
required for slice 3 scope decision** — issue #98 evidence already
captured in `docs/research/2026-05-21-a6-captures/scen3_inn_2nd_floor_slice2v2/acdream.log`
cell-transit chain.
- **✓ SHIPPED — A6.P3 slice 3 — cell-resolver stickiness**
(2026-05-22, commits `8898166` v1 + `3e140cf` v2). Added
point-in stickiness check at top of `ResolveCellId`'s indoor
branch. Cell-resolver ping-pong FULLY CLOSED (data: scen4 cellar
capture shows 1 cell-transit vs 20+ pre-fix). **Outcomes:**
Finding 3 (cell-resolver instability) closed. #90 workaround
redundant (deferred A6.P4 removal). #97 phantom collisions
hypothesis pending re-test (likely closed too). #98 cellar-up
symptom PERSISTS but with NEW diagnosis (re-filed in #98 as BSP
step-physics at cellar stair top — sloped step-face mis-handling,
NOT cell-resolver).
- **A6.P3 slice 4 (or A6.P4)? — BSP step-physics at cellar
stair top (#98 new diagnosis)** (NEXT or DEFERRED). Investigate
why step-down probe consumes all walk-interp at cellar stair top.
Evidence: scen4 cottage_cellar_slice3v2 push-back trace. May
require reading BSP step_up + step_down decomp + comparing to
cellar stair geometry. Could be its own slice or merged into a
broader A6.P4 cleanup phase.
- Issue #95 (visibility blowup) NOT in A6.P3 scope — separate work
surface.
- **A6.P4 — Remove workarounds + visual verification** (~1 day after

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff