neon-sprawl/docs/manual-qa/NEO-122.md

4.5 KiB
Raw Permalink Blame History

NEO-122 — Manual QA checklist

Field Value
Key NEO-122
Title E7M1-11: Client quest progress + accept HUD (Godot)
Linear https://linear.app/neon-sprawl/issue/NEO-122/e7m1-11-client-quest-progress-accept-hud-godot
Plan docs/plans/NEO-122-implementation-plan.md
Branch NEO-122-client-quest-progress-accept-hud

Preconditions

  • Fresh dev player: stop any running server, then start a new instance so in-memory quest progress resets.
  • No Bruno/curl for this checklist — accept and progress use Godot Q / Shift+Q and gameplay actions only.
  • NEO-119 quest-progress GET, NEO-120 accept POST, and NEO-115 quest-definitions GET landed on main.

Expected quest HUD progression

After QuestProgressLabel QuestAcceptFeedbackLabel
Boot All four quests not started (display names when defs loaded) Quest accept: — (Q gather / Shift+Q next)
Q accept gather Intro: Salvage Run: active step 1 Quest accept: Intro: Salvage Run accepted
Gather scrap (R on resource node ×3) Gather objective counter increases (e.g. gather_intro_obj_scrap=3) unchanged
Gather quest completes Intro: Salvage Run: completed unchanged
Shift+Q after gather complete (catalog order) Intro: Clear the Pocket: active — combat sorts before refine Quest accept: Intro: Clear the Pocket accepted
Craft refine_scrap_standard (Economy HUD) Refine quest completes when recipe succeeds unchanged
Duplicate Q on gather Gather row stays completed Quest accept: denied — already_completed (or already_active)

Checklist

  1. Start server: cd server/NeonSprawl.Server && dotnet run.
  2. Run Godot main scene (F5). Confirm QuestProgressLabel shows four not started lines and QuestAcceptFeedbackLabel shows the idle hint (in HudRootScroll, below encounter loot labels). Economy panel pinned bottom-left (not off-screen).
  3. Press Q. Verify gather intro becomes active step 1 and accept feedback shows success.
  4. Gather scrap until gather quest completes (resource node R). Verify counter updates on QuestProgressLabel after each successful gather (may lag one GET).
  5. Press Shift+Q before gather is complete — verify Quest accept: denied — prerequisite_incomplete for refine (or no eligible quest if refine is not yet eligible).
  6. After gather completes, press Shift+Q. Verify combat intro becomes active (catalog order — combat before refine). Component refine/craft path: complete combat first, then repeat Shift+Q for refine; see NEO-123 capstone for full four-quest order.
  7. Open Economy HUD recipe panel — Refine Scrap (Standard) is the first row (scroll starts at top). After combat intro is completed and refine intro is active, craft when ≥5 scrap in bag.
  8. Craft refine_scrap_standard with Economy HUD open. Verify refine quest completed after successful craft (requires refine intro active from step 6 follow-up Shift+Q).
  9. Press Q again on already-completed gather. Verify deny feedback on QuestAcceptFeedbackLabel without Bruno.
  10. Optional: stop server while Godot running, press Q — verify Quests: error — … or Quest accept: failed — … visible on HUD.
  11. Optional: block GET /game/world/quest-definitions only while progress GET succeeds — verify definitions error — … under QuestProgressLabel with raw quest ids as fallback.
  12. Toggle Economy HUD off/on — debug labels in HudRootScroll remain; recipe repopulate + scroll reset still works.

Notes

  • Shift+Q uses quest-definitions catalog order (ordinal id): after gather intro completes, combat intro is offered before refine intro. Server deny is authoritative when prerequisites block accept.
  • Full four-quest chain capstone (supersedes partial intro path here): NEO-123 manual QA.
  • Encounter progress HUD regression: NEO-110 manual QA.

Acceptance

  • Steps 19 completable in one session without Bruno/curl.
  • Quest status visible after Q accept and updates after gather/craft without manual refresh key.
  • Failed GET/accept shows visible HUD error copy.
  • Economy HUD craft panel visible for step 78 (recipes first row, no overlap with quest labels).