Files
settled-reach/docs/sprints/sprint-15/copy.md
T
jpmschweitzerandClaude Opus 4.6 c01ad011ed docs(sprints): add Sprint 15 React briefings
Server (7), client (5), copy (2) tickets. Goal: player acts and
world reacts — follow/examine, dialogue access layers, server-side
monologue events, personality and tell system.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 13:43:49 +01:00

55 lines
7.4 KiB
Markdown

# Sprint 15: React — Copy Tasks
**Goal:** The player acts and the world reacts — follow and examine mechanics connect the player to the living NPC simulation; the dialogue system's first two access layers open up information gating; server-side monologue events fire in context; and the personality/tell system completes the NPC data model.
**Branch:** `copy`
**Agents:** Mellanie (lead author), Paula (narrative design), Gestalt (systems/content architecture)
## New Tickets
| # | Title | Blocked by |
|---|-------|------------|
| #299 | Opening hook content — smuggler first 5 minutes | all blockers done |
| #300 | Opening hook content — detective first 5 minutes | all blockers done |
| #169 | Layer 1: Access tier filtering (content for dialogue system) | — |
| #170 | Layer 2: Relationship history (content for dialogue system) | — |
Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/content.md` — D-016 (internal monologue functions: perception bridge, atmosphere, diegetic tutorial, unreliable narrator), D-024 (10-axis NPC model; personality traits, tell system), D-028 (dialogue 4-layer architecture: access tiers → relationship history → trust gossip → unprompted disclosure), D-032 (separate monologue pools per character — hard partition), D-034 (THE FRIEND pattern: Kael Davan / Sera Venn), D-035 (converged tag taxonomy — 6 structural + 3 selection tags; 9 mood states post Sprint 14 amendment), D-036 (Sova Transit District setting, Krenn System naming conventions), D-075 (dialogue filtering: KnowledgeConfidence gates TrustTier, not AccessTier)
- `decisions/perception.md` — D-060 (cognitive delay 0.6s / 0.3s), D-061 (unified dialogue log, bottom screen, max 20% height, max 640px wide), D-062 (invisible locked options — no lock icons), D-063 (confrontation: same box, different weight — italicized first-person voice), D-064 (walk-away: three-phase consequences, KG records incompleteness), D-078 (overheard NPC conversation — passive panel with occlusion filter; monologue reacts via `witness_interaction` trigger)
## Notes
- **#299 Opening hook — smuggler first 5 minutes:** All blockers are done: Dual Lens Authoring Guide (#261), character voice speech patterns (#310), knowledge state vocabulary (#309), monologue display visual spec (#315). This is the single most important content deliverable in the game — it blocks all playtest feedback and defines first impressions. Deliver 10-15 tightly sequenced monologue lines structured as a diegetic tutorial arc: (1) station hum as opening sensation, (2) spatial orientation — NPCs already moving, fog boundary visible, (3) first sight of Kael (warm, trusted — D-033 green entity), (4) news ticker glance (optional environmental text moment), (5) first fog-edge sound ping noticed (teaches sound channel). Voice: smuggler is working-class pragmatic, warm but watchful, compact consonant-heavy Krenn naming in references (D-036). Prerequisite tags (`knowledge_state` gates) must be `null` for this sequence — these lines fire on first encounter, before any knowledge graph state exists. Use `trigger: enter_location` for spatial lines, `trigger: observe_npc` for Kael sighting. File structure: `monologue-smuggler.yaml` per D-032. This ticket blocks #330 (diegetic tutorial lines), so prioritize it early.
- **#300 Opening hook — detective first 5 minutes:** Same blockers done, same urgency. Different emotional register: detective arrives into established rhythm (mid-morning, D-036 Sova atmosphere). The detective is an institutional outsider with analytical lattice — sharper, more detached voice. Tutorial pathway differs: detective's insert HUD is denser (D-048), first NPC contact mediated by institutional insert overlay (Authority access relationship by default). 10-15 lines structured as: (1) institutional orientation — commission kiosk visible, cool-lit corridors (D-046), (2) analytical lattice flagging ambient data (teaches insert channel), (3) first sight of Sera Venn (THE FRIEND, D-034 — currently Unknown/Neutral teal per D-033), (4) cargo manifest anomaly observation (sets detective motivation). Voice: analytical, institutional, controlled. Krenn naming in observations (D-036). File structure: `monologue-detective.yaml` per D-032.
- **#169 Layer 1: Access tier filtering:** D-028 Layer 1 is the foundational gate on the dialogue system. Every dialogue line in the content files must carry an `access` tag (list): values are `public`, `insider`, `authority`, `peer`, `hostile`. This ticket's content deliverable is: (a) audit all existing line pool files under `content/` for correct `access` tagging — flag any lines missing the tag, (b) author the Layer 1 filter logic design spec if one does not exist (how does `RelationshipState` map to `access` tier? see D-075: AccessTier is gated by `RelationshipState` only, not `KnowledgeConfidence`), (c) ensure the existing Kael and Sera line pools (authored in earlier sprints) have correct `access` tags on every line. The dialogue selection pipeline (`server/src/simulation/dialogue.rs`, #305 done) already implements Layer 1 filtering — this ticket is the content-side completion: all lines properly tagged, authoring guide updated for Line Layer 1 rules, Gestalt to confirm tag schema is consistent with D-035 structural tags. Cross-reference: the detective gets Authority access naturally from institutional role; the smuggler gets Insider/Peer access from social network — no archetype tag needed on the pipeline (D-075 emergent design).
- **#170 Layer 2: Relationship history:** D-028 Layer 2 modifies greeting and topic selection based on the interaction log per NPC pair. Content deliverable: (a) define the situation tags that encode relationship history context — D-035 lists 13 situations for v0.1, with `greeting` added in Sprint 8 amendment as the 14th; specify which situations encode first_meeting, established, tense, post_confrontation, post_walkaway states, (b) author `situation: greeting` variants for Kael and Sera line pools — first meeting line (situation: greeting, access: [public]) vs repeat visit line (situation: greeting, access: [peer]) should differ meaningfully, (c) document how the engine maps `InteractionMemory` (#325, done) interaction log to Layer 2 situation tags — Gestalt to write or verify this mapping in the authoring guide. The dialogue selection pipeline already calls Layer 2 filtering; this ticket completes the content to exercise it. Result: Kael greets the smuggler differently on first vs third encounter. Sera greets the detective differently before and after the detective has spoken to her colleagues.
## Dependency Chain
```
#299 (Smuggler opening hook) ──┐
#330 (Diegetic tutorial lines — deferred sprint 16)
#300 (Detective opening hook) ─┘
#169 (Layer 1: Access tier filtering) → must complete before Layer 3 work (#171, sprint 16)
#170 (Layer 2: Relationship history) → must complete before Layer 3 work (#171, sprint 16)
#299 and #300 are parallel. #169 and #170 are parallel.
```
## PR Workflow
When ready to submit, create a PR with the `tea` CLI. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
```bash
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(copy): sprint 15 react — opening hooks + dialogue layer 1-2" --description "body" --base main --head copy
```