56 lines
4.1 KiB
Markdown
56 lines
4.1 KiB
Markdown
# 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** accept refine (after gather complete) | **`Intro: Refine Stock: active step 1`** | **`Quest accept: Intro: Refine Stock 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 refine quest becomes **`active`**.
|
||
7. Open **Economy HUD** recipe panel — **Refine Scrap (Standard)** is the **first** row (scroll starts at top). Craft when **≥5** scrap in bag.
|
||
8. Craft **`refine_scrap_standard`** with Economy HUD open. Verify refine quest **`completed`** after successful craft.
|
||
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
|
||
|
||
- Combat intro (**`prototype_quest_combat_intro`**) has no prerequisites — **Shift+Q** may offer it before refine if gather is still active; server deny is authoritative when prerequisites block accept.
|
||
- Full four-quest chain capstone: [NEO-123 manual QA](NEO-123.md).
|
||
- Encounter progress HUD regression: [NEO-110 manual QA](NEO-110.md).
|
||
|
||
## Acceptance
|
||
|
||
- [ ] Steps 1–9 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 7–8 (recipes first row, no overlap with quest labels).
|