docs(M1): record all 4 demo targets met, list deferred polish

M1's demo scenario is mechanically complete:
  1. Walk through Holtburg — met via L.2a/d/g
  2. Open the inn door — met via B.4b + B.4c
  3. Click an NPC — met via B.4b chain + chat handlers
     (visually verified 2026-05-14 on Tirenia + Royal Guard)
  4. Pick up an item — met via B.5 + 87ba5c9 feedback polish

What's left to formally land: record ≈30s demo video, pin still +
writeup, flip freeze list, point CLAUDE.md "currently working toward"
at M2. Per the milestone-discipline rules, milestone landing is a
user-driven event with an artifact; this commit only updates the
factual demo-target status.

Filed but explicitly deferred (don't block M1 recording): #61 (door
swing cycle-boundary flash), #62 (PARTSDIAG null-guard), #63
(server-initiated MoveToObject auto-walk — candidate Phase B.6),
#64 (local-player pickup animation).
This commit is contained in:
Erik 2026-05-14 16:55:21 +02:00
parent 87ba5c9a98
commit 7be13938bc

View file

@ -94,35 +94,65 @@ missing is the gameplay loop on top.
--- ---
### M1 — "Walkable + clickable world" — 🟡 CURRENT (~46 weeks) ### M1 — "Walkable + clickable world" — 🟡 CURRENT, all 4 demo targets met (pending recorded video)
**Demo scenario:** Walk through Holtburg without getting stuck on the inn **Demo scenario:** Walk through Holtburg without getting stuck on the inn
doorway. Open the inn door. Click an NPC and see selection feedback. Pick doorway. Open the inn door. Click an NPC and see selection feedback. Pick
up an item from the ground. up an item from the ground.
**Phases to ship:** **Demo-target status (as of 2026-05-14):**
- **L.2 (all sub-lanes ag)** — Movement & Collision Conformance.
L.2a slices 1+2+3 + L.2d slice 1+1.5 + L.2g slice 1 (code) shipped | # | Target | Status | Evidence |
2026-05-12. L.2g slice 1 visual verification deferred to B.4b session |---|---|---|---|
(the inbound SetState chain can't fire until the outbound Use sends). | 1 | Walk through Holtburg without getting stuck | ✅ met | L.2a/d/g shipped 2026-05-12; Holtburg doorway verified |
- **B.4 / B.4b**`Use` / `UseWithTarget` / `PickUp` interaction. | 2 | Open the inn door | ✅ met | B.4b (interaction) + B.4c (swing animation) shipped 2026-05-13 |
B.4 (2026-04-28) shipped the wire builders, `SelectionState`, | 3 | Click an NPC and see selection feedback | ✅ met | B.4b chain + chat handlers; verified 2026-05-14 (Tirenia + Royal Guard double-click → NPC dialogue in chat panel) |
`WorldPicker`, the input-action enums, and the keybindings — but | 4 | Pick up an item from the ground | ✅ met (close-range path) | B.5 + post-B.5 PickupEvent fix shipped 2026-05-14; visual-verified at Holtburg; pickup chat/toast feedback added in `87ba5c9` |
*not* the `GameWindow.OnInputAction` handler that ties them
together. As of 2026-05-12, clicking on a door silently does nothing. **What's left to formally land M1:**
**B.4b** is the small follow-up slice (~30-50 LOC) that subscribes - Record ~30s demo video of the four-target scenario end-to-end.
`SelectDblLeft` and routes through pick → BuildUse → send. Once B.4b - Drop at `docs/milestones/M1-walkable-clickable.mp4`.
lands, the same Holtburg-doorway visual test verifies both L.2g - Pin still + one-paragraph writeup at the top of this doc.
slice 1 and B.4b in one pass. - Flip the freeze list. Update `CLAUDE.md`'s "currently working toward"
line to M2.
**Known polish items deferred (do not block M1 recording, addressable post-M1):**
- **#61** — AnimationSequencer link→cycle frame-0 flash on door swing. LOW.
- **#62** — PARTSDIAG null-guard. Latent, not reachable today.
- **#63** — Server-initiated `MoveToObject` auto-walk not honored (blocks
double-click pickup + out-of-range F-pickup; close-range still works).
MEDIUM. Candidate Phase B.6 — holtburger has the reference port.
- **#64** — Local-player pickup animation does not render (retail
observers see it correctly). LOW.
**Phases that shipped to clear M1:**
- **L.2 (a + d + g sub-lanes)** — Movement & Collision Conformance.
L.2a slices 1+2+3 + L.2d slice 1+1.5 + L.2g slice 1+1b+1c shipped
2026-05-12 / 2026-05-13. Visual-verified via the B.4b doorway test.
- **B.4b** — outbound Use + `WorldPicker` + double-click detection +
`CollisionExemption` widening + `ServerGuid→entity.Id` translation
(the ID-mismatch trap surfaced during L.2g slice 1c). Shipped
2026-05-13.
- **B.4c** — door swing animation: spawn-time `AnimationSequencer`
registration + stance-value fix (`NonCombat = 0x3D` not `0x01`, which
had been causing doors to render halfway underground). Shipped
2026-05-13.
- **B.5**`BuildPickUp` (PutItemInContainer 0x0019) + `SendPickUp`
helper + F-key wiring + new `PickupEvent (0xF74A)` despawn handler.
Shipped 2026-05-14.
- **B.5 polish** (`87ba5c9`) — pickup feedback chat line + toast so the
M1 demo's "pick up" target has visible payoff.
**Freeze on landing:** **Freeze on landing:**
- L.2 zone (collision, cell ownership, transition parity, wire authority) - L.2 zone (collision, cell ownership, transition parity, wire authority)
- B.4 zone (interaction outbound) - B.4 zone (interaction outbound)
- B.5 zone (pickup outbound + inbound despawn)
**What "M1 lands" looks like:** the existing Holtburg traversal works as a **What "M1 lands" looks like:** the existing Holtburg traversal works as a
retail player would expect. Doorways are walkable. Buildings have solid retail player would expect. Doorways are walkable. Buildings have solid
walls. Outdoor cell seams report the right cell. Clicking an NPC selects it walls. Outdoor cell seams report the right cell. Clicking an NPC selects it
and sends a usable selection state to the server. The Use action opens doors. and produces NPC chat. The Use action opens doors. F picks up items at
close range and the player sees "You pick up the X." in chat.
--- ---