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

1.7 KiB

Manual QA — NEO-32 (CooldownSnapshot + slot HUD)

Prereq: game server running (NeonSprawl.Server), client pointed at same base_url / dev_player_id as dev player with position + hotbar seed.

  1. Cooling HUD after accept — Tab-lock a prototype target in range, bind slot 0 to prototype_pulse if needed, press 1 to cast. Expect Cast: accepted and Cooldowns: line to show slot 0: ~3.0s (counts down). After ~3s expect Cooldowns: (ready).

  2. Server deny on spam — Immediately double-tap cast during cooling (or remove client guard temporarily): second attempt should show ability_cast_denied: on_cooldown (server) on the cast feedback line when POST completes.

  3. Client guard — While slot 0 shows cooling, press 1 repeatedly. Expect ability_cast_denied: on_cooldown (client guard) on CastFeedbackLabel on most presses (local mirror blocks the POST). Optional: run the server with NEON_SPRAWL_API_LOG=1 (or launch profile http+apiLog) — each cast that reaches the server and returns JSON prints [ability-cast] ability_cast_denied … or ability_cast_requested to the process console, so rapid 1 with the guard on should produce fewer lines than without the guard. Optional proof the server still enforces cooldown: in Bruno (or curl), send POST …/ability-cast twice in a row with the same valid body while the snapshot still shows slot 0 cooling — second response accepted": false, reasonCode": "on_cooldown" (same contract as step 2).

  4. Reconnect / rehydrate — With slot 0 mid-cooldown, restart the client (or reload scene) while server keeps running; after boot expect cooldown line to match server within one GET cycle (same dev player id).