E7.M3 — FactionReputationLedger
Summary
Purpose
Character-wide faction standing, auditable reputation deltas, and FactionGateRule evaluation for quest accept (and future zone/travel gates via E4.M1). Rep grants flow through E7.M2 completionRewardBundle idempotency.
Responsibilities
- Persist
FactionStanding per player per faction; apply ReputationDelta with clamp and audit log.
- Evaluate
FactionGateRule on quest accept — fail closed on unknown faction or tampered rules (startup validation).
- Emit telemetry hook sites:
reputation_delta, faction_gate_blocked.
Key contracts
| Contract |
Role |
FactionDef |
Faction id, display name, min/max/neutral standing. |
FactionStanding |
Current rep per faction for a player. |
ReputationDelta |
Signed change with source attribution (quest id, etc.). |
FactionGateRule |
Minimum standing required (e.g. on QuestDef). |
reputationGrants |
Rows on QuestRewardBundle — factionId + amount. |
Module dependencies
- E7.M1 — QuestStateMachine (
TryAccept gate hook site).
- E7.M2 — RewardAndUnlockRouter (bundle apply + idempotent delivery store).
Dependents (by design)
- E7.M4 — ContractMissionGenerator.
- E8.M2 — GuildCorpProgressionState.
- E4.M1 — ZoneGraphAndTravelRules (
TravelRule faction gates).
Related implementation slices
Epic 7 Slice 3 — at least one faction quest line with rep grant + gated accept; auditable deltas; telemetry reputation_delta, faction_gate_blocked. Backlog: E7M3-pre-production-backlog.md.
Linear backlog (decomposed)
Prototype Slice 3 freeze (E7M3-01)
Faction catalog
FactionDef.id |
displayName |
Standing band |
prototype_faction_grid_operators |
Grid Operators |
-100…100 (neutral 0) |
prototype_faction_rust_collective |
Rust Collective |
-100…100 (neutral 0) |
Quest content changes
QuestDef.id |
Rep / gate |
prototype_quest_operator_chain |
completionRewardBundle.reputationGrants: prototype_faction_grid_operators +15 (existing item + skill XP unchanged) |
prototype_quest_grid_contract (new) |
prerequisiteQuestIds: operator chain; factionGateRules: Grid Operators minStanding 15; objective inventory_has_item survey_drone_kit ×1; completion rep Rust Collective +10 |
Roster: five quests total (four E7.M1 onboarding + one faction line). E7.M1 four-quest freeze expands under E7M3 CI gates (PROTOTYPE_E7M3_QUEST_IDS in scripts/validate_content.py).
CI enforcement (NEO-133): scripts/validate_content.py validates content/factions/*_factions.json, five-quest roster, faction cross-refs on gates and reputationGrants, E7M3 completion bundle freeze, and grid-contract shape.
Source anchors