1.8 KiB
1.8 KiB
NEO-28 — Manual QA checklist
| Field | Value |
|---|---|
| Key | NEO-28 |
| Title | E1M4-03: Combat accept/deny integration + reason-code UX |
| Linear | https://linear.app/neon-sprawl/issue/NEO-28/e1m4-03-combat-acceptdeny-integration-reason-code-ux |
| Plan | docs/plans/NEO-28-implementation-plan.md |
1) Server + Bruno
- Start server:
cd server/NeonSprawl.Server && dotnet run. curl -s http://localhost:5253/healthreturns JSON withstatus: ok.- Happy path (same order as folder seq):
Post hotbar bind slot0 pulse→Post target select alpha before cast→Post cast happy— castaccepted: true. Post cast happyalone (no target select in session) — expectaccepted: false,reasonCode: invalid_target(or runcurlwith loadout + no lock).- After lock + loadout,
curlcast withtargetId: prototype_target_betawhile lock is alpha —invalid_target. - After lock + loadout, move player far from alpha (
POST …/move-streamwith a distant position), then cast with alpha —out_of_range.
2) Client — HUD
- With server running, open main scene; hydrate hotbar (NEO-29); bind slot 0 to
prototype_pulseif needed. - Without Tab lock, press 1: left HUD
CastFeedbackLabelshowsability_cast_denied: invalid_target(or equivalent); Output may still showability_cast_deniedwarning. - Tab to lock alpha; press 1:
CastFeedbackLabelshowsCast: accepted; Output still printsability_cast_requestedwhen POST queued. - WASD until target HUD shows
Validity: out_of_range(soft lock); press 1:CastFeedbackLabelshowsability_cast_denied: out_of_range.