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

7.7 KiB
Raw Blame History

NEO-132 — Manual QA checklist

Field Value
Key NEO-132
Title E7M2-09: Playable quest reward delivery capstone (Godot)
Linear https://linear.app/neon-sprawl/issue/NEO-132/e7m2-09-playable-quest-reward-delivery-capstone-godot
Plan docs/plans/NEO-132-implementation-plan.md
Branch NEO-132-playable-quest-reward-delivery-capstone

Preconditions

  • Fresh dev player: stop any running server, then start a new instance so in-memory quest progress, IRewardDeliveryStore, inventory, skill progression, encounter progress, NPC HP, and resource-node depletion reset.
  • No Bruno/curl for this checklist — accept uses Q / Shift+Q; gameplay uses R, Tab + 1, and Economy HUD Craft buttons only.
  • NEO-124NEO-131 reward spine and NEO-123 onboarding capstone landed on main.
  • Economy HUD toggle on for inventory + skill verification.

Quest completion reward freeze (E7M2-01)

Quest id Display name Bundle grants Expected QuestRewardDeliveryLabel
prototype_quest_gather_intro Intro: Salvage Run salvage +25 XP Salvage +25 XP
prototype_quest_combat_intro Intro: Clear the Pocket salvage +25 XP Salvage +25 XP
prototype_quest_refine_intro Intro: Refine Stock refine +25 XP Refine +25 XP
prototype_quest_operator_chain Operator Chain survey_drone_kit ×1 + salvage +50 XP Survey Drone Kit ×1 + Salvage +50 XP

Encounter loot (unchanged — E5.M3): combat pocket still grants scrap_metal_bulk ×10 + contract_handoff_token ×1 on EncounterCompleteLabel, not quest bundles.

Skill XP verification method

Record SkillProgressionLabel salvage/refine xp values immediately before each quest completion transition and after the HUD refreshes. Assert the delta matches the freeze table (+25 or +50 for salvage; +25 for refine). Gather/craft activity XP may also change totals — deltas per quest completion are authoritative.

Expected HUD progression (extends NEO-123)

Phase QuestProgressLabel QuestRewardDeliveryLabel Economy HUD
Boot All four not started Quest rewards: / salvage/refine xp 0 (fresh server)
Gather intro completed Salvage Run completed Intro: Salvage Run + Salvage +25 XP salvage xp +25 delta
Combat intro completed Clear the Pocket completed Intro: Clear the Pocket + Salvage +25 XP salvage xp +25 delta
Refine intro completed Refine Stock completed Intro: Refine Stock + Refine +25 XP refine xp +25 delta
Operator chain completed Operator Chain completed Survey Drone Kit ×1 + Salvage +50 XP bag has survey_drone_kit; salvage xp +50 delta
Godot restart All four still completed (no transition replay) counts unchanged
Duplicate accepts Unchanged Unchanged counts unchanged

Checklist

Follow NEO-123 for accept order, anchors, material math, and quest steps 115. Extend each completion with reward + economy checks below.

Boot

  1. Start server: cd server/NeonSprawl.Server && dotnet run.
  2. Run Godot main scene (F5). Confirm four quests not started, QuestRewardDeliveryLabel shows Quest rewards: / , and SkillProgressionLabel shows salvage/refine xp 0 (fresh server).

Intro: Salvage Run (gather + skill XP reward)

  1. Press Q; gather at gamma (12, 0) once (+3 scrap) until Intro: Salvage Run: completed.
  2. Verify QuestRewardDeliveryLabel: Intro: Salvage Run + Salvage +25 XP.
  3. Verify SkillProgressionLabel: salvage xp increased by 25 vs value recorded before completion (activity gather XP may also apply — quest bundle delta is +25).

Intro: Clear the Pocket (combat + skill XP reward)

  1. Press Shift+Q; defeat all three prototype NPCs (Tab + 1, any order).
  2. Verify EncounterCompleteLabel still lists encounter loot (scrap_metal_bulk ×10, contract_handoff_token ×1) — separate from quest bundle.
  3. Verify Intro: Clear the Pocket: completed on QuestProgressLabel.
  4. Verify QuestRewardDeliveryLabel: Intro: Clear the Pocket + Salvage +25 XP.
  5. Verify SkillProgressionLabel: salvage xp +25 delta since step 5.

Intro: Refine Stock (craft + skill XP reward)

  1. Press Shift+Q; craft refine_scrap_standard when ≥5 scrap in bag.
  2. Verify Intro: Refine Stock: completed.
  3. Verify QuestRewardDeliveryLabel: Intro: Refine Stock + Refine +25 XP.
  4. Verify SkillProgressionLabel: refine xp +25 delta since step 10.

Operator Chain (item + skill XP reward)

  1. Press Shift+Q; complete chain steps 14 per NEO-123 (gather ×5 → refine → stim → token held).
  2. Verify Operator Chain: completed.
  3. Verify QuestRewardDeliveryLabel: Survey Drone Kit ×1 (or raw id fallback) + Salvage +50 XP.
  4. Verify InventoryLabel lists survey_drone_kit (display name when item defs loaded).
  5. Verify SkillProgressionLabel: salvage xp +50 delta since step 14.

Capstone snapshot (record for idempotency)

  1. Record final state:
    • QuestProgressLabel: all four completed
    • SkillProgressionLabel: salvage + refine xp totals
    • InventoryLabel: includes survey_drone_kit; note scrap/plate/token/stim counts

Idempotency (no duplicate reward delivery)

  1. Godot restart: stop Godot (Shift+F5); F5 again without stopping the server.
  2. Verify all four quests still completed; QuestRewardDeliveryLabel is (transition-only).
  3. Verify SkillProgressionLabel and InventoryLabel counts match step 20 exactly.
  4. Press Q on gather intro. Verify Quest accept: denied — already_completed (or already_active).
  5. Press Shift+Q. Verify Quest accept: no eligible quest (or equivalent deny).
  6. Verify economy HUD counts still match step 20 — no duplicate skill XP or items.

Regression

  1. Component reward HUD: NEO-131 manual QA.
  2. Slice 1 quest chain: NEO-123 manual QA.
  3. Encounter loot independence: NEO-110 manual QA.

Notes

  • Shift+Q catalog order matches NEO-123 — combat intro before refine intro after gather completes.
  • Quest completion bundles are idempotent server-side ({playerId}:quest_complete:{questId}); Godot restart must not replay grant copy on QuestRewardDeliveryLabel (NEO-131 transition-only).
  • Economy HUD auto-refreshes on quest completion transition (NEO-132); no manual I required for reward verification.
  • Epic 7 Slice 2 AC: idempotent reward delivery; replays cannot double-claim (epic_07 Slice 2).
  • Faction standing + grid contract: defer to NEO-143 Slice 3 capstone (extends this checklist through prototype_quest_grid_contract).

Acceptance

  • Steps 126 completable in one session without Bruno/curl.
  • All four quest completion bundles visible on QuestRewardDeliveryLabel during in-session transitions.
  • Skill XP deltas and survey_drone_kit in bag match freeze table.
  • Godot restart + duplicate accepts leave economy counts unchanged (no double-claim).
  • Epic 7 Slice 2 AC satisfied in Godot.