NEO-142: document faction HUD and manual QA checklist
Add client README section, NEO-142 manual QA steps, and plan reconciliation.pull/182/head
parent
c8c706f839
commit
84bd46635d
|
|
@ -251,6 +251,21 @@ Full checklist: [`docs/manual-qa/NEO-122.md`](../docs/manual-qa/NEO-122.md).
|
|||
|
||||
Full checklist: [`docs/manual-qa/NEO-131.md`](../docs/manual-qa/NEO-131.md).
|
||||
|
||||
## Faction standing + gate feedback HUD (NEO-142)
|
||||
|
||||
- **`GET /game/players/{id}/faction-standing`** — server-authoritative per-faction **`standing`** snapshot (NEO-139); see [server README — Faction standing read](../server/README.md#faction-standing-read-neo-139).
|
||||
- **`GET /game/world/quest-definitions`** — gated quests expose optional **`factionGateRules`** (`factionId`, `minStanding`) for readable accept deny copy (NEO-140).
|
||||
- **`GET /game/players/{id}/quest-progress`** — completed rows may include **`completionRewardSummary.reputationGrants`** (`factionId`, `amount`) (NEO-140).
|
||||
- **Scripts:** `scripts/faction_standing_client.gd`, `scripts/quest_hud_controller.gd` (standing label + gate deny + rep reward lines), `scripts/quest_definitions_client.gd` (**`faction_gate_rules_for`**).
|
||||
- **HUD:**
|
||||
- **`UICanvas/HudRootScroll/HudRoot/FactionStandingLabel`** — both prototype factions with readable names + standing values; default **0** before first GET.
|
||||
- **`QuestAcceptFeedbackLabel`** — **`faction_gate_blocked`** renders readable gate copy (e.g. **`Grid Operators standing 15 required (have 0)`**); other deny codes unchanged (NEO-122).
|
||||
- **`QuestRewardDeliveryLabel`** — adds **`reputationGrants`** lines (e.g. **`Grid Operators +15 rep`**) on completion transition (NEO-131).
|
||||
- **Refresh:** boot hydrate + faction GET after in-session quest completion transition (rep grants apply on completion). No periodic poll.
|
||||
- **Errors:** failed faction-standing GET shows **`error — …`** on **`FactionStandingLabel`**; defaults remain visible at **0**.
|
||||
|
||||
Full checklist: [`docs/manual-qa/NEO-142.md`](../docs/manual-qa/NEO-142.md).
|
||||
|
||||
## End-to-end quest reward loop (NEO-132)
|
||||
|
||||
Epic 7 Slice 2 capstone — complete all four prototype quests **in Godot** and verify quest completion bundles (skill XP + item grants) apply **once** with idempotent replay.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
# NEO-142 — Manual QA checklist
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Key | NEO-142 |
|
||||
| Title | E7M3-10: Client faction standing + gate feedback HUD (Godot) |
|
||||
| Linear | https://linear.app/neon-sprawl/issue/NEO-142/e7m3-10-client-faction-standing-gate-feedback-hud-godot |
|
||||
| Plan | `docs/plans/NEO-142-implementation-plan.md` |
|
||||
| Branch | `NEO-142-client-faction-standing-gate-hud` |
|
||||
|
||||
## Preconditions
|
||||
|
||||
- **Fresh dev player:** stop any running server, then start a new instance so quest progress, faction standing, and reward delivery reset.
|
||||
- **No Bruno/curl** for this checklist — use Godot gameplay only.
|
||||
- NEO-139 **`GET /game/players/{id}/faction-standing`** and NEO-140 quest HTTP rep/gate projections landed on `main`.
|
||||
- NEO-122 quest HUD + NEO-131 reward HUD landed on `main`.
|
||||
|
||||
## Expected HUD progression
|
||||
|
||||
| After | `FactionStandingLabel` | `QuestAcceptFeedbackLabel` |
|
||||
|-------|------------------------|----------------------------|
|
||||
| Boot | `Grid Operators: 0`, `Rust Collective: 0` | idle accept hint |
|
||||
| Operator chain completes | `Grid Operators: 15` | unchanged |
|
||||
| Accept grid contract before rep (after chain complete, standing still 0) | still `0` until chain rep lands | readable gate deny with required standing |
|
||||
| Accept grid contract at standing 15 | unchanged | accept succeeds |
|
||||
|
||||
## Checklist
|
||||
|
||||
1. Start server: `cd server/NeonSprawl.Server && dotnet run`.
|
||||
2. Run Godot main scene (**F5**). Confirm **`FactionStandingLabel`** appears below **`QuestRewardDeliveryLabel`** with both factions at **0**.
|
||||
3. Follow [NEO-123](NEO-123.md) through **`prototype_quest_operator_chain`** completion (or use the operator-chain segment from [NEO-131](NEO-131.md) step 6).
|
||||
4. Verify **`FactionStandingLabel`** updates to **`Grid Operators: 15`** (Rust Collective still **0**).
|
||||
5. Verify **`QuestRewardDeliveryLabel`** on operator-chain completion includes **`Grid Operators +15 rep`** (alongside item/skill lines when present).
|
||||
6. Verify readable **`faction_gate_blocked`** copy via GdUnit (`client/test/faction_standing_hud_test.gd`) — normal Godot gameplay completes operator chain with **+15** rep atomically, so live accept of **`prototype_quest_grid_contract`** succeeds at standing **15** rather than denying. Optional server dev setup: `POST …/__dev/quest-fixture` with **`completedQuestIds: [prototype_quest_operator_chain]`** and faction reset (see Bruno seq 10) then attempt grid-contract accept in Godot — expect **`Grid Operators standing 15 required (have 0)`** on **`QuestAcceptFeedbackLabel`**.
|
||||
7. Accept **`prototype_quest_grid_contract`** when **`Grid Operators: 15`**. Verify accept succeeds.
|
||||
8. Optional: stop server while Godot running; confirm **`FactionStandingLabel`** shows **`error — …`** while quest labels keep NEO-122 sync error behavior.
|
||||
|
||||
## Regression spot-check
|
||||
|
||||
- [NEO-122](NEO-122.md) — quest progress + accept HUD unchanged except new label below reward label.
|
||||
- [NEO-131](NEO-131.md) — reward label transition-only behavior unchanged except rep grant lines.
|
||||
|
||||
**Full-flow capstone:** [NEO-143](NEO-143.md) extends this with end-to-end Slice 3 faction reputation verification.
|
||||
|
|
@ -52,6 +52,15 @@ Player sees faction standing and accept gate denials in Godot without Bruno.
|
|||
- [ ] Standing visible after operator-chain completion (+15 Grid Operators).
|
||||
- [ ] Accepting grid contract below rep shows readable deny copy on HUD.
|
||||
|
||||
## Implementation reconciliation (in progress)
|
||||
|
||||
- **`faction_standing_client.gd`:** GET parse v1, prototype display names, `faction_row` / `standing_for`, pending sync.
|
||||
- **`quest_definitions_client.gd`:** `faction_gate_rules_for` helper.
|
||||
- **`quest_hud_controller.gd`:** `FactionStandingLabel` render; boot + completion refresh; readable `faction_gate_blocked` deny; `reputationGrants` reward lines.
|
||||
- **`main.gd` / `main.tscn`:** `FactionStandingClient` + `FactionStandingLabel` wired into quest HUD setup.
|
||||
- **Tests:** `faction_standing_client_test.gd`, `faction_standing_hud_test.gd`; `quest_reward_hud_test.gd` rep line assertion.
|
||||
- **Docs:** `client/README.md`; `docs/manual-qa/NEO-142.md`.
|
||||
|
||||
## Technical approach
|
||||
|
||||
### 1. Server contracts (landed — NEO-139 / NEO-140)
|
||||
|
|
|
|||
Loading…
Reference in New Issue