Files
settled-reach/docs/workshops/wiki-review/round2-paula.md
T
jpmschweitzer 23d9ff0a58 Merge remote-tracking branch 'origin/main' into planning
# Conflicts:
#	CHANGELOG.md
#	content/_meta/README.md
#	content/_meta/npc-authoring-style-guide.md
#	wiki/_templates/cultural-group.md
#	wiki/_templates/institution.md
#	wiki/_templates/star-system.md
#	wiki/characters/devra.md
#	wiki/characters/drin.md
#	wiki/characters/harek.md
#	wiki/characters/lera-sessik.md
#	wiki/characters/maret-korr.md
#	wiki/characters/naia-tamm.md
#	wiki/characters/nils-davan.md
#	wiki/characters/pell.md
#	wiki/characters/renn.md
#	wiki/characters/resha.md
#	wiki/characters/sabel.md
#	wiki/characters/sera-venn.md
#	wiki/characters/torek-lintar.md
#	wiki/characters/voss.md
#	wiki/star-systems/krenn/index.md
2026-03-14 00:24:53 +01:00

33 KiB

title, description, type, status, workshop, agent, round, created
title description type status workshop agent round created
Round 2 — Paula (Librarian, Cross-Pollination) Smuggler lens fix via complicity knowledge graph and cross-agent responses workshop archived wiki-review paula 2 2026-02-12

Round 2 — Paula (Librarian, Cross-Pollination)

Responding to: Gore, Gestalt, Ozzie, Miri, Nigel, Tyre, Mellanie


1. Smuggler Lens Fix: The Complicity Knowledge Graph

Gore is right. The game's theme is complicity, not just asymmetric information. And my Round 1 confession — that the smuggler's content pipeline is systematically under-served compared to the detective's — is the mechanical consequence of missing this.

The detective's experience is shaped by discovery: I didn't know, now I know, what do I do with it? The knowledge graph supports this beautifully (Suspects → KnowsOf → KnowsDetails → Direct).

The smuggler's experience is shaped by management: I already know, things are changing, can I hold it together? The knowledge graph doesn't support this at all. There's no vocabulary for "knowledge I wish I didn't have" or "knowledge that's becoming dangerous to hold."

Let me fix this concretely.

Smuggler-Specific Entity Attributes

These sit alongside the existing detective-oriented attributes in EntityKnowledge.known_attributes. They express the smuggler's social/operational reading of people.

Key Values Purpose Example
operational_status reliable, shaky, compromised, burned How dependable is this NPC for ring operations? Kael: reliableshaky (post-distraction tells)
exposure_risk contained, escalating, critical How likely is this NPC to blow the operation? Torek: escalating (spending draws attention)
loyalty_read solid, conditional, wavering, turning Smuggler's gut assessment of this NPC's allegiance Pell: waveringturning (if smuggler observes signs)
leverage_known free-text string or "none" What gives the smuggler (or someone) power over this NPC? Drin: "gambling debt to Harek"
social_debt owes_me, i_owe_them, mutual, none Informal obligation tracking Kael: mutual (years of covering for each other)
complicity_level clean, passive, active, deep How entangled is this NPC in the operation? Lera: passive (willful ignorance). Voss: active (takes a cut).

How these integrate with the existing system: The detective reads behavior_flags, tell_observed, contradiction_flagged. The smuggler reads operational_status, exposure_risk, loyalty_read. Same EntityKnowledge struct, different attribute keys populated based on the observer's perspective and knowledge base.

Smuggler-Specific FactIds

The smuggler doesn't discover — the smuggler manages. These FactIds track the deterioration of operational security, not the accumulation of evidence.

