From 2fa609b19cb20ffa15291d3fec55f74c4b999a1b Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Fri, 13 Feb 2026 01:50:59 +0100 Subject: [PATCH] docs(sprints): add Sprint 5 "Live" team briefings Content-focused sprint: FRIEND packs (Kael Davan, Sera Venn), NPC authoring style guide, voice patterns, PC-as-NPC content, UI microcopy, and FactId pre-commit validation. Briefings for copy (6 tickets), client (2), CI (1), plus joint integration. Co-Authored-By: Claude Opus 4.6 --- docs/sprints/sprint-5/ci.md | 81 +++++++++++ docs/sprints/sprint-5/client.md | 126 +++++++++++++++++ docs/sprints/sprint-5/copy.md | 212 ++++++++++++++++++++++++++++ docs/sprints/sprint-5/joint.md | 241 ++++++++++++++++++++++++++++++++ 4 files changed, 660 insertions(+) create mode 100644 docs/sprints/sprint-5/ci.md create mode 100644 docs/sprints/sprint-5/client.md create mode 100644 docs/sprints/sprint-5/copy.md create mode 100644 docs/sprints/sprint-5/joint.md diff --git a/docs/sprints/sprint-5/ci.md b/docs/sprints/sprint-5/ci.md new file mode 100644 index 000000000..b76798041 --- /dev/null +++ b/docs/sprints/sprint-5/ci.md @@ -0,0 +1,81 @@ +# Sprint 5: Live — CI Tasks + +**Goal:** Content at scale — FRIEND packs, PC-as-NPC authoring, NPC style guide + +**Branch:** `ci` +**Agents:** Justine (CI/CD lead) + +## New Tickets + +| # | Title | Blocked by | +|---|-------|------------| +| #393 | Pre-commit FactId typo check | — | + +Use `db/connectors/ticket show ` for full details. + +## Key Decisions + +- `decisions/content.md` — D-035 (tag taxonomy with FactId references) +- `decisions/architecture.md` — D-030 (testability architecture) + +## Notes + +### #393: Pre-commit FactId typo check + +**What exists:** +- Content directory structure at `content/` +- YAML schema files in `content/_schema/` +- Canonical facts defined in global knowledge files (check `content/global/knowledge/`) +- `make validate-content` CLI from Sprint 4 (#392) +- Pre-commit hooks infrastructure at `.config/pre-commit/` or similar + +**What to deliver:** +- Grep-based pre-commit check validating FactId references in YAML content files against canonical facts.yaml +- Cheap v0.1 bridge until full cross-reference validation lands in later sprint +- Should catch typos like `npc_identity.kael_davan.occupation` vs `npc_identity.kael_davan.job` before commit + +**Implementation approach:** +1. Extract canonical FactId list from global knowledge YAML files +2. Extract all FactId references from campaign content YAML files +3. Compare: flag any referenced FactId that doesn't exist in canonical list +4. Hook into pre-commit (runs before git commit, fails if violations found) + +**File location:** +- Script: `.config/pre-commit/check-fact-ids.sh` or `tooling/lint/check-fact-ids.py` +- Configuration: `.pre-commit-config.yaml` (if using pre-commit framework) or `.git/hooks/pre-commit` + +**Performance constraint:** Must run fast (<2 seconds) — content authors will run this on every commit. Grep-based approach should be sufficient for v0.1 scale (~hundreds of facts, ~tens of content files). + +**Integration:** Coordinate with copy team (Mellanie, Paula) on FactId naming conventions. Review `content/global/knowledge/entity-attributes.yaml` and similar files for canonical fact definitions. + +**Gotcha:** Some FactIds might be templated or dynamic (role-based, not hardcoded). Check with content team on how to handle template slots like `{role}.occupation`. + +**Test plan:** +1. Create test content file with valid FactId → pre-commit passes +2. Create test content file with typo FactId → pre-commit fails with clear error +3. Fix typo → pre-commit passes + +--- + +## Sprint Success Criteria + +By end of Sprint 5, CI team delivers: + +1. **FactId typo check** — pre-commit hook operational, tested, documented +2. **Integration with content workflow** — copy team uses check during FRIEND pack authoring + +This is a single-ticket sprint for CI. Goal is content quality assurance — prevent FactId typos from reaching main branch during heavy content authoring sprint. + +## PR Workflow + +When ready to submit, create a PR with `tea` CLI: + +```bash +tea pr create \ + --repo jpmschweitzer/settled-reach \ + --login schweitz \ + --title "feat(ci): pre-commit FactId validation" \ + --description "Sprint 5 CI delivery - see docs/sprints/sprint-5/ci.md" \ + --base main \ + --head ci +``` diff --git a/docs/sprints/sprint-5/client.md b/docs/sprints/sprint-5/client.md new file mode 100644 index 000000000..6425effa3 --- /dev/null +++ b/docs/sprints/sprint-5/client.md @@ -0,0 +1,126 @@ +# Sprint 5: Live — Client Tasks + +**Goal:** Content at scale — FRIEND packs, PC-as-NPC authoring, NPC style guide + +**Branch:** `client` +**Agents:** Stig (UI lead), Tyre (integration), Hoshe (testing) + +## Carry-over from Sprint 4 + +| # | Title | Status | Notes | +|---|-------|--------|-------| +| #405 | Interaction prompt — client extensible prompt system | in_progress | Stig actively working, carries into Sprint 5 | + +## New Tickets + +| # | Title | Blocked by | +|---|-------|------------| +| #409 | UI microcopy | — (joint with copy team) | + +Use `db/connectors/ticket show ` for full details. + +## Key Decisions + +- `decisions/architecture.md` — D-020 (Godot client + Rust server via IPC) +- `decisions/scope.md` — D-027 (vertical slice), D-039 (wow moments) +- `decisions/content.md` — D-028 (dialogue architecture), D-035 (tag taxonomy) + +## Critical Path + +``` +#405 (interaction prompt, carry-over) → complete independently +#409 (UI microcopy) → starts when copy delivers strings +``` + +Client team has light load this sprint — Sprint 4 delivered most client infrastructure. Sprint 5 focus is content authoring (copy team) with client providing integration points. + +## Notes + +### #405: Interaction prompt — client extensible prompt system (CARRY-OVER) + +**What exists:** +- Server-side interaction system with proximity detection (#404, done in Sprint 4) +- Multi-verb `InteractionOptions` server state +- Client rendering infrastructure at `client/scripts/rendering/` +- Protocol types in `client/scripts/protocol/` + +**What to deliver:** +- Client-side interaction prompt UI system +- v0.1: single context-sensitive E prompt +- Architecture must support v0.2 multi-verb menu (design for extensibility now, build minimal version) +- Prompt reads `InteractionOptions` from server snapshot +- Visual design: minimalist, diegetic feel (neural insert aesthetic) +- Position: near interactable entity or HUD corner (test both, choose best) + +**File location:** New script at `client/scripts/ui/interaction_prompt.gd` or extend existing HUD system + +**Integration:** Reads from `ObserverSnapshot` message field `interaction_options`. When non-empty, show prompt. On player input (E key), send `Interact` command to server. + +**Gotcha:** This is Sprint 4 in-progress work. Stig should finish architecture in early Sprint 5, then support #409 integration. + +--- + +### #409: UI microcopy (JOINT TICKET) + +**What exists:** +- Client UI elements from Sprint 3 +- Interaction prompt system (#405, finalizing) +- Constants at `client/scripts/constants.gd` +- Rendering scripts at `client/scripts/rendering/` + +**What to deliver:** +- Integration of ~50 UI strings from copy team +- Determine string format (YAML file vs GDScript constants) +- Apply strings to: interaction prompts, knowledge panel labels, relationship state descriptors, HUD labels, tutorial text +- Coordinate with copy team on file format and location + +**Workflow:** +1. Early sprint: coordinate with copy team (Mellanie) on format and location +2. Copy team authors strings +3. Client team integrates into UI systems +4. Test in-game, provide feedback to copy if strings don't fit UI constraints + +**File location (proposed):** `client/scripts/constants/ui_strings.gd` or load from `content/campaigns/main/_meta/ui-strings.yaml` via content loader + +**Integration points:** +- Interaction prompt labels (E to interact, E to talk, E to examine, etc.) +- Knowledge panel headers ("Known Contacts", "Persons of Interest", etc.) +- Relationship state text ("Trusted colleague", "Flagged by case file", etc.) +- HUD labels (time display, location name, pause indicator) +- Tutorial/hint text (if any) + +**Gotcha:** UI strings must be brief — HUD space is limited. If copy delivers long strings, client team provides length constraints and copy revises. + +--- + +## Sprint Success Criteria + +By end of Sprint 5, client team delivers: + +1. **Interaction prompt system complete** (#405) — context-sensitive E prompt working in-game +2. **UI microcopy integrated** (#409) — all 50 strings applied to UI elements, tested in-game + +Light sprint for client team. Primary work is finishing #405 carry-over and coordinating #409 integration with copy. + +## Testing Notes + +Both tickets need in-game validation: + +- **#405:** Test interaction prompts with multiple verb types (talk, examine, interact with object). Verify prompt appears/disappears based on proximity. Test visual clarity in fog/non-fog areas. +- **#409:** Test all UI strings in context. Check for text overflow, truncation, readability. Verify tone matches Sova setting (quotidian-with-undertow, working-class pragmatic). + +Use existing client test infrastructure (gdUnit4 if applicable, or manual playtesting). + +## PR Workflow + +When ready to submit, create a PR with `tea` CLI: + +```bash +tea pr create \ + --repo jpmschweitzer/settled-reach \ + --login schweitz \ + --title "feat(ui): interaction prompt + UI microcopy" \ + --description "Sprint 5 client delivery - see docs/sprints/sprint-5/client.md" \ + --base main \ + --head client +``` diff --git a/docs/sprints/sprint-5/copy.md b/docs/sprints/sprint-5/copy.md new file mode 100644 index 000000000..2d51bfc3a --- /dev/null +++ b/docs/sprints/sprint-5/copy.md @@ -0,0 +1,212 @@ +# Sprint 5: Live — Copy Tasks + +**Goal:** Content at scale — FRIEND packs, PC-as-NPC authoring, NPC style guide + +**Branch:** `copy` +**Agents:** Mellanie (lead writer), Paula (NPC design), Gestalt (systems content) + +## New Tickets + +| # | Title | Blocked by | +|---|-------|------------| +| #310 | Character voice speech patterns — smuggler + detective | — | +| #379 | NPC Authoring Style Guide | #310 | +| #297 | THE FRIEND: Smuggler NPC — Kael Davan full profile + content pack | #310 | +| #298 | THE FRIEND: Detective NPC — Sera Venn full profile + content pack | #310 | +| #401 | PC-as-NPC content authoring | #297, #298 | +| #409 | UI microcopy | — (joint with client) | + +Use `db/connectors/ticket show ` for full details. + +## Key Decisions + +- `decisions/content.md` — D-028 (dialogue architecture), D-032 (separate monologue pools), D-034 (THE FRIEND pattern), D-035 (tag taxonomy) +- `decisions/scope.md` — D-027 (vertical slice criteria), D-036 (Sova setting), D-039 (wow moments) + +## Critical Path + +This sprint's critical path runs through voice patterns: + +``` +#310 (voice patterns, CRITICAL START) + → #297 (Kael FRIEND pack) + #298 (Sera FRIEND pack) + → #401 (PC-as-NPC authoring) + +#379 (style guide) — parallel authoring track, informed by #310 +#409 (UI microcopy) — standalone, can start immediately +``` + +**#310 must be completed first.** The FRIEND packs require production-level voice consistency across ~75-100 hand-authored lines per character. Voice patterns are the specification that makes that consistency achievable. + +## Notes + +### #310: Character voice speech patterns + +**What exists:** +- Smuggler and detective personality profiles in wiki (`docs/workshops/content-scoping-v01/round2-synthesis.md`) +- PC-as-NPC unified spec (#381, done in Sprint 4) +- Dual lens authoring guide (#261, completed earlier) + +**What to deliver:** +- Speech-level character detail document covering both playable characters (smuggler + detective) +- Per character: sentence length patterns, contraction usage, internal monologue style, nervous behavior verbal markers, frustration register, vocabulary level +- The micro-decisions that ensure 500 lines sound like the same person +- Output format: markdown document at `content/campaigns/main/_meta/voice-patterns.md` or in wiki under `docs/workshops/content-scoping-v01/` + +**Integration:** This document is the specification for all FRIEND pack authoring and PC-as-NPC content. Mellanie and Paula both use it as constraint set. + +**Gotcha:** This is not personality traits (those exist). This is the sentence-level execution detail — how long are their sentences, do they use contractions, what verbal tics mark stress. + +--- + +### #379: NPC Authoring Style Guide + +**What exists:** +- Tier templates (Paula's Round 2 work) +- Authoring rules from Mellanie conventions +- Regional culture brief (Miri's Sova/Krenn content) +- Content pipeline structure (#384, done) +- Monologue guide (`docs/workshops/content-scoping-v01/monologue-authoring-guide.md`) + +**What to deliver:** +- Combined style guide document consolidating tier templates, authoring rules, Gestalt constraints, Ozzie anchor line guidance +- Must cover: dialogue line authoring, monologue authoring, tag usage, dual-lens coordination, regional culture application +- Target audience: future content authors (including AI-assisted generation) +- Output location: `content/_meta/npc-authoring-style-guide.md` or similar + +**Integration:** This is the handbook for all future NPC content authoring. Used immediately by FRIEND pack work. + +**Blocked by:** #310 voice patterns should inform style guide rules. Style guide can start in parallel but final version needs voice patterns complete. + +--- + +### #297: THE FRIEND — Kael Davan (smuggler NPC) + +**What exists:** +- Full 10-axis profile concept (D-024) +- THE FRIEND pattern spec (D-034) +- Kael character concept: dock worker, ring member, smuggler's closest colleague +- Contradiction: meeting unknown person in restricted corridor (trying to exit ring to protect partner Naia) +- Content directory structure at `content/campaigns/main/systems/krenn/sova/sova-transit/` +- YAML schema files in `content/_schema/` + +**What to deliver:** +- ~75-100 hand-authored lines (NO generation expansion for FRIEND content) +- Breakdown: 25-35 dialogue, 15-20 trust-gated, 5-8 unprompted, 10-15 monologue (smuggler character pool), 5-8 tell observation, 3-5 contradiction discovery +- Multi-phase relationship arc: comfort → first crack → observation → confrontation → new equilibrium +- Full 10-axis NPC profile in YAML format +- Voice kit, greeting pool, trust-gated dialogue, routine dialogue, contradiction dialogue, monologue reactions, tell descriptions +- Dual-lens notes for detective perspective (how detective sees Kael differently) + +**File locations:** +- Profile: `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/kael-davan.yaml` +- Dialogue: `content/campaigns/main/systems/krenn/sova/sova-transit/dialogue/kael-davan-*.yaml` (split by content type) +- Monologue: `content/campaigns/main/systems/krenn/sova/sova-transit/monologue/smuggler/kael-*.yaml` + +**Integration:** D-039 wow moment #3 (THE FRIEND's contradiction) depends on this content. Success criterion D-027 #3 (player names NPC they felt conflicted about) is tested by Kael. + +**Blocked by:** #310 voice patterns. Kael needs consistent voice across 75-100 lines. + +--- + +### #298: THE FRIEND — Sera Venn (detective NPC) + +**What exists:** +- Full 10-axis profile concept (D-024) +- THE FRIEND pattern spec (D-034) +- Sera character concept: Commission field tech, bar regular, detective's social anchor +- Contradiction: avoids Torek Lintar (protecting friend Naia, sitting on unreported evidence) +- Content directory structure at `content/campaigns/main/systems/krenn/sova/sova-transit/` + +**What to deliver:** +- ~75-100 hand-authored lines (same breakdown as #297) +- Multi-phase relationship arc: trust → background data → pattern recognition → the question → contaminated trust +- Institutional access + personal loyalty conflict theme +- Avoidance pattern as observable tell +- Trust-contamination arc (relationship state shift when contradiction discovered) + +**File locations:** +- Profile: `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/sera-venn.yaml` +- Dialogue: `content/campaigns/main/systems/krenn/sova/sova-transit/dialogue/sera-venn-*.yaml` +- Monologue: `content/campaigns/main/systems/krenn/sova/sova-transit/monologue/detective/sera-*.yaml` + +**Integration:** D-039 wow moment #3 for detective playthrough. Tests institutional vs personal loyalty conflict pattern. + +**Blocked by:** #310 voice patterns. + +--- + +### #401: PC-as-NPC content authoring + +**What exists:** +- PC-as-NPC unified spec (#381, done) +- Smuggler voice card + moral arc spec (#382, done) +- NPC-format briefs for both PCs (#383, done) +- THE MIRROR pattern spec (#380, done) +- Content directory structure + +**What to deliver:** +- Actual PC-as-NPC authored lines: 5-7 routine entries per character, 3-5 observation monologue lines, reverse dual-lens notes +- ~25 authored items total (Mellanie's budget from workshop) +- Smuggler-as-NPC content (how detective observes the smuggler) +- Detective-as-NPC content (how smuggler observes the detective) +- Routine entries showing how PC moves through space when played by engine vs by player + +**File locations:** +- Smuggler routine: `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/pc-smuggler.yaml` +- Detective routine: `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/pc-detective.yaml` +- Cross-character monologue in respective character pools + +**Integration:** D-039 wow moment #4 (the divergence reveal). Enables second playthrough recognition. + +**Blocked by:** FRIEND packs must be complete first — PC-as-NPC uses same authoring patterns, benefits from FRIEND pack workflow lessons. + +--- + +### #409: UI microcopy + +**What exists:** +- Stig's UI element specs from Sprint 3 +- Interaction prompt system (#405, in progress in Sprint 4/5) +- Client rendering scripts at `client/scripts/rendering/` +- Constants file at `client/scripts/constants.gd` + +**What to deliver:** +- ~50 UI strings: interaction prompt labels, knowledge panel labels, relationship state descriptors, HUD labels, tutorial text +- Format: YAML file or GDScript constant definitions (coordinate with Stig) +- Must align with Sova setting voice (D-036) — working-class pragmatic, quotidian-with-undertow + +**File location:** TBD with Stig — either `content/campaigns/main/_meta/ui-strings.yaml` or `client/scripts/constants/ui_strings.gd` + +**Integration:** Joint ticket with client team. Copy writes strings, client integrates into UI systems. + +**Not blocked:** Can start immediately, doesn't depend on FRIEND packs. + +--- + +## Sprint Success Criteria + +By end of Sprint 5, copy team delivers: + +1. **Voice patterns document** — smuggler and detective speech-level specification +2. **Style guide** — comprehensive NPC authoring handbook +3. **Kael Davan FRIEND pack** — 75-100 hand-authored lines, full profile, multi-phase arc +4. **Sera Venn FRIEND pack** — 75-100 hand-authored lines, full profile, trust-contamination arc +5. **PC-as-NPC content** — 25 authored items enabling second-playthrough recognition +6. **UI strings** — 50 microcopy items for client integration + +This is the heaviest copy sprint to date. FRIEND packs are production-level content that carries multiple D-027 success criteria and D-039 wow moments. Quality bar is high — these NPCs must make players feel conflicted. + +## PR Workflow + +When ready to submit, create a PR with `tea` CLI: + +```bash +tea pr create \ + --repo jpmschweitzer/settled-reach \ + --login schweitz \ + --title "feat(content): Sprint 5 FRIEND packs + style guide" \ + --description "Sprint 5 copy team delivery - see docs/sprints/sprint-5/copy.md" \ + --base main \ + --head copy +``` diff --git a/docs/sprints/sprint-5/joint.md b/docs/sprints/sprint-5/joint.md new file mode 100644 index 000000000..986251ea9 --- /dev/null +++ b/docs/sprints/sprint-5/joint.md @@ -0,0 +1,241 @@ +# Sprint 5: Live — Joint Integration + +**Goal:** Content at scale — FRIEND packs, PC-as-NPC authoring, NPC style guide + +**Teams:** Copy, Client, CI +**Agents:** All implementation agents + +## Sprint Overview + +Sprint 5 is content-focused with light infrastructure support. The copy team carries the heaviest load — authoring production-level FRIEND NPC content that exercises every content pipeline at full depth. Client and CI teams provide integration and quality assurance. + +## Team Distribution + +| Team | Ticket Count | Load | +|------|--------------|------| +| Copy | 6 tickets | Heavy (2 FRIEND packs ~75-100 lines each + style guide + voice patterns) | +| Client | 2 tickets | Light (1 carry-over + 1 joint integration) | +| CI | 1 ticket | Light (pre-commit validation hook) | +| Server | 0 tickets | No work (Sprint 4 delivered content loading infrastructure) | + +## Pre-Sprint Requirements + +None. Sprint 5 builds on Sprint 4 deliverables: + +- Content directory structure (#385, done) +- Content schema definitions (#386, done) +- YAML content loader Phase 2 (#408, done) +- Interaction system with multi-verb support (#404, done) +- Pause system (#406, done) +- Line previewer CLI (#407, done) + +All infrastructure needed for content authoring is in place. + +## Dependency Graph + +``` +Critical path (copy team): +#310 (voice patterns) + ├─→ #297 (Kael FRIEND pack) + ├─→ #298 (Sera FRIEND pack) + └─→ #379 (style guide, parallel but informed by #310) + +#297 + #298 (both FRIEND packs complete) + └─→ #401 (PC-as-NPC authoring) + +Parallel tracks: +#405 (interaction prompt, client) → standalone carry-over +#409 (UI microcopy) → copy authors strings, client integrates +#393 (FactId check, CI) → standalone, supports content quality +``` + +## Cross-Team Integration Points + +### Copy ↔ Client: UI Microcopy (#409) + +**Workflow:** +1. Early sprint: Stig (client) and Mellanie (copy) agree on format (YAML vs GDScript constants) +2. Copy team authors ~50 UI strings +3. Copy delivers strings to client team (PR or shared file) +4. Client integrates strings into UI systems +5. Client tests in-game, provides length/fit feedback if needed +6. Copy revises if strings don't fit UI constraints +7. Final integration tested and merged + +**Coordination channel:** Direct agent-to-agent (Stig ↔ Mellanie) + +### Copy ↔ CI: FactId Validation (#393) + +**Workflow:** +1. Justine (CI) implements pre-commit FactId check +2. Copy team reviews canonical FactId list in `content/global/knowledge/` +3. CI delivers working hook early in sprint +4. Copy team uses hook during FRIEND pack authoring (catches typos before commit) +5. Copy provides feedback on false positives / naming edge cases + +**Coordination channel:** Direct agent-to-agent (Justine ↔ Mellanie/Paula) + +### Internal Copy: Voice Patterns Blocker + +**Blocker:** #297 and #298 (FRIEND packs) are blocked by #310 (voice patterns) + +**Resolution:** Mellanie must deliver voice patterns document first. Paula and Gestalt can start profile work (10-axis NPCs, relationship arcs, contradiction scenarios) in parallel, but dialogue authoring waits for voice spec. + +**Parallel work during voice patterns authoring:** +- Paula: 10-axis profiles for Kael and Sera (personality, relationships, wants, secrets, routines) +- Gestalt: relationship phase mapping (comfort→crack→observation→confrontation for Kael, trust→data→recognition→question→contamination for Sera) +- Mellanie: voice patterns for both PCs + +Once #310 complete, all three agents author FRIEND dialogue using voice spec. + +## Sprint Completion Proof + +At the end of Sprint 5, the following must be observable: + +### Content Deliverables + +1. **Voice patterns document exists** at `content/campaigns/main/_meta/voice-patterns.md` or in wiki + - Contains speech-level detail for smuggler and detective + - Covers sentence length, contractions, monologue style, stress markers, vocabulary + +2. **NPC Authoring Style Guide exists** at `content/_meta/npc-authoring-style-guide.md` + - Consolidates tier templates, authoring rules, regional culture, Gestalt constraints + - Usable by future content authors + +3. **Kael Davan FRIEND pack complete** + - Profile YAML at `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/kael-davan.yaml` + - Dialogue files at `content/campaigns/main/systems/krenn/sova/sova-transit/dialogue/kael-davan-*.yaml` + - Monologue at `content/campaigns/main/systems/krenn/sova/sova-transit/monologue/smuggler/kael-*.yaml` + - Total line count: 75-100 hand-authored lines + +4. **Sera Venn FRIEND pack complete** + - Profile YAML at `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/sera-venn.yaml` + - Dialogue files at `content/campaigns/main/systems/krenn/sova/sova-transit/dialogue/sera-venn-*.yaml` + - Monologue at `content/campaigns/main/systems/krenn/sova/sova-transit/monologue/detective/sera-*.yaml` + - Total line count: 75-100 hand-authored lines + +5. **PC-as-NPC content complete** + - Smuggler routine at `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/pc-smuggler.yaml` + - Detective routine at `content/campaigns/main/systems/krenn/sova/sova-transit/npcs/pc-detective.yaml` + - Cross-character observation monologue in respective pools + - Total items: ~25 authored pieces + +6. **UI microcopy integrated** + - ~50 strings authored and applied to client UI + - File at `client/scripts/constants/ui_strings.gd` or `content/campaigns/main/_meta/ui-strings.yaml` + +### Infrastructure Deliverables + +7. **Interaction prompt system complete** (#405) + - Context-sensitive E prompt working in-game + - Reads `InteractionOptions` from server snapshot + - Tested with multiple interaction types + +8. **FactId pre-commit check operational** (#393) + - Hook installed at `.config/pre-commit/check-fact-ids.sh` or similar + - Tested with valid and invalid FactIds + - Catches typos before commit + +### Validation Tests + +**Content validation:** +```bash +# All YAML validates against schema +make validate-content + +# Line previewer can load FRIEND pack content +cargo run --bin line-previewer -- content/campaigns/main/systems/krenn/sova/sova-transit/dialogue/kael-davan-trust.yaml + +# FactId check passes on all content +.config/pre-commit/check-fact-ids.sh +``` + +**Client integration:** +```bash +# Godot client launches without errors +cd client && godot --headless --quit + +# UI strings loaded and visible in-game (manual playtest) +``` + +## Test Plan Alignment (D-030) + +Sprint 5 is content-focused, so test emphasis is on content validation rather than simulation systems: + +**Phase 1 (infrastructure):** Already complete from Sprint 4 +- Content loader tests (cargo test content::loader) +- YAML schema validation (make validate-content) + +**Phase 2 (integration):** New for Sprint 5 +- Line previewer regression tests (verify FRIEND content loads without errors) +- FactId cross-reference validation (pre-commit hook) +- UI string integration tests (gdUnit4 if applicable, or manual validation) + +**Phase 3 (content quality):** Manual validation +- Voice consistency across FRIEND pack lines (human review by Mellanie) +- Dual-lens coherence (Paula reviews cross-character references) +- Tag taxonomy compliance (Gestalt validates tag usage) + +## Risk Mitigation + +**Risk:** FRIEND packs are massive authoring tasks (~75-100 lines each, all hand-authored). If voice patterns take too long, FRIEND packs might not complete. + +**Mitigation:** +- #310 (voice patterns) is top priority, starts day 1 +- Paula begins profile work in parallel (doesn't require voice patterns) +- If FRIEND packs fall behind, #401 (PC-as-NPC) can slip to Sprint 6 without blocking v0.1 wow moments + +**Risk:** UI microcopy might not fit client UI constraints (text too long, tone mismatch). + +**Mitigation:** +- Early coordination between Stig and Mellanie on format and length limits +- Iterative feedback loop (copy delivers, client tests, copy revises if needed) +- Client provides length constraints up front (max characters per label) + +**Risk:** FactId check produces false positives on valid template patterns. + +**Mitigation:** +- Justine coordinates with copy team on edge cases early in sprint +- Initial implementation can be lenient (warnings instead of hard failures) +- Tighten validation after copy team validates against real content + +## Definition of Done + +Sprint 5 is complete when: + +1. All 8 tickets marked `done` in database +2. All content files committed to `copy` branch and validated +3. All infrastructure code committed to `client` and `ci` branches +4. PRs created for all three teams +5. Sprint completion proof checklist verified (all 8 observable deliverables present) +6. Team Leader reviews FRIEND pack content quality (critical for D-027 criterion #3 and D-039 wow moment #3) + +## PR Coordination + +Three team PRs will be created: + +1. **Copy team PR** (largest): + - Branch: `copy` + - Scope: voice patterns, style guide, FRIEND packs, PC-as-NPC content, UI strings (YAML if applicable) + - Review focus: content quality, voice consistency, dual-lens coherence + +2. **Client team PR**: + - Branch: `client` + - Scope: interaction prompt completion, UI microcopy integration + - Review focus: UI functionality, string integration + +3. **CI team PR**: + - Branch: `ci` + - Scope: FactId pre-commit validation hook + - Review focus: validation correctness, performance + +All PRs target `main` branch. Copy team PR is largest and blocks v0.1 wow moments, so gets priority review. + +## Notes for Team Leader + +Sprint 5 is the critical content sprint. FRIEND packs carry: +- D-027 success criterion #3: "player names an NPC they felt conflicted about" +- D-039 wow moment #3: THE FRIEND's contradiction +- D-034 pattern validation: production-level NPC with full pipeline exercise + +Quality bar is high. These NPCs must feel real, conflicted, and memorable. Copy team has full sprint to deliver. If FRIEND packs aren't hitting the emotional bar, extend sprint or adjust scope — this content cannot be rushed.