Target: premium dark productivity TUI (Linear/Raycast-style) per design mock. Backend (gitlab/llm/jobs/sync/labels/sanitize/model) stays intact.
Status legend: [ ] todo · [~] in progress · [x] done
STATUS: COMPLETE — all phases landed; 262 tests green, cargo fmt --check clean,
clippy: only 5 pre-existing warnings in untouched code (sanitize.rs, jobs.rs).
-
src/theme.rs: centralized palette (BG #0B1117, SURFACE #111827, elevated #162231, border #263445, accent #7C5CFF, semantic colors), style helpers, spinner frames -
src/lib.rsrewrite: state + logic only; new overlays Settings/Help/Confirm; StatusKind; busy tracking; search filter; story tabs; delete+confirm; settings form wiring (+new logic tests) -
src/ui/mod.rs: render dispatch, modal frame, buttons, shortcut bar done; ported render tests pending integration
-
src/settings.rs(subagent): Settings struct, JSON persistence in config dir, validation, SettingsForm model, apply_to_env merge (env wins) -
main.rs: config loads env → settings.json fallback; live reload after save (config_dirty) - Missing config guides to Settings (Ctrl+,)
- busy label per job in main loop (subagent); spinner + colored status in status bar (subagent)
- jobs.rs: status kinds on results (success/error arms)
-
src/ui/board.rs(subagent): column accents, label pills, focus ring, empty states, appearance settings, search-filtered rendering -
src/ui/chrome.rs(subagent): topbar (brand, connection dot, project@user, search box, buttons), context-aware footer
-
src/ui/modals.rs(subagent): issue editor + notes + palette on shared modal chrome -
src/ui/confirm.rs(subagent): confirm dialog (destructive actions) -
src/ui/settings_ui.rs(subagent): tabbed settings modal, masked secrets, inline validation, save feedback
-
src/ui/markdown.rs(subagent): themed renderer, links underlined, italic, ordered lists, tests -
src/ui/stories.rs(subagent): Edit/Preview/Generated tabs, scrolling source, spinner while generating, review/select/edit/create flow
-
src/ui/help.rs(subagent):?overlay with grouped shortcuts -
main.rskeys (subagent): h/j/k/l,/search,eedit,?help, Ctrl+, settings, s sync (r kept); search input routing; settings-file config fallback; live reload; busy labels - Port/update render tests to new theme; new tests: settings, search nav, confirm flow, story tabs, help
- cargo fmt + cargo test + clippy clean
- Commit, push, draft PR
- Env vars optional → Phase 2
- Settings persist + guide → Phase 2
- Async feedback everywhere → Phase 3
- Markdown/story flow → Phase 6
- Navigation/modals/theme → Phases 1/4/5/7
- Backend intact → no changes beyond status kinds