Files
settled-reach/docs/sprints/sprint-15/joint.md
T
jpmschweitzerandClaude Opus 4.6 bccdcfcdcb docs(docs): add frontmatter to all sprint briefings
Standardized YAML frontmatter on all 115 sprint briefing files across
sprints 1-26 with title, description, type, status, sprint number, and
team fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 00:15:45 +01:00

6.9 KiB

title, description, type, status, sprint, team
title description type status sprint team
Sprint 15 — Joint Briefing Cross-team coordination for follow/examine mechanics, dialogue layers, personality system sprint archived 15 joint

Sprint 15: React — Joint Coordination

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.

Agents: All teams — coordination reference


Pre-Sprint Decisions

No blocking open questions identified for this sprint. All decisions required by Sprint 15 tickets are confirmed.

Decision Status Required by
D-024 (NPC 10-axis model, tell system) Confirmed #90, #92
D-028 (dialogue 4-layer architecture) Confirmed #169, #170
D-035 (tag taxonomy, 9 moods post S14 amendment) Confirmed #119, #169, #170
D-075 (confidence gates trust tier, not access tier) Confirmed #169
D-016 (monologue triggers) Confirmed #119
D-010 (deterministic simulation) Confirmed #92, #340
D-015 (camera locked, fixed-north v0.1) Confirmed #117
D-019 (top-down, "the angle") Confirmed #71
D-049 (8-layer z-stack) Confirmed #71, #74

Cross-Team Dependencies

Server #119 (monologue event generation)
    → content pool selector reads D-035 trigger tags authored by copy team
    → fires on observe_npc, hear_sound, observe_anomaly, witness_interaction, post_conversation
    → output appears in ObserverSnapshot.current_monologue (existing field, GameState v5)
    → client #74 (UI framework) must display it via MonologueDisplay

Server #241 (follow mechanic)
    → emits follow_target_id in ObserverSnapshot
    → client #73 (input capture) must dispatch Interact→Follow verb via nearby_interactions
    → client #72 (entity sprite) can highlight follow target entity

Server #90 (personality & tell system)
    → tell state on ObserverSnapshot entity field
    → client #72 may render tell state (stub field now, visual in sprint 16)

Copy #169 (Layer 1 access tier tagging)
    → requires server dialogue.rs (#305, done) to be running Layer 1 filter
    → copy team audits content files; server team does not need to change code

Copy #299/#300 (opening hooks)
    → requires MonologueDisplay (#122, done) and monologue event triggers (#119, this sprint)
    → content ready before engine = acceptable; engine ready before content = also acceptable
    → they are parallel workstreams that meet at playtest

Sprint Completion Proof

Sprint 15 is done when all of the following are observable:

  1. Follow mechanic end-to-end: Player right-clicks an NPC and selects Follow. The server tracks proximity and LOS. Observation events fire while following. NPC suspicion accumulates if the player is within 2 tiles for 60+ ticks. The follow ends naturally when the NPC enters deep fog or detects the player. No client crash. Server logs emit follow-state transitions.

  2. Monologue fires on observation events: When the player enters a location, observes an NPC, or hears a sound at medium range, a contextually tagged monologue line appears in the MonologueDisplay. Line selection uses D-035 trigger tags. The cooldown (300 ticks) prevents spam. observe_anomaly fires when a routine deviation is detected (#243).

  3. Routine deviation detected: An NPC breaks their routine (wrong location for day phase, or absent from expected location). The server emits a RoutineDeviationEvent. This feeds the monologue trigger above (observe_anomaly).

  4. NPC generation pipeline produces valid NPCs: generate_npc() takes a role, outputs a fully-seeded ECS entity with all 10 axes populated. Constraint validation passes. Personality traits (2-3) and tell state are present.

  5. Layer 1 access filtering active: The dialogue system filters lines by RelationshipStateaccess tier. A player with Unknown relationship sees only public-tagged lines. A player with Known/Friendly relationship also sees insider/peer lines. The filter is invisible — no locked indicators (D-062).

  6. Layer 2 relationship history active: Kael (or Sera) greets the player differently on first vs subsequent encounters. The greeting situation tag drives this. InteractionMemory from Sprint 14 (#325) is the data source.

  7. Tilemap + entity + input + UI all render cleanly: Game boots, tiles render from snapshot data, entity sprites move with lerp, input sends semantic actions to server, HUD displays monologue and stance. No regressions on Sprint 14 functionality (fog, dialogue box, NPC-to-NPC conversation panel).

  8. Smooth camera movement: Camera tracks player position with interpolated smoothing. No jarring snaps during movement. Snap-on-teleport still works. Camera stays fixed-north (D-015).

  9. Opening hooks authored: Both monologue-smuggler.yaml and monologue-detective.yaml contain the 10-15 opening sequence lines. Lines carry correct D-035 structural tags: character partition, trigger type, situation, prerequisite null.


Test Plan Alignment (D-030)

Sprint 15 is in the integration-and-behavior phase. Testing priorities:

  • Server unit tests (Hoshe): PersonalityTraits derivation (correct tell state from axis values), RoutineDeviationEvent emission timing, ToleranceThreshold breach at correct stress level, SpatialIndex naive impl correctness (entities_in_range, entities_at, update)
  • Integration test (Hoshe): Follow mechanic end-to-end — simulate player issuing Follow verb, advance N ticks with NPC moving, verify observation event frequency increase, verify suspicion accumulation rate
  • Content validation (CI): Cross-reference check on new monologue files — character partition, required tags present, trigger enum values valid (extends existing content-cross-reference CI check, #464)
  • Client regression (Hoshe): Verify all Sprint 14 integration proofs still pass after #71/#72/#73/#74 changes — fog renders, dialogue box appears, NPC-to-NPC conversation panel shows

Carry-over Risk

No Sprint 14 carry-overs. Sprint 14 was 100% complete (22/22 done).

The highest carry-over risks in Sprint 15:

  • #299/#300 (opening hooks): Content authoring on the critical path — Mellanie leads, Paula consults. If these slip, they carry to sprint 16 with no downstream blocking (the system will run without them, using time_idle and enter_location monologue from existing pools).
  • #169/#170 (dialogue layers 1-2): These are content-side auditing and authoring tasks. The pipeline code (#305) is done. Carry-over has no server code impact.
  • #241 (follow mechanic): Depends on interaction dispatcher (#240, done) but adds new system logic. Medium complexity. Carry-over defers NPC suspicion mechanics but does not block other sprint tickets.