UX Surface Gate Clusters (Cross-Check for Milestone Completeness)
These clusters are used to prevent milestone definitions from becoming backend-only.
| UX Cluster ID | Milestone Gate | Required Flow Surface | Canonical Docs |
|---|---|---|---|
UXG.M3.FIRST_RUN_TO_SKIRMISH | M3 | D069 setup → main menu → skirmish launch path | 17-PLAYER-FLOW.md, 09g-interaction.md |
UXG.M4.ONLINE_CONNECT_MINIMAL | M4 | Minimal online connect/host flow without tracker/ranked assumptions | 17-PLAYER-FLOW.md, 03-NETCODE.md |
UXG.M5.CAMPAIGN_RUNTIME_LOOP | M5 | Briefing → mission → debrief → next flow + save/load | 17-PLAYER-FLOW.md, modding/campaigns.md |
UXG.M7.LOBBY_BROWSER_RANKED_TRUST | M7 | Browser/lobby/ranked trust labels + report/block/avoid/reporting surfaces | 17-PLAYER-FLOW.md, 07-CROSS-ENGINE.md |
UXG.M9.SDK_SCENARIO_AUTHORING | M9 | SDK scenario editor + validate/test/publish + resource manager + workshop hooks | 17-PLAYER-FLOW.md, 09f-tools.md |
UXG.M10.SDK_CAMPAIGN_AND_MODES | M10 | Campaign editor + game mode templates + D070 role-aware authoring surfaces | 17-PLAYER-FLOW.md, 09f-tools.md, 09d-gameplay.md |
Policy / External Gate Nodes
| Gate Node ID | Type | Blocks Validation Of | Canonical Source | Notes |
|---|---|---|---|---|
PG.P002.FIXED_POINT_SCALE | Resolved | M2, M3 | 09-DECISIONS.md pending table | Resolved: Scale 1024, matching OpenRA. See research/fixed-point-math-design.md. Gate cleared. |
PG.P003.AUDIO_LIBRARY | Resolved | M3, M6 | 09-DECISIONS.md pending table | Resolved: Kira via bevy_kira_audio. See research/audio-library-music-integration-design.md. Gate cleared. |
PG.P004.LOBBY_WIRE_DETAILS | Resolved | M7 (and some M4 polish) | 09-DECISIONS.md pending table | Resolved: Complete wire protocol (CBOR, 40+ messages). See research/lobby-matchmaking-wire-protocol-design.md. Gate cleared. |
PG.LEGAL.ENTITY_FORMED | Policy gate | M7, M9 production validation | 08-ROADMAP.md, 06-SECURITY.md | Needed before public server infra and user-data-bearing services go live |
PG.LEGAL.DMCA_AGENT | Policy gate | M9 Workshop production validation | 08-ROADMAP.md, 09e-community.md | Required before accepting user uploads under safe harbor expectations |
PG.LEGAL.CNC_FREEWARE_MIRROR_RIGHTS_POLICY | Policy gate | Any official/community Workshop mirroring of legacy/freeware C&C content (M8.COM.FREEWARE_MIRROR_STARTER_CONTENT) | 09e-community.md, 06-SECURITY.md | Must explicitly define rights basis, provenance labels, and takedown/update policy; D069 owned-install import remains available regardless |
External Source Study Mappings (Confirmatory Research -> Overlay)
Use this section to record accepted takeaways from source studies that refine implementation emphasis, docs, or execution sequencing without necessarily creating a new Dxxx.
| Source Study | Accepted Takeaway | Mapped Clusters | Action Type | Why It Matters |
|---|---|---|---|---|
research/bar-recoil-source-study.md | Fast local creator iteration through a real game path (BAR .sdd/devmode-style concept adapted to IC) | M8.SDK.CLI_FOUNDATION, M8.COM.MINIMAL_WORKSHOP, M9.SDK.D038_SCENARIO_EDITOR_CORE | Execution emphasis / DX refinement | Reduces creator-loop friction and prevents “package/install every test” workflow debt |
research/bar-recoil-source-study.md | Explicit authoritative vs client-local scripting/API labeling (Recoil synced/unsynced lesson adapted to IC docs/tooling) | M5.SP.LUA_MISSION_RUNTIME, M8.SDK.AUTHORING_REFERENCE_FOUNDATION, M9.SDK.EMBEDDED_AUTHORING_MANUAL, M7.SEC.BEHAVIORAL_ANALYSIS_REPORTING | Docs taxonomy / trust-boundary clarity | Protects determinism and anti-cheat/trust messaging by making authority scope obvious to creators |
research/bar-recoil-source-study.md | Extension taxonomy for gameplay-authoritative vs local UI/QoL addons (adapted, not copied) | M9.COM.D049_FULL_WORKSHOP_CAS, M10.MOD.D066_RA1_EXPORT_EXTENSIBILITY, M10.SDK.LOCALIZATION_PLUGIN_HARDENING | Ecosystem policy vocabulary / labeling | Prevents plugin/UI extension ambiguity and competitive-integrity confusion as creator ecosystem grows |
research/bar-recoil-source-study.md | Deep, searchable manual/docs are product-critical (BAR/Recoil docs culture) | M8.SDK.AUTHORING_REFERENCE_FOUNDATION, M9.SDK.EMBEDDED_AUTHORING_MANUAL | Priority reinforcement (no milestone shift) | Confirms current sequencing that docs/manual work belongs in creator milestones, not post-polish |
research/bar-recoil-source-study.md | Keep lockstep buffering/jitter/rejoin behavior visible in diagnostics/trust messaging (Recoil lockstep pain confirms IC emphasis) | M4.NET.RELAY_TIME_AUTHORITY_AND_VALIDATION, M4.UX.MINIMAL_ONLINE_CONNECT_FLOW, M7.SEC.BEHAVIORAL_ANALYSIS_REPORTING, M7.NET.SPECTATOR_TOURNAMENT | Diagnostics/UX emphasis (no milestone shift) | Prevents opaque “net feels bad” failure modes and preserves honest trust claims |
research/bar-recoil-source-study.md | Protocol migration hygiene: explicit capability/trust labels for experimental vs certified paths (BAR Tachyon rollout signal) | M7.NET.TRACKING_BROWSER_DISCOVERY, M7.NET.CROSS_ENGINE_BRIDGE_AND_TRUST, M7.NET.D052_SIGNED_CREDS_RESULTS | Rollout/process UX emphasis | Helps netcode/bridge evolution without confusing users about ranked/certified guarantees |
research/bar-recoil-source-study.md | Moderation capability granularity: avoid “mute” semantics that accidentally disable unrelated functions (BAR moderation lesson) | M7.UX.REPORT_BLOCK_AVOID_REVIEW, M7.NET.RANKED_MATCHMAKING, M11.COM.ECOSYSTEM_POLISH_GOVERNANCE | Moderation policy/UX refinement | Keeps sanctions proportional and prevents protocol-coupled UX breakage |
research/bar-recoil-source-study.md | Pathfinding API/tuning humility: bounded script-facing path estimates + conformance-first exposure (Recoil changelog signal) | M2.CORE.PATH_SPATIAL, M5.SP.LUA_MISSION_RUNTIME, M8.SDK.AUTHORING_REFERENCE_FOUNDATION | API surface discipline / regression emphasis | Protects deterministic hot paths and frames path queries as explicit, documented capabilities |
research/open-source-rts-communication-markers-study.md | Treat OpenRA-compatible beacons/radar pings as a first-class D059 compatibility and replay-UX requirement (not just a Lua edge case) | M5.SP.LUA_MISSION_RUNTIME, M7.UX.D059_BEACONS_MARKERS_LABELS, M10.GAME.D070_TEMPLATE_TOOLKIT | Communication compatibility / schema hardening | Keeps Lua/UI/console/replay marker behavior coherent for classic C&C expectations and co-op authoring |
research/open-source-rts-communication-markers-study.md | Marker semantics must stay icon/type-first; color + labels are bounded style metadata (accessibility and spectator clarity) | M7.UX.D059_BEACONS_MARKERS_LABELS, M7.NET.SPECTATOR_TOURNAMENT, M11.PLAT.BROWSER_MOBILE_POLISH | UX/readability discipline | Prevents color-only beacon semantics and preserves clarity across KBM/controller/touch and replay/spectator views |
research/open-source-rts-communication-markers-study.md | Communication capability scoping (chat/voice/ping/draw/vote) must remain distinct under moderation/sanctions | M7.UX.REPORT_BLOCK_AVOID_REVIEW, M7.NET.RANKED_MATCHMAKING, M11.COM.ECOSYSTEM_POLISH_GOVERNANCE, M7.UX.D059_BEACONS_MARKERS_LABELS | Moderation/comms UX hardening | Avoids sanction side effects that break tactical coordination or ranked match integrity |
research/open-source-rts-communication-markers-study.md | Replay-preserved coordination context (pings/markers/labels) is a force multiplier for moderation, teaching, and D070 iteration | M7.SEC.BEHAVIORAL_ANALYSIS_REPORTING, M7.NET.SPECTATOR_TOURNAMENT, M7.UX.D059_BEACONS_MARKERS_LABELS, M10.GAME.D070_TEMPLATE_TOOLKIT | Replay/moderation/co-op iteration emphasis | Improves post-match understanding and reduces guesswork in moderation and co-op mode tuning |
research/open-source-rts-communication-markers-study.md | Generals-derived UX refinements: explicit recipient/visibility semantics behind UI chat scopes, persistent-marker active caps with clear failure feedback, and draft-preserving chat entry behavior | M7.UX.D059_BEACONS_MARKERS_LABELS, M7.UX.REPORT_BLOCK_AVOID_REVIEW, M7.NET.SPECTATOR_TOURNAMENT, M11.PLAT.BROWSER_MOBILE_POLISH | Communication UX hardening / anti-spam refinement | Converts concrete Generals source patterns into IC D059 deliverables without importing legacy engine/network assumptions |
research/rtl-bidi-open-source-implementation-study.md | RTL correctness requires shaping + BiDi + role-aware font fallback + selective layout direction policy (not font coverage alone), plus explicit D059 anti-spoof vs legitimate RTL split | M6.UX.RTL_BIDI_GAME_UI_BASELINE, M7.UX.D059_RTL_CHAT_MARKER_TEXT_SAFETY, M7.UX.D059_BEACONS_MARKERS_LABELS, M9.SDK.RTL_BASIC_EDITOR_UI_LAYOUT, M10.SDK.RTL_BIDI_LOCALIZATION_WORKBENCH_PREVIEW, M10.SDK.LOCALIZATION_PLUGIN_HARDENING, M11.PLAT.BROWSER_MOBILE_POLISH | Localization/UX correctness hardening + test emphasis | Prevents “Unicode glyph coverage” false positives and keeps runtime/editor/chat RTL behavior aligned before localization claims scale |
research/source-sdk-2013-source-study.md | Fixed-point determinism validated: Source’s float prediction requires NaN checks, bit-level comparison, platform-specific friction, and runtime divergence logging — all eliminated by i32/i64 | M2.CORE.SIM_FIXED_POINT_AND_ORDERS, M0.QA.CI_PIPELINE_FOUNDATION | Architecture validation (no milestone shift) | Strongest empirical evidence for fixed-point math decision; Source’s CDiffManager concept maps to IC’s CI-grade determinism test |
research/source-sdk-2013-source-study.md | Safe parsing validated: every major Source CVE (buffer overflow, integer underflow, path traversal) is in C/C++ content parsing code that Rust prevents at compile time | M1.CORE.RA_FORMATS_PARSE, M0.QA.CI_PIPELINE_FOUNDATION | Security validation + fuzz emphasis | Reinforces no-unsafe-in-content-pipeline rule and fuzz testing priority for ic-cnc-content, YAML, replay, and network parsers |
research/source-sdk-2013-source-study.md | Capability tokens validated: Source’s opt-in ConVar security flags (FCVAR_CHEAT) failed because one forgotten flag = exploit; secure-by-default capability tokens are the correct answer | M0.QA.TYPE_SAFETY_ENFORCEMENT, M6.SEC.WASM_INTERMODULE_ISOLATION | Security architecture validation | Confirms IC’s secure-by-default approach over Source’s opt-in security annotation model |
research/source-sdk-2013-source-study.md | Typestate validated: Source’s CTeamplayRoundBasedRules 11-state machine uses runtime enums with unrestricted transitions — IC’s compile-time typestate prevents invalid transitions | M0.QA.TYPE_SAFETY_ENFORCEMENT | Type-safety validation (no milestone shift) | Runtime enum state machines are a known Source pattern that IC explicitly improves upon |
research/source-sdk-2013-source-study.md | Single-schema wire format validated: Source’s manual SendProp/RecvProp table mirroring causes silent desync when tables drift — IC’s ic-protocol single-schema approach prevents this | M4.NET.MINIMAL_LOCKSTEP_ONLINE | Protocol safety validation | Manual schema mirroring is a known footgun in Source multiplayer code |
research/source-sdk-2013-source-study.md | Zero testing infrastructure: Source SDK has no unit tests, no CI, no fuzz testing; CVE-2021-30481 exploited a 2003-era library undetected for 18 years | M0.QA.CI_PIPELINE_FOUNDATION | Testing priority reinforcement | Confirms that CI from day one and fuzz testing for all parsers are non-negotiable |
research/source-sdk-2013-source-study.md | A* marker system: global generation counter eliminates O(n) clear between searches; closest-reachable fallback prevents “no path” failures; cost functor template enables per-unit-type pathfinding | M2.CORE.PATH_SPATIAL | Pathfinding implementation pattern (no milestone shift) | Essential for 1000-unit RTS: marker system + binary heap + fixed-point costs; Source’s sorted linked list and float costs are anti-patterns at RTS scale |
research/source-sdk-2013-source-study.md | AI interrupt condition masks (bitmask AND per tick), strategy slots for squad coordination, efficiency tiering, and six pathfinding cache types | M6.SP.SKIRMISH_AI_BASELINE, M2.CORE.PATH_SPATIAL | AI/pathfinding implementation patterns (no milestone shift) | Interrupt masks are O(1) per unit; strategy slots prevent tactical degeneracy; all caches must expire by sim tick (not wall-clock) for determinism |
research/source-sdk-2013-source-study.md | FGD editor metadata manually maintained separately from code (7 locations per entity definition, guaranteed drift); entity I/O data-driven wiring is powerful UX but unvalidated at compile time | M8.SDK.CLI_FOUNDATION, M9.SDK.D038_SCENARIO_EDITOR_CORE | SDK architecture validation | Confirms single-source YAML schema approach: one definition serves as runtime validation, editor metadata, and CLI tooling input; validates CLI-first (M8) before visual editor (M9) |
research/source-sdk-2013-source-study.md | PVS filtering (per-client entity visibility) maps to fog-authoritative relay; sv_max_usercmd_future_ticks caps client command lookahead; baseline+delta for reconnection | M4.NET.RELAY_TIME_AUTHORITY_AND_VALIDATION, M4.NET.RECONNECT_BASELINE | Netcode pattern validation (no milestone shift) | Three Source netcode patterns translate directly to lockstep: fog authority, tick-count validation, and snapshot-based reconnection |
research/source-sdk-2013-source-study.md | net_graph 1/2/3 layered diagnostic overlay → IC’s /diag 0-3 system: 4-level real-time observability, graph history mode, mod diagnostic API, mobile support | M2.CORE.DIAG_OVERLAY_L1, M3.GAME.DIAG_OVERLAY_L2, M4.NET.DIAG_OVERLAY_NET, M6.SP.DIAG_OVERLAY_DEV, M8.SDK.MOD_DIAG_API | New design (inspired by Source, formally specified) | Phased rollout: L1 basic (M2) → L2 detailed (M3) → network panels (M4) → developer panels (M6) → mod API (M8). See 10-PERFORMANCE.md § Diagnostic Overlay, D058 /diag commands |
research/generals-zero-hour-diagnostic-tools-study.md | SAGE PerfGather gross/net time distinction for per-system bars; command arrival cushion metric for lockstep network panel; configurable collection interval for expensive L2 metrics | M2.CORE.DIAG_OVERLAY_L1, M3.GAME.DIAG_OVERLAY_L2, M4.NET.DIAG_OVERLAY_NET | Diagnostic overlay refinement (enhances existing design) | Gross/net prevents double-counting in hierarchical systems; cushion is the most meaningful lockstep metric; 500ms batch avoids per-frame overhead for expensive queries |
research/generals-zero-hour-diagnostic-tools-study.md | SAGE W3DDebugIcons world markers (category-filtered); frame-gated desync logging (auto-capture around divergence); tick-stepping (/step) for determinism debugging | M6.SP.DIAG_OVERLAY_DEV, M4.NET.DIAG_OVERLAY_NET | Developer tool additions (new capabilities) | Category-filtered markers essential for 1000-unit scale; frame-gated logging avoids always-on overhead; /step enables fine-grained sim debugging |
Mapping Rules (How to Keep This Page Useful)
- Cluster-level, not bullet-level sprawl: map roadmap deliverables and exit criteria into stable feature clusters unless a bullet is itself a dependency boundary.
- Dxxx ownership lives in
18-PROJECT-TRACKER.md: this page references decisions at cluster level for dependency reasoning. - Gameplay familiarity ordering follows
11-OPENRA-FEATURES.md:P0gatesM2,P1/P2gateM3,P3is explicitly deferred and tracked. - Mark policy/legal prerequisites as
policy_gatenodes, not hidden assumptions. - Keep the “minimal online slice” narrow:
M4must not absorb browser/ranked/spectator requirements. - Keep “creator foundation” distinct from “full visual editor”:
M8is a parallel lane,M9is the visual authoring platform milestone. - New features must be inserted in sequence, not appended as unsorted TODOs: every accepted feature proposal gets a milestone position and dependency edges in the same planning pass.
- Priority is mandatory for placement decisions: new clusters should be classified (
P-Core,P-Differentiator,P-Creator,P-Scale,P-Optional) and placed so higher-priority critical-path work is not silently displaced. - If a feature spans multiple milestones, split the cluster or add explicit
validation_depends_on/integration_gateedges instead of hiding sequencing inside notes. - If non-indexed decision references reappear, normalize the decision index in the same planning pass and update tracker coverage.
- When a source study yields accepted implementation refinements, map them here (cluster references + action type) so they influence execution planning instead of living only in
research/*.md. - Future/deferred wording in canonical docs must map here when it implies accepted work. If a statement is a planned deferral, add/update the affected cluster row (or create one) in the same planning pass and update
tracking/future-language-audit.md; if it cannot be placed, it is proposal-only or aPxxx, not scheduled work. - If accepted work changes external implementation-repo onboarding or code navigation expectations, update the bootstrap and template docs (
tracking/external-code-project-bootstrap.md,tracking/external-project-agents-template.md,tracking/source-code-index-template.md) in the same planning pass.
New Feature Intake (Dependency Map Workflow)
Use this workflow whenever a new feature/mode/tooling surface is added to the design:
- Decide whether it is a
Dxxxdecision, a feature cluster, or both. - Assign a primary milestone (
M0–M11) based on what must exist before the feature becomes implementable. - Add hard/soft/validation/policy/integration edges to existing milestones/clusters.
- Record the canonical docs + roadmap phase mapping in the cluster row.
- Check for milestone displacement: if the feature would delay a higher-priority milestone, mark it
P-Optional/experimental or move it later. - Update
18-PROJECT-TRACKER.mdin the same change set (milestone snapshot/risk/coverage impact and Dxxx row if applicable). - If the feature docs introduce future/deferred wording, classify it and update
tracking/future-language-audit.md(and usetracking/deferral-wording-patterns.mdfor replacement wording where needed). - If the feature changes expected codebase structure or implementer routing, update the external bootstrap/AGENTS/code-index templates so external repos inherit the same assumptions.
Deferred Feature Placement Examples (Canonical Patterns)
- Good (planned deferral): “Deferred to
M10(P-Creator) afterM9.SDK.D038_SCENARIO_EDITOR_CORE; not part ofM9exit criteria.” Result: add/update anM10.*cluster row with hard/soft edges and note the out-of-scope boundary. - Good (north star): “Long-term vision only; depends on
M7.NET.CROSS_ENGINE_BRIDGE_AND_TRUST+M11.VISUAL.D048_AND_RENDER_MOD_INFRA; trust-labeled and not a ranked promise.” Result: no new cluster if already covered, but add/update tracker risk/trust-label notes. - Bad (ambiguous): “Could add later if players want it.”
Result: rewrite into planned deferral + overlay mapping, or mark proposal-only /
Pxxx. - Good (external implementation handoff): “This introduces a new first-class subsystem boundary; update
CODE-INDEX.mdtemplate examples and externalAGENTS.mdguidance inM0tooling docs.” Result: preserve LLM/human navigation quality across implementation repos as the architecture grows.