FactId Suspects KnowsOf KnowsDetails Mechanical Purpose
operations.cover_integrity "Something's off. People are asking more questions than usual." "The operation's cover is thin. Torek's spending, Maret's attention, the new detective — it's adding up." "Cover is compromised. Maret has the manifest data. The detective has a pattern. Pell might talk. We're exposed on three fronts." Core smuggler arc tracker. Gates escalation monologue. The smuggler's equivalent of the detective's progress.initial_suspicion.
operations.personnel_stability "Kael seems distracted." "Kael's unreliable. Pell's wavering. The team isn't solid anymore." "Kael is doing something unauthorized. Pell is actively considering cooperation. Renn suspects Pell and is watching. The ring is eating itself from the inside." Internal threat awareness. Gates the smuggler's decision moments in Triangle 5.
operations.institutional_pressure "Commission presence in the district is... normal? Hard to tell." "There's a Commission investigator working the district. Asking questions at the bar. Talking to Sera." "The detective knows about the manifests. They're building a case. Timeline is weeks, not months." External threat awareness. Gates the smuggler's urgency and risk assessment.
operations.moral_weight "It's just components. People need them." "We're moving medical replacements too now. People whose lattices are failing. This isn't just profit anymore." "I've seen the faces of the people we supply. A kid whose lattice was degrading. A worker who couldn't afford Commission pricing. This is healthcare with a criminal record." The complicity deepener. Gore's "Is this enough?" becomes "Can I stop?" The smuggler's moral knowledge INCREASES, not decreases, over play — and that makes exiting harder, not easier.
operations.exit_cost "What would it take to walk away?" "Walking away means abandoning Kael, leaving Renn exposed, and hoping Nils doesn't come looking." "There is no walking away. I know too much. The people I'd leave behind would pay for my absence. The only exit is through." The trap. The smuggler starts knowing they're in a ring. By mid-game, they know they can't leave. The knowledge itself is the cage.

Smuggler Monologue Triggers

The detective's monologue fires on observation — seeing tells, noticing patterns, analyzing behavior. The smuggler's monologue fires on social awareness — reading rooms, sensing shifts in trust, feeling the ground move under the operation.

Trigger When It Fires Tone Example
sense_atmosphere_shift Multiple NPCs show elevated stress in the same location simultaneously Alert, protective "Something's off today. Voss is reworking manifests again. Maret's avoiding eye contact. Even Sess is polishing glasses harder than usual."
witness_exposure_risk An NPC does something that increases the operation's visibility Anxious, calculating "Torek just bought another round. With what? Everyone can see this. Perk, Torek, you're a walking liability."
observe_loyalty_fracture An NPC the smuggler trusts shows signs of wavering Betrayed, analytical "Pell didn't show for prep. Third time. Renn noticed too — I saw him watching. This is how it starts."
feel_complicity_deepen The smuggler learns something about the consequences of the operation (positive or negative) Conflicted, heavy "That kid at the bar — the one Hael teaches. His lattice is a baseline model with aftermarket stabilizers. Our stabilizers. We put that in his head. Is that a good thing?"
recognize_no_exit The smuggler realizes that their knowledge, relationships, and involvement make leaving impossible Trapped, resigned "I could walk away. Take the next shuttle, start somewhere else. ...And then what? Kael takes my shifts. Renn runs the routes alone. Nils asks where I went. There is no somewhere else."
read_the_room Entering a social site where multiple known NPCs are present Socially fluent, embedded "Lera's behind the bar. Good. Kael's at the corner table with Hael — date night, maybe. Sess is on. Torek's not here yet. Quiet night. I like quiet nights."

The key difference from detective triggers: Detective triggers are analytical — "I notice, I flag, I investigate." Smuggler triggers are relational — "I feel, I read, I manage." The detective's monologue says "That's suspicious." The smuggler's monologue says "That's dangerous." Same observation, different knowledge framework.

How This Resolves Gore's Concern

Gore says the detective lens is "judgment" and the smuggler lens is "complicity." The knowledge graph additions above give complicity mechanical expression:

  • Complicity as knowledge type: operations.moral_weight tracks the smuggler learning that what they do matters to real people. The deeper the knowledge, the heavier the complicity.
  • Complicity as trap: operations.exit_cost tracks the realization that knowledge itself is a cage. The more you know about the operation, the less you can leave.
  • Complicity as social fabric: operational_status, loyalty_read, and social_debt express that the smuggler's complicity isn't just about cargo — it's about people who depend on you and who you depend on.

