# Sprint 31: Bedrock — Client Tasks **Goal:** Complete Phase 1 wiki content (cultural sweep, GTTR depth, star map popups) and refactor accumulated complexity in atlas.rs, main.gd, and Python tooling. **Branch:** `sprint-31/client` **Agents:** Stig (UI), Tyre (architecture), Hoshe (QA) ## New Tickets | # | Title | Blocked by | |---|-------|------------| | #780 | Star map click-through — wiki/GTTR popup on system select | — | | #775 | Decompose main.gd and game_state.gd god objects | — | Use `tooling/db/ticket show ` for full details. ## Key Decisions - `decisions/architecture.md` — D-013 (diegetic UI), D-020 (client architecture) - `decisions/scope.md` — development cascade, Phase 1 deliverable ## Notes ### #780 Star map click-through (Phase 1 deliverable) The star map insert module (#674, Sprint 30) renders 301 systems as a hop-ring view with click-to-select. Currently selecting a system updates `_selected_system` and shows the name in a basic info panel. **Deliver:** When a system is selected, show a popup/panel with: - System name, star type, hop distance, corridor - GTTR narrative excerpt (first paragraph of the wiki entry) - Body count, population summary - Adjacent systems (topology links) Data source: `client/data/star_map_data.json` already contains most fields. For GTTR text, either embed excerpts in the JSON (via `tooling/generate-star-map-data.py`) or load from a separate text file at runtime. **Key files:** - `client/ui/star_map.gd` — existing star map (525 lines) - `client/ui/star_map.tscn` — scene file - `client/data/star_map_data.json` — 4363 lines, 301 systems - `tooling/generate-star-map-data.py` — data generator (may need extending) ### #775 Decompose main.gd and game_state.gd (refactor) Gemini code review flagged these as god objects: - `client/scripts/main.gd` (28KB) — UI management, input, state transitions - `client/scripts/autoloads/game_state.gd` (19KB) — global state, snapshots **Approach:** Extract focused components. Suggested splits: - `main.gd` → extract UI manager, insert state controller, input dispatcher - `game_state.gd` → extract snapshot handler, character state, session state **Constraint:** GDScript autoload parse-order rule (documented in CLAUDE.md). Autoloads can't reference `class_name` types at top level. Any new autoloads must follow the `load()` inline pattern. Prefer non-autoload scripts where possible. ## Dependency Chain ``` #780 (star map popup) → standalone, Phase 1 priority #775 (decompose god objects) → standalone, refactor track ``` Independent — work in parallel. ## PR Workflow ```bash tea pr create --repo jpmschweitzer/settled-reach --login schweitz \ --title "feat(client): Sprint 31 — star map popup, main.gd decomposition" \ --description "body" --base main --head sprint-31/client ```