diff --git a/graph/decisions/sba-scout-rust-phase-4-async-tui-with-dashboard-and-gameday-bc4abc.md b/graph/decisions/sba-scout-rust-phase-4-async-tui-with-dashboard-and-gameday-bc4abc.md new file mode 100644 index 00000000000..53875376274 --- /dev/null +++ b/graph/decisions/sba-scout-rust-phase-4-async-tui-with-dashboard-and-gameday-bc4abc.md @@ -0,0 +1,43 @@ +--- +id: bc4abc6e-57c1-4d6c-b414-213c1367be9b +type: decision +title: "SBA Scout Rust Phase 4: Async TUI with Dashboard and Gameday screens" +tags: [sba-scout, rust, tui, ratatui, phase-4, async, tokio, decision] +importance: 0.8 +confidence: 0.8 +created: "2026-02-28T16:52:43.969652+00:00" +updated: "2026-02-28T16:52:43.969652+00:00" +--- + +# SBA Scout Rust Phase 4 Complete + +**Branch:** `feat/rust-rewrite` | **Commit:** `6d2b11a` + +## What Was Implemented + +Phase 4 replaced blocking `event::read()` with `tokio::select!` over `EventStream` + mpsc channel + tick interval, enabling a fully async TUI. + +## Architecture + +- **AppMessage enum** — typed channel messages for background task results +- **ActiveScreen enum** — owns screen-specific state (`DashboardState`, `GamedayState`) +- **SelectorWidget** — generic popup list widget for cascading selectors +- **Notification system** — UI notifications with auto-expiry + +## Screens + +### Dashboard +- Roster summary cards +- API sync trigger + +### Gameday +- Cascading team/pitcher selectors +- Matchup analysis table +- 9-slot lineup management with save/load + +## Navigation +- `d` = Dashboard, `g` = Gameday, `q` = quit (disabled during text input) + +## Stats +- 1739 lines added across 10 files +- 105 tests passing