25 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, Epic 5) remains backlog. 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 | In Progress |
| E5.M2 | NpcAiAndBehaviorProfiles | E5.M1 | NpcBehaviorDef, TelegraphEvent, AggroRule | Prototype | Planned |
| E5.M3 | EncounterAndRewardTables | E5.M1, E3.M3, E7.M2 | EncounterDef, RewardTable, EncounterCompleteEvent | Prototype | Planned |
| 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 prototype dummy HP at PrototypeCombatConstants.MaxPrototypeTargetHp (100); DI via AddCombatEntityHealthStore() (NEO-80 plan); server README — Combat entity health (NEO-80). 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/.
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.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.