# 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).
