Files
settled-reach/docs/workshops/v01-content-scoping/round2-mellanie.md
T
jpmschweitzerandClaude Opus 4.6 3944b4e79f docs(workshops): archive v0.1 content scoping workshop (2 rounds + closing)
Scoped the vertical slice: 16 EntityKnowledge keys, v0.1 mechanical
NPC mapping, YAML content format, 7-verb interaction model, server-
authoritative pause, 38 tickets created across copy/server/client/ci.
20 decisions (D-042 through D-061). 8 agents, 2 rounds + closing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:19:05 +01:00

26 KiB

Round 2 — Mellanie (Copywriter)

v0.1 Content Scoping Workshop


Task 1: Canonical PC Voice Registers

These are authoring specs, not narrative documents. Every monologue line I write gets checked against these parameters. If a line doesn't match the register, it gets cut.


Smuggler — Internal Voice Register

One-line summary: Watches people, not systems. Thinks in fragments. Worries about friends the way a dock worker worries — practically, physically, with the knot in the stomach, not the word for it.

Voice Parameters

Parameter Value Example
Sentence length Short. Fragments welcome. Rarely more than 2 sentences per monologue fire. "Kael's here. Good."
Vocabulary Concrete, physical, sensory. Uses trade jargon (containers, manifests, shifts, routes) without explaining it. No institutional language. "Recycled air and cargo lubricant." Not: "Standard atmospheric recycling."
Emotional register Feeling-first, analysis second. Names the gut before the brain catches up. "Starting to worry" before "something's off."
Relationship mode First-name basis with everyone. Thinks relationally — people are defined by connection, not role. "Kael" not "Davan." "Voss is tense" not "the shift supervisor seems agitated."
Observation priority People > environment > objects. Notices body language before noticing cargo. "Kael keeps checking his lattice" before "Container 4471 is still in temp."
Operational thinking Present when thinking about the job. Time-aware, route-aware, schedule-aware. But always filtered through "is this safe for my people?" "Transition window opens in fifty minutes. After that, twenty minutes of reduced oversight."
Self-reference Rare. The smuggler thinks about others, not herself. When self-reference occurs, it's through physical sensation. "My stomach dropped" not "I feel betrayed."
Humor Dry, situational, understated. Dark when stressed. Never witty — that's a different register. "Home sweet home" about a cargo bay.
What she doesn't do Doesn't analyze systems. Doesn't use institutional vocabulary. Doesn't explain things to herself that she already knows. Doesn't monologue in paragraphs.

Voice Anchors (Reference Lines)

These 5 lines define the boundaries. Every smuggler monologue line should feel like it could sit next to these without register collision.

  1. Baseline warm: "Kael's already at the dock. Good. The day's better when he's on shift." — Short. Personal. Physical presence matters.

  2. Operational: "Shift transition in thirty minutes. If Voss kept the schedule thin, the route's clear." — Time-specific. Practical. Other people's actions determine safety.

  3. Concerned: "Kael keeps checking his lattice. Waiting for a message? Not like him to be jumpy." — Observation leads to interpretation. Interpretation is relational ("not like him"), not clinical.

  4. Hurt: "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." — Personal history weaponized. The "two years" is the knife. Ends with a flat declaration, not a question.

  5. Atmospheric: "Morning shift. Recycled air and cargo lubricant. Home sweet home." — Three fragments. Sensory detail. Irony through understatement.

