44 lines
3.3 KiB
Markdown
44 lines
3.3 KiB
Markdown
# 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**) — may lag **`QuestRewardDeliveryLabel`** rep line by one faction-standing GET round-trip; confirm both within a moment after operator-chain completion.
|
|
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 [NEO-132](NEO-132.md) with end-to-end Slice 3 faction reputation verification (operator chain **+15** → grid contract **+10** → idempotency). Gate deny remains component QA here (step 6).
|