# Feedback, cores, build variety and menu validation Date: 7 October 2026. Status: implementation complete; local automated acceptance passed. Human, hardware-change and representative-performance follow-ups are listed separately. ## Delivered scope - A transparent-center damage vignette, 35% default strength, persisted settings and preview. A single envelope preserves its rise under repeated damage. Health/shield damage notification and audio retain their existing semantics. - Accepted extra-jump rings/particles, with player lifetime, run/stage, sequence and server-time guards. Movement height, allowances and existing validation tolerances are preserved. - Windows primary/saved/explicit monitor selection, Borderless/Windowed modes and a 15-second Keep/Revert policy. No unrelated registry preferences are removed. - All 25 existing core IDs/icon keys retained and renamed; 20 appended cores, five category tags, compact total/difference/installed/receipt presentation and native icons. - Non-common rewards select a category and award one compatible same-rarity core. Unique IDs are sampled before a compatible Spare Charge recipient. Locked pools, cached receipts, replay guards, current compatibility and explicit preserved-rarity defer cover recovery. - Eight normal abilities, two ultimates and two passives. Shared target resistance, immutable delayed provenance, fixed-rate fields, accepted-trigger gun windows and source-specific removal use the existing host authority. - A separate MainMenu scene, saved validated IDs, four-player ready/loadout locking, coordinated initial scene loading, results acknowledgement, cancellation, host-loss return and same-process rehost. The direct-arena development path remains explicit. - An authored-data [balance report](BUILD_BALANCE_REPORT.md), with equal reward budgets, labeled boss/horde scenarios, team/control/support assumptions, category coverage and representation checks. The five playable weapon roster entries remain. Legacy weapon assets and all existing package/Editor pins are preserved. No purchases, paid generation or new third-party packages were used. ## Starting evidence and preservation Starting checkout: `prototype-foundation`, HEAD `6312d9603878d294a3c90fba8821cd960767ee89`. The checkout already contained substantial modified and untracked work. `TestResults/feedback-cores-menu-baseline/` retains its tracked binary patch, status and untracked SHA256 manifest. No reset, staging, unrelated cleanup or arena rebuild was performed. Scenes, prefabs and definitions were authored through supported Editor operations; manual arena geometry/navigation and imported assets were retained. Fresh baseline: **383 passed, one failed**. The existing `CameraMovement_ProjectsBarAgainWithinTheSameFrame` failure was reproduced and diagnosed: camera pixels were 1474×829 while `Screen` reported 640×480. Viewport-based projection fixes the product mismatch and passes the unchanged movement/clipping assertions. ## Automated checks - `TestResults/feedback-cores-menu-final/editmode.xml/.txt`: **477 passed, zero failed, zero skipped**, including final presentation, lifetime, status removal, delayed-echo, arena-entry, buffered jump-clock and diagnostic opt-in regressions. - `TestResults/feedback-cores-menu-final/playmode.xml/.txt`: **one actual PlayMode lifecycle test passed**. It verifies pre-run return/rehost, serialized duplicate returns, a fresh lobby and exactly one persistent manager/controller. Its synchronous completion continuation verifies transition blockers are already released. Final EditMode Console has **zero errors** and one known unspawned-NetworkVariable warning from the lifetime-storage test; this is separate from build warnings. - Focused observed RED evidence: feedback migration/vignette, category contracts, Control Relay removal, Shield Core missing-resource policy, status-family removal, and lifetime validation. Subsequent full GREEN runs verify integration; no historical results are substituted for current checks. - The old TestRunnerApi writers were global across runs and could overwrite earlier labels. Active-label guards and callback unregistration fix that; final XML/text copies are retained independently. Earlier baseline/RED counts refer to observed logs, not overwritten XML. Jump-clock and headless-opt-in RED files and the live delayed-echo RED remain independently preserved. - `TestResults/ability-expansion-live.txt`: **31 live host checks passed** before the additional delayed-echo regression. Actual owned requests, invalid/valid placement charges, NPC movement/lunge/telegraph preservation, shared immunity/resistance, walls, marking, Focus misses/pellets, Ward family/ticks, downing and Rail-derived late bleed/ultimate recharge are exercised. The fixture restores practice state and owns/removes its temporary actors/geometry. - `TestResults/delayed-echo-green-live.txt`: **five additional live checks passed**. A real injured Siphon host receives a delayed secondary Shard kill after the echo callback envelope ends without passive healing. The same fixture failed before the explicit feedback-provenance fix; its RED is retained in `TestResults/delayed-echo-red/live.txt`. ## Rendered checks `TestResults/feedback-menu-visuals/` and `feedback-core-visuals/` contain real UI Toolkit offscreen renders at 1920×1080, 1920×1200 and 2560×1080, each at 100% and 125% scale. Menu top/bottom and common/difference/category/receipt/installed states were independently reviewed. Rendered failures exposed and corrected viewport shrink, Settings overlap, missing custom-theme control geometry, stale category composition and redundant receipt controls. Vignette pixel checks at strengths 0/35/100 report edge alpha **0/20/56** out of 255; center and inner 15% boundary are **zero** at every strength. This matches the intended maximum 0.22 perimeter opacity and transparent central 70%. Offline core fixtures establish actual production-control presentation, not reward authority or live actor synchronization. Runtime and executable checks are reported separately. ## Physical displays Windows reports two 2560×1440 monitors: DISPLAY1 is primary at (0,0), DISPLAY2 is at (-2560,0). Unity exposes identical display model names and local work-area metadata; native Windows primary/geometry lookup disambiguates them. `TestResults/display-61a3d7edff974f6d89b878870069fa8d/`: the prior executable opens on DISPLAY2 by default; explicit `-monitor 2` correctly selects DISPLAY2. The replacement executable is checked in both exposed modes below. Missing-display fallback and confirmation expiry also have pure rule tests. Physical primary reassignment, cable unplug/reorder and hardware-specific window behavior remain manual checks; simulated metadata is not represented as a physical unplug test. Windowed `TestResults/display-8d94c9f80f6f4d5497f972e13b83757c/` and Borderless `TestResults/display-c2b4d936685a4d909450f82d6b56d121/` each pass default-primary and explicit-second-monitor launches: **four physical checks passed**. Windows movement uses the player's own native window and OS geometry; identical monitor names and inconsistent Unity display enumeration are not used as identity. Accepted extra-jump events allow bounded near-future host timestamps because NGO's buffered observer `ServerTime` trails the host. Animation age clamps to zero; expiry, player/lifetime/run/stage identity and sequence deduplication remain enforced. `TestResults/player-feedback-f4e07a32a00e471ebf287095fd9ec09b/` passes **eight phases**, including cues on all four observers under 75 ms per-endpoint delay, 15 ms jitter and 1% loss. ## Deliberate decisions and limits - Use the existing modified checkout/connected Editor rather than omit that work in a new checkout. - The user's request to complete the named plan authorizes its proposed roster/tuning and implementation; no repeated design approval was requested. - Rail Surge tags the entire modified trigger and derived output as ultimate, conservatively excluding its recharge credit. - Linked Recovery restores normal shield only because no overflow lifetime is authored. Shared Shelter includes its caster, with a recipient family budget. Solo rewards exclude revive-only cores. - Shield Core preserves the absolute missing amount: 50 maximum/30 shield becomes 60/40, not a full refill. Capacity-only overflow changes retain their prior behavior; downed players remain at zero. - Tactician/Control Relay extend authored soft statuses, not root/immunity or generated Dash Wake. Status families keep removals isolated; target root immunity survives source removal. - Limits are independent of rank: 32 soft status entries/target, fixed field sources, four primary/eight total pending grenades per owner, 16 local cues/owner and bounded pools. Normal fields remain bounded by the three normal slots; ultimate and Dash Wake sources are separately bounded. - Balance scenarios omit timed Tempo windows/Catalyst refunds and label their aiming/casting assumptions. Damage advantages over controller kits flag a support trade-off for human testing, not proof of a universally dominant build or approved balance. Human feel, aiming difficulty, separate-network acceptance and representative-hardware four-player profiling remain unverified. Permanent unlock progression is outside this batch. ## Final executable evidence Windows development build: **zero errors, 22 retained warnings**, 16.25 seconds. MainMenu is first in the build scene list. Final managed `ProjectI.Foundation.dll` SHA256 is `F2A4F9AE80EA04FB893B26C6D0055F0AEA550B6DC0D2534CD7E82CDCCDACEAEB`. `TestResults/feedback-cores-menu-final/build-manifest.json` hashes every build file; launcher EXE hashes alone do not identify managed gameplay changes. | Check | Result | Evidence directory under TestResults | |---|---|---| | Full foundation and repeated lifecycle recovery | 32 phases passed; zero service retries; clean teardown | `foundation-f530d1298e0c4b09a07c36b4f6a6e3a0` | | Combat, Dash, shields, revive, occlusion and authority | 17 phases passed; clean teardown | `combat-77148b2250694530bdc77f4e816fc8f5` | | Landing jumps, owner-only damage and four-observer cues | 8 phases passed; zero service retries | `player-feedback-f4e07a32a00e471ebf287095fd9ec09b` | | Complete two/four-player stages, category replay/receipt, travel, results and rehost | 23 phases passed; clean teardown | `encounter-polish-2d6cccdec1454016a3a3e8a28f486553` | | Normal menu, four distinct kits, down cleanup, host loss and second run | 9 phases passed on final build; clean teardown | `main-menu-4b8a419a0f6f471594b45edae545cf0c` | Delay/loss suites use 75 ms per endpoint, 15 ms jitter and 1% loss. Foundation/combat retain their existing ordinary connection profile. Every script stops only its own processes. All source/runtime verification is separate from human gameplay approval. Build cohorts are explicit: stage acceptance used the production timing build (`959C59006718C9BA8BABCF587AAC87C5EF50477597FD128E281357E8ADD3CC25`); foundation/physical displays used the isolated menu-fixture build (`079F8AA2C24927C962AC976F038A3F744C5A7CBD14A59BB136928BBC64319584`). Their complete manifests/build results are retained beside the final manifest. The subsequent changes add bounded diagnostics and an explicit development-only headless Dash fixture; normal gameplay guards and authority rules remain unchanged. Final combat/feedback/menu and reloaded Editor suites use the final source/build. The combat harness had stale expectations from before the 50/50 vitals and weapon-roster changes; these now use exact authored HP/shield, damage, magazines, melee slot and revive values. Accepted Dash initially remained stationary because the headless cursor could not lock, even after Resume. Phase 9 retains actual positive 18 m/s Dash velocity, unlocked cursor, clear input blocker and physical motion through the production motor. `--probe-headless-dash` requires a development build, batch mode, both probe paths and explicit opt-in; it permits accepted Dash motion only, preserves owner/spawn/alive/modal guards and does not enable ordinary keyboard/aim/jump controls. Earlier runs exposing report IO collisions, menu-entry input blocking, completion-order races, expired fixture windows, stale harness expectations and SDK `RateLimitExceeded`/`Unknown` failures are retained. Unknown SDK causes are not asserted to be product defects or proven service outages. Connection harness retries are visible, limited to two expected-success attempts after five seconds, and excluded from rejection/immediate lifecycle assertions. The accepted foundation/feedback runs required zero retries. Pacing follows the [documented MPS request limits](https://docs.unity.com/en-us/mps-sdk/rate-limits); no billing/service tier was changed. Reproduce with the supported Windows build menu, `Tools/Test-Foundation.ps1`, `Test-Combat.ps1`, `Test-PlayerFeedback.ps1`, category-aware `Test-EncounterPolish.ps1`, normal-entry `Test-MainMenu.ps1`, and `Test-DisplaySelection.ps1`. Human keyboard navigation, separate-network feel/balance, physical primary-change/unplug/reorder and dense representative-hardware profiling remain follow-ups. ## Proc visuals and elite-cycle follow-up — 7 October 2026 User requested basic effects for death blasts and chain arcs, resetting elite escalation when an elite spawns, and a compensating increase. The user selected **elite chance only** and confirmed that it should keep ramping between resets for more consistent cycles. - Death Blast and Crimson Cascade use a short orange expanding three-ring pulse (0.35 seconds). Chain Rounds draws jagged cyan links to accepted secondary-hit endpoints (0.2 seconds). Endpoints are captured before lethal damage; the visuals do not recalculate or change damage, RNG, proc budgets or provenance. A death blast still shows with no secondary victim. Final-kill cues may finish during Collection before clearing for selection/travel/loading/defeat. - Server-only RPCs send explicit run/stage IDs, monotonic sequence and a server expiry. Observers reject stale, duplicate, expired and foreign-scope events. There are at most 32 pooled bundles, three fixed-size lines per bundle, no colliders or lights, and a cosmetic blast-radius ceiling of 32 m. Native tint uses URP `_BaseColor`; vertex color alone does not tint this pinned shader. - Elite escalation has a separate unique-normal-kill streak. A confirmed successful non-boss elite spawn resets the streak; failed NavMesh/cap/invalid-prefab attempts, normal spawns and boss spawns do not. Total normal kills and the 40-kill boss threshold are preserved. Both authored arenas and the source default use 4%, up from 2%. After five fresh normal kills, the chance is 4%, then 5%, 6.25%, etc., with the existing difficulty factor and 50% cap. Spawn periods remain stochastic, not a fixed timer; each elite repeats the warmup/ramp. Observed RED: elite contracts **478 passed/5 failed** before the counter/reset implementation; proc contracts **483 passed/4 failed** before presentation. The latter native Unity XML was retained when an intervening script reload discarded the custom callback. Final `TestResults/core-proc-elite-final/editmode.xml/.txt`: **488 passed, zero failed/skipped**. The five visual tests cover production lethal-blast emission, replay/scope/expiry guards, fixed object/vertex limits, URP tint/endpoints and Collection/transition policy. `TestResults/core-proc-visuals/` contains inspected native URP death-blast, arc-chain and expired previews. These exercise the production renderer in a temporary preview scene; the capture camera explicitly includes that scene. The utility does not save production scenes/assets. Windows build: **zero errors, 520 retained warnings**, 31.76 seconds; existing template/debug-shader/development warnings remain. Final managed Foundation SHA256: `AE4F2EBEAEFB87CC586ABA9A76527CA116A2F858298862C0637597381E0A93A4`. Full manifest/build result are in `TestResults/core-proc-elite-final/`. `Tools/Test-CoreProcFeedback.ps1` against that build passed **six actual two-player phases** at 75 ms per-endpoint delay, 15 ms jitter and 1% loss. Evidence: `TestResults/core-proc-feedback-7adfbf29e2fd45e38176340cad34d950/`. Actual host weapon-damage/proc paths produce two accepted arc visuals on both peers; a lethal hit adds one blast/two links with exact applied-health budgets and no secondary recursion. Both observers expire their cues. Actual spawned enemies and kills prove failed/normal spawn preservation, successful elite reset, total-kill preservation, elite-death exclusion and repeated five-kill warmup. Owned processes leave gracefully; cleanup errors are empty. A prior failed harness run is retained: its command predicate watched the wrong peer because a case-insensitive PowerShell loop variable shadowed the caller; that fixture error was corrected without changing gameplay. No purchases, package upgrades, arena regeneration or unrelated source changes. These fresh checks supplement the earlier broader acceptance; the 89 earlier phases are not claimed to have been rerun for this follow-up. Human balance and visual feel remain playtest tasks.