Feature Cluster Dependency Matrix - M5-M6
Continued from clusters-m2-m4.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 |
| M5.SP.LUA_MISSION_RUNTIME | Lua sandbox + mission script runtime for authored scenarios | M5 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS, M3.SP.SKIRMISH_LOCAL_LOOP | M8.SDK.CLI_FOUNDATION | 04-MODDING.md, 08-ROADMAP.md | D004 | Phase 4 subset | — | Mission scripts execute in runtime | M5.SP.CAMPAIGN_RUNTIME_SLICE | Sandbox/capability boundaries |
| M5.SP.CAMPAIGN_RUNTIME_SLICE | D021 campaign graph runtime (basic path), state, save/load, mission transitions | M5 | M5.SP.LUA_MISSION_RUNTIME, M3.UX.FIRST_RUN_SETUP_AND_MAIN_MENU | M3.CORE.AUDIO_EVA_MUSIC | modding/campaigns.md, 17-PLAYER-FLOW.md, 08-ROADMAP.md | D004, D065 | Phase 4 subset | — | One campaign chain works end-to-end with save/load | M4.NET.MINIMAL_LOCKSTEP_ONLINE | Continuous flow correctness is more important than quantity |
| M5.UX.BRIEFING_DEBRIEF_NEXT_FLOW | Briefing → mission → debrief → next mission UX and failure/continue path | M5 | M5.SP.CAMPAIGN_RUNTIME_SLICE | — | 17-PLAYER-FLOW.md, 09g-interaction.md | D065 | Phase 4 subset | — | Campaign runtime is player-comprehensible, not just technically chained | — | UX drift from campaign runtime semantics |
| M5.PLATFORM.EXTERNAL_TOOL_API | ICRP external tool API — tiered access (observer/player/admin/mod/debug), HTTP+WebSocket transport, fog-of-war filtering, MCP/LSP integration | M5 | M2.CORE.SNAPSHOT_HASH_REPLAY_BASE, M3.UX.GAME_CHROME_CORE | M8.COM.MINIMAL_WORKSHOP, M7.NET.D052_SIGNED_CREDS_RESULTS | 09f-tools.md, 06-SECURITY.md, 09g-interaction.md | D071, D006, D010, D012, D034, D058, D059 | Phase 2–6a (multi-phase) | — | Observer tier + HTTP fallback functional; WebSocket + auth complete; fog-of-war filtering prevents maphack; ranked mode restricts to observer-only with delay | M5.INFRA.SERVER_MANAGEMENT | Determinism preservation critical — ICRP must not affect ic-sim; information leak risk in ranked requires observer delay (default 120s) |
| M5.INFRA.SERVER_MANAGEMENT | Dedicated server management — CLI (ic server *), web dashboard, in-game admin, Docker images, health endpoint, structured logging, self-update | M5 | M4.NET.MINIMAL_LOCKSTEP_ONLINE, M5.PLATFORM.EXTERNAL_TOOL_API | M7.NET.D052_SIGNED_CREDS_RESULTS | 09b-networking.md, 15-SERVER-GUIDE.md, 06-SECURITY.md | D072, D007, D034, D058, D064, D071 | Phase 2–6a (multi-phase) | — | /health returns correct JSON; CLI complete; web dashboard accessible; Docker scratch+musl images ready | M5.INFRA.COMMUNITY_SERVER | Complexity management: opt-in features prevent bloat for “$5 VPS operator”; health endpoint is zero-auth (intentional for monitoring) |
| M5.INFRA.COMMUNITY_SERVER | Unified ic-server binary with six capability flags (relay, tracker, workshop, ranking, matchmaking, moderation), first-run wizard, seed list, Content Advisory Records | M5 | M4.NET.MINIMAL_LOCKSTEP_ONLINE, M5.INFRA.SERVER_MANAGEMENT, M7.NET.D052_SIGNED_CREDS_RESULTS | M9.COM.D049_FULL_WORKSHOP_CAS | 09b-networking.md, 09e-community.md, 15-SERVER-GUIDE.md, research/p2p-federated-registry-analysis.md | D074, D007, D030, D034, D049, D052, D055, D072 | Phase 2–6a (multi-phase) | — | All six capabilities operational; first-run wizard complete; CARs functioning; seed list repo established; disabled capabilities have zero overhead | M7.NET.RANKED_MATCHMAKING | Default preset is community (all capabilities enabled); safety by default via Workshop sandbox; Fractureiser-class defense via ic.lock + quarantine |
| M6.SP.FULL_RA_CAMPAIGNS | Full Allied/Soviet campaign completeness and correctness | M6 | M5.SP.CAMPAIGN_RUNTIME_SLICE, M5.UX.BRIEFING_DEBRIEF_NEXT_FLOW | — | 08-ROADMAP.md, 17-PLAYER-FLOW.md | D065 | Phase 4 full | — | Can play all shipped campaigns start-to-finish | M6.SP.SKIRMISH_AI_BASELINE | Content completeness and correctness workload |
| M6.SP.SKIRMISH_AI_BASELINE | Basic skirmish AI challenge + behavior presets baseline | M6 | M3.SP.SKIRMISH_LOCAL_LOOP, M3.CORE.GAP_P1_GAMEPLAY_SYSTEMS | M2.COM.TELEMETRY_DB_FOUNDATION | 08-ROADMAP.md, 09d-gameplay.md | D043, D042 | Phase 4 full | — | AI is good enough to support skirmish and tutorial/campaign scripts | M6.UX.D065_ONBOARDING_COMMANDER_SCHOOL | Avoid overfitting before telemetry data |
| M6.UX.D065_ONBOARDING_COMMANDER_SCHOOL | Commander School, skill assessment, progressive hints, controls walkthrough integration | M6 | M3.UX.FIRST_RUN_SETUP_AND_MAIN_MENU, M3.UX.GAME_CHROME_CORE, M6.SP.SKIRMISH_AI_BASELINE | M7.UX.MULTIPLAYER_ONBOARDING | 09g-interaction.md, 17-PLAYER-FLOW.md | D065, D058, D059, D069 | Phase 4 (and Phase 3 stretch) | — | New-player and campaign onboarding baseline exists | — | Prompt drift across input profiles/device classes |
| M6.UX.RTL_BIDI_GAME_UI_BASELINE | RTL/BiDi runtime text + layout-direction baseline for localized game UI/subtitles (not just font coverage) | M6 | M3.UX.GAME_CHROME_CORE, M5.UX.BRIEFING_DEBRIEF_NEXT_FLOW, M3.CORE.AUDIO_EVA_MUSIC | M6.UX.D065_ONBOARDING_COMMANDER_SCHOOL | 02-ARCHITECTURE.md, 09g-interaction.md, 17-PLAYER-FLOW.md, 09f-tools.md | D065, D059, D038 | Phase 4 full (with later SDK authoring previews in M9/M10) | — | Arabic/Hebrew/mixed-script UI and subtitle text renders correctly with shaping/BiDi and selective RTL mirroring rules across shipped game surfaces | M7.UX.D059_RTL_CHAT_MARKER_TEXT_SAFETY, M9.SDK.RTL_BASIC_EDITOR_UI_LAYOUT, M10.SDK.RTL_BIDI_LOCALIZATION_WORKBENCH_PREVIEW, M11.PLAT.BROWSER_MOBILE_POLISH | “RTL support” must not collapse into font-only coverage; layout direction and directional asset policy need explicit tests |
| M6.SP.MEDIA_VARIANTS_AND_FALLBACKS | Video cutscenes (FMV) + rendered cutscene baseline (Cinematic Sequence world/fullscreen) + D068 media fallback behavior in campaigns (including voice-over variant preferences/fallbacks and language-capability-aware fallback chains) | M6 | M5.SP.CAMPAIGN_RUNTIME_SLICE, M3.CORE.AUDIO_EVA_MUSIC | M8.MOD.SELECTIVE_INSTALL_INFRA_HOOKS | 17-PLAYER-FLOW.md, 09c-modding.md, 09f-tools.md | D068, D040, D038, D048 | Phase 4 full (with later D068 polish and M10/M11 rendered-display/render-mode extensions) | — | Campaigns remain playable with/without optional media packs and can use either video or rendered cutscene intros, plus per-category voice-over variant preferences (EVA/unit/dialogue/cutscene dub) and cutscene audio/subtitle/CC fallback chains, without breaking progression | M9.UX.D049_MEDIA_LANGUAGE_CAPABILITY_METADATA_FILTERS, M10.UX.D038_RENDERED_CUTSCENE_DISPLAY_TARGETS, M11.UX.D068_MACHINE_TRANSLATED_SUBTITLE_CC_FALLBACK, M11.VISUAL.D048_AND_RENDER_MOD_INFRA | Media/cutscene/voice variant paths can balloon if remaster workflows, language metadata drift, or advanced rendered-cutscene display targets leak into the M6 baseline |
| M6.UX.D038_TRIGGER_CAMERA_SCENES_BASELINE | OFP-style trigger-driven camera scene authoring baseline (property-driven trigger conditions + camera shot presets -> Cinematic Sequence world/fullscreen playback) | M6 | M5.SP.CAMPAIGN_RUNTIME_SLICE, M6.SP.MEDIA_VARIANTS_AND_FALLBACKS | M6.UX.D065_ONBOARDING_COMMANDER_SCHOOL | 09f-tools.md, 17-PLAYER-FLOW.md, 09g-interaction.md | D038, D065, D048 | Phase 4 full (runtime/content baseline; advanced SDK camera tooling later) | — | Campaign and mission authors can build trigger-driven rendered camera scenes without Lua using property sheets and safe fallback presentation policies | M10.SDK.D038_CAMERA_TRIGGER_AUTHORING_ADVANCED, M10.UX.D038_RENDERED_CUTSCENE_DISPLAY_TARGETS | Trigger-camera scenes can reveal hidden info or become brittle if audience scope/interrupt/fallback policies are not explicit |
| M6.CORE.GAP_P3_FULL_EXPERIENCE | OpenRA familiarity P3 systems and polish needed for full experience (observer UI/replay browser UI/localization/encyclopedia etc. as applicable) | M6 | M3 baseline, M5 campaign runtime | M7 for multiplayer-specific P3 items | 11-OPENRA-FEATURES.md, 17-PLAYER-FLOW.md | D036, D065 | Phase 4+ | P3 | P3 items are mapped, intentionally phased, and not silently forgotten | M7, M10, M11 | Defer by default; avoid smuggling into earlier critical path |