diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/ticker/the-last-shift.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/ticker/the-last-shift.yaml index c7e251384..91ad0721b 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/ticker/the-last-shift.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/ticker/the-last-shift.yaml @@ -1,6 +1,9 @@ # News ticker headline pool — The Last Shift bar # Meridian Feed (Krenn System local news network) +# 30 lines total | Categories: freight (9), politics (4), infrastructure (5), sports (3), +# commission (5), community (4) — see dual_lens notes on each line # Dual-lens content: each headline reads differently to smuggler vs detective. +# Ticket: #306 | Sprint: 12 | Owner: Mellanie + Miri # v0.1: static background text. v0.2: cycling ticker system. location: the-last-shift @@ -155,3 +158,85 @@ headlines: dual_lens: smuggler: "'Routine assessment.' Is that the detective? Is that why he's here?" detective: "That's my cover story. Or headquarters' way of telling me the clock is running." + + # --- Local Community (4) — added Sprint 12, Mellanie --- + + - id: ticker_021 + text: "SECTOR 3: Sova Station Admin acknowledges ventilation review — timeline 'under discussion'" + category: infrastructure + dual_lens: + smuggler: "Under discussion. Same thing they said last cycle. Seven years of under discussion." + detective: "Deferred maintenance, seven-year backlog, workers frustrated. That's a community with grievances. File that." + + - id: ticker_022 + text: "WORKERS: Cargo Workers' Association calls for review of thirty-minute shift handoff protocols" + category: community + dual_lens: + smuggler: "Workers pushing back on the transition window. If they shorten it, we lose our gap." + detective: "Workers know the window is too short. And they're right. The question is who else knows it." + + - id: ticker_023 + text: "SOVA LOCAL: Missing persons — Vessels Tamm, Sova Transit District, Month 11. Contact Sova liaison." + category: community + dual_lens: + smuggler: "Vessels Tamm. That name — any connection to Naia's family? Don't chase ghosts." + detective: "Tamm. Naia Tamm is the name in the case file as Kael Davan's partner. Related? Flag." + notes: > + Connects to notice board in the-last-shift environmental text (env_bar_003). + Detective's reaction sets up the Naia-Tamm connection thread. + + - id: ticker_024 + text: "HEALTH: Re-embodiment wait times at Sova Clinic — non-emergency cases: 4-6 cycles. Main station for urgent." + category: community + dual_lens: + smuggler: "Four cycles. If something goes wrong on a run, four cycles at the clinic before you're back. Remember that." + detective: "Healthcare routing. Non-urgent cases handled locally, urgent cases moved off-station. Operational detail." + + # --- Lattice Economy (3) — added Sprint 12, Mellanie --- + + - id: ticker_025 + text: "LATTICE: Commission-approved upgrade costs rise — standard lattice enhancement up 18% this cycle" + category: freight + dual_lens: + smuggler: "Eighteen percent. That's why the waiting list for off-book components keeps growing. We're providing a service." + detective: "Price pressure on approved upgrades. Economic driver for the unlicensed market. Motive confirmed." + + - id: ticker_026 + text: "LATTICE COMMISSION: Public access modification registry now mandatory — self-report deadline cycle 20" + category: commission + dual_lens: + smuggler: "Self-report. Right. The people who bought off-book components are definitely filing that form." + detective: "Mandatory registry. Anyone who doesn't file either doesn't have mods or is hiding them. Narrow that list." + + - id: ticker_027 + text: "HEALTHCARE: Medical-grade lattice component recall — batch 44xx — contact nearest clinic for assessment" + category: community + dual_lens: + smuggler: "Batch 44xx. Kael's last shipment was 4471 series components. Are they in that range? Check." + detective: "Batch 44xx recall. Container 4471 in the manifest anomaly. Cross-reference. This could be the thread." + notes: > + High-value dual-lens trigger. Smuggler worries about operational risk; detective spots the + evidence connection. The 44xx range is intentionally ambiguous — might match, might not. + + # --- Krenn System / Setting (2) — added Sprint 12, Mellanie --- + + - id: ticker_028 + text: "VELEN WEATHER: Coastal fog advisories in effect — Sova orbital approach window reduced, gate scheduling adjusted" + category: infrastructure + dual_lens: + smuggler: "Fog on Velen. Gate scheduling adjusted — means transit timing shifts. The window might move." + detective: "Environmental factors affecting gate operations. Adjust surveillance timing accordingly." + + - id: ticker_029 + text: "REACH ECONOMY: Krenn System trade volume up 7% — analysts attribute to 'informal market activity'" + category: freight + dual_lens: + smuggler: "Informal market activity. They know. The whole Reach knows. And still the demand keeps climbing." + detective: "'Informal market.' The analysts see the pattern but can't name it. I can." + + - id: ticker_030 + text: "ASSEMBLY: Severance technology moratorium extended — counter-surveillance devices remain Category 2 restricted" + category: politics + dual_lens: + smuggler: "Moratorium extended. Good. Severance equipment costs keep the Commission from blanketing everything." + detective: "Counter-surveillance devices still legally restricted. Anyone running them is committing a documented infraction." diff --git a/docs/design/character-build-detective.md b/docs/design/character-build-detective.md new file mode 100644 index 000000000..30799bb41 --- /dev/null +++ b/docs/design/character-build-detective.md @@ -0,0 +1,461 @@ +# Character Build: The Detective + +**Ticket:** #181 | **Priority:** Critical | **Sprint:** 12 +**Status:** v0.1 Draft +**Blocked by:** #179 (Character definition schema) +**Blocks:** #182 (Divergent starting knowledge), #183 (Divergent relationships) +**Decisions referenced:** D-005, D-016, D-027, D-028, D-032, D-034, D-035, D-037, D-041, D-053, D-065, D-075 + +--- + +## identity + +```yaml +identity: + canonical_id: "pc:detective" + display_name: "[Player-set name]" + archetype: "detective" + occupation: "Commission Liaison Officer, Manifest Irregularity Investigation" + posting_duration: "3 days (newly arrived)" + faction: "Commission" + lattice_tier: "professional" + description: > + Commission Liaison Officer posted to Sova Transit District three days ago. + Official mandate: routine compliance review. Actual mandate: investigate + manifest irregularities suggesting organized freight smuggling. The distinction + between "official" and "actual" is itself the first lesson about how + Sova works. + + Trained investigator. Professional analytical lattice. Institutional + authority that opens doors and closes conversations. An outsider in a + community that has learned, over forty years of prefab-modular life, + to handle outsiders with polite minimal disclosure. + + Stands to lose: professional credibility (if the case goes cold), Sera + (the investigation, if pressed too hard, could compromise the only + trusted relationship in the district), and the clean institutional + clarity that makes the job feel justified — which the community's + moral complexity is already beginning to erode. +``` + +--- + +## starting_knowledge + +```yaml +starting_knowledge: + confidence_floor: "KnowsOf" + + known_facts: + # Investigation data + - key: "investigation.manifest_discrepancies" + confidence: "KnowsDetails" + source: "institutional" + notes: > + Case file from Commission records. Containers logged but not reconciled + with incoming manifests. Pattern suggests systematic manipulation, not + clerical error. Three clusters of anomalies over the past six months. + + - key: "investigation.freight_pattern" + confidence: "KnowsDetails" + source: "institutional" + notes: > + Anomalies cluster around shift transition windows. Same container series + recurring across discrepant manifests. Pattern analysis flagged this + posting as warranting investigation. + + # Persons of interest (case file, not personal knowledge) + - key: "person.voss_poi" + confidence: "KnowsOf" + source: "institutional" + notes: > + Voss, shift supervisor. Scheduling authority. In position to create the + oversight gaps that explain the manifest anomalies. Name from case file. + Not met yet. + + - key: "person.maret_poi" + confidence: "KnowsOf" + source: "institutional" + notes: > + Maret Korr, freight scheduler. Access to manifest data. Could be source + of the falsification or could be covering for someone else. Name from + case file. + + - key: "person.drin_poi" + confidence: "KnowsOf" + source: "institutional" + notes: > + Drin Rosta, dock inspector. Responsible for container verification. + Failure to flag discrepancies suggests either incompetence or complicity. + Name from case file. + + # Institutional context + - key: "world.previous_liaison" + confidence: "KnowsDetails" + source: "institutional" + notes: > + The previous Commission liaison rotated out 3 months ago. Rotation + was described as routine. The detective's case file notes that the previous + liaison filed no irregularity reports despite the same pattern being + detectable in their tenure. This warrants investigation. + + - key: "world.commission_presence" + confidence: "KnowsDetails" + source: "institutional" + notes: > + Sera Venn, Commission field tech. Not an investigator. Has been on Sova + for 1 year. Pre-existing relationship — same institutional background, + different postings. Reliable. Social anchor in unfamiliar district. + + - key: "world.district_geography" + confidence: "KnowsOf" + source: "institutional" + notes: > + The Terminal (logistics hub), The Last Shift (bar, social nexus), + maintenance corridors (off-books access routes noted in district layout + documentation). Three days in — still orienting to physical space. + + - key: "world.torek_compliance_connection" + confidence: "KnowsOf" + source: "institutional" + notes: > + Torek Lintar is a Commission compliance officer on Sova. Known from + institutional channels. Not a friend, but a professional known name. + + # Sera knowledge + - key: "person.sera_background" + confidence: "KnowsDetails" + source: "direct" + notes: > + Sera Venn: same career path, different posting. Reliable under pressure. + Transferred to Sova after a stressful posting elsewhere. Has been the + district's Commission presence for a year. The detective's one genuinely + friendly face in Sova. + + unknown_facts: + - key: "contraband.ring_exists" + notes: > + Does not know a ring exists. Suspects organized smuggling from the manifest + pattern, but "ring" implies structure, membership, coordination — the + detective doesn't know that yet. + + - key: "contraband.ring_members" + notes: > + Does not know any ring members by their ring membership. Kael Davan + is not in the case file. The smuggler is not in the case file. + + - key: "contraband.cargo_type" + notes: > + Does not know what the cargo is. The manifests show discrepancies; + they don't reveal what's being moved. The "what" is a layer below + the "that something is wrong." + + - key: "person.kael_exit_attempt" + notes: > + Completely unknown. Kael's unauthorized contact and exit attempt are + not visible to any institutional data source. + + - key: "person.sera_unreported_evidence" + notes: > + CRITICAL unknown. Sera has run an unofficial compliance check on Kael's + work patterns and is sitting on unreported evidence. The detective + trusts Sera completely. This gap is the structural basis for THE FRIEND arc. + + - key: "person.naia_confided_in_sera" + notes: > + Naia Tamm's worry about Kael, confided to Sera, is the emotional engine + behind Sera's concealment. The detective doesn't know Naia exists as + anything except a district resident. + + - key: "relationship.ring_membership" + notes: > + Who is in the ring, who is complicit, who is protecting whom. The detective + has names (Voss, Maret, Drin) without understanding the social web that + holds them together. + + - key: "person.smuggler_identity" + notes: > + Does not know the smuggler is in the ring. If the smuggler is in the case + file at all, it's as a name on a shift roster — no significance attached. + + - key: "world.previous_liaison_arranged" + notes: > + The detective wonders whether the previous Commission liaison's rotation + was routine or arranged. This suspicion is in the case file as a note; + it remains unconfirmed. (Canonical answer: arranged. But the detective + doesn't know this yet.) +``` + +--- + +## starting_relationships + +```yaml +starting_relationships: + - target: "npc:sera-venn" + relationship_state: "Friendly" + access_tier: [peer] + trust_level: "trusted" + relationship_type: "friend" + known_attributes: + name: "Sera Venn" + role: "Commission field technician" + faction: "Commission" + notes: > + Pre-existing friend. Same institutional background, different posting. + Transferred to Sova a year ago. Social anchor. The detective's guide + to an unfamiliar place — Sera fills in background on the district, + introduces the detective to regulars. Completely trusted at session start. + + - target: "npc:voss" + relationship_state: "Known" + access_tier: [authority] + trust_level: "uncertain" + relationship_type: "contact" + known_attributes: + name: "Voss" + role: "shift supervisor" + faction: "civilian" + notes: > + Person of interest. Name from case file, scheduling authority. Has + met once for credentials review. Stiffens when the detective enters + the hub. Professional, terse. No warmth. Institutional interaction only. + + - target: "npc:maret-korr" + relationship_state: "Known" + access_tier: [authority] + trust_level: "uncertain" + relationship_type: "contact" + known_attributes: + name: "Maret Korr" + role: "freight scheduler" + faction: "civilian" + notes: > + Person of interest. Manifest access. Has cooperated professionally with + data requests — provided clean set of schedules. Slightly nervous. + Cooperation is compliance, not friendliness. + + - target: "npc:drin" + relationship_state: "Known" + access_tier: [authority] + trust_level: "uncertain" + relationship_type: "contact" + known_attributes: + name: "Drin Rosta" + role: "dock inspector" + faction: "civilian" + notes: > + Person of interest. Responsible for container verification. Has met + once. More evasive than Voss or Maret. The detective notes the evasion + without yet understanding the cause. + + - target: "npc:torek-lintar" + relationship_state: "Known" + access_tier: [public] + trust_level: "uncertain" + relationship_type: "colleague" + known_attributes: + name: "Torek Lintar" + role: "Commission compliance officer" + faction: "Commission" + notes: > + Commission compliance officer on Sova — professional known name, not a + friend. Has seen him at the bar with Sera. Slightly off in a way the + detective can't yet articulate. + + - target: "npc:lera-sessik" + relationship_state: "Unknown" + access_tier: [public] + trust_level: "uncertain" + relationship_type: null + known_attributes: + name: "Lera Sessik" + role: "bar owner" + faction: null + notes: > + Sera mentioned The Last Shift. The detective has visited once or twice. + Lera is polite, guarded, watching. Not hostile. Not warm. + + - target: "npc:kael-davan" + relationship_state: "Unknown" + access_tier: [public] + trust_level: "uncertain" + relationship_type: null + known_attributes: + name: null + role: "dock worker" + faction: null + notes: > + Unknown at session start. Name might appear on a shift roster without + significance. No personal knowledge. No case file entry. The detective + has no reason to flag Kael — yet. + + - target: "npc:naia-tamm" + relationship_state: "Unknown" + access_tier: [public] + trust_level: "uncertain" + relationship_type: null + known_attributes: + name: null + role: null + faction: null + notes: "No connection at session start. Exists as a district resident without individual identity." + + - target: "npc:pc-smuggler" + relationship_state: "Unknown" + access_tier: [public] + trust_level: "uncertain" + relationship_type: null + known_attributes: + name: null + role: "dock worker" + faction: null + notes: > + One of many dock workers. No individual significance at session start. + Knowledge accumulates through observation and tell accumulation. + May shift to PersonOfInterest if tells compound and manifest + discrepancy connection is made. +``` + +--- + +## access_permissions + +```yaml +access_permissions: + can_unlock: + - tier: "public" + condition: "Always available" + max_npcs: "unlimited" + + - tier: "authority" + condition: "RelationshipState is Unknown, Known, or PersonOfInterest — credential presentation" + max_npcs: "unlimited for institutional NPCs; does not work with hostile or fully closed NPCs" + + - tier: "peer" + condition: "RelationshipState reaches Friendly" + max_npcs: "limited — Sera at session start; others require sustained positive interaction" + + structurally_locked: + - tier: "insider" + reason: > + The detective can never access insider-tier ring dialogue. Not because + institutional authority is insufficient — authority and insider are + different axes. Insider requires social belonging within the ring network. + The ring recognizes the detective as Commission. The ring closes, not opens, + when institutional authority is applied. Pressing harder does not unlock + insider content; it triggers defensive behavior and hostile tone. This is + architecturally fundamental to the two-keyhole design. + + - tier: "authority (failed)" + reason: > + Authority access fails when RelationshipState is Hostile. Once an NPC + has turned against the detective's investigation, credential presentation + produces refusal or evasion, not compliance. The detective cannot + authority-tier their way through a hostile source. +``` + +--- + +## skills + +```yaml +skills: + lattice_tier: "professional" + movement_default: "walk" # D-053 MovementProfile + inventory_slots: 2 # D-065 + evidence_display: "case_file" + + capability_flags: + - "authority_credentials" # Badge/ID; unlocks authority tier with Unknown/Known NPCs + - "manifest_access" # Can formally request freight manifests from institutional NPCs + - "analytical_lattice" # Pattern recognition overlay; flags behavioral anomalies at Careful stance + + starting_items: + - item_id: "detective_case_file" + description: "Institutional case file: manifest discrepancy analysis, persons of interest, previous liaison notes." + leverage_type: "proof" + notes: > + The detective's starting information in physical form. Can be referenced + in dialogue to trigger authority-tier responses — "according to case file X." + Contains the manifest discrepancy data that links to Kael's work patterns, + though the detective doesn't know this yet. + + - item_id: "detective_commission_credentials" + description: "Commission identification and liaison officer authorization." + leverage_type: "access" + notes: > + Credential presentation triggers authority tier access with Unknown/Known NPCs. + Does not work with ring-network NPCs in insider mode — they recognize + Commission credentials as a threat, not an access grant. Carried on person; + visible as a status marker to any NPC with institutional awareness. +``` + +--- + +## presentation + +```yaml +presentation: + monologue_pool: "detective" + evidence_display: "case_file" + + voice_register: + sentence_length: "complete sentences, occasional fragments for emphasis" + vocabulary: "institutional layer over plain speech — investigative habit without jargon" + emotional_mode: "analysis-first, personal second" + relationship_mode: "surname-first for targets, first-name for trusted" + + emotional_baseline: + state: "professional-cautious" + description: > + Trained to observe, analyze, withhold judgment until evidence accumulates. + But also human — isolated in an unfamiliar community, reliant on Sera for + social grounding, aware that non-cooperation is the district default. + + The analytical habit runs in the background like an operating system. + Counts things. Tracks frequencies. Flags inconsistencies. Internal bookkeeping + is automatic: "filing it," "noted," "coincidence?" The institutional training + doesn't turn off; sometimes the human overrides it. When it does, the crack + in the professional surface IS the emotional payload. + + Believes in the work. Smuggling isn't victimless — unlicensed lattice + components can cause neural degradation, medical replacements diverted from + Syndic supply chains mean someone else doesn't get what they need. The + investigation is justified. But the moral clarity is starting to erode — + the community is beginning to read as more complex than "crime scene." + + opening_monologue: + lines: + - "Sova Transit District. Third day on station. The briefing said routine compliance review." + - "The briefing is always wrong about something." + - "Manifest discrepancies clustered around the freight hub. Start there. Watch the shift change." + - "Good to know Sera's here. At least someone in this district speaks my language." + emotional_payload: > + Isolation, professional caution, guarded optimism about Sera. The detective + is an outsider. The district doesn't want them here. The player should feel + the gap between institutional authority and social belonging. +``` + +--- + +## Authoring Notes + +**What makes the detective's experience distinct:** + +- The district is a CRIME SCENE. Every NPC is a potential witness, informant, or subject. The detective categorizes before connecting. Kael is "dock worker, Davan, K." before he's Kael. The shift to first names — if it happens — is itself a relationship marker. +- The monologue is ANALYTICAL and complete-sentence. Counts things. Notices deviations. The emotional register leaks through the analytical frame rather than leading it. +- The emotional journey of the vertical slice moves from professional isolation to specific, personal betrayal — but the betrayal is different: not "Kael lied to me," but "Sera, who I trusted completely, is compromised by something she did to protect someone I've never met." + +**What the detective's authority access buys:** Conversations happen faster. NPCs answer direct questions. But answers are framed for compliance, not candor. The detective gets facts from people who don't want to give them — which means incomplete facts, deflected facts, facts that look complete but aren't. Authority access is a key that opens the door. It doesn't make what's inside visible. + +**Voice anchors (mandatory reference for all detective monologue):** +1. *"Logistics hub. Standard prefab, heavy foot traffic. Let's see what the shift change tells me."* +2. *"That's the third time. Sera leaves when Torek arrives. Three different excuses, same result. That's not coincidence."* +3. *"Good to see Sera. She always was the reliable one. At least someone in this district speaks my language."* +4. *"Same booth. Same warm smile. Same offer to buy me a drink. ...Everything except whatever she's not saying."* +5. *"Grain spirit and low conversation. Only place in this district that doesn't smell like freight lubricant."* + +--- + +*Ticket #181 — Detective character build. v0.1 scope.* diff --git a/docs/design/character-build-smuggler.md b/docs/design/character-build-smuggler.md new file mode 100644 index 000000000..cfb26d4d4 --- /dev/null +++ b/docs/design/character-build-smuggler.md @@ -0,0 +1,490 @@ +# Character Build: The Smuggler + +**Ticket:** #180 | **Priority:** Critical | **Sprint:** 12 +**Status:** v0.1 Draft +**Blocked by:** #179 (Character definition schema) +**Blocks:** #182 (Divergent starting knowledge), #183 (Divergent relationships) +**Decisions referenced:** D-005, D-016, D-027, D-028, D-032, D-034, D-035, D-037, D-041, D-053, D-065 + +--- + +## identity + +```yaml +identity: + canonical_id: "pc:smuggler" + display_name: "[Player-set name]" + archetype: "smuggler" + occupation: "Freight Logistics Operator, Sova Transit District" + posting_duration: "~3 years (settled resident of Sova)" + faction: null # No institutional affiliation. Informal: ring member. + lattice_tier: "civilian" + description: > + Logistics worker at Sova Terminal Freight Hub. Three years on the station. + This is home in the way a place becomes home when you've stopped thinking + about leaving — comfortable enough to feel permanent, not comfortable enough + to feel easy. The ring started as extra income. It stayed because the people + in it became the people worth protecting. + + Manages cargo routing. Knows the shift schedules, the corridor access windows, + the containers that move in ways they shouldn't. Has lived inside the operation + long enough that the criminal mechanics and the legitimate mechanics feel + the same — two halves of a single job. The distinction between "dock worker" + and "ring operative" dissolved somewhere around the 18-month mark. + + Stands to lose: freedom (Commission arrest), the people (Kael, Lera, the + whole network), and the only version of stability they've built. +``` + +--- + +## starting_knowledge + +```yaml +starting_knowledge: + confidence_floor: "KnowsOf" + + known_facts: + # Ring operational knowledge + - key: "contraband.ring_exists" + confidence: "KnowsEverything" + source: "direct" + notes: "Member. Not a surprise. Not abstract. The daily operational reality." + + - key: "contraband.lattice_components" + confidence: "KnowsDetails" + source: "direct" + notes: > + Handles the containers. Knows the cargo is unlicensed lattice components + and medical-grade neural replacements. Doesn't look too closely at the + sealed containers — enough to know, not enough to be haunted by specifics. + + - key: "contraband.supply_chain_partial" + confidence: "KnowsOf" + source: "secondhand" + notes: > + Knows cargo comes from off-station contact (Sabel). Does not know the + full upstream supply chain or Syndic connections. Deliberately incurious. + + - key: "contraband.ring_members" + confidence: "KnowsDetails" + source: "direct" + notes: > + Nils (coordinator), Kael (closest colleague), Voss (shift supervisor, takes + a cut), Renn (courier), Devra (handler, mostly off-station). Resha and other + minor members known by face if not always by name. + + - key: "contraband.operation_schedule" + confidence: "KnowsEverything" + source: "direct" + notes: > + Shift transitions create 20-minute oversight gaps. Runs know during these + windows. Freight bay → service corridor → temp storage → bar back room. + Has run this route dozens of times. + + # Location knowledge + - key: "location.corridor_b7_access" + confidence: "KnowsEverything" + source: "direct" + notes: "Knows B-7 is restricted. Knows how to enter without triggering flags." + + - key: "location.smuggling_route" + confidence: "KnowsEverything" + source: "direct" + notes: "Full route map. Knows which corridors have surveillance gaps." + + - key: "location.dead_drop_location" + confidence: "KnowsDetails" + source: "direct" + notes: "Temp storage bay 4 is the handoff point. Container 4471 is a recurring flag." + + - key: "location.sova_district_full" + confidence: "KnowsEverything" + source: "direct" + notes: "Three years here. Knows every social site, shortcut, and NPC face." + + # Relationship knowledge + - key: "relationship.ring_membership_full" + confidence: "KnowsEverything" + source: "direct" + notes: "Knows who's in. Knows who knows. The map of the network is second nature." + + - key: "relationship.voss_compromised" + confidence: "KnowsDetails" + source: "direct" + notes: "Voss takes a cut. The scheduling cover is explicit. Not a theory." + + - key: "relationship.drin_compromised" + confidence: "KnowsDetails" + source: "direct" + notes: "Dock inspector who looks the other way. Known through operational familiarity." + + - key: "relationship.naia_connection" + confidence: "KnowsOf" + source: "secondhand" + notes: > + Knows Naia as Kael's partner. Occasional bar encounters. Likes her. + Doesn't know Naia suspects something is wrong with Kael. + + # World knowledge + - key: "world.shift_schedule" + confidence: "KnowsEverything" + source: "direct" + notes: "Knows the schedule the way you know your own heartbeat." + + - key: "world.commission_presence_minimal" + confidence: "KnowsDetails" + source: "direct" + notes: > + Commission presence on Sova is Sera Venn (field tech) plus occasional + compliance visits. Not a heavy institutional presence. The ring has operated + in this environment comfortably. + + - key: "world.torek_spending" + confidence: "KnowsOf" + source: "observation" + notes: > + Torek's visible spending has caught the smuggler's attention as a + potential security risk. Not confirmed dangerous. A worry. + + unknown_facts: + - key: "investigation.detective_identity" + notes: > + Does not know the detective exists as an investigator. A Commission liaison + was mentioned (ring warning from Kael or Voss), but not yet identified + as a specific investigative threat. + + - key: "person.kael_exit_attempt" + notes: > + CRITICAL unknown. Kael is trying to exit the ring via an unauthorized + external contact. The smuggler trusts Kael completely. This gap is the + structural basis for THE FRIEND arc. + + - key: "person.sera_unreported_evidence" + notes: > + Sera Venn has run an unofficial compliance check on Kael's work patterns + and found manifest discrepancies. She has not reported them. The smuggler + knows Sera only as "Commission field tech — stay away." + + - key: "person.naia_confided_in_sera" + notes: > + Naia has shared her worries about Kael with Sera. This connection — Naia + to Sera to suppressed evidence — is entirely invisible to the smuggler. + + - key: "contraband.supply_chain_full" + notes: > + The full Syndic connection and upstream supply chain beyond Sabel. + Deliberately kept out of operational knowledge by Nils. + + - key: "investigation.manifest_discrepancies_flagged" + notes: > + The detective's case file includes specific manifest discrepancy data. + The smuggler doesn't know the investigation is that far along. +``` + +--- + +## starting_relationships + +```yaml +starting_relationships: + - target: "npc:kael-davan" + relationship_state: "Friendly" + access_tier: [insider, peer] + trust_level: "trusted" + relationship_type: "friend" + known_attributes: + name: "Kael Davan" + role: "dock worker, ring member" + faction: "ring" + notes: > + Closest colleague. Two years of shared risk. Works together on both + legitimate shifts and ring operations. Lunch every shift, drinks after. + Greet by first name. The smuggler knows Kael's personal tell + (looks left when lying) — this detail is critical for Phase 4. + + - target: "npc:voss" + relationship_state: "Known" + access_tier: [insider, peer] + trust_level: "reliable" + relationship_type: "superior" + known_attributes: + name: "Voss" + role: "shift supervisor, ring-aware" + faction: "ring (passive)" + notes: > + Professional relationship. Low warmth. Voss takes a cut — the smuggler + knows this. Trusts Voss to provide scheduling cover. Would not trust + Voss with anything personal. + + - target: "npc:nils-davan" + relationship_state: "Known" + access_tier: [insider] + trust_level: "reliable" + relationship_type: "superior" + known_attributes: + name: "Nils Davan" + role: "ring coordinator" + faction: "ring" + notes: > + Kael's brother. Ring coordinator. The smuggler receives instructions via + Devra, rarely directly. Respects Nils's authority, wary of his escalating + appetite for volume. Knows Nils is Kael's sibling — personal dimension. + + - target: "npc:lera-sessik" + relationship_state: "Friendly" + access_tier: [insider, peer] + trust_level: "trusted" + relationship_type: "friend" + known_attributes: + name: "Lera Sessik" + role: "bar owner, ring-aware" + faction: "ring (peripheral)" + notes: > + Regular at The Last Shift for two years. Lera saves the smuggler's usual + seat. Warm, uncomplicated relationship within bar context. Knows Lera is + ring-aware but doesn't press her into operational details. + + - target: "npc:renn" + relationship_state: "Known" + access_tier: [insider] + trust_level: "reliable" + relationship_type: "colleague" + known_attributes: + name: "Renn" + role: "courier, ring member" + faction: "ring" + notes: "Operational relationship. Knows Renn's routes. Professional, not warm." + + - target: "npc:devra" + relationship_state: "Known" + access_tier: [insider] + trust_level: "reliable" + relationship_type: "colleague" + known_attributes: + name: "Devra" + role: "external contacts manager" + faction: "ring" + notes: "Channel for instructions from Nils. Operational distance maintained." + + - target: "npc:maret-korr" + relationship_state: "Known" + access_tier: [peer, insider] + trust_level: "reliable" + relationship_type: "colleague" + known_attributes: + name: "Maret Korr" + role: "freight scheduler" + faction: "ring (aware)" + notes: > + Hub colleague. Handles scheduling. The smuggler knows Maret is aware of the + operation through her scheduling access — part of the cover structure. + + - target: "npc:drin" + relationship_state: "Known" + access_tier: [insider] + trust_level: "reliable" + relationship_type: "colleague" + known_attributes: + name: "Drin Rosta" + role: "dock inspector, compromised" + faction: "ring (passive)" + notes: "Looks the other way during container inspections. Known asset." + + - target: "npc:naia-tamm" + relationship_state: "Known" + access_tier: [peer] + trust_level: "reliable" + relationship_type: "colleague" + known_attributes: + name: "Naia Tamm" + role: "Kael's partner, teacher" + faction: null + notes: > + Known through Kael. Occasional bar encounters. Genuinely likes her. Would + not want Naia to know about the ring — protective instinct. + + - target: "npc:torek-lintar" + relationship_state: "Known" + access_tier: [peer] + trust_level: "uncertain" + relationship_type: "colleague" + known_attributes: + name: "Torek Lintar" + role: "bar regular, ring-adjacent" + faction: "ring (peripheral)" + notes: > + Known from bar. Spending is conspicuous — new clothes, rounds for + strangers, better food than his salary explains. The smuggler keeps + distance. A security concern without being a confirmed problem. + + - target: "npc:sera-venn" + relationship_state: "Known" + access_tier: [public] + trust_level: "uncertain" + relationship_type: "colleague" + known_attributes: + name: "Sera Venn" + role: "Commission field technician" + faction: "Commission" + notes: > + Recognized as Commission. Keeps distance reflexively. No personal + knowledge, no social interaction. Categorized as institutional risk, + not personal threat. + + - target: "npc:pc-detective" + relationship_state: "Unknown" + access_tier: [public] + trust_level: "uncertain" + relationship_type: null + known_attributes: + name: null + role: "Commission liaison (warned by ring)" + faction: "Commission" + notes: > + May have been warned about a new Commission presence (via Kael or Voss). + Does not know name, face, or specific investigative mandate. Risk + assessment: moderate. Protocol: keep head down, act normal. +``` + +--- + +## access_permissions + +```yaml +access_permissions: + can_unlock: + - tier: "public" + condition: "Always available" + max_npcs: "unlimited" + + - tier: "peer" + condition: "RelationshipState reaches Known or Friendly" + max_npcs: "unlimited" + + - tier: "insider" + condition: "Ring membership (pre-existing) or explicit trust invitation" + max_npcs: "ring network NPCs from session start; others via play" + + structurally_locked: + - tier: "authority" + reason: > + The smuggler has no institutional credentials. Cannot flash a badge. + Cannot invoke institutional leverage. Even if the smuggler confronted + an NPC with physical proof, the confrontation operates in the peer/ + insider register, not the authority register. This is the architectural + asymmetry with the detective. + + - tier: "insider (non-ring)" + reason: > + Insider access is specific to the ring network. The smuggler cannot + unlock insider access with NPCs outside the ring's trust structure — + Lera's inner-circle, the Commission's internal channels, institutional + back-channels. The smuggler's world is bounded by the ring's social web. +``` + +--- + +## skills + +```yaml +skills: + lattice_tier: "civilian" + movement_default: "walk" # D-053 MovementProfile + inventory_slots: 4 # D-065 (3 specific items + 1 spare) + evidence_display: "personal_notebook" + + capability_flags: + - "ring_membership" # Treated as insider by ring NPCs from session start + - "ring_routes" # Knows smuggling corridors and timing windows + - "cargo_handling_cert" # Can interact with freight systems without security flags + - "shift_schedule_mastery" # Full knowledge of shift transition windows + + starting_items: + - item_id: "smuggler_manifest_copy" + description: "Copy of a falsified manifest showing cargo discrepancy. Proves the ring's operational method." + leverage_type: "proof" + notes: > + Physical proof of cargo routing manipulation. Not useful as leverage + against ring members (they know). Potentially useful if the smuggler + needs to prove involvement to the detective — or use as leverage + against someone outside the ring. + + - item_id: "smuggler_corridor_token" + description: "Maintenance corridor access token (Corridor B-7). Standard-issue for ring members." + leverage_type: "access" + notes: > + Physical proof of ring membership. If scanned by security, it reads as + an irregularly issued access credential — not automatically incriminating, + but suspicious. The detective finding this would be significant. + + - item_id: "smuggler_comm_log" + description: "Personal comm log with coded operational messages (shift timing, container IDs)." + leverage_type: "leverage" + notes: > + Recorded coded messages between the smuggler and Kael. If decrypted, it + maps the operation. Carried because the smuggler hasn't thought to delete it. + A liability they don't know is a liability. +``` + +--- + +## presentation + +```yaml +presentation: + monologue_pool: "smuggler" + evidence_display: "personal_notebook" + + voice_register: + sentence_length: "fragments" + vocabulary: "concrete/sensory — trade jargon without explanation" + emotional_mode: "feeling-first, analysis second" + relationship_mode: "first-name/relational" + + emotional_baseline: + state: "comfortable-tense" + description: > + Not happy, not miserable. The smuggler is managing a life with two faces + and has gotten good at it. The money helps. The team is solid. The risk is + real but felt manageable for two years. Comfort comes from knowing the + people, the routes, the rhythms. Tension lives in the background — ambient, + not acute. The day is better when everything goes as planned. The day turns + when something doesn't. + + Protective by default. Thinks about people before systems. First instinct + when something looks wrong: who does this affect, and what can be done for + them? Institutions are backdrop. People are the world. + + opening_monologue: + lines: + - "Morning shift. Recycled air and cargo lubricant. Home sweet home." + - "Kael's already at the dock. Good. The day's better when he's on shift." + - "Transition window opens in fifty minutes. Standard run — nothing complicated." + - "Just keep it clean. Keep it quiet. Another day." + emotional_payload: > + Comfort, routine, protectiveness. The smuggler is at home. The world is + manageable. Operational awareness runs in the background like breathing. + The player should feel settled before the first crack appears. +``` + +--- + +## Authoring Notes + +**What makes the smuggler's experience distinct:** + +- The ring is HOME. Every NPC in the ring network is a person they eat lunch with, drink with, cover for. The investigation, when it comes, doesn't feel like "a crime is being exposed" — it feels like "my people are in danger." +- The monologue is TERSE and relational. Two-word assessments. "Kael's good." "Voss is tense." No analysis of systems. Feeling first, named in physical terms. +- The emotional journey of the vertical slice moves from settled comfort to specific, personal betrayal. Not "the ring is threatened." "KAEL is lying to me." + +**Voice anchors (mandatory reference for all smuggler monologue):** +1. *"Kael's already at the dock. Good. The day's better when he's on shift."* +2. *"Shift transition in thirty minutes. If Voss kept the schedule thin, the route's clear."* +3. *"Kael keeps checking his lattice. Waiting for a message? Not like him to be jumpy."* +4. *"He looked left. He always looks left when he's making something up. Two years I've known that tell. Kael is lying to me."* +5. *"Morning shift. Recycled air and cargo lubricant. Home sweet home."* + +--- + +*Ticket #180 — Smuggler character build. v0.1 scope.* diff --git a/docs/design/character-definition-schema.md b/docs/design/character-definition-schema.md new file mode 100644 index 000000000..99c798b0a --- /dev/null +++ b/docs/design/character-definition-schema.md @@ -0,0 +1,245 @@ +# Character Definition Schema + +**Ticket:** #179 | **Priority:** Critical | **Sprint:** 12 +**Status:** v0.1 Draft +**Blocks:** #180 (Smuggler character build), #181 (Detective character build) +**Decisions referenced:** D-005 (single character, asymmetric information), D-016 (internal monologue), D-027 (vertical slice), D-028 (dialogue layers), D-032 (separate monologue pools), D-034 (THE FRIEND), D-035 (tag taxonomy), D-041 (knowledge graph), D-065 (smuggler inventory) + +--- + +## 1. Purpose + +This document defines the canonical schema for a playable character in v0.1. A playable character is **not just a perspective** — it is a complete starting state that determines what the player sees, who they know, what they understand, and what they can do. Every field in this schema has downstream content implications. + +Two characters share the same world. Two different schemas produce two different games. + +--- + +## 2. Schema Overview + +A playable character definition has six top-level sections: + +| Section | Purpose | +|---------|---------| +| `identity` | Who this character is in the world | +| `starting_knowledge` | What the character knows at session start (KG seed) | +| `starting_relationships` | Pre-existing relationships and their initial state | +| `access_permissions` | Which dialogue tiers are available at session start | +| `skills` | Capability flags affecting gameplay options | +| `presentation` | Voice, monologue register, and diegetic evidence display | + +--- + +## 3. Identity + +```yaml +identity: + canonical_id: "pc:{slug}" # e.g., "pc:smuggler", "pc:detective" + display_name: "{Name}" # Player-visible name (stub until #180/#181) + archetype: "{archetype}" # "smuggler" | "detective" + occupation: "{occupation}" # Diegetic job title + posting_duration: "{duration}" # How long they've been in Sova Transit District + faction: "{faction}" # Institutional affiliation if any + lattice_tier: "{tier}" # "civilian" | "professional" | "investigative" + description: > + 1-2 paragraph description of who this character is in the world, from + a fictional universe perspective — not mechanical. Establishes emotional + baseline, social position, and what they stand to lose. +``` + +**Field notes:** + +- `archetype` is used internally by the engine for monologue pool selection (D-032 hard partition). It is NOT exposed in the UI. Character feels like a person, not a game mechanic. +- `lattice_tier` determines which perception overlays are available (D-017). Civilian: no enhanced perception. Professional: diagnostic tools, analytical overlays. Investigative: full analytical suite. +- `posting_duration` affects which starting knowledge entries are plausible. A character who arrived 3 days ago cannot know the bar regulars by name. + +--- + +## 4. Starting Knowledge + +The starting knowledge section defines the Knowledge Graph seed (D-041) — the fact-set the character enters the session with. Facts not listed here are genuinely unknown at session start. + +```yaml +starting_knowledge: + confidence_floor: "{tier}" # Minimum confidence level; see D-041 + known_facts: + - key: "{fact.key}" # Namespaced fact key (e.g., "contraband.ring_exists") + confidence: "{tier}" # KnowsOf | KnowsDetails | KnowsEverything + source: "{source}" # "direct" | "secondhand" | "institutional" | "rumor" + notes: > + Optional. Authoring note on how the character holds this knowledge. + unknown_facts: + - key: "{fact.key}" + notes: > + Why this gap exists — what would they need to do to discover it? +``` + +**Fact key namespaces:** + +| Namespace | Covers | +|-----------|--------| +| `contraband.*` | Ring existence, cargo types, supply chain, operational methods | +| `location.*` | Specific places, access routes, surveillance gaps | +| `investigation.*` | Manifest discrepancies, evidence, case file data | +| `relationship.*` | Who knows whom, trust levels, ring membership | +| `world.*` | Station geography, shift schedules, institutional structures | +| `person.*` | Specific facts about named individuals | + +**Critical rule:** The unknown_facts section is as important as known_facts. It defines what the character CANNOT react to at session start and bounds what monologue triggers are legal. + +--- + +## 5. Starting Relationships + +Pre-existing relationships that determine initial RelationshipState (D-075) and AccessTier for every named NPC in the district. NPCs not listed here start at `Unknown` / `public` access. + +```yaml +starting_relationships: + - target: "npc:{canonical_id}" + relationship_state: "{state}" # Unknown | Known | Friendly | PersonOfInterest | Hostile + access_tier: ["{tiers}"] # public | peer | insider | authority | hostile + trust_level: "{level}" # uncertain | reliable | trusted | hostile + relationship_type: "{type}" # colleague | friend | superior | contact | adversary + known_attributes: + name: "{name}" # Whether the character knows the NPC's name + role: "{role}" # What role the character assigns to this NPC + faction: "{faction}" # Whether the character knows the NPC's affiliation + notes: > + Short description of the nature of this relationship and how it was established. +``` + +**Relationship state → access tier mapping (default):** + +| RelationshipState | Default Access Tier | Override possible? | +|-------------------|--------------------|--------------------| +| Unknown | public | Yes (authority overrides via badge/credentials) | +| Known | public, peer | Yes | +| Friendly | peer, insider | No insider without explicit history | +| PersonOfInterest | authority (detective) | Yes | +| Hostile | hostile | No | + +**Character-specific overrides:** The smuggler has insider access to ring-member NPCs from session start (shared criminal history). The detective has authority access to institutional NPCs from session start (institutional credentials). These overrides are specified per-relationship, not as a global archetype flag (D-075). + +--- + +## 6. Access Permissions + +Global access tier capabilities at session start — what the character can unlock through gameplay versus what is structurally inaccessible. + +```yaml +access_permissions: + can_unlock: + - tier: "{tier}" + condition: "{condition}" # When this tier becomes accessible + max_npcs: "{n | unlimited}" # How many NPCs can reach this tier + structurally_locked: + - tier: "{tier}" + reason: > + Why this tier is never accessible to this character across the + entire v0.1 vertical slice. +``` + +**v0.1 constraints:** + +- **Smuggler** can unlock: public (all), peer (Known→Friendly), insider (ring-member NPCs from start; others locked). Cannot unlock: authority (no institutional credentials). +- **Detective** can unlock: public (all), authority (any Unknown/Known NPC via credentials), peer (Friendly NPCs only — currently Sera at session start). Cannot unlock: insider (ring dialogue never becomes available, even with investigation progress — the ring locks tighter, not looser, when the detective gets close). + +This asymmetry is structural, not a content choice. It defines the two-keyhole architecture (D-027). + +--- + +## 7. Skills + +Capability flags that affect which game verbs are available and how gameplay systems respond. + +```yaml +skills: + lattice_tier: "{tier}" # Copied from identity; determines perception modes (D-017) + movement_default: "{stance}" # Default stance from D-053 MovementProfile + inventory_slots: {n} # Physical inventory capacity (D-065) + evidence_display: "{format}" # "case_file" | "personal_notebook" (D-065) + capability_flags: + - "{flag}" # e.g., "manifest_access", "authority_credentials", "ring_routes" + starting_items: + - item_id: "{id}" + description: "{description}" + leverage_type: "{type}" # "proof" | "access" | "leverage" + notes: > + What this item proves, enables, or demonstrates. +``` + +**Capability flags vocabulary:** + +| Flag | Effect | +|------|--------| +| `manifest_access` | Can request freight manifests from institutional NPCs | +| `authority_credentials` | Badge/identification; unlocks authority tier with Unknown/Known NPCs | +| `ring_routes` | Knows smuggling corridors and timing windows | +| `ring_membership` | Treated as insider by ring-member NPCs from session start | +| `analytical_lattice` | Pattern recognition overlay; flags behavioral anomalies at Careful stance | +| `cargo_handling_cert` | Can interact with freight systems without triggering security flags | + +--- + +## 8. Presentation + +How this character's internal voice, diegetic evidence display, and monologue pool are configured. + +```yaml +presentation: + monologue_pool: "{archetype}" # Hard partition per D-032 ("smuggler" | "detective") + evidence_display: "{format}" # Inherited from skills; documented here for content authors + voice_register: + sentence_length: "{pattern}" # "fragments" | "complete" | "mixed" + vocabulary: "{style}" # "concrete/sensory" | "institutional/analytical" + emotional_mode: "{mode}" # "feeling-first" | "analysis-first" + relationship_mode: "{mode}" # "first-name/relational" | "surname-first/categorical" + emotional_baseline: + state: "{state}" # One-word summary of starting emotional state + description: > + 3-5 sentences on the character's psychological starting position. This + is the foundation that monologue lines build from. Lines that contradict + this baseline are wrong. + opening_monologue: + lines: + - "{line}" # 3-5 authored lines; see D-039 wow moment #1 + emotional_payload: > + What the player should feel in the first 60 seconds. +``` + +**Voice register is non-negotiable.** The smuggler thinks in fragments. The detective thinks in complete sentences. The moment an author writes a complete-sentence analysis for the smuggler or a terse fragment for the detective, they've broken the dual-lens contract. The voice register fields in this schema exist so downstream authors never have to re-read the authoring guide — the character build IS the authoring guide. + +--- + +## 9. Schema Validation Rules + +Before finalizing a character build, validate against these rules: + +| Rule | Check | +|------|-------| +| **Knowledge symmetry** | For every `known_fact` about an NPC, that NPC file must have a corresponding `known_attributes` entry in the character's relationship | +| **Access tier consistency** | No `insider` access without `ring_membership` or equivalent history | +| **Monologue pool** | All authored monologue lines tagged with this character's `archetype` (hard partition) | +| **Unknown facts are real** | Every fact in `unknown_facts` must NOT appear in any authored monologue line at session start | +| **Opening monologue** | Opening lines must NOT reference facts the character doesn't yet know | +| **Inventory items** | All starting items must have corresponding world entities in content files | +| **Emotional baseline** | Opening monologue lines must match the character's `emotional_baseline.state` | + +--- + +## 10. Cross-Reference: Downstream Documents + +| Document | How This Schema Feeds It | +|----------|------------------------| +| `character-build-smuggler.md` (#180) | Full instantiation of this schema for the smuggler | +| `character-build-detective.md` (#181) | Full instantiation of this schema for the detective | +| `divergent-starting-knowledge.md` (#182) | Comparison table derived from both builds' `starting_knowledge` sections | +| `divergent-relationships.md` (#183) | Comparison table derived from both builds' `starting_relationships` sections | +| `npcs/pc-smuggler.yaml` | NPC mode representation when detective is the active player | +| `npcs/pc-detective.yaml` | NPC mode representation when smuggler is the active player | +| Content packs (#190, #191, #192) | Access tier decisions in this schema determine which content each character sees | +| Opening hooks (#299, #300) | Opening monologue section provides the first lines | + +--- + +*Ticket #179 — Character definition schema. v0.1 scope. Blocks #180, #181.* diff --git a/docs/design/detective-chain-of-command.md b/docs/design/detective-chain-of-command.md new file mode 100644 index 000000000..71b36d950 --- /dev/null +++ b/docs/design/detective-chain-of-command.md @@ -0,0 +1,162 @@ +# Detective: Institutional Chain of Command + +**Ticket:** #322 | **Priority:** High | **Sprint:** 12 +**Status:** v0.1 Draft +**Owners:** Paula (narrative arc), Miri (setting/institutional context) +**Decisions referenced:** D-005, D-027, D-037, D-041 + +--- + +## 1. Purpose + +The detective is not a freelance investigator. They are a Commission officer, which means someone assigned them here, someone defined their mandate, someone is waiting for reports, and someone may have an interest in how this investigation concludes — not all of them aligned. + +The institutional chain of command is not just background. It determines: +- **What the detective is officially permitted to do** (arrest authority, warrant scope, search powers) +- **What they're NOT supposed to do** (exceed mandate, go outside channels, use extra-institutional leverage) +- **Who benefits if the investigation succeeds** — and who doesn't +- **The political weight of the previous liaison's rotation** — which may not have been routine + +This document establishes the detective's institutional world. It does not need to be fully visible to the player in v0.1 — it lives in the detective's case file, in their monologue, in what institutional NPCs say when authority-tier access opens. But it must be consistent. + +--- + +## 2. The Commission — Brief Institutional Context + +The Commission (Intersolar Commission) is the primary regulatory body governing freight transit, customs enforcement, and neural lattice certification across the Settled Reach. It is not a police force. It operates through: +- **Compliance review** — routine audits of freight hubs, manifest reconciliation +- **Liaison officers** — semi-permanent postings to transit hubs; advisory and investigative authority +- **Field technicians** — technical support, equipment maintenance, passive monitoring (Sera Venn's role) +- **Enforcement officers** — arrest authority; called in from sector headquarters for formal investigations + +The detective's posting as "Commission Liaison Officer" sits between compliance and enforcement. They have investigative authority — enough to request manifests, interview persons of interest, and flag suspects — but formal arrest and search warrant authority requires escalation to sector headquarters. + +**This matters for the detective's v0.1 situation:** They can investigate. They cannot arrest without authorization from above. If they find evidence of a smuggling ring, they need to report it up the chain before taking action — and that creates a window of political exposure. + +--- + +## 3. The Formal Chain + +### Level 1: The Detective (On-Station) +**Title:** Commission Liaison Officer, Sova Transit District +**Mandate (official):** Routine compliance review — manifest reconciliation, scheduling compliance, standard freight hub audit. +**Mandate (actual):** Investigate manifest irregularities suggesting organized smuggling. Identify structure, membership, and supply chain. Report to Sector Oversight with arrest recommendations. +**Reporting to:** Sector Liaison Coordinator, Commission Sector 7 Headquarters (off-station, a span-gate transit away) + +### Level 2: Sector Liaison Coordinator — Renna Veth +**Title:** Liaison Coordinator, Commission Sector 7 +**Who she is:** Career Commission officer. Mid-level administrator with 20 years of routine compliance work and two serious investigations to her name. Professional, risk-averse. Not corrupt — but also not courageous. Wants the investigation to produce results without embarrassing the Commission or producing a political fight she didn't expect. +**Her interest in this investigation:** Wants it resolved cleanly. A successful arrest closes a compliance gap in her sector metrics. A failed investigation — especially one that implicates a Commission insider — would be a problem. +**Relationship with detective:** Assigned the detective to Sova because the detective has a clean record and a reputation for methodical work. Does not know the detective personally. + +### Level 3: Sector Deputy Commissioner — Halden Pres +**Title:** Deputy Commissioner, Sector 7 +**Who he is:** Political appointee. Has been in position for 6 years. Sector 7 covers the Krenn System transit hubs, which are economically significant — freight logistics for Velen's surface operations. Not personally corrupt. But his political relationships include figures who have interests in how freight regulation is managed in the sector. +**His knowledge of this investigation:** Was briefed at level of "routine compliance review at Sova." Does not know the actual investigative mandate. If the investigation escalates — if arrests are made, if Commission involvement in a smuggling ring is implied — he will be briefed, and his political relationships will activate. +**The political risk:** Deputy Commissioner Pres is not an enemy. But if the investigation implies that a previous Commission liaison was arranged to protect a smuggling ring, Pres may have indirect connections to whoever arranged it. He is not the villain. But he is a constraint. + +--- + +## 4. The Previous Liaison: Korrean Tsev + +**Title (former):** Commission Liaison Officer, Sova Transit District +**Rotation:** Posted to Sova for 18 months; rotated out 3 months before the detective arrived. +**Official reason for rotation:** Standard posting cycle. Liaison officers rotate every 18-24 months to prevent over-familiarity with local operations. + +**The detective's case file note:** The previous liaison, Korrean Tsev, was in position during the period when manifest discrepancies were already detectable in the freight data. No irregularity reports were filed. Three compliance audits during Tsev's tenure all came back clean. The anomalies that the detective's pattern analysis flagged from the data should have been visible to Tsev. + +**Was the rotation arranged?** + +The detective's case file flags this as unconfirmed but suspicious. The canonical answer (not available to the player in v0.1): **yes, it was arranged.** Tsev was not corrupt in the sense of taking ring money — but Tsev was compromised by personal loyalty. A relationship with someone at sector administration meant Tsev was quietly moved when the manifest anomalies became too persistent to ignore, rather than being required to file a report that would implicate people above Tsev's pay grade. + +**What the detective can learn in v0.1:** +- That Tsev filed no reports (case file, accessible from session start) +- That the anomalies were detectable during Tsev's tenure (manifest data analysis, takes investigation time) +- That Tsev was rotated on a compressed timeline (standard was 24 months; actual was 18 months) — this is discoverable through institutional records if the detective requests them + +**What the detective cannot learn in v0.1:** +- WHY the rotation was arranged +- Who in sector administration was involved +- Whether Deputy Commissioner Pres had knowledge + +This is a thread that extends beyond the v0.1 vertical slice. The detective can pull the thread enough to see it exists, but not enough to unravel what's at the other end. + +--- + +## 5. Torek Lintar: Commission Compliance Officer + +Torek Lintar is Commission compliance on Sova — not an investigator, not a liaison officer, but a permanent-fixture compliance monitoring role. Commission compliance officers are lower in the formal hierarchy than liaison officers, but they have one thing liaison officers don't: **local knowledge accumulated over years.** + +Torek has been on Sova for 4 years. He knows everyone. He knows the bar. He knows the shifts. He knows the social fabric in a way a three-day-old liaison officer cannot. + +**The detective's starting relationship with Torek:** Professional known name from institutional channels. Not a friend. Encountered at the bar (Torek is a bar regular). + +**What Torek knows that the detective doesn't:** +- The ring's social footprint, at least at the edges — conspicuous spending, familiar faces +- Sera Venn's unofficial compliance check (Torek suspects; he doesn't know for certain) +- The shape of the social web connecting Kael's group + +**Why Torek hasn't reported what he knows:** +Torek's tolerance threshold for confrontation is low. He is ring-adjacent (D-024 triangle 3: Bar Tensions), which means he is socially embedded with people who are embedded with the ring. His conspicuous spending suggests he may have accepted something from ring-peripheral sources — not enough to be a member, but enough to compromise his ability to report cleanly. He is not a villain. He is a compromised observer who has talked himself into believing the right moment to report will come later. + +**Torek as asset for the detective:** +If the detective builds enough trust (social + authority), Torek can become an information source — but carefully. The ring is aware of Torek's connection to Commission compliance. Torek going to the detective too visibly risks blowback on both of them. + +**Torek as the signal in Sera's FRIEND arc:** +Sera avoids Torek. Three times. Three different excuses. The detective's monologue reads this as a behavioral pattern. The reason: Sera ran an unofficial check on Kael's work patterns (using Commission technical access she wasn't supposed to use) and found the same manifest discrepancies the detective found. Torek, as Commission compliance, would be the person Sera should have reported this to. Sera's avoidance of Torek is the tell that she found something and didn't report it. The detective doesn't know this yet — but the behavioral signal points there. + +--- + +## 6. Political Pressures on the Investigation + +The detective's investigation operates under several simultaneous pressures: + +| Pressure | Source | Direction | Effect | +|----------|--------|-----------|--------| +| **Succeed cleanly** | Veth (Sector Coordinator) | Upward | Produce results without creating institutional embarrassment | +| **Don't exceed mandate** | Institutional | Inward | Formal arrests require escalation; the detective can't act unilaterally | +| **Previous liaison question** | Case file | Lateral | Pulling this thread risks finding Commission involvement; politically dangerous | +| **Sera's position** | Personal | Personal | Using what Sera knows against her would destroy the detective's only personal relationship in the district | +| **Community non-cooperation** | Social | Environmental | The district's default resistance to institutional authority; this is not malice, it's culture | + +The detective is not just investigating a smuggling ring. They are investigating within an institutional structure that has already failed to catch this ring once. The question of whether that failure was incompetence or arrangement is the shadow behind every manifest discrepancy. + +--- + +## 7. How This Appears in Monologue + +The detective's institutional context should surface in monologue lines as internal processing — the analytical framing through which they filter every observation. Not institutional jargon, but institutional habit. + +**Examples:** + +At session start, observing the hub: +*"Third day. Tsev was here for eighteen months and filed nothing. Either I'm better at this than Tsev, or there's something in the water. Let's find out."* + +When Voss deflects a question: +*"That answer was technically responsive. It gave me nothing. Voss knows exactly what I'm asking. Note it."* + +When considering what Torek knows: +*"Lintar's been on Sova for four years. He's seen whatever there is to see. Commission compliance doesn't file reports in a vacuum — something told him to stay quiet."* + +When the Sera contradiction emerges: +*"I could escalate this. Report what I suspect to Veth. But if I'm wrong about Sera, I've just burned my only ally on a hunch. And if I'm right — I need to know how far this goes before I put it in writing."* + +--- + +## 8. v0.1 Content Scope + +What needs to be authored for this to work: + +| Element | Content Requirement | +|---------|---------------------| +| Detective opening monologue (lines about Tsev's missing reports) | 1-2 lines from session start knowledge | +| Case file items (accessible via evidence display) | 3-5 readable entries: Tsev rotation note, manifest cluster data, POI summaries | +| Torek dialogue (authority tier) | 3-5 lines for institutional context questions | +| Veth (off-station, not interactive) | Referenced in case file and detective monologue only | +| Detective monologue about political constraints | 2-3 lines scattered across session | + +The chain of command does not require NPCs to appear — Veth and Pres are off-station and non-interactive in v0.1. Their presence is felt through the detective's case file entries and internal monologue about institutional constraints. Torek is the only chain-of-command-adjacent NPC who is interactive. + +--- + +*Ticket #322 — Detective institutional chain of command. v0.1 scope.* diff --git a/docs/design/divergent-relationships.md b/docs/design/divergent-relationships.md new file mode 100644 index 000000000..d3f7336ac --- /dev/null +++ b/docs/design/divergent-relationships.md @@ -0,0 +1,231 @@ +# Divergent Relationships + +**Ticket:** #183 | **Priority:** Critical | **Sprint:** 12 +**Status:** v0.1 Draft +**Blocked by:** #180 (Smuggler build), #181 (Detective build) +**Decisions referenced:** D-005, D-027, D-028 (four relational layers), D-029 (30/50/20), D-033 (entity color), D-075 (knowledge confidence gate on trust) + +--- + +## 1. Design Principle + +Same NPCs. Two different starting relationship webs. The smuggler is inside the social fabric of Sova Transit District. The detective is outside it, with institutional authority as their primary access tool. + +This divergence is not symmetric. The smuggler has deep relationships with fewer NPCs but holds insider access from session start. The detective has shallow relationships with many NPCs but can use authority credentials to access people the smuggler cannot pressure. Neither coverage model is superior — they produce different investigations. + +**The honest truth is:** the smuggler's social depth is their strength AND their vulnerability. When the ring starts to crack, their close relationships become sources of betrayal, not safety. The detective's institutional distance is protection AND limitation — they never get the warmth, but they also never get the blindspot. + +--- + +## 2. NPC Relationship Comparison + +### Key: RelationshipState | Access Tier | Trust | Entity Color (D-033) + +| NPC | Smuggler | Detective | +|-----|---------|-----------| +| **Kael Davan** | Friendly / insider+peer / trusted / **green** | Unknown / public / N/A / **grey** | +| **Sera Venn** | Known / public / uncertain / **teal** | Friendly / peer / trusted / **green** | +| **Voss** | Known / insider+peer / reliable / **teal** | Known / authority / uncertain / **teal** | +| **Maret Korr** | Known / insider+peer / reliable / **teal** | Known / authority / uncertain / **teal** | +| **Drin Rosta** | Known / insider / reliable / **teal** | Known / authority / uncertain / **teal** | +| **Lera Sessik** | Friendly / insider+peer / trusted / **green** | Unknown/Known / public / uncertain / **grey→teal** | +| **Naia Tamm** | Known / peer / reliable / **teal** | Unknown / public / N/A / **grey** | +| **Torek Lintar** | Known / peer / uncertain / **amber** | Known / public / uncertain / **teal→amber** | +| **Nils Davan** | Known / insider / reliable / **teal** | Unknown / N/A / N/A / **grey** | +| **Renn** | Known / insider / reliable / **teal** | Unknown / N/A / N/A / **grey** | +| **Devra** | Known / insider / reliable / **teal** | Unknown / N/A / N/A / **grey** | +| **PC-Detective** | Unknown/Known / public / uncertain / **amber** (warned) | N/A — is the detective | N/A | +| **PC-Smuggler** | N/A — is the smuggler | Unknown / public / N/A / **grey** | + +**Color key (D-033):** +- **Green** = Friendly relationship — warm, accessible, insider content possible +- **Teal** = Known/neutral — recognized, baseline access +- **Amber** = Person of Interest — heightened observation, potential threat +- **Grey** = Unknown — no existing relationship + +--- + +## 3. The Inversion Architecture + +The same NPCs appear in both relationship maps. But the maps are mirrors, not duplicates. + +### Kael Davan (THE FRIEND): Maximum Divergence + +| | Smuggler | Detective | +|-|---------|-----------| +| RelationshipState | Friendly | Unknown | +| Access Tier | insider + peer | public | +| Trust | 8/10 — "the day is better when he's on shift" | N/A — one of many dock workers | +| Entity color | Green | Grey | +| Dialogue available | Phase-gated ring talk, personal warmth, confession (if trust maxed) | Greeting, basic questions, deflection | +| Emotional weight | Maximum — 2 years of shared risk | Zero — no relationship to lose | +| FRIEND arc | Betrayal, protection, contaminated trust | Behavioral tells, manifest connection, informant potential | + +This is the central architectural divergence. The smuggler's most important NPC is the detective's least known. When the smuggler feels Kael's betrayal, the detective is trying to figure out who Kael is. + +### Sera Venn (THE FRIEND): Mirror of Kael + +| | Smuggler | Detective | +|-|---------|-----------| +| RelationshipState | Known | Friendly | +| Access Tier | public | peer | +| Trust | 0/10 — "Commission, keep distance" | 9/10 — "she always was the reliable one" | +| Entity color | Teal | Green | +| Dialogue available | Basic public-tier; no personal content | District orientation, gossip, institutional sharing | +| Emotional weight | Near zero — categorized threat | Maximum — only ally in unfamiliar territory | +| FRIEND arc | N/A | Avoidance pattern, suppressed evidence, contaminated trust | + +Same NPC. The smuggler maintains institutional distance. The detective relies on personal friendship. The contradiction (Sera sitting on evidence that could advance the investigation) hits differently: for the detective, it's a betrayal of trust. For the smuggler, if they were ever to learn it, it would be irrelevant — Sera was never trusted in the first place. + +### Voss: Inverted Access, Same NPC + +| | Smuggler | Detective | +|-|---------|-----------| +| RelationshipState | Known | Known | +| Access Tier | insider + peer | authority | +| Trust | "reliable but not warm" — operational respect | "uncertain — answers but doesn't volunteer" | +| Dialogue available | Ring operational coordination, schedule management | Institutional questions, manifest data, evasive answers | +| What Voss says to them | Operational specifics: "Transition window is clean." | Institutional surface: "Everything is in compliance." | + +Both characters talk to Voss. The conversations are nothing alike. The smuggler gets operational truth. The detective gets institutional deflection. + +--- + +## 4. Access Tier Divergence Table + +Per-NPC table of which dialogue tiers each character can access at session start vs. through play: + +| NPC | Smuggler Starting | Smuggler Max | Detective Starting | Detective Max | +|-----|-----------------|-------------|-------------------|--------------| +| Kael | insider + peer | insider + peer | public | authority (if POI) | +| Sera | public | public (no growth path) | peer | authority (post-contradiction) | +| Voss | insider + peer | hostile (if cover blown) | authority | peer (if trust earned) | +| Maret | insider + peer | hostile (if pressured wrong) | authority | peer (if cooperation) | +| Drin | insider | hostile (if flipped) | authority | — see note | +| Lera | insider + peer | hostile (social contamination) | public | peer (4+ visits) | +| Naia | peer | hostile (if truth revealed) | public | peer (through Sera) | +| Torek | peer | hostile (if confronted about spending) | public | authority (financial tells) | + +**Note on Drin:** The detective can pressure Drin via gambling debt (institutional leverage). This is the detective's entry point to actual ring structure — Drin as turned informant. The smuggler knows Drin is compromised; they have no leverage angle because they're on the same side. + +--- + +## 5. Social Site Coverage + +How each character covers the three social sites of Sova Transit District: + +### The Terminal (Logistics Hub) + +**Smuggler:** +- Full insider access to ring-aware NPCs (Kael, Voss, Maret, Drin, Renn) +- Cargo floor access (shifts, freight systems, break room) +- Social belonging — people wave, greet, assume presence is normal +- Blind spots: doesn't see the detective's investigation angle; doesn't know Maret is worried about the manifest requests + +**Detective:** +- Authority access to institutional NPCs (Voss, Maret, Drin) +- Data access (manifests, scheduling records, inspection logs) +- Visible outsider — NPCs stiffen, answers get shorter, body language shifts +- Blind spots: ring-operational dialogue is completely inaccessible; NPCs perform compliance without candor + +**Coverage overlap:** Both characters are in the Terminal. Same physical space. The overlap zone is the ~20% of dialogue that's truly `public` — shift schedule announcements, generic greetings, environmental observations. Everything else is character-specific. + +### The Last Shift (Bar) + +**Smuggler:** +- Insider status — Lera saves their seat, ring-aware regulars speak freely +- Social hub for ring: Kael, Renn, Torek (if present), Lera all accessible +- Emotional territory: this is where the smuggler goes to decompress, not investigate +- Blind spots: doesn't see Sera's avoidance of Torek as anything other than "Commission, normal behavior" + +**Detective:** +- Outsider becoming regular — needs 3-4 visits to unlock peer access with Lera +- Social anchor through Sera — Sera's presence grants partial access to bar social fabric +- Observation territory: this is where the detective watches, not relaxes +- Blind spots: ring-adjacent social dynamics (Torek's rounds, Lera's protectiveness) read as social texture, not evidence + +**Coverage overlap:** Sera is the bridge. Both characters interact with Sera at the bar. Sera's dialogue with the smuggler (brief, guarded, Commission-wary) and with the detective (warm, orienting, personal) are completely different. An NPC the detective trusts most is the one the smuggler avoids most. + +### The Maintenance Corridors + +**Smuggler:** +- Full access (corridor token) +- Routes, surveillance gaps, timing windows all known +- The corridors are operationally familiar — movement here is intentional and professional +- THE FRIEND contradiction happens here: Corridor B-7, Kael's unauthorized meeting + +**Detective:** +- No natural access — maintenance corridors are not institutional territory +- Presence here is suspicious (both to NPCs and mechanically) +- May access if security authority is invoked, but it triggers NPC awareness +- Can observe corridor access from entry points; cannot follow undetected + +**Coverage gap:** The corridors are entirely the smuggler's territory. The detective's only route in involves institutional authority that announces itself. This makes the smuggling operation's most vulnerable moments physically inaccessible to the detective's normal investigative approach. + +--- + +## 6. NPC Knowledge of Each Character + +NPCs hold knowledge about both characters simultaneously (D-041 bidirectional). The same NPC has: +- EntityKnowledge about the smuggler (from the smuggler's perspective) +- EntityKnowledge about the detective (from the detective's perspective) + +Key examples: + +**Kael's knowledge of both characters:** +- Of the smuggler: Friendly / trusted / ring member / close colleague +- Of the detective: Known / suspicious / Commission / risk: moderate + +**Lera's knowledge of both characters:** +- Of the smuggler: Friendly / trusted / regular customer / ring-aware +- Of the detective: Unknown-becoming-Known / uncertain / Commission presence + +**Sera's knowledge of both characters:** +- Of the smuggler: Known / uncertain / "dock worker, keep minimal contact" +- Of the detective: Friendly / trusted / friend, institutional colleague + +**Voss's knowledge of both characters:** +- Of the smuggler: Known / reliable / ring member +- Of the detective: Known / suspicious / risk: moderate / managing exposure + +--- + +## 7. Relationship Shift Paths (First 30 Minutes) + +How relationships shift during the vertical slice for each character: + +### Smuggler Relationship Shifts + +| NPC | Starting State | Likely Shift | Trigger | +|-----|---------------|-------------|---------| +| Kael | Friendly | → PersonOfInterest | Corridor B-7 observation (Phase 3) | +| All ring NPCs | Known/Friendly | → Hostile (conditional) | If smuggler cooperates with detective or cover blown | +| Naia | Known | → (no shift in v0.1) | No player action triggers this in 30 min | +| Sera | Known | → (no shift in v0.1) | Smuggler never gets close enough | + +### Detective Relationship Shifts + +| NPC | Starting State | Likely Shift | Trigger | +|-----|---------------|-------------|---------| +| Sera | Friendly | → PersonOfInterest | Torek avoidance pattern (Phase 3) | +| Kael | Unknown | → Known → PersonOfInterest | Behavioral tells + manifest discrepancy connection | +| Drin | Known | → Cooperative (conditional) | Gambling debt leverage applied | +| Lera | Unknown | → Known → peer (conditional) | 3-4 bar visits | +| Maret | Known | → peer (conditional) | Cooperative interview unlocks | +| Smuggler-NPC | Unknown | → Known → PersonOfInterest | Tell accumulation + cargo attention on 4471 | + +--- + +## 8. Design Implications + +**The most emotionally resonant NPCs are the ones each character DOESN'T know.** + +The smuggler will encounter the detective investigating the people they love most. The detective will encounter the smuggler operating inside the community they're trying to understand. The tension comes from the player knowing what the NPC they're watching doesn't know. + +**Relationship symmetry check:** For every NPC in one character's web, verify the other character's starting state. If the smuggler has a `Friendly` / insider relationship, the detective must start at `Unknown` or `Known` / public for there to be discovery room. If both characters start at `Friendly`, the NPC is a shared ally and loses narrative potential. + +**The bar is the convergence zone.** Both characters are present at The Last Shift. The physical overlap creates the mirror moment opportunities (ticket #329). Same room, same NPCs, different access. The bar scenes are the most structurally dense content space in v0.1. + +--- + +*Ticket #183 — Divergent relationships. v0.1 scope.* diff --git a/docs/design/divergent-starting-knowledge.md b/docs/design/divergent-starting-knowledge.md new file mode 100644 index 000000000..103c3dcac --- /dev/null +++ b/docs/design/divergent-starting-knowledge.md @@ -0,0 +1,171 @@ +# Divergent Starting Knowledge + +**Ticket:** #182 | **Priority:** Critical | **Sprint:** 12 +**Status:** v0.1 Draft +**Blocked by:** #180 (Smuggler build), #181 (Detective build) +**Decisions referenced:** D-005 (asymmetric information), D-027 (vertical slice), D-041 (knowledge graph), D-065 (evidence display) + +--- + +## 1. Design Principle + +Asymmetric information is the master mechanic (D-005). The two characters know different things about the same world. Neither has the full picture. The game's central tension comes from each player discovering what the other already knew — but only on their second playthrough. + +The knowledge sets are not merely different. They are **inverted at the points that matter most.** The smuggler knows the conspiracy from inside it. The detective knows the investigation from outside it. The middle — the social web that connects them — is what neither fully understands at session start. + +--- + +## 2. Master Knowledge Comparison Table + +### 2a. Contraband and Ring + +| Fact | Smuggler | Detective | +|------|---------|-----------| +| Ring exists (organized smuggling operation) | **KnowsEverything** — member | Unknown — suspects "systematic manipulation" but no structural knowledge | +| Ring members (Nils, Kael, Voss, Renn, Devra, Resha) | **KnowsDetails** — works with them daily | Unknown — names absent from case file; only Voss, Maret, Drin as institutional POIs | +| Cargo type (unlicensed lattice components, medical replacements) | **KnowsDetails** — handles the containers | Unknown — case file has weight/size anomalies but not cargo type | +| Smuggling routes (corridor access, timing windows) | **KnowsEverything** — runs the routes | Unknown — knows maintenance corridors exist from district layout documents | +| Operation schedule (shift transition windows) | **KnowsEverything** — the 20-minute gaps are the job | **KnowsDetails** — case file shows anomaly clustering around shift transitions | +| Supply chain upstream (Sabel, Syndic connection) | **KnowsOf** (partial: knows Sabel, not the full chain) | Unknown | +| Voss's complicity (takes a cut, provides scheduling cover) | **KnowsEverything** — operational fact | Unknown — Voss is a POI because of scheduling authority, not proven complicity | +| Drin's complicity (looks the other way on inspections) | **KnowsDetails** — operational asset | Unknown — Drin is a POI because of inspection failures | +| Maret's awareness (scheduling access to cover for ring) | **KnowsDetails** — hub colleague | **KnowsOf** — person of interest from case file | + +### 2b. Investigation + +| Fact | Smuggler | Detective | +|------|---------|-----------| +| Detective's identity as investigator | Unknown — may know "new Commission presence" from ring warning | **KnowsEverything** — is the investigator | +| Detective's actual mandate (investigate freight irregularities) | Unknown — "routine compliance review" is the cover | **KnowsEverything** | +| Manifest discrepancies exist and are flagged | **KnowsOf** — operational awareness that paperwork is being managed | **KnowsDetails** — has the discrepancy data, cluster analysis, container series | +| Previous Commission liaison rotation (possibly arranged) | Unknown | **KnowsOf** — noted in case file as suspicious; unconfirmed | +| Commission's investigation timeline | Unknown | **KnowsDetails** — their own timeline | + +### 2c. Key People + +| Fact | Smuggler | Detective | +|------|---------|-----------| +| Kael's exit attempt (unauthorized external contact) | **Unknown** (CRITICAL gap — basis for FRIEND arc) | Unknown | +| Sera's unreported evidence (suppressed compliance check on Kael) | Unknown | **Unknown** (CRITICAL gap — basis for FRIEND arc) | +| Naia confided in Sera about Kael | Unknown | Unknown | +| Naia's worry about Kael's behavior | **KnowsOf** — has noticed Naia seems stressed at bar; doesn't know why | Unknown — Naia is not yet a known individual | +| Torek's spending (conspicuous, potential security risk) | **KnowsOf** — has noticed; worries about exposure | **KnowsOf** — "slightly off in a way I can't yet articulate" | +| Sera's background (pre-existing contact for detective) | Unknown — knows Sera only as "Commission, keep distance" | **KnowsDetails** — trusted pre-existing friend | +| Smuggler's role in the ring | **KnowsEverything** — is a member | Unknown — one of many dock workers | +| Kael's relationship with Nils (brother; ring coordinator) | **KnowsDetails** | Unknown | + +### 2d. Location and World + +| Fact | Smuggler | Detective | +|------|---------|-----------| +| Sova Transit District geography (full) | **KnowsEverything** — 3 years here | **KnowsOf** — 3 days; still orienting | +| Corridor B-7 (restricted, ring access) | **KnowsEverything** — knows the access token, uses the corridor | Unknown — maintenance corridors noted in district layout | +| Dead drop location (temp storage bay 4, container 4471) | **KnowsEverything** | Unknown — container 4471 appears in manifest discrepancy data but not mapped to a location | +| Shift schedule rhythms (social and operational) | **KnowsEverything** | **KnowsOf** — knows shifts exist, pattern from case file | +| Bar social structure (who sits where, who's a regular) | **KnowsDetails** — 2 years of evenings at Lera's | **KnowsOf** — has visited twice | + +--- + +## 3. Knowledge Asymmetry Map + +The gaps in each character's knowledge are not random — they cluster around the same events and people, approached from opposite directions: + +``` + THE SHARED WORLD + ↕ + ┌─────────────────────────────────────┐ + │ Triangle 4 │ + │ Naia ←→ Kael ←→ Sera │ + │ ↑ ↑ │ + │ (Kael's (suppressed │ + │ partner, evidence) │ + │ knows ↕ │ + │ something) Detective's │ + │ ↕ FRIEND │ + │ Smuggler's │ + │ FRIEND │ + └─────────────────────────────────────┘ + +Smuggler knows: Kael (trusted friend), ring details, routes, members +Smuggler doesn't know: Kael is exiting, Sera's evidence, Naia→Sera connection + +Detective knows: Investigation data, Sera (trusted friend), manifest anomalies +Detective doesn't know: Ring structure, Kael's role, Sera's evidence, Naia→Sera connection + +Neither knows: Triangle 4's full shape — the chain from Naia's worry to Sera's suppression to the investigation closing in +``` + +The dramatic irony of the second playthrough is that the player who's played as the smuggler watches the detective investigate from outside what the smuggler knows intimately. The player who's played as the detective watches the smuggler trust Kael — not knowing the thing the detective now knows (Kael is the link between the ring and Sera's evidence). + +--- + +## 4. Knowledge Acquisition Curves + +### Smuggler: What they can learn, and how + +| Unknown → Known | Method | Timing | +|----------------|--------|--------| +| Detective's identity | Ring warning (Kael/Voss mentions Commission presence) OR direct observation | Minutes 0-5 (if warned); later if not | +| Kael's exit attempt | THE FRIEND arc — spatial observation (Corridor B-7), then confrontation | Minutes 15-25 | +| Sera has unreported evidence | Cannot discover this through normal play. Would require Sera to confess or Naia to reveal — extreme late-game territory beyond v0.1 scope | Post-v0.1 | +| Torek's specific risk level | Observation of Torek's behavior over time | Minutes 10-20 | + +### Detective: What they can learn, and how + +| Unknown → Known | Method | Timing | +|----------------|--------|--------| +| Ring exists (structured) | Evidence accumulation — NPC behavioral tells, manifest patterns, corridor observation | Minutes 15-25 | +| Kael is ring member | Connecting manifest discrepancies to Kael's shift data; cargo attention tell | Minutes 20-30 | +| Sera's unreported evidence | THE FRIEND arc — behavioral pattern observation (Torek avoidance), then confrontation | Minutes 20-30 | +| Smuggler is in the ring | Tell accumulation (corridor check, social clustering with Kael/Renn), manifest connection | Minutes 15-30 | +| Kael's exit attempt | Would require Kael to confess or Naia to reveal — beyond normal investigation path | Post-confrontation branch | + +--- + +## 5. Evidence Display Difference + +Same underlying Knowledge Graph, different presentation layer (D-065): + +**Detective — Case File Format:** +``` +Entity: Kael Davan +Role: Dock worker, Sova Terminal +Confidence: KnowsOf +Source: observation +Attributes: + - routine_pattern: "morning shift 06:00-14:00" + - behavior_flags: [lattice_checking, shortened_interactions] + - risk_assessment: "moderate — behavioral anomalies suggest concealment" + - link: [manifest_discrepancy_cluster_A] +Insert suggests: "Check shift records against anomaly window" +``` + +**Smuggler — Personal Notebook Format:** +``` +Kael — closes colleague, ring. Two years. Trust: solid. +Lately: distracted. Lunch cut short twice this week. +Something's off. Not the operation — personal. +Watch for: the look-left tell. +``` + +Same underlying entity. Different framing. The detective files evidence. The smuggler worries about people. + +--- + +## 6. Design Implications for Content Authors + +**Rule 1: Don't explain what the character already knows.** +The smuggler doesn't need exposition about how the ring works. They know. Monologue lines about the ring should be operational, not explanatory. The detective doesn't need exposition about institutional procedures. They know. Monologue lines about the investigation should be observational, not procedural. + +**Rule 2: The unknown facts are load-bearing.** +When writing monologue lines, verify against the unknown_facts list. A smuggler monologue line that references Kael's exit attempt before Phase 3 is a continuity error. A detective monologue line that identifies Kael as a ring member before connecting manifest data to shift records is a continuity error. + +**Rule 3: Knowledge gaps produce monologue, not silence.** +What a character doesn't know generates JUST AS MUCH monologue content as what they know. The smuggler's worry about "is Torek a risk?" is monologue material. The detective's uncertainty about "previous liaison rotation — arranged or routine?" is monologue material. The unknown is active, not empty. + +**Rule 4: The same event produces inverted monologue.** +When the same NPC does the same thing in both playthroughs, the monologue responses should be detectably from different starting states. Kael checking his lattice → smuggler thinks "not like him to be jumpy" (personal familiarity) → detective thinks "lattice activity spiked, behavioral flag" (observational analysis). + +--- + +*Ticket #182 — Divergent starting knowledge. v0.1 scope.* diff --git a/docs/design/first-5-minutes-experience.md b/docs/design/first-5-minutes-experience.md index c37da5c28..3f9b48920 100644 --- a/docs/design/first-5-minutes-experience.md +++ b/docs/design/first-5-minutes-experience.md @@ -229,4 +229,68 @@ The first 5 minutes are successful if: --- -*Systems design brief. Line authoring: Mellanie (#299, #300). Paula may add narrative texture per character voice.* +## Narrative Texture: Character Voice in the First 5 Minutes + +*Added by Paula — character voice and emotional arc guidance for opening line authoring.* + +### The Smuggler: What the First 5 Minutes Must Establish + +The smuggler's first 5 minutes are not about tension. They are about **belonging.** The player needs to feel, before anything goes wrong, that this place and these people are worth protecting. The crack cannot land unless there is something to crack. + +**What "belonging" looks like in monologue:** + +The first monologue lines should make the player feel they have been in this place for years. Not "here I am at the cargo terminal" but "home sweet home." Not "Kael Davan, my colleague" but "Kael's already at the dock. Good." The compression is the character. The first-name intimacy is the belonging. The operational awareness is comfort, not anxiety. + +The smuggler's opening voice should feel like muscle memory. The characters observes their world the way you observe a room you've lived in for three years — not looking, knowing. Kael's position on the floor. The temperature of the recycled air. The ambient frequency that means the span gate cycled recently. All of this is ordinary. None of it needs to be explained. The character doesn't explain their home to themselves. + +**The emotional trajectory of the first 5 minutes:** + +Minutes 0-2: Comfort settling in. *"This is mine. I know where everything is."* +Minutes 2-4: Operational layer activates. *"The transition window opens in fifty minutes. Nothing complicated today."* +Minutes 4-5: The first hairline crack (seed-dependent). Not alarming. *"Kael seems distracted. Probably nothing."* + +The crack should feel like a whisper, not an alarm. The player may not even notice it. That's correct. They're supposed to look back at it later and think: *"It was right there from the beginning."* + +--- + +### The Detective: What the First 5 Minutes Must Establish + +The detective's first 5 minutes are not about confidence. They are about **adjustment.** The player needs to feel, from the first second, that they are slightly outside the rhythm of this place — and that they are professional enough to work with that, but human enough to feel it. + +**What "outside" looks like in monologue:** + +The first monologue lines should carry a controlled observational distance. Not hostility toward the district — the detective isn't hostile, they're analytical. But the distance is real. *"Third day on station."* That's the key phrase. Not "day three of the investigation." That's too procedural. *"Third day on station"* is how a person counts the time in an unfamiliar place. It's still counting. + +The detective's opening voice should feel like reading a room for the first time and doing it professionally. They are good at this. They notice things. But they're noticing them as data points, not as feelings. The feelings come later — when Sera appears and the register softens. That contrast is the emotional architecture of the detective's whole arc: professional distance punctured by personal warmth punctured by professional suspicion. The first 5 minutes should establish the distance so the warmth lands when Sera arrives. + +**The emotional trajectory of the first 5 minutes:** + +Minutes 0-2: Professional orientation. *"This is the scene. Let me read it."* +Minutes 2-4: Slight isolation crystallizes. *"The briefing said routine. The briefing is always wrong about something."* +Minutes 4-5: Warmth (if Sera variant) or first friction (if Terminal variant). Either: *"Good to know Sera's here."* Or: *"That supervisor has decided I'm a problem. Filing it."* + +The detective's emotional starting point is competent isolation. They are good at their job and slightly alone. The player should feel both. + +--- + +### Voice Rules for Opening Hook Lines + +**Smuggler — rules for the author:** +1. No sentences longer than 10 words unless it's an operational calculation +2. Fragment sentences are not a mistake — they are the voice +3. First-name all NPCs the character knows. Never "dock worker Davan" — "Kael" +4. Emotional states are physical: "my stomach settled," "something loosened," not "I felt relieved" +5. The world is sensory: recycled air, cargo lubricant, span gate frequency. Not visual abstractions. +6. No self-analysis: the smuggler doesn't think about why they feel things, they think about what to do next + +**Detective — rules for the author:** +1. Complete sentences, but not long. One clause per thought, mostly. +2. Analytical habit is always on: "file it," "note it," "that's twice now" +3. Surname-first for NPCs without personal relationships: "Voss," "Davan," "Korr" (not yet first names) +4. Emotional states come out sideways: not "I felt alone" but "At least someone in this district speaks my language" +5. Self-monitoring: the detective observes their own analysis for bias — "I'm reading too much into this" is a detective-voice line; the smuggler never thinks this +6. Institutional humor: wry, observational, appreciates irony at a distance — "The briefing said routine" + +--- + +*Ticket #259 — First 5 minutes experience design. Systems: Gestalt. Narrative texture: Paula. Line authoring: Mellanie (#299, #300).* diff --git a/docs/design/flat-npc-trait-pass.md b/docs/design/flat-npc-trait-pass.md new file mode 100644 index 000000000..7c2283e84 --- /dev/null +++ b/docs/design/flat-npc-trait-pass.md @@ -0,0 +1,170 @@ +# Flat NPC Memorable Trait Pass + +**Ticket:** #307 | **Priority:** High | **Sprint:** 12 +**Status:** v0.1 Draft +**Owners:** Paula (traits + design), Mellanie (line authoring) +**Decisions referenced:** D-024 (NPC generation model), D-029 (30/50/20 population split) + +--- + +## 1. Purpose + +The 30/50/20 population split (D-029) requires that 30% of NPCs are genuinely flat: routine + greeting, nothing more. But flat does not mean invisible. The problem this document solves is: **how do you make a flat NPC memorable without making them entangled?** + +Without this, the investigation noise floor collapses. If every NPC the player encounters has depth, the player learns to treat them all as potential leads. The flat NPCs must be indistinguishable from signal at first glance — and remain background when investigated. + +The answer is: **one memorable observable trait, one plausible-but-meaningless line, one visible routine.** Nothing more. The trait makes the NPC feel real. The line makes them feel briefly important. The routine reveals they were never a lead. + +--- + +## 2. The Three Flat NPCs (v0.1) + +### Pael — Maintenance Tech + +**Role in district:** Technical maintenance worker. Repairs station systems, patches conduit runs, handles the small constant failures of a 40-year-old prefab-modular station. + +**Memorable observable trait:** +Pael always has a specific piece of mechanical debris in one hand — a loose coupling, a stripped calibration pin, a shim. Not working with it. Not throwing it away. Just carrying it, the way people carry things they've picked up without thinking. Changes every few days. Has been seen patting his pockets as if looking for it when it's not there. + +**Seems-important-but-isn't line (for Mellanie to author):** +Something that sounds like it could be about the ring but isn't. Possible directions: +- A complaint about recurring conduit failures in a specific corridor (a real maintenance problem, not a smuggling tell) +- A reference to "the same cargo coming through twice" that turns out to be a legitimate scheduling quirk +- A cryptic comment about "what goes on in Corridor B-7 at night" that turns out to mean: the ventilation cycles loudly and keeps him awake when he's doing late maintenance + +**Visible routine:** +- Morning: arrives at maintenance depot, checks the day's work orders +- Mid-morning: visible in one of three locations (terminal catwalks, maintenance corridor access points, or near the span gate mechanism housing) — rotates daily +- Afternoon: back at depot, logging completed work +- Evening: does not go to The Last Shift — his social life is off-district + +**Design note:** The rotation across three maintenance locations is important. It means a player who is watching Pael will see him in different places on different days, which can read as suspicious to an overly attentive detective. But the reason is just: different maintenance jobs. The rotation is the noise, not the signal. + +**Dual-lens flat NPC:** + +*Smuggler:* Pael is background. Known by sight, not by name unless prompted. "That's the maintenance tech — he's been patching conduit runs near corridor B-7 for weeks. Annoying. Have to check if he's gone before any runs." + +*Detective:* Pael is a potential lead (maintenance tech → corridor access) who turns out to be nothing. The detective's monologue might flag him early ("Maintenance tech. Knows the corridors.") and unproductively file him as investigated-nothing later ("Pael's just doing maintenance. The B-7 visits are conduit issues. Nothing there."). + +--- + +### Ren — Drifter + +**Role in district:** Ren has no formal employment at Sova Transit. They appear to be between postings — the kind of person who stays at a transit hub while waiting for a berth on a freighter, or because the accommodation is cheap and they have no particular place to be. Has been here for about two months. Nobody knows much about them. + +**Memorable observable trait:** +Ren is always reading. Not a lattice — a physical reader, the kind that looks like it's been repaired three times and barely holds together. They read in the bar, in the terminal waiting area, in the corridor access lobby. But here's the notable thing: they never seem to be further along in the same book. Whatever they're reading, they're not making progress, or they keep starting over, or they're reading the same page. Hard to tell from a distance. + +**Seems-important-but-isn't line (for Mellanie to author):** +Something that sounds conspiratorial but is just evasive privacy. Possible directions: +- "I don't ask what goes in containers. Safer that way." (Said to anyone who asks what they do here — it's just a social habit, not self-incrimination) +- "I've seen a lot of stations. This one's quieter than most." (Sounds like they're watching something, but they're just making conversation with anyone who'll have it) +- References to "a package I'm waiting for" that turns out to be a personal delivery, not a criminal handoff + +**Visible routine:** +- Mornings: bar, before it opens fully. Lera tolerates early arrivals. Ren nurses a hot drink and reads. +- Afternoons: terminal waiting area, near the departure board. Not going anywhere. Just watching. +- Evenings: bar again, stays late. Quiet, doesn't bother people, drinks slowly. + +**Design note:** Ren's presence in the terminal waiting area watching the departure board is the designed mislead. They look like they're surveilling. They're just waiting for something — possibly a ship that hasn't arrived, possibly just habit. The departure board is the most interesting thing in their day. + +**Dual-lens flat NPC:** + +*Smuggler:* "Ren's been here two months and nobody knows who they are. If I were paranoid, that'd worry me. But if they were commission, they'd have introduced themselves. Probably just between postings." [Assessment: filed, not relevant.] + +*Detective:* Ren is the most suspicious person in the district who has nothing to do with anything. "Unknown. Unaffiliated. Watching the departure board daily. Background check shows nothing — no warrants, no commission flags, three previous transit hub stays in the last year. Probably a drifter. But I'm keeping an eye." The detective may waste 10-15 minutes of investigation time on Ren before filing them as noise. + +--- + +### Tev — Lookout + +**Role in district:** Tev works at the The Last Shift as part-time bar support — cleaning tables, stacking deliveries, doing the small physical work that Lera doesn't want to do herself. Not a formal bartender. Present most evenings, some afternoons. + +**Memorable observable trait:** +Tev has a specific relationship with the bar entrance. Every time someone walks in, Tev notices — not obviously, not a full head-turn, but a brief flick of attention in that direction. It's trained behavior, or old habit. They check who's coming in. Every time. Including people they've seen every day for months. The tell is subtle but consistent, and the pattern becomes recognizable once noticed. + +**Seems-important-but-isn't line (for Mellanie to author):** +Something that sounds like a lookout's report but is just social awareness. Possible directions: +- "Commission's in again" (said to Lera, routine observation — they note the detective's presence the same way they'd note a regular who comes in after a long absence: as social texture, not operational intelligence) +- "Kael's running late." (Said to nobody in particular. Not a ring update — just someone who keeps track of who shows up) +- Overheard to a regular: "You hear about the new cargo schedule?" — turns out to be about legitimate freight delays, nothing to do with the ring + +**Visible routine:** +- Afternoons: setting up for the evening shift, cleaning, stocking +- Evenings: working the floor. Tables cleaned, deliveries stacked, entrance watched +- Late evenings: last to leave after the bar closes, stacking chairs + +**Design note:** Tev's entrance-watching is the primary mislead. In a bar where a ring operates peripherally, having someone who tracks everyone who comes in reads as a lookout. And functionally, Tev probably IS a lookout for Lera — but Lera's lookout, not the ring's. Lera likes to know who's in her bar before they're at the bar. Tev's habit is loyalty to Lera, not criminal coordination. + +**Dual-lens flat NPC:** + +*Smuggler:* "Tev sees everything that comes through that door. Lera's eyes. Not our problem as long as Lera's solid." [Tev is background, not a concern.] + +*Detective:* "The bar worker — Tev. Watches the entrance. Consistent pattern. In a criminal-adjacent environment, that's potentially a lookout. But their behavior doesn't cluster with any other ring indicators. Social texture, not operational role. File under 'observed, not flagged.'" The detective may ask Lera about Tev — Lera's answer ("been here three years, good worker, minds their own business") is uninformative and accurate. + +--- + +## 3. Design Principles for Flat NPCs + +**Principle 1: The trait must be observable without interaction.** +The player should be able to recognize Pael (carrying something), Ren (reading), and Tev (watching the door) from a distance, through fog-of-war partial visibility, without ever having a conversation. The trait is a visual behavior, not a dialogue reveal. + +**Principle 2: The seems-important-but-isn't line is bait.** +Every flat NPC needs exactly one line that makes the player think "wait, is this person involved?" followed by a resolution that shows they're not. This is how the noise floor works: the player wastes attention on the noise and learns that not everything is a lead. This is both a design lesson and a realistic texture of investigation. + +**Principle 3: The routine must explain the suspicious-looking behavior.** +Pael is in Corridor B-7 because of maintenance. Ren watches the departure board because they're waiting for something. Tev watches the door because Lera wants them to. In every case, the explanation is boring and true. The mundane explanation is the design. + +**Principle 4: Dual-lens treatment for all three.** +Each flat NPC is perceived differently by the smuggler (background assessment, no anxiety) and the detective (potential lead, then filed as noise). The difference in perception is the same as for all other NPCs — but for flat NPCs, the detective's arc is: initial flag → investigation → nothing. That's the journey this population is designed to produce. + +--- + +## 4. Content Requirements Summary + +| NPC | Paula delivers | Mellanie delivers | +|-----|---------------|-----------------| +| Pael | Trait, dual-lens design, routine | 1 seems-important line + 2-3 variants, 2 dialogue lines (greeting-level) | +| Ren | Trait, dual-lens design, routine | 1 seems-important line + 2-3 variants, 2 dialogue lines | +| Tev | Trait, dual-lens design, routine | 1 seems-important line + 2-3 variants, 2 dialogue lines | + +**Mellanie note:** The seems-important lines should feel like they could be something. They shouldn't feel like obviously random NPC chatter. The art is in the plausible misdirection — specific enough to be memorable, mundane enough to resolve as nothing. Voice for all three flat NPCs is brief, non-explanatory, station-working-class register. + +--- + +## 5. YAML Stub for Content Authoring + +Each flat NPC needs a minimal NPC profile. Example for Pael: + +```yaml +canonical_id: "npc:pael" +display_name: "Pael" +tier: 3 +pattern: "FLAT" +motivation: "WORKER" + +description: > + Maintenance tech. Handles station system repairs across the district. + Observable: always carrying a piece of mechanical debris. Changes what + it is every few days. + +routine: + summary: > + Maintenance depot (morning arrival), one of three maintenance locations + (mid-morning, rotates), back to depot (afternoon), off-district (evening). + +trust_levels: + surface: > + Minimal. Complaints about current repair job, maintenance schedule. + Never personal, always task-focused. + real: "Not accessible — flat NPC." + secret: "Not accessible — flat NPC." + +notes: > + FLAT NPC. No triangle membership. No ring connection. The B-7 corridor + visits are conduit maintenance. The investigation dead-end is the point. +``` + +--- + +*Ticket #307 — Flat NPC memorable trait pass. 3 flat NPCs. Paula: traits. Mellanie: lines.* diff --git a/docs/design/npc-patterns/contradiction-arc.md b/docs/design/npc-patterns/contradiction-arc.md new file mode 100644 index 000000000..29b9d4fa4 --- /dev/null +++ b/docs/design/npc-patterns/contradiction-arc.md @@ -0,0 +1,251 @@ +# THE FRIEND: Contradiction Arc Pattern + +**Ticket:** #332 | **Priority:** Medium | **Sprint:** 12 +**Status:** v0.1 Draft +**Owner:** Paula +**Blocked by:** #297 (Kael Davan profile — done), #298 (Sera Venn profile — done) +**Decisions referenced:** D-034 (THE FRIEND pattern), D-035 (tag taxonomy), D-039 (wow moment #3), D-041 (knowledge graph), D-062 (invisible locked options), D-063 (confrontation mechanics) + +--- + +## 1. What This Document Is + +A reusable design pattern document extracted from the two concrete THE FRIEND implementations: Kael Davan (smuggler's FRIEND) and Sera Venn (detective's FRIEND). Both are complete. Both worked. This document captures the structural logic they share so that future FRIEND NPCs can be authored consistently and quickly. + +The pattern is called the **Contradiction Arc**. It is not a mystery. It is not a betrayal in the conventional sense. It is the discovery that someone the player trusts is carrying something they haven't shared — and that what they're carrying changes everything the player thought they understood about the relationship. + +--- + +## 2. The Pattern: Definition + +A Contradiction Arc is a 5-phase character trajectory built around a single observable contradiction that the player discovers through spatial observation, not through dialogue. The contradiction is: + +- **Observable**: The player sees it happen. No NPC tells them. No dialogue flag. No notification. +- **Spatially staged**: The contradiction is a behavioral deviation from expected routine (wrong location, wrong time, wrong person, wrong pattern). +- **Morally complex**: THE FRIEND's concealment comes from care or fear, not malice. There is no clean resolution. +- **Dual-lens resonant**: The same contradiction means something different to each playable character. The second playthrough recontextualizes the first. + +--- + +## 3. The 5 Phases + +### Phase 1: Baseline Warmth (0-10 minutes) + +**Purpose:** Establish the relationship BEFORE the contradiction. Create genuine attachment so the discovery has emotional weight. + +**Mechanics:** +- THE FRIEND is warm, reliable, helpful. Their dialogue is at surface/real trust for their relationship tier. +- Monologue during this phase is fond, casual, present-tense. No hints of incoming trouble. +- THE FRIEND's routine is consistent with their stated role. No behavioral deviations. +- Their personal tell (the observable habit that will become load-bearing later) is established here — but reads as innocuous. + +**Content authoring rule:** Write Phase 1 as if it is the whole story. The warmth must be real, not performed. If the player never discovers the contradiction, Phase 1 should feel like a complete, satisfying relationship. + +**Tag notes:** +- Dialogue: `trust: surface` (greeting, small talk) + `trust: real` (personal warmth, shared history) +- Monologue: positive mood tags (content, fond, warm) + +**Kael example:** "Kael's already at the dock. Good. The day's better when he's on shift." +**Sera example:** "Good to see Sera. She always was the reliable one. At least someone in this district speaks my language." + +--- + +### Phase 2: First Behavioral Shift (10-15 minutes) + +**Purpose:** Introduce behavioral tells that the observant player might notice — but that have plausible innocent explanations. + +**Mechanics:** +- THE FRIEND's behavior changes in small ways. Shortened interactions. Increased action frequency (lattice checking, looking around). Redirected attention. +- These are observable but not alarming. A non-observant player may not register them at all. +- The monologue shifts to mild concern or puzzlement. "Not like them to be..." registers something without naming it. +- THE FRIEND's dialogue remains warm at the surface level. The behavioral tells exist beneath the dialogue. + +**Content authoring rule:** Every tell in Phase 2 must have a non-suspicious explanation AND a suspicious one. The player who discovers the contradiction on a second playthrough should recognize these tells as load-bearing. The player experiencing them for the first time should accept the innocent explanation. + +**Tag notes:** +- Dialogue: same trust tiers as Phase 1 — surface content unchanged +- Monologue: mild concern tone; `trigger: observe_anomaly` for behavioral tell moments +- Tell system: all Phase 2 tells fire with `visible_to: peripheral` or `visible_to: any` + +**Kael example:** "Kael's distracted today. Checks his lattice more than usual. Probably nothing." +**Sera example:** "Sera left early. 'Headache,' she said. First time she's done that." + +--- + +### Phase 3: The Contradiction (15-20 minutes) + +**Purpose:** The observable contradiction. THE FRIEND is in the wrong place, doing the wrong thing, with the wrong person — and the player sees it. + +**Mechanics:** +- Spatial staging: THE FRIEND deviates from their established routine in a way that is spatially visible to the player. This is NOT communicated through dialogue or UI. The player moves through the world and encounters the deviation. +- The contradiction must be observable without being forced. The player discovers it; the game does not direct them to it. However, the contradiction is staged in a location the player will naturally visit in the course of normal gameplay. +- The monologue fires on `trigger: observe_anomaly` or `trigger: witness_interaction`. It names what the player has seen without drawing a conclusion. The character asks the question; the player supplies the answer. +- **Entity color shifts** at this moment: `Friendly` (green) → `PersonOfInterest` (amber). The visual system registers what the player has just observed. +- **Dialogue tiers lock**: The discovery creates a relationship fracture. Insider/peer warmth content becomes unavailable. Only public/surface dialogue remains for this NPC going forward. The absence is the signal. + +**Content authoring rule:** The contradiction must be: +1. Spatially clear (the player can see what is happening) +2. Contextually ambiguous (they understand WHAT but not WHY) +3. Emotionally weighted (the relationship context makes the "what" feel like a wound) + +**Tag notes:** +- Monologue at discovery: `trigger: witness_interaction` or `trigger: observe_anomaly`, `mood: [shocked, analytical]` +- Monologue should name the observation, not the interpretation +- KG update: `contradiction_flagged: true`, relationship shifts to PersonOfInterest + +**Kael example:** "That's Kael. But who's he talking to? I don't know that face. And that's not anyone from our rotation." +**Sera example:** "That's the third time. Sera leaves when Torek walks in. Three different excuses. Same result." + +--- + +### Phase 4: Confrontation Opportunity (20-25 minutes) + +**Purpose:** Give the player the option to press THE FRIEND. The confrontation dialogue reveals concealment without full confession. + +**Mechanics:** +- A new dialogue option appears (D-062 — invisible until unlocked; players won't see it until the contradiction triggers it). The option is written in the character's internal voice (D-063). +- THE FRIEND deflects. They give an answer that is technically not a lie, but is not the truth. Their personal tell fires during the deflection — the tell established in Phase 1 becomes the proof that they're hiding something. +- The player can choose to accept the deflection, push harder, or walk away. All three paths have consequences. +- This is the emotional peak. Whatever the player does here determines the shape of the rest of the session. + +**Content authoring rule:** THE FRIEND's deflection must be sympathetic. They are not lying to harm the player. They are concealing because the truth would hurt someone they love, or would place them in impossible danger. The player who understands the full arc (second playthrough) recognizes the deflection as fear, not treachery. + +**Tag notes:** +- New dialogue option: confrontation style, `situation: [confrontation]`, `access: [peer, insider]` — only the character who has the relationship can ask this question +- THE FRIEND's response: `trust: real` (this is as honest as THE FRIEND can be without full confession), `situation: [confrontation]`, mood that indicates concealment +- Personal tell confirmation: observation monologue fired by THE FRIEND's specific tell behavior + +**Kael example:** "Just a thing. Don't worry about it." [looks left before answering] / Smuggler monologue: "He looked left. He always looks left when he's making something up. Two years I've known that tell. Kael is lying to me." +**Sera example:** "He's just loud. I don't like loud drunks." / Detective monologue: "She's not lying. But she's not telling me everything. Sera, what do you know?" + +--- + +### Phase 5: Contaminated Trust (25-30 minutes) + +**Purpose:** THE FRIEND returns to surface-normal behavior. But the player is now watching differently. Every warm interaction is filtered through doubt. + +**Mechanics:** +- THE FRIEND's surface behavior normalizes. They resume their routine, greet the player warmly, act as if Phase 3 and 4 didn't happen (or at least, as if they're trying to move past it). +- But dialogue has shifted: insider/peer warmth is gone, replaced by public/surface content only. The player hears the same NPC; the texture is different. The warmth is slightly performed. +- Monologue shifts into the contaminated register: every warm interaction generates a note of doubt. The player's observational frame has changed. +- Three player paths diverge from here: + - **Understanding** — gentle follow-up, possible confession, partial truth + - **Betrayal** — report/expose THE FRIEND; relationship damage is permanent + - **Observation** — watch and wait; the doubt lives but no confrontation happens + +**Content authoring rule:** Phase 5 content must work for all three player paths. The NPC's surface behavior is path-neutral — they don't know what the player has decided. The player's monologue shifts based on what decision they've made (or chosen not to make yet). + +**Tag notes:** +- Dialogue: `trust: surface` only; warm tone but no real-tier content; `mood: [composed]` for THE FRIEND +- Monologue: `mood: [conflicted]` or `mood: [analytical]`; prerequisite gates on relationship state PersonOfInterest +- If player chose Understanding path: additional monologue lines for partial-confession scenario + +**Kael example:** "Same old Kael. Same jokes, same routine. ...What are you not telling me?" +**Sera example:** "Still the same Sera. Still reliable. ...But reliable about what?" + +--- + +## 4. Required Content Per FRIEND NPC + +| Content Type | Count | Notes | +|-------------|-------|-------| +| Phase 1 dialogue lines (warmth, establishment) | 8-12 | Across greeting, social, situation contexts | +| Phase 1-2 monologue (fond, mild concern) | 5-8 | `trigger: observe_npc`, `trigger: post_conversation` | +| Phase 2 behavioral tells (description + monologue) | 3+ | Each tell: visible_to, behavior, monologue line | +| Phase 3 contradiction discovery monologue | 3-5 | `trigger: witness_interaction`, observation language only | +| Phase 4 confrontation dialogue option (player choice) | 1 | In character's internal voice per D-063 | +| Phase 4 THE FRIEND deflection dialogue | 3-5 | With personal tell behavior flagged | +| Phase 4 tell confirmation monologue | 1-2 | "I know this tell. They're lying." | +| Phase 5 contaminated-trust monologue | 4-6 | Varies by player path taken | +| **Total authored** | **~70-100 items** | No generation expansion — all hand-authored | + +--- + +## 5. The Tell System + +Every FRIEND NPC has a **personal tell** — a specific behavioral marker established in Phase 1 (innocent, recognizable) and confirmed in Phase 4 (proof of concealment). The tell must: + +1. Be **physical and observable** (not internal state — visible behavior the player can see) +2. Be **introduced before it becomes load-bearing** — Phase 1 or early Phase 2 +3. Be **unique to this NPC** — not a generic "nervousness" tell, but a specific habit +4. Be **explainable differently before and after** — innocent early, incriminating late + +**Kael's tell:** Looks left before answering. Established as a habit the smuggler has observed for two years. Becomes proof of lying at Phase 4 because the smuggler knows the tell AND its meaning. + +**Sera's tell:** Gathers her things quickly when leaving. Not a lie tell — Sera isn't lying when she leaves. But the timing (always when Torek arrives) and the variety of excuses (genuine, not scripted) creates the pattern the detective reads as behavioral. + +**Tell design rule:** The tell should produce a different emotional register for each playable character observing it: +- The character with the relationship reads the tell as **personal** ("I know that tell — I've seen it before") +- The character without the relationship reads the tell as **behavioral pattern** ("That's twice now — flag it") + +--- + +## 6. Dual-Lens Design Requirements + +Every FRIEND NPC must produce different monologue experiences for both characters observing the same behavior. The contradiction arc has two distinct "readings": + +| Phase | Bonded Character Reading | Other Character Reading | +|-------|--------------------------|------------------------| +| Phase 1 | Warmth, familiarity, fond reliance | Clinical observation, behavioral baseline, possible suspicion | +| Phase 2 | Personal concern ("something's wrong with them") | Analytical flag ("deviation from baseline, note it") | +| Phase 3 | Betrayal, confusion, hurt | Evidence accumulation, pattern confirmation, institutional assessment | +| Phase 4 | Personal confrontation (uses the personal tell as confirmation) | Investigative confrontation (uses behavioral pattern as evidence) | +| Phase 5 | Contaminated intimacy (every warm moment now suspect) | Professional caution (reliable informant now uncertain quantity) | + +**The second-playthrough resonance:** The player who has experienced both sides of Triangle 4 understands: +- Kael is trying to get OUT of the ring to protect Naia. His exit attempt is an act of love, not treachery. +- Sera is protecting Naia by NOT reporting what she found. Her concealment is loyalty, not corruption. +- The smuggler and detective are both experiencing friendship fractured by the same cause — Naia's worry about Kael, and the chain of protection that worry created. + +This is the design. The contradiction is not "THE FRIEND is bad." The contradiction is "THE FRIEND is doing something complicated for reasons that make sense, and it's happening to YOU." + +--- + +## 7. The No-Clean-Resolution Rule + +Every Contradiction Arc must refuse to offer a clean resolution. This is non-negotiable. + +**What "no clean resolution" means:** +- Confronting THE FRIEND does not produce a confession that absolves them. It produces a partial truth that raises more questions. +- Protecting THE FRIEND does not produce safety. It produces continued risk with the added weight of knowledge. +- Reporting THE FRIEND does not produce justice. It produces a particular kind of harm to people who didn't deserve to be caught in the consequence. +- Ignoring THE FRIEND does not produce peace. The doubt persists. The knowledge lives. + +**Why this rule exists:** D-027 success criterion #3 is "after each playthrough, player names an NPC they felt conflicted about." Confliction requires that no choice was clearly right. The moment a clean resolution exists — confess = forgiven, report = solved, ignore = safe — the Contradiction Arc collapses into a problem with a correct answer. The player stops feeling conflicted and starts making optimal choices. Emotional weight requires moral weight. Moral weight requires cost on every path. + +--- + +## 8. Content Authoring Checklist + +Before shipping a FRIEND NPC with a Contradiction Arc, validate: + +- [ ] Phase 1 warmth is genuine — the relationship is established as real before it's threatened +- [ ] Phase 2 tells are pre-established in Phase 1 (not appearing for first time at contradiction) +- [ ] Phase 3 contradiction is observable through spatial play — no dialogue/UI flag triggers it +- [ ] Phase 3 monologue names the observation without naming the explanation +- [ ] Phase 3 entity color shifts to amber (PersonOfInterest) at contradiction discovery +- [ ] Phase 3 dialogue tier lock: insider/peer content unavailable post-contradiction +- [ ] Phase 4 confrontation option appears only post-Phase 3 (D-062 invisible until unlocked) +- [ ] Phase 4 confrontation written in character's internal voice (D-063) +- [ ] Phase 4 THE FRIEND's deflection is sympathetic — they're concealing, not lying maliciously +- [ ] Phase 4 personal tell fires during deflection and is confirmed in monologue +- [ ] Phase 5 content exists for all three player paths (Understanding / Betrayal / Observation) +- [ ] Dual-lens notes written for both characters on every key monologue trigger +- [ ] No clean resolution on any player path +- [ ] Total authored content: 70-100 items + +--- + +## 9. Application to Future FRIEND NPCs + +This pattern is designed to be reused. When designing a future FRIEND NPC for a new template: + +1. **Identify the concealment.** What is THE FRIEND hiding, and WHY? The why must be sympathetic. "Protecting someone they love" or "fear of consequences" — not "because they're secretly bad." +2. **Design the contradiction.** What does the player OBSERVE that breaks the baseline? It must be spatial and behavioral, not told. +3. **Design the tell.** What physical habit is introduced in Phase 1 that becomes load-bearing in Phase 4? It must be specific to this NPC. +4. **Map the dual-lens difference.** How does the bonded character read the contradiction differently from the observing character? The emotional register must diverge. +5. **Refuse the clean resolution.** What does each of the three player paths cost? If any path costs nothing, revise. + +--- + +*Ticket #332 — Contradiction arc design document. Reusable FRIEND pattern. v0.1 scope.* diff --git a/docs/design/npc-patterns/mirror-moment.md b/docs/design/npc-patterns/mirror-moment.md new file mode 100644 index 000000000..e9c0b8694 --- /dev/null +++ b/docs/design/npc-patterns/mirror-moment.md @@ -0,0 +1,280 @@ +# Mirror Moment Design Document + +**Ticket:** #329 | **Priority:** Medium | **Sprint:** 12 +**Status:** v0.1 Draft +**Owners:** Paula (design), Mellanie (authoring) +**Blocked by:** #297 (Kael profile — done), #298 (Sera profile — done) +**Decisions referenced:** D-032 (separate monologue pools), D-034 (THE FRIEND), D-039 (wow moment #4 — Divergence Reveal) + +--- + +## 1. What Is a Mirror Moment? + +A mirror moment is a **shared trigger that produces completely different monologue for each playable character.** Same event. Same NPC. Same location. Two entirely different emotional experiences. + +The player who has completed both playthroughs encounters the mirror moments as a recognition: *"I was in this exact situation, but I felt something completely different."* This is the mechanism of Wow Moment #4 (Divergence Reveal — D-039): the realization that the same world contains two different experiences, and that you've had both. + +**What a mirror moment is NOT:** +- A branching dialogue option +- A triggered cutscene +- An informational difference ("the smuggler knows X and the detective doesn't") + +A mirror moment is an **interpretive difference** — same information, same NPC behavior, same physical event. Different internal frame. Different emotional weight. + +--- + +## 2. Design Principles + +**Principle 1: Same trigger, different pool (D-032 hard partition)** +Mirror moments operate because monologue pools are hard-partitioned by character. The same trigger key fires into the smuggler pool OR the detective pool — never both. The authoring requirement is to write both sides of every shared trigger. + +**Principle 2: The difference must be felt, not explained** +A mirror moment works when the player FEELS the divergence without having it explained. The two monologue lines should be immediately recognizable as coming from different places — different relationships, different frames, different fears. + +**Principle 3: The mirror reveals what the character CARES about** +The smuggler's monologue reveals personal loyalty (people). The detective's monologue reveals investigative analysis (patterns). A mirror moment that doesn't surface this difference is a content gap, not a mirror. + +**Principle 4: At least some mirrors should work on first playthrough** +Not every mirror moment requires a second playthrough to land. Some mirrors work as a moment of character voice — the player just hears what their character notices. Second playthrough makes the divergence explicit, but first playthrough should have its own emotional coherence. + +--- + +## 3. The 10 Mirror Moments (v0.1) + +### Mirror 1: The Friend's Routine + +**Trigger:** `observe_npc` — Seeing THE FRIEND (Kael/Sera) going about their daily routine in their expected location. + +**Shared observation:** THE FRIEND is doing exactly what they always do. Nothing unusual. The baseline before anything cracks. + +**Smuggler monologue:** +*"Kael's at his station. Right where he always is. Something settles when the shift starts right."* + +**Detective monologue:** +*"The dock worker — Davan — is on the floor again. Same position, same timing. Three days in a row. That's a routine. File it."* + +**What the mirror reveals:** The smuggler sees a person. The detective sees a data point. Same NPC at the same station. The relationship determines the register. + +--- + +### Mirror 2: The Empty Corridor + +**Trigger:** `enter_location` — Player enters a maintenance corridor when no other NPCs are present. + +**Shared observation:** The corridor is empty. The maintenance systems hum. No one is watching. + +**Smuggler monologue:** +*"Clear. Good. Transition window's still open for eleven more minutes."* + +**Detective monologue:** +*"Three separate entries to this corridor in my district walkthrough. Nothing documented in my file about why workers access this route. Off-books path? Add it to the log."* + +**What the mirror reveals:** The smuggler reads the empty corridor as operational safety. The detective reads it as an investigative lead. The physical space is identical; the cognitive frame inverts it. + +--- + +### Mirror 3: The Worried Partner (Naia Tamm) + +**Trigger:** `observe_npc` — Seeing Naia Tamm sitting alone at the bar, visibly preoccupied. + +**Shared observation:** Naia is at The Last Shift without Kael. She looks tired or worried. Not in distress — just carrying something heavy. + +**Smuggler monologue:** +*"Naia's here without Kael again. She looks rough. Should check in. ...Not now. Later."* + +**Detective monologue:** +*"That woman — Tamm, I think Sera mentioned her — is sitting alone. Wrong energy for a social evening. Something at home, or something she's heard?"* + +**What the mirror reveals:** The smuggler has a protective impulse toward Naia but defers it. The detective categorizes Naia as a potential information source. Same worried woman, same empty chair across from her. One character plans to check on a person; the other plans to assess a witness. + +--- + +### Mirror 4: The Spending + +**Trigger:** `observe_npc` — Watching Torek Lintar buy rounds at the bar. + +**Shared observation:** Torek is buying drinks for several people he doesn't know well. The drinks are nicer than they should be on a compliance officer's salary. He's clearly enjoying himself. + +**Smuggler monologue:** +*"Torek's buying rounds again. That's the third time this week. Either he won something, or he's getting paid from somewhere he shouldn't be. Starting to worry about that."* + +**Detective monologue:** +*"Commission compliance officer, buying grain spirit for half the bar. On his salary? That doesn't close. Financial tell. Noted."* + +**What the mirror reveals:** Both characters notice the same behavioral anomaly. The smuggler frames it as a security risk to the ring. The detective frames it as an evidentiary lead. Both have the same concern (Torek's spending is unusual) — but the concern has completely different stakes. + +--- + +### Mirror 5: Sera Leaving + +**Trigger:** `observe_npc` — Watching Sera Venn gather her things and leave the bar when Torek arrives. + +**Shared observation:** Sera gives a brief excuse (headache, kiosk check, early shift) and leaves. She was comfortable until the moment Torek walked in. + +**Smuggler monologue:** +*"Sera left. Good timing — she was starting to make everyone nervous anyway. Commission presence at Lera's always shifts the temperature."* + +**Detective monologue:** +*"Second time now. Sera leaves when Torek walks in. Same type of excuse. 'Headache' last time, 'kiosk' tonight. Same result. That's two data points. Third is a pattern."* + +**What the mirror reveals:** The smuggler reads Sera's departure as relief (Commission leaving = safer conversation). The detective reads the same departure as a behavioral anomaly. The event is identical. The emotional response is inverted. + +This mirror is structurally important: it shows the detective's FRIEND arc developing through observational patience, while simultaneously showing the smuggler's categorical relationship with Commission presence. + +--- + +### Mirror 6: The Station Hum + +**Trigger:** `time_idle` — Player is stationary in the terminal for more than a few seconds with no active interaction. + +**Shared observation:** The station's ambient systems — span gate hum, ventilation cycle, cargo machinery in the background — fill the silence. Sova at rest. + +**Smuggler monologue:** +*"Span gate's cycling early. One hour to the next transit. Voss'll be running the schedule check in twenty."* + +**Detective monologue:** +*"They've been on this station their whole lives. That hum is just background to them. I'm still trying to tune it out."* + +**What the mirror reveals:** The smuggler hears operational data in the ambient sound. The detective hears alienation. The station hum carries the same frequency to both characters' ears. It means completely different things to their experience of being in this place. + +--- + +### Mirror 7: The Commission Kiosk + +**Trigger:** `enter_location` or `observe_npc` — The player walks past or observes the Commission compliance kiosk near the terminal entrance. + +**Shared observation:** The kiosk is a small Commission compliance desk near the terminal entrance — mostly unmanned, used for permit verification and compliance queries. Standard infrastructure. + +**Smuggler monologue:** +*"Commission kiosk. Nobody uses it. Institutional furniture. Long as nobody decides to run a full cargo audit, that's exactly what I want it to stay."* + +**Detective monologue:** +*"The compliance kiosk has public access to manifest verification records. Local. Less filtered than the request I made through channels. Check it when Maret's not watching."* + +**What the mirror reveals:** The smuggler reads the kiosk as a passive threat to be ignored. The detective reads it as an investigative tool. Same object. Same physical location. The smuggler hopes it stays irrelevant; the detective plans to use it. + +--- + +### Mirror 8: Kael and Naia Together (Bar) + +**Trigger:** `observe_npc` — Seeing Kael and Naia sitting together at their usual table. Naia is talking; Kael is listening but seems distracted. + +**Shared observation:** A couple having dinner. Naia is clearly talking seriously about something. Kael is present but not quite there. The gap between them is subtle but visible. + +**Smuggler monologue:** +*"Kael and Naia look... off. Naia's talking a lot. Kael's nodding but he's somewhere else. Something's going on at home. He doesn't say."* + +**Detective monologue:** +*"Couple — the dock worker, Davan, and the woman who sits with Sera sometimes. She's animated; he's distracted. Relationship tension. That level of checked-out usually means someone's keeping something."* + +**What the mirror reveals:** The smuggler reads this as a friend's private trouble that deserves respect and distance. The detective reads it as behavioral evidence — someone keeping something from a partner. Same visible tension. One character looks away; the other leans in. + +--- + +### Mirror 9: The Manifest Terminal + +**Trigger:** `observe_npc` or `enter_location` — The freight manifest terminal in the terminal hub. + +**Shared observation:** A freight terminal kiosk showing manifest data. Busy during shifts; the data moves constantly. + +**Smuggler monologue:** +*"That's Maret's terminal. She's got access to all the schedules from here. If anything's getting flagged in the manifest data, she'd see it before anyone else. Maret's solid. She won't say anything."* + +**Detective monologue:** +*"Freight manifests for the last six months, loaded from here. The cluster analysis shows three anomaly windows, all at shift transition. That's not clerical error. Someone's using this terminal to adjust records after the fact."* + +**What the mirror reveals:** The smuggler sees a trusted colleague's workspace and trusts that colleague's loyalty. The detective sees the exact location where evidence of the ring's operations lives. The terminal is simultaneously proof of criminal activity and proof of a trusted relationship — depending on which character is reading it. + +--- + +### Mirror 10: The End of Shift + +**Trigger:** `observe_npc` — Watching the shift change happen across the terminal floor — workers clocking out, new crew arriving, a brief period of cross-traffic and handoffs. + +**Shared observation:** Dozens of workers moving at once. The shift change is organized chaos. Cargo gets routed, schedules are handed off, the floor changes. + +**Smuggler monologue:** +*"Shift transition. Twenty-minute window. The floor's all cross-traffic now — nobody's tracking individual movement. This is when it runs."* + +**Detective monologue:** +*"Shift change. Every anomaly in my manifest data clusters around this. The window. The handoff moment. Someone is using the cross-traffic as cover. But for WHAT?"* + +**What the mirror reveals:** The smuggler knows exactly what the shift change covers. The detective sees the pattern but not the specific. Both characters observe the same 20-minute window of organized chaos. One is running something through it; the other is trying to figure out what's being run. + +--- + +## 4. Mirror Moment Authoring Rules + +### Rule 1: Both sides are mandatory +A mirror moment is only complete when both the smuggler monologue and the detective monologue are authored. Omitting one side is a content gap. + +### Rule 2: Same trigger key, different pool +Both lines use the same `trigger` type and similar `prerequisite` conditions. They appear in separate character monologue files (D-032 hard partition). The only difference is the `character` tag. + +### Rule 3: No shared content +Neither monologue line should directly reference the other or acknowledge the other character's frame. Each line is internally coherent to its character. The divergence is created by the CHARACTER's relationship to the world, not by explicit contrast. + +### Rule 4: The lines must stand alone +A player who only plays one character should not feel the mirror moment is incomplete. Both lines should work as independent character voice — good monologue that stands on its own. + +### Rule 5: Tag all mirrors for tracking +Add `tags: [mirror_moment]` to both sides of every mirror pair so they can be identified and validated as a set. + +--- + +## 5. YAML Example + +```yaml +# Smuggler side — monologue-smuggler.yaml +- id: transit_m_s_044 + character: smuggler + trigger: observe_npc + prerequisite: + location: the-terminal + target: npc:naia-tamm + relationship_state: Known + text: "Naia's here without Kael again. She looks rough. Should check in. ...Not now. Later." + mood: [concerned, fond] + topic: [colleague] + tags: [mirror_moment, mirror_worried_partner] + +# Detective side — monologue-detective.yaml +- id: transit_m_d_044 + character: detective + trigger: observe_npc + prerequisite: + location: the-last-shift + target: npc:naia-tamm + text: "That woman — Tamm, I think Sera mentioned her — is sitting alone. Wrong energy for a social evening. Something at home, or something she's heard?" + mood: [analytical, curious] + topic: [investigation] + tags: [mirror_moment, mirror_worried_partner] +``` + +--- + +## 6. Validation Checklist + +For each mirror pair: + +- [ ] Both sides authored +- [ ] Same trigger type used +- [ ] Both sides use `tags: [mirror_moment, {mirror_name}]` +- [ ] Lines stand independently as character voice +- [ ] Emotional register diverges (personal vs. analytical, OR equivalent meaningful contrast) +- [ ] No shared vocabulary that implies the characters are comparing notes +- [ ] Prerequisites match (same NPC, same location condition, equivalent state requirements) + +--- + +## 7. Expansion Notes (Post-v0.1) + +Additional mirror moments to author in future content passes: + +- **The Missing Person Notice:** A posted notice near the bar about a missing dock worker (pre-existing, unrelated to main plot). Smuggler: "People disappear. Station life." Detective: "Filed under 'before my posting.' What was the investigative status?" +- **Voss Walking the Floor:** The shift supervisor doing a routine floor inspection. Smuggler sees cover being maintained. Detective sees a potential informant. +- **Drin's Inspection:** Dock inspector doing a container verification. Smuggler knows Drin will find nothing. Detective sees the inspection as either genuine compliance or evidence of a compromised process. + +--- + +*Ticket #329 — Mirror moment design document. 10 paired observations. v0.1 scope.*