| TR-ID | System | Requirement | ADR | Story | Test File | Test Status |
| TR-tide-001 | Tide | DockedLands(seed, t, config) pure function in an engine-free assembly | ADR-0001, ADR-0003 | story-001-docking-sequence; story-005-schedule-instance-fixture | Tests/EditMode/Tide/DeterminismTests.cs; Tests/EditMode/Tide/DockingSequenceTests.cs; Tests/EditMode/TideMathTests.cs | COVERED |
| TR-tide-002 | Tide | long UTC seconds, StableHash64, FloorDiv/FloorMod; `System.Rando | ADR-0001 | story-005-schedule-instance-fixture | Tests/EditMode/Tide/DeterminismTests.cs; Tests/EditMode/TideMathTests.cs | COVERED |
| TR-tide-003 | Tide | host-authoritative t replicated; client evaluation presentation-only | ADR-0001 (roles) | story-010-clock-adapter | — | BLOCKED (Gate 0) |
| TR-tide-004 | Tide | monotonic lastKnownGoodT, persisted | ADR-0001, ADR-0004 | story-007-tide-clock | Tests/EditMode/Tide/TideClockTests.cs | COVERED |
| TR-tide-005 | Tide | NextBoundary schedule-one-wake-up, no polling, ±5 s | ADR-0001 | story-004-boundary-and-tint | Tests/EditMode/Tide/BoundaryAndTintTests.cs | COVERED |
| TR-tide-006 | Tide | dock/undock edge events + PreloadLeadTime notice | ADR-0001, ADR-0005 | story-007-tide-clock; story-009-boundary-legality | Tests/EditMode/Tide/BoundaryLegalityTests.cs; Tests/EditMode/Tide/TideClockTests.cs | COVERED |
| TR-tide-007 | Tide | derived-only API; raw t/φ/W never exposed | ADR-0001 | story-003-variation-recurrence; story-007-tide-clock; story-009-boundary-legality | Tests/EditMode/Tide/BoundaryLegalityTests.cs; Tests/EditMode/Tide/TideClockTests.cs; Tests/EditMode/Tide/VariationAndRecurrenceTests.cs | COVERED |
| TR-tide-008 | Tide | amber/violet intensities (double); violet held through EvictionGrace | ADR-0001, ADR-0013 §5 (driver; neutral on | story-004-boundary-and-tint; story-002-tint-driver | Tests/EditMode/Tide/BoundaryAndTintTests.cs; Tests/EditMode/Tint/TideTintDriverTests.cs | COVERED |
| TR-tide-009 | Tide | TideConfig data-driven, validated, versioned; epoch on N change | ADR-0001, ADR-0006 | story-001-data-bootstrap; story-003-tide-config; story-009-configversion-epoch; story-008-epochs-and-reconcile | Tests/EditMode/Tide/EpochAndReconcileTests.cs; Tests/EditMode/TideMathTests.cs | COVERED |
| TR-tide-010 | Tide | ≤ 50 µs / 0 alloc hard gates (TD ruling); ≤ 0.1 ms advisory | ADR-0001 | story-006-performance-gates; story-010-clock-adapter | Tests/EditMode/Tide/PerformanceGateTests.cs | COVERED |
| TR-tide-011 | Tide | signed long cycle/docking/round indices — negatives legitimate | ADR-0001 | story-001-docking-sequence; story-002-global-deck; story-008-epochs-and-reconcile | Tests/EditMode/Tide/DeckTests.cs; Tests/EditMode/Tide/DockingSequenceTests.cs; Tests/EditMode/Tide/EpochAndReconcileTests.cs | COVERED |
| TR-tide-012 | Tide | culture/thread-independent bit-identical schedule math | ADR-0001 | story-005-schedule-instance-fixture | Tests/EditMode/Tide/DeterminismTests.cs; Tests/EditMode/TideMathTests.cs | COVERED |
| TR-tide-013 | Tide | client extrapolated t ≤ host t + one replication interval | — | story-010-clock-adapter | — | BLOCKED (Gate 0) |
| TR-net-001 | Netcode | NGO 2.x host-and-play; no dedicated server / migration / rollback | technical-preferences; every ADR | — | — | NO STORY |
| TR-net-002 | Netcode | two authority rails | ADR-0002 (host rail) | — | — | NO STORY |
| TR-net-003 | Netcode | late-join full snapshot | — | — | — | NO ADR |
| TR-net-004 | Netcode | disconnect retains HP/Downed/timer; rejoin = late join | ADR-0015 (PlayerKey rows), ADR-0004 §6 | — | — | NO STORY |
| TR-net-005 | Netcode | Steam transport (package TBD) | — | — | — | NO ADR |
| TR-net-006 | Netcode | one ordered arrival channel; tiebreak lowest OwnerClientId | ADR-0002 | story-006-host-commit-queue | Tests/EditMode/HostCommitQueueTests.cs | COVERED |
| TR-net-007 | Netcode | every host-rail commit a non-yielding critical section | ADR-0002, ADR-0003 | story-004-command-shapes; story-005-commands-execute-sync | Tests/EditMode/CommandShapeTests.cs; Tests/EditMode/CommandEnforcementTests.cs | COVERED |
| TR-net-008 | Netcode | drain phase pinned vs owner movement writes | ADR-0002 | — | — | NO STORY |
| TR-net-009 | Netcode | fired commits never un-happen on disconnect; un-fired intents are no-ops | ADR-0002 §9 | story-006-host-commit-queue | Tests/EditMode/HostCommitQueueTests.cs | COVERED |
| TR-cam-001 | Camera | orthographic 64 px/u at 1080p, integer multiples; PPU 32, point | ADR-0003 (unit/PPU pin), ADR-0013 (fragmen | story-005-camera-rule-and-import-gate | Tests/EditMode/Tint/CameraRulesTests.cs; Tests/EditMode/Tint/TextureImportGateTests.cs | COVERED |
| TR-cam-002 | Camera | smoothed follow + aim bias; never detaches; hard cuts; no shake | — | — | — | NO ADR |
| TR-save-001 | Save | one host-owned file; write-temp-then-swap; rolling backups | ADR-0004 | story-004-flush-worker-durability; story-008-durability-measurement | Tests/EditMode/Save/AtomicFileWriterDurableTests.cs; Tests/PlayMode/FlushWorkerTests.cs | COVERED |
| TR-save-002 | Save | persisted tables incl. both instanceId counters, TideState, equipped | ADR-0004 | story-001-save-seam-json; story-007-tide-table-counters-roundtrip | Tests/EditMode/Save/SaveSeamTests.cs; Tests/EditMode/Save/TideAndCountersTests.cs | COVERED |
| TR-save-003 | Save | per-drain durability within flushDeadlineMs; loss unit = drains since | ADR-0004 | story-003-registry-dirty-flush-queue; story-007-tide-table-counters-roundtrip; story-008-durability-measurement | Tests/EditMode/Save/SavePersistenceTests.cs; Tests/EditMode/Save/TideAndCountersTests.cs | COVERED |
| TR-save-004 | Save | saveFormatVersion/configVersion gate; never migrate silently | ADR-0004 | story-002-reader-and-manifest; story-009-configversion-epoch; story-001-save-seam-json; story-005-load-pick-gate-clock | Tests/EditMode/Save/SaveLoaderTests.cs; Tests/EditMode/Save/SaveSeamTests.cs | COVERED |
| TR-save-005 | Save | fixed reconcile pipeline; owners' predicates; only HarvestDiff droppab | ADR-0004, ADR-0003 | story-003-registry-dirty-flush-queue; story-006-reconcile-order-placement | Tests/EditMode/Save/SavePersistenceTests.cs; Tests/EditMode/Save/SaveReconcileTests.cs | COVERED |
| TR-save-006 | Save | load: full HP, no Downed, position per tide EC1; no merge/import path | ADR-0004, ADR-0003 | story-005-load-pick-gate-clock; story-006-reconcile-order-placement | Tests/EditMode/Save/SaveLoaderTests.cs; Tests/EditMode/Save/SaveReconcileTests.cs | COVERED |
| TR-save-007 | Save | no file I/O on the host main thread during play | ADR-0004 | story-004-flush-worker-durability | Tests/EditMode/Save/AtomicFileWriterDurableTests.cs; Tests/PlayMode/FlushWorkerTests.cs | COVERED |
| TR-save-008 | Save | late flush = loud log, never a gameplay effect | ADR-0004 | story-002-save-config-stage; story-004-flush-worker-durability | Tests/EditMode/Save/AtomicFileWriterDurableTests.cs; Tests/EditMode/Save/SaveConfigTests.cs; Tests/EditMode/SourceDataSmokeTests.cs; Tests/P | COVERED |
| TR-save-009 | Save | loading raises no gameplay events | ADR-0004 | story-006-reconcile-order-placement | Tests/EditMode/Save/SaveReconcileTests.cs | COVERED |
| TR-move-001 | Movement | Input System; one action map; decoupled persistent aim | ADR-0007 | story-001-action-asset; story-002-input-shapes-aim; story-003-build-mode-routing; story-004-input-config-stage; story-005-input-adapter | Tests/EditMode/GameDataLoaderTests.cs; Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Input/AimResolverTests.cs; Tests/EditMode/Input/ | COVERED |
| TR-move-002 | Movement | owner-authoritative predicted locomotion 6 u/s, instant accel | — | — | — | NO ADR |
| TR-move-003 | Movement | collision blocks never damages; no player/enemy body collision | — | — | — | NO ADR |
| TR-move-004 | Movement | remotes interpolated never extrapolated | — | — | — | NO ADR |
| TR-move-005 | Movement | closed teleport-snap list; EC21 correction as interpolated write | ADR-0015 (Snap), ADR-0005 (deposit event | — | — | NO STORY |
| TR-move-006 | Movement | schema-negative: no MoveSpeedModifier/stamina/encumbrance | ADR-0003 | story-002-input-shapes-aim | Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Input/AimResolverTests.cs; Tests/EditMode/Input/InputShapeTests.cs | COVERED |
| TR-inv-001 | Inventory | ItemStack + CanAdd/Add/Remove/Count; tagged stacks never merge | ADR-0003 (shape) | story-001-stack-rules; story-002-inventory-config; story-003-carry-and-storage-components | Tests/EditMode/CiDataGateTests.cs; Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Inventory/InventoryComponentsTests.cs; Tests/EditMod | COVERED |
| TR-inv-002 | Inventory | CarryInventory owner-auth; SharedStorage host-auth instances | — | story-003-carry-and-storage-components | Tests/EditMode/Inventory/InventoryComponentsTests.cs | COVERED / NO ADR |
| TR-inv-003 | Inventory | transfers atomic host transactions in arrival order | ADR-0002 (model) | story-004-transfer-command | Tests/EditMode/CommandEnforcementTests.cs; Tests/EditMode/Inventory/InventoryTransferCommandTests.cs | COVERED |
| TR-inv-004 | Inventory | no world-item entities; 2 equipment slots | — | story-001-stack-rules; story-003-carry-and-storage-components | Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Inventory/InventoryComponentsTests.cs; Tests/EditMode/Inventory/StackBagTests.cs | COVERED / NO ADR |
| TR-inv-005 | Inventory | stack-list serialization (CARRY per player, STORAGE per container) | ADR-0004 | story-005-save-tables | Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Inventory/InventorySaveTablesTests.cs; Tests/EditMode/Save/SaveSeamTests.cs | COVERED |
| TR-inv-006 | Inventory | transferBatchWindow host-transaction batching knob | — | story-002-inventory-config; story-004-transfer-command | Tests/EditMode/CiDataGateTests.cs; Tests/EditMode/CommandEnforcementTests.cs; Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Inventory | COVERED |
| TR-inv-007 | Inventory | CARRY replication representation (undefined in the quick-spec) | — | — | — | NO ADR |
| TR-combat-001 | Combat | player state machine + Hurt overlay | ADR-0015 | — | — | NO STORY |
| TR-combat-002 | Combat | unified strike intent at windup start | ADR-0015 | — | — | NO STORY |
| TR-combat-003 | Combat | host resolves at host-stamped instant vs current positions | ADR-0015 | — | — | NO STORY |
| TR-combat-004 | Combat | predicted vs host-confirmed feedback split | ADR-0015 §6 | story-001-feedback-rules; story-002-outcome-bus; story-003-predicted-presenter; story-004-confirmed-presenter; story-006-fences-and-honesty | Tests/EditMode/Feedback/ConfirmedPresenterTests.cs; Tests/EditMode/Feedback/FeedbackFenceTests.cs; Tests/EditMode/Feedback/FeedbackRulesTest | COVERED |
| TR-combat-005 | Combat | F1–F5 pure, AwayFromZero, EditMode | ADR-0003, ADR-0015 | — | — | NO STORY |
| TR-combat-006 | Combat | IEnemyCombat.EnterTelegraph; telegraph ≥ 400 ms; stagger; knockback; i | ADR-0015 | — | — | NO STORY |
| TR-combat-007 | Combat | telegraph phase replicated state | ADR-0015 (named) | — | — | NO STORY |
| TR-combat-008 | Combat | dash i-frames owner-auth; host wins if not received | ADR-0015 | — | — | NO STORY |
| TR-combat-009 | Combat | Downed/revive/bleed-out/Dead → home; keep-everything | ADR-0015 | — | — | NO STORY |
| TR-combat-010 | Combat | soft-close first on the host tick | ADR-0002 | — | — | NO STORY |
| TR-combat-011 | Combat | SwingLanded/DamageAbsorbed host-confirmed only | ADR-0003, ADR-0015 | story-002-outcome-bus | Tests/EditMode/Feedback/OutcomeBusTests.cs | COVERED |
| TR-combat-012 | Combat | load validation (telegraph, phase sum, DR, bands, unarmed) | ADR-0006 | story-010-combat-config | Tests/EditMode/CombatStageTests.cs | COVERED |
| TR-combat-013 | Combat | HUD data: own/party HP, Downed indicator, damage numbers | ADR-0015 (IPlayerCombatView), ADR-0014 ( | story-004-confirmed-presenter; story-005-flyouts-and-edges; story-007-hud | Tests/EditMode/Feedback/ConfirmedPresenterTests.cs; Tests/EditMode/Feedback/WorldSpaceUiFenceTests.cs; Tests/EditMode/Ui/HudTests.cs; Tests/ | COVERED |
| TR-combat-014 | Combat | same-tick mutual kill: enemy damage first, both apply | ADR-0002 (1b), ADR-0015 | — | — | NO STORY |
| TR-combat-015 | Combat | combat state never persisted | ADR-0004 §6 | — | — | NO STORY |
| TR-ldu-001 | LDU | preload / activate at φ / teardown at grace expiry | ADR-0005 | story-006-addressables-groups-gates; story-008-land-lifecycle-slots; story-009-landnet-ngo | Tests/EditMode/Land/AddressablesGateTests.cs; Tests/EditMode/Land/LandLifecycleTests.cs; Tests/PlayMode/LandCatalogCheckTests.cs; Tests/Play | COVERED |
| TR-ldu-002 | LDU | layout() pure, byte-identical | ADR-0003, ADR-0005 | story-003-layout-build; story-007-candidate-cells-tool | Tests/EditMode/Land/CandidateCellsTests.cs; Tests/EditMode/Land/LayoutTests.cs | COVERED |
| TR-ldu-003 | LDU | KnownLandTemplates append-only, seeded, permanent | ADR-0004, ADR-0005 | story-001-land-shapes; story-004-known-land-templates | Tests/EditMode/Land/KnownLandTemplatesTests.cs; Tests/EditMode/Land/LandShapeTests.cs | COVERED |
| TR-ldu-004 | LDU | sole-source warning; depositPoint + socketNoBuildRadius per socket | ADR-0005, ADR-0006 | story-001-land-shapes; story-002-templates-and-knobs; story-005-sole-source-strip-readout | Tests/EditMode/Land/LandShapeTests.cs; Tests/EditMode/Land/StripReadoutTests.cs; Tests/EditMode/Land/TemplateDataTests.cs; Tests/EditMode/So | COVERED |
| TR-ldu-005 | LDU | enemy spawn contract | ADR-0005 (call) | story-008-land-lifecycle-slots | Tests/EditMode/Land/LandLifecycleTests.cs; Tests/PlayMode/LandLifecyclePlayTests.cs | COVERED |
| TR-ldu-006 | LDU | traversalProfile; stripTimeEstimate CI readout | ADR-0006 | story-001-land-shapes; story-002-templates-and-knobs; story-005-sole-source-strip-readout | Tests/EditMode/Land/LandShapeTests.cs; Tests/EditMode/Land/StripReadoutTests.cs; Tests/EditMode/Land/TemplateDataTests.cs; Tests/EditMode/So | COVERED |
| TR-ldu-007 | LDU | memory: ≤ 2 GB; one atlas per template; 64 MB budget owned by LandLifecy | ADR-0005 | story-002-templates-and-knobs; story-006-addressables-groups-gates | Tests/EditMode/Land/AddressablesGateTests.cs; Tests/EditMode/Land/TemplateDataTests.cs; Tests/EditMode/SourceDataSmokeTests.cs; Tests/PlayMo | COVERED |
| TR-ldu-008 | LDU | Append at first φ only, never at preload | ADR-0005 | story-004-known-land-templates; story-008-land-lifecycle-slots | Tests/EditMode/Land/KnownLandTemplatesTests.cs; Tests/EditMode/Land/LandLifecycleTests.cs; Tests/PlayMode/LandLifecyclePlayTests.cs | COVERED |
| TR-harv-001 | Harvesting | node swingsRemaining host-auth, replicated | ADR-0005 (LandNet list home) | story-003-node-table-and-diffs | Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Harvest/NodeTableAndDiffsTests.cs; Tests/EditMode/Save/SaveReconcileTests.cs; Tests/Edi | COVERED |
| TR-harv-002 | Harvesting | three-gate resolution in one critical section | ADR-0002 | story-004-harvest-resolve-command; story-005-soft-close-drop-and-teardown-order | Tests/EditMode/CommandEnforcementTests.cs; Tests/EditMode/Harvest/HarvestResolveCommandTests.cs; Tests/EditMode/Harvest/SoftCloseDropAndTear | COVERED |
| TR-harv-003 | Harvesting | HarvestDiff sparse, synchronous write | ADR-0004 (order/predicate) | story-003-node-table-and-diffs; story-008-diff-reconcile | Tests/EditMode/GameDataShapeTests.cs; Tests/EditMode/Harvest/DiffReconcileTests.cs; Tests/EditMode/Harvest/NodeTableAndDiffsTests.cs; Tests/ | COVERED |
| TR-harv-004 | Harvesting | referent chosen at windup start; own phase constants | ADR-0003, ADR-0015 | story-001-harvest-rules; story-002-harvest-config; story-006-referent-and-intent; story-007-harvest-phase-machine | Tests/EditMode/AssemblyEnforcementTests.cs; Tests/EditMode/CiDataGateTests.cs; Tests/EditMode/GameDataLoaderTests.cs; Tests/EditMode/GameDat | COVERED |
| TR-harv-005 | Harvesting | integer deterministic yield; teardown after last-tick resolution | ADR-0002, ADR-0003 | story-001-harvest-rules; story-004-harvest-resolve-command; story-005-soft-close-drop-and-teardown-order | Tests/EditMode/CommandEnforcementTests.cs; Tests/EditMode/Harvest/HarvestResolveCommandTests.cs; Tests/EditMode/Harvest/HarvestRulesTests.cs | COVERED |
| TR-harv-006 | Harvesting | load validation | ADR-0006 | story-002-harvest-config | Tests/EditMode/AssemblyEnforcementTests.cs; Tests/EditMode/CiDataGateTests.cs; Tests/EditMode/GameDataLoaderTests.cs; Tests/EditMode/GameDat | COVERED |
| TR-harv-007 | Harvesting | host proximity sanity check; confirmed crack/flyout | ADR-0002, ADR-0015 | story-004-harvest-resolve-command; story-006-referent-and-intent | Tests/EditMode/CommandEnforcementTests.cs; Tests/EditMode/Harvest/HarvestResolveCommandTests.cs; Tests/EditMode/Harvest/ReferentAndIntentTes | COVERED |
| TR-harv-008 | Harvesting | harvestWindup + harvestActive ≥ 0.18 load rule | ADR-0006 stage 3 | story-002-harvest-config | Tests/EditMode/AssemblyEnforcementTests.cs; Tests/EditMode/CiDataGateTests.cs; Tests/EditMode/GameDataLoaderTests.cs; Tests/EditMode/GameDat | COVERED |
| TR-craft-001 | Crafting | RecipeDef + 11-row validation | ADR-0006 | — | — | NO STORY |
| TR-craft-002 | Crafting | KnownRecipes union reconcile | ADR-0004 | — | — | NO STORY |
| TR-craft-003 | Crafting | craft legality + commit critical section | ADR-0002 (model) | — | — | NO STORY |
| TR-craft-004 | Crafting | InstanceMetadata table; orphan/mystery reconcile | ADR-0004, ADR-0003 (IGearHooks) | — | — | NO STORY |
| TR-craft-005 | Crafting | hook values per tier + override; ceilings validated | ADR-0006 | — | — | NO STORY |
| TR-craft-006 | Crafting | durability drain from events; instant repair | ADR-0003, ADR-0015 (events) | — | — | NO STORY |
| TR-craft-007 | Crafting | era gate reads KnownLandTemplates; ItemDef.SourceTemplates | ADR-0006, ADR-0005 | — | — | NO STORY |
| TR-craft-008 | Crafting | craft beat predicted; host commit; no occupancy lock | — | — | — | NO ADR |
| TR-craft-009 | Crafting | schema-negatives; instant swap equip | ADR-0003 | — | — | NO STORY |
| TR-craft-010 | Crafting | stationRange one knob, two semantics (Craft reach / BB cost draw) | ADR-0006 stage 6 | — | — | NO STORY |
| TR-bb-001 | Base Building | StructureDef + 12-row validation | ADR-0006 | — | — | NO STORY |
| TR-bb-002 | Base Building | StructureInstance registry; replication | ADR-0003 (shape) | — | — | NO STORY |
| TR-bb-003 | Base Building | client-local build mode; pure snap; no-alloc F1 | ADR-0003 | story-007-unity-interop | Tests/EditMode/InteropEnforcementTests.cs | COVERED |
| TR-bb-004 | Base Building | placementLegality 8 conjuncts, pure; one critical section | ADR-0002, ADR-0003 | — | — | NO STORY |
| TR-bb-005 | Base Building | demolishLegality; refund to CARRY; relic reconcile | ADR-0004 | — | — | NO STORY |
| TR-bb-006 | Base Building | two station predicates; storage placement spawns SharedStorage | ADR-0003 | — | — | NO STORY |
| TR-bb-007 | Base Building | wall colliders; EC21 owner-rail correction | ADR-0003 (FindCorrectionCell) | — | — | NO STORY |
| TR-bb-008 | Base Building | CI gates live-recomputed | ADR-0006 stage 10 | story-004-validation-pipeline | Tests/EditMode/PipelineTests.cs | COVERED |
| TR-bb-009 | Base Building | ghost outline + grid overlay < 100 draw calls | ADR-0013 §8 (ghost 0 + grid 1 = +1; V4 mar | story-004-build-overlay | Tests/EditMode/Tint/BuildOverlaySetupTests.cs; Tests/EditMode/Tint/ReachGridMeshTests.cs; Tests/PlayMode/BuildOverlayPlayTests.cs; Tests/Pla | COVERED |
| TR-bb-010 | Base Building | EC21 four-neighbour ring-check algorithm pinned | ADR-0003 | — | — | NO STORY |
| TR-bb-011 | Base Building | host-position read semantics (exact host / one-RTT remote) | ADR-0003 (IHostPositions) | — | — | NO STORY |
| TR-ai-001 | Enemy AI | host-simulated flat state machines; no client AI | ADR-0015 (step 3) | — | — | NO STORY |
| TR-ai-002 | Enemy AI | separation steering; aggro/leash/de-aggro heal | — | — | — | NO ADR |
| TR-ai-003 | Enemy AI | maxUninterruptibleTelegraphsPerTarget = 1 | ADR-0006, ADR-0015 | — | — | NO STORY |
| TR-ai-004 | Enemy AI | composition pure of (template, variationSeed); ephemeral | ADR-0003 (home) | — | — | NO STORY |
| TR-ai-005 | Enemy AI | density monotonic load-check; only EnterTelegraph | ADR-0006, ADR-0015 | — | — | NO STORY |
| TR-ui-001 | UI/HUD | closed screen-space HUD list; UI Toolkit (architecture ruling) | ADR-0014 §1 (UI Toolkit screens + sprite w | story-001-theme-panels-uss-gate; story-007-hud | Tests/EditMode/Ui/HudTests.cs; Tests/EditMode/Ui/UiSetupTests.cs; Tests/PlayMode/HudPlayTests.cs; Tests/PlayMode/UiScaleSpikeTests.cs | COVERED |
| TR-ui-002 | UI/HUD | co-op affordances | ADR-0014 (edge indicators, who-took-what) | — | — | NO STORY |
| TR-ui-003 | UI/HUD | reason-string precedence / stability / hysteresis | ADR-0014 §6 (ReasonSelector.Step pure, i | story-003-reason-selector | Tests/EditMode/Ui/ReasonSelectorTests.cs | COVERED |
| TR-ui-004 | UI/HUD | aggregation ban; gamepad nav + focus; contrast; no animation-gated input | ADR-0007 (rebind, capture), ADR-0014 (sche | story-006-binding-persistence; story-007-rebind-service; story-002-ui-json-config; story-004-settings-service; story-005-panel-manager; story-006-rebind-disposal-timeout; story-008-title-and-pause; story-009-settings-screen; story-010-schema-fences | Tests/EditMode/Input/BindingPersistenceTests.cs; Tests/EditMode/Ui/PanelManagerTests.cs; Tests/EditMode/Ui/SchemaFenceTests.cs; Tests/EditMo | COVERED |
| TR-tint-001 | Tide-Tint | one Shader Graph sprite shader; _TideTint/_TideAmount globals; never | ADR-0013 §1 (Scope = Global; V1 + ab | story-001-driftlayer-shader-gate; story-003-taxonomy-batching-negatives | Tests/EditMode/Tint/TideTintNegativesTests.cs; Tests/EditMode/Tint/TideTintShaderGateTests.cs; Tests/PlayMode/TideTintRenderTests.cs; Tests/ | COVERED |
| TR-tint-002 | Tide-Tint | DriftLayer taxonomy exclusions | ADR-0013 §2 (exclusion by material, not | story-003-taxonomy-batching-negatives | Tests/EditMode/Tint/TideTintNegativesTests.cs; Tests/PlayMode/TideTintTaxonomyTests.cs | COVERED |
| TR-tint-003 | Tide-Tint | consumes tide floats per frame; future post-process Render-Graph-native | ADR-0013 §5–§6 (TideTintDriver; no custo | story-002-tint-driver; story-006-tint-fences | Tests/EditMode/Tint/TideTintDriverTests.cs; Tests/EditMode/Tint/TideTintFenceTests.cs | COVERED |
| TR-tint-004 | Art/Netcode | flipbook animation via synced frameIndex | — | — | — | NO ADR |