chore(docs): remove content-converter and content-ron Makefile target

The YAML→RON converter and its make target are v0.1 artifacts superseded
by the v0.2 RON-first generator pipeline. content-ron/ was already
gitignored; this removes the tool that generated it.

Closes #667.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 15:00:46 +01:00
co-authored by Claude Opus 4.6
parent dfcd7bc96d
commit 453983ffd2
30 changed files with 3 additions and 3562 deletions
@@ -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.*
@@ -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: pc-smuggler_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: pc-detective_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.*
+632
View File
@@ -0,0 +1,632 @@
# THE MIRROR — NPC Pattern Specification
**Pattern Type:** Production-level Tier 1 (emotional depth, full 10-axis model)
**Design Principle:** Transparency as contrast mechanism
**Ticket:** #380
**Reference Implementation:** Naia Tamm (Sova Transit District v0.1)
---
## 1. Pattern Definition
THE MIRROR is the honest-character NPC pattern. No contradiction arc, no deep secret, no hidden agenda. MIRROR NPCs are transparent — what you see is what you get.
**Core mechanic:** Their role in the system is to make surrounding dishonesty visible by contrast. When everyone else is hiding something, the one person who isn't becomes the emotional anchor.
**Design payload:** In a game built around asymmetric information and deception detection, THE MIRROR is the NPC whose absence of deception becomes its own kind of content. The player learns to read tells on every other NPC — facial tics, evasive answers, spatial deviations. Encountering someone without tells is disorienting and emotionally significant.
**Thematic integration:** THE MIRROR connects directly to Gore's contentment axis and the game's central question: "Is this enough?" The MIRROR NPC typically answers: "It was enough — until everything around me started falling apart." Their contentment is genuine, their worry is genuine, their emotional reactions are genuine. That honesty makes everyone else's lies painful by proximity.
---
## 2. Mechanical Rules
### What MIRROR NPCs Do NOT Have
| Absent System | Why Missing | Content Signal |
|--------------|-------------|----------------|
| **No tells** | Tells imply deception or concealment. MIRROR has nothing to conceal from the player (though they may be uninformed about events around them). The absence of tells IS the tell — when the player has learned to read behavioral flags on every other NPC, encountering someone without them is the anomaly. | The player's monologue might note: "No hesitation. No evasion. Either she's telling the truth or she's the best liar I've ever met." The absence becomes noticeable. |
| **No dishonesty ≠ no misinformation** | MIRROR NPCs can be *wrong* without being *deceptive*. A MIRROR who has been lied to will repeat that lie in good faith -- they are transparent about what they believe, not omniscient about what is true. Naia reporting "Kael said he's picking up extra shifts" is honest transmission of a lie she was told. | The player recognizes the MIRROR is being used as an unwitting conduit. This makes the liar's deception feel worse, not the MIRROR's honesty feel cheaper. |
| **No secrets** (or only mundane surface-level ones) | The `secret_held` field is empty or contains only ordinary privacy (e.g., "worried about partner's late nights" — visible to anyone observant). No trust gates that reveal hidden criminal knowledge or conspiracies. | If a MIRROR has a "secret," it's one they'd share with a sympathetic stranger at a bar. There's no revelation moment where the player discovers the MIRROR was hiding something all along. |
| **No contradiction arc** | No phases, no discovery moment, no color shift from green to amber. The relationship with MIRROR is stable across the session. | The trust level may deepen (public → insider → peer), but there's no betrayal moment. The MIRROR you meet at minute 5 is the same MIRROR at minute 25. |
| **No trust-gated dialogue that changes the picture of who they are** | Trust progression reveals more FEELING, not more SECRETS. Deeper access tiers show emotional vulnerability, not concealed information. | At `public` tier: "I'm worried about Kael." At `peer` tier: "I don't know what to do. I love him, but I can't keep living like this." Same truth, deeper emotion. |
### What MIRROR NPCs DO Have
| Present System | Function | Why Essential |
|---------------|----------|---------------|
| **Full 10-axis profile** | Want, Secret/Vulnerability, Relationships 1-3, Tolerance, Routine, Information, Contentment, Personality, Tell (absent), Skills | MIRROR is not a shallow NPC. They're Tier 1 depth — full emotional complexity, just without deception. |
| **Tier 1 emotional depth despite pattern simplicity** | Rich personality, genuine reactions, emotional stakes in the world around them | The player trusts the MIRROR because the MIRROR is WORTH trusting. They're not a cardboard cutout labeled "honest person." They're a complete character whose honesty is part of their identity. |
| **Genuine emotional reactions to the world** | MIRROR NPCs respond to events around them with authentic worry, joy, confusion, anger — whatever fits their personality and situation | When the ring's actions threaten someone the MIRROR loves, the MIRROR's distress is real. The player FEELS it because they've learned this person doesn't perform emotions — they experience them. |
| **Emotional vulnerability as content** | The MIRROR's lack of deception makes them emotionally EXPOSED. They wear their worry visibly. They confide in friends. They react honestly to stress. | This vulnerability is load-bearing. The player becomes protective of the MIRROR. Threats to the MIRROR create player urgency. |
---
## 3. Content Requirements
**Total authored line budget:** 50-70 lines (Tier 1 MIRROR is slightly lower than FRIEND pattern's 70-100, because no contradiction arc content)
| Content Type | Line Count | Function |
|-------------|-----------|----------|
| **Dialogue** | 25-35 | Greetings (5), emotional state conversation (8-10), relationship discussion (5-7), situation responses (5-8), peer-tier vulnerability (3-5) |
| **Trust-gated dialogue** | 10-15 | Deeper emotional exposure at insider/peer tiers. Not secret revelations — emotional revelations. "I'm scared" vs "I'm worried." |
| **Unprompted lines** | 3-5 | MIRROR volunteers emotional state or asks for help. "Have you seen Kael today? I'm worried." |
| **Monologue triggers** | 10-15 per character | Player's internal reaction to MIRROR's honesty. Smuggler: guilt (if protecting someone the MIRROR loves). Detective: relief (finally someone not lying) + strategic value (MIRROR as witness to behavioral change). |
| **Voice sample** | 3-5 lines | Covering: baseline warm, worried, brittle (close to tolerance break) |
**No contradiction discovery content.** No tell observation content (because no tells). No phase-shift dialogue. This is where MIRROR saves budget relative to FRIEND.
### Dual-Lens Distribution
**Smuggler perspective (if MIRROR is connected to a ring member):** Emotional collateral. The MIRROR's worry creates guilt. The smuggler knows WHY the person the MIRROR loves is behaving strangely and can't say. Seeing the MIRROR's distress is a cost of operations.
**Detective perspective:** Potential witness + emotional anchor. A partner who suspects their loved one is hiding something is a classic entry point for investigation. The MIRROR knows behavioral patterns, routines, recent changes. The detective can cultivate trust by being sympathetic.
---
## 4. Tell System Rules
**Core principle:** MIRROR has no tells because tells imply deception or concealment.
### The Absence-as-Content Design
| What the Player Experiences | System State | Mechanical Expression |
|-----------------------------|--------------|---------------------|
| Early game: MIRROR seems ordinary | No behavioral flags set. No `contradiction_flagged`. No tell observations in monologue. | The player's training (from interacting with NPCs who DO have tells) hasn't fired. This feels normal. |
| Mid game: Player has learned to read other NPCs | The player has observed: Kael looks left when lying, Sera leaves when Torek arrives, Voss fidgets when questioned about manifests. | The player's mental model now expects tells. They're watching for them. |
| MIRROR interaction: No tells present | Player talks to MIRROR. MIRROR makes eye contact, answers directly, emotional state matches words. No spatial deviation, no topic deflection, no nervous tics. | The ABSENCE is striking. The player's monologue notes it: "No hesitation. She's either telling the truth or she's the best actor I've ever seen." |
| Resolution: Trust through transparency | If the player cross-references MIRROR's information with other sources, it checks out. MIRROR was telling the truth. | The player LEARNS that honesty exists in this world. That one person isn't performing. That becomes the emotional fulcrum for everything else. |
### How This Interacts with the Contradiction System
FRIEND NPCs have contradiction arcs: warmth → trust → doubt → conflict. Color shifts green to amber. The emotional payload is betrayal.
MIRROR NPCs have NO contradiction arc. Color remains green (or progresses public → insider → peer within green). The emotional payload is RELIEF and PROTECTION.
**Mechanical distinction:**
- FRIEND: `EntityKnowledge.state` transitions to `KnowledgeState::Contradicted` when tells accumulate.
- MIRROR: `EntityKnowledge.state` remains `KnowledgeState::Confirmed` or `KnowledgeState::Direct`. No contradiction flags ever set.
**Content signal:** The player's monologue about MIRROR evolves from neutral observation to active trust: "She's worried. Can't blame her — her partner is acting strange." → "I believe her. She doesn't know what's happening, but she's telling me everything she does know."
---
## 5. Dialogue Architecture
MIRROR dialogue follows the standard four-layer system (D-028) but with simplified secret-tier structure.
### Access Tiers (Layer 1)
| Tier | What MIRROR Shares | Example |
|------|-------------------|---------|
| **Public** | Observable emotional state, general information about their life/relationships | "I teach at the community school. The kids are doing well this term." |
| **Insider** | Specific worry, named relationships, genuine vulnerability | "Kael's been coming home late. Says it's work, but the schedule doesn't match. I don't know what to think." |
| **Peer** | Deep emotional exposure, requests for help or advice | "I'm scared, honestly. Not of Kael — of what Kael might be involved in. I don't know who else to talk to." |
| **Authority** (if detective) | Cooperation with investigation, willingness to provide information about loved one despite emotional cost | "If you think Kael is in trouble, I want to know. I'll help if I can. Just — please don't hurt him." |
**No secret tier that reveals hidden criminal knowledge.** The MIRROR doesn't have hidden criminal knowledge. The "secret" tier for MIRROR is the deepest emotional vulnerability, not a plot revelation.
### Trust Progression
```
Public (stranger) → Insider (acquaintance) → Peer (trusted friend) → Authority (if applicable)
What changes: Depth of emotional sharing, not type of information.
What doesn't change: The facts. MIRROR tells the same truth at all tiers. The emotion around it deepens.
```
**Example progression (Naia about Kael):**
- **Public:** "Kael works at the freight hub. Dock worker. We've been together six years."
- **Insider:** "Kael's been stressed lately. Late nights, evasive when I ask about it. I'm worried."
- **Peer:** "I love him. But I can't keep doing this — the not-knowing is killing me. I think something's wrong. I just don't know what."
- **Authority (detective):** "If you're investigating something at the hub, and if Kael is involved — I need to know. I'll help. I just need the truth."
Same story. Deeper emotion. No revelation that changes the player's understanding of who Naia is.
### Monologue Trigger Design
MIRROR NPCs trigger monologue focused on the PC's EMOTIONAL REACTION to the MIRROR's honesty, not on information extraction.
**Smuggler monologue about MIRROR (if MIRROR is connected to ring member):**
| Trigger | Monologue Content | Emotional Layer |
|---------|------------------|-----------------|
| Observe MIRROR waiting at bar | "Naia's at the bar again. Alone. Keeps looking at the door. I know where Kael is. I can't say." | Guilt. The smuggler's operational knowledge creates distance from the MIRROR's suffering. |
| MIRROR asks about loved one | "She asked if I'd seen Kael today. What do I say? 'Yeah, he's fine, just moving contraband?' Can't tell her. Can't lie to her face either." | Moral tension. The MIRROR's directness makes evasion feel worse. |
| MIRROR shares deep worry | "She's really scared. Not just worried — scared. And she has no idea what's actually happening. If she knew..." | Protective instinct + guilt. The smuggler wants to shield the MIRROR from both the truth and the consequences. |
**Detective monologue about MIRROR:**
| Trigger | Monologue Content | Emotional Layer |
|---------|------------------|-----------------|
| First conversation with MIRROR | "She's not hiding anything. I've interviewed enough people to know when someone's performing. She's genuinely worried." | Relief. In a district where everyone seems evasive, the MIRROR is a breath of fresh air. |
| MIRROR shares information about loved one | "She knows his routine better than anyone. The late nights, the evasions — she's been tracking them without realizing it. She's building my case for me." | Strategic recognition. The MIRROR is a witness to behavioral change — the best kind. |
| MIRROR asks for help | "She wants me to figure out what's wrong. Not to arrest anyone — just to know. That's... trust. Real trust." | Emotional weight. The detective realizes the investigation has personal stakes for the MIRROR. Success means breaking someone's heart. |
---
## 6. Naia Tamm — Reference Implementation
Naia Tamm is the v0.1 MIRROR NPC in Sova Transit District. Let me walk through how her 10-axis profile demonstrates each MIRROR rule.
### Core Identity
- **Name:** Naia Tamm
- **Age:** 33
- **Role:** Teacher, Station Sova community school
- **Social Site:** The Last Shift (Bar)
- **Triangle:** Triangle 4 — The Worried Partner (Naia - Kael - Sera)
### 10-Axis MIRROR Implementation
#### 1. Want (Tier 1 depth, no deception)
**Primary:** Understand what's happening with Kael.
Naia and Kael have been together 6 years. Kael started coming home late, evasive answers, money that doesn't match hours. Naia doesn't know about the ring. Naia knows the person they share a life with is hiding something. The not-knowing is worse than almost any truth.
**Secondary:** Protect the life they've built.
Naia wants it resolved without destroying everything — the home, the relationship, the stability. This is why Naia confides in Sera instead of confronting Kael directly: wants advice, not a fight.
**MIRROR rule demonstrated:** Want is ABOUT someone else's secret, not concealing Naia's own. Naia's motivation is transparent to the player from the first conversation.
#### 2. Secret / Vulnerability (surface-level only)
**Surface secret:** Worried about Kael. Visible to anyone who sees Naia's stress.
**Deep secret:** Naia confided in Sera about Kael's behavior. This is the action that set Sera's compliance check in motion, though Naia doesn't know that. Naia shared a personal worry with a trusted friend.
**Vulnerability:** Emotional exposure. Naia's worry is genuine, visible, exploitable.
**MIRROR rule demonstrated:** Naia's "secret" is that she confided in a friend. That's not a conspiracy — it's ordinary human behavior under stress. The vulnerability is EMOTIONAL, not criminal.
#### 3. Relationships (genuine, no hidden agendas)
**Kael Davan (partner, 6 years):** Deep love, growing anxiety. Doesn't question Kael's character — just Kael's honesty.
**Sera Venn (close friend, 10 months):** Genuine friendship. Trusts Sera as someone who can give perspective without gossip.
**Lera Sessik (bar acquaintance):** Social connection. Lera is warm to Naia — protective attention to someone visibly struggling.
**MIRROR rule demonstrated:** All relationships are exactly what they appear to be. No hidden resentments, no secret alliances, no ulterior motives. Naia likes who she likes for straightforward reasons.
#### 4. Tolerance Threshold (moderate, genuine limits)
**Moderate.** Patient — teaching station kids requires it. But patience is fraying. Every evasive answer from Kael chips at tolerance. If pushed to breaking point, Naia confronts Kael directly — which could trigger Kael's crisis, force Sera's hand, or give the detective an opening.
**MIRROR rule demonstrated:** Tolerance threshold is real and observable. No hidden resilience, no secret breaking point. What Naia says she can tolerate is what she can tolerate.
#### 5. Daily Routine (predictable, no spatial deviations)
- 07:00 - 15:00: Teaching (community school, Residential Radial A)
- 15:00 - 15:30: Commute back to Transit District
- 15:30 - 17:30: Bar (The Last Shift) — meets Sera, social time
- 17:30 - 22:00: Home. Waits for Kael.
- Late evenings: Alone in apartment, wondering where Kael is.
**MIRROR rule demonstrated:** Routine is stable, observable, doesn't hide anything. Naia is where she says she'll be. No unauthorized corridor meetings, no suspicious timing patterns. The routine itself is transparent.
#### 6. Information Inventory (knows what she knows, doesn't know what she doesn't)
**Knows:** Kael's normal routine (6 years of partnership), Kael's recent deviations (late nights, evasive answers), Sera's Commission role (knows Sera is a tech, not investigator), bar social dynamics, school community.
**Doesn't know:** Ring, smuggling, Kael's membership, manifest discrepancies, Sera's compliance check, the detective's investigation.
**MIRROR rule demonstrated:** Naia's knowledge state is exactly what it appears to be. She's not concealing anything she knows. She genuinely doesn't know the conspiracy exists. This makes her the perfect witness to BEHAVIORAL change without knowledge of CAUSE.
#### 7. Contentment (low and declining — thematically essential)
**Was content:** Stable job, loving partner, community. Now relationship anxiety is coloring everything. Teaching is harder when distracted. Bar visits tinged with worry. Home is where the absence lives.
**MIRROR rule demonstrated:** Contentment trajectory is VISIBLE and GENUINE. Naia isn't pretending to be happy or hiding dissatisfaction. Her emotional state is observable in her voice, her behavior, her routine changes (increased bar presence = avoiding empty apartment).
#### 8. Personality Traits (no performance, no mask)
- **Primary: Caring** — genuinely invested in other people's wellbeing
- **Secondary: Patient** — tolerates uncertainty longer than most, but not indefinitely
- **Tertiary: Perceptive** — reads emotional states well. Knows when Kael is lying even if can't prove it.
**MIRROR rule demonstrated:** These traits are REAL, not performed. Naia's caring isn't a manipulation tactic. Her perceptiveness makes her WORRIED (she knows something's wrong) but doesn't make her SUSPICIOUS (she trusts Kael's character even while doubting his honesty about the situation).
#### 9. Tell System (ABSENT — the design payload)
Naia's entry in the wiki lists three "tells":
| Tell | Trigger | Observable To |
|------|---------|---------------|
| Visible stress | Tired eyes, distracted conversation, checking lattice | Sera, Lera, Detective, bar regulars |
| Mentions Kael unprompted | Worry overflowing into conversation | Sera, Detective (if sitting nearby) |
| Increased bar presence | Coming more often, staying longer — avoiding empty apartment | Lera (notices pattern), Sera (recognizes coping mechanism) |
**CRITICAL MIRROR DISTINCTION:** These are NOT tells in the deception-detection sense. They're not "behavioral flags that signal concealment." They're GENUINE STRESS MARKERS. Naia is visibly worried because Naia IS worried. There's no contradiction between internal state and external behavior.
**The system perspective:** A TELL is a deviation that signals deception (Kael looks left when lying, Sera leaves when Torek arrives). Naia's behaviors are COPING MECHANISMS and EMOTIONAL EXPRESSIONS, not tells. The player's monologue doesn't say "She's hiding something." It says "She's really struggling."
**MIRROR rule demonstrated:** The absence of deception-tells IS the content. The player who has learned to read evasion on other NPCs will notice that Naia makes direct eye contact, answers questions fully, doesn't deflect topics, doesn't have spatial anomalies beyond her normal routine. That ABSENCE becomes the signal: "This person is being honest with me."
#### 10. Skill Set (civilian, no hidden capabilities)
**Occupational:** Teaching, community engagement, youth education, curriculum management.
**Combat tag:** NO. Entirely civilian.
**Lattice capability:** Baseline.
**MIRROR rule demonstrated:** No hidden skills, no secret training, no combat capability concealed behind a civilian facade. Naia is exactly what she presents: a teacher who's worried about her partner.
### Naia's Triangle Role (Emotional Center)
**Triangle 4: The Worried Partner (Naia - Kael - Sera)**
Naia is the emotional center. Naia's worry about Kael triggered Sera's investigation. Naia's trust in Sera makes Sera's concealment more painful. Naia connects the detective's investigation to Kael's personal life through Sera, through Naia's own observations, through the fact that a worried partner is the best witness to behavioral change.
**Why MIRROR works here:** Naia is UNINVOLVED in the conspiracy but CENTRAL to its emotional impact. She's the person both the smuggler and detective want to protect — and the person whose honest worry makes the smuggling operation's human cost visible. If Naia were lying, the triangle would be about competing deceptions. Because Naia is honest, the triangle is about the COST of everyone else's deceptions.
### Dual-Lens Implementation
**Smuggler perspective (if smuggler is Kael's friend):**
Naia is emotional collateral. The smuggler knows why Kael is busy and can't say. Seeing Naia's worry creates guilt. If Naia asks the smuggler about Kael, there's no good answer.
Sample monologue: *"Naia's at the bar again. Alone. Looking at the door every time it opens. I know where Kael is. I can't say."*
**Detective perspective:**
Naia is a potential source. A partner who suspects their loved one is hiding something is a classic entry point. The detective can cultivate Naia's trust by being sympathetic — listen, validate, gently probe. Naia might not know specifics, but knows Kael's routine, habits, recent changes better than anyone.
Sample monologue: *"The partner — Naia Tamm. Teacher. Visibly stressed. Keeps looking at the door. If Davan is involved, this partner knows something changed, even if they don't know what."*
**MIRROR payload in dual-lens:** SAME transparency, DIFFERENT player reaction. Smuggler feels guilt. Detective sees opportunity. Both recognize honesty. The MIRROR's transparency makes the two characters' different relationships to truth more visible by contrast.
---
## 7. Generator Template
For creating future MIRROR NPCs. This is the content pack structure for a MIRROR.
### Profile Fields (What to Fill)
```yaml
npc_id: "{name-lowercase}"
name: "{Full Name}"
age: {25-50 typical}
role: "{Occupation — typically civilian}"
social_site: "{Primary location}"
tier: 1 # MIRROR is Tier 1 depth
pattern: "MIRROR"
entanglement: "mundane" # MIRROR is never directly entangled
# 10-Axis Profile
want:
primary: "{Want that's ABOUT someone else or visible situation — no hidden agenda}"
secondary: "{Want that's protective or stabilizing — preserve what they have}"
secret:
surface: "{Visible emotional state — worry, stress, joy}"
deep: "{Ordinary privacy or emotional vulnerability — NOT conspiracy knowledge}"
vulnerability: "{Emotional exposure, not operational risk}"
relationships:
relationship_1:
target: "{Name}"
type: "{Genuine bond — no hidden resentment}"
history: "{How they met, why they care}"
tension: "{Current stress in relationship — external, not deceptive}"
relationship_2: ...
relationship_3: ...
tolerance: "{moderate/high — describe genuine limits, what would make them break}"
routine:
"{Time range}": "{Activity — predictable, no hidden meetings}"
# No spatial deviations, no unauthorized locations
information:
knows:
- "{Visible facts about their life}"
- "{Behavioral observations about loved ones}"
- "{Community knowledge}"
doesnt_know:
- "{Conspiracy details}"
- "{Hidden agendas of others}"
- "{Secret motivations}"
contentment: "{low/moderate — declining if connected to stressed loved one}"
personality:
primary: "{Caring, Honest, Warm — prosocial trait}"
secondary: "{Patient, Loyal, Perceptive — supportive trait}"
tertiary: "{Genuine emotional responsiveness}"
tell_system:
tells: [] # Empty array — MIRROR has no deception tells
behavioral_markers:
- "{Genuine stress marker — visible worry, not concealment}"
- "{Coping mechanism — increased social presence, routine changes}"
# These are NOT tells. They're genuine emotional expressions.
skills:
occupational: ["{Teaching}", "{Community work}", "{Civilian profession}"]
combat: false # MIRROR is never combat-capable
lattice: "baseline"
```
### Dialogue Content Pack Structure
```yaml
# File: districts/{location}/dialogue/{role}-mirror.yaml
- id: "{npc-slug}_d_001"
text: "Greeting — warm, open, no guardedness"
role: "{role}"
access: ["public"]
trust: "surface"
situation: ["greeting"]
mood: ["warm"]
- id: "{npc-slug}_d_002"
text: "Sharing worry — direct, no evasion"
role: "{role}"
access: ["public", "insider"]
trust: "surface"
situation: ["worried_inquiry"]
mood: ["anxious"]
- id: "{npc-slug}_d_010"
text: "Deep emotional vulnerability — peer tier"
role: "{role}"
access: ["peer"]
trust: "real" # Not 'secret' — MIRROR has no secrets tier content
situation: ["emotional_crisis"]
mood: ["desperate"]
# Monologue content (separate per character, per D-032)
# File: districts/{location}/monologue/smuggler/{location}.yaml
- id: "pc-smuggler_m_s_001"
text: "Smuggler feels guilt observing MIRROR's distress"
character: "smuggler"
trigger: "observe_npc"
prerequisite:
target.known_attributes.name: "{Name}"
target.known_attributes.emotional_state: "worried"
# File: districts/{location}/monologue/detective/{location}.yaml
- id: "pc-detective_m_d_001"
text: "Detective recognizes MIRROR as honest witness"
character: "detective"
trigger: "post_conversation"
prerequisite:
target.known_attributes.name: "{Name}"
target.known_attributes.honesty_assessment: "transparent"
```
### What Fields to Leave Empty
| Field | State | Why |
|-------|-------|-----|
| `tell_system.tells` | Empty array `[]` | MIRROR has no deception tells |
| `secret.criminal_knowledge` | Omit entirely | MIRROR doesn't have criminal secrets |
| `contradiction_arc` | Omit entirely | MIRROR has no contradiction phases |
| `access: ["authority"]` content | Minimal | Only if MIRROR cooperates with investigation — still no secret reveals |
| `trust: "secret"` tier content | Omit or minimal | MIRROR's deepest tier is emotional vulnerability, not plot revelation |
### What Makes a Good MIRROR Candidate
**Ideal MIRROR characteristics:**
1. **Emotionally connected to an entangled NPC** — Partner, sibling, close friend of someone in the conspiracy. Their honesty makes the conspiracy's human cost visible.
2. **Civilian role** — Teacher, bartender, service worker. Not institutional (Commission, Security). Not criminal. Represents ordinary life.
3. **Observable worry or stress** — MIRROR's emotional state is VISIBLE because they don't hide it. Their distress is the content.
4. **Genuine perceptiveness** — MIRROR notices behavioral changes in loved ones but doesn't KNOW the cause. "Something's wrong" without "I know what's wrong." Perfect witness to change without knowledge of crime.
5. **Prosocial personality** — Caring, loyal, honest. The player trusts them BECAUSE they're trustworthy. The game needs at least one person whose goodness is real.
**Poor MIRROR candidates:**
- NPCs with institutional power (they'd have investigative tools)
- NPCs with hidden skills or backgrounds (contradicts transparency)
- NPCs who are themselves criminals (MIRROR must be genuinely uninvolved)
- NPCs without emotional stakes in the district (MIRROR's honesty is load-bearing only if they CARE)
---
## 8. Design Notes: Why MIRROR Isn't Boring
**The risk:** A character with no secrets, no tells, no contradiction arc sounds mechanically thin. "Just an honest person" doesn't feel like a gameplay system.
**Why it works:**
### The Contrast Mechanic
MIRROR is mechanically interesting BECAUSE of the surrounding systems. In a game where:
- Every FRIEND has a contradiction arc (warmth → doubt → conflict)
- Every CATALYST disrupts equilibrium through action
- Every SYSTEM embodies corrupted institutions
- Every WITNESS carries dangerous knowledge
- Every GHOST applies pressure from off-screen
...the ONE character with no deception becomes the ANCHOR. The player learns to expect complexity, hidden agendas, behavioral tells. MIRROR subverts that learned expectation by being EXACTLY what they appear to be.
**Mechanical payload:** The observation pipeline (Ozzie + Gestalt + Paula's unified system) trains the player to notice tells. The MIRROR's ABSENCE of tells is itself an observation event. The player's monologue fires: "No evasion. No deflection. Either honest or the best liar I've encountered." The uncertainty itself creates tension until the player verifies the honesty.
### The Emotional Fulcrum
When the ring's actions threaten the MIRROR (Naia worrying about Kael, potentially losing her relationship and stability), the player FEELS it because they've learned to believe this person.
**Smuggler:** The guilt of watching an innocent person suffer because of your operations. You can't tell her. You can't protect her. You're part of the cause of her pain.
**Detective:** The weight of knowing your investigation will break this person's life. Success means revealing that her partner is a criminal. The MIRROR trusted you to find answers — and the answers will destroy her.
**That's the design payoff.** MIRROR's transparency isn't boring — it's the emotional investment that makes the conspiracy's consequences real. The player cares about protecting the MIRROR because the MIRROR is the one person in the district who isn't performing, isn't hiding, isn't playing angles. That honesty makes them precious.
### The Trust Anchor
In a district where everyone has an agenda, the MIRROR is the person the player can RELY on. When the smuggler needs to know what's happening with Kael, Naia will tell the truth as she understands it. When the detective needs a witness, Naia will cooperate fully. The MIRROR's reliability is itself a strategic asset — but one that comes with emotional cost (using an innocent person's trust).
**System interaction:** The trust-gated gossip system (D-028 Layer 3, #171) means NPCs share information at different access tiers. With most NPCs, the player wonders: "Is this real or are they steering me?" With MIRROR, that question is answered: "This is real. She's telling me everything she knows." That certainty is VALUABLE in a game built on asymmetric information.
### The Replay Dimension
On second playthrough, playing the other character, the MIRROR's honesty becomes even more visible. The player KNOWS Naia isn't involved. They see her worry from a different angle:
- **Playthrough 1 (smuggler):** "I know why Kael is busy. Naia's worry is collateral damage."
- **Playthrough 2 (detective):** "Naia's worry is my opening. She's the way in."
Same honesty. Different use. The player's knowledge that Naia is a MIRROR (from first playthrough) makes the second playthrough's interaction with her more complex: "I know she's honest. How do I use that? Should I?"
**Replay payload:** MIRROR transparency survives across playthroughs. FRIEND contradictions change (different seed might assign FRIEND to different NPC). MIRROR remains honest regardless of seed. That constancy is mechanically useful for teaching the player to recognize honesty — and ethically complex when the player knows they'll exploit it.
---
## 9. Implementation Checklist
For developers implementing a MIRROR NPC:
### ECS Component Setup
```rust
// MIRROR NPCs use standard NPC components but with specific flags
NPCProfile {
pattern: NPCPattern::Mirror,
tier: ContentTier::One, // MIRROR is always Tier 1
entanglement: EntanglementLevel::Mundane, // Never directly criminal
}
TellSystem {
tells: vec![], // Empty — no deception tells
behavioral_markers: vec![
BehavioralMarker::VisibleStress,
BehavioralMarker::EmotionalExpression,
// These are NOT tells — they're genuine coping mechanisms
],
}
ContradictionState {
has_contradiction_arc: false, // MIRROR never contradicts
relationship_phase: RelationshipPhase::Stable, // No phase transitions
}
SecretInventory {
criminal_secrets: vec![], // Empty
personal_vulnerabilities: vec![
Vulnerability::EmotionalExposure,
Vulnerability::UninformedWitness,
],
}
```
### Dialogue System Configuration
```rust
// MIRROR dialogue has simpler trust structure
DialogueProfile {
access_tiers: vec![
AccessTier::Public, // General conversation
AccessTier::Insider, // Named relationships, specific worries
AccessTier::Peer, // Deep emotional vulnerability
AccessTier::Authority, // (Optional) Cooperation with investigation
],
trust_gates: vec![
TrustGate { tier: TrustTier::Surface, access: [Public, Insider] },
TrustGate { tier: TrustTier::Real, access: [Peer, Authority] },
// NO TrustTier::Secret — MIRROR doesn't have secret-tier content
],
}
```
### Knowledge System Integration
```rust
// Observer's knowledge state about MIRROR
EntityKnowledge {
state: KnowledgeState::Confirmed, // Or Direct. Never Contradicted.
known_attributes: {
"honesty_assessment": "transparent",
"reliability": "solid",
"facade_status": "N/A", // MIRROR has no facade
"emotional_state": "worried", // Visible, genuine
"threat_to_position": "none", // MIRROR is not operationally dangerous
"moral_standing": "innocent", // Never shifts to complicit
},
contradiction_flagged: None, // MIRROR never flags contradictions
}
```
### Monologue Event Triggers
```rust
// When player observes MIRROR, monologue focuses on emotional reaction
if npc.pattern == NPCPattern::Mirror {
if observer.has_learned_to_read_tells() {
// Trigger "absence of tells" observation
monologue_event = MonologueEvent {
trigger: MonologueTrigger::ObserveNPC,
target: npc.entity_id,
filter_tags: ["honesty_recognition", "emotional_anchor"],
};
}
if npc.emotional_state == EmotionalState::Distressed
&& observer.knows_cause_of_distress()
&& !observer.can_share_knowledge() {
// Trigger guilt/conflict monologue (if smuggler)
monologue_event = MonologueEvent {
trigger: MonologueTrigger::ObserveNPC,
target: npc.entity_id,
filter_tags: ["guilt", "emotional_collateral"],
};
}
}
```
### Testing Validation
**MIRROR correctness tests:**
1. **No contradiction flags should ever set** for MIRROR entity.
2. **EntityKnowledge.state should never transition to Contradicted** for MIRROR.
3. **TellSystem.tells should remain empty array** throughout session.
4. **Monologue events about MIRROR should NOT include tags:** `"deception"`, `"evasion"`, `"suspicious"`.
5. **Monologue events about MIRROR SHOULD include tags:** `"honesty"`, `"transparency"`, `"genuine"`, `"emotional_anchor"`.
6. **Trust progression should not unlock "secret" tier content** — only surface/real tiers should have content.
---
## Summary
**THE MIRROR pattern is the emotional foundation of the game's moral complexity.**
In a world where everyone is hiding something, the one person who isn't becomes the player's anchor — and their vulnerability. The MIRROR's transparency is mechanically expressed through the ABSENCE of systems (no tells, no contradiction arc, no secrets) that are present on every other NPC. That absence becomes visible through contrast.
**The design works because:**
- The observation pipeline trains the player to expect deception
- The MIRROR subverts that expectation through consistent honesty
- The player's verification of honesty (cross-referencing MIRROR's info against other sources) creates trust
- That trust makes the MIRROR's emotional stakes real
- Threats to the MIRROR create urgency and moral weight
**Naia Tamm demonstrates every rule:** She has full Tier 1 depth, genuine emotional complexity, visible stress, transparent relationships, predictable routine, and zero deception. Her honesty makes Kael's secrets painful, Sera's concealment costly, and the investigation's human consequences visible.
**For content authors:** MIRROR is mechanically simple (no contradiction content) but emotionally complex (full 10-axis depth). The 50-70 line budget focuses on genuine emotional expression, trust progression through vulnerability, and dual-lens player reaction. The MIRROR is the person both characters want to protect — and the person who makes the cost of deception real.
---
**End Pattern Specification.**
**Files referenced:**
- `/var/mnt/data/projects/settled-reach/copy/wiki/npcs/naia-tamm.md` — Reference implementation
- `/var/mnt/data/projects/settled-reach/copy/decisions/content.md` — D-024 (10-axis model), D-028 (dialogue architecture), D-029 (entanglement ratio), D-032 (separate monologue pools), D-034 (THE FRIEND pattern), D-035 (tag taxonomy)
- `/var/mnt/data/projects/settled-reach/copy/docs/workshops/v01-content-scoping/round2-gestalt.md` — Pattern definitions and NPC mapping
- `/var/mnt/data/projects/settled-reach/copy/docs/workshops/v01-gap-analysis/round2-gestalt.md` — Unified observation system, character identity integration