feat: 0.5.0 — UX polish + 1fr CSS rendering fix#9
Merged
Conversation
All 8 screens used height: NN% which Textual 8.2.5 resolves to 0 when the screen sits inside a TabPane, producing empty bodies. Switching to 1fr fractional units makes the panes share remaining space correctly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a 1-line Rich-markup header at the top of each screen indicating what the tab shows and the key actions available. Also bundles in: - inline column legends (Sessions: Msgs/Size; Permissions: Used90d/Flags) - "Filter by scope:" labels next to source-filter dropdowns - proper screen-level BINDINGS so Footer surfaces the right keys Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
When a tab has nothing to show yet, replace the terse "no data" line with a concrete next-step recipe pointing at CLI commands. - Schedule: list the available templates - Audit: show `cc-janitor stats snapshot` invocation - Dream: explain the safety-net concept and link to `dream doctor` Also adds the per-screen header line and bindings so Footer surfaces the screen-level keys. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- _help.py: HelpModal renders Rich-markup guidance keyed by active TabPane id; WelcomeModal shows the 8-tab tour on first launch. - app.action_help() pushes the help modal with the currently-active tab id. - On mount the app pushes WelcomeModal if ~/.cc-janitor/state/seen-welcome is absent; dismissing the modal touches the marker so it never reappears. - `cc-janitor --tutorial` forces the Welcome modal regardless of marker. - tests/conftest.py pre-touches the marker for both mock_claude_home and an autouse fixture so existing TUI tests aren't blocked on a modal. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Verifies per-screen headers, sessions/perms legends, filter labels, empty-state CTAs, F1 help modal, and Welcome marker logic. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Documents the new TUI surface introduced in 0.5.0: - F1 tab-specific help modal - First-run Welcome modal + --tutorial flag - 1-line header on every screen - Per-tab keybindings and column meanings Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes the critical TUI rendering regression where every tab body was empty,
then layers a meaningful UX polish pass on top.
Critical fix
height: NN%CSS which Textual 8.2.5 collapses to 0 inside a
TabPane. Switchedthe screens (plus
TabbedContent) to1frfractional units. Affectsevery tab — Sessions, Permissions, Context, Memory, Hooks, Schedule,
Audit, Dream.
UX polish (per tab)
header stating what the tab shows and the key actions.
no jobs exist; Audit shows the
cc-janitor stats snapshotrecipe;Dream explains the safety-net concept before any pairs land.
HelpModalintui/_help.py) with5–10 lines of guidance per tab.
WelcomeModal). Marker file at~/.cc-janitor/state/seen-welcomeensures it appears exactly once.Re-display via
cc-janitor --tutorial.Permissions, Memory, Hooks.
(Used90d, STALE/DUP flags).
per-tab action keys.
What a user sees now
↑↓ navigate · Enter preview · d delete · / search", then a dim legend
explaining Msgs and Size, then the data table, then the preview pane.
Hits F1 → modal explains heavy-session pruning via
session prune.n new job · Del remove · r run now", and the right pane lists the
five built-in templates with one-line descriptions instead of just
"0 scheduled job(s)".
(before/after pairs) · ↑↓ navigate · Enter diff · b rollback", and
the right pane explains the safety-net concept and points at
cc-janitor watch start --dream+dream doctor.Test plan
ruff check src tests— cleanpytest -q— 302 passed (was 290; +12 intests/tui/test_ux_polish.py)python -m cc_janitor --version→cc-janitor 0.5.0CcJanitorApp(show_welcome=False)constructs cleanly