Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Feature Cluster Dependency Matrix - M2-M4

Continued from clusters-m0-m1.md. See milestone-dependency-map.md for navigation.

| Cluster ID | Feature Cluster | Milestone | Depends On (Hard) | Depends On (Soft) | Canonical Docs | Decisions | Roadmap Phase | Gap Priority | Exit Gate | Parallelizable With | Risk Notes | | M2.CORE.SIM_FIXED_POINT_AND_ORDERS | Deterministic sim core, fixed-point math, order application. D080 pure-function layering discipline applies to all systems written in this cluster and downstream M2 sim clusters. Every Bevy system must separate pure algorithm (no bevy_ecs imports) from thin ECS wrapper. | M2 | M1.CORE.OPENRA_DATA_COMPAT, M1.CORE.RENDERER_SLICE | — | 08-ROADMAP.md, 02-ARCHITECTURE.md, 03-NETCODE.md, decisions/09a/D080-sim-pure-function-layering.md | D006, D009, D041, D080 | Phase 2 | — | Deterministic sim tick loop exists; all sim systems pass D080 pure/wrapper separation review | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE, M2.CORE.PATH_SPATIAL | P002 fixed-point scale gate | | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE | Snapshots, state hashing, replay foundation, local network/replay playback | M2 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS | — | 08-ROADMAP.md, 03-NETCODE.md | D010, D034 | Phase 2 | — | Replay and hash equality on repeat runs | M2.COM.TELEMETRY_DB_FOUNDATION | Compression/header evolution can cause churn later | | M2.CORE.PATH_SPATIAL | Pathfinder + SpatialIndex implementations, deterministic query ordering | M2 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS | M1.CORE.RENDERER_SLICE | 02-ARCHITECTURE.md, 10-PERFORMANCE.md, 04-MODDING.md | D013, D045, D015, D080 | Phase 2 | P0 support | Path and spatial conformance pass; pathfinder/spatial algorithms are pure functions per D080 | M2.CORE.GAP_P0_GAMEPLAY_SYSTEMS | P002 fixed-point scale gate | | M2.CORE.GAP_P0_GAMEPLAY_SYSTEMS | OpenRA familiarity P0 systems (conditions, multipliers, warheads, projectile pipeline, building mechanics, support powers, damage model) | M2 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS, M2.CORE.PATH_SPATIAL | — | 11-OPENRA-FEATURES.md, 02-ARCHITECTURE.md | D013, D027, D028, D029, D041, D080 | Phase 2 | P0 | P0 systems operational in combat slice; all gameplay system algorithms are pure functions per D080 | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE | D028 is the hard Phase 2 gate; D029 systems are targets with explicit early-Phase-3 spillover allowance | | M2.CORE.GAME_MODULE_AND_SUBSYSTEM_SEAMS | GameModule registration and trait-abstracted subsystem seams | M2 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS | M2.CORE.PATH_SPATIAL | 02-ARCHITECTURE.md, 09a-foundation.md | D018, D041, D039 | Phase 2 | — | Engine core remains game-agnostic while RA1 module runs | M8.SDK.CLI_FOUNDATION | Over-coupling to RA1 is the main risk | | M2.COM.TELEMETRY_DB_FOUNDATION | Local SQLite + telemetry schema, zero-cost instrumentation disabled path | M2 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE | 08-ROADMAP.md, 09e-community.md | D031, D034 | Phase 2 | — | Telemetry + local db foundation operational | M8.COM.MINIMAL_WORKSHOP, M7.SEC.BEHAVIORAL_ANALYSIS_REPORTING | Observability scope creep before core sim maturity | | M2.SEC.CREDENTIAL_STORE_CORE | CredentialStore in ic-paths: OS keyring (Tier 1) + vault passphrase Argon2id (Tier 2); DEK management; identity key AEAD encryption at rest; vault_meta table; encrypt/decrypt API surface. WASM session-only tier (Tier 3) and LLM credential column encryption (D047) are M11. | M2 | M1.CORE.DATA_DIR_AND_PORTABILITY_BASE | M2.COM.TELEMETRY_DB_FOUNDATION | 06-SECURITY.md, research/credential-protection-design.md | D052, D061, D034 | Phase 2 | — | CredentialStore tier detection operational (Tier 1/2); encrypt/decrypt API works; vault passphrase prompt functional; identity key encrypted at rest | M2.QA.SIM_API_DEFENSE_TESTS | No silent machine-derived key fallback; vault passphrase strength is user’s responsibility | | M2.CORE.REMASTERED_FORMAT_PARSERS | Remastered Collection format parsers: MEG archive parser in cnc-formats (clean-room, meg feature flag) + TGA+META sprites, DDS textures, MapPack XML in ic-cnc-content + CLI ic asset import-remastered | M2 | M1.CORE.RA_FORMATS_PARSE | M2.CORE.GAME_MODULE_AND_SUBSYSTEM_SEAMS | 09c-modding.md, research/remastered-collection-netcode-analysis.md, architecture/ra-experience.md | D075, D048 | Phase 2 | — | MEG/TGA+META/DDS parsers pass fuzz tests on real Remastered data; CLI import produces valid IC assets | M9.SDK.D040_ASSET_STUDIO | MEG parser must handle malformed archives safely; HD assets are proprietary EA content — never redistributed | | M2.QA.SIM_API_DEFENSE_TESTS | Runtime defense tests for simulation API misuse vectors: order validation purity/totality, double-buffer read/write invariants, UnitTag generation safety, snapshot round-trip state identity, fixed-point overflow guards, pathfinding determinism; 30+ tests covering api-misuse-defense.md §1–2 + Double-Buffer and UnitTag sections. Includes D080 enforcement: pure functions get direct unit tests with constructed data (D080 rule #2). | M2 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS, M0.QA.PROPERTY_BASED_TEST_INFRA | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE, M2.CORE.PATH_SPATIAL | tracking/testing-strategy.md, architecture/api-misuse-defense.md | D009, D010, D013, D080 | Phase 2 | — | 30+ runtime defense tests pass; determinism verified via proptest (500-tick property, T3) and post-merge suite (10K-tick full, T2); zero-alloc asserted for tick hot path; all sim API misuse vectors from api-misuse-defense.md §1–2 + Double-Buffer and UnitTag sections covered; pure function unit tests exist alongside Bevy integration tests per D080 | M2.CORE.GAP_P0_GAMEPLAY_SYSTEMS | Test maintenance if sim API surface expands during Phase 2; must stay synchronized with api-misuse-defense.md | | M2.QA.METRICS_COLLECTION_FRAMEWORK | Automated measurement infrastructure: performance counters (tick time p50/p99, heap allocs/tick, peak RSS), correctness metrics (determinism violations, order rejection accuracy, snapshot round-trip state identity), security metrics (sandbox escape blocks); SQLite storage; CI alert thresholds for regression detection | M2 | M2.COM.TELEMETRY_DB_FOUNDATION, M0.QA.CI_PIPELINE_FOUNDATION | M2.CORE.SIM_FIXED_POINT_AND_ORDERS | tracking/testing-strategy.md | D031, D034 | Phase 2 | — | Performance metrics collected in CI benchmarks with alert thresholds (tick >2ms, allocs >0 in hot path); correctness metrics recorded per test run; regression alerts trigger on threshold breach | M2.QA.SIM_API_DEFENSE_TESTS | Over-instrumentation before profiling data exists; keep metrics minimal until M3+ provides real gameplay workloads | | M2.REPLAY.HIGHLIGHT_ANALYSIS_EVENTS | 6 new AnalysisEvent variants for highlight detection: EngagementStarted, EngagementEnded, SuperweaponFired, BaseDestroyed, ArmyWipe, ComebackMoment; observation-only events emitted during match recording | M2 | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE, M2.CORE.GAP_P0_GAMEPLAY_SYSTEMS | M2.COM.TELEMETRY_DB_FOUNDATION | 09d-gameplay.md, formats/replay-keyframes-analysis.md | D077, D010, D031 | Phase 2 | — | 6 new analysis event variants compile and emit during match recording; events appear in .icrep analysis stream | M2.QA.METRICS_COLLECTION_FRAMEWORK | Event detection logic must not affect sim determinism (observation-only) | | M3.UX.GAME_CHROME_CORE | Sidebar, power bar, credits, radar/minimap, selection basics | M3 | M2.CORE.GAP_P0_GAMEPLAY_SYSTEMS, M2.CORE.GAME_MODULE_AND_SUBSYSTEM_SEAMS | M1.CORE.RENDERER_SLICE | 08-ROADMAP.md, 17-PLAYER-FLOW.md, 09g-interaction.md | D032, D033, D058 | Phase 3 | P2 support | Feels like RA chrome + control baseline | M3.UX.FIRST_RUN_SETUP_AND_MAIN_MENU, M3.SP.SKIRMISH_LOCAL_LOOP | UI fidelity vs speed tradeoffs | | M3.CORE.GAP_P1_GAMEPLAY_SYSTEMS | OpenRA familiarity P1 systems (transport/cargo, capture, stealth, death mechanics, sub-cells, veterancy, docking, deploy, power) | M3 | M2.CORE.GAP_P0_GAMEPLAY_SYSTEMS | — | 11-OPENRA-FEATURES.md, 02-ARCHITECTURE.md | D033, D045 | Phase 3/4 prep | P1 | P1 systems needed for normal skirmish/campaign feel | M3.SP.SKIRMISH_LOCAL_LOOP, M5.SP.CAMPAIGN_RUNTIME_SLICE | Too much “just enough” here harms later campaign parity | | M3.CORE.GAP_P2_SKIRMISH_FAMILIARITY | OpenRA familiarity P2 systems needed for skirmish usability (guard, cursor, hotkeys, selection details, speed presets, notifications) | M3 | M3.UX.GAME_CHROME_CORE, M3.CORE.GAP_P1_GAMEPLAY_SYSTEMS | — | 11-OPENRA-FEATURES.md, 09g-interaction.md | D033, D058, D059, D060 | Phase 3 | P2 | Skirmish usability and command ergonomics are acceptable | M4.UX.MINIMAL_ONLINE_CONNECT_FLOW | Hotkey/profile drift across input modes | | M3.CORE.AUDIO_EVA_MUSIC | Audio playback, unit responses, ambient, EVA, music state machine baseline | M3 | M1.CORE.RA_FORMATS_PARSE, M3.UX.GAME_CHROME_CORE | — | 08-ROADMAP.md, 02-ARCHITECTURE.md | D032 | Phase 3 | — | Audio works and contributes to “feels like RA” | — | P003 hard gate | | M3.UX.FIRST_RUN_SETUP_AND_MAIN_MENU | D069 first-run setup wizard baseline + main menu path to skirmish/campaign | M3 | M1.CORE.DATA_DIR_AND_PORTABILITY_BASE, M3.UX.GAME_CHROME_CORE | M8.MOD.SELECTIVE_INSTALL_INFRA_HOOKS | 17-PLAYER-FLOW.md, 09g-interaction.md | D061, D065, D069 | Phase 3 | — | New player can reach local play with offline-first flow | M3.SP.SKIRMISH_LOCAL_LOOP | Keep no-dead-end and offline-first guarantees | | M3.CORE.PROPRIETARY_ASSET_IMPORT_AND_EXTRACT | Owned-install asset import/extract path (Steam Remastered/GOG/EA/manual) into IC-managed storage with verify/index and originals untouched | M3 | M1.CORE.RA_FORMATS_PARSE, M1.CORE.DATA_DIR_AND_PORTABILITY_BASE, M3.UX.FIRST_RUN_SETUP_AND_MAIN_MENU | M8.MOD.SELECTIVE_INSTALL_INFRA_HOOKS | 09g-interaction.md, 17-PLAYER-FLOW.md, 09c-modding.md, 05-FORMATS.md | D069, D068, D049, D061 | Phase 3 / 4 implementation path | — | Players can import supported owned sources out of the box (including Remastered) and proceed to local play without manual conversion or source-install mutation | M3.SP.SKIRMISH_LOCAL_LOOP, M8.COM.FREEWARE_MIRROR_STARTER_CONTENT | Source-detection false positives and accidental source-install mutation must be prevented; provenance labeling should remain visible | | M3.SP.SKIRMISH_LOCAL_LOOP | Local skirmish playable loop vs scripted dummy/basic AI | M3 | M3.UX.GAME_CHROME_CORE, M3.CORE.GAP_P1_GAMEPLAY_SYSTEMS, M3.CORE.GAP_P2_SKIRMISH_FAMILIARITY | M3.CORE.AUDIO_EVA_MUSIC | 08-ROADMAP.md, 17-PLAYER-FLOW.md | D019, D033, D043, D032 | Phase 3 | P1/P2 | First playable milestone complete | M4.NET.MINIMAL_LOCKSTEP_ONLINE, M5.SP.CAMPAIGN_RUNTIME_SLICE | AI scope creep can delay milestone | | M3.UX.HIGHLIGHT_SCORING_AND_POTG | Highlight scoring pipeline (4 dimensions), POTG viewport on post-game screen, highlight camera AI, SQLite highlight library, main menu highlight background | M3 | M2.REPLAY.HIGHLIGHT_ANALYSIS_EVENTS, M3.UX.GAME_CHROME_CORE | M3.CORE.AUDIO_EVA_MUSIC | 09d-gameplay.md, player-flow/post-game.md, player-flow/main-menu.md, player-flow/replays.md | D077, D034, D032, D058 | Phase 3 (stretch) | — | POTG plays on post-game screen; highlight library populated and browsable; menu highlight background option functional | M3.SP.SKIRMISH_LOCAL_LOOP | Stretch goal — can slip to early Phase 4 without blocking Phase 3 exit criteria | | M4.NET.MINIMAL_LOCKSTEP_ONLINE | Minimal lockstep/relay online path using final architecture (no tracker/ranked) | M4 | M3.SP.SKIRMISH_LOCAL_LOOP, M2.CORE.SNAPSHOT_HASH_REPLAY_BASE | — | 03-NETCODE.md, 08-ROADMAP.md | D006, D007, D008, D012, D060 | Phase 5 (subset) | — | Two players play online in simplest supported path | M5.SP.CAMPAIGN_RUNTIME_SLICE | Resist feature creep (browser/ranked/spectator) | | M4.NET.RELAY_TIME_AUTHORITY_AND_VALIDATION | Relay clock authority, timestamp normalization, sim-side validation path | M4 | M4.NET.MINIMAL_LOCKSTEP_ONLINE | — | 03-NETCODE.md, 06-SECURITY.md | D007, D008, D012, D060 | Phase 5 (subset) | — | Basic fairness and anti-abuse architecture proven | M7.SEC.BEHAVIORAL_ANALYSIS_REPORTING | Trust claims must stay bounded | | M4.UX.MINIMAL_ONLINE_CONNECT_FLOW | Direct connect/join code/embedded relay flow (no external tracking requirement) | M4 | M4.NET.MINIMAL_LOCKSTEP_ONLINE | M3.UX.FIRST_RUN_SETUP_AND_MAIN_MENU | 17-PLAYER-FLOW.md, 03-NETCODE.md | D069, D060 | Phase 5 (subset) | — | Player can host/join minimal online match | — | Must not imply ranked/tracker availability | | M4.NET.RECONNECT_BASELINE | Basic reconnect (if feasible) or explicit defer contract | M4 | M4.NET.MINIMAL_LOCKSTEP_ONLINE, M2.CORE.SNAPSHOT_HASH_REPLAY_BASE | — | 03-NETCODE.md, 09b-networking.md | D010, D007 | Phase 5 (subset) | — | Reconnect supported or clearly deferred with documented constraints | — | Snapshot donor/verification behavior must stay explicit |