docs(handoff): A6.P3 #98 — full-session handoff doc + CLAUDE.md/ISSUES.md updates
Adds the canonical pickup document docs/research/2026-05-23-a6-p3-issue98-harness-handoff.md with: - TL;DR + session arc (10 commits chronological) - What the trajectory replay harness IS (committed apparatus) - Bug 1 status: #98 cellar-up freeze (unfixed, 6 fix shapes failed) - Bug 2 status: airborne-at-tick-1 (new, 6 hypotheses tested, root cause not isolated) - Exclusion list: DO NOT retry any of the 6+6 dead ends - Apparatus inventory: probes, tests, fixtures, cdb captures - Recommended next move: side-by-side comparison harness against live PlayerMovementController state (evidence-first instead of speculation-first) - Alternative moves: pivot to other M1.5 issues or M2 prep - Self-contained pickup prompt at the bottom of the handoff doc Updates CLAUDE.md's "Current A6 phase" block to point at the new handoff doc as the canonical resume artifact. Updates ISSUES.md's #98 entry with the late-day extension findings, the 6-hypothesis exclusion list, and a pointer to the handoff doc. Test baseline maintained at 1172 + 8 pre-existing failures. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5c6bdbe30d
commit
ec47159a2e
3 changed files with 267 additions and 3 deletions
|
|
@ -779,6 +779,20 @@ Our `ResolveCellId` + `CheckBuildingTransit` lack this stickiness — every tick
|
|||
|
||||
**Replay tests at [`tests/AcDream.Core.Tests/Physics/Issue98CellarUpReplayTests.cs`](tests/AcDream.Core.Tests/Physics/Issue98CellarUpReplayTests.cs)** document the failing-frame geometry and will be the regression oracle when a real fix lands. They do not currently simulate trajectory.
|
||||
|
||||
**2026-05-23 PM extension — trajectory replay harness shipped, blocked on a SECOND bug:**
|
||||
|
||||
Commits `4c9290c` → `5c6bdbe` ship a deterministic N-tick trajectory replay at [`tests/AcDream.Core.Tests/Physics/CellarUpTrajectoryReplayTests.cs`](tests/AcDream.Core.Tests/Physics/CellarUpTrajectoryReplayTests.cs). 200-tick runs complete in <100 ms. 5 tests pass.
|
||||
|
||||
- **Finding:** the cellar ramp polygon is NOT in `cellStruct.PhysicsPolygons`. It lives in a separate GfxObj (a static building piece, registered as a ShadowEntry on the landblock). `CellDumpSerializer` correctly captures cell polygons; the ramp comes from a different data source entirely. The harness reconstructs the ramp polygon programmatically from the live capture's polydump data via `RegisterStairRampGfxObj`.
|
||||
- **Finding:** `CellDumpSerializer.Hydrate` sets `BSP=null` per its xmldoc — so the indoor BSP collision path is skipped for hydrated fixtures. Harness wraps cells with a synthetic one-leaf BSP via `AttachSyntheticBsp` to fire the indoor path.
|
||||
- **Finding:** `PhysicsBody` seeding requires BOTH `ContactPlane*` AND `WalkablePolygon*` fields. The engine at `PhysicsEngine.cs:665-673` only calls `SpherePath.SetWalkable(...)` if `body.WalkablePolygonValid && body.WalkableVertices.Length >= 3`. Without this the engine treats the sphere as "grounded but anchorless" — a contradictory state.
|
||||
|
||||
**NEW BLOCKER (open finding):** Even with the full apparatus (CP + WalkablePolygon seeded body, synthetic BSP, synthetic stair GfxObj registered, stub landblock), the sphere goes airborne at tick 1 with `hit=(0,1,0)` — a +Y wall normal matching no registered geometry. The hit is set by `ValidateTransition` between the `after-insert` and `after-validate` probe sites, but the inner `TransitionalInsert` call sets `ci.CollisionNormal=(0,1,0)` before ValidateTransition runs. 12 different `SetCollisionNormal` call sites in `TransitionTypes.cs` — root cause not yet isolated.
|
||||
|
||||
6 hypotheses tested via the harness, all failed to isolate root cause: WalkablePolygon seeding, initial Z lift (0 vs 0.05m), stair GfxObj presence, stub landblock terrain, cell BSP null vs synthetic, body=null vs seeded. Per systematic-debugging skill's "3+ failures = question architecture" rule, stop speculation; next session needs a side-by-side comparison harness against live `PlayerMovementController` state.
|
||||
|
||||
**Pickup document:** [`docs/research/2026-05-23-a6-p3-issue98-harness-handoff.md`](docs/research/2026-05-23-a6-p3-issue98-harness-handoff.md) is the canonical resume artifact — has the chronological commit list, apparatus inventory, exclusion list, and three concrete next-session options ranked by recommendation.
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue