neon-sprawl/docs/decomposition/epics/epic_07_quest_faction.md

110 lines
5.7 KiB
Markdown

# Epic 7 - Questing, Narrative, and Faction Reputation
## Source Anchors
- Master epic reference: [`neon_sprawl_vision.plan.md`](../../../neon_sprawl_vision.plan.md) — Core Epic Map, System Modules Epic 7
- Related modules: E7.M1, E7.M2, E7.M3, E7.M4
## Ownership and success (Level 1)
- **Ownership focus:** Narrative Design + Quest Design + Tools
- **Success criteria:** Quest content provides clear progression direction, worldbuilding depth, and durable midgame engagement.
## Objective
Provide a quest state machine and reward routing that ties gathering, crafting, and combat into guided and repeatable content, plus faction reputation and contract generation for midgame durability.
## Module Breakdown
### E7.M1 - QuestStateMachine
- Responsibility: Quest start/step/complete state transitions and persistence.
- Key contracts: `QuestDef`, `QuestStepState`, `QuestStateTransition`
- Dependencies: E3.M2, E5.M1
- Stage target: Prototype
### E7.M2 - RewardAndUnlockRouter
- Responsibility: Route quest outputs to XP, items, unlocks, and reputation.
- Key contracts: `QuestRewardBundle`, `UnlockGrant`, `RewardDeliveryEvent`
- Dependencies: E2.M2, E3.M3, E7.M1
- Stage target: Prototype
### E7.M3 - FactionReputationLedger
- Responsibility: Track faction standing and gate faction-specific contracts/content.
- Key contracts: `FactionStanding`, `ReputationDelta`, `FactionGateRule`
- Dependencies: E7.M1, E7.M2
- Stage target: Pre-production
### E7.M4 - ContractMissionGenerator
- Responsibility: Semi-procedural repeatable contract generation with difficulty/reward bands.
- Key contracts: `ContractTemplate`, `ContractSeed`, `ContractOutcome`
- Dependencies: E4.M1, E5.M3, E7.M3
- Stage target: Pre-production
## Implementation Slices (Backlog-Ready)
<a id="epic-7-slice-1"></a>
### Slice 1 - Quest core and persistence
- Scope: E7.M1 supporting branching steps and failure/reset rules for prototype chain.
- Dependencies: E3.M2, E5.M1 (gather/craft/encounter hooks on main)
- Acceptance criteria:
- 3-5 onboarding quests + one chain requiring gather/craft/combat complete without duped rewards.
- Telemetry hooks: `quest_start`, `quest_step_complete`, `quest_complete`, funnel times.
**Linear backlog:** [E7M1-prototype-backlog.md](../../plans/E7M1-prototype-backlog.md) — [NEO-112](https://linear.app/neon-sprawl/issue/NEO-112) → [NEO-123](https://linear.app/neon-sprawl/issue/NEO-123); client capstone **E7M1-12** [NEO-123](https://linear.app/neon-sprawl/issue/NEO-123). Verify in **Godot**, not Bruno-only.
### Slice 2 - Reward and unlock routing
- Scope: E7.M2 delivering XP, items, blueprint unlocks, and flags for world gates.
- Dependencies: E7.M1, E2.M2, E3.M3
- Acceptance criteria:
- Idempotent reward delivery; replays cannot double-claim.
- Telemetry hooks: `reward_delivery`, `unlock_granted`.
**Linear backlog:** [E7M2-prototype-backlog.md](../../plans/E7M2-prototype-backlog.md) — [NEO-124](https://linear.app/neon-sprawl/issue/NEO-124) → [NEO-132](https://linear.app/neon-sprawl/issue/NEO-132); client capstone **E7M2-09** [NEO-132](https://linear.app/neon-sprawl/issue/NEO-132). Verify quest completion rewards in **Godot**, not Bruno-only. Encounter loot ([E5.M3](../modules/E5_M3_EncounterAndRewardTables.md)) unchanged in Slice 2.
<a id="slice-3---faction-ledger-pre-production"></a>
### Slice 3 - Faction ledger (pre-production)
- Scope: E7.M3 gating at least one faction line and mission set.
- Dependencies: E7.M1, E7.M2
- Acceptance criteria:
- Reputation deltas auditable; gates fail closed on tamper.
- Player earns Grid Operators rep from operator chain; faction-gated quest accept denied below threshold.
- Telemetry hooks: `reputation_delta`, `faction_gate_blocked`.
**Linear backlog:** [E7M3-pre-production-backlog.md](../../plans/E7M3-pre-production-backlog.md) — [NEO-133](https://linear.app/neon-sprawl/issue/NEO-133) → [NEO-143](https://linear.app/neon-sprawl/issue/NEO-143); client capstone **E7M3-11** [NEO-143](https://linear.app/neon-sprawl/issue/NEO-143). Verify faction standing + gate deny in **Godot**, not Bruno-only.
### Slice 4 - Contract generator (pre-production)
- Scope: E7.M4 emitting repeatable contracts from templates by zone difficulty.
- Dependencies: E4.M1, E5.M3, E7.M3
- Acceptance criteria:
- Generated contracts validate against economy and parity rules.
- Telemetry hooks: `contract_issued`, `contract_complete`, reward anomalies.
**Linear backlog:** [E7M4-pre-production-backlog.md](../../plans/E7M4-pre-production-backlog.md) — [NEO-144](https://linear.app/neon-sprawl/issue/NEO-144) → [NEO-154](https://linear.app/neon-sprawl/issue/NEO-154); client capstone **E7M4-11** [NEO-154](https://linear.app/neon-sprawl/issue/NEO-154). Verify repeatable contract issue + payout in **Godot**, not Bruno-only.
## Risks and Mitigations
- Risk: Quest scripting becomes engineering-heavy for solo dev.
- Mitigation: Data-first `QuestDef` schema; templates in decomposition tools path.
- Risk: Rewards break parity or economy.
- Mitigation: Lint bundles against E6.M4 and E3.M5 policies.
<a id="epic-7-definition-of-done"></a>
## Definition of Done
- Prototype quest counts and integrated chain meet master plan minimums **in the Godot client** (Slice 1 capstone [NEO-123](../../manual-qa/NEO-123.md)), not Bruno-only.
- Slice 2 quest **completion** rewards (items + skill XP) visible in Godot with idempotent delivery (capstone [NEO-132](../../manual-qa/NEO-132.md)), not Bruno-only.
- Slice 3 faction rep + gated quest line visible in Godot (capstone [NEO-143](../../manual-qa/NEO-143.md)), not Bruno-only.
- Slice 4 repeatable contract issue + encounter-clear payout visible in Godot (capstone [NEO-154](../../manual-qa/NEO-154.md)), not Bruno-only.
- Pre-production adds contracts (E7.M4) with validation beyond Slice 3.