Files
settled-reach/docs/sprints/sprint-10/server.md
T
jpmschweitzerandClaude Opus 4.6 b4a3784218 docs(sprints): add Sprint 10 Prove briefings
Server (7), client (7), CI (3), audio (1) — 18 tickets total.
Gauntlet expansion, audio wiring, client UX polish, CI pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:12:45 +01:00

6.1 KiB

Sprint 10: Prove — Server Tasks

Goal: Expand the Gauntlet test suite with new rooms and cross-room scenarios, wire the audio architecture end-to-end, and complete client UX polish from Sprint 9 carry-overs — proving the full system holds together.

Branch: server Agents: Dudley (simulation), Tyre (arch review), Hoshe (QA)


Carry-over from Sprint 9

# Title Status Notes
#491 Hub teleport action (PlayerAction::TeleportToHub) backlog Targeted for Sprint 9, slipped due to #487 dependency completing late. Unblocked as of sprint close.
#483 Test client replay loading + tick-scheduled sending backlog Critical for scripted Gauntlet testing. Targeted Sprint 9, slipped. Unblocked (#480 done).
#500 Content scaling test (baseline + extra NPC comparative) backlog Targeted Sprint 9, deferred. Unblocked (#489 done).

New Tickets

# Title Blocked by
#491 Hub teleport action (PlayerAction::TeleportToHub) #487 (done)
#483 Test client replay loading + tick-scheduled sending #480 (done)
#498 Gauntlet rooms 4-7 (Interaction Gallery, Fog Theater, Crowd Plaza, Dialogue Room) #487 (done)
#500 Content scaling test (baseline + extra NPC comparative) #489 (done)
#514 blocked_entities debug field on ObserverSnapshot
#519 Walk-away NPC reaction — server-side Phase 2 (animation shift, routine change) #427 (done)
#520 Confrontation world response — server-side trigger

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


Key Decisions

  • decisions/architecture.md — D-010 (deterministic simulation), D-026 (100ms tick budget), D-041 (knowledge graph data model)
  • decisions/perception.md — D-059 (fog/shader five layers), D-060 (cognitive delay), D-063 (confrontation world response), D-064 (walk-away three phases)
  • decisions/scope.md — D-038 (audio in v0.1 scope)

Notes

#491 — Hub teleport action

  • Existing: server/src/test_world/rooms/hub.rs for the hub spawn location. PlayerAction enum lives in server/src/bridge/.
  • Deliver: PlayerAction::TeleportToHub variant. On receipt: move player entity to hub spawn tile, clear dialogue/monologue/interaction buffer. Does NOT affect room state, inventory, game time, or knowledge graph. Reject the action with a log warning on non-Gauntlet maps.
  • Integration: Client #501 depends on this — ship it first half of sprint.

#483 — Test client replay loading

  • Existing: tooling/test-client/src/ has main.rs, golden.rs, replay.rs (stub). The replay.rs module exists but the loading logic was deferred.
  • Deliver: Load a JSONL replay file (one JSON array per tick), send PlayerInput at correct tick timing. Target: tooling/test-client/src/replay.rs.
  • Integration: Enables scripted Gauntlet testing end-to-end — unblocks the cross-room test scenarios in later sprints.

#498 — Gauntlet rooms 4-7

  • Existing: server/src/test_world/rooms/ has hub.rs, inventory_warehouse.rs, occlusion_corridor.rs, pause_chamber.rs. The mod.rs wires them together.
  • Deliver: Four new rooms — Interaction Gallery (24x20, 5 entities, D-057), Fog Theater (44x32, 4 entities, D-059), Crowd Plaza (32x32, 15 entities), Dialogue Room (28x20, 4 entities, D-041). Follow the pattern of existing room modules. Each room must have constants in server/src/test_world/constants.rs.
  • Integration: Unblocks #506 (cross-room transition tests) in a future sprint.

#500 — Content scaling test

  • Existing: The baseline test infrastructure is in place post-#489. Content packs are in server/src/content/.
  • Deliver: A test that runs the baseline NPC pack then the same scenario with additional NPCs, asserts tick timing stays within D-026 budget and behavior is unchanged for original NPCs.
  • Integration: Feeds into CI perf baseline (#499) which CI team handles.

#514 — blocked_entities debug field

  • Existing: ObserverSnapshot in server/src/bridge/. LOS computation is in server/src/perception/.
  • Deliver: Add blocked_entities: Vec<StableId> (or Option<Vec<StableId>>) to ObserverSnapshot. Feasibility confirmed at ~300 tile lookups/tick (R2-OQ-05). Debug-only field; #[serde(default)] so client gracefully ignores on older snapshots.
  • Integration: Improves test client debug output. Standalone, no cross-team dependency.

#519 — Walk-away NPC reaction Phase 2

  • Existing: Phase 1 (client fade, #437) and Phase 3 (KG recording, #427) are done. Phase 2 is the missing server-side piece.
  • Deliver: On PlayerAction::WalkAway (or dialogue exit event), server triggers: (1) target NPC shifts animation tier to Tier 2 (D-047), (2) NPC routine deviation is recorded in their state machine. D-064 Phase 2 scope.
  • Integration: Standalone server-side work. No client changes required.

#520 — Confrontation world response

  • Existing: Confrontation delivery is wired through dialogue system. D-063 specifies the world response.
  • Deliver: On confrontation delivery: (1) target NPC shifts to Tier 2 animation (D-047 animated tier), (2) NPC relationship state decremented (affects D-033 color which client #521 renders), (3) monologue spike event emitted. Three separate effects, all server-authoritative.
  • Integration: Client #521 blocked by this — complete #520 first half of sprint.

Dependency Chain

#483 (replay loading) — standalone, parallel
#491 (hub teleport server) → #501 (hub teleport client UX, cross-team)
#498 (Gauntlet rooms 4-7) → #506 (cross-room transitions, future sprint)
#500 (content scaling) → #499 (perf baseline, CI team)
#514 (blocked_entities) — standalone, parallel
#519 (walk-away phase 2) — standalone, parallel
#520 (confrontation world response) → #521 (D-033 color shift, client team)

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): sprint 10 prove — server" --description "body" --base main --head server