Files
settled-reach/docs/sprints/sprint-13/server.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

4.8 KiB

title, description, type, status, sprint, team
title description type status sprint team
Sprint 13 — Server Briefing Gauntlet rooms (Sound Lab, Decay Observatory, Shift Change), OQ-09 zone temperature sprint archived 13 server

Sprint 13: Sound — Server Tasks

Goal: Wire the full audio architecture end-to-end — AudioManager, zone crossfades, dip profiles, recognition chime, and conversation murmur — and complete v0.1 content authoring so opening hooks, tutorial monologue, and all content packs are done.

Branch: server Agents: Dudley (simulation dev), Tyre (architect), Hoshe (QA)

Carry-over from Sprint 12

None. All Sprint 12 server tickets done.

New Tickets

# Title Blocked by
#505 Gauntlet rooms: Sound Lab, Decay Observatory, Shift Change
#523 Resolve OQ-09: zone temperature memory — server-tracked or client-only

Use db/connectors/ticket show <id> for full details.

Key Decisions

  • decisions/architecture.md — D-020 (IPC bridge, ObserverSnapshot), D-041 (knowledge graph — decay system), D-068 (5-bus audio architecture — zone_id in snapshot)
  • decisions/perception.md — D-018 (three-range sound model), D-059 (fog shader — zone temperature tint for OQ-09), D-060 (cognitive delay for fog recognition)
  • decisions/scope.md — D-030 (test priority phases — integration phase)

Notes

  • #505 — Gauntlet rooms: Sound Lab, Decay Observatory, Shift Change: Three new rooms added to server/src/test_world/rooms/. Existing rooms for reference: server/src/test_world/rooms/ contains hub.rs, inventory_warehouse.rs, occlusion_corridor.rs, pause_chamber.rs, interaction_gallery.rs, fog_theater.rs, crowd_plaza.rs, dialogue_room.rs, eavesdrop_alcove.rs, sprint_gauntlet.rs, confrontation_stage.rs. Follow the existing room module pattern — each room exports a build() function that populates a World with ECS components. Add entries to server/src/test_world/rooms/mod.rs. The three rooms:

    • Sound Lab: Tests the three-range sound model (D-018). Place sound-emitting entities at calibrated distances. Verify RangeCategory::Close events hit the snapshot at <3m, Medium at 3-15m, Long at 15-40m. Tests: sound_lab_close_range_in_snapshot, sound_lab_medium_range_indicator_present, sound_lab_long_range_insert_only.
    • Decay Observatory: Tests knowledge graph decay (D-041 — decay runs every 10 ticks per D-031). Place entities in LOS, then move player out of LOS. Advance ticks and observe confidence degradation: DirectKnowsDetailsKnowsOfSuspects. Tests: decay_observatory_confidence_degrades_after_los_loss, decay_observatory_stale_after_threshold.
    • Shift Change: Tests NPC routine transitions at day phase boundaries (D-031 — Morning/Afternoon/Evening/Night phases). Advance game clock to a phase boundary and verify NPCs transition routine. Tests: shift_change_npc_transitions_routine_at_phase_boundary.
    • Effort estimate: 3d. Sound Lab is the most complex (requires sound event fixture verification).
  • #523 — Resolve OQ-09: zone temperature memory: This is an architectural decision. D-059 specifies deep fog (previously explored tiles) carries a ~10% zone temperature tint (bar=warm dark, hub=cool dark, corridor=neutral dark). The question: server-tracked or client-only? Arguments: server-tracked = diegetically accurate (server knows which zone each tile belongs to, sends zone_id or zone_temperature per tile in ObserverSnapshot); client-only = simpler (client remembers last-visited zone per tile and applies tint from local memory). The server already sends zone_id per tile if D-073 zone crossfade is implemented (client needs zone info for crossfades). If zone_id is already in the snapshot for D-073, zone temperature memory is essentially free — client maps zone_id → temperature tint from a local lookup table, using the snapshot's zone_id per tile. Recommended resolution: server-tracked via zone_id (already needed for D-073), client applies temperature tint from local zone_id → tint mapping. Write the decision, update decisions/perception.md or create a new D-NNN entry, and implement whichever approach is decided. If zone_id is not yet in the tile data of ObserverSnapshot, add it.

Dependency Chain

#505 (Sound Lab, Decay Observatory, Shift Change) — standalone, parallel
#523 (OQ-09 resolution) — standalone, parallel

Both tickets are independent of each other and can proceed in parallel.

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):

tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): description" --description "body" --base main --head server