The detective accumulates evidence against others. The smuggler accumulates evidence against themselves. That asymmetry IS the dual-lens at its deepest level.


2. Unified PC-Candidate NPC Spec

Converging my Round 1 field mapping (12 required + 6 optional + 6 new) with Gestalt's bidirectional knowledge insight (reverse EntityKnowledge entries) and Gore's authored relationship stubs requirement. Also incorporating Ozzie's "first 60 seconds" design — the wow moment requires specific content that the spec must mandate.

The Complete Spec

A PC-candidate NPC is any NPC whose profile contains the additional data needed for player character upgrade. Not all NPCs are PC-candidates. In v0.1, two archetypes exist (smuggler, detective); each has 1+ candidate NPCs.

Section A: Standard NPC Profile (Per Tier Template)

All fields from the standard Tier 1 or Tier 2 template. No changes. The PC-candidate appendix is ADDITIONAL, not a replacement.

Section B: PC-Candidate Appendix

# Appended to any NPC YAML that may become a player character

pc_candidate:
  archetype: "smuggler"           # Which PC archetype this NPC fulfills
  archetype_variant: "ring_member" # Optional sub-variant for randomizer

  # B1: Starting Knowledge Graph
  starting_facts:
    - fact_id: "contraband.ring_exists"
      confidence: "KnowsDetails"
    - fact_id: "contraband.lattice_components"
      confidence: "KnowsDetails"
    - fact_id: "location.corridor_b7_restricted"
      confidence: "KnowsDetails"
    - fact_id: "location.smuggling_route"
      confidence: "KnowsDetails"
    - fact_id: "world.shift_schedule"
      confidence: "KnowsDetails"
    - fact_id: "relationship.ring_membership"
      confidence: "KnowsDetails"
    - fact_id: "operations.cover_integrity"        # smuggler-specific
      confidence: "KnowsOf"
    - fact_id: "operations.personnel_stability"     # smuggler-specific
      confidence: "KnowsOf"
    - fact_id: "investigation.manifest_discrepancy"
      confidence: null                              # doesn't know
    - fact_id: "operations.moral_weight"            # smuggler-specific
      confidence: "Suspects"                        # knows vaguely

  # B2: Starting Relationship Map (forward: what PC knows about each NPC)
  starting_relationships:
    - npc_id: "kael_davan"
      state: "Friendly"
      known_attributes:
        name: "Kael Davan"
        role: "dock worker"
        faction: "ring member"
        trust_level: "trusted"
        relationship_type: "close colleague"
        routine_pattern: "morning shift 06:00-14:00, bar after shift"
        behavior_flags: "reliable,punctual"
        operational_status: "reliable"
        social_debt: "mutual"
    - npc_id: "voss"
      state: "Known"
      known_attributes:
        name: "Voss"
        role: "shift supervisor"
        faction: "civilian"    # smuggler doesn't think of Voss as "ring"
        trust_level: "reliable"
        operational_status: "reliable"
        complicity_level: "active"
    # ... (all known NPCs enumerated)

  # B3: Reverse Knowledge (what each NPC knows about the PC)
  # Gestalt's critical insight: bidirectional from day one
  known_by:
    - npc_id: "kael_davan"
      known_attributes:
        name: "{PC_NAME}"
        role: "dock worker"
        faction: "ring member"
        trust_level: "trusted"
        relationship_type: "close colleague"
        routine_pattern: "morning shift, bar regular, ring ops 1-2x/week"
        behavior_flags: "reliable,punctual"
    - npc_id: "voss"
      known_attributes:
        name: "{PC_NAME}"
        role: "dock worker"
        faction: "ring member"
        trust_level: "reliable"
        relationship_type: "subordinate"
    - npc_id: "hael"
      known_attributes:
        name: "{PC_NAME}"
        role: "dock worker"
        faction: "civilian"      # Hael doesn't know about the ring
        trust_level: "reliable"
        relationship_type: "partner's friend"
    - npc_id: "lera_sessik"
      known_attributes:
        name: "{PC_NAME}"
        role: "dock worker"
        faction: "civilian"
        trust_level: "reliable"
        relationship_type: "bar regular"
    # ... (all NPCs who know the PC enumerated)

  # B4: Orientation Content (Ozzie's "first 60 seconds")
  orientation:
    # Monologue lines that fire in the first 2-3 minutes
    # These are how the player DISCOVERS their character's life
    # NOT a backstory dump — reactions to the world that reveal history
    arrival_monologue:
      - trigger: "enter_hub"
        text: "Another shift. At least Kael's already here — the dock runs smoother when he's on."
        prerequisite: null    # fires unconditionally at game start
      - trigger: "see_voss"
        text: "Voss is at the board already. He's been tense this week. More than usual."
        prerequisite: null
      - trigger: "see_kael"
        text: "There's Kael. Good. The day's better when he's on shift."
        prerequisite: null
      - trigger: "enter_bar_first"
        text: "Lera's. End of shift, end of the day. This is the part that makes the rest worth it."
        prerequisite: null
      - trigger: "see_hael"
        text: "Hael's here. Kael's probably still at the hub. I should say hello — Hael always asks how the shift went."
        prerequisite: null

  # B5: Agency Boundaries
  agency:
    # Soft constraints — what the PC can/can't do without narrative justification
    restricted_actions:
      - action: "access_commission_systems"
        reason: "Not Commission — no institutional access"
      - action: "arrest_npcs"
        reason: "No authority — civilian dock worker"
    enabled_actions:
      - action: "access_ring_locations"
        reason: "Ring member — has corridor codes, knows routes"
      - action: "use_ring_comms"
        reason: "Ring member — can contact Devra, Renn via informal channels"

  # B6: Authored Relationship Stubs (Gore's requirement)
  # Specific memories and history that make NPC greetings hit emotionally
  relationship_history:
    - npc_id: "kael_davan"
      shared_memories:
        - "Covered for each other during the compliance audit six months ago."
        - "Kael helped move a difficult cargo last month; neither talks about it."
        - "Share lunch most days at the break room. Kael always brings extra."
      greeting_context: "Kael greets the PC with genuine warmth and relief — they have history."
    - npc_id: "lera_sessik"
      shared_memories:
        - "Regular at Lera's for two years. Lera knows what the PC drinks."
        - "PC fixed the bar's refrigeration unit last winter. Lera doesn't forget favors."
      greeting_context: "Lera nods, pours the usual without being asked. Belonging."
    - npc_id: "hael"
      shared_memories:
        - "Met through Kael. Hael is kind. PC has dinner at their place occasionally."
        - "Hael once asked the PC to 'keep an eye on Kael at work.' PC said yes."
      greeting_context: "Hael is warm but tired. Will ask about work. Cannot be told the truth."

  # B7: Tell Inversion (what NPCs already know about the PC's tells)
  pc_tells:
    - tell: "Checks lattice when nervous"
      known_by: ["kael_davan"]  # Kael knows this from years of working together
    - tell: "Gets quieter before making a decision"
      known_by: ["kael_davan", "lera_sessik"]

