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

@ -46,6 +46,65 @@ Copy this block when adding a new issue:
# Active issues
## #57 — B.4 interaction-handler missing: clicking on doors / NPCs / items silently does nothing
**Status:** OPEN
**Severity:** HIGH (M1 blocker — demo target *"open the inn door, click an NPC, pick up an item"* is fully blocked)
**Filed:** 2026-05-12
**Component:** input / interaction / `GameWindow.OnInputAction`
**Description:** Discovered 2026-05-12 while running the L.2g slice 1
visual test. Phase B.4 (2026-04-28) shipped half of itself: the wire-
message builders (`InteractRequests.BuildUse` / `BuildUseWithTarget` /
`BuildPickUp`), the supporting classes (`SelectionState`, `WorldPicker`),
the `InputAction` enum entries (`SelectLeft`, `SelectDblLeft`,
`SelectRight`, `SelectDblRight`, `UseSelected`, `SelectionPickUp`, etc.),
and the default keybindings (LMB → `SelectLeft`, LMB-dblclick →
`SelectDblLeft`, RMB → `SelectRight`, R → `UseSelected`, F →
`SelectionPickUp`). What was never shipped: a case for ANY of those
actions in `GameWindow.OnInputAction`'s switch. The runtime diagnostic
`[input] SelectLeft Press` fires when you click — confirming the
dispatcher resolves the chord — but nothing downstream listens, so the
click silently does nothing. Neither does double-click, R, or F. The
inbound side (`MoveToObjectReceived`, `StateUpdated` after L.2g slice 1)
is wired and ready; the block is purely outbound.
**Root cause / status:** B.4 handler integration step was evidently
dropped or never landed. Memory file
`memory/project_interaction_pipeline.md` was updated 2026-05-12 to
reflect this reality (previous text claimed shipped).
**Files:**
- `src/AcDream.App/Rendering/GameWindow.cs``OnInputAction` switch
around line 8546+ has no `Select*` cases.
- `src/AcDream.Core.Net/Messages/InteractRequests.cs` — wire builders
exist but have zero callers in `src/`.
- `src/AcDream.Core/Selection/SelectionState.cs` — class exists, zero
production callers.
- `src/AcDream.App/Rendering/WorldPicker.cs` — class exists, zero
production callers.
- `src/AcDream.UI.Abstractions/Input/KeyBindings.cs:300-320` — bindings
for `SelectLeft` / `SelectDblLeft` / `SelectRight` / `SelectDblMid`
exist.
**Research:** [docs/research/2026-05-12-l2g-slice1-shipped-handoff.md](research/2026-05-12-l2g-slice1-shipped-handoff.md)
"Why the visual test is deferred" section has the full investigation.
**Acceptance:** Double-left-clicking on a door in the Holtburg inn
doorway sends a `0xF7B1 / 0x0036 Use` to the server, the server flips
the door's `Ethereal` bit and broadcasts `SetState (0xF74B)`, the
L.2g-slice-1 chain mutates `ShadowObjectRegistry`, the
`CollisionExemption.ShouldSkip` check honors it, and the player can
walk through the doorway. Visual verification + log grep (per the
L.2g handoff's reproducibility recipe) both pass.
**Status promotion:** This is a phase-sized follow-up (estimated
30-50 LOC, ~30 min). Promoted to **Phase B.4b** in the L.2 milestone
context and the CLAUDE.md "Next phase candidates" list. Will be closed
as `DONE (promoted to Phase B.4b)` once that phase's design spec lands.
---
## #55 — Static-entity slow path reports ~1.45M `meshMissing` per 5s at r4 standstill
**Status:** OPEN