# 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).