# Manual QA — NEO-41 (gather → skill XP via interact) Reference: [implementation plan](../plans/NEO-41-implementation-plan.md), [NEO-38](./NEO-38.md) (skill progression grant), [NEO-9 README — Interaction](../../server/README.md#interaction-neo-9). ## Preconditions - Run `NeonSprawl.Server` from `server/NeonSprawl.Server` (`dotnet run`; default `http://localhost:5253`). - Player **`dev-local-1`** (default seed). ```bash BASE=http://localhost:5253 ID=dev-local-1 ``` ## Move in range of the prototype resource node Anchor **(12, −6)** on X/Z, radius **3** m. Example stand at **(10, −6)**: ```bash curl -sS -i -X POST "${BASE}/game/players/${ID}/move" \ -H "Content-Type: application/json" \ -d '{"schemaVersion":1,"target":{"x":10,"y":0.9,"z":-6}}' ``` Expect **HTTP 200**. ## Baseline skill progression (optional) ```bash curl -sS "${BASE}/game/players/${ID}/skill-progression" ``` Note **`salvage`** **`xp`** (often **0** on a fresh store). ## Gather interact (prototype) ```bash curl -sS -i -X POST "${BASE}/game/players/${ID}/interact" \ -H "Content-Type: application/json" \ -d '{"schemaVersion":1,"interactableId":"prototype_resource_node_alpha"}' ``` Expect **HTTP 200**, **`allowed`:** **true**. ## Verify XP ```bash curl -sS "${BASE}/game/players/${ID}/skill-progression" ``` **`salvage`** **`xp`** should increase by **10** per successful gather interact (repeat interact to see cumulative XP). ## Control — terminal does not grant gather XP Move near **`prototype_terminal`** (e.g. target **`0.5`, `0.9`, `0.5`**), **`POST …/interact`** with **`prototype_terminal`**, then GET progression: **`salvage`** XP should match whatever you had before this control (no +10 from terminal alone).