# Test catalogue **AI rebuild branch, 13 October 2026:** obsolete enemy decision/pack/movement/attack fixtures are retired. Retained shared combat, entity, spawn and session checks remain required. Historical AI reports are not current behavior proof. The fixture inventory is reconciled with retained source; use positive native discovery, never an old fixture count, for execution. Inventory reconciled with repository source on 13 October 2026. Read [selection and execution procedure](TESTING.md) before invoking any row. Names below are exact fixture names, not guessed filter expressions. Parameterized leaves are discovered by the Editor; source rows do not claim a fresh test pass. ## Index and shared interpretation - [EditMode fixtures](#editmode-fixtures): rules, source/asset contracts, menus, UI, movement, combat, runs and diagnostics. - [PlayMode fixtures](#playmode-fixtures): native actors/navigation, actual sessions, captures and lifecycle. - [PowerShell harnesses and contracts](#powershell-harnesses-and-contracts): built-player/network and controlled script checks. - [Build and manual gates](#build-and-manual-gates), [historical cost](#historical-cost). Editor fixture selection: `FoundationTestRunner.RunFixtures(label, TestMode.EditMode, new[] { "" })` or `TestMode.PlayMode`, inside a supported Editor C# command. Namespace: `ProjectI.Editor`; `TestMode` comes from `UnityEditor.TestTools.TestRunner.Api`. Existing `RunEditModeFiltered`/`RunPlayModeFiltered` accept exact discovered fixture/method names. Full `RunEditMode`/`RunPlayMode` still select the whole named assembly. Execute one request at a time. Every fixture row links to the complete consequential assertions/scenarios in source. Coverage examples are a quick index, not a replacement for those assertions. Outputs are unique runner XML/text/JSON under `TestResults`; read validation, mode, source identity and exact leaf coverage before counts. Legacy label copies never overwrite. All Editor fixtures require clean compilation, pinned packages and actual discovered assembly membership. EditMode is not synonymous with pure: asset/source contracts require the referenced authored files, and tests using Editor/native objects require the Editor. Native/scene PlayMode requires the saved project/scene and shutdown restoration. A solo fixture does not prove four-owner replication, human readability or separate-network behavior. Escalation is by touched production boundary in TESTING, not by fixture name. ## EditMode fixtures Current source inventory; actual NUnit discovery determines executable leaves. Retired AI-only fixtures are absent. Shared assertions remain in retained/adapted fixtures. | Fixture | Source | | --- | --- | | `ProjectI.Tests.AbilityDescriptionContractTests` | [source](../Assets/_Project/Tests/EditMode/AbilityDescriptionContractTests.cs) | | `ProjectI.Tests.AbilityExpansionContractTests` | [source](../Assets/_Project/Tests/EditMode/AbilityExpansionContractTests.cs) | | `ProjectI.Tests.AbilityLibraryTests` | [source](../Assets/_Project/Tests/EditMode/AbilityLibraryTests.cs) | | `ProjectI.Tests.AbilityLibraryViewTests` | [source](../Assets/_Project/Tests/EditMode/AbilityLibraryViewTests.cs) | | `ProjectI.Tests.AbilityLifetimeReplicationTests` | [source](../Assets/_Project/Tests/EditMode/AbilityLifetimeReplicationTests.cs) | | `ProjectI.Tests.AbilityMenuContractTests` | [source](../Assets/_Project/Tests/EditMode/AbilityMenuContractTests.cs) | | `ProjectI.Tests.AbilityPickerTests` | [source](../Assets/_Project/Tests/EditMode/AbilityPickerTests.cs) | | `ProjectI.Tests.AbilityPlacementTests` | [source](../Assets/_Project/Tests/EditMode/AbilityPlacementTests.cs) | | `ProjectI.Tests.AbilityTuningAgreementTests` | [source](../Assets/_Project/Tests/EditMode/AbilityTuningAgreementTests.cs) | | `ProjectI.Tests.AbilityVisualLifetimeTests` | [source](../Assets/_Project/Tests/EditMode/AbilityVisualLifetimeTests.cs) | | `ProjectI.Tests.AttackEnhancementDefinitionTests` | [source](../Assets/_Project/Tests/EditMode/AttackEnhancementDefinitionTests.cs) | | `ProjectI.Tests.BombardierWarningTests` | [source](../Assets/_Project/Tests/EditMode/BombardierWarningTests.cs) | | `ProjectI.Tests.BuildAndAbilityTests` | [source](../Assets/_Project/Tests/EditMode/BuildAndAbilityTests.cs) | | `ProjectI.Tests.CombatAuthorityRulesTests` | [source](../Assets/_Project/Tests/EditMode/CombatAuthorityRulesTests.cs) | | `ProjectI.Tests.CombatFlowBuildTests` | [source](../Assets/_Project/Tests/EditMode/CombatFlowBuildTests.cs) | | `ProjectI.Tests.CombatHudPresentationTests` | [source](../Assets/_Project/Tests/EditMode/CombatHudPresentationTests.cs) | | `ProjectI.Tests.CombatReadabilityVisualContractTests` | [source](../Assets/_Project/Tests/EditMode/CombatReadabilityVisualContractTests.cs) | | `ProjectI.Tests.ControlRelayRemovalTests` | [source](../Assets/_Project/Tests/EditMode/ControlRelayRemovalTests.cs) | | `ProjectI.Tests.CoreCategoryRewardTests` | [source](../Assets/_Project/Tests/EditMode/CoreCategoryRewardTests.cs) | | `ProjectI.Tests.CoreConditionAgreementTests` | [source](../Assets/_Project/Tests/EditMode/CoreConditionAgreementTests.cs) | | `ProjectI.Tests.CoreExpansionRuntimeTests` | [source](../Assets/_Project/Tests/EditMode/CoreExpansionRuntimeTests.cs) | | `ProjectI.Tests.CoreInspectionTests` | [source](../Assets/_Project/Tests/EditMode/CoreInspectionTests.cs) | | `ProjectI.Tests.CorePickupLifecycleTests` | [source](../Assets/_Project/Tests/EditMode/CorePickupLifecycleTests.cs) | | `ProjectI.Tests.CorePickupRulesTests` | [source](../Assets/_Project/Tests/EditMode/CorePickupRulesTests.cs) | | `ProjectI.Tests.CoreProcVisualTests` | [source](../Assets/_Project/Tests/EditMode/CoreProcVisualTests.cs) | | `ProjectI.Tests.CoreRarityCounterTests` | [source](../Assets/_Project/Tests/EditMode/CoreRarityCounterTests.cs) | | `ProjectI.Tests.CoreReceiptPresentationTests` | [source](../Assets/_Project/Tests/EditMode/CoreReceiptPresentationTests.cs) | | `ProjectI.Tests.CoreRewardProgressTests` | [source](../Assets/_Project/Tests/EditMode/CoreRewardProgressTests.cs) | | `ProjectI.Tests.CoreRewardViewTests` | [source](../Assets/_Project/Tests/EditMode/CoreRewardViewTests.cs) | | `ProjectI.Tests.DamageFeedbackTests` | [source](../Assets/_Project/Tests/EditMode/DamageFeedbackTests.cs) | | `ProjectI.Tests.DebugArenaAuthoringTests` | [source](../Assets/_Project/Tests/EditMode/DebugArenaAuthoringTests.cs) | | `ProjectI.Tests.DebugPanelContractTests` | [source](../Assets/_Project/Tests/EditMode/DebugPanelContractTests.cs) | | `ProjectI.Tests.DebugPlayerPlacementRulesTests` | [source](../Assets/_Project/Tests/EditMode/DebugPlayerPlacementRulesTests.cs) | | `ProjectI.Tests.DebugProbeOwnershipTests` | [source](../Assets/_Project/Tests/EditMode/DebugProbeOwnershipTests.cs) | | `ProjectI.Tests.DebugScenarioContractTests` | [source](../Assets/_Project/Tests/EditMode/DebugScenarioContractTests.cs) | | `ProjectI.Tests.DebugScenarioLifecycleTests` | [source](../Assets/_Project/Tests/EditMode/DebugScenarioLifecycleTests.cs) | | `ProjectI.Tests.DebugScenarioProofTests` | [source](../Assets/_Project/Tests/EditMode/DebugScenarioProofTests.cs) | | `ProjectI.Tests.DevelopmentCommandInboxTests` | [source](../Assets/_Project/Tests/EditMode/DevelopmentCommandInboxTests.cs) | | `ProjectI.Tests.DisplaySelectionTests` | [source](../Assets/_Project/Tests/EditMode/DisplaySelectionTests.cs) | | `ProjectI.Tests.DisplaySettingsTests` | [source](../Assets/_Project/Tests/EditMode/DisplaySettingsTests.cs) | | `ProjectI.Tests.EarlyStageSpawningTests` | [source](../Assets/_Project/Tests/EditMode/EarlyStageSpawningTests.cs) | | `ProjectI.Tests.EchoFeedbackSuppressionTests` | [source](../Assets/_Project/Tests/EditMode/EchoFeedbackSuppressionTests.cs) | | `ProjectI.Tests.EffectSourceIdentityTests` | [source](../Assets/_Project/Tests/EditMode/EffectSourceIdentityTests.cs) | | `ProjectI.Tests.EncounterCombatBehaviorTests` | [source](../Assets/_Project/Tests/EditMode/EncounterCombatBehaviorTests.cs) | | `ProjectI.Tests.EncounterPacingHoldTests` | [source](../Assets/_Project/Tests/EditMode/EncounterPacingHoldTests.cs) | | `ProjectI.Tests.EncounterRulesTests` | [source](../Assets/_Project/Tests/EditMode/EncounterRulesTests.cs) | | `ProjectI.Tests.EncounterTimerTests` | [source](../Assets/_Project/Tests/EditMode/EncounterTimerTests.cs) | | `ProjectI.Tests.EncounterUiTests` | [source](../Assets/_Project/Tests/EditMode/EncounterUiTests.cs) | | `ProjectI.Tests.EnemyArchetypeTests` | [source](../Assets/_Project/Tests/EditMode/EnemyArchetypeTests.cs) | | `ProjectI.Tests.EnemyBarProjectionTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBarProjectionTests.cs) | | `ProjectI.Tests.EnemyCombatFlowTests` | [source](../Assets/_Project/Tests/EditMode/EnemyCombatFlowTests.cs) | | `ProjectI.Tests.EnemyHealthTrailTests` | [source](../Assets/_Project/Tests/EditMode/EnemyHealthTrailTests.cs) | | `ProjectI.Tests.EnemyPolishRulesTests` | [source](../Assets/_Project/Tests/EditMode/EnemyPolishRulesTests.cs) | | `ProjectI.Tests.EnemyResistanceTests` | [source](../Assets/_Project/Tests/EditMode/EnemyResistanceTests.cs) | | `ProjectI.Tests.EnemyBehaviorDomainReloadTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBehaviorDomainReloadTests.cs); stops a real counter and owned session, preserves the stopped object, then requests genuine script reload and verifies no stale resumption; restores the original script-compilation preference. Does not prove active-session hot reload | | `ProjectI.Tests.EnemyBehaviorObservationTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBehaviorObservationTests.cs); personal/report/hearing separation, original timestamps, independent memories, sustained reaction/expiry, stable preference and deterministic four-target selection | | `ProjectI.Tests.EnemyBehaviorPositionTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBehaviorPositionTests.cs); bounded shared FIFO query service, repeated requests using spare capacity while queued grants remain reserved, starvation/cancellation/abandoned grants, clearance before preferred range, stable useful lanes, finite movement limits and finite bounded route-turn tuning. Batching expectation updated on 14 October without execution under the user's no-new-tests instruction. | | `ProjectI.Tests.EnemyInvestigationRulesTests` | [source](../Assets/_Project/Tests/EditMode/EnemyInvestigationRulesTests.cs); immutable validated strength settings, cone count/angle/reach bounds and independent captured settings, reach clamping without authored mutation, independent captured-centre aiming/unit directions/angular redistribution/single centre ray, accepted feet/motion continuity, noise/gap/teleport rejection, sight-anchored deadline/evidence expiry and ambiguous-direction samples on both sides. [M5B packet and evidence](superpowers/plans/2026-10-13-enemy-ai-implementation.md#m5b--bounded-local-investigation-with-per-enemy-search-strength) | | `ProjectI.Tests.EnemyBehaviorAttackTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBehaviorAttackTests.cs); bolt-owned finite field/derived-product admission, empty/unbounded burst refusal and uniform solid-angle cone. Service fallback contract remains unchanged | | `ProjectI.Tests.EnemyBehaviorDiagnosticTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBehaviorDiagnosticTests.cs); three cases cover inactive-owner capture, explicit no-destination UI/markers default off, and empty marker capture without installing behavior. Active hidden-memory/destination, refresh/frame purity, expiry/cancel/despawn are exercised by the investigation fixture below. Scene access: Shooter sandbox → Inspected shooter → Show memory and move destination (Scene view); close/toggle off removes markers, Frame is explicit, and reset requires choosing the new actor | | `ProjectI.Tests.EnemyBehaviorGraphAuthoringTests` | [source](../Assets/_Project/Tests/EditMode/EnemyBehaviorGraphAuthoringTests.cs); native authoring/main asset and retained runtime GUID/file ID/prefab binding, six visual/runtime node mappings, nonshared Context/Self, ordered compiled Start/Repeat/attack/seek/wait, repetition cadence and native profile/slot bindings. Lead additionally verifies save/reimport/second rebuild and actual live debugger attach/switch/reset. Sandbox **Live graph target → Open live Behavior graph** uses Unity's native debugger, with unique host object/spawn names; opening changes Editor selection, never graph decisions | | `ProjectI.Tests.EnemyRosterAuthoringTests` | [source](../Assets/_Project/Tests/EditMode/EnemyRosterAuthoringTests.cs) | | `ProjectI.Tests.EnemyDirectorRulesTests` | [source](../Assets/_Project/Tests/EditMode/EnemyDirectorRulesTests.cs); capped partition-independent accrual, invalid clocks and captured finite income scaling. S1 pure rules; no scheduling/birth proof. | | `ProjectI.Tests.EnemyDirectorPeerContractTests` | [source](../Assets/_Project/Tests/EditMode/EnemyDirectorPeerContractTests.cs); mode-aware legacy versus credit diagnostics, boss-inclusive population labels and separate purchase timing, explicit dual-flag development gating. Actual independent-process arrivals/lifecycle belong to Test-EnemyDirector. | | `ProjectI.Tests.EnemyAdmissionLedgerTests` | [source](../Assets/_Project/Tests/EditMode/EnemyAdmissionLedgerTests.cs); S2 captured-price reservations, live/pending limits, identity/generation settlement, unused-only refunds, singleton unpriced boss and authentic finite nonrecursive descendants with synchronous parent settlement/coarse region inheritance. Internal verified transitions are controlled rules seams; actual actor commit is tested natively. | | `ProjectI.Tests.EnemyDirectorBossRulesTests` | [source](../Assets/_Project/Tests/EditMode/EnemyDirectorBossRulesTests.cs); S3 same-ledger survivor/child-overflow accounting, mixed pending cancellation, discarded exploration bank/saving, deferred boss funds with nonzero initial balance, retry and exactly-once activation, future opportunity and terminal generation invalidation. No actor birth or boss-combat proof. | | `ProjectI.Tests.EnemyDirectorDiagnosticTests` | [source](../Assets/_Project/Tests/EditMode/EnemyDirectorDiagnosticTests.cs); read-only bank/saving/deadline capture, unchanged subsequent RNG/decisions, paused/terminal labels, native-only provenance, bounded individual history and complete normal/elite pack counts across interleaving/pruning/cancellation. Controlled birth tap is a rules seam; actual native logging and both views/reset/switch are covered by EnemyBehaviorScenarioTests. | | `ProjectI.Tests.EnemySpawnSchedulerTests` | [source](../Assets/_Project/Tests/EditMode/EnemySpawnSchedulerTests.cs); S2 fixed saving, inclusive expiry, invalidation/ordinary-first recovery, capacity blockage, profile generation, failed-choice RNG, original pending expiry and future opportunity/member deadlines without catch-up. No production activation. | | `ProjectI.Tests.EnemyGroupSelectionTests` | [source](../Assets/_Project/Tests/EditMode/EnemyGroupSelectionTests.cs); immutable authoring capture, three deterministic weighted modes, explicit tiers/mixed templates, procedural type compatibility, pending specialist limits, ordinary affordability and fixed finite saving proposals. Named cancellation/catch-up cases prove inputs only; S2 must prove scheduler transitions. | | `ProjectI.Tests.EnemyElitePackTests` | [source](../Assets/_Project/Tests/EditMode/EnemyElitePackTests.cs); per-card single-pack elite chance, deterministic full-price replacement/fallback, weighted active-profile variants, distinct elite-only Bombardier, singleton provenance/eligibility, hard exclusions, immutable saving and narrow ledger rejection. Native paid arrivals and peer tier identities are covered by EnemyDirectorAdmissionTests. | | `ProjectI.Tests.EnemySpawnCircleTests` | [source](../Assets/_Project/Tests/EditMode/EnemySpawnCircleTests.cs) | | `ProjectI.Tests.EnemySpawnGeometryTests` | [source](../Assets/_Project/Tests/EditMode/EnemySpawnGeometryTests.cs) | | `ProjectI.Tests.EnemySpawnIdentityTests` | [source](../Assets/_Project/Tests/EditMode/EnemySpawnIdentityTests.cs) | | `ProjectI.Tests.EnemyStatusTests` | [source](../Assets/_Project/Tests/EditMode/EnemyStatusTests.cs) | | `ProjectI.Tests.EnemyTracerRevisionTests` | [source](../Assets/_Project/Tests/EditMode/EnemyTracerRevisionTests.cs) | | `ProjectI.Tests.ExtraJumpPresentationTests` | [source](../Assets/_Project/Tests/EditMode/ExtraJumpPresentationTests.cs) | | `ProjectI.Tests.FeedbackExpansionTests` | [source](../Assets/_Project/Tests/EditMode/FeedbackExpansionTests.cs) | | `ProjectI.Tests.FoundationRulesTests` | [source](../Assets/_Project/Tests/EditMode/FoundationRulesTests.cs) | | `ProjectI.Tests.FoundationTestRunRulesTests` | [source](../Assets/_Project/Tests/EditMode/FoundationTestRunRulesTests.cs) | | `ProjectI.Tests.GunTriggerWindowTests` | [source](../Assets/_Project/Tests/EditMode/GunTriggerWindowTests.cs) | | `ProjectI.Tests.HandAuthoredStageBindingTests` | [source](../Assets/_Project/Tests/EditMode/HandAuthoredStageBindingTests.cs) | | `ProjectI.Tests.HeadlessDashProbeTests` | [source](../Assets/_Project/Tests/EditMode/HeadlessDashProbeTests.cs) | | `ProjectI.Tests.InfiniteEffectRuntimeTests` | [source](../Assets/_Project/Tests/EditMode/InfiniteEffectRuntimeTests.cs) | | `ProjectI.Tests.InfiniteUpgradeTests` | [source](../Assets/_Project/Tests/EditMode/InfiniteUpgradeTests.cs) | | `ProjectI.Tests.IvoryWraithAnimationTests` | [source](../Assets/_Project/Tests/EditMode/IvoryWraithAnimationTests.cs) | | `ProjectI.Tests.JumpAllowanceTests` | [source](../Assets/_Project/Tests/EditMode/JumpAllowanceTests.cs) | | `ProjectI.Tests.MainMenuNavigationTests` | [source](../Assets/_Project/Tests/EditMode/MainMenuNavigationTests.cs) | | `ProjectI.Tests.MenuGameplayEntryTests` | [source](../Assets/_Project/Tests/EditMode/MenuGameplayEntryTests.cs) | | `ProjectI.Tests.MenuKitFixtureLayoutTests` | [source](../Assets/_Project/Tests/EditMode/MenuKitFixtureLayoutTests.cs) | | `ProjectI.Tests.MenuSceneFlowTests` | [source](../Assets/_Project/Tests/EditMode/MenuSceneFlowTests.cs) | | `ProjectI.Tests.MovementWarpStateTests` | [source](../Assets/_Project/Tests/EditMode/MovementWarpStateTests.cs) | | `ProjectI.Tests.NetworkProtocolBuildValidationTests` | [source](../Assets/_Project/Tests/EditMode/NetworkProtocolBuildValidationTests.cs) | | `ProjectI.Tests.OwnerArrivalControlsTests` | [source](../Assets/_Project/Tests/EditMode/OwnerArrivalControlsTests.cs) | | `ProjectI.Tests.OwnerArrivalInputLeaseTests` | [source](../Assets/_Project/Tests/EditMode/OwnerArrivalInputLeaseTests.cs) | | `ProjectI.Tests.PassiveBehaviorTests` | [source](../Assets/_Project/Tests/EditMode/PassiveBehaviorTests.cs) | | `ProjectI.Tests.PassiveRulesTests` | [source](../Assets/_Project/Tests/EditMode/PassiveRulesTests.cs) | | `ProjectI.Tests.PlayerBuffPresentationTests` | [source](../Assets/_Project/Tests/EditMode/PlayerBuffPresentationTests.cs) | | `ProjectI.Tests.PlayerBuffSnapshotTests` | [source](../Assets/_Project/Tests/EditMode/PlayerBuffSnapshotTests.cs) | | `ProjectI.Tests.PlayerDefenseTests` | [source](../Assets/_Project/Tests/EditMode/PlayerDefenseTests.cs) | | `ProjectI.Tests.PlaytestSceneAuthoringTests` | [source](../Assets/_Project/Tests/EditMode/PlaytestSceneAuthoringTests.cs) | | `ProjectI.Tests.PortalSpatialEvidenceTests` | [source](../Assets/_Project/Tests/EditMode/PortalSpatialEvidenceTests.cs) | | `ProjectI.Tests.PortalUnknownPositionTests` | [source](../Assets/_Project/Tests/EditMode/PortalUnknownPositionTests.cs) | | `ProjectI.Tests.PrecisionDamageTests` | [source](../Assets/_Project/Tests/EditMode/PrecisionDamageTests.cs) | | `ProjectI.Tests.ProcChanceTextTests` | [source](../Assets/_Project/Tests/EditMode/ProcChanceTextTests.cs) | | `ProjectI.Tests.RandomScanWeakPointTests` | [source](../Assets/_Project/Tests/EditMode/RandomScanWeakPointTests.cs) | | `ProjectI.Tests.RangedUpperBodyTests` | [source](../Assets/_Project/Tests/EditMode/RangedUpperBodyTests.cs) | | `ProjectI.Tests.ReceivedMovementBudgetTests` | [source](../Assets/_Project/Tests/EditMode/ReceivedMovementBudgetTests.cs) | | `ProjectI.Tests.ReceivedTransformPositionTests` | [source](../Assets/_Project/Tests/EditMode/ReceivedTransformPositionTests.cs) | | `ProjectI.Tests.RecentDamageTests` | [source](../Assets/_Project/Tests/EditMode/RecentDamageTests.cs) | | `ProjectI.Tests.RemoteMovementClockTests` | [source](../Assets/_Project/Tests/EditMode/RemoteMovementClockTests.cs) | | `ProjectI.Tests.RunBehaviorTests` | [source](../Assets/_Project/Tests/EditMode/RunBehaviorTests.cs) | | `ProjectI.Tests.RunDirectorInputsTests` | [source](../Assets/_Project/Tests/EditMode/RunDirectorInputsTests.cs); run-owned active combat clock, paused collection/travel/loading/defeat, stage roster capture and difficulty-at-start; no difficulty UI or network schema change. | | `ProjectI.Tests.RunEchoCapTests` | [source](../Assets/_Project/Tests/EditMode/RunEchoCapTests.cs) | | `ProjectI.Tests.RunEffectTests` | [source](../Assets/_Project/Tests/EditMode/RunEffectTests.cs) | | `ProjectI.Tests.RunSystemContractTests` | [source](../Assets/_Project/Tests/EditMode/RunSystemContractTests.cs) | | `ProjectI.Tests.RunTelemetryContractTests` | [source](../Assets/_Project/Tests/EditMode/RunTelemetryContractTests.cs) | | `ProjectI.Tests.RunTelemetryTests` | [source](../Assets/_Project/Tests/EditMode/RunTelemetryTests.cs) | | `ProjectI.Tests.RunUpgradeTests` | [source](../Assets/_Project/Tests/EditMode/RunUpgradeTests.cs) | | `ProjectI.Tests.ScanWeakPointTests` | [source](../Assets/_Project/Tests/EditMode/ScanWeakPointTests.cs) | | `ProjectI.Tests.SessionLifecycleTests` | [source](../Assets/_Project/Tests/EditMode/SessionLifecycleTests.cs) | | `ProjectI.Tests.SessionRosterRecoveryTests` | [source](../Assets/_Project/Tests/EditMode/SessionRosterRecoveryTests.cs) | | `ProjectI.Tests.ShieldCoreCapacityTests` | [source](../Assets/_Project/Tests/EditMode/ShieldCoreCapacityTests.cs) | | `ProjectI.Tests.StageNavigationBakeProfileTests` | [source](../Assets/_Project/Tests/EditMode/StageNavigationBakeProfileTests.cs) | | `ProjectI.Tests.StageProgressionFixtureLayoutTests` | [source](../Assets/_Project/Tests/EditMode/StageProgressionFixtureLayoutTests.cs) | | `ProjectI.Tests.StageRewardPortalTests` | [source](../Assets/_Project/Tests/EditMode/StageRewardPortalTests.cs) | | `ProjectI.Tests.StatusAbilityFamilyTests` | [source](../Assets/_Project/Tests/EditMode/StatusAbilityFamilyTests.cs) | | `ProjectI.Tests.SupportFamilyTests` | [source](../Assets/_Project/Tests/EditMode/SupportFamilyTests.cs) | | `ProjectI.Tests.TetherKeeperVisualTests` | [source](../Assets/_Project/Tests/EditMode/TetherKeeperVisualTests.cs) | | `ProjectI.Tests.UiTextEncodingTests` | [source](../Assets/_Project/Tests/EditMode/UiTextEncodingTests.cs) | | `ProjectI.Tests.UltimateChargeTests` | [source](../Assets/_Project/Tests/EditMode/UltimateChargeTests.cs) | | `ProjectI.Tests.UltimateProvenanceTests` | [source](../Assets/_Project/Tests/EditMode/UltimateProvenanceTests.cs) | | `ProjectI.Tests.UpgradeCardFormatterTests` | [source](../Assets/_Project/Tests/EditMode/UpgradeCardFormatterTests.cs) | | `ProjectI.Tests.VerdantBalanceTests` | [source](../Assets/_Project/Tests/EditMode/VerdantBalanceTests.cs) | | `ProjectI.Tests.VerdantControlTests` | [source](../Assets/_Project/Tests/EditMode/VerdantControlTests.cs) | | `ProjectI.Tests.VerdantSpatialTests` | [source](../Assets/_Project/Tests/EditMode/VerdantSpatialTests.cs) | | `ProjectI.Tests.VerdantStageTests` | [source](../Assets/_Project/Tests/EditMode/VerdantStageTests.cs) | | `ProjectI.Tests.WarpDiagnosticTraceTests` | [source](../Assets/_Project/Tests/EditMode/WarpDiagnosticTraceTests.cs) | | `ProjectI.Tests.WarpTravelBudgetTests` | [source](../Assets/_Project/Tests/EditMode/WarpTravelBudgetTests.cs) | | `ProjectI.Tests.WeakPointPoseTests` | [source](../Assets/_Project/Tests/EditMode/WeakPointPoseTests.cs) | | `ProjectI.Tests.WeaponAndHealthTests` | [source](../Assets/_Project/Tests/EditMode/WeaponAndHealthTests.cs) | ## PlayMode fixtures Current source inventory; actual NUnit discovery determines executable leaves. Retired AI-only fixtures are absent. Shared assertions remain in retained/adapted fixtures. | Fixture | Source | | --- | --- | | `ProjectI.Tests.AbilityLibraryPlayModeTests` | [source](../Assets/_Project/Tests/PlayMode/AbilityLibraryPlayModeTests.cs) | | `ProjectI.Tests.EnemyBehaviorRetrospectiveTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorRetrospectiveTests.cs); seven cases cover actual Normal/Large lower-floor planning/travel beneath an upper NavMesh, separate accepted-route execution and upper-floor control; real eye-clear/actor-blocked authored muzzle, graph reposition/release with the blocker fixed/alive, and move/death clearance with retained paid recovery. Temporary owned geometry/navigation only. [Correction record](superpowers/plans/2026-10-15-enemy-ai-retrospective-fixes.md). | | `ProjectI.Tests.DebugArenaScenarioTests` | [source](../Assets/_Project/Tests/PlayMode/DebugArenaScenarioTests.cs) | | `ProjectI.Tests.DebugProbePersistenceTests` | [source](../Assets/_Project/Tests/PlayMode/DebugProbePersistenceTests.cs) | | `ProjectI.Tests.DebugScenarioResetTests` | [source](../Assets/_Project/Tests/PlayMode/DebugScenarioResetTests.cs) | | `ProjectI.Tests.EnemyCoverSamplingTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyCoverSamplingTests.cs); 15 cases: lower-stair observation of an upper wall with an earlier stair torso occluder and an admitted upper-floor alternative; near-wall cone guesses and independent capsule clearance for box/nonconvex mesh/adjoining walls, an actual wall entry before the local probe region with supported far-side prediction inside both radii, ramp/stair-top landing floors, missing-floor rejection and no extra open-space guesses; retained angled pockets plus useful movement, identical frozen-sighting hypotheses/weights at different hidden positions, equivalent fresh first-choice comparison, Normal/Large overlapping floors and supported uphill/downhill samples on a temporary wider ramp. No saved navigation or human acceptance. [Cone proof/limits](superpowers/plans/2026-10-13-enemy-ai-implementation.md#m5b-wall-crossing-cone--14-october-2026); [focused boundary-fix proof](superpowers/plans/2026-10-13-enemy-ai-implementation.md#wall-entry-rejection-fix--14-october-2026). | | `ProjectI.Tests.EnemyTracerCollisionTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyTracerCollisionTests.cs); the manually ticked projectile service uses an enabled, action-ready passive shooter with no Behavior host. Disabling the actor invalidates readiness and is not a valid launch fixture. Existing collision, lifetime, captured-flight and presentation assertions remain. | | `ProjectI.Tests.EnemyDirectorAdmissionTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyDirectorAdmissionTests.cs); opt-in S2 native mixed Normal/Large reservations/stagger, damageable births, moving-player cancellation, no killed-member replacement/refund, original commit expiry, visible front/side/rear placement, unsupported/steep/occupied ground and four-player split exclusions. Temporary owned terrain/NavMeshData only; passive roles establish admission, not restored abilities. | | `ProjectI.Tests.EnemyDirectorBossLifecycleTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyDirectorBossLifecycleTests.cs); opt-in S3 native Large boss safety/retry, retained 16 survivors and two/four-peer identity/arrival, actual fortieth-kill entry and exactly-once real boss checkpoint, paid boss-add peer birth/death/rewards without refund/progression, pending/arriving terminal cancellation, defeat/reset/stage/controlled host-transport shutdown. Temporary owned geometry/navigation only. Passive bosses; no boss attacks, unexpected host-process loss, independent-process director campaign, human or separate-network acceptance. | | `ProjectI.Tests.EnemyArrivalTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyArrivalTests.cs); actual health/status/restart/death/reused-lifetime behavior, direct movement/Bolt/projectile readiness and personal sight. Two/four NGO peers use the live transport simulator with 75 ms delay, 15 ms jitter and 1% loss, read back applied parameters, record peer-estimated cue/deadline/action clocks and export actually rendered cue PNGs. The execution record adds a conservative common-host-clock observer after PNG rendering. One Editor process with duplicate client physics disabled; separate-network, human readability and purchased-group peer campaign remain distinct. | | `ProjectI.Tests.MenuRehostPlayModeTests` | [source](../Assets/_Project/Tests/PlayMode/MenuRehostPlayModeTests.cs) | | `ProjectI.Tests.OwnerArrivalInputNativeTests` | [source](../Assets/_Project/Tests/PlayMode/OwnerArrivalInputNativeTests.cs) | | `ProjectI.Tests.PaidAbilityCorrectionPlayModeTests` | [source](../Assets/_Project/Tests/PlayMode/PaidAbilityCorrectionPlayModeTests.cs) | | `ProjectI.Tests.PassiveEnemyLifecycleTests` | [source](../Assets/_Project/Tests/PlayMode/PassiveEnemyLifecycleTests.cs) | | `ProjectI.Tests.EnemyBehaviorScenarioTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorScenarioTests.cs); retained M5 driver situations (pursuit/disconnected explicitly partial M6/M7), retained four-metre cover, Weak/Persistent authored-snapshot preset resets, shared path/probe budget capture only after reset with clamping and old-request cleanup, interrupted remote placement restoration, status-assisted settled remote search/disconnect, diagnostic purity, manual/script cancellation, rejected ownership, acquired-resource failure cleanup, practice menu identity, repeated/downed launched-flight reset and real host/client presentation with zero client authority. Peer scene synchronization is disabled and duplicate physics isolated. [Editor launcher](../Assets/_Project/Editor/EnemyBehaviorSandboxWindow.cs): **ProjectI > Debug > Enemy AI > Shooter sandbox**, Manual one/three, F5/reset, Stop. [Driver](../Assets/_Project/Debug/EnemyBehavior/EnemyBehaviorScenarioDriver.cs) is Editor/development-only; the separate [build harness](../Assets/_Project/Debug/EnemyBehavior/EnemyInvestigationBuildHarness.cs) requires deliberate packaged inputs and `--m5b-search`. Normal stages/Play alone stay passive. [M5B instructions/evidence](superpowers/plans/2026-10-13-enemy-ai-implementation.md#m5b--bounded-local-investigation-with-per-enemy-search-strength); automated proof does not close human/hardware/separate-network acceptance | | `ProjectI.Tests.EnemyInvestigationSearchTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyInvestigationSearchTests.cs); actual same-sighting wall trace and far-side exposure, current-view inspection/dwell/new sample, monotonic route outcomes and cancellation, history across reentry/target switches, hearing/report nonrenewal, root/stun, recycled lifetime, separate path/probe FIFO limits and synchronized idle-to-search one/three/six-actor query timing with genuine shared sight-loss qualification, saturation as unknown, changed-geometry weights, Normal/Large stacked-floor bounds and merging, all blocked viewpoints, physical-cover native detour, claim alternatives, cached-route final deadline, startup snapshots/null definition, read-only overlays and real two/four-peer host authority/target death. Managed allocation counter is calibrated and reports unavailable where unsupported. Temporary owned geometry/navigation only; human, hardware and separate-network proof remain separate | | `ProjectI.Tests.EnemyBehaviorInvestigationTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorInvestigationTests.cs); 14 cases covering natural repeated peek/hide behind retained physical cover, captured combat-facing during a real 4 m sidestep, whole-route thresholds/native endpoint tails/U-shaped detours, long/nonpersonal travel retaining route-facing, bounded yaw/root/stun/startup tuning/cleanup, different hidden destinations retaining the same intent and actual facing, stable visible firing hold, shooter-only six-second expiry, ±105° sight boundary with actual occlusion, and finite arrival-facing/status/deadline admission. The added Scene-observer case verifies actual hidden memory/accepted destination, unchanged owners through refresh/framing, expired-history labels and cancellation/despawn clearing. Real shooter graph and temporary owned NavMeshData; no hidden tracking, memory renewal or M6 pursuit policy. User M5/M5B gameplay acceptance is recorded in the [15 October closure](superpowers/plans/2026-10-15-firing-position-ramp-fix.md#m5m5b-final-closure--authorized-15-october); automated and external qualification remain separate | | `ProjectI.Tests.EnemyBehaviorCapabilityContractTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorCapabilityContractTests.cs); reusable abstract interface conformance cases with subject/unspawned factories, run for bolt: pre-spawn/foreign/client refusal, matching/wrong-token cancellation, idempotence, paid reentry/restart, closed/stale lifetime rejection, independent instances and invalid clocks. Weapon cue/hit assertions are separate | | `ProjectI.Tests.EnemyBehaviorShooterTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorShooterTests.cs); real preparation/payment/commitment/burst/recovery, blocked eye/muzzle/stair lip, isolated cover reacquisition and independent actor contribution, actual stairs/close fire, unseen exit/report refusal, target switching/recycled lifetime, root/stun/death, capacity refusal, stalled-tail/no-catch-up, captured normal/elite/stage scaling, remote cues and real four-peer authority. [Shared setup](../Assets/_Project/Tests/PlayMode/EnemyBehaviorShooterFixture.cs) loads saved PlayTestScene, creates temporary geometry/NavMeshData at (400,0,400), injects services and restores owned stage/session/navigation. OrdinaryShooter.prefab binds the retained muzzle and native authored Start/Repeat/Try In Order graph; direct capability cases select the counter graph. No production promotion or navigation bake; M5's opt-in manual/debug route is described above, and Play alone remains passive. Constrained interface tick cadence is not hardware FPS/readability acceptance | | `ProjectI.Tests.EnemyBehaviorLifecycleTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorLifecycleTests.cs); isolated counter graph, server/client authority, private instances, typed bindings, interruption and lifecycle invalidation; loopback peer disables scene management and hides host scene infrastructure | | `ProjectI.Tests.EnemyBehaviorPerceptionTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorPerceptionTests.cs); isolated M2 fixture, real eye/muzzle occlusion, unseen exit, reports, accepted single/held gun hearing, downed/disconnected/foreign-stage/foreign-manager/recycled targets, run scope, cleanup, damage stability and read-only observation view. Inspectability only; movement, attacks, squad transport and human combat remain later gates | | `ProjectI.Tests.EnemyBehaviorNavigationTests` | [source](../Assets/_Project/Tests/PlayMode/EnemyBehaviorNavigationTests.cs); M3's five planning results; captured off-centre stair ascent/descent, first-step height-detail projection and actual 3/10/30 mm native ascent/descent, source-seam inward/head-on/area guards and root/push/stun action ownership, physically blocked narrow-ramp side rejection and supported-floor native-gap rejection; actual stairs/ramp/bridge/disconnected islands and normal/large native agents; captured M2 evidence/precision; claims, expiry, cancellation, restart/death and stage bounds; slow/root/stun/forced displacement; bounded normal/attack-style movement, physical obstruction/yield/alternatives and fair grouped requests; real four-peer server-only acceptance/replication. Loads saved PlayTestScene and creates temporary owned geometry/NavMeshData at (400,0,400), services and fixture actors; restores stage/session state. Counter graph is the prefab default; explicit graph cases select SeekPosition.asset. Play alone remains passive: this is an automated fixture, not a ready manual sandbox. No attacks, production bake, human or separate-network acceptance. | | `ProjectI.Tests.SphericalEffectPlayModeTests` | [source](../Assets/_Project/Tests/PlayMode/SphericalEffectPlayModeTests.cs) | ## PowerShell harnesses and contracts M5B's scoped packaged check is `Tools/Test-EnemyInvestigation.ps1 -Players 2` or `-Players 4`, after the idle Editor calls `ProjectI.Editor.EnemyInvestigationBuild.BuildDevelopment()`. It retains unique reports, build/input hashes, per-peer presentation/authority predicates, status-assisted stationary-remote-target search/disconnect, active-flight reset, connected-cohort host transport shutdown and confirmed owned-process exit. These are real NGO peers in one built development process with isolated duplicate physics; they do not prove independent-process control, unexpected host-process loss, latency or separate-network acceptance. See the M5B packet for final run identities and limitations. Commands run from the repository root in PowerShell. Defaults and full supported parameters are in each linked source `param` block; these examples are deliberate selections, not a batch to execute blindly. Built-player checks need the whole matching development build, online free-tier services where applicable, unique profiles and exclusive cohort ownership. They write unique `TestResults` directories unless stated otherwise. Failed setup or cleanup is not a product pass. | Harness / kind | Purpose and selection | Dependencies, output and limits | |---|---|---| | [Test-Combat.ps1](../Tools/Test-Combat.ps1) · built-player/network script | Built-player combat authority, weapons/health and shared outcomes. `& .\Tools\Test-Combat.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-CombatReadability.ps1](../Tools/Test-CombatReadability.ps1) · built-player/network script | Combat presentation and effect/HUD evidence; automation does not close human readability. `& .\Tools\Test-CombatReadability.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-CoreProcFeedback.ps1](../Tools/Test-CoreProcFeedback.ps1) · built-player/network script | Core/proc feedback and replicated presentation. `& .\Tools\Test-CoreProcFeedback.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-EnemyDirector.ps1](../Tools/Test-EnemyDirector.ps1) · built-player/network script | S4 controlled independent 2/4-process paid mixed arrivals, native geometry/damageability, per-peer latched cues/captures, financial/population limits, boss transition/adds, moving/split participants, pending reset, remote leave, graceful/abrupt host loss and rehost. Run `-Players 2 -DeliberateFailure` first (must exit nonzero), then `-Players 2` / `-Players 4`. | Matching DebugArena development build, real free-tier online session, actual read-back 75/15/1 simulation by default, fixed per-operation/whole-cohort ceilings, unique final result/evidence and confirmed owned-process cleanup. Seeded boss threshold is controlled; actual fortieth kill remains native/progression proof. Camera-directed PNGs prove rendering, not rear noticeability, human feel, representative hardware or separate-network acceptance. | | [Test-EnemyDirectorContracts.ps1](../Tools/Test-EnemyDirectorContracts.ps1) · controlled script | Valid peer identity/cue accepted; missing, duplicate, mismatched, late/unobserved and client-authority evidence rejected. | No Unity/player operation; validates [acceptance helper](../Tools/EnemyDirectorPeerEvidence.ps1), whose SHA256 is bound and rechecked by the real cohort. | | [Test-DebugArena.ps1](../Tools/Test-DebugArena.ps1) · built-player/network script | Retained damage-and-weakpoint scenario, failure proof, reset stress, remote-player disconnect and rehost/rejoin; default reset10, explicit routine2. Common regressions only after owned cleanup. `& .\Tools\Test-DebugArena.ps1 -Players 2 -ResetCycles 2` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. Additive `evidence.json` records full identity/profile/timing; retain existing `result.json`. | | [Test-DisplaySelection.ps1](../Tools/Test-DisplaySelection.ps1) · built-player/network script | Graphical built-player display selection/window rectangle checks for monitor overrides; launches Unity players. `& .\Tools\Test-DisplaySelection.ps1` | Windows graphical session, physical displays and matching graphical development build; TestResults/display- window/display reports. Does not establish other monitors/hardware not exercised. | | [Test-EncounterCommandAcknowledgement.ps1](../Tools/Test-EncounterCommandAcknowledgement.ps1) · controlled script | Controlled operation-completion/acknowledgement fencing and mixed-roster ranged fixture selection; no gameplay launch. `& .\Tools\Test-EncounterCommandAcknowledgement.ps1` | No Unity players; console/exit status and controlled artifacts. | | [Test-EncounterPolish.ps1](../Tools/Test-EncounterPolish.ps1) · built-player/network script | Full run encounter/reward/portal/travel/results regression; VerdantInitial selects current first-stage entry. `& .\Tools\Test-EncounterPolish.ps1 -VerdantInitial -DelayMs 75 -JitterMs 15 -LossPercent 1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-Encounters.ps1](../Tools/Test-Encounters.ps1) · built-player/network script | Built-player encounter scheduling, shared rewards and stage/run progression. `& .\Tools\Test-Encounters.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-Foundation.ps1](../Tools/Test-Foundation.ps1) · built-player/network script | Online session capacity/ownership/movement, leave/kick/host loss and retry; LifecycleRegressionOnly selects rehost focus. `& .\Tools\Test-Foundation.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-MainMenu.ps1](../Tools/Test-MainMenu.ps1) · built-player/network script | Normal ready/loadout/admission/menu lifecycle; real network service. `& .\Tools\Test-MainMenu.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-OwnerArrivalInput.ps1](../Tools/Test-OwnerArrivalInput.ps1) · built-player/network script | Normal-menu matching owners, scoped production motor expiry/refusal/displacement; naturalCampaign=false, renderedHudCapture=false. `& .\Tools\Test-OwnerArrivalInput.ps1 -Players 2` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. Additive `evidence.json` records full identity/profile/timing; retain existing `result.json`. | | [Test-PlayerFeedback.ps1](../Tools/Test-PlayerFeedback.ps1) · built-player/network script | Actual player feedback/replication scenarios; human feel remains separate. `& .\Tools\Test-PlayerFeedback.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Test-PortalEntryOrder.ps1](../Tools/Test-PortalEntryOrder.ps1) · controlled script | Controlled geometry-based portal owner order; no players. `& .\Tools\Test-PortalEntryOrder.ps1` | No Unity players; console/exit status and controlled artifacts. | | [Test-TestEvidence.ps1](../Tools/Test-TestEvidence.ps1) · controlled script | Controlled immutable timing/identity/cleanup/ordering contracts; no players. `& .\Tools\Test-TestEvidence.ps1` | No Unity players; console/exit status and controlled artifacts. | | [Test-WarpSettlement.ps1](../Tools/Test-WarpSettlement.ps1) · built-player/network script | Matching owners and small/large warp settlement/authority lifecycle. `& .\Tools\Test-WarpSettlement.ps1` | Matching build + relevant scenes/assets; unique TestResults reports/logs, owned-process cleanup; no human/hardware/separate-network claim. | | [Wiki/Test-Wiki.ps1](../Tools/Wiki/Test-Wiki.ps1) · documentation | `& .\Tools\Wiki\Test-Wiki.ps1` runs Python collector/artwork contracts and freshness/link/anchor checks. | Pinned existing Wiki venv; no Editor/game. Uses generated source snapshot; refresh after reviewed source/link changes. | | [Wiki/test_wiki.py](../Tools/Wiki/test_wiki.py), [test_artwork.py](../Tools/Wiki/test_artwork.py) · controlled documentation | `Tools/Wiki/.venv/Scripts/python.exe -m unittest discover -s Tools/Wiki -p "test_*.py"` | Static parser/export/artwork/link tests, not gameplay or C# execution. | Shared helpers (not standalone test launchers): [TestEvidence.ps1](../Tools/TestEvidence.ps1) owns additive identity/timing/cleanup; [OrdinaryArrivalCampaignRules.ps1](../Tools/OrdinaryArrivalCampaignRules.ps1) owns canonical campaign rules. Read their consuming tests above. ## Build and manual gates | Gate / source | Selection / output | Meaning and escalation | |---|---|---| | Normal Windows development · [Foundation builder](../Assets/_Project/Editor/PrototypeFoundationBuilder.cs) | **ProjectI > Foundation > Build Windows prototype**; `Builds/Prototype/ProjectI.exe`, build-result.txt | Current normal menu/stage development build; whole folder identity required. Build success does not prove tests/gameplay. | | Debug development · [DebugArenaBuild](../Assets/_Project/Editor/DebugArenaBuild.cs) | **ProjectI > Debug > Build Windows test arena** / `DebugArenaBuild.BuildDevelopment()`; `Builds/DebugArena` | Necessary when affected debug/runtime content changed; arena entry differs from normal menu. | | Release exclusion · [DebugArenaBuild](../Assets/_Project/Editor/DebugArenaBuild.cs) | **ProjectI > Debug > Verify release exclusion build** / `DebugArenaBuild.BuildRelease()`; inspect build report and packed assets/managed markers | Prove development diagnostics/assets excluded when footprint changes; Editor-only runner does not alone require rebuilding players. | | Human play/readability · [setup](SETUP.md), [arrival evidence](PACK_ARRIVAL_VALIDATION.md), [tracers](TRACER_REVISION_VALIDATION.md) | Actual independently controlled solo/four-player play, visible HUD/effects and recorded build/scenario | Controls, feel, readability, balance; screenshots/automation alone cannot close it. | | Separate-network · [setup acceptance sequence](SETUP.md#separate-network-acceptance-test) | Two/four independently controlled PCs; at least one outside host network, same full build | Connection, latency, leave/rejoin/host-loss under real networks; local multiprocess proof is narrower. | | Hardware performance · [project roadmap](PROJECT_PLAN.md) | Named representative hardware, actual four-player stress and profiling | Historical test duration or host-only query cost is not target hardware acceptance. | ## Historical cost These recorded result durations are scoped to saved revisions/fixtures; import, setup, export, network and total session overhead may be missing. They are not new passes or performance thresholds. | Saved evidence / date | Scope / recorded duration | Interpretation | |---|---|---| | `TestResults/pack-contact-ingress-full-editmode.xml` · 9 October 2026 | 1,001 cases / 1.877 s | Cheap rule-heavy suite, native costs separate. | | `TestResults/pack-actions-verified-full-playmode.xml` · 9 October 2026 | 65 cases / 206.607 s; arena about 139.55 s | Explicit arena selection can avoid unrelated work during a focused fix. | | `TestResults/owner-arrival-final-sequential-playmode.xml` · 10 October 2026 | 184 cases / 359.472 s | Broad native suite belongs at integrated acceptance, not each correction. | Build/source identity and limitations for these examples are retained in [pack actions](PACK_ACTIONS_VALIDATION.md) and [arrival validation](PACK_ARRIVAL_VALIDATION.md). Current fresh timing and membership evidence belongs to [this execution record](TEST_REFINEMENT_EXECUTION.md). Missing phase times are unknown. Inventory total: 150 fixture source declarations (parameterized leaves counted only by discovery); 23 top-level test scripts plus Wiki checks.