Files
settled-reach/docs/sprints/sprint-14/copy.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

12 KiB
Raw Blame History

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.
    • prerequisite map 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 — see server/src/content/mod.rs and server/src/content/loader.rs for 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) and time_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).
  • #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.rs already implements the Rust-side IndexedDialogueLine type — schema must stay in sync. Cross-reference server/src/content/line_pool.rs to confirm enum variants match D-035 enumeration.
  • #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 → hostile when cover blown; insider → peer after routine trust-building.
    • Smuggler at The Last Shift (bar): public → insider after Kael introduction; insider → hostile if contraband conversation overheard.
    • Detective at The Terminal: authority → peer after collaboration event; authority → hostile if confrontation fails.
    • Detective at The Last Shift: public → insider via Sera Venn; authority → peer after buying rounds.
    • For each transition: what observable event triggers it, which KG facts are required (FactId references 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, and knowledge_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, access and trust tags apply normally. Monologue-specific tags (character, trigger, prerequisite) are not used for this pool; replace with relationship_type and knowledge_payload as 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.

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