docs(phys L.2g): slice 1 shipped handoff + B.4 gap discovery + plan-of-record

L.2g slice 1 is CODE-COMPLETE: parser + registry mutator + WorldSession
dispatcher + GameWindow subscriber (4 commits: 2459f28, d538915,
536a608, 108e386). Build clean, 6 new tests pass, baseline-stable
across the full suite. Per-commit + final integration code reviews
all approved.

Visual verification deferred: while running the Holtburg-doorway test,
Phase B.4's outbound Use handler turned out to be unwired. The wire
builders (InteractRequests.BuildUse), classes (SelectionState,
WorldPicker), input-action enums, and keybindings all exist — but
GameWindow.OnInputAction has no case for SelectDblLeft, so the click
silently does nothing. The inbound L.2g chain we just landed can't
fire until something sends an outbound Use.

This commit captures the handoff + reframes next-session work:

  * docs/research/2026-05-12-l2g-slice1-shipped-handoff.md (NEW)
    Full evidence: 4 shipped commits, end-to-end code flow, B.4
    discovery explanation, 4 minor + 1 Important review notes
    (the Important one is a test-coverage gap that the B.4b visual
    test will settle automatically), reproducibility recipe,
    next-session pick.

  * CLAUDE.md
    "Currently in Phase L.2" paragraph: L.2g slice 1 code shipped;
    visual test deferred to B.4b. Next-phase-candidates list:
    L.2g slice 1 (now done) replaced with the B.4b candidate
    pointing at the slice scope.

  * docs/plans/2026-04-29-movement-collision-conformance.md
    L.2g section gains a "Current shipped slice (2026-05-12):" table
    listing the 4 commits.

  * docs/plans/2026-05-12-milestones.md
    M1 phase-list updated: L.2g slice 1 (code) shipped; B.4 renamed
    "B.4 / B.4b" with the gap-discovery note + B.4b shape.

  * docs/ISSUES.md
    New issue #57 (HIGH) for the B.4 interaction-handler gap.
    Promoted to Phase B.4b; will close as
    DONE (promoted to Phase B.4b) when B.4b's design spec lands.

  * Memory file project_interaction_pipeline.md (in personal
    memory dir, not in this commit) updated to reflect reality.

Next session: Phase B.4b (~30-50 LOC, 1-2 subagent dispatches,
~30 min). Subscribe SelectDblLeft -> WorldPicker.Pick ->
InteractRequests.BuildUse -> _liveSession.SendGameMessage. Same
Holtburg-doorway visual test verifies both L.2g slice 1 and B.4b
in one pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-12 23:17:05 +02:00
parent 108e3868a5
commit aba6c9ac7f
5 changed files with 369 additions and 27 deletions

View file

