diff --git a/content/global/knowledge/ring.yaml b/content/global/knowledge/ring.yaml new file mode 100644 index 000000000..fc084e20f --- /dev/null +++ b/content/global/knowledge/ring.yaml @@ -0,0 +1,106 @@ +# Fact catalog: ring +# Smuggling ring module event trail — observable evidence produced by module events. +# These facts are made discoverable by specific events in smuggling_ring_v0_1.yaml. +# Stub entries — description and confidence level confirmed; progression text TBD. +# Ticket: #158 | Sprint 18 + +facts: + + - fact_id: ring.cargo_discrepancy_pattern + description: Cargo manifests at The Terminal show small, systematic discrepancies — weight variances, unverified entries, containers with no return log + typical_confidence: suspects + characters: [smuggler, detective] + notes: > + Detective's analytical lattice may flag this automatically during Terminal walkthrough. + Smuggler encounters it during operational paperwork checks. Pattern becomes clearer over + multiple observations (once: false event — repeats). Starting entry point for both + investigation arcs. + + - fact_id: ring.kael_missed_verification + description: Kael Davan was absent from a scheduled cargo verification — another dock worker covered without explanation + typical_confidence: suspects + characters: [smuggler, detective] + notes: > + Discoverable via cargo manifest review (Terminal office) or analytical lattice flag + (detective). Smuggler notices the irregularity in their own paperwork. First concrete + evidence that Kael is deviating from his normal operational reliability. + + - fact_id: ring.kael_unauthorized_corridor_access + description: Kael was observed in restricted maintenance corridor B-7 during off-shift hours with an unknown contact + typical_confidence: knows_of + characters: [smuggler, detective] + notes: > + Core FRIEND contradiction observable (D-034). Player must be in visual range of B-7 + to discover this, OR examine the corridor door access log (investigative action). + Both characters can discover this fact — interpreted differently (smuggler: security + breach / detective: suspicious contact). Upgrades from suspects to knows_of when + contact identity confirmed, knows_details when purpose confirmed. + + - fact_id: ring.kael_unusual_meridian_activity + description: Encrypted Meridian packets sent from cargo bay terminals — frequent, patterned, not from personal devices + typical_confidence: suspects + characters: [detective] + notes: > + Detective-only. Requires analytical lattice to flag the outgoing packet pattern. + Player must be in or adjacent to The Terminal cargo bay. Content not accessible — + only the existence and frequency of the encrypted messages. Hints at Kael's + off-district contact without revealing who. + + - fact_id: ring.voss_kael_private_meeting + description: Voss called Kael into the supervisor's office — closed door, raised voices audible from adjacent position + typical_confidence: suspects + characters: [smuggler, detective] + notes: > + Observable via spatial positioning (supervisor's office area). Smuggler can witness + the approach and departure without hearing content. Detective observes Kael's visible + strain immediately after if present in The Terminal. Upgrade to knows_of via + trust-gated dialogue with Kael ("Are you alright?" option unlocks post-meeting). + + - fact_id: ring.voss_accelerating_timeline + description: Voss is pushing to close ring operations faster than normal — someone is watching + typical_confidence: knows_of + characters: [smuggler, detective] + notes: > + Smuggler: Voss mentions "the schedule moving up" in guarded conversation (trust-gated, + ring-insider access required). Detective: observe Voss and Nils in two exchanges within + the same shift and note behavioral change. Not directly stated — inferred from context. + + - fact_id: ring.commission_cargo_flag + description: A Commission internal note flags The Terminal's cargo variance rate as statistically unusual + typical_confidence: knows_of + characters: [detective] + notes: > + Detective-only. Accessible via institutional Commission query (authority access tier, + Terminal records). Not a formal investigation — just an internal flag from Maret Korr. + Confirms the detective's suspicions with institutional weight. Smuggler has no way to + know this exists. + + - fact_id: ring.final_shipment_scheduled + description: The ring has scheduled a major final drop — after it clears, operations go dark + typical_confidence: knows_of + characters: [smuggler, detective] + notes: > + Smuggler: direct notification from Voss (ring-insider access). Detective: cargo manifest + shows an unusually large entry scheduled 3 days out — no obvious legitimate reason for + the volume. This fact creates the closing window — both characters know time is running + out, for different reasons. + + - fact_id: ring.sera_avoidance_behavior + description: Sera Venn takes longer routes through The Last Shift to avoid standing near Torek Lintar + typical_confidence: suspects + characters: [detective] + notes: > + Detective-only observable. Player must observe Sera's movement pattern on two separate + occasions — requires forward vision cone and awareness of her baseline route. The + avoidance is visible but not explained. Points toward Sera holding information about + Torek's investigation without having acted on it. + + - fact_id: ring.nils_unlogged_cargo + description: Nils makes regular supply runs to maintenance corridor C-7 with containers that never appear in return logs + typical_confidence: suspects + characters: [smuggler, detective] + notes: > + Discoverable by watching Nils's cargo handling pattern over two shifts, or by examining + the maintenance corridor C-7 access log directly. The missing return entry is the tell — + the container went in but never came back. Both characters can find this; smuggler may + already suspect given operational context. diff --git a/content/modules/tier1/smuggling_ring_v0_1.yaml b/content/modules/tier1/smuggling_ring_v0_1.yaml index 7834b25a3..9e968575c 100644 --- a/content/modules/tier1/smuggling_ring_v0_1.yaml +++ b/content/modules/tier1/smuggling_ring_v0_1.yaml @@ -131,7 +131,7 @@ npc_requirements: Handles physical drops. Not a speaking character — observable behavior only. Can be the anonymous contact Kael meets. binding: named - named_npc: "npc:nils" + named_npc: "npc:nils-davan" is_optional: false - role: institutional-watcher @@ -580,9 +580,11 @@ outcomes: flags_set: - final_shipment_known # set by final_shipment_scheduled event - timeline_accelerating # set by maret_increases_presence — Maret forced their hand - flags_not_set: - - kael_message_sent # If this is NOT set, Kael's cooperation went unnoticed + facts_not_known: + - "ring.cargo_discrepancy_pattern" # detective never found the basic pattern — no investigation ticks_since_activation: 3600 # Module ran for ~60 minutes without full exposure + # kael_message_sent was previously gated here but auto-fires at tick ~1550, + # making this outcome permanently unreachable. Replaced with player-action fact gate. effects: - type: faction_reaction faction: the-ring @@ -611,14 +613,14 @@ outcomes: faces an awkward return to normalcy. Both know the ring isn't gone — just quiet. conditions: facts_known: - - "ring.cargo_discrepancy_pattern" + - "ring.cargo_discrepancy_pattern" # detective found some evidence — ring responds events_fired: - kael_goes_cold # event ID — Kael's behavioral shift fired flags_set: - kael_missed_drop # set by drop_happens_without_kael — ring destabilized - flags_not_set: - - kael_message_sent ticks_since_activation: 2400 + # Mutually exclusive with ring_completes via facts_known/facts_not_known on + # ring.cargo_discrepancy_pattern. No auto-flag gate needed. effects: - type: npc_disposition npc_role: ring-leader @@ -632,8 +634,38 @@ outcomes: reaction: suspicious description: "The ring is alerted to exposure risk. Future operations will be more careful." - # 5. MODULE EXPIRY (quiet exit) - # Player never engaged. Module times out without drama. + # 5. INVESTIGATION STALLS (post-splinter exit) + # The ring splinters but the detective never breaks through to the pivot evidence. + # Explicit terminal exit for the non-terminal ring_splinters state. + - outcome_id: ring_stalemate + label: "Investigation Stalls" + is_terminal: true + description: > + The ring went dark after the splinter. The detective has the cargo discrepancy + on record — enough to flag, not enough to pursue. The case stays open but cold. + No arrests. No answers. Kael stays in the district, the only person who knows + the full shape of what happened, with no one left to tell it to. + The ring will reconstitute elsewhere. It always does. + conditions: + facts_known: + - "ring.cargo_discrepancy_pattern" # ring_splinters already fired (same gate) + facts_not_known: + - "ring.kael_unauthorized_corridor_access" # detective never reached the pivot evidence + flags_set: + - kael_missed_drop + - final_shipment_known # ring finished while investigation stalled + ticks_since_activation: 4500 # 2100 ticks after ring_splinters window — investigation ran cold + effects: + - type: faction_reaction + faction: lattice-commission + reaction: neutral + description: "The discrepancy flag stays in Maret's file. No follow-up action." + - type: npc_exit + npc_role: ring-leader + description: "Voss quietly transfers. No announcement, no incident report." + + # 6. MODULE EXPIRY (quiet exit) + # Player never engaged at all. Module times out without drama. # NOTE (Gestalt, Sprint 18): Condition uses facts_not_known, not flags_not_set. # kael_behavior_changed fires automatically at tick 300 (time-triggered), making # flags_not_set: [kael_behavior_changed] permanently false after tick 300.