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
doorway. Open the inn door. Click an NPC and see selection feedback. Pick
up an item from the ground.
**Phases to ship:**
- **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
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).
- **B.4 / B.4b**`Use` / `UseWithTarget` / `PickUp` interaction.
B.4 (2026-04-28) shipped the wire builders, `SelectionState`,
`WorldPicker`, the input-action enums, and the keybindings — but
*not* the `GameWindow.OnInputAction` handler that ties them
together. As of 2026-05-12, clicking on a door silently does nothing.
**B.4b** is the small follow-up slice (~30-50 LOC) that subscribes
`SelectDblLeft` and routes through pick → BuildUse → send. Once B.4b
lands, the same Holtburg-doorway visual test verifies both L.2g
slice 1 and B.4b in one pass.
**Demo-target status (as of 2026-05-14):**
| # | Target | Status | Evidence |
|---|---|---|---|
| 1 | Walk through Holtburg without getting stuck | ✅ met | L.2a/d/g shipped 2026-05-12; Holtburg doorway verified |
| 2 | Open the inn door | ✅ met | B.4b (interaction) + B.4c (swing animation) shipped 2026-05-13 |
| 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) |
| 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` |
**What's left to formally land M1:**
- Record ~30s demo video of the four-target scenario end-to-end.
- Drop at `docs/milestones/M1-walkable-clickable.mp4`.
- Pin still + one-paragraph writeup at the top of this doc.
- 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:**
- L.2 zone (collision, cell ownership, transition parity, wire authority)
- B.4 zone (interaction outbound)
- B.5 zone (pickup outbound + inbound despawn)
**What "M1 lands" looks like:** the existing Holtburg traversal works as a
retail player would expect. Doorways are walkable. Buildings have solid
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.
---