EMRY-021: TUI 4-pane dashboard (ratatui) #63
No reviewers
Labels
No labels
blocked
bug
compat
docs
documentation
duplicate
emry-cli
emry-core
emry-engine
emry-ingest
emry-py
emry-store
emry-tui
emry-web
enhancement
good first issue
gpu-compute
help wanted
hpc
infra
integrations
invalid
needs-design
P0-blocker
P1-core
P2-enhanced
P3-future
performance
pull-request
python
pytorch
question
rust
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
femboy/emry!63
Loading…
Reference in a new issue
No description provided.
Delete branch "emry-021-tui-app"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes EMRY-021 (#16). Branched off
main.What
ui.rs—UiState: a pure reducer over the event stream (per-metric history, phase, progress, capped alerts, selection, pause).render()draws the 4 panes (header+progress / metric cards / braille chart / alert strip) in the warm palette into any ratatuiBackend.app.rs—run: channel-driven loop (drain bus + input, ~15 Hz cap, pause freezes the display);map_keybindsq/Esc/1–4/p;run_terminalis the thin real-terminal shell.examples/tui_demo.rs— streams a synthetic engine run to the dashboard.Verification
./scripts/pre-commit-rust.shgreen: clippy-D warnings, 27 tui tests, total 96.5% lines.TestBackend: a test renders a populated state and asserts the buffer contains the project name, metric label, and alert text. The render loop, state reducer, and key mapping are all covered; only the real-terminal shell (raw mode + blocking key read) is uncovered (that's the part that needs a TTY).cargo run -p emry-tui --example tui_demo)MSRV note
ratatui 0.29's newest transitive deps (
instability/darling) require rustc 1.88; I pinned them down (instability 0.3.7 / darling 0.20.11) so the project stays on its pinned 1.87. (Committed in Cargo.lock.)Review-driven fixes
unbounded()input channel →bounded(64)+try_send(honors the project's no-unbounded-channel invariant).UntilQuitfinish-and-drained auto-exit — closes a drain/is_emptyTOCTOU and is better UX (dashboard stays up post-run).Vec::remove(0)O(n) on 4096-cap history →VecDequeO(1) FIFO.draw(display freezes).Scope
EMA/throughput/ETA derived series in the dashboard → EMRY-022.
emry demo/tuiCLI wiring → EMRY-025.