# 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
12 KiB
title, description, type, status, sprint, team
| title | description | type | status | sprint | team |
|---|---|---|---|---|---|
| Sprint 14 — Copy Briefing | Monologue content architecture, character voice variation, tagged line pool structure | sprint | archived | 14 | copy |
Sprint 14: Live — Copy Tasks
Goal: Bring NPCs to life — mood, trust, routine execution, and NPC-to-NPC conversation drive the first emergent social observables; the simulation produces a world that breathes independently of the player.
Branch: copy
Agents: Mellanie (author), Paula (narrative designer), Gestalt (systems designer)
Carry-over from Sprint 13
None. All Sprint 13 copy tickets done (#368 knowledge vocabulary).
New Tickets
| # | Title | Blocked by |
|---|---|---|
| #253 | Monologue content architecture | — |
| #120 | Monologue line pool system | — |
| #121 | Character voice variation | — |
| #168 | Tagged line pool structure | #240 done |
| #328 | Access tier shift design document | #261 done |
| #536 | NPC-to-NPC overheard dialogue line pool | — |
Use db/connectors/ticket show <id> for full details.
Key Decisions
decisions/content.md— D-028 (dialogue architecture — four relational layers; #168 implements Layer 1-2 tag structure), D-032 (separate monologue pools per character — hard partition, no shared lines), D-034 (THE FRIEND — Kael Davan / Sera Venn, all monologue content must be coherent with their arcs), D-035 (converged tag taxonomy — 6 structural + 3 selection + 3 monologue-specific tags), D-036 (Sova Transit District setting — Van Maanen's Star naming conventions, "functional warmth" tone), D-037 (contraband — unlicensed lattice components, moral ambiguity), D-062 (invisible locked dialogue options — new trust tier content appears silently), D-063 (confrontation mechanics — internal voice, italic first-person options), D-064 (walk-away consequences — KG records incompleteness)decisions/perception.md— D-016 (internal monologue — four functions: perception bridge, atmosphere, diegetic tutorial, unreliable narrator), D-018 (three-range sound model — NPC-to-NPC conversations are Voice events the player overhears)- D-078 (overheard NPC conversation — lines must survive partial occlusion; front-load key information, short declarative sentences, avoid pronoun-first openers)
Notes
-
#253 — Monologue content architecture: Define the authoring contract for all future monologue content. This is a design document, not a content file. Output:
docs/design/monologue-content-architecture.md. Required sections:- Identity-driven interpretation frame: what each character "cares about, fears, is responsible for" — the interpretive lens that makes the same observation produce different monologue per character. Smuggler: exposure, protection of ring, Kael's loyalty. Detective: institutional duty, personal cost, Sera Venn's reliability.
- Category definitions: perception (translating non-visual senses), atmosphere (environment, mood), tutorial (diegetic hints), observation (NPC-specific). Add a fifth if needed.
- Trigger → category mapping: which triggers (from D-035:
enter_location,observe_npc,hear_sound,observe_anomaly,post_conversation,discover_evidence,witness_interaction,time_idle,return_visit) map to which categories. Not 1:1 — one trigger can source multiple categories. - Volume target: how many lines per trigger type per character for v0.1. Per D-032, all volumes are per-character.
prerequisitemap design: what game state conditions gate a line. Examples:kael_interaction_count >= 1,knows_kael_has_secret = true,location = maintenance_corridor. These must be expressible in the KG (D-041 FactIds).- Mellanie authors, Paula reviews for narrative coherence with THE FRIEND arc (D-034), Gestalt validates prerequisite map is implementable from KG state.
-
#120 — Monologue line pool system: Produce the first monologue line pool YAML files. Output:
content/directory (follow existing content structure — seeserver/src/content/mod.rsandserver/src/content/loader.rsfor load path conventions). File structure per D-032:monologue-smuggler.yaml,monologue-detective.yaml, with subdirectory per location (terminal/,bar/,corridor/). Required tags per line per D-035 (monologue-specific additions):character,trigger,prerequisite(null if unconditional). All 6 structural tags required:id,text,role,access,trust,situation. For monologue,role=player_character,access=[public],trust=surface(monologue is the player character's internal voice — no access/trust gating applies; tags must still be present for schema compliance).- Minimum deliverable for Sprint 14:
enter_location(2-3 lines per location per character) andtime_idle(2-3 lines per location per character). Eight locations minimum (hub, bar, corridor × 2 characters = 6; add 2 more for the maintenance corridors or gauntlet-equivalent spaces). - Line quality bar: these are the first lines the game speaks. Every line must pass Mellanie's voice test. Per D-034 THE FRIEND guidance: "no generation expansion" for THE FRIEND content specifically — apply same standard to monologue that will surface during THE FRIEND arc (Kael/Sera scenes).
- Minimum deliverable for Sprint 14:
-
#121 — Character voice variation: Write the trait modifier system for monologue voice. This is a companion authoring guide to #253, not a separate system. Output:
docs/design/monologue-voice-guide.md. Required:- Smuggler vs detective base voice registers (tone, vocabulary, sentence structure).
- How
PersonalityTraits(D-024 —Cautious,Bold,Honest,Deceptive,Compassionate,Ruthless,Curious,Incurious,Social,Reclusive) modify monologue delivery. Not per-trait scripts — a transformation guide: "a Cautious character says X instead of Y" with 2-3 example rewrites. - Background-dependent phrasing: Guardian background vs Senator background vs Worker background produce different idioms, references, assumptions. At minimum: two examples per background per character.
- Mood influence (feeds into #323 server-side): how the 8+1 moods (D-035 amendment:
neutral,anxious,frustrated,content,suspicious,warm,hostile,focused) colour monologue delivery. Not separate line pools — the same line can be delivered more tersely when the character is Anxious, more expansively when Content. - Paula writes the narrative framing, Mellanie writes the example lines, Gestalt validates mood → delivery mappings are mechanically coherent.
-
#168 — Tagged line pool structure: Implement the converged D-035 YAML schema as a formal JSON Schema or YAML schema document and update the line previewer CLI. Output:
content/_schema/dialogue-line.schema.json(or.yaml) with all 6 structural + 3 selection + 2 authoring-only tags. Monologue additions (character,trigger,prerequisite) as a separate schema extension or$ref. The schema is what the content cross-reference validation (CI ticket #464, done) runs against. Update the line previewer CLI (Sprint 5#326, already done) to validate against the new schema on load. Gestalt leads schema design. Mellanie validates against authoring workflow. The 14 v0.1 situations and 9 v0.1 topics from D-035 must be enumerated in the schema as allowed values.- Note:
server/src/content/line_pool.rsalready implements the Rust-sideIndexedDialogueLinetype — schema must stay in sync. Cross-referenceserver/src/content/line_pool.rsto confirm enum variants match D-035 enumeration.
- Note:
-
#328 — Access tier shift design document: A design document authored by Paula and Mellanie (no code). Output:
docs/design/access-tier-shifts.md. Required per ticket:- Per social site, 2-3 most likely tier transitions per character with specific triggers.
- Smuggler at The Terminal (hub):
insider → hostilewhen cover blown;insider → peerafter routine trust-building. - Smuggler at The Last Shift (bar):
public → insiderafter Kael introduction;insider → hostileif contraband conversation overheard. - Detective at The Terminal:
authority → peerafter collaboration event;authority → hostileif confrontation fails. - Detective at The Last Shift:
public → insidervia Sera Venn;authority → peerafter buying rounds. - For each transition: what observable event triggers it, which KG facts are required (
FactIdreferences from #368 knowledge vocabulary), and whether it is reversible. - This document feeds #169 (Layer 1 access tier filtering, deferred to S15) as its design input.
-
#536 — NPC-to-NPC overheard dialogue line pool: Write the line pool for NPC-to-NPC conversations that the player can overhear, per D-078. Lines must work at both full clarity (heard normally) and under heavy occlusion (many words dropped). The stochastic word-drop renderer operates per-word — lines must be authored so that partial information is still meaningful and interesting, not just broken.
- Occlusion-resilient authoring rules: (1) Front-load key information — the most important word should be in the first third of the sentence. (2) Short declarative sentences — one idea per line turn. (3) No pronoun-first openers (
"She told me..."→"Kael told me...") — the first word is statistically the most likely to drop; pronouns without antecedent are unresolvable. (4) Each exchange turn must be self-contained — a player who hears only one side of the exchange should still get a complete thought. - Volume and tagging: Minimum 40 exchange pairs (speaker A line + speaker B response = 1 pair). Cover three registers: social (idle chat, personal news), work (shift logistics, job gripes), gossip (third-party knowledge payload — something the player could use). Tag each pair with:
relationship_type(colleague, friend, hostile, romantic),topic, andknowledge_payload(a brief description of what the player can infer from hearing this exchange clearly — or partially). - Format: Use the D-035 YAML schema (see #168 for schema file). These are NPC-sourced lines, not player-character lines —
role=npc,accessandtrusttags apply normally. Monologue-specific tags (character,trigger,prerequisite) are not used for this pool; replace withrelationship_typeandknowledge_payloadas custom extensions, or confirm schema handling with Gestalt before writing. - Placement: Output to
content/npc-conversations/overheard.yaml(new directory, establish convention). - Mellanie writes lines, Paula validates narrative coherence (Kael/Sera-adjacent exchanges must honour D-034 THE FRIEND arc), Gestalt validates knowledge_payload tags are achievable from KG state.
- Delivery:
content/npc-conversations/overheard.yaml, minimum 40 exchange pairs, all tagged, all passing the occlusion-resilience checklist. No dependency on server #247 — content is authored ahead of the system that will select and emit it.
- Occlusion-resilient authoring rules: (1) Front-load key information — the most important word should be in the first third of the sentence. (2) Short declarative sentences — one idea per line turn. (3) No pronoun-first openers (
Dependency Chain
#253 (monologue architecture) → #120 (line pool files) → #121 (voice guide)
#168 (tagged line pool schema) → parallel with #253 track
#328 (access tier shifts) → parallel, standalone design doc
#536 (NPC-to-NPC overheard line pool) → parallel, standalone, feeds server #247
#253 must be started first — it defines the authoring contract that #120 writes to and #121 extends. #120 and #121 can overlap once #253 is drafted (Paula/Mellanie can start voice guide while Mellanie writes lines). #168 and #328 are fully independent and can proceed in parallel with the monologue track. #536 is also fully independent — no blockers, can proceed in parallel with all other copy work.
PR Workflow
When ready to submit, create a PR with tea CLI. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "docs(content): description" --description "body" --base main --head copy