diff --git a/docs/manual-qa/NEO-140.md b/docs/manual-qa/NEO-140.md deleted file mode 100644 index 6421cce..0000000 --- a/docs/manual-qa/NEO-140.md +++ /dev/null @@ -1,40 +0,0 @@ -# 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. diff --git a/docs/plans/NEO-140-implementation-plan.md b/docs/plans/NEO-140-implementation-plan.md index 641d413..be56640 100644 --- a/docs/plans/NEO-140-implementation-plan.md +++ b/docs/plans/NEO-140-implementation-plan.md @@ -63,9 +63,7 @@ Client can see gate requirements and completion rep summary without local math. - **Quest progress GET:** `QuestProgressApi.MapCompletionRewardSummary` maps `RewardDeliveryEvent.GrantedReputation` → `reputationGrants` (`QuestReputationGrantJson`: `factionId`, `amount`); required array when summary present. - **Accept POST:** inherits updated mapper via `QuestProgressApi.MapQuestProgressRow` — no accept-specific changes. - **Tests:** `QuestDefinitionsWorldApiTests` grid-contract gate row + wire-level `factionGateRules` omission; `QuestProgressApiTests` operator-chain +15 rep, grid-contract +10 rep, gather-intro empty rep; **823** tests green. -- **Bruno:** extended `Get quest definitions.bru`; new `Get quest progress after operator chain complete.bru`; gather-intro bru asserts empty `reputationGrants`. -- **Docs:** `server/README.md` quest-definitions + quest-progress sections; E7.M3 module + alignment register updated. -- **Manual QA:** [`docs/manual-qa/NEO-140.md`](../manual-qa/NEO-140.md). +- **Manual QA:** none — server-only HTTP projections; Bruno + `dotnet test` cover verification (manual QA checklists reserved for client-facing stories per project convention). ## Technical approach diff --git a/docs/reviews/2026-06-17-NEO-140.md b/docs/reviews/2026-06-17-NEO-140.md index c9f38d4..5657a8f 100644 --- a/docs/reviews/2026-06-17-NEO-140.md +++ b/docs/reviews/2026-06-17-NEO-140.md @@ -23,7 +23,7 @@ This branch lands **E7M3-08**: additive HTTP projections so clients can read fac | `docs/decomposition/modules/E7_M3_FactionReputationLedger.md` | **Matches** — Status line notes E7M3-08 landed (NEO-140). | | `docs/decomposition/modules/documentation_and_implementation_alignment.md` | **Matches** — E7.M3 row updated with quest HTTP projection links. | | `docs/decomposition/modules/module_dependency_register.md` | **N/A change** — no register row edit required beyond module doc / alignment table. | -| `docs/manual-qa/NEO-140.md` | **Matches** — Bruno + curl checklist covers gate rules and rep summary assertions. | +| `docs/manual-qa/NEO-140.md` | **Removed post-merge** — server-only story; manual QA reserved for client-facing work (story-end decision). | | `server/README.md` | **Matches** — Quest-definitions and quest-progress sections document new fields with NEO-140 cross-links. | ## Blocking issues @@ -48,7 +48,7 @@ None. cd /Users/don/neon-sprawl && dotnet test NeonSprawl.sln ``` -Manual (see `docs/manual-qa/NEO-140.md`): +Manual (Bruno — no separate manual QA doc for this server-only story): - `cd server/NeonSprawl.Server && dotnet run` - Bruno: `quest-definitions/Get quest definitions`