What This Spec Resolves

Question Answer
Where does starting knowledge come from? Section B1: explicit FactId confidence table
How do NPCs already know the player? Section B3: reverse knowledge entries per NPC
What makes the first 60 seconds feel like Cheers? Section B4: orientation monologue + B6: authored relationship stubs
What can't the player do? Section B5: agency boundaries
Why does Kael's "There you are" hit emotionally? Section B6: shared memories give the greeting weight
Can NPCs read the PC's behavior? Section B7: tell inversion — NPCs know your tells before you do

Conversion Checklist for Content Authors

When creating a PC-candidate NPC:

  1. Write the standard NPC profile first (Tier 1 or Tier 2 template)
  2. Enumerate starting facts — for every FactId in the catalog, decide: does this character know it? At what confidence?
  3. Enumerate forward relationships — for every NPC the PC knows: RelationshipState + full known_attributes including smuggler-specific or detective-specific keys
  4. Enumerate reverse relationships — for every NPC who knows the PC: what do they know? What DON'T they know? (Hael doesn't know about the ring.)
  5. Write orientation monologue — 5-8 lines, one per known NPC or location, that reveal the character's life through reactions, not exposition
  6. Write relationship history stubs — 2-3 specific shared memories per major relationship, plus a greeting_context note for content authors writing the NPC's first lines
  7. Define agency boundaries — what the PC can and can't do, architecturally
  8. Document PC tells — behaviors NPCs already recognize, inverted from the standard tell system
  9. Validate bidirectional consistency — if the PC knows Kael is a ring member, Kael's known_by entry must have the PC as a ring member too. If Hael doesn't know about the ring, Hael's known_by must have faction: "civilian".

