41 lines
2.7 KiB
Markdown
41 lines
2.7 KiB
Markdown
# NEO-140 — Manual QA checklist
|
|
|
|
| Field | Value |
|
|
|-------|-------|
|
|
| Key | NEO-140 |
|
|
| Title | E7M3-08: Extend quest HTTP projections for rep + gates |
|
|
| Linear | https://linear.app/neon-sprawl/issue/NEO-140/e7m3-08-extend-quest-http-projections-for-rep-gates |
|
|
| Plan | `docs/plans/NEO-140-implementation-plan.md` |
|
|
| Branch | `NEO-140-e7m3-quest-http-rep-gate-projections` |
|
|
|
|
## Preconditions
|
|
|
|
- Server running: `cd server/NeonSprawl.Server && dotnet run` (in-memory dev player `dev-local-1`).
|
|
- Bruno collection `bruno/neon-sprawl-server` loaded with `baseUrl` = `http://localhost:5253`, `playerId` = `dev-local-1`.
|
|
- NEO-138 reward router rep grants and NEO-139 faction-standing GET landed on `main`.
|
|
|
|
## Setup sanity
|
|
|
|
- [ ] `curl -sS http://localhost:5253/health` returns `"status":"ok"`.
|
|
- [ ] `dotnet test NeonSprawl.sln` passes (821+ tests).
|
|
|
|
## Quest definitions — factionGateRules
|
|
|
|
- [ ] Run Bruno **`quest-definitions/Get quest definitions`**. Response **200**; `prototype_quest_grid_contract.factionGateRules` = `[{ factionId: prototype_faction_grid_operators, minStanding: 15 }]`.
|
|
- [ ] Same response: `prototype_quest_gather_intro` and `prototype_quest_operator_chain` have **no** `factionGateRules` key.
|
|
- [ ] `curl -sS http://localhost:5253/game/world/quest-definitions | jq '.quests[] | select(.id=="prototype_quest_grid_contract") | .factionGateRules'` matches the Bruno assertion.
|
|
|
|
## Quest progress — completionRewardSummary.reputationGrants
|
|
|
|
- [ ] Run Bruno **`quest-progress/Get quest progress after gather intro complete`**. Gather row `completionRewardSummary.reputationGrants` = `[]`.
|
|
- [ ] Run Bruno **`quest-progress/Get quest progress after operator chain complete`**. Operator-chain row `completionRewardSummary.reputationGrants` = `[{ factionId: prototype_faction_grid_operators, amount: 15 }]`; item and skill XP lines unchanged from NEO-129 freeze.
|
|
- [ ] Second GET in the operator-chain bru matches the first (idempotent summary).
|
|
|
|
## No regressions
|
|
|
|
- [ ] Bruno **`faction-standing/Get faction standing after operator chain`** still shows Grid Operators standing **15** after operator-chain flow.
|
|
- [ ] Bruno **`quest-progress/Accept grid contract after operator chain`** accepts grid contract when rep gate met and embedded row **`completionRewardSummary.reputationGrants`** = `[{ factionId: prototype_faction_rust_collective, amount: 10 }]`.
|
|
- [ ] NEO-129 gather-intro **`completionRewardSummary`** shape unchanged except new empty **`reputationGrants`** array.
|
|
|
|
**Client HUD verification** deferred to [NEO-142 (Godot HUD)](https://linear.app/neon-sprawl/issue/NEO-142/e7m3-10-client-faction-standing-gate-feedback-hud-godot) — this story is server HTTP projection only.
|