Anti-Patterns (What the Smuggler Does NOT Sound Like)

  • "I should investigate this anomaly further." (Too clinical. She'd think: "That's not right.")
  • "The scheduling irregularity suggests systemic manipulation." (Institutional vocabulary. She'd think: "Voss changed the rotation again.")
  • "I need to consider the implications of Kael's behavior for our operational security." (Analytical distance. She'd think: "What the hell is Kael doing?")
  • "According to the manifest, container 4471 should weigh 240 kilograms." (Explaining what she already knows. She'd think: "4471's heavy. Too heavy.")

Detective — Internal Voice Register

One-line summary: Categorizes first, feels second. Thinks in complete sentences. The institutional training runs in the background like an operating system — it never turns off, but sometimes the human overrides it.

Voice Parameters

Parameter Value Example
Sentence length Complete sentences, but not long ones. More structured than the smuggler. Occasional fragments for emphasis or snap judgments. "Standard prefab, heavy foot traffic. Let's see what the shift change tells me."
Vocabulary Institutional layer over plain speech. Professional terms leak in: "case file," "filing it," "noted," "flagged." Not technical jargon — investigative habit. "Dock worker. Davan, K. Unremarkable on paper." The surname-comma-initial is institutional reflex.
Emotional register Analysis-first, personal second. When personal breaks through, it's notable — a crack in the professional surface that signals emotional weight. "She's not lying. But she's not telling me everything. Sera, what do you know?" — The first-name appeal at the end IS the emotion.
Relationship mode Surname-first for targets and unknowns. First-name for allies and people he trusts. The shift from surname to first-name (or back) IS a relationship marker. "Davan, K." early → "Kael" never (smuggler's FRIEND, not detective's). "Sera" always (detective's FRIEND).
Observation priority Patterns > people > environment. Notices deviations from expected behavior before noticing the person. "That's twice now" before "Sera leaves." The count matters more than the actor.
Analytical thinking Automatic. Counts things, tracks frequencies, flags inconsistencies. Self-directs: "filing it," "noted," "coincidence?" These are internal bookkeeping prompts. "Three times. Three excuses. That's data."
Self-reference More common than the smuggler, but always through the professional lens. The detective monitors his own state as evidence. "I'm reading too much into this" — self-aware about analytical bias.
Humor Wry, observational. Appreciates irony at a distance. Can laugh at himself. Never cruel. "Only place in this district that doesn't smell like freight lubricant."
What he doesn't do Doesn't think in fragments (that's the smuggler). Doesn't use trade jargon he hasn't learned. Doesn't name-drop relationships he doesn't have. Doesn't express vulnerability directly — it leaks, he doesn't pour.

Voice Anchors (Reference Lines)

  1. Clinical baseline: "Logistics hub. Standard prefab, heavy foot traffic. Let's see what the shift change tells me." — Categorize. Evaluate. Self-direct. Three operations in three sentences.

  2. Pattern recognition: "That's the third time. Sera leaves when Torek arrives. Three different excuses, same result. That's not coincidence." — Counting is automatic. Conclusion is flat and declarative. No hedging.

  3. Personal leak: "Good to see Sera. She always was the reliable one. At least someone in this district speaks my language." — First-name. Past tense ("always was") implies shared history. "My language" is institutional belonging.

  4. Conflicted: "Same booth. Same warm smile. Same offer to buy me a drink. ...Everything except whatever she's not saying." — Repetition builds the pattern. The ellipsis is the human catching up to the analyst. The final clause is the knife.

  5. Atmospheric: "Grain spirit and low conversation. Only place in this district that doesn't smell like freight lubricant." — Sensory but evaluative. The detective doesn't just notice smells — he catalogs them as data points.

Anti-Patterns (What the Detective Does NOT Sound Like)

  • "Kael's here. Good." (Too terse. That's the smuggler. The detective would think: "Davan's on shift. Standard.")
  • "I feel uneasy about Sera's behavior." (Direct emotional vocabulary. He'd think: "Something's off with Sera. Can't place it yet.")
  • "This container has been tampered with, indicating smuggling activity." (Explaining the obvious. He'd think: "Weight's wrong. Noted.")
  • "My heart sank when I saw the evidence." (Physical emotion — that's the smuggler's register. The detective: "Didn't want to see that. But there it is.")

Voice Register Comparison — Same Observation, Two Characters

Trigger: Seeing a container in temp storage overnight.

  • Smuggler: "That container's been in temp since yesterday. Someone forgot to process it, or someone's stalling." — Concrete. Two explanations, both practical. No judgment yet.

  • Detective: "Container in overnight temp. Unusual for a hub this size — turnaround is normally sub-eight hours. Flag it." — Categorical. Quantified deviation. Self-directed action.

Trigger: Entering the bar.

  • Smuggler: "Lera's. Grain spirit and noise. Could use both right now." — Informal name. Sensory. Personal need.

  • Detective: "The Last Shift. Same crowd as yesterday. Let's see who's NOT here tonight." — Official name. Pattern comparison. Investigative frame.

Trigger: Noticing Naia Tamm is upset.

  • Smuggler: "Naia looks rough today. Should check on her later." — First-name. Immediate concern. Plans to act.

  • Detective: "Tamm seems distressed. Not her baseline. Something at home, or something she's heard?" — Surname. Clinical assessment. Hypothesizes cause.

Trigger: Hearing raised voices behind a door.

  • Smuggler: "Raised voices from the back room. Devra's in there. That's not a brokering call." — Identifies the person. Interprets through operational knowledge.

  • Detective: "Arguing behind that door. The bartender didn't flinch. Either she's used to it or she knows what it is." — Notes the non-reaction. Third-party behavior is data.


Display Constraints (per Stig's R1 proposal)

Adopting Stig's parameters as authoring constraints:

Constraint Value Implication for Writing
Max length ~160 characters Hard ceiling. Most lines should be 80-120.
Max visual lines 2 No three-line monologue. If it wraps to 3, cut it.
Display time 4-6 seconds (length-adjusted) Player reads at ~250 WPM = ~20-25 words in 5 seconds. Target: 15-25 words per line.
Fade behavior Fade in/out No abrupt text pops. Lines must read cleanly mid-fade.
Character tint Smuggler: amber-white #f0e0c8, Detective: blue-white #c8d8f0 Voice must be distinguishable WITHOUT color — color confirms, doesn't create.

The 25-word rule: If a monologue line exceeds 25 words, it better be the most important line in the pool. Most lines should be 10-18 words. The authoring guide examples average 14 words. That's the target.


Task 2: THE FRIEND Content Pack — Kael Davan (Structure)

What's In the Pack

The Kael Davan content pack is a single deliverable containing everything the engine needs to run THE FRIEND arc for the smuggler's path. It's also the benchmark — if this pack validates against the tag taxonomy, loads correctly, triggers appropriately, and sounds right, every subsequent content pack follows the same structure.

Pack Contents

content/
  districts/
    sova-transit/
      terminal/
        dialogue.yaml          # Kael's dialogue lines at The Terminal (shared pool)
        monologue-smuggler.yaml # Smuggler monologue at Terminal (includes Kael observations)
        monologue-detective.yaml # Detective monologue at Terminal (includes Kael observations)
      bar/
        dialogue.yaml          # Kael's dialogue lines at The Last Shift
        monologue-smuggler.yaml
        monologue-detective.yaml
      corridor/
        dialogue.yaml          # Kael's dialogue lines in Corridor B-7
        monologue-smuggler.yaml
        monologue-detective.yaml

Note: Kael's content lives inside location files, not a per-NPC file. Per D-035 and Tyre's directory design, dialogue is organized by location. Kael's lines appear in terminal/dialogue.yaml alongside other NPCs who speak at the Terminal. The role: dock_worker tag identifies which lines belong to Kael's template role.

The pack is authored as a single document, then split into location files during content conversion. For authoring purposes, I'll write it as one file with location headers and deliver the split files.

Line Budget (Kael Davan)

Content Type Lines Location Split
Kael dialogue
Greetings (5 access tiers) 5 Terminal: 3, Bar: 2
Shift/work talk (insider, peer) 8 Terminal: 6, Bar: 2
Bar casual (peer) 4 Bar: 4
Ring coordination (insider) 6 Terminal: 3, Corridor: 3
Deflection/evasion (post-contradiction) 6 Terminal: 3, Bar: 2, Corridor: 1
Confrontation responses 4 Terminal: 1, Bar: 1, Corridor: 2
Hael references (casual, unprompted) 3 Terminal: 1, Bar: 2
Dialogue subtotal 36
Smuggler monologue about Kael
Phase 1 — Comfort (warmth, baseline) 4 Terminal: 2, Bar: 2
Phase 2 — First Crack (concern, tells) 4 Terminal: 3, Bar: 1
Phase 3 — Contradiction (alarm, shock) 3 Corridor: 2, Terminal: 1
Phase 4 — Confrontation aftermath (hurt, conflict) 3 Terminal: 1, Bar: 1, Corridor: 1
Phase 5 — Contaminated trust (doubt over warmth) 4 Terminal: 2, Bar: 1, Corridor: 1
Smuggler monologue subtotal 18
Detective monologue about Kael
Identification / first observation 2 Terminal: 2
Behavioral observation (tells noted) 3 Terminal: 2, Bar: 1
Suspicion / analytical escalation 3 Terminal: 2, Corridor: 1
Informant potential assessment 2 Terminal: 1, Bar: 1
Detective monologue subtotal 10
Tell observation lines
Lattice checking (first + repeat) 2 Terminal: 2
Shortened interactions / evasive 2 Terminal: 1, Bar: 1
Looks-left tell (casual + confirmation) 2 Bar: 1, Corridor: 1
Spatial deviation (Corridor B-7) 2 Corridor: 2
Tell subtotal 8
Trust-gated lines (Kael's deeper dialogue)
Insider: ring operational talk 6 Terminal: 4, Corridor: 2
Insider: close colleague warmth 4 Terminal: 2, Bar: 2
Secret: hints about wanting out (pre-contradiction, rare) 3 Bar: 2, Corridor: 1
Trust-gated subtotal 13
Unprompted lines (Kael volunteers)
Early: offers information, warmth 3 Terminal: 2, Bar: 1
Late: warnings, deflections 3 Terminal: 1, Bar: 1, Corridor: 1
Unprompted subtotal 6
PACK TOTAL 91

91 lines. Within the 70-100 range from D-034. The slight overcount gives me room to cut — better to write 91 and kill 10 weak ones than write 70 and wish I had more coverage.

Arc Phase Mapping to Triggers + Prerequisites

This is the structural skeleton. Every line in the pack maps to one of these slots.

Phase 1: Comfort (0-10 min, RelationshipState: Friendly)

Trigger Prerequisite Content Type Count
observe_npc relationship_state: Friendly, subject: kael_davan Smuggler monologue: warmth 2
observe_npc relationship_state: Friendly, subject: kael_davan Smuggler monologue: routine fondness 2
post_conversation relationship_state: Friendly, subject: kael_davan Smuggler monologue: social comfort 1
NPC dialogue access: [insider, peer], trust: surface Kael greetings, shift talk 8
NPC dialogue access: [insider], trust: real Kael ring talk, colleague warmth 6
NPC dialogue (unprompted) access: [insider] Kael volunteers info 2

Phase 1 total: ~21 lines. Heavy on dialogue (establish Kael's voice), lighter on monologue (smuggler's comfortable, not reflective).

Phase 2: First Crack (10-15 min, still Friendly, flags accumulating)

Trigger Prerequisite Content Type Count
observe_anomaly behavior_flags: lattice_checking Smuggler monologue: mild concern 2
post_conversation behavior_flags: evasive Smuggler monologue: worry 2
observe_npc (detective) relationship_state: Known, subject: kael_davan Detective monologue: behavioral note 2
NPC dialogue access: [insider, peer], trust: surface Kael: shorter, deflective 4
Tell observation behavior_flags gates Tells: lattice, shortened interactions 3

Phase 2 total: ~13 lines. Tell observations ramp up. Dialogue gets clipped. Smuggler monologue shifts from fond to concerned.

Phase 3: The Contradiction (15-20 min, Friendly -> PersonOfInterest)

Trigger Prerequisite Content Type Count
witness_interaction relationship_state: Friendly, subject: kael_davan Smuggler monologue: shock/alarm (THE moment) 2
observe_anomaly contradiction_flagged: meeting_unknown_contact Smuggler monologue: processing 1
observe_npc (detective) behavioral flags accumulating Detective monologue: suspicion spike 2
Tell observation contradiction_flagged Spatial deviation tell 2

Phase 3 total: ~7 lines. Fewest lines, highest stakes. Every word carries maximum weight. The contradiction monologue is the most important line in the pack.

Phase 4: Confrontation (20-25 min, PersonOfInterest)

Trigger Prerequisite Content Type Count
post_conversation tell_observed: looks_left_when_lying Smuggler monologue: the tell confirmation 2
post_conversation relationship_state: PersonOfInterest Smuggler monologue: hurt/conflict 1
NPC dialogue access: [insider], trust: surface Kael: deflection, evasion 6
NPC dialogue access: [insider] Kael: confrontation responses 4
NPC dialogue (unprompted) access: [insider] Kael: warnings 2
Tell observation tell_observed gate Looks-left confirmation 1

Phase 4 total: ~16 lines. Dialogue-heavy — the confrontation is a conversation. Kael's evasion lines are the hardest to write because they must be plausible without being convincing.

Phase 5: Contaminated Trust (25-30 min, PersonOfInterest, new equilibrium)

Trigger Prerequisite Content Type Count
observe_npc relationship_state: PersonOfInterest, subject: kael_davan + contradiction_flagged Smuggler monologue: doubt over warmth 3
return_visit relationship_state: PersonOfInterest Smuggler monologue: location contamination 1
time_idle relationship_state: PersonOfInterest, subject: kael_davan Smuggler monologue: rumination 1
observe_npc (detective) secret_confidence: confirmed/suspected Detective monologue: informant potential 2
NPC dialogue access: [public], trust: surface Kael: surface normal (warmth locked out) 4
NPC dialogue access: [insider], trust: real (if smuggler chose understanding path) Kael: confession hints 3
Trust-gated: secret Path A only Kael: deeper truth 2

Phase 5 total: ~16 lines. The contamination lines are the ones where voice discipline matters most — same warmth, new subtext. "Same old Kael" lines where the smuggler hears what used to be comfort and now hears a question.

Cross-Phase Lines (Not Phase-Specific)

Content Type Count Notes
Detective identification/first observation 2 Fires before detective has context on Kael
Kael Hael references (casual, any phase) 3 Establish relationship before it's load-bearing
Kael bar casual (not phase-gated) 4 Social texture
Detective pattern-forming observations 3 Cumulative, phase-independent
Kael insider ring coordination 4 Operational dialogue, pre-contradiction

Cross-phase total: ~16 lines.

Phase Total Reconciliation

Phase Lines % of Pack
Phase 1: Comfort 21 23%
Phase 2: First Crack 13 14%
Phase 3: Contradiction 7 8%
Phase 4: Confrontation 16 18%
Phase 5: Contaminated Trust 16 18%
Cross-phase 16 18%
Total 89 ~98% (rounding)

Close to the 91 estimate. The 2-line gap is margin for lines that emerge during writing — there's always one observation or reaction that only becomes obvious while you're in the character's head.

Format (Sample YAML)

Each line in the pack looks like this. Showing one per phase to demonstrate prerequisite progression:

# Phase 1: Comfort — smuggler sees Kael, no concerns
- id: terminal_m_010
  character: smuggler
  trigger: observe_npc
  prerequisite:
    relationship_state: Friendly
    subject: kael_davan
  text: "Kael's already at the dock. Good. The day's better when he's on shift."
  mood: [fond]
  topic: [colleague]
  situation: [shift_start]
  access: [insider, peer]
  trust: surface
  tags: [kael, baseline, pre_contradiction]
  notes: "Phase 1 warmth. Establishes the bond."

# Phase 2: First Crack — smuggler notices tell
- id: terminal_m_011
  character: smuggler
  trigger: observe_anomaly
  prerequisite:
    all:
      - relationship_state: Friendly
        subject: kael_davan
      - known_attributes:
          subject: kael_davan
          key: behavior_flags
          value_contains: lattice_checking
  text: "Kael keeps checking his lattice. Waiting for a message? Not like him to be jumpy."
  mood: [concerned]
  topic: [colleague]
  situation: [routine]
  access: [insider]
  trust: real
  tags: [kael, tell, first_crack]

# Phase 3: Contradiction — the moment
- id: corridor_m_010
  character: smuggler
  trigger: witness_interaction
  prerequisite:
    relationship_state: Friendly
    subject: kael_davan
  text: "Kael? Down here? And that's — I don't know them. Not crew, not ring. Who the hell is that?"
  mood: [concerned]
  topic: [colleague]
  situation: [observation]
  access: [insider]
  trust: real
  tags: [the_friend, contradiction, kael, critical_moment]
  notes: "THE CONTRADICTION. Sets contradiction_flagged. Green -> amber."

# Phase 4: Tell confirmation — the knife
- id: corridor_m_011
  character: smuggler
  trigger: post_conversation
  prerequisite:
    all:
      - relationship_state: PersonOfInterest
        subject: kael_davan
      - known_attributes:
          subject: kael_davan
          key: tell_observed
          value: looks_left_when_lying
  text: "He looked left. Always looks left when he's making something up. Two years, Kael. I know your tells."
  mood: [conflicted]
  topic: [trust]
  situation: [confrontation]
  access: [insider]
  trust: real
  tags: [the_friend, kael, tell_confirmation]

# Phase 5: Contaminated trust — the new normal
- id: terminal_m_015
  character: smuggler
  trigger: observe_npc
  prerequisite:
    all:
      - relationship_state: PersonOfInterest
        subject: kael_davan
      - known_attributes:
          subject: kael_davan
          key: contradiction_flagged
          value: meeting_unknown_contact
  text: "Same old Kael. Same jokes, same routine. ...What are you not telling me?"
  mood: [conflicted]
  topic: [colleague]
  situation: [routine]
  access: [insider]
  trust: real
  tags: [kael, the_friend, contaminated_trust]

Dependencies Before I Can Write the Full Pack

Dependency Owner Status Impact if Missing
Content directory structure confirmed Tyre Round 2 (expected) I write the pack as a single doc and split later — not blocking
FactId catalog (smuggler path entries) Gestalt / Paula Gap 5 from tracking I use authoring-guide FactIds as placeholders, replace when catalog lands
EntityKnowledge key resolution (4 vs 8 keys) Gestalt / Paula D-03 disagreement I write prerequisites using the Round 1 key names, adapt to winner
Monologue display constraints Stig R1 proposal: ~160 char, 2-line, 4-6 sec Adopted. Writing to these constraints now.
NPC pattern/motivation mapping finalized Gestalt Round 2 (lead awarded to Gestalt) Doesn't change Kael's content — he's FRIEND+OPERATOR regardless

None of these are hard blockers. The biggest risk is FactId placeholder drift — if the final catalog changes contraband.ring_exists to smuggling.ring_confirmed, I have to search-replace across the pack. Manageable, but annoying at scale. I'd rather the catalog stabilizes before I author all 695 items.

Authoring Timeline

Kael pack (91 lines): I can draft the full pack once this workshop closes. Dialogue lines require the most iteration (Kael's voice under pressure is tricky — evasive without sounding scripted). Monologue lines are faster (I've been living in both character registers for two workshops now). Tell lines are mechanical — they map directly to the wiki's tell system table.

Estimate: full draft in one session. Review pass in a second. Revision after Gestalt validates tags and Dudley confirms prerequisites fire correctly.

Sera pack follows immediately. Different contradiction mechanics (cumulative pattern vs. single observation), different voice (Sera's precision vs. Kael's brevity), same structure. Lessons from Kael's pack inform Sera's.


Note on the 695 Number

Round 1 tracking (A-06) flags my 695 total as "needs validation from others." Let me be clear about what it is and isn't:

  • 695 is the authored floor. Below this, the 30-minute session has gaps — locations without environmental text, NPCs without enough dialogue variation, monologue pools that repeat.
  • 695 is not the generation-expanded total. D-028 specifies a 4x generation pass for dialogue ("write 10, generate 40"). If we apply that to the ~350 dialogue lines, the engine sees ~1,400 dialogue lines. But the 350 are what I hand-write.
  • 695 doesn't include content the engine generates. Routine greetings, time-of-day variations, personality-trait transformations — those are generation-pass output, not authored input.

The number to track is 695 authored items. That's the scope. That's what I deliver.


Mellanie, Round 2. Voice registers defined, pack structure mapped, dependencies identified. Ready to write the benchmark.