3. Naming Process with Miri

Miri's Van Maanen's Star brief is excellent. The phonological rules are now explicit: Nordic-Baltic heritage, consonant-forward, vowels tend toward a/e/o, hard consonants dominate, 1-2 syllables in daily use. The surname patterns are documented: Finnish -nen suffixes dropped, Estonian -sik/-vere sometimes survive, Dutch/Norwegian names survived closer to origin.

Generating Missing Full Names

The problem: 12 of 17 NPCs have no canonical surname. My Round 1 flagged this as both a gap (lattice queries need full names) and a metagaming signal (full names = important).

Proposed process:

Step 1: Miri generates surname candidates. Miri has the phonological rules and the heritage pools. For each single-name NPC, Miri proposes 2-3 surname options following the documented drift patterns:

NPC Heritage Stream Proposed Surnames Notes
Voss Dutch/Norwegian (survived intact) Voss Harsk, Voss Rosta, Voss Neven "Voss" already reads Dutch/Norwegian. Surname should match.
Devra Estonian-drifted Devra Leht, Devra Pellam, Devra Kosse "-a" ending suggests Estonian/Latvian origin
Resha Estonian-drifted Resha Talvik, Resha Vere, Resha Kask Younger generation; surname could be founding-family
Hael Finnish-drifted Hael Maren, Hael Rosta, Hael Sova Partner of Kael Davan — different surname (not married naming convention)
Harek Norwegian (near-origin) Harek Neven, Harek Strand, Harek Solm Security background; surname should feel institutional
Renn Estonian-compressed Renn Kosk, Renn Talvik, Renn Vaht Young, working class; short surname matches
Pell Latvian-compressed Pell Laar, Pell Raud, Pell Tamm Compressed from longer Latvian form
Drin Latvian/Finnish-compressed Drin Mets, Drin Kallas, Drin Kukk Maintenance worker; heritage-class surname
Sess Estonian-origin Sess Pihl, Sess Laane, Sess Vahk Bartender; minimal social presence; short surname
Olin Ambiguous (possible newcomer) Olin Parvus, Olin Kade, Olin Mehr Could deliberately break pattern if Olin is off-system
Sabel Dutch (survived intact) Sabel already reads as a complete name Could add: Sabel Hoorn, Sabel Bergh
Tav Maximally compressed Tav Kukk, Tav Laas, Tav Oks Youngest generation; ultra-short

Step 2: Paula validates narrative consistency. I check that:

  • No surname collisions with existing names
  • Surname doesn't accidentally create unintended family connections (the Davan problem — shared surname implies kinship)
  • The surname "feels right" for the character's social position and heritage stream
  • Olin's surname is deliberately chosen to signal insider or outsider status (this is a design decision, not just naming)

Step 3: Both sign off. Miri confirms phonological fit; I confirm narrative fit. Qatux documents.

Step 4: Integration. Full names added to NPC Core Identity blocks. Lattice query results can now return "Voss Harsk — shift supervisor, Sova Logistics Consortium". Surface these naturally: hub work rosters, bar tabs, freight manifests — places where full names appear in-world.

