--- title: "Sprint 24 — Copy Briefing" description: "Triangle activation monologue lines, per-archetype proximity content" type: sprint status: archived sprint: 24 team: "copy" --- # Sprint 24: Signal — Copy Tasks **Goal:** Wire the storyteller's activation event into player-visible consequences, thread character archetype through the full session lifecycle, and deliver the first unscripted end-to-end v0.1 playthrough — from main menu to triangle activation. **Branch:** `copy` **Agents:** Mellanie (dialogue), Paula (narrative), Gestalt (systems) > **This is the capstone sprint for v0.1.** The lines authored here are the player's first > experience of the storyteller doing its job. When the triangle activates and Kael's behavior > shifts, the character's internal voice is the signal. These lines carry D-039 wow moment #2 > ("The Character's Eye") — the moment the monologue notices something the player didn't. > Sprint 25 is playtest. Get these lines right. --- ## New Tickets | # | Title | Blocked by | |---|-------|------------| | #597 | Triangle activation — copy: author 3–5 proximity monologue lines for TriangleActivated (per archetype) | — | Use `tooling/db/ticket show ` for full details. --- ## Key Decisions - `decisions/scope.md` — D-039 (wow moment #2: "The Character's Eye" — monologue flags something the player didn't notice; urgent chime fires), D-027 (vertical slice criterion: the observe→notice→follow→discover sequence must emerge from systems, not scripts) - `decisions/content.md` — D-032 (separate monologue pools per character — no shared lines between smuggler and detective), D-035 (tag taxonomy: `trigger: observe_npc`, `situation: [triangle_activated]`, `character`, `prerequisite` fields required), D-090 (PC voice registers — smuggler: contracted, street-cadenced, risk-calculating; detective: analytical, institutional, uncontracted) - `decisions/content.md` — D-016 (monologue functions: perception bridge, atmosphere, diegetic hint, unreliable narrator — these lines are observation, not exposition), D-034 (THE FRIEND: Kael Davan is smuggler's FRIEND; Sera Venn is detective's FRIEND — these are the primary triangle anchor NPCs) - `decisions/content.md` — D-024 (tell system — `RoutineDeviation` tell fires when NPC is off schedule; these lines should feel like the character noticing the deviation, not naming the conspiracy) --- ## Open Questions to Resolve Early None blocking this ticket. The tag schema is fully specified (D-035). The character voice registers are documented (D-090). The NPC identities are confirmed (D-034). Author without waiting for server/client tickets to land — the content files are independent of the implementation. --- ## Notes ### #597 — Triangle activation proximity monologue lines **What exists:** The monologue pool system (`server/src/simulation/monologue.rs`) selects lines by `trigger`, `character`, `situation`, and `prerequisite`. The `observe_npc` trigger fires when the player is proximate to a specific NPC and has LOS to them. `RoutineDeviation` tell state is the server signal that a triangle anchor NPC is activated. The system can gate monologue lines on situation tags that correspond to game state — `triangle_activated` is a valid situation tag that the server can emit when `TriangleActivatedQueue` is non-empty. **What to deliver:** 3–5 monologue lines per character (smuggler and detective), placed in the correct pool files. **File locations:** - Smuggler: `content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/monologue/smuggler/the-terminal.yaml` - Detective: `content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/monologue/detective/the-terminal.yaml` (Kael and Torek are Terminal NPCs. Sera is also a Terminal presence. These lines fire when the player observes those NPCs post-activation while at The Terminal or maintenance corridors.) **Tag specification (D-035 required fields):** ```yaml - id: pc-smuggler_m_s_NNN # NNN = next available index in the smuggler pool text: "..." role: player_character access: [public] trust: surface situation: [triangle_activated] trigger: observe_npc mood: [suspicious] # or [anxious] depending on line content priority: 8 # higher than ambient lines; lower than opening hook (10) cooldown: 9999 # fires once per activation per session tags: [triangle-signal, tell-observation] prerequisite: npc_in_los: true # only fires when actively observing an NPC ``` **Smuggler lines — Kael Davan (triangle anchor: T1 hub-power)** The smuggler knows Kael. Kael is a colleague, possibly a friend. The lines must feel like noticing something personal about a familiar person, not flagging a conspiracy suspect. The smuggler's register (D-090): contracted, casual, risk-reading. Three beats to cover in 3–5 lines (one line per beat, no doubling): 1. Physical observation — Kael's behavior is off in a specific, observable way (posture, timing, direction). 2. Internal rationalization — the smuggler finds a mundane explanation first. This is deniable. 3. Doubt — the rationalization doesn't quite hold. The smuggler can't name what's wrong. The reader can. Example tone (do not use as final lines — author fresh): - Beat 1: "Kael's on the main corridor. He doesn't usually work this route." (Too on-the-nose; soften) - Beat 2: "Could just be a schedule swap. Voss does that sometimes." - Beat 3: "...but Kael doesn't swap shifts." These are tone illustrations, not copy. Paula and Mellanie should author the actual lines. **Detective lines — Sera Venn and Torek Lintar (triangle anchor: T2 informant-question)** The detective is external — these are analytical observations about NPCs whose behavior creates a logical anomaly in the investigation pattern. Detective register (D-090): uncontracted, institutional framing, evidence-cataloguing internal voice. Three beats: 1. Pattern recognition — the detective logs a behavioral deviation as data. 2. Hypothesis formation — what does this deviation imply? (stated as a question, not a conclusion) 3. Procedural next step — the detective's internal instinct is to act, not just observe. Example tone: - Beat 1: "Sera avoided eye contact with Torek again. Third occurrence in four observations." - Beat 2: "If she knows something about his manifest discrepancy, why the silence?" - Beat 3: "Worth a conversation. But not here." **What these lines must NOT do:** - Name the conspiracy directly ("Kael is in the ring" / "Torek is covering evidence") - Be omniscient — the character observes behavior, not motive - Be too long — 1–2 sentences maximum per line; monologue is a flash of interiority - Repeat vocabulary across lines — each line should use different sensory or cognitive entry **Verification:** Run the line previewer CLI to confirm schema compliance before committing: ```bash tooling/db/sqlite-query 'SELECT * FROM ...' # check via line previewer if available # Or: server/target/debug/line-previewer path/to/the-terminal.yaml ``` Confirm with `make validate-content` that the YAML parses without errors. --- ## Dependency Chain ``` #597 (proximity monologue lines) — no blockers, author immediately #597 → #593 (playthrough proof — must land before sprint is closed) ``` Start authoring #597 immediately. It is unblocked. The lines need to be in the content files before the playthrough proof (#593) can be run. --- ## PR Workflow ```bash tea pr create --repo jpmschweitzer/settled-reach --login schweitz \ --title "feat(copy): triangle activation proximity monologue lines" \ --description "body" --base main --head copy ``` --- ## Sprint Completion (Copy Criteria) 1. 3–5 smuggler monologue lines in `monologue/smuggler/the-terminal.yaml` with `situation: [triangle_activated]`, correct tag schema (D-035), `cooldown: 9999`, `trigger: observe_npc`. 2. 3–5 detective monologue lines in `monologue/detective/the-terminal.yaml` with the same schema. 3. `make validate-content` passes — YAML parses, required fields present, no FactId typos. 4. Voice consistency: smuggler lines are contracted, risk-reading; detective lines are analytical, institutional. Paula reviews before PR. 5. Lines do not name the conspiracy — they observe behavior and feel personal to the character.