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

7.0 KiB

Sprint 10: Prove — Client 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: client Agents: Stig (UI/client dev), Tyre (arch review), Hoshe (QA)


Carry-over from Sprint 9

# Title Status Notes
#501 Hub teleport client UX (Home key, fade transition) backlog Targeted Sprint 9, slipped — blocked by #491 server work which also slipped. Unblocks immediately once server #491 ships.
#502 Room reset client UX (reset plate tile, interaction verb, amber flash) backlog Targeted Sprint 9, slipped. Unblocked (#490 done).
#503 Auto-checklist progress tracking (client-side snapshot evaluation) backlog Targeted Sprint 9, slipped. Unblocked (#497 done).

New Tickets

# Title Blocked by
#501 Hub teleport client UX (Home key, fade transition) #491 server (Sprint 10)
#502 Room reset client UX (reset plate tile, interaction verb, amber flash) #490 (done)
#503 Auto-checklist progress tracking (client-side snapshot evaluation) #497 (done)
#517 Introduce Michroma as game font
#526 Client: mouse-relative facing and movement (D-054)
#518 Client: wire insert open/close to PauseSimulation command
#521 Confrontation D-033 color shift — client-side entity tint #520 server (Sprint 10)

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


Key Decisions

  • decisions/architecture.md — D-020 (Godot/Rust IPC), D-054 (mouse-relative facing), D-058 (auto-pause on insert open), D-066 (dual-scale grid)
  • decisions/perception.md — D-033 (entity color = relationship to player), D-056 (insert diegetic visibility), D-057 (interaction verbs), D-060 (cognitive delay), D-063 (confrontation same box)
  • decisions/scope.md — D-053 (movement stance toggle)

Open Questions to Resolve Early

  • Q-019 (partial): Client-side entity lifecycle / StableId mapping — #521 reads relationship state from ObserverSnapshot and adjusts entity tint. Confirm with server team that relationship state is included in the snapshot before #521 starts. Resolve before #521 begins.

Notes

#501 — Hub teleport client UX

  • Existing: client/scripts/protocol/protocol.gd handles PlayerAction serialization. client/scripts/rendering/world_renderer.gd handles camera.
  • Deliver: Home key sends PlayerAction::TeleportToHub. On receipt: instant camera snap to hub spawn position + 0.3s fade-to-black-and-back tween. Effort: 0.5d. Gauntlet-mode only guard matches server behavior.
  • Dependency: Wait for server #491 to merge before testing end-to-end. Can develop and unit-test client logic in isolation using local bridge stub.

#502 — Room reset client UX

  • Existing: client/scripts/rendering/tile_renderer.gd handles tile visual overrides. Interaction verbs rendered by UI layer.
  • Deliver: (1) reset_plate tile type renders with amber color override. (2) 'Reset Room' verb appears when player faces reset plate. (3) On reset confirmation: 0.15s amber flash + monologue "Systems recalibrated." fires via monologue event. Effort: 0.5d.
  • Integration: Server #490 (done) already emits the reset event. Client just needs to consume it.

#503 — Auto-checklist progress tracking

  • Existing: Checklist YAML schema defined by CI #497 (done). The test client handles its own evaluation separately.
  • Deliver: Client evaluates ObserverSnapshot against loaded checklist YAML conditions, auto-tracks verification items with a Gauntlet-mode HUD overlay. Full tracking in test-client-only mode; lightweight overlay in Godot per R2-OQ-06. Effort: 1.5d.
  • Integration: Test-client-only overlay — does not affect production game HUD. Coordinate with Hoshe on checklist condition format.

#517 — Michroma font

  • Existing: Default Godot font throughout client UI. No font assets committed yet.
  • Deliver: Download Michroma from Google Fonts (OFL license), commit to client/assets/fonts/. Update all Label, RichTextLabel, and LineEdit nodes to use Michroma. Acceptance: font renders legibly in HUD, dialogue box, and debug overlay at game resolution. Effort: 0.5d. Purely cosmetic — no logic changes.
  • Non-obvious: Michroma is geometric sans-serif at display weights — confirm legibility at small sizes (sub-16px tooltip text) before committing globally. Consider a size floor.

#526 — Mouse-relative facing and movement

  • Existing: client/scripts/main.gd handles input. WASD currently uses fixed cardinal directions. client/scripts/protocol/protocol.gd sends facing octant to server.
  • Deliver: Mouse position determines facing direction (client-side float computed from player screen position to cursor). WASD movement becomes mouse-relative (forward = toward cursor). Server receives facing octant only, unchanged interface. Effort: 1d.
  • Key decision: D-054 — mouse facing is purely client-side. Server only ever sees the octant. The full float stays in the client for rendering purposes.

#518 — Wire insert open/close to PauseSimulation

  • Existing: Server pause system at 50%/0% tick rate exists (#406, done). client/scripts/autoloads/sim_bridge.gd handles server commands. Insert UI open/close events are in client/scripts/main.gd.
  • Deliver: When insert UI opens, client sends PauseSimulation command. When it closes, client sends ResumeSimulation. D-058 confirms auto-pause in SP mode. Ticket #448 was cancelled before client wiring was completed. Effort: 0.5d.
  • Non-obvious: The pause/resume must be idempotent — if the server is already paused (e.g. Gauntlet room interlude), opening the insert should not double-pause.

#521 — Confrontation D-033 color shift

  • Existing: client/scripts/rendering/entity_renderer.gd applies D-033 relationship colors. ObserverSnapshot carries entity relationship state.
  • Deliver: On confrontation delivery (server #520 decrements relationship state), entity renderer fades the entity's D-033 tint toward the new relationship color using a 0.5-1s tween. Not an instant flip — a fade that the player perceives as "something changed."
  • Dependency: Blocked by server #520. Start after #520 merges.

Dependency Chain

#502 (room reset UX) — standalone (server #490 done)
#503 (auto-checklist) — standalone (CI #497 done)
#517 (Michroma font) — standalone, parallel
#518 (insert pause wire) — standalone, parallel
#526 (mouse-relative facing) — standalone, parallel
Server #491 (hub teleport) → #501 (hub teleport UX)
Server #520 (confrontation response) → #521 (D-033 color shift)

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