# NEO-72 — Manual QA checklist | Field | Value | |-------|-------| | Key | NEO-72 | | Title | E3.M3: Client inventory snapshot HUD (E3S5-01) | | Linear | https://linear.app/neon-sprawl/issue/NEO-72/e3m3-client-inventory-snapshot-hud-e3s5-01 | | Plan | `docs/plans/NEO-72-implementation-plan.md` | | Branch | `NEO-72-client-inventory-snapshot-hud` | ## Preconditions - Server running with default dev player (`dev-local-1`) and item catalog loaded (NEO-51–NEO-55 on `main`). ## Checklist 1. Start server: `cd server/NeonSprawl.Server && dotnet run`. 2. Run Godot main scene (**F5**). **`InventoryLabel`** (below cooldown HUD) shows **`Inventory: (refresh: I)`**, **`Bag: (empty)`**, and **`Equipment:`** / **`slot 0: — empty`** on a fresh dev player. 3. Seed inventory via Bruno or curl: ```bash curl -sS -X POST "http://localhost:5253/game/players/dev-local-1/inventory" \ -H "Content-Type: application/json" \ -d '{"schemaVersion":1,"mutationKind":"add","itemId":"scrap_metal_bulk","quantity":5}' ``` 4. Press **`I`** (or **`inventory_refresh`**). HUD lists occupied bag slot with **`Scrap Metal (Bulk) x5`** (display name from NEO-53 defs). 5. Stop the server; press **`I`**. HUD shows **`error — …`** and Output shows **`InventoryClient:`** **`push_warning`**. 6. Restart server; press **`I`** again — HUD returns to synced inventory lines. ## Notes - **`I`** is handled in **`main.gd`** **`_unhandled_key_input`** (same reliability pattern as **E** / **R** interact keys). - POST inventory mutations from UI are out of scope; use Bruno/curl to seed stock for this story.