Skip to content

Two-row grouped footer + title-case dashboard tabs - #164

Merged
TraderSamwise merged 3 commits into
masterfrom
chore/tui-next-19
Jun 18, 2026
Merged

Two-row grouped footer + title-case dashboard tabs#164
TraderSamwise merged 3 commits into
masterfrom
chore/tui-next-19

Conversation

@TraderSamwise

@TraderSamwise TraderSamwise commented Jun 18, 2026

Copy link
Copy Markdown
Owner

What

Footer + tab-bar readability pass (mockup "B").

1. Title-case dashboard tabs

Tab labels are now Title Case — Dashboard / Coordination / Project / Library / Topology / Graveyard. The accent logic already targets the hotkey char case-insensitively, so the gold initial becomes the capital and reads as the hotkey. Display-only; key/hotkey and bindings unchanged.

2. Two-row grouped footer

Replaces the flat, auto-wrapped hint string with a two-row layout:

  • Row 1 MOVE — navigation (items/jump/resume/details/attention/back/reorder).
  • Row 2 — grouped actions with dim uppercase labels and a dim between same-line groups: CREATE (n/v/f/w) · TALK (S/H/T/o/R/e) · MANAGE (m/r/x) · system (?/q).

New renderFooterRows primitive in theme.ts (FooterGroup/FooterRow) packs group tokens to the width budget, divides same-line groups, and never starts a wrapped line with a divider. The old buildHelpLine closure becomes an exported, pure buildDashboardFooterRows(state) mapping all 5 state variants.

Presentation-only — no key bindings or behavior change. Each state variant keeps its exact prior key set (locked by a parity test).

Tests

  • renderFooterRows: group labels uppercased/dim, divider between same-line groups, wraps to width, no orphan leading divider, one line per row.
  • buildDashboardFooterRows: structure per variant + exact key-set parity with the old footer across all variants.
  • Updated statusline.test.ts for capitalized accented tabs.
  • Full suite green: typecheck, lint (max-warnings 0), 1408 tests, build.

Built across two audited phases (plan-audit + impl-audit each).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Style

    • Dashboard navigation tab labels now display in title case (e.g., “Dashboard,” “Coordination,” “Project,” “Library,” “Topology,” “Graveyard”), with matching uppercase hotkey indicators in the tmux statusline.
  • New Features

    • Redesigned the dashboard footer into a structured, grouped layout with clearer action categories, system/help hints, and visual dividers—wrapping neatly within the available width.
  • Tests

    • Updated and expanded dashboard and theme rendering tests to validate the new footer-row layout and casing.

test and others added 2 commits June 18, 2026 08:46
Capitalize the tab labels (Dashboard/Coordination/Project/Library/Topology/
Graveyard). The accent logic already targets the hotkey char case-insensitively,
so the gold initial now reads as the capital and doubles as the hotkey hint.
Key bindings stay lowercase/unchanged; this is display-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the flat, auto-wrapped footer hint string with mockup "B": a two-row
layout — row 1 MOVE (navigation), row 2 grouped actions (CREATE / TALK / MANAGE
/ system) with dim uppercase group labels and a dim divider between same-line
groups.

- theme.ts: add FooterGroup/FooterRow types and renderFooterRows, which packs
  group tokens to a width budget, divides same-line groups with a muted │, and
  never starts a wrapped line with a divider.
- dashboard-renderers.ts: replace the buildHelpLine closure with an exported,
  pure buildDashboardFooterRows(state) mapping all 5 state variants; each keeps
  its exact prior key set (verified by a parity test), only regrouped. Footer
  assembly renders the two rows.
- Tests: renderFooterRows (labels/divider/wrap), and per-variant key-set parity.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app Ready Ready Preview, Comment Jun 18, 2026 1:22am

@TraderSamwise

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f9413937-bdd9-4df0-8468-4ce1fbf082d4

📥 Commits

Reviewing files that changed from the base of the PR and between 18d73ea and 65b11ad.

📒 Files selected for processing (1)
  • src/tui/screens/dashboard-renderers.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/tui/screens/dashboard-renderers.ts

