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>
6.1 KiB
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.rsfor the hub spawn location.PlayerActionenum lives inserver/src/bridge/. - Deliver:
PlayerAction::TeleportToHubvariant. 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/hasmain.rs,golden.rs,replay.rs(stub). Thereplay.rsmodule exists but the loading logic was deferred. - Deliver: Load a JSONL replay file (one JSON array per tick), send
PlayerInputat 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/hashub.rs,inventory_warehouse.rs,occlusion_corridor.rs,pause_chamber.rs. Themod.rswires 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:
ObserverSnapshotinserver/src/bridge/. LOS computation is inserver/src/perception/. - Deliver: Add
blocked_entities: Vec<StableId>(orOption<Vec<StableId>>) toObserverSnapshot. 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