Breaking the Name-as-Tier Signal

Adding surnames to all NPCs resolves the metagaming concern, but only if full names surface NATURALLY for lower-tier NPCs too. Concrete integration points:

  • Hub work roster (environmental text, terminal screen): Lists all hub workers by full name. Player sees "Drin Mets — maintenance tech" alongside "Kael Davan — dock worker." Equal presentation.
  • Bar tab screen (if Lera has one): Regular names. "Sess Pihl" and "Torek Lintar" on the same list.
  • Commission kiosk query: Detective can look up anyone's full name. "Tav Kukk — casual labor, Sova Logistics Consortium."

This also serves Ozzie's environmental worldbuilding goal — these are textual details that make the station feel inhabited and institutional, not just a game space.


4. Hael Elevation: Tier 1.5

Gore says Hael is the masterpiece. Ozzie says Hael sitting alone checking the door is the moment that defines the game. Both want Tier 1.

Let me complicate this.

The Case For Elevation

Emotional weight: Hael is the emotional fulcrum. Both FRIEND arcs orbit Hael. Kael protects Hael. Sera protects Hael. The smuggler lies to Hael. The detective can weaponize Hael. One person who never touches the conspiracy is the person the conspiracy most damages.

Gore's point about complicity: Every time the smuggler sees Hael and says nothing, that's complicity enacted. Every time the detective considers using Hael as leverage, that's judgment tested. Hael makes both characters' themes concrete.

Ozzie's "moments that make players feel something": Hael sitting alone checking the door. Hael asking the smuggler if Kael seems okay. Hael confiding in Sera. These are potentially the most affecting moments in the game.

The Case Against Full Tier 1

Hael has no contradiction arc. THE FRIEND pattern (D-034) requires: 3+ relationship phases, observable contradiction, tell progression, dialogue shift pre/post discovery. Hael doesn't hide anything. Hael's pain is transparent. There's no behavioral mystery to unravel — Hael is openly worried, openly vulnerable, openly exposed. That transparency is what makes Hael powerful. Adding a contradiction arc would dilute the character.

Hael isn't a mechanical puzzle. Kael and Sera give the player something to FIGURE OUT. Hael gives the player something to FEEL. Different function, different depth model.

Proposal: Tier 1.5 — "Production Emotional NPC"

A new depth level between Tier 1 (FRIEND) and Tier 2 (Working Profile). Hael gets:

