| Deterministic sim (Invariant #1) | T1 + T2 + T3 | Hash comparison across runs/platforms |
| Pluggable network model (Invariant #2) | T2 | Integration tests with mock network |
| Tiered modding (Invariant #3) | T1 + T3 | Sandbox smoke + escape vector suite |
| Fog-authoritative server | T2 + T3 | Anti-cheat detection + desync injection |
| Ed25519 session auth | T2 | Protocol handshake verification (challenge-response, nonce freshness, session establishment) |
| Workshop package integrity | T2 + T4 | Sign/verify chain + ecosystem lifecycle |
| RTL/BiDi text handling | T3 | QA corpus regression suite |
| Display name validation (V46) | T3 | UTS #39 confusable corpus |
| Key rotation (V47) | T2 + T4 | T2: rotation sequence monotonicity, cooldown enforcement, emergency recovery (at M5). T4: full lifecycle exercise (at M9) |
| Anti-cheat behavioral detection | T3 + T4 | Labeled replay corpus evaluation |
| Desync classification (V55) | T4 | Injected bug vs cheat classification |
| Performance budgets | T3 | criterion benchmarks with regression gates |
| Save/load integrity | T3 | Round-trip hash comparison |
Path security (strict-path) | T1 + T3 | Unit tests + fuzz testing |
| WASM inter-module isolation (V50) | T3 (planned) | Basic cross-module probe attempts → all blocked (M6); expanded cross-module integration coverage including shared-host-resource leaks and memory growth fuzzing (M7–M8) — see api-misuse-patterns.md gap table for the M7 integration scenario |
| P2P replay attestation (V53) | T2 + T4 | T2: basic signed-hash exchange smoke test (at M4). T4: full multi-peer verification exercise (at M9) |
| Campaign completion | T4 | Automated playthrough |
| Visual UI consistency | T4 | Pixel-diff regression |
| Sub-tick ordering fairness (D008) | T2 + T3 | Simultaneous-order scenarios; timestamp tiebreak verification |
| Order validation completeness (D012) | T1 + T3 | Exhaustive order-type × rejection-category matrix; proptest |
| Merkle tree desync localization | T2 + T3 | Inject divergence → verify O(log N) leaf identification |
| Snapshot reconnection (D007) | T2 + T4 | Disconnect/reconnect/hash-match; corruption/stale rejection |
| Workshop dependency resolution (D030) | T1 + T3 | Transitive, diamond, circular, and conflict dependency graphs |
| Campaign DAG validation (D021) | T1 + T3 | Cycle/reachability/dangling-ref rejection at construction |
| Campaign roster carryover (D021) | T2 + T4 | Surviving units + veterancy persist across mission transitions |
| Mod profile fingerprint stability (D062) | T2 + T3 | Serialize/deserialize/recompute identity; ordering independence |
| WASM memory growth defense (V50) | T3 | Adversarial memory.grow → denied; host stable |
| WASM float rejection in sim | T3 | Module attempts float write to sim → rejected |
| Pathfinding LOD + multi-layer (D013) | T2 + T3 | Path correctness across LOD transitions; benchmark vs budget |
| Balance preset inheritance (D019) | T1 + T2 + T3 | Chain resolution, cycle rejection, multiplayer hash match |
| Weather determinism (D022) | T2 + T3 | Schedule sync + surface state match across instances |
| AI behavior determinism (D041) | T2 + T3 | Same seed → identical build order; cross-platform hash match |
| Command permission enforcement (D058) | T1 + T2 | Privileged command rejection; cvar bounds clamping |
| Rate limiting (D007/V17) | T2 + T3 | Exceed OrderBudget → excess dropped; budget recovery timing |
| LLM content validation (D016) | T3 + T4 | Objective reachability; trigger syntax; unit-type existence |
| Relay time-authority (D007) | T2 + T3 | Timestamp envelope clamping; listen-server parity |
| SCR sequence enforcement (D052) | T2 + T4 | Monotonic sequence; key rotation grace period; emergency revocation |
| Cross-engine map exchange (D011) | T2 + T3 | OpenRA .oramap round-trip; out-of-bounds rejection |
| Conflict resolution ordering (D062) | T2 + T3 | Explicit priority determinism; all clients agree on resolved values |
| Chat scope enforcement | T1 + T2 | Team message routed only to team; all-chat routed to all; scope conversion requires explicit call |
| Theme loading + switching (D032) | T2 + T4 | Theme YAML schema validation; mid-gameplay switch produces no visual corruption; missing asset fallback |
| AI personality application (D043) | T2 + T3 | PersonalityId resolves to valid preset; undefined personality rejected; AI behavior matches declared profile |