Close Phase 2 — wire econ-sim into game server tick loop, expose price history and trade flows via implant insert panel, add economics debug console commands for runtime event injection and parameter mutation. New tickets: #821 (server tick integration), #822 (IPC bridge v21), #823 (debug command handler), #824 (economics insert panel), #825 (debug console econ commands). Existing: #810, #785, #811, #748, #814, #695. 11 tickets total across server, client, copy, planning. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
5.2 KiB
Sprint 34: Pulse — Client Tasks
Goal: Close Phase 2 — wire the economics simulation into the live game, expose price history and trade flows in the implant, and make the economy observable and tweakable at runtime.
Branch: sprint-34/client
Agents: Stig (UI), Tyre (architecture)
New Tickets
| # | Title | Blocked by |
|---|---|---|
| #785 | Add system population and GDP to star map info panel | — |
| #824 | Economics insert panel — price history charts and GDP display | #822 (server) |
| #825 | Economics debug console commands — event triggers and param sliders | #823 (server) |
Key Decisions
decisions/economics.md— D-181 (7-signal vocabulary — signals 1-2 are Phase 2: price_current, price_trend), D-180 (event port — the commands #825 fires)decisions/architecture.md— D-169 (implant UI component library — compose from client/ui/implant/), D-170 (HUD visibility groups — economics panel lives in INSERT mode), D-020 (IPC — EconomySnapshot arrives in ObserverSnapshot)
Notes
#785 — System population and GDP to star map info panel
When a system is selected in the star map (client/ui/star_map.gd, client/ui/star_map.tscn), the popup built with ImplantPanel components shows: name, star type, hop distance, corridor, GTTR excerpt, bodies, adjacents. Add two new ImplantDataRow entries: POPULATION and GDP. Data is already in res://data/star_map_data.json (regenerated by tooling/generate-star-map-data.py from systems.db). Check whether population and GDP fields are present in the JSON; if not, update the generation script as part of this ticket. This is standalone — no server dependency. Good warmup ticket; complete it first.
#824 — Economics insert panel
New implant panel: Economics Monitor. Lives in INSERT mode (D-170), accessible via implant navigation alongside the star map.
Scene: client/ui/implant/economics_panel.tscn + client/ui/implant/economics_panel.gd
Compose strictly from the existing component library (client/ui/implant/):
ImplantPanel— root containerImplantHeader— "ECONOMICS MONITOR" title + selected system subtitleImplantSeparator— section dividersImplantDataRow— key/value rows for price and GDP dataImplantTextBlock— top commodity summary text
Layout (three sections):
- System selector — searchable/scrollable list of systems (can reuse star map system data). Selecting a system triggers an
EconStateQueryPlayerAction to the server. - Price table — top 6 commodities for selected system, each as an
ImplantDataRowwithprice_currentand a directional trend indicator (▲ / ▼ / —) derived fromprice_trend. - GDP strip — total economic activity for the system displayed as a single row. Update each time a new
EconomySnapshotarrives.
Data flow: snapshot_handler.gd receives ObserverSnapshot v21. When economy_snapshot is present, forward to economics_panel.gd via a signal or direct call. The panel caches the last 20 ticks of price data per system for trend display (ring buffer in GDScript Dictionary).
Do NOT draw custom canvas sparklines unless time allows — ImplantDataRow with a trend arrow is the MVP. The price chart can be a follow-on.
Register the panel in client/scripts/autoloads/hud_groups.gd under path implant/economics. Add a keyboard shortcut (e.g. E in implant mode) and an entry in the implant navigation menu.
Blocked by #822 (server must expose EconomySnapshot before the panel has real data). Build the panel with placeholder data first; wire live data once #822 ships.
#825 — Economics debug console commands
The debug console exists at client/ui/debug_console.gd + client/ui/debug_console.tscn. The console already dispatches DebugCommandKind variants via PlayerAction::DebugCommand through the IPC bridge.
Add three new command parsers in _parse_command() / _dispatch_command():
econ inject <system_id> [commodity_id] <shock|boost> <magnitude> [ticks]
→ InjectEconEvent { system_id, commodity_id, effect, magnitude, duration_ticks }
econ param <alpha|beta|friction> <value> [system_a] [system_b]
→ SetEconParam { param, value }
econ inspect <system_id>
→ GetEconState { system_id }
econ inspect returns all 7 D-181 signals for the system; display in console output log as a multi-line block. econ inject and econ param print a confirmation + the server's DebugResponsePayload.text.
Update _print_help() to include the econ command family. Blocked by #823 (server must handle the variants before the client can send them meaningfully, though client-side parsing can be built in parallel).
Dependency Chain
#785 (star map GDP) — standalone, start here
#822 (server IPC, Sprint 34/server) → #824 (economics insert panel)
#823 (server debug handler, Sprint 34/server) → #825 (debug console commands)
#824 and #825 are parallel after their respective server blockers clear.
PR Workflow
tea pr create --repo jpmschweitzer/settled-reach --login schweitz \
--title "feat(ui): economics insert panel and debug console econ commands" \
--description "Sprint 34 client work" \
--base main --head sprint-34/client