diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/pools.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/pools.yaml new file mode 100644 index 000000000..729963f03 --- /dev/null +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/pools.yaml @@ -0,0 +1,78 @@ +# Pool definitions for Sova Transit District +# Seed-time selection system. Architecture supports N candidates; v0.1 has 1 each. +# Format per seed-configuration-schema.md section 5.2 +# Referenced by: seed config generation (Sprint 5+), content loader (#408) + +pools: + - pool_id: "transit:friend_smuggler" + category: npc_role + description: > + Smuggler's FRIEND (D-034) — closest colleague, emotional anchor. + Production-level complex NPC exercising every content pipeline. + v0.1: Kael Davan (dock worker, ring member). v0.2+: expand to + multiple dock worker candidates with different contradiction arcs. + constraints: + - must_be_in_template: "logistics-hub" + - must_have_pattern: "FRIEND" + - bonded_character: "smuggler" + candidates: + - npc_id: "npc:kael-davan" + weight: 1 + + - pool_id: "transit:friend_detective" + category: npc_role + description: > + Detective's FRIEND (D-034) — social anchor, information holder. + Production-level complex NPC. Contradiction: sitting on unreported + evidence about Kael's manifest discrepancies, protecting Naia. + v0.1: Sera Venn (Commission field tech, bar regular). + constraints: + - must_have_pattern: "FRIEND" + - bonded_character: "detective" + candidates: + - npc_id: "npc:sera-venn" + weight: 1 + + - pool_id: "transit:bar_regulars" + category: npc_group + description: > + NPCs who frequent The Last Shift as regulars. Fills bar-regular + template slots. v0.1: fixed set (all selected). v0.2+: seeder + draws a subset from a larger candidate pool for variety. + Note: regulars include cross-template visitors (reference links) + who frequent the bar location but are owned by other templates. + constraints: + - frequents_location: "the-last-shift" + candidates: + - npc_id: "npc:sera-venn" + weight: 1 + - npc_id: "npc:resha" + weight: 1 + - npc_id: "npc:kael-davan" + weight: 1 + - npc_id: "npc:torek-lintar" + weight: 1 + - npc_id: "npc:drin" + weight: 1 + + - pool_id: "transit:compromised_inspector" + category: npc_role + description: > + The Commission inspector compromised by the ring. Access to authority + systems, gambling debt makes them vulnerable. v0.1: Torek Lintar. + constraints: + - must_have_access: "authority" + - must_have_faction: "Commission" + candidates: + - npc_id: "npc:torek-lintar" + weight: 1 + + - pool_id: "transit:primary_contraband" + category: contraband + description: > + What the ring is smuggling (D-037). v0.1: unlicensed lattice + components — aftermarket neural lattice modifications. Moral + ambiguity: the ring is smuggling access, not weapons. + candidates: + - id: "contraband:lattice-components" + weight: 1 diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/bar.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/bar.yaml new file mode 100644 index 000000000..d92357c1f --- /dev/null +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/bar.yaml @@ -0,0 +1,101 @@ +# Social site template: The Last Shift (bar) +# D-025: functional cluster as atomic template unit +# 4 role slots, 4+ NPCs in v0.1 (regulars are reference links). 4-8 NPC capacity. + +template_id: bar +display_name: "The Last Shift" +description: > + Mid-grade bar in Sova Transit District. Converted maintenance staging area. + Irregular layout, long bar, corner booth. Where working people go after shift. + Informally known as "Lera's." The social nexus where investigation and + mundane life overlap. +location: the-last-shift + +capacity: + min: 4 + max: 8 + +role_slots: + - role: bar-owner + display_name: "Bar Owner" + count: 1 + required: true + description: > + Owns and operates the bar. Observant, careful, knows everyone's business. + ANCHOR pattern — the stabilizing social presence. Hears everything, + says little. Access tier: insider for regulars. + pool_ref: null + flags: + - social_anchor + - information_hub + - bar_permanent + + - role: bartender + display_name: "Bartender" + count: 1 + required: true + description: > + Serves drinks, manages the floor. Different from the owner — the + bartender is staff, not the proprietor. Younger, less established. + pool_ref: null + flags: + - bar_permanent + + - role: bar-regular + display_name: "Bar Regular" + count: + min: 2 + max: 5 + required: true + description: > + Off-duty workers and social visitors. Regulars are typically owned by + other templates (logistics hub, Commission) with reference links here. + Their presence during bar_evening creates the social observation space. + pool_ref: "transit:bar_regulars" + flags: + - evening_presence + - cross_template + +# v0.1 NPC assignments +v01_assignments: + bar-owner: "npc:lera-sessik" + bartender: "npc:pell" + bar-regular-1: "npc:sera-venn" # Reference: Commission field tech, evening regular + bar-regular-2: "npc:resha" # Owned by bar template + # Additional regulars via reference links: + # npc:kael-davan (from logistics-hub, evening presence) + # npc:torek-lintar (from Commission, evening presence) + # npc:drin (from logistics-hub, occasional) + +# Reference links — NPCs owned by other templates who visit the bar +reference_links: + - npc: "npc:sera-venn" + owning_template: null # Sera is Commission, not bar staff + relationship: "social anchor — evening regular" + presence_phases: [evening] + - npc: "npc:kael-davan" + owning_template: logistics-hub + relationship: "after-shift regular" + presence_phases: [evening] + - npc: "npc:torek-lintar" + owning_template: null # Commission inspector + relationship: "off-duty regular, gambling participant" + presence_phases: [evening] + - npc: "npc:drin" + owning_template: logistics-hub + relationship: "occasional visitor" + presence_phases: [evening] + +triangle_constraints: + - triangle: bar-tensions + required_roles: + - bar-owner # Lera: owner mediating + - bar-regular # Resha: regular with grievance + - bartender # Pell: caught in the middle + - triangle: worried-knowledge + required_roles: + - bar-regular # Sera: avoiding Torek at the bar + +dialogue_pools: + - location: the-last-shift + roles: [bar-owner, bartender, bar-regular] diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/logistics-hub.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/logistics-hub.yaml new file mode 100644 index 000000000..68368f688 --- /dev/null +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/logistics-hub.yaml @@ -0,0 +1,106 @@ +# Social site template: The Terminal (logistics hub) +# D-025: functional cluster as atomic template unit +# 5 role slots, 6 NPCs in v0.1. 4-8 NPC capacity. + +template_id: logistics-hub +display_name: "The Terminal" +description: > + Freight logistics hub — the beating heart of Sova Transit District. Cargo + processing, manifest management, shift rotations. The smuggler's workplace + and the ring's operational cover. +location: the-terminal + +# Capacity range per D-025: 4-8 NPCs in connected space with internal sightlines +capacity: + min: 4 + max: 8 + +role_slots: + - role: shift-supervisor + display_name: "Shift Supervisor" + count: 1 + required: true + description: > + Authority figure. Oversees dock operations, manages shift schedules, + enforces procedures. Access tier: authority within the hub. + pool_ref: null # Fixed assignment in v0.1 + flags: + - authority_figure + - hub_permanent + + - role: dock-worker + display_name: "Dock Worker" + count: + min: 2 + max: 4 + required: true + description: > + Core workforce. Processes cargo, handles manifests, operates equipment. + One dock-worker slot is reserved for the smuggler's FRIEND (pool draw). + pool_ref: "transit:friend_smuggler" # One slot drawn from FRIEND pool + flags: + - hub_permanent + - ring_candidate + + - role: new-hire + display_name: "New Hire" + count: 1 + required: false + description: > + Recent arrival to the logistics hub. Asks questions, doesn't know the + social norms yet, provides a fresh perspective. CATALYST pattern. + pool_ref: null + flags: + - catalyst + - newcomer + + - role: scheduler + display_name: "Freight Scheduler" + count: 1 + required: true + description: > + Manages freight scheduling and manifest coordination. Has access to + cargo records — a key information source for both smuggler and detective. + pool_ref: null + flags: + - hub_permanent + - information_access + + - role: courier + display_name: "Courier" + count: 1 + required: false + description: > + Moves between locations. Off-duty security or delivery runner. + Bridge NPC who connects the hub to other social sites. + pool_ref: null + flags: + - bridge_npc + +# v0.1 NPC assignments (matches seed config design doc section 4.4) +v01_assignments: + shift-supervisor: "npc:voss" + dock-worker-1: "npc:kael-davan" + dock-worker-2: "npc:drin" + new-hire: "npc:renn" + scheduler: "npc:maret-korr" + courier: "npc:harek" + +# Triangles that involve members of this template +triangle_constraints: + - triangle: hub-power + required_roles: + - shift-supervisor # Voss: authority + - dock-worker # Kael: subordinate + - scheduler # Maret: caught-between + - triangle: worried-partner + required_roles: + - dock-worker # Kael: partner under ring pressure + - triangle: informant-question + required_roles: + - dock-worker # Drin: notices Torek's inspection irregularities + +# Dialogue pool locations (maps to dialogue/ subdirectory) +dialogue_pools: + - location: the-terminal + roles: [shift-supervisor, dock-worker, new-hire, scheduler, courier] diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/smuggling-ring.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/smuggling-ring.yaml new file mode 100644 index 000000000..e139f8f7f --- /dev/null +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/templates/smuggling-ring.yaml @@ -0,0 +1,88 @@ +# Social site template: Smuggling Ring (maintenance corridors) +# D-025: functional cluster as atomic template unit +# Smallest template: 2-4 NPCs. Operates in infrastructure gaps. + +template_id: smuggling-ring +display_name: "The Ring" +description: > + Smuggling operation using repurposed maintenance infrastructure. Not a + dedicated room — a corridor between hub sections where old and new + construction don't quite meet. Access through service hatches. The ring + didn't build this space; they found it. Operates during night shift and + shift transitions when oversight is thinnest. +location: maintenance-corridors + +capacity: + min: 2 + max: 4 + +role_slots: + - role: ring-operative + display_name: "Ring Coordinator" + count: 1 + required: true + description: > + Coordinates ring operations. HANDLER motivation — manages logistics, + maintains contacts, makes decisions. Capable, not theatrical. + pool_ref: null + flags: + - ring_leader + - night_presence + - restricted_access + + - role: ring-contact + display_name: "Ring Contact" + count: + min: 1 + max: 2 + required: true + description: > + Active ring member with dual role — legitimate job at the logistics hub + by day, ring operations by night. Reference link from logistics-hub + template. Their presence here is the core secret the smuggler protects + and the detective investigates. + pool_ref: "transit:friend_smuggler" # The FRIEND is the primary ring contact + flags: + - dual_role + - night_presence + - ring_member + + - role: external-contact + display_name: "External Contact" + count: 1 + required: false + description: > + Off-station connection. Arrives with shipments, departs quickly. + Not a permanent presence — appears during ring operation windows. + pool_ref: null + flags: + - transient + - external + +# v0.1 NPC assignments +v01_assignments: + ring-operative: "npc:devra" + ring-contact: "npc:kael-davan" # Reference from logistics-hub (dual role) + external-contact: "npc:sabel" # Off-system contact + +reference_links: + - npc: "npc:kael-davan" + owning_template: logistics-hub + relationship: "ring member — dual role, night operations" + presence_phases: [night] + - npc: "npc:sabel" + owning_template: null # External, transient + relationship: "off-station buyer/receiver" + presence_phases: [night] # Irregular, tied to shipments + +triangle_constraints: + - triangle: worried-partner + required_roles: + - ring-contact # Kael: under pressure from ring work + - triangle: hub-power + required_roles: + - ring-contact # Kael: subordinate to Voss by day, ring by night + +dialogue_pools: + - location: maintenance-corridors + roles: [ring-operative] diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/bar-tensions.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/bar-tensions.yaml index 230477d94..9c8fe9ae0 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/bar-tensions.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/bar-tensions.yaml @@ -1 +1,49 @@ -# Triangle: bar-tensions +# Triangle 3: Bar Tensions — mundane social friction at The Last Shift +# Passive — runs on background simulation, no storyteller intervention +canonical_id: bar-tensions +display_name: "Bar Tensions" +description: > + Mundane social friction at The Last Shift. Lera Sessik (bar owner) runs + a tight establishment. Resha (regular) has a grievance — could be about + the bar, another regular, or community politics. Pell (bartender) is + caught in the middle, trying to keep both the boss and the customers + happy. This is the 50% of life that has nothing to do with conspiracy — + the noise floor that makes investigation signal meaningful. + +members: + - npc: "npc:lera-sessik" + role: "owner — mediates disputes, protects her establishment" + - npc: "npc:resha" + role: "regular — has a grievance, vocal about it" + - npc: "npc:pell" + role: "bartender — caught between boss and customers" + +forks: + - id: grievance-escalation + condition: > + Resha's grievance reaches a tipping point. Lera must decide whether + to take sides or maintain neutrality. Pell gets drawn in. + outcomes: + - id: lera-sides-with-resha + description: > + Lera validates Resha's complaint. Pell adjusts service accordingly. + Social dynamics shift — Resha becomes more central, the bar's + atmosphere changes slightly. + effects: + - "resha.behavior_flags += vindicated" + - "pell.behavior_flags += accommodating" + - "bar atmosphere = tense but resolving" + - id: lera-shuts-it-down + description: > + Lera tells Resha to drop it. Her bar, her rules. Resha sulks. + Pell is relieved. The grievance goes underground. + effects: + - "resha.behavior_flags += resentful,quiet" + - "pell.behavior_flags += relieved" + - "bar atmosphere = business as usual" + +resolution_states: + - id: grievance-resolved + description: The dispute is settled one way or another. Normal bar dynamics resume. + - id: grievance-simmering + description: The issue goes underground. Occasional flare-ups provide social texture. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/hub-power.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/hub-power.yaml index e6b04973e..ee4d6ed13 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/hub-power.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/hub-power.yaml @@ -1 +1,70 @@ -# Triangle: hub-power +# Triangle 1: Hub Power — workplace hierarchy under ring pressure +# Active fork — smuggler decision (3 paths, self-contained per D-053/A-17) +canonical_id: hub-power +display_name: "Hub Power" +description: > + Workplace hierarchy tension at The Terminal. Voss (shift supervisor) has + positional authority but takes operational orders from the ring. Kael + (dock worker, THE FRIEND) is caught between his boss and the ring's demands. + Maret (freight scheduler) sees manifest discrepancies and doesn't know + whom to tell. The triangle's resting tension: Voss needs quiet, Kael + needs everything to hold together, Maret is too smart not to notice. + +members: + - npc: "npc:voss" + role: "authority — shift supervisor with ring complicity" + - npc: "npc:kael-davan" + role: "subordinate — dock worker, ring member, caught between boss and ring" + - npc: "npc:maret-korr" + role: "caught-between — freight scheduler who sees the discrepancies" + +forks: + - id: volume-escalation + condition: > + Ring demands double-volume shipment via intermediary. Smuggler + must decide how to handle the pressure on Voss and Kael. + outcomes: + - id: escalate + description: > + Side with ring (escalate). Convince Voss to widen the shift gap. + Investigation accelerates — manifest discrepancies spike, Voss + becomes visibly anxious. Detective reads organizational stress. + effects: + - "voss.behavior_flags += nervous,schedule_changes,evasive" + - "voss.position_integrity = thin" + - "ring.exposure_risk increases" + - "detective.investigation_pace = accelerated" + - id: stabilize + description: > + Side with Voss (stabilize). Reject or delay the double shipment. + Hub runs quiet but Kael absorbs redirected pressure from ring + coordinator. Detective reads personal stress on Kael instead. + effects: + - "kael.behavior_flags += lattice_checking,distracted,evasive" + - "kael.trust_level (from ring) drops" + - "friend_arc timing = accelerated" + - "detective.investigation_pace = slowed" + - id: mediate + description: > + Compromise — half volume, phased across two shipments. Nobody's + happy, nobody's exposed. Detective reads inconsistent operational + tempo. Creates a deferred second decision point. + effects: + - "ring.exposure_risk = moderate" + - "smuggler.operational_trust (from ring) drops" + - "kael.behavior_flags += uncertain,distracted" + - "detective reads organizational confusion" + +resolution_states: + - id: ring-exposed-via-voss + description: > + Voss's anxiety becomes the detective's thread to pull. Investigation + arrives at the ring through institutional signals. + - id: ring-exposed-via-kael + description: > + Kael's personal strain becomes the detective's signal. Investigation + arrives through behavioral tells on THE FRIEND. + - id: ring-exposed-via-inconsistency + description: > + Irregular operational tempo reveals internal disagreement. Detective + infers organizational structure from pattern disruption. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/informant-question.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/informant-question.yaml index 6f074c355..d5739506d 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/informant-question.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/informant-question.yaml @@ -1 +1,56 @@ -# Triangle: informant-question +# Triangle 5: Informant Question — mundane workplace gossip and suspicion +# Passive — runs on background simulation, provides investigation noise +canonical_id: informant-question +display_name: "The Informant Question" +description: > + Torek Lintar (dock inspector, compromised by gambling debt) is observed + by Drin (dock worker) and Olin (bystander/new arrival). Drin has noticed + Torek's inspection patterns are irregular. Olin overhears workplace gossip + and doesn't know what's significant. This triangle generates the kind + of low-level workplace suspicion that exists in any tight community — + people notice things, talk about them, and form theories. For the + detective, it's signal mixed with noise. + +members: + - npc: "npc:torek-lintar" + role: "inspector — compromised, inspection patterns irregular" + - npc: "npc:drin" + role: "worker — notices Torek's odd behavior, gossips about it" + - npc: "npc:olin" + role: "bystander — overhears gossip, forms theories, asks questions" + +forks: + - id: gossip-spreads + condition: > + Drin's observations about Torek's inspection patterns reach + enough people that the gossip becomes ambient social knowledge. + outcomes: + - id: dismissed-as-gossip + description: > + The community dismisses Drin's observations as workplace gossip. + Torek's reputation survives. The information exists but isn't + treated as significant — noise floor functioning as intended. + effects: + - "torek.position_integrity unchanged" + - "community treats observations as routine gossip" + - "detective must distinguish signal from noise" + - id: torek-noticed + description: > + Enough people notice Torek's patterns that his behavior becomes + a topic of casual conversation. Not accusatory — just curious. + The detective can pick up on ambient awareness. + effects: + - "torek.behavior_flags += noticed,defensive" + - "ambient dialogue includes references to inspection patterns" + - "detective gains investigation.inspection_anomaly (suspects level)" + +resolution_states: + - id: gossip-fades + description: > + The topic loses interest. Workplace gossip moves on. Torek's + irregularities are forgotten by everyone except potentially + the detective. + - id: ambient-suspicion + description: > + A low-level awareness persists in the community. Nothing actionable, + but Torek is slightly more careful and slightly more defensive. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-knowledge.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-knowledge.yaml index 107e0a5c9..77745045c 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-knowledge.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-knowledge.yaml @@ -1 +1,63 @@ -# Triangle: worried-knowledge +# Triangle 2: Worried Knowledge — unreported evidence and protective silence +# Active fork — Sera's choice about what to do with what she knows +canonical_id: worried-knowledge +display_name: "Worried Knowledge" +description: > + Sera Venn (Commission field tech, detective's FRIEND) is sitting on + unreported evidence about Kael's manifest discrepancies. She's protecting + Naia Tamm (Kael's partner, who confided in her about Kael's late nights). + Torek Lintar (compromised inspector) is the subject — his gambling debt + makes him the institutional weak point, and Sera's evidence implicates + his inspection lapses. Sera's avoidance of Torek at the bar is the + observable tell. + +members: + - npc: "npc:sera-venn" + role: "holder — Commission tech sitting on unreported evidence" + - npc: "npc:torek-lintar" + role: "subject — compromised inspector whose lapses Sera has documented" + - npc: "npc:naia-tamm" + role: "protected — Kael's partner, confided worries to Sera" + +forks: + - id: evidence-disclosure + condition: > + Detective builds enough trust with Sera to trigger the disclosure + decision. Sera must choose between institutional duty, friendship + with Naia, and protecting the detective from a compromised colleague. + outcomes: + - id: sera-reports + description: > + Sera reports her evidence through official channels. Torek's + inspection lapses are flagged. The investigation gains institutional + data but Naia loses her protective buffer. + effects: + - "torek.position_integrity = cracking" + - "sera.trust_level (from naia) drops" + - "detective gains investigation.inspection_lapses fact" + - id: sera-protects + description: > + Sera stays silent to protect Naia. The evidence remains buried. + Detective must find the institutional thread through other means. + Sera's avoidance pattern intensifies as she manages the secret. + effects: + - "sera.behavior_flags += avoidance_pattern,evasive" + - "sera.position_integrity = thin" + - "naia remains protected" + - id: sera-confides + description: > + Sera tells the detective privately, off the record. The detective + gains the information but must decide what to do with it. Tests + the detective's institutional loyalty. + effects: + - "detective gains investigation.inspection_lapses fact (informal)" + - "sera.trust_level (toward detective) = trusted" + - "sera.risk_assessment = moderate (off-book disclosure)" + +resolution_states: + - id: torek-exposed + description: Torek's compromised status becomes known to the investigation. + - id: knowledge-buried + description: Sera's evidence stays unreported. Avoidance pattern is the only tell. + - id: informal-disclosure + description: Detective knows but has no official evidence. Must find formal proof. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-partner.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-partner.yaml index de7748a3e..2a2d31e2f 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-partner.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/triangles/worried-partner.yaml @@ -1 +1,67 @@ -# Triangle: worried-partner +# Triangle 4: Worried Partner — ring pressure on personal relationships +# Active fork — the emotional heart of the smuggler's FRIEND arc +canonical_id: worried-partner +display_name: "Worried Partner" +description: > + Kael Davan (dock worker, ring member, smuggler's FRIEND) is under + increasing ring pressure from Devra (ring coordinator). Naia Tamm + (Kael's partner) is worried about his late nights and evasive answers. + The smuggler knows why Kael is busy and can't say. This is the most + emotionally loaded triangle — it connects THE FRIEND's contradiction + arc to personal relationships. If Naia asks the smuggler directly, + there's no good answer. + +members: + - npc: "npc:kael-davan" + role: "partner under pressure — ring work destroying home life" + - npc: "npc:naia-tamm" + role: "worried — sees the changes, doesn't understand the cause" + - npc: "npc:devra" + role: "cause — ring coordinator whose demands increase Kael's burden" + +forks: + - id: naia-confronts + condition: > + Naia's worry reaches a threshold. She confronts Kael directly, or + asks the smuggler what's going on. The smuggler faces a loyalty test. + outcomes: + - id: smuggler-deflects + description: > + Smuggler deflects Naia's questions. Protects Kael's cover but + damages trust with Naia. Kael is grateful but the lie costs. + effects: + - "naia.trust_level (toward smuggler) drops" + - "kael.behavior_flags += relieved,guilty" + - "smuggler.moral_weight (toward naia) = complicit" + - id: smuggler-hints + description: > + Smuggler gives Naia a partial truth — Kael's under work pressure, + it'll pass. Not a lie, but not the truth. Naia is temporarily + reassured but the pattern continues. + effects: + - "naia.behavior_flags += cautiously_reassured" + - "kael.behavior_flags += unaware" + - "smuggler.moral_weight (toward naia) = peripheral" + - id: kael-snaps + description: > + Before the smuggler can intervene, Kael snaps at Naia under + pressure. The argument is public enough to be observed. Devra's + pressure has become visible through personal fallout. + effects: + - "kael.behavior_flags += agitated,public_argument" + - "naia.behavior_flags += hurt,withdrawn" + - "detective observes domestic stress (behavioral signal)" + +resolution_states: + - id: relationship-strained + description: > + Kael and Naia's relationship is visibly strained. The domestic + tension becomes an observable signal for the detective. + - id: temporary-calm + description: > + The immediate crisis passes but the underlying cause remains. + Another confrontation is inevitable. + - id: naia-investigates + description: > + Naia starts looking into Kael's activities independently. She + becomes a potential variable the ring didn't account for.