Content conversion and authoring sprint — 19 tickets across copy (8), server (9), client (1 carry-over), and CI (1). Critical path runs through wiki→YAML NPC conversion (#398) to content loader (#408). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
122 lines
8.1 KiB
Markdown
122 lines
8.1 KiB
Markdown
# Sprint 4: Feel — Copy Tasks
|
|
|
|
**Goal:** Content conversion and authoring begins — wiki to YAML, content packs, monologue pool
|
|
|
|
**Branch:** `copy`
|
|
**Agents:** Mellanie (author), Paula (narrative), Gestalt (systems)
|
|
|
|
## Carry-over from Sprint 3
|
|
|
|
| # | Title | Status | Notes |
|
|
|---|-------|--------|-------|
|
|
| #405 | Interaction prompt — client extensible prompt system | in_progress | Client team ticket. Stig has this; copy team dependency only. |
|
|
|
|
## New Tickets
|
|
|
|
| # | Title | Priority | Blocked by |
|
|
|---|-------|----------|------------|
|
|
| #373 | Add smuggler-perspective FactId progression text | high | — |
|
|
| #383 | NPC-format briefs for both PCs — Concept A v0.1 | high | — |
|
|
| #398 | Wiki → YAML content conversion (Sova NPCs) | high | — |
|
|
| #399 | Monologue content pool — minimum viable (~200 lines) | high | — |
|
|
| #301 | Wiki taxonomy and structure — full future-ready schema | medium | — |
|
|
| #319 | Krenn System wiki entry — first star system | medium | #301 |
|
|
| #378 | Create environmental text examples file | medium | #319 |
|
|
| #395 | News ticker headline pool | medium | — |
|
|
|
|
Use `db/connectors/ticket show <id>` for full details.
|
|
|
|
## Key Decisions
|
|
|
|
- `decisions/content.md` — D-032 (separate monologue pools per character), D-034 (THE FRIEND pattern), D-035 (converged tag taxonomy), D-036 (Sova Transit District setting), D-037 (contraband specification)
|
|
- `decisions/architecture.md` — D-028 (dialogue architecture — tagged line pools)
|
|
- Workshop outputs: `docs/workshops/content-gap-analysis_v0_1/SUMMARY.md`, `TICKETS.md`
|
|
|
|
## Open Questions to Resolve Early
|
|
|
|
None. All blockers for Sprint 4 copy work resolved in Sprint 3. #261 (Dual Lens Authoring Guide), #382 (Smuggler voice card), #381 (PC-as-NPC spec), and #385-#386 (content infrastructure) are all done.
|
|
|
|
## Notes
|
|
|
|
**FactId progression text (#373):**
|
|
|
|
The smuggler and detective experience different knowledge progressions for many facts. Where the detective starts with KnowsNothing and works toward KnowsDetails, the smuggler may start with KnowsSomething or KnowsDetails.
|
|
|
|
- **What exists:** `wiki/knowledge/facts.md` contains canonical FactId definitions with detective-centric progression text. Entity attribute definitions are at `content/global/knowledge/entity-attributes.yaml` (task #388 will populate this).
|
|
- **What to deliver:** Add smuggler-perspective text for all facts where the smuggler's knowledge path differs. Format: add `smuggler_perspective` field to fact entries. ~15-25 facts need dual-lens treatment based on workshop analysis.
|
|
- **Integration:** These feed into monologue line prerequisite gates (D-035 monologue tags include `prerequisite` map).
|
|
|
|
**PC-as-NPC briefs (#383):**
|
|
|
|
When you play the smuggler, the detective exists as an NPC in the world (and vice versa). This ticket creates NPC-format behavior profiles for both characters in their "other mode."
|
|
|
|
- **What exists:** #381 (PC-as-NPC unified spec, done) defines the structural requirements. Character voice cards exist for both PCs.
|
|
- **What to deliver:** 5-7 routine entries each, reverse dual-lens observation notes (what the other character sees when observing you), basic behavior scripts. These are NPC profiles but don't need full 10-axis depth — PCs are special-case NPCs.
|
|
- **Blocks:** #401 (PC-as-NPC content authoring — the full line pool) depends on these briefs being written first.
|
|
|
|
**Wiki → YAML conversion (#398):**
|
|
|
|
The 17 Sova NPCs currently exist as wiki markdown profiles. This ticket converts them to engine-readable YAML in `content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/`.
|
|
|
|
- **What exists:**
|
|
- Content directory structure: `content/campaigns/main/systems/krenn/stations/sova/districts/transit/` (created in Sprint 3)
|
|
- YAML schema: `content/_schema/npc.schema.yaml` (Sprint 3)
|
|
- Wiki profiles: `wiki/npcs/*.md` (17 NPCs with 10-axis breakdowns, relationship webs, routine sketches)
|
|
- Validation tooling: `make validate-content` (Sprint 3, #392)
|
|
- **What to deliver:** One YAML file per NPC following the schema. Includes routine YAML layer (Paula Gap 3 from workshop), triangle fork decision points (Gap 4), location references, relationship metadata.
|
|
- **Integration:** These NPCs populate templates (#390) and appear in triangles (#391). **Blocks #408** (YAML content loader Phase 2 — the server can't load real NPCs until they exist in YAML form).
|
|
- **Note:** This is mechanical conversion work enriched with the structured layers from the workshop. Not authoring new NPCs — translating existing profiles to the canonical format.
|
|
|
|
**Monologue pool (#399):**
|
|
|
|
Minimum viable monologue content: ~100 lines per character (smuggler + detective), ~200 total.
|
|
|
|
- **What exists:**
|
|
- Directory structure: `content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/` and `.../smuggler/` (Sprint 3)
|
|
- Schema: `content/_schema/monologue.schema.yaml` (Sprint 3, includes all D-035 tags)
|
|
- Authoring guide: #261 (Dual Lens Authoring Guide, done in Sprint 3)
|
|
- Voice cards: smuggler voice card (#382, done)
|
|
- Location catalog: Sova Transit District has 3 social sites (The Terminal, The Last Shift, maintenance corridors)
|
|
- **What to deliver:** YAML files with categorized lines per location + character. Categories from workshop: arrival observations, NPC routine commentary, environmental flavor, contradiction hints, idle reflections, tutorial/orientation. Each line tagged with D-035 taxonomy: `character`, `trigger`, `prerequisite` (if gated), dual-lens notes.
|
|
- **Integration:** Server's monologue system (exists, tested in Sprint 2-3) selects lines from these pools based on game state. This is the first real content load.
|
|
- **Authoring priority:** Follows Mellanie authoring order from workshop — arrival + environmental flavor first (establishes sense of place), then NPC commentary (exercises observation triggers), then knowledge-gated lines (tests prerequisite system).
|
|
|
|
**Environmental text examples (#378):**
|
|
|
|
Create `wiki/authoring/environmental-text-examples.md` with 4 text types: bar menu, safety notice, news ticker cycle, corridor graffiti. Krenn System-voiced (working-class pragmatic, freight-logistics culture) with cultural notes + monologue pairings (smuggler + detective perspectives).
|
|
|
|
- **Blocked by:** #319 (Krenn System wiki entry, now in Sprint 4). Complete #301 → #319 first.
|
|
- **Purpose:** Reference examples for future content authors. Not consumed by game engine — authoring documentation.
|
|
|
|
**News ticker headlines (#395):**
|
|
|
|
~20 dual-lens headlines for the Meridian news feed at The Last Shift bar. Mix: freight/commodity data, Assembly politics, local infrastructure, sports, Commission advisories.
|
|
|
|
- **What exists:** The Last Shift location is defined. News ticker as environmental element is sketched in location notes.
|
|
- **What to deliver:** YAML file at `content/campaigns/main/systems/krenn/stations/sova/districts/transit/locations/the-last-shift-ticker.yaml` with headline pool. Each headline works as dual-lens monologue trigger (detective sees political context, smuggler sees market/operational intel).
|
|
- **Integration:** v0.1 may render this as static background text. v0.2 ticker system will cycle headlines. Content is authored dual-lens from day one so the system upgrade is data-driven, not content rewrite.
|
|
|
|
## Dependency Chain
|
|
|
|
```
|
|
#373 (FactId smuggler text) → standalone (feeds #399 prerequisite content)
|
|
#383 (PC-as-NPC briefs) → #401 (PC-as-NPC authoring, Sprint 5)
|
|
#398 (Wiki → YAML NPCs) → #408 (server content loader Phase 2)
|
|
#399 (Monologue pool) → standalone (first real content load)
|
|
#395 (News ticker) → standalone
|
|
#301 (Wiki taxonomy) → standalone
|
|
#319 (Krenn System entry) → #301
|
|
#378 (Environmental examples) → #319
|
|
```
|
|
|
|
**Critical path:** #398 is the blocking ticket for server team's #408. Everything else is parallel.
|
|
|
|
**Parallel work:** #373, #383, #399, #395 can all proceed independently.
|
|
|
|
## 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):
|
|
```bash
|
|
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(content): description" --description "body" --base main --head copy
|
|
```
|