docs: #113 pickup handoff - phantom-stairs/misplaced-cell attribution plan + #112 residual rider + tonight's shipped-state table
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
77d7ea1530
commit
6d2218cac3
1 changed files with 102 additions and 0 deletions
|
|
@ -0,0 +1,102 @@
|
||||||
|
# HANDOFF — #113 phantom exterior staircase (A9B3) / misplaced-interior-cell suspect
|
||||||
|
|
||||||
|
**Date:** 2026-06-10 (very late). **Branch:** `claude/thirsty-goldberg-51bb9b`, HEAD `77d7ea1`.
|
||||||
|
**Pick rationale:** the user's standing directive from tonight — *"we should not have to
|
||||||
|
verify all houses like this"* — wants systemic fixes. #113 is the cheapest
|
||||||
|
highest-information probe: if the misplaced-cell hypothesis holds, ONE bug class explains
|
||||||
|
phantom geometry + containment gaps (#112) + some collision gaps across every affected
|
||||||
|
house. Rider task: the #112 residual oracle read (same code area, ~30 min).
|
||||||
|
|
||||||
|
Read the **physics digest** (`claude-memory/project_physics_collision_digest.md`) first —
|
||||||
|
its top banners carry tonight's #107/#111/#112 arc. Render digest unchanged except #105.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. The issue (user side-by-side vs retail, 2026-06-10)
|
||||||
|
|
||||||
|
An A9B3 building (near the #112 hill cottage; NPCs **Aun Kielerea** + **The Sentry**
|
||||||
|
adjacent; the user stood at ~world (183, −111, 116), which is A9B3-local (183, 81, 116))
|
||||||
|
shows a **stone-and-wood staircase attached to its exterior wall** in acdream. Retail
|
||||||
|
shows a plain wall with a window. Screenshots are in the session transcript
|
||||||
|
(2026-06-10); the spot is trivially re-findable — it's next to the A9B3 hill cottage
|
||||||
|
with interior cells 0x100/0x103/0x104 at z=116.
|
||||||
|
|
||||||
|
**Key fact:** the stairs are NOT pickable — clicks select the NPCs behind them
|
||||||
|
(`issue112-gate1.log:37032+`). Not a stab/WorldEntity ⇒ building-shell geometry or an
|
||||||
|
interior EnvCell's geometry drawn outside.
|
||||||
|
|
||||||
|
## 2. The hypothesis to test FIRST
|
||||||
|
|
||||||
|
**A misplaced interior EnvCell** — an indoor staircase cell whose world transform
|
||||||
|
(Position.Origin/orientation from the dat, or our application of it) places its geometry
|
||||||
|
outside the shell. One misplaced cell would unify, at this building:
|
||||||
|
- the phantom exterior stairs (its geometry pokes through/outside the wall),
|
||||||
|
- an interior containment dead-zone (#112's gap = the volume is where the geometry
|
||||||
|
ISN'T — note the #112 scan found a real gap inside the HILL COTTAGE; check whether
|
||||||
|
the staircase building and the hill cottage are the same building or neighbors),
|
||||||
|
- missing collision on objects inside (their owning cell volume is elsewhere).
|
||||||
|
|
||||||
|
## 3. Attribution plan (cheap, ordered)
|
||||||
|
|
||||||
|
1. **ACViewer oracle** (`feedback_acviewer_as_oracle`): open landblock **A9B3** in
|
||||||
|
ACViewer and look at the same building. Stairs present there too ⇒ shared
|
||||||
|
dat-interpretation (both projects misread the dat — go to the dat bytes); absent ⇒
|
||||||
|
OUR transform/draw path (EnvCell world-transform application or the building shell
|
||||||
|
draw). This single check halves the space.
|
||||||
|
2. **Identify the building + cell**: dump A9B3's `LandBlockInfo.Buildings` (model id,
|
||||||
|
Position) + every interior `EnvCell.Position` (`dats.Get<EnvCell>(0xA9B301xx)`).
|
||||||
|
The conformance harness pattern is ready-made: `ConformanceDats.LoadEnvCell` +
|
||||||
|
a scratch test with `ITestOutputHelper` (see `Issue112MembershipTests.cs` for the
|
||||||
|
loader shape; A9B3-local frame: world y + 192, world x unchanged, center A9B4).
|
||||||
|
Look for a cell whose origin/AABB escapes its building's footprint, and specifically
|
||||||
|
for a STAIR-shaped Environment near the user's spot (stairs = the EnvironmentId's
|
||||||
|
CellStruct will have ramp polys).
|
||||||
|
3. **Cross-check the #112 gap**: the gap point A9B3-local (184.9, 82.5, 116.5) — which
|
||||||
|
cell SHOULD cover it per the dat layout? If the misplaced cell's correct position
|
||||||
|
covers the gap, the hypothesis is proven end-to-end.
|
||||||
|
4. Fix per finding; conformance test the transform (golden origins from the dat).
|
||||||
|
|
||||||
|
## 4. Rider: #112 residual (same session, ~30 min)
|
||||||
|
|
||||||
|
`Issue112MembershipTests.A9B3CottageGap_..._DocumentsResidual` pins it: at the doorway
|
||||||
|
gap, the pick demotes via the NORMAL outdoor-candidate path (NOT the removed hatch).
|
||||||
|
Oracle read needed: retail `CEnvCell::find_transit_cells` (around pc:317499) — is
|
||||||
|
`add_all_outside_cells` gated on sphere-proximity to the exterior portal POLYGON or on
|
||||||
|
mere graph reachability? If proximity-gated, tighten our port and flip the
|
||||||
|
DocumentsResidual assert to keep-curr (`0xA9B30104`). Re-promotion at doorways already
|
||||||
|
works — this residual self-heals walking in; it's polish, not a stranding.
|
||||||
|
|
||||||
|
## 5. Tonight's shipped state (do not redo — see digests + ISSUES.md)
|
||||||
|
|
||||||
|
| Issue | State | Commits |
|
||||||
|
|---|---|---|
|
||||||
|
| #105 white walls | CLOSED (per-frame texture flush restored) | `c787201` |
|
||||||
|
| #110 near plane | CLOSED (retail 0.1 re-landed, corner gated) | `d4b5c71` |
|
||||||
|
| #107 login wedge | CLOSED (snap validation + PortalSpace fix + wire pairs + hold) | `1090189`, `e4f6750` |
|
||||||
|
| #111 login placement | CLOSED user-gated (claim-authoritative snap, walkable-poly grounding, entity parity) | `5f1eb7c`, `5706e0e`, `2735695` |
|
||||||
|
| #112 transparent-while-walking | PRIMARY FIX shipped (hatch removed, lateral stab recovery, retail keep-curr); residual documented; live cottage re-walk gate pending | `2d6954e` |
|
||||||
|
| #113 phantom stairs | FILED (this handoff) | `77d7ea1` |
|
||||||
|
|
||||||
|
Key new invariants: server (cell,pos) pairs are VALIDATED at the snap
|
||||||
|
(`PhysicsEngine.Resolve` head: retail `AdjustPosition` :280009 + walkable-poly grounding
|
||||||
|
`WalkableFloorZNearest` + `[snap]`/`[spawn-adjust]` log lines, one per login/teleport);
|
||||||
|
the per-tick pick keeps curr_cell on null result (retail pc:308788-308825) with lateral
|
||||||
|
stab-graph recovery. ACE persists ITS OWN physics state, not our reports
|
||||||
|
(`SetRequestedLocation` — ACE source confirmed) — every restore shape it produced
|
||||||
|
tonight is survivable.
|
||||||
|
|
||||||
|
## 6. Ops notes
|
||||||
|
|
||||||
|
- Launch protocol: standard PowerShell launch (CLAUDE.md) + `ACDREAM_PROBE_RESOLVE=1`
|
||||||
|
+ `ACDREAM_PROBE_CELL=1`; tee a log. In-world marker `auto-entered player mode`.
|
||||||
|
Graceful close ⇒ ~5 s ACE hold; hard kill ⇒ ~3 min exit-29.
|
||||||
|
- Character `+Acdream` is parked near the A9B3 staircase building (outdoors) — login is
|
||||||
|
clean with tonight's fixes regardless of where ACE restores.
|
||||||
|
- ⚠️ Never bulk-edit source with PS5.1 Get/Set-Content (mojibake). Tee logs = UTF-16LE.
|
||||||
|
- Baseline: Core **1383** green + 4 pre-existing #99-era failures (DoorBugTrajectoryReplay
|
||||||
|
×2 / DoorCollisionApparatus / BSPStepUp) + 1 skip; App **223** / UI **420** / Net **294**.
|
||||||
|
Gates that must stay green: P1 membership conformance (FindCellListConformance,
|
||||||
|
ThresholdPortalCrossing, CottageDoorway, CameraCornerSeal), CornerFloodReplayTests,
|
||||||
|
Issue107SpawnDiagnosticTests, Issue112MembershipTests.
|
||||||
|
- After #113: #108 (cellar grass-sweep) + #109 (far-door oscillation) render residuals,
|
||||||
|
then #99/A6.P4 per-cell shadow architecture (the big systemic debt).
|
||||||
Loading…
Add table
Add a link
Reference in a new issue