📝 Walkthrough

Walkthrough

Tab labels in DASHBOARD_SCREEN_TABS are capitalized to title case. A new FooterGroup/FooterRow type model and renderFooterRows renderer are added to the theme layer. The dashboard renderer replaces the monolithic buildHelpLine/buildHelpLines pipeline with buildDashboardFooterRows feeding renderFooterRows. Tests are added or updated for all three changes.

Changes

Dashboard Footer Refactor + Tab Label Casing

Layer / File(s) Summary
Tab label capitalization
src/statusline-model.ts, src/tmux/statusline.test.ts
DASHBOARD_SCREEN_TABS label strings changed from lowercase to title case; statusline test assertions updated to match uppercase hotkey markers and capitalized chip labels.
FooterGroup/FooterRow primitives and renderFooterRows
src/tui/render/theme.ts, src/tui/render/theme.test.ts
Exports FooterGroup and FooterRow interfaces and renderFooterRows(rows, width), which greedily packs tokens into width-bounded lines with dim dividers between groups and avoids starting wrapped lines with a divider. Tests cover divider placement and wrapping.
Dashboard footer builder and frame wiring
src/tui/screens/dashboard-renderers.ts, src/tui/screens/dashboard-renderers.test.ts
Adds buildDashboardFooterRows(state) producing state-dependent FooterRow[] (no sessions, worktrees+session nav, worktrees+worktree nav, flat session list, fallback); removes buildHelpLine and buildHelpLines; wires renderFooterRows(buildDashboardFooterRows(state), contentWidth) into renderDashboardFrame. Tests assert grouping, conditional MANAGE hints, system rows, and key-set parity across view-model variants.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • TraderSamwise/aimux#163: Directly touches DASHBOARD_SCREEN_TABS hotkey/display logic and dashboard-renderers.ts footer output — this PR's casing and footer refactor builds on top of that work.
  • TraderSamwise/aimux#149: Shares the same keycapHintLines/buildHelpLines help-key formatting codepath that this PR removes and replaces with renderFooterRows.
  • TraderSamwise/aimux#161: Also modifies the dashboard footer/help rendering logic inside dashboard-renderers.ts, overlapping with the same footer codepath being refactored here.

Poem

🐇 Hop, hop — the labels stand tall,
"Dashboard" and "Library" answer the call.
FooterGroup, FooterRow, neatly in line,
No more monolith help strings — the layout's divine.
Greedy packing with dividers so slim,
The rabbit declares: the footer's in trim!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the two main changes: title-case dashboard tabs and a two-row grouped footer layout, matching the primary objectives of the pull request.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/tui-next-19

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

The explicit "no sessions & no worktrees" branch made the trailing fallback
dead code (and the fallback carried a stray [w] the real variant-1 state never
shows). Collapse them: drop the explicit branch and let the now-reachable
fallback handle sessions==0 && !hasWorktrees with the correct no-[w] key set.
Parity test unchanged and still green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@TraderSamwise

Copy link
Copy Markdown
Owner Author

Review round 1 — sub-agent findings (CodeRabbit had no findings this round)

  • Unreachable footer fallback (fixed in 65b11ad). The explicit sessions==0 && !hasWorktrees branch made the trailing fallback dead code, and that fallback carried a stray [w] the real variant-1 state never shows (mirroring the same dead branch in the old footer). Collapsed: dropped the explicit branch so the fallback is now the reachable handler with the correct no-[w] key set. Parity test unchanged and green.
  • MANAGE order m → r → x (migrate/name/kill) — flagged as a reorder vs the old m → x → r. Intentional: it matches the approved mockup B (manage: m migrate · r name · x kill) and keeps the destructive action last. No dispatch change; parity is set-based.

renderFooterRows invariants (no infinite loop on oversized token, no line starts with a divider, fresh line per row, divider only between same-line groups) and full per-variant key-set parity were verified. Suite green: 1409 tests.

@TraderSamwise
TraderSamwise merged commit 82317ea into master Jun 18, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant