# Combat sandbox validation — 5 October 2026 Scope: initial prototype steps 4–7. Read `COMBAT_SETUP.md` for controls, definitions, and extension points. The implementation is ready for human playtesting; this report does not declare the complete first-stage prototype finished. ## Automated rules Connected Unity 6000.6.4f1 EditMode runner: **91 passed, 0 failed, 0 skipped**. Evidence: `TestResults/combat-final-rules.txt` and `.xml`. Tests cover weapon ownership, cadence, replay, ammo/reload/switch state; shield/health/downing/revival; slots/unlocks/build trade-offs; per-ability cooldown history; movement validation after warp and while downed; and existing session cleanup rules. Initial rules ran red (31 passed, 49 expected failures), then green (80 passed). Review regressions ran red (80 passed, 11 expected failures), then green (91 passed). Corrections include preserving HP percentage on changed builds, no-op equips not healing/resetting, cooldowns following ability IDs across slots, revive release resetting progress, and preserving elapsed movement budget after teleport grace. ## Built-player integration `Tools/Test-Combat.ps1`: **14 passed phases**, no cleanup errors. Latest full report: `TestResults/combat-969de64c5c894621b3f1ab124847c4a5/result.json`. Real free-tier private cloud sessions with two, then four local development players checked shared damage/ammo/defeat, concurrent lethal hits, reload/switch state, malformed/cadence requests, area/melee damage and cover, build trade-offs, shield/haste/dash, downed restrictions, interrupted/continuous revive, reset, movement after warp, locked builds, and client reset rejection. After the final stylesheet-only changes, a rebuilt player joined the Editor host with a temporary installed Multiplayer Tools `NetworkSimulator`: 100 ms packet delay, 10 ms jitter, zero configured loss at the Editor endpoint. Measured transport RTT was 244–250 ms. One rifle shot yielded 130/150 target HP and 29/30 ammo on both host and peer. This proves delayed state agreement, not subjective input feel or lag compensation. Evidence: `TestResults/latency-final/host-evidence.json`, `shot-peer.json`, and `result.json`. The same check then normally deleted the Editor-hosted session: the peer returned to menu, hosted a fresh session, and accepted the former host with two replicated players. Both left cleanly; only the launched test PID was stopped, and the temporary simulator was removed by exiting Play Mode. Evidence: `after-host-deletion.json`, `rehosted.json`, `rejoined.json`, and `editor-rejoin.txt` in that directory. Two earlier full/focused session stress runs failed at remote-host-deletion rehosting with service `RateLimitExceeded`: `TestResults/foundation-2bef865182c84a8b9944b35dc248f41d` and `foundation-72de84f336e74c6d88e94c1ad21d01ef`. These are retained failures, not counted as passes. The slower targeted check above passed without changing session cleanup or service settings. Avoid repeated rapid cloud lifecycle stress when free-tier requests are throttled; the menu reports the failure and permits retry. ## Editor, UI, and build - Incremental setup preserved arena layout, player/material references and GUIDs. Placed NGO scene IDs were verified nonzero/distinct after Editor save/reload. Protocol version 2 rejects old movement-only peers. - Actual 1280x720 menu, scrolled build selection and live combat HUD inspected. Wider 1920x810 UI rendered to a temporary UI target and inspected; this was UI layout evidence rather than a live ultrawide gameplay test. - Reproduced the HP fill sliding beyond its left edge. Added clipping to the progress container/background and positioned its title container. Fresh runtime styles verified live health at 50%, 25%, and 0%; isolated full-health and 50% revive displays verified the full fill, centered text and clipped fill. Evidence screenshots: `Builds/Combat/health-half-reloaded.png`, `health-quarter.png`, `health-empty.png`, `health-full.png`, and `revive-label-fixed.png`. - Latest Windows development build after the validation-tick change: **Succeeded, 0 errors, 2 warnings**, 19.20 seconds; `Builds/Prototype/build-result.txt`. Warnings are Pipeline runtime configuration and the existing development-symbol deprecation. The earlier moving-shot build emitted 513 warnings including template Inference compute-shader variants; cached warning counts vary. No dependency upgrades were made to suppress them. - Editor restored outside Play Mode, not compiling, scene clean, and temporary simulator absent. ## Human acceptance and limits User confirmed the earlier foundation works over multiple networks; exact participant counts were unspecified. This is not evidence that the new combat pass has been human-tested externally. Use the entire current `Builds/Prototype` folder on every PC. Pending human checks: two/four-player separate-network weapon and ability use; aim/recoil/audio feel; build-selector input/readability on target displays; revive usability while moving/under pressure; and loss/jitter behavior beyond this single delay sample. No representative horde performance test exists until enemies are implemented. Movement still uses owner authority with host plausibility checks. Shots use host-accepted positions and host-owned outcomes; there is no full prediction/reconciliation, lag compensation, or production anti-cheat. Reserve ammo is unlimited and all eleven choice abilities are unlocked for testing. Enemies, elites and bosses are now implemented in the expansion below; stage rewards/transitions and saved permanent unlocks remain later work. ## Builds, confirmed feedback and enemy expansion Approved design and three implementation plans are under `Docs/superpowers`; execution evidence is indexed in `EXPANSION_PROGRESS.md`. Current protocol is 5. No packages, Editor versions, billing or service configuration were upgraded. - Rules: **135 passed, 0 failed** (`TestResults/exponential-elite-green.txt/xml`). Observed red/green checkpoints cover split gun/ability stats, six passive behavior triggers, extra-jump limits, normalized dodge, picker selection, actual/clamped damage and critical rules, recent-total expiry, encounter cap/credit, finite pulse/blast/spread checks, extensible state transitions and exponential elite chance. Elite kills do not grow the chance; duplicate deaths cannot grow either counter; reset clears it. - Built encounter suite: **11 passed phases**, no cleanup errors, `TestResults/encounters-5cc35217a4004cc9911f001054a9d42b/result.json`. Two then four distinct authenticated local clients verified pre-run inactivity, large elite navigation/360HP, client mutation rejection, real remote NPC headshot/personal feedback, shared 16-alive cap, 16 unique deaths with one Siphon heal during its ICD, normal-only exponential chance replication, one5000HP four-player boss, fixed boss maximum after a player leaves, completion, reset/alternate4000HP Siege boss, all-downed defeat and reset. AI-enabled cases verified melee damage, central-ruin cover rejection plus visible ranged damage, and Pulse/Siege30-damage resolution once per player/effect. - Existing built combat suite rerun: **17 passed phases**, no cleanup errors, `TestResults/combat-ca25a0add8134aa5928e29ebecaceab9/result.json`. Covers two/four-client split stats, bounded remote jumps, gun cadence/ammo/reload, Nova/Strike, Tempo/Overcharge/Barrier, downing/revive, warp validation, cover, personal headshot totals/expiry/Catalyst and locked-run/client-reset rejection. - Earlier expansion visuals: `Builds/Expansion/picker-hover.png`, `picker-scrolled.png` and `headshot-feedback-visible.png` inspected. Camera captures and readable boss warning inspection are recorded in the execution ledger. Audio cue selection is verified through confirmed-hit routing; subjective listening remains human acceptance. - Final integration build before the warning-marker readability improvement: **Succeeded, 0 errors, 519 warnings**, 24.39 s. Warnings include existing template Inference shader variants, two stripped URP debug shaders, missing optional Pipeline runtime configuration and managed-variant/development-symbol deprecations on opt-in diagnostics. Warning counts vary with cached imports. No package upgrades were made to suppress them. - Final delivered build with readable Siege warning markers: **Succeeded, 0 errors, 8 warnings**, 19.02 s (`Builds/Prototype/build-result.txt`). Cached shader warnings were absent; the optional Pipeline configuration warning and seven development-symbol warnings remain. Actual underfoot Siege markers and Pulse perimeter were inspected at1280x720 (`Builds/Expansion/siege-warning-editor.png`, `pulse-warning-editor.png`). Marker changes affect presentation only; combat/encounter damage logic matches the passing built suites. Editor restored outside Play Mode, not compiling, clean saved arena, original reload options enabled/flags3. Asset metadata scan found no missing `.meta` files. Failed attempts remain retained: first host smoke exposed forbidden native NavMeshPath field initialization (fixed by moving paths to Awake); extra prefab list duplicates were removed. Two initial encounter harness attempts failed on PowerShell array enumeration, not gameplay assertions; helpers were corrected without weakening expected gameplay state. Optional repeated Editor cloud initialization failed under disabled reload settings; a fresh local loopback fixture was used for visual work. These failures are not counted as passes. The automated boss tests prove shared damage/deduplication; pure rules prove height/radius avoidance. Human jump timing, moving out of telegraphs under latency, audio/weapon feel, four separate-network players and representative horde performance still need acceptance. The prototype proves arena encounters; it does not implement a complete stage/rewards/transition/save loop. ## Host strafing-shot regression User reported moving left/right while hosting could miss despite the visible tracer crossing the target. Reproduced the cause: the local camera ray used the current pose, while damage used the older 0.2-second movement sample. Deterministic host regression `TestResults/moving-shots-red.json` showed four strafing weapon misses despite camera-ray hits; stationary shots passed. An implausible jump also consumed ammo before movement was checked. Firing and aimed abilities now obtain a current server-observed action pose after applying the existing movement bounds/speed checks. This does not advance the periodic movement anchor/clock, so firing cannot grant additional travel allowance. Implausible movement is corrected and the action rejected before ammo/cooldown consumption. Existing teleport grace retains its authoritative destination while remote state propagates. Green evidence: `TestResults/moving-shots-green.json`, **9/9 passed** (rifle/precision, left/right/standing, left/right melee, implausible movement rejection; valid actions preserve movement budget). Existing EditMode suite rerun: **91 passed, 0 failed**, `TestResults/moving-shot-rules.txt`/`.xml`. Rebuilt-player co-op rerun: **14 passed phases**, no cleanup errors, `TestResults/combat-3f97be09ee2e4eedba353aa30b0412c9/result.json`. Reproduce through **ProjectI > Combat > Check moving shots on solo host** in a solo Play Mode practice session. The test temporarily controls placement and resets resources; it does not create cloud sessions. Host correctness is verified for these cases. Remote owner pose/aim timing under latency remains subject to the documented lack of prediction/rewind; this fix does not claim full latency compensation. ## Movement validation on the network tick User requested increasing periodic validation from 5 Hz to the existing 30 Hz network tick. Spawned server players now subscribe to `NetworkTickSystem.Tick`; clients do not run the host check. Subscriptions are removed on despawn and destruction, with idempotent cleanup and NGO base destruction preserved. Frame-driven owner movement and immediate action validation remain separate. Before the change, the actual-tick fixture failed (`TestResults/validation-ticks-red.json`: 30 ticks, 0/29 matched position samples, no movement tick subscription). Afterward it passed (`validation-ticks-green.json`: 30 ticks at configured 30 Hz, **29/29 matched samples**, one validation subscription). The fixture moves the host between actual ticks with frame-driven input disabled. It proves tick cadence and the initial binding, rather than independently testing remote motion or unsubscription. Existing rules rerun **91/91 passed** (`tick-validation-rules.txt`/`.xml`); moving-shot regression **9/9 passed** (`tick-moving-shots-green.json`). Focused independent review found no actionable issues with subscription cleanup, ordering/catch-up, warp grace or action budgets. Existing movement tolerance remains unchanged; this change should not be described as stronger speed enforcement or full prediction/lag compensation. Rebuilt two/four-player combat rerun: **14 phases passed**, no cleanup errors, `TestResults/combat-a3a879d3af8549a08e09907fce65a599/result.json`. This includes host/remote movement across teleport grace and session cleanup in the existing harness. The preceding run (`combat-23d8b97e13604846a8ddd8c6c1f97789`) stopped at the Nova cooldown stability assertion, although the immediate retained snapshot showed correct 89.25 HP targets and active cooldowns on both peers. The diagnostic probe rewrites JSON in place; the harness could return null for an empty/partial read and treat that as changed gameplay state. An independent concurrent-write fixture reproduced this read hazard. `Read-Report` now retries only invalid/null reads up to five times, 10 ms apart; valid incorrect gameplay values still return immediately and fail their assertions. A fixture verified transient recovery and immediate propagation of changed health. The failed run remains retained; the passing rerun does not erase it. Focused review confirmed the reader change preserves real state assertions.