5.6 KiB
5.6 KiB
NEO-111 — Manual QA checklist
| Field | Value |
|---|---|
| Key | NEO-111 |
| Title | E5M3-12: Playable encounter clear capstone (Godot) |
| Linear | https://linear.app/neon-sprawl/issue/NEO-111/e5m3-12-playable-encounter-clear-capstone-godot |
| Plan | docs/plans/NEO-111-implementation-plan.md |
| Branch | NEO-111-playable-encounter-clear-capstone |
Preconditions
- Fresh dev player: stop any running server, then start a new instance so in-memory
dev-local-1NPC HP, encounter progress, inventory, and gig XP reset. - No Bruno/curl for this checklist — defeat chain uses Godot Tab + 1 only.
- NEO-110 encounter HUD, NEO-106 combat wiring, and NEO-108 encounter-progress GET landed on
main. Economy HUDtoggle on for inventory verification.
Archetype reference (defeat order flexible)
| Archetype | Instance id | Marker | Pulses to defeat |
|---|---|---|---|
| Melee | prototype_npc_melee |
orange west (-3, -3) |
4 |
| Ranged | prototype_npc_ranged |
purple SE (3, 3) |
4 |
| Elite | prototype_npc_elite |
gold origin (0, 0) |
8 |
Player casts prototype_pulse (25 damage, ~3 s cooldown). Defeat all three in any order — server tracks an order-independent subset.
Expected encounter HUD progression
| After | EncounterProgressLabel |
EncounterCompleteLabel |
|---|---|---|
| Boot (no engagement) | prototype_combat_pocket: not started (0/3) |
Loot: — |
| 1st NPC defeated | prototype_combat_pocket: 1/3 |
Loot: — |
| 2nd NPC defeated | prototype_combat_pocket: 2/3 |
Loot: — |
| 3rd NPC defeated | prototype_combat_pocket: completed (3/3) |
scrap_metal_bulk ×10 and contract_handoff_token ×1 (display names when item defs loaded) |
| After Godot restart (idempotency) | still completed (3/3) |
unchanged grant lines |
Expected inventory after completion
On a fresh server restart the bag starts empty. After the third defeat, InventoryLabel should show at least:
| Item id | Quantity |
|---|---|
scrap_metal_bulk |
10 |
contract_handoff_token |
1 |
Record these quantities before idempotency steps.
Expected gig XP after three defeats
GigXpLabel should show breach: L1 · 75 xp (NEO-44: 25 gig XP per defeat × 3). No further gig XP increase during idempotency steps.
Checklist
Boot + encounter clear
- Start server:
cd server/NeonSprawl.Server && dotnet run. - Run Godot main scene (F5). Confirm boot lines:
Encounter: … not started (0/3)andLoot: —onEncounterProgressLabel/EncounterCompleteLabel(combat HUD block, belowPlayerCombatHpLabel). - Defeat first prototype NPC (any archetype): walk to marker, Tab lock, press 1 until
Cast: … — defeated!. VerifyEncounterProgressLabelshows1/3(may lag one GET behind cast — wait ~1 s). - Defeat second prototype NPC (either remaining archetype): lock, cast until defeated. Verify
2/3. - Defeat third prototype NPC: lock, cast until defeated (8 pulses for Elite). Verify
completed (3/3)andEncounterCompleteLabellistsscrap_metal_bulk ×10andcontract_handoff_token ×1(or raw ids if defs still loading). - Open
Economy HUDbody:InventoryLabelshowsscrap_metal_bulk(10) andcontract_handoff_token(1) without pressing I (auto-refresh on completion GET). - Verify
GigXpLabelshowsbreach: L1 · 75 xp.
Idempotency
- Record inventory quantities for
scrap_metal_bulkandcontract_handoff_tokenfrom step 6. - Godot restart (re-login): stop Godot run (Shift+F5 or stop button); F5 again without stopping the server. After boot hydrate, verify
EncounterProgressLabelstillcompleted (3/3)andEncounterCompleteLabelgrant lines unchanged. - Verify
InventoryLabelquantities match step 8 — no duplicate loot. - Lock a defeated NPC (Tab at its marker); press 1. Verify
CastFeedbackLabelshowsability_cast_denied: target_defeated; encounter HUD and inventory unchanged from steps 9–10. - Verify
GigXpLabelstillbreach: L1 · 75 xp— no extra gig XP from idempotency casts.
Regression
CastFeedbackLabelstill shows readable deny reasons (NEO-28 / NEO-98).- Component encounter HUD detail: NEO-110 manual QA. Component NPC combat: NEO-98 manual QA.
Notes
- Defeat order may differ from the archetype table — only 0/3 → 3/3 progression is asserted.
- Capstone baseline prefers server restart over mid-session fixture POST.
POST /game/__dev/combat-targets-fixtureis out of scope for idempotency — it clears encounter progress/completion alongside NPC HP reset (server README — dev combat-target fixture).- Slice 3 Epic AC: completing
prototype_combat_pocketgrants expected items + quest token once (epic_05 Slice 3).
Acceptance
- Steps 1–14 completable in one session without Bruno/curl.
- Progress label shows 1/3, 2/3, then completed (3/3) after three defeats (any order).
- Loot label and inventory show
scrap_metal_bulk×10 +contract_handoff_token×1; quantities unchanged after Godot restart + defeated-NPC casts. - Epic 5 Slice 3 AC satisfied in Godot.