35 KiB
Module Dependency Register
Tracks cross-epic dependencies and contract readiness. Every Depends On module ID in this table has its own row (closed graph).
Contract means a stable boundary with a defined artifact (Protobuf wire message, JSON Schema content file, telemetry catalog entry, or server-internal type until promoted). See What a contract is for kinds, repo layout, and versioning. Authority (who owns PositionState, camera, combat outcomes): Client vs server authority. PvP × combat: PvP and the combat engine. Quests × party: Quest scope and party rules. Data reload × telemetry ops: Data reload and telemetry operations policy. Docs vs code: Documentation and implementation alignment.
Fleshed-out scope, contracts, and integration notes live in per-module documents (see Per-module documentation).
Dependency Table
Epic 1 — Core Player Runtime
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E1.M1 | InputAndMovementRuntime | None | MoveCommand, PositionState, InteractionRequest | Prototype | Ready |
| E1.M2 | IsometricCameraController | E1.M1 | CameraState, ZoomBandConfig, OcclusionPolicy | Prototype | Ready |
| E1.M3 | InteractionAndTargetingLayer | E1.M1 | TargetState, InteractableDescriptor, SelectionEvent | Prototype | In Progress |
| E1.M4 | AbilityInputScaffold | E1.M3, E5.M1 | AbilityCastRequest, HotbarLoadout, CooldownSnapshot | Prototype | In Progress |
E1.M2 note: Prototype slice Ready: client/scripts/isometric_follow_camera.gd + child Camera3D on World/IsometricFollowCamera in client/scenes/main.tscn; per-tick CameraState (client/scripts/camera_state.gd); ZoomBandConfig (NEO-16); OcclusionPolicy (NEO-17); pick-through "occluder" convention (NEO-20); consumer contract + occluder lifecycle hardening (NEO-18). See E1_M2_IsometricCameraController.md.
E1.M3 note: Decomposition expanded in E1_M3_InteractionAndTargetingLayer.md (E1.M1 vs E1.M3 boundary, contract sketches, Slice 3 alignment). Partial (NEO-23): versioned JSON v1 PlayerTargetStateResponse + POST …/target/select under server/NeonSprawl.Server/Game/Targeting/ (NEO-23; server README — Targeting) — throwaway HTTP spike per contracts.md. Partial (NEO-25): versioned GET /game/world/interactables + InteractablesListDtos / InteractablesWorldApi in Game/Interaction/; Godot interactables_catalog_client.gd + interactable_world_builder.gd (NEO-25; server README — Interactable descriptors). NEO-26 (prototype SelectionEvent): Godot TargetSelectionClient.selection_event on lockedTargetId changes (NEO-26). Follow-on / in progress: richer multi-consumer InteractableDescriptor targeting on later Linear issues. Precursor (E1.M1): InteractionRequest + horizontal reach (NEO-9; Game/Interaction/, Game/World/HorizontalReach.cs).
E1.M4 note: Vertical-slice decomposition is defined in E1M4-prototype-backlog.md with story slugs E1M4-01 through E1M4-05 (loadout contract, cast path, accept/deny UX, cooldown sync, telemetry hooks). NEO-29 started implementation with HotbarLoadout v1 server APIs + persistence wiring and client hydration; NEO-31 added the prototype cast POST + client digit-key path and resolver tests; NEO-28 added server target lock + range gates and client cast feedback UX; NEO-30 documented Epic 1 Slice 3 cast-funnel telemetry hook sites (comment-only, AbilityCastApi); NEO-32 added GET …/cooldown-snapshot, on_cooldown deny, and client HUD + poll sync — module status remains In Progress; see E1_M4_AbilityInputScaffold.md, NEO-29 plan, NEO-31 plan, NEO-28 plan, NEO-30 plan, and NEO-32 plan.
Epic 2 — Skills and Progression Framework
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E2.M1 | SkillDefinitionRegistry | None | SkillDef, SkillCategory, UnlockRequirement, allowedXpSourceKinds | Prototype | In Progress |
| E2.M2 | XpAwardAndLevelEngine | E2.M1 | XpGrantEvent, LevelCurve, LevelUpEvent | Prototype | In Progress |
| E2.M3 | MasteryAndPerkUnlocks | E2.M1, E2.M2 | MasteryTrack, PerkDef, PerkUnlockEvent, PerkState | Pre-production | In Progress |
| E2.M4 | ProgressionPacingControls | E2.M2, E9.M2 | XpModifierProfile, CatchUpRule, PacingPolicy | Pre-production | Planned |
E2.M1 note: Epic 2 Slice 1 backlog in Linear (Epic 2 — Classless Skill and Progression Framework): NEO-33 → NEO-34 → NEO-35 → NEO-36; label E2.M1. See E2_M1_SkillDefinitionRegistry.md. NEO-33 (content + CI + docs) moves the register row to In Progress; NEO-34+ cover server registry and HTTP. Update documentation and implementation alignment when slices land.
E2.M2 note: Epic 2 Slice 2 — NEO-37 (progression snapshot GET) and NEO-38 (grant POST, persistence, level-up payloads); label E2.M2. Module doc E2_M2_XpAwardAndLevelEngine.md. Slice 3 integration: NEO-41–NEO-43 landed. NEO-44 (gig XP on combat defeat) landed under E5.M1 — combat → gig XP only, not E2.M2 skill grants (NEO-44 plan). Keep aligned with documentation and implementation alignment.
E2.M3 note: Epic 2 Slice 4 — NEO-45 → NEO-49; label E2.M3. NEO-45 landed: prototype salvage mastery catalog + schema + CI. NEO-46 landed: fail-fast server mastery catalog load. NEO-47 landed: PerkUnlockEngine, IPlayerPerkStateStore + V004, level-up hook in skill XP grants. NEO-49 landed: comment-only perk_unlock telemetry hook in PerkUnlockEngine.TryUnlockPerks. NEO-48 landed: GET/POST /game/players/{id}/perk-state + Bruno perk-state/. Flagship track; see E2_M3_MasteryAndPerkUnlocks.md, E2M3-pre-production-backlog.md, and documentation_and_implementation_alignment.md E2.M3 row.
Epic 3 — Crafting Economy
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E3.M1 | ResourceNodeAndGatherLoop | E1.M3, E2.M2 | ResourceNodeDef, GatherResult, ResourceYieldTable | Prototype | Ready |
| E3.M2 | RefinementAndRecipeExecution | E3.M1, E3.M3 | RecipeDef, CraftRequest, CraftResult | Prototype | Ready |
| E3.M3 | ItemizationAndInventorySchema | None | ItemDef, ItemInstance, InventorySlot | Prototype | In Progress |
| E3.M4 | SinkAndDurabilityLifecycle | E3.M3, E8.M3 | DurabilityState, ItemSinkEvent, RepairCostRule | Pre-production | Planned |
| E3.M5 | EconomyBalancePolicy | E3.M4, E9.M2 | EconomyPolicy, PriceBandRule, FaucetSinkRatio | Pre-production | Planned |
E3.M1 note: Epic 3 Slice 2 backlog in Linear (Epic 3 — Crafting, Gathering, and Itemization Economy): NEO-57 → NEO-64; label E3.M1. See E3M1-prototype-backlog.md, E3_M1_ResourceNodeAndGatherLoop.md. NEO-57 (content + CI), NEO-58 (server fail-fast load), NEO-59 (IResourceNodeDefinitionRegistry + DI), NEO-60 (GET /game/world/resource-node-definitions), NEO-61 (IResourceNodeInstanceStore + depletion operations, V006), NEO-62 (GatherOperations + GatherResult), NEO-63 (interact → gather engine + four registry anchors + Bruno), NEO-64 (comment-only resource_gathered / gather_node_depleted telemetry hook sites in GatherOperations.TryGather) — E3M1-01–E3M1-08 complete; register row Ready.
E3.M3 note: Epic 3 Slice 1 backlog in Linear (Epic 3 — Crafting, Gathering, and Itemization Economy): NEO-50 → NEO-56; label E3.M3. See E3M3-prototype-backlog.md, E3_M3_ItemizationAndInventorySchema.md. NEO-50 (content + CI), NEO-51 (server fail-fast load), NEO-52 (IItemDefinitionRegistry + DI), NEO-53 (GET /game/world/item-definitions), NEO-54 (inventory store + stack/slot rules engine), NEO-55 (GET/POST /game/players/{id}/inventory), and NEO-56 (comment-only item_created / inventory_transfer_denied telemetry hook sites in PlayerInventoryOperations) — Epic 3 Slice 1 backlog E3M3-01–E3M3-07 complete; NEO-72 (client inventory HUD — inventory_client.gd, item_definitions_client.gd, InventoryLabel; NEO-72 manual QA) — Epic 3 Slice 5 E3S5-01 client landed; register row In Progress until Slice 2+; later slices update the alignment table as they land.
E3.M2 note: Epic 3 Slice 3 backlog in Linear (Epic 3 — Crafting, Gathering, and Itemization Economy): NEO-65 → NEO-71; label E3.M2. See E3M2-prototype-backlog.md, E3_M2_RefinementAndRecipeExecution.md. NEO-42 (refine XP prep helper) is Done; NEO-65–NEO-71 complete — NEO-71 (comment-only item_crafted / craft_failed telemetry hook sites in CraftOperations.TryCraft) — E3M2-01–E3M2-07 complete; register row Ready. Upstream: E3.M1 Ready, E3.M3 inventory landed.
E3 Slice 5 (client) note: Epic 3 client economy integration — NEO-72 → NEO-75; labels client + module ids. See E3S5-client-prototype-backlog.md, epic_03 Slice 5. Required for prototype playable gather→craft loop (not Bruno-only).
Epic 4 — World Topology
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E4.M1 | ZoneGraphAndTravelRules | None | ZoneDef, ZoneEdge, TravelRule | Prototype | Planned |
| E4.M2 | SpawnEcologyController | E4.M1, E3.M1, E5.M2 | SpawnProfile, RespawnRule, ZoneEcologyState | Pre-production | Planned |
| E4.M3 | SeamlessHandoffAndRegionState | E4.M1 | RegionHandoffEvent, RegionAuthority, TransferState | Pre-production | Planned |
| E4.M4 | SecurityTierZoneFlags | E4.M1 | SecurityTier, ZonePolicyState, ZoneEntryWarning | Prototype | Planned |
E4.M3: Epic also references backend world services for region authority; treat as external integration alongside E4.M1 contracts.
Epic 5 — PvE Combat
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E5.M1 | CombatRulesEngine | E1.M3, E2.M2 | CombatAction, CombatResolution, ThreatState | Prototype | Ready |
| E5.M2 | NpcAiAndBehaviorProfiles | E5.M1 | NpcBehaviorDef, TelegraphEvent, AggroRule | Prototype | In Progress |
| E5.M3 | EncounterAndRewardTables | E5.M1, E5.M2, E3.M3, E7.M2 | EncounterDef, RewardTable, EncounterCompleteEvent | Prototype | Ready |
| E5.M4 | GroupCombatScaling | E5.M3, E8.M1 | ScalingProfile, PartySizeModifier, CombatDifficultyBand | Pre-production | Planned |
E5.M1 note: Epic 5 Slice 1 backlog in Linear (Epic 5 — PvE Combat and Encounter Content): NEO-76 → NEO-86; label E5.M1. Gig XP on defeat: E5M1-10 NEO-44. See E5M1-prototype-backlog.md, E5_M1_CombatRulesEngine.md. Builds on E1.M4 cast funnel (NEO-28/31/32); extends POST …/ability-cast with CombatResolution. NEO-76 landed: frozen four-ability catalog + CI (NEO-76 plan). NEO-77 landed: fail-fast server load of content/abilities/*_abilities.json (NEO-77 plan). NEO-79 landed: injectable IAbilityDefinitionRegistry + DI; hotbar/cast use TryNormalizeKnown (NEO-79 plan). NEO-78 landed: GET /game/world/ability-definitions — AbilityDefinitionsWorldApi + DTOs in Game/Combat/ (NEO-78 plan); Bruno bruno/neon-sprawl-server/ability-definitions/. NEO-80 landed: ICombatEntityHealthStore / InMemoryCombatEntityHealthStore — lazy init (Slice 1 flat 100 HP; superseded by NEO-91 plan per-archetype catalog max HP + three NPC instance ids); DI via AddCombatEntityHealthStore() (NEO-80 plan); server README — Combat entity health (NEO-80, NEO-91). NEO-81 landed: CombatOperations.TryResolve + CombatResult + CombatReasonCodes — defeated pre-check deny vocabulary (target_defeated, unknown_ability, unknown_target) (NEO-81 plan); server README — Combat engine (NEO-81). NEO-82 landed: AbilityCastApi invokes CombatOperations.TryResolve after E1.M4 gates; nested wire combatResolution on accept; per-ability catalog cooldownSeconds on successful resolve; target_defeated JSON cast deny without cooldown (NEO-82 plan); server README — Ability cast (NEO-82); Bruno bruno/neon-sprawl-server/ability-cast/ defeat spine. NEO-83 landed: GET /game/world/combat-targets — CombatTargetsWorldApi + DTOs; authoritative HP snapshot from ICombatEntityHealthStore for client HUD (NEO-83 plan); server README — Combat targets snapshot (NEO-83); Bruno bruno/neon-sprawl-server/combat-targets/. NEO-44 landed: CombatDefeatGigXpGrant on cast targetDefeated — 25 gig XP to breach via IPlayerGigProgressionStore (V007); GET …/gig-progression (NEO-44 plan); server README — Gig progression (NEO-44). NEO-84 landed: comment-only ability_used / enemy_defeat telemetry hook sites in CombatOperations.TryResolve; reserved encounter_start / player_death (NEO-84 plan); server README — Combat telemetry hooks (NEO-84). NEO-85 landed: client combat HUD — combat_targets_client.gd, CombatTargetHpLabel, CastFeedbackLabel resolution copy; event-driven GET /game/world/combat-targets refresh (NEO-85 plan, NEO-85 manual QA); client README — Combat feedback + target HP HUD (NEO-85). NEO-86 landed: playable combat capstone — gig_progression_client.gd, GigXpLabel, defeat-triggered gig GET refresh; capstone manual QA NEO-86 (NEO-86 plan); client README — End-to-end combat loop (NEO-86). Epic 5 Slice 1 complete — register row Ready.
E5.M2 note: Epic 5 Slice 2 backlog in Linear (Epic 5 — PvE Combat and Encounter Content): NEO-87 → NEO-98; label E5.M2. Client capstone E5M2-12 NEO-98. See E5M2-prototype-backlog.md, E5_M2_NpcAiAndBehaviorProfiles.md. Upstream E5.M1 Ready. NEO-87 landed: frozen three-behavior catalog + CI (NEO-87 plan). NEO-88 landed: fail-fast server load of content/npc-behaviors/*_npc_behaviors.json (NEO-88 plan); server README — NPC behavior catalog. NEO-89 landed: injectable INpcBehaviorDefinitionRegistry + DI (NEO-89 plan). NEO-90 landed: GET /game/world/npc-behavior-definitions — NpcBehaviorDefinitionsWorldApi + DTOs in Game/Npc/ (NEO-90 plan); server README — NPC behavior definitions (NEO-90); Bruno bruno/neon-sprawl-server/npc-behavior-definitions/. NEO-91 landed: PrototypeNpcRegistry + combat-target migration — three NPC instance ids, per-archetype catalog max HP (NEO-91 plan); server README — Combat entity health (NEO-91). NEO-92–NEO-96 landed: aggro/threat, runtime state machine, GET …/npc-runtime-snapshot, player combat HP + NPC attack resolve, telemetry hooks (NEO-92–NEO-96). NEO-97 landed: client telegraph HUD (NEO-97 plan, NEO-97 manual QA). NEO-98 landed: playable NPC telegraph combat capstone (NEO-98 plan, NEO-98 manual QA); client README — End-to-end NPC telegraph combat loop (NEO-98). Epic 5 Slice 2 complete — register row Ready. Replaces prototype_target_alpha / beta with three NPC archetype instances; owns ThreatState, TelegraphEvent, session IPlayerCombatHealthStore.
E5.M3 note: Epic 5 Slice 3 backlog in Linear (Epic 5 — PvE Combat and Encounter Content): NEO-100 → NEO-111; label E5.M3. Client capstone E5M3-12 NEO-111. See E5M3-prototype-backlog.md, E5_M3_EncounterAndRewardTables.md. Upstream E5.M2 Ready, E3.M3 inventory landed. Prototype spine: one encounter prototype_combat_pocket (defeat all three E5.M2 NPC ids) → reward table prototype_combat_pocket_clear ( scrap_metal_bulk ×10, contract_handoff_token ×1 ); idempotent completion per player; per-defeat gig XP unchanged (NEO-44). NEO-100 landed: encounter + reward-table schemas, prototype catalogs, CI gates (NEO-100 plan). NEO-101 landed: fail-fast server load of content/encounters/*_encounters.json + content/reward-tables/*_reward_tables.json (NEO-101 plan); server README — Encounter + reward-table catalogs (NEO-101). NEO-102 landed: injectable IEncounterDefinitionRegistry + IRewardTableDefinitionRegistry + DI (NEO-102 plan); server README — Encounter + reward-table registries (NEO-102). NEO-103 landed: GET /game/world/encounter-definitions — EncounterDefinitionsWorldApi + nested rewardTable summary (NEO-103 plan); server README — Encounter definitions (NEO-103); Bruno bruno/neon-sprawl-server/encounter-definitions/. NEO-104 landed: IEncounterProgressStore + IEncounterCompletionStore + EncounterProgressOperations (NEO-104 plan); server README — Encounter progress (NEO-104). NEO-105 landed: EncounterCompletionOperations + EncounterCompleteEvent result payload (NEO-105 plan); server README — Encounter completion (NEO-105). NEO-106 landed: EncounterCombatWiring on AbilityCastApi (NEO-106 plan); server README — Encounter combat wiring (NEO-106). NEO-107 landed: IEncounterCompleteEventStore + E7.M2 hook stub (NEO-107 plan); server README — Encounter complete event (NEO-107). NEO-108 landed: GET /game/players/{id}/encounter-progress — EncounterProgressApi + DTOs (NEO-108 plan); server README — Per-player encounter progress (NEO-108); Bruno bruno/neon-sprawl-server/encounter-progress/. NEO-109 landed: comment-only encounter_start, encounter_complete, reward_attribution, encounter_complete_denied hook sites (NEO-109 plan); server README — Encounter telemetry hooks (NEO-109). NEO-110 landed: client encounter progress + loot HUD — encounter_progress_client.gd, defeat-triggered GET (NEO-110 plan, NEO-110 manual QA); client README — Encounter progress + loot HUD (NEO-110). NEO-111 landed: playable encounter clear capstone — NEO-111 manual QA; client README — End-to-end encounter clear loop (NEO-111); plan NEO-111. Epic 5 Slice 3 complete — register row Ready.
Epic 6 — PvP Security
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E6.M1 | PvPEligibilityAndFlagState | E4.M4 | PvPFlagState, EligibilityRule, PvPStateChanged | Prototype | Planned |
| E6.M2 | ConsentAndRiskUxSignals | E6.M1, E1.M2 | RiskPrompt, ZoneRiskState, PvPIndicatorState | Prototype | Planned |
| E6.M3 | LossPenaltyAndAntiGriefRules | E6.M1, E9.M4 | PvPLossRule, SpawnProtectionState, GriefingStrike | Pre-production | Planned |
| E6.M4 | RewardParityEnforcer | E3.M2, E5.M3, E7.M2 | RewardParityMap, EquivalentPowerBand, ParityViolationAlert | Prototype | Planned |
Cross-cutting: combat and PvP eligibility
When hostile actions can target players, E5.M1 — CombatRulesEngine must consult E6.M1 — PvPEligibilityAndFlagState in the same server handling path before applying effects. PvE-only milestones may use a stub that denies all player-target hostility until PvP is enabled. Shape and deny reasons: PvP and the combat engine.
Cross-cutting: quests and party
Quest state is per-character by default; party credit and leader-only turn-in use E8.M1 — PartyAndMatchAssembly when enabled in QuestDef. Solo milestones need no party service. Details: Quest scope and party rules.
Cross-cutting: data reload and telemetry
Gameplay content and curves default to boot load with optional dev-only reload; live tuning defers to E9.M3 / E2.M4 when available. Telemetry: PII rules, sampling, retention principles, and baseline event taxonomy (vision plan + future catalog). See Data reload and telemetry operations policy.
Epic 7 — Quest / Faction
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E7.M1 | QuestStateMachine | E3.M2, E5.M1 | QuestDef, QuestStepState, QuestStateTransition | Prototype | Planned |
E7.M1 note: Epic 7 Slice 1 backlog in Linear (Epic 7 — Questing, Narrative, and Faction Reputation): NEO-112 → NEO-123; label E7.M1. See E7M1-prototype-backlog.md, E7_M1_QuestStateMachine.md. Upstream: E3.M1 gather Ready, E3.M2 craft Ready, E5.M3 encounter Ready. Client capstone E7M1-12 NEO-123. E7M1-01 / NEO-112 catalog landed (schemas + CI); E7M1-02 / NEO-113 server load landed; E7M1-03 / NEO-114 registry landed (NEO-114 plan); E7M1-04 / NEO-115 HTTP read landed (NEO-115 plan); E7M1-05 / NEO-116 player quest state store landed (NEO-116 plan); E7M1-06 / NEO-117 QuestStateOperations landed (NEO-117 plan); E7M1-07 / NEO-118 QuestObjectiveWiring landed (NEO-118 plan); E7M1-08 / NEO-119 per-player GET landed (NEO-119 plan); E7M1-09 / NEO-120 accept POST landed (NEO-120 plan); E7M1-10 / NEO-121 comment-only quest telemetry hook sites landed (NEO-121 plan); register row stays Planned until client capstone E7M1-12 NEO-123.
| E7.M2 | RewardAndUnlockRouter | E2.M2, E3.M3, E7.M1 | QuestRewardBundle, UnlockGrant, RewardDeliveryEvent | Prototype | Planned |
| E7.M3 | FactionReputationLedger | E7.M1 | FactionStanding, ReputationDelta, FactionGateRule | Pre-production | Planned |
| E7.M4 | ContractMissionGenerator | E4.M1, E5.M3, E7.M3 | ContractTemplate, ContractSeed, ContractOutcome | Pre-production | Planned |
Epic 8 — Social / Guild
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E8.M1 | PartyAndMatchAssembly | E1.M3 | PartyState, InviteEvent, RolePreference | Pre-production | Planned |
| E8.M2 | GuildCorpProgressionState | E8.M1, E7.M3 | GuildState, GuildRolePolicy, GuildProgressionEvent | Production | Planned |
| E8.M3 | PlayerTradeAndMarketplace | E3.M3, E3.M5 | MarketListing, TradeOffer, SettlementEvent | Pre-production | Planned |
| E8.M4 | ChatModerationAndReporting | E9.M4 | ChatMessageEvent, PlayerReport, ModerationAction | Pre-production | Planned |
Epic 9 — LiveOps / Integrity
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| E9.M1 | TelemetryEventSchema | None | TelemetryEvent, EventSchemaVersion, ClientEventEnvelope | Prototype | Planned |
| E9.M2 | KpiDashboardsAndAlerting | E9.M1 | KpiDefinition, AlertThreshold, MilestoneGateSignal | Pre-production | Planned |
| E9.M3 | LiveBalanceControlPlane | E9.M2, E5.M1, E2.M4, E3.M5 | BalancePatch, ConfigVersion, RolloutState | Production | Planned |
| E9.M4 | IntegrityAndAbuseResponse | E9.M1 | IntegritySignal, IncidentTicket, EnforcementAction | Pre-production | Planned |
Cross-cutting — Content tooling (not E1–E9)
Operator-facing authoring infrastructure; module IDs use the CT prefix. Program doc: tooling/internal_authoring.md.
| Module ID | Module Name | Depends On | Contract Needed | Phase Required | Status |
|---|---|---|---|---|---|
| CT.M1 | ContentValidationPipeline | Soft: E2.M1, E3.M2–M3, E4.M1, E7.M1 (shape alignment) | JSON Schema bundle, validation CLI, error schema | Prototype | Planned |
| CT.M2 | AuthoringStudioApplication | CT.M1 | Studio project layout, optional local content API | Prototype | Planned |
| CT.M3 | ContentReferenceAndBundleWorkflows | CT.M1; CT.M2 (recommended) | ContentBundleManifest (optional), reference graph | Pre-production | Planned |
CT.* modules consume gameplay content contracts from E1–E9; they do not replace E7 runtime quest semantics or E4 server travel evaluation.
Per-module documentation
Status Legend
- Planned: No meaningful implementation toward this module yet (see documentation and implementation alignment).
- In Progress: Partial implementation or active stories; contracts may be incomplete.
- Ready: Contract stable and usable by dependents (contracts.md).
- Blocked: Dependency missing or unstable.
Tracking table (modules with code or plans in flight): documentation_and_implementation_alignment.md — Implementation tracking table.