Files
settled-reach/docs/sprints/sprint-16/joint.md
T
jpmschweitzerandClaude Opus 4.6 e1cbcc243b docs(sprints): add sprint 16 "Converse" briefings
Plan 8 tickets across server (4), client (2), copy (1), visual (1).
Focus: two-way dialogue exchange, trust-gated gossip, sprite pipeline,
and housekeeping fixes. No carry-overs from sprint 15.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:56:10 +01:00

74 lines
5.6 KiB
Markdown

# Sprint 16: Converse — Joint Coordination
**Goal:** Dialogue becomes a two-way exchange — players pick options and the server responds; NPC information-giving deepens through trust and trait-shaped delivery; the sprite pipeline gets its correct art-direction angle; and housekeeping fixes land across all three active teams.
## Pre-Sprint
No blocking decisions or schema work required before implementation starts. All relevant decisions are confirmed (D-019, D-028, D-035, D-075, D-077). Sprint 16 can begin immediately.
| Item | Owner | Status |
|------|-------|--------|
| D-035 line ID scheme (NPC-scoped) | confirmed | done |
| D-075 layered confidence gate on trust | confirmed | done |
| D-019 camera angle amendment | confirmed | done |
| D-077 zone_id on VisibleTile | confirmed, implemented | done |
## Ticket Overview
| # | Title | Team | Blocked by |
|---|-------|------|------------|
| #538 | Arch: Move dialogue systems BridgePlugin → NpcPlugin | server | — |
| #539 | Server: implement DialogueResponse verb handler | server | #538 |
| #171 | Layer 3: Trust-gated gossip | server | — |
| #338 | Line variety tracker — prevent repeat dialogue | server | — |
| #543 | Optimize zone_id extraction O(N) → O(1) | client | — |
| #540 | Adjust sprite camera to D-019 angle | client | #541 |
| #542 | Migrate line IDs to NPC-scoped namespace | copy | — |
| #541 | 3D sprite render pipeline setup | visual | — |
## Cross-team Dependencies
**#541 (visual) → #540 (client):** Araminta must deliver at minimum a test entity sprite and a wall sprite at the -72.5° angle before Stig can validate the import path and z-sorting behavior. Early delivery of test sprites (even before the full pipeline doc is written) unblocks client work. Coordinate via the `visual``client` handoff — Araminta commits test sprites to `client/assets/sprites/` on the visual branch; Stig pulls and verifies fit in `entity_renderer.gd`.
**#538 (server) → #539 (server):** Sequential within the server team. #538 refactors registration; #539 adds a new system in the correct location. Dudley should complete and merge #538 before starting #539.
**#542 (copy) → server golden tests:** After #542 renames all line IDs, the server golden test fixtures in `server/tests/` may reference old line IDs (e.g., `the-terminal_d_039`). Run `make pre-pr` (which includes the content cross-reference validation and fixture staleness check) after #542 merges. If golden tests fail, the server team updates fixtures with `make golden-update`.
## Sprint Completion Proof
The sprint is complete when all of the following are observable:
1. **DialogueResponse closes the loop:** Player opens dialogue with any NPC, selects response option 1 or 2 (non-confrontation), and the NPC delivers a contextually appropriate follow-up line. No silent no-op on option selection. Observable in-game or via the test client replay.
2. **Trust-gated gossip unlocks progressively:** A player with `KnowsOf` confidence on a target NPC receives different (more forthcoming) dialogue lines than a player with `Suspects` confidence. Observable via the line previewer CLI or a gauntlet test room. The same NPC gives Surface-tier lines on first contact and Real-tier lines after investigation.
3. **No line repeats within 1 game-hour:** The player can initiate dialogue with the same NPC 5+ times in quick succession and observe that no dialogue line_id repeats. Observable via the WRONG button capture or server logs.
4. **Zone_id lookup is O(1):** `game_state.gd` `apply_snapshot()` no longer contains the linear tile scan for zone_id (lines 249-252 removed). `current_zone_id` populates correctly. Confirmed by code review + existing client tests passing.
5. **Sprite camera angle:** At least one entity sprite and one wall sprite are rendered at -72.5° from horizontal and display correctly in the Godot client without z-sorting artifacts. Observable in the rendering scene.
6. **Line ID migration complete:** `make pre-pr` passes with no content validation errors. No YAML file under `content/` contains line IDs with the old `{location_slug}_` prefix. Observable via CI.
## Test Plan Alignment (D-030)
Sprint 16 is in the Sprint 3-4 integration phase per D-030 test priorities.
- **#539 (DialogueResponse handler):** New system requires an integration test: player sends `DialogueResponse { response_id }`, assert `DialogueResponseBuffer` is populated with a follow-up line. Use existing test harness pattern from `dialogue.rs` game_loop tests.
- **#171 (Trust-gated gossip):** Requires a unit test: initialize player KG with `KnowsDetails` on target, run `process_talk_interaction`, assert a `Secret`-tier line is selected. Mirror with `Suspects` confidence, assert only `Surface`-tier lines are selected.
- **#338 (Line variety tracker):** Requires a regression test: send `Talk` 10 times to same NPC within 600 ticks, assert no line_id appears twice.
- **#543 (O(1) zone lookup):** Code-change-only; existing client tests cover `apply_snapshot()` behavior. Add assertion that `current_zone_id` is non-empty when the player is on a zone-tagged tile.
- **#542 (line ID rename):** Covered by `make pre-pr` content cross-reference validation (CI #464).
## PR Merge Order Recommendation
To minimize merge conflicts and test failures:
1. `copy` #542 — no code dependencies, merge first to unblock golden test validation
2. `server` #538 — plugin refactor, isolated change
3. `server` #171 and #338 — parallel, both isolated from #539
4. `server` #539 — depends on #538 being merged
5. `visual` #541 — can merge any time, gates #540
6. `client` #543 — standalone, merge any time
7. `client` #540 — merge after #541 lands