# NEO-37 — Manual QA checklist

| Field | Value |
|-------|-------|
| Key | NEO-37 |
| Title | Skill progression snapshot (read model) |
| Linear | https://linear.app/neon-sprawl/issue/NEO-37/skill-progression-snapshot-read-model |
| Plan | `docs/plans/NEO-37-implementation-plan.md` |
| Branch | `NEO-37-skill-progression-snapshot-read-model` |

## Preconditions

- Server running with default dev player seeded (same as other **`/game/players/dev-local-1/...`** flows).
- Skill catalog loaded (prototype trio); **`skills`** is key-by-**`id`** (array order is not contractual).

## Checklist

1. Start **`NeonSprawl.Server`** (e.g. `dotnet run` from `server/NeonSprawl.Server`).
2. **`GET /game/players/dev-local-1/skill-progression`** — expect **200** and **`Content-Type`** containing **`application/json`**.

   ```bash
   curl -sS -i "http://localhost:5253/game/players/dev-local-1/skill-progression"
   ```

3. Parse JSON — **`schemaVersion`** **1**, **`playerId`** **`dev-local-1`**, **`skills`** length **3** with **`id`**s **`intrusion`**, **`refine`**, **`salvage`** (any order); each row **`xp`** **0**, **`level`** **1**.
4. Unknown player — **`GET /game/players/missing-player/skill-progression`** — expect **404**.
5. Optional: run **`bruno/neon-sprawl-server/skill-progression/Get skill progression.bru`** (see `environments/Local.bru` for **`{{baseUrl}}`**).
