# NEO-75 — Manual QA checklist | Field | Value | |-------|-------| | Key | NEO-75 | | Title | E3: Playable gather→refine→make loop in client (E3S5-04) | | Linear | https://linear.app/neon-sprawl/issue/NEO-75/e3-playable-gatherrefinemake-loop-in-client-e3s5-04 | | Plan | `docs/plans/NEO-75-implementation-plan.md` | | Branch | `NEO-75-e3-playable-gather-refine-make-loop` | ## Preconditions - **Fresh dev player:** stop any running server, then start a new instance so in-memory **`dev-local-1`** inventory, skills, and resource-node depletion reset. - **No Bruno/curl seeding** for this checklist — all materials come from in-client gather (**R**). - NEO-72 inventory HUD, NEO-73 gather feedback, NEO-74 craft UI landed on the same branch or `main`. ## Material math | Step | Action | Scrap | Plates | Result | |------|--------|-------|--------|--------| | Gather ×4 | **R** at four anchors (below) | **+11** | — | 11 scrap | | Refine #1 | Craft **`refine_scrap_standard`** | −5 | +1 | 6 scrap, 1 plate | | Refine #2 | Craft **`refine_scrap_standard`** | −5 | +1 | 1 scrap, 2 plates | | Make | Craft **`make_field_stim_mk0`** | −1 | −2 | **`field_stim_mk0` ×1** | ## Checklist 1. Start server: `cd server/NeonSprawl.Server && dotnet run`. 2. Run Godot main scene (**F5**). Confirm **`Economy HUD`** toggle is **on**; **`InventoryLabel`** shows empty bag; **`SkillProgressionLabel`** shows **`salvage`** and **`refine`** rows. 3. **WASD** to **`prototype_resource_node_alpha`** anchor **(12, −6)**. Press **R** once. **`GatherFeedbackLabel`** shows **`+1`** scrap delta; inventory scrap updates without **I**; **`salvage`** xp increases. 4. Walk to **`prototype_subsurface_vein_beta`** **(18, −6)**; press **R** (**+2** scrap). Repeat at **`prototype_bio_mat_gamma`** **(12, 0)** (**+3**) and **`prototype_urban_bulk_delta`** **(18, 0)** (**+5**). Inventory shows **11** scrap total. 5. In the recipe panel, click **Craft** on **`refine_scrap_standard`**. **`CraftFeedbackLabel`** shows success; inventory shows **6** scrap and **1** **`refined_plate_stock`**; **`refine`** xp increases. 6. Click **Craft** on **`refine_scrap_standard`** again. Inventory shows **1** scrap and **2** plates. 7. Click **Craft** on **`make_field_stim_mk0`**. Success feedback shows **`field_stim_mk0`** output; **`InventoryLabel`** lists **`Field Stim Mk0`** (or agreed display name) with quantity **≥ 1**; **`refine`** xp increases again. 8. Uncheck **`Economy HUD`** — inventory, skills, and recipe panel hide; gather/craft feedback labels above remain visible. Check **`Economy HUD`** again — panel repopulates with current data. ## Notes - **R** posts the **nearest in-range** `resource_node`; walk to each anchor before pressing **R** (see [NEO-73 manual QA](NEO-73.md) for anchor coords). - Re-run this checklist after a **server restart** (nodes deplete; inventory persists only in memory). - Combat **use** of **`field_stim_mk0`** is out of scope (E5 follow-up). ## Acceptance - [ ] Steps 1–8 completable in one session without Bruno/curl. - [ ] **`field_stim_mk0`** quantity **≥ 1** in inventory at step 7. - [ ] **Salvage** xp moved after gather; **refine** xp moved after each successful craft.