@ -618,16 +618,27 @@ acdream's plan lives in two files committed to the repo:
approval.
**Currently in Phase L.2 (Movement & Collision Conformance).** L.2a slices
1+2+3 + L.2d slice 1+1.5 shipped 2026-05-12. L.2d closed at the Holtburg
site ("watch-and-wait" — no more slices until a new shape-fidelity bug
shows up elsewhere); doorway blocker identified as a Door entity, not
building BSP. L.2g (dynamic PhysicsState toggling — doors) brainstormed
and design-spec'd 2026-05-12 evening; **the natural next step is the
L.2g slice 1 implementation** (parse `SetState` 0xF74B, plumb new
PhysicsState into ShadowObjectRegistry, verify Holtburg inn doorway).
1+2+3 + L.2d slice 1+1.5 + L.2g slice 1 shipped 2026-05-12. L.2g slice 1
is CODE-COMPLETE (parser + registry mutator + WorldSession dispatcher +
GameWindow subscriber, 4 commits, build green, 6 new tests pass), but
its visual verification is **deferred to the B.4b session** — clicking
on a door does nothing today because Phase B.4's input-action handler
was never wired (the wire builders and bindings exist, but
`GameWindow.OnInputAction` has no case for `SelectDblLeft`, so the
outbound Use never sends). **The natural next step is Phase B.4b —
finish the outbound Use handler wiring** (subscribe `SelectDblLeft`
`WorldPicker.Pick``InteractRequests.BuildUse` → send), then re-run
the Holtburg inn-doorway visual test which verifies both L.2g slice 1
and B.4b in one pass. Estimated 30-50 LOC, ~30 min, 1-2 subagent
dispatches.
L.2g slice 1 ship handoff: [`docs/research/2026-05-12-l2g-slice1-shipped-handoff.md`](docs/research/2026-05-12-l2g-slice1-shipped-handoff.md)
— full evidence + the 4 minor review notes + the 1 Important test-coverage
gap for `ShouldSkip` (the B.4b visual test's hex-dump will settle whether
ACE sends `state=0x4` alone or `0x14`).
Design spec: [`docs/superpowers/specs/2026-05-12-l2g-dynamic-physicsstate-design.md`](docs/superpowers/specs/2026-05-12-l2g-dynamic-physicsstate-design.md).
Implementation plan: [`docs/superpowers/plans/2026-05-12-phase-l2g-slice1.md`](docs/superpowers/plans/2026-05-12-phase-l2g-slice1.md).
L.2d ship handoff: [`docs/research/2026-05-13-l2d-slice1-shipped-handoff.md`](docs/research/2026-05-13-l2d-slice1-shipped-handoff.md).
L.2a→L.2d handoff (now superseded by the L.2d ship): [`docs/research/2026-05-12-l2a-shipped-l2d-handoff.md`](docs/research/2026-05-12-l2a-shipped-l2d-handoff.md).
**Phase L.2a (Truth & Diagnostics) slices 1-3 shipped 2026-05-12.**
Three commits land the L.2 "make every bad movement outcome explainable"
@ -705,18 +716,25 @@ together comprise the streaming + rendering perf foundation for the
project.
**Next phase candidates (in rough preference order):**
- **L.2g slice 1 implementation — dynamic PhysicsState toggling for doors.**
Direct continuation of tonight's L.2d slice 1.5 evidence: parse inbound
`SetState (0xF74B)` wire message, plumb the new `PhysicsState` value into
`ShadowObjectRegistry`'s cached entity state so the existing
`CollisionExemption.IsExempt(...)` check sees up-to-date bits, and verify
the Holtburg inn-door scenario walks through cleanly when the server flips
Ethereal. Unblocks the M1 demo's *"open the inn door"* line. Spec:
[`docs/superpowers/specs/2026-05-12-l2g-dynamic-physicsstate-design.md`](docs/superpowers/specs/2026-05-12-l2g-dynamic-physicsstate-design.md).
**Note:** triage the 8 pre-existing test failures still hanging over the
physics modules first (none introduced by L.2a/L.2d slices — verified by
stash + rerun — but most touch code adjacent to where L.2g will plumb the
new state mutator).
- **Phase B.4b — finish the outbound Use handler wiring.**
Direct M1 blocker discovered while running the L.2g slice 1 visual
test: the wire builders (`InteractRequests.BuildUse`), classes
(`SelectionState`, `WorldPicker`), input-action enum entries
(`SelectDblLeft` etc.), and keybindings (LMB-dblclick → `SelectDblLeft`)
all ship today, but `GameWindow.OnInputAction`'s switch has NO case
for any of the `Select*` actions — clicking on a door fires the
diagnostic `[input] SelectDblLeft Press` but nothing downstream
listens. Memory file `project_interaction_pipeline.md` updated to
reflect this reality. Shape: subscribe `InputAction.SelectDblLeft`
→ build a world ray from current mouse → `WorldPicker.Pick(...)`
store in `_selection` → call `InteractRequests.BuildUse(seq, guid)`
+ `_liveSession.SendGameMessage(body)`. Probably also subscribe
`SelectLeft` for select-without-use and `UseSelected` for the R
hotkey. Estimate: 30-50 LOC, 1-2 subagent dispatches, ~30 min.
Verifies L.2g slice 1 in the same Holtburg-doorway visual test once
it lands. Full context:
[`docs/research/2026-05-12-l2g-slice1-shipped-handoff.md`](docs/research/2026-05-12-l2g-slice1-shipped-handoff.md)
"Why the visual test is deferred" section.
- **Triage the chronic open-issue list** in `docs/ISSUES.md`#2 (lightning),
#4 (sky horizon-glow), #28 (aurora), #29 (cloud thinness), #37 (humanoid
coat), #50 (stray tree), #41 (remote-motion blips) have been open since