From Tier 1:

  • Full 10-axis profile at Tier 1 depth (all axes, detailed paragraphs)
  • 5-mood voice sample (matching Tier 1 emotional range)
  • Detailed dual-lens notes with monologue examples for both characters
  • Full Triangle 4 role analysis
  • Tell system (not behavioral mystery tells, but emotional tells — how Hael's worry manifests visibly)
  • ~50-70 authored lines (more than Tier 2's 40-60, less than Tier 1's 70-100)

NOT from Tier 1:

  • No contradiction arc (Hael has no secret to discover)
  • No contradiction_flagged attribute (no behavioral mystery)
  • No confrontation path (you can't "confront" Hael — you can only comfort, lie, or exploit)

New content unique to Tier 1.5:

  • Emotional arc (replaces contradiction arc): Worry → Questioning → Desperation → Confrontation-with-partner OR Withdrawal. 4 phases, authored transitions, monologue shifts for both characters per phase.
  • Vulnerability map: What happens when the detective uses Hael? What happens when the smuggler lies? Authored consequence paths, not just a single "consequences if exposed" section.
  • Complicity lines (smuggler-specific): 8-10 monologue lines for the smuggler that fire specifically around Hael — the guilt, the avoidance, the inability to help. These are the lines Gore and Ozzie are asking for.

Authoring Cost

Deliverable Tier 2 (current) Tier 1.5 (proposed) Tier 1 (FRIEND)
10-axis profile depth Paragraph per axis Full paragraphs, Tier 1 quality Full paragraphs
Voice samples 2-3 moods 5 moods 5 moods
Authored lines 40-60 50-70 70-100
Generation expansion 4x (write 15, gen 60) 2x (write 35, gen 35) None (all hand-authored)
Contradiction arc No No (emotional arc instead) Yes (5 phases)
Dual-lens detail Brief (1-2 sentences) Full (matching Tier 1) Full
Unique content Vulnerability map, complicity lines Contradiction arc

Net cost over current Tier 2: ~15-20 additional authored lines, fuller dual-lens notes, emotional arc writeup, vulnerability map. Estimated: 2-3 additional hours of authoring time.

Is it worth it? Yes. The emotional payoff Gore and Ozzie describe — the player feeling the weight of complicity every time they see Hael — requires authored content at a depth Tier 2 doesn't provide. But it doesn't need the full Tier 1 contradiction machinery. Tier 1.5 gives Hael the emotional depth without forcing a structural pattern that doesn't fit the character.

Template Impact

If we adopt Tier 1.5, the style guide needs a fourth template. I'd define it as:

Tier 1.5: Production Emotional NPC — For NPCs who carry major emotional weight without a discovery arc. The player doesn't figure out what this NPC is hiding. The player confronts what this NPC's pain reveals about the player's own choices.

The template would follow Tier 1 structure for Core Identity, 10-Axis Profile, Voice Sample, and Dual-Lens Notes. It would replace "Contradiction Arc" with "Emotional Arc" and "Secret" with "Vulnerability Map."


5. Complete Style Guide: Integrating Mellanie's Conventions

Mellanie identified 8 missing conventions. Here's how each integrates into the tier templates from my Round 1, with Gestalt's mechanical constraints and Ozzie's "gut-check" requirement layered in.

Convention Integration Table

Mellanie's Convention Where It Lives in Template How It's Specified
1. Canonical location shortcodes Template header + all YAML references Table in style guide preamble: terminal, bar, corridor. One shortcode per location. No aliases.
2. Prerequisite reference validation Template section: "Content Requirements" Rule: "Every prerequisite must reference a FactId, RelationshipState, or EntityKnowledge key from the canonical catalogs. Lines with non-existent references are invalid." Enforced by schema validator per Tyre's pipeline.
3. Access tier defaults by character Template section: "Dual-Lens Notes" Rule: Smuggler default = insider (community member). Detective default = authority or public (institutional outsider). Explicitly stated in dual-lens preamble per NPC.
4. Situation overlap rules Style guide appendix: "Tag Usage Rules" Rule: "Multiple situation tags only when the line is independently appropriate in each situation. If removing one tag makes the line contextually wrong, don't include it."
5. Mood exclusivity Style guide appendix: "Tag Usage Rules" Rule: "Mood lists represent simultaneous emotional states, not alternatives. [fond, conflicted] = genuinely feeling both. If you mean 'either fond or worried,' write two lines."
6. Freeform tag discipline Style guide appendix: "Approved Freeform Tags" Living list maintained by content leads (Paula + Mellanie). Reviewed before YAML merge. Initial list derived from monologue guide examples. snake_case enforced.
7. Dual-lens note format Tier 1 and Tier 2 template, Dual-Lens section Rule: "Each character gets: 2-3 sentences of context, followed by one italicized monologue example. Always." Tier 3: 1-2 sentences + monologue fragment.
8. Ozzie's gut-check line All tier templates, Voice Sample section Rule: "One voice sample line must be the 'gut-check' — a line that, read aloud, makes you pause. If no line in the voice sample does this, the profile isn't done." Mark it with # gut-check comment in YAML.

Additional Conventions from Gestalt

Gestalt's Constraint Where It Lives How It's Specified
Routine must reference canonical location slugs All tiers, Routine section Rule: "Time-block entries must use location slugs from the location registry. Prose routine for humans, YAML routine block for engine." Include Gestalt's structured YAML format alongside prose.
Every NPC must have faction from canonical set All tiers, Core Identity Rule: "Faction values: commission, civilian, ring_member (if known), unknown. No freefrom values."
Every secret must map to a FactId Tier 1-2, Secret section Rule: "The Secret section must end with a mapped_fact: line referencing the FactId this secret becomes when discovered."
Every tell must map to behavior_flags Tier 1-2, Tell System table Rule: "The Tell System table must include a Mechanical Flag column with the exact behavior_flags value. Tier 2 tables include the column for consistency even though flags are soft."
Bridge NPCs need multi-site routine Bridge NPCs, Routine section Rule: "NPCs listed as bridge in the NPC Index must have routine entries for EACH social site they connect."

Additional Convention: Gore's Thematic Question

Convention Where It Lives How It's Specified
"Is this enough?" — character's answer All tiers, after Contentment axis New optional field: ## Thematic Question — 1-2 sentences stating this character's implicit answer to "Is this enough?" Not mechanical. Authoring guidance for voice and motivation consistency. Required for Tier 1 and Tier 1.5. Recommended for Tier 2. Not needed for Tier 3.

The Assembled Style Guide Structure

# NPC Authoring Style Guide

## Preamble
- Purpose and audience
- Tier definitions (Tier 1 / Tier 1.5 / Tier 2 / Tier 3)
- Location shortcode table (canonical, one per location)
- Faction value list (canonical enum)
- Approved freeform tag vocabulary (living list)

## Tier Templates
- Tier 1 Template: THE FRIEND (full, from Round 1)
- Tier 1.5 Template: Production Emotional NPC (new, for Hael-type characters)
- Tier 2 Template: Working Profile (full, from Round 1)
- Tier 3 Template: Sketch (full, from Round 1)

## Validation Checklists
- Per-tier validation (Gestalt's checklist, embedded in each template)
- Cross-reference rules
- PC-candidate additional requirements

## Tag Usage Rules
- Situation overlap (Mellanie's rule)
- Mood exclusivity (Mellanie's rule)
- Freeform tag discipline (reviewed vocabulary)
- Access tier defaults per character

## Mechanical Constraints
- Routine format (prose + YAML block)
- Secret-to-FactId mapping
- Tell-to-behavior_flags mapping
- Bridge NPC multi-site requirements

## Voice and Quality
- Gut-check line requirement (Ozzie)
- Dual-lens note format (sentences + monologue example)
- One-breath rule for monologue (Mellanie)
- Mirror-first drafting (Mellanie)

## PC-Candidate Appendix Spec
- Full spec from this Round 2 response
- Conversion checklist
- Validation rules for bidirectional knowledge consistency

Summary of Round 2 Proposals

# Proposal Cross-References Priority
1 Adopt 6 smuggler-specific entity attribute keys Gore (complicity), my Round 1 (detective bias) High — blocks smuggler content parity
2 Add 5 smuggler-specific FactIds (operations.*) Gore (complicity theme), Gestalt (knowledge graph) High — blocks smuggler monologue authoring
3 Add 6 smuggler monologue trigger types Gore (complicity lens), Mellanie (trigger types) High — blocks smuggler content
4 Adopt unified PC-candidate NPC spec (sections B1-B7) Gestalt (reverse knowledge), Ozzie (first 60 sec), Gore (authored stubs) High — blocks YAML generation
5 Document NPC→PC conversion checklist (9 steps) Gestalt, Nigel (randomizer) High — blocks pipeline
6 Miri generates missing surnames; Paula validates Miri (phonological rules), my Round 1 (naming) Medium — blocks lattice query content
7 Elevate Hael to Tier 1.5 (Production Emotional NPC) Gore (masterpiece), Ozzie (emotional payoff) High — new tier template
8 Assemble NPC Authoring Style Guide (structure above) Mellanie (8 conventions), Gestalt (mechanical constraints), Ozzie (gut-check) High — blocks all future authoring
9 Add Gore's "Thematic Question" to Tier 1/1.5 template Gore ("Is this enough?") Medium — authoring guidance
10 Add Gestalt's structured YAML routine block to templates Gestalt (engine-readable routines) Medium — engine integration