Skip to content

feat(ui): redesign companion app layout and summary#108

Merged
tkhwang merged 2 commits into
mainfrom
feat/update-0617-part4
Jun 17, 2026
Merged

feat(ui): redesign companion app layout and summary#108
tkhwang merged 2 commits into
mainfrom
feat/update-0617-part4

Conversation

@tkhwang

@tkhwang tkhwang commented Jun 17, 2026

Copy link
Copy Markdown
Owner
  • Update DESIGN.md to reflect new UI architecture
  • Introduce AppSummary component for global inventory and status rollup
  • Replace flat task list with ProjectGroup components
  • Remove memoEdit, memoClear, notiClear, and copyPath actions
  • Update commandForTaskAction to reflect removed actions
  • Refine terminology and microcopy in DESIGN.md

This redesign aims to improve the information hierarchy and visual clarity of the companion app. Grouping tasks by project and providing a global status summary makes it easier for users to quickly grasp the state of their work. The removal of certain actions simplifies the interface, focusing on core task management and navigation.

Summary by CodeRabbit

  • New Features

    • Tasks now organized by project with project headers and task counts
    • Summary header displays project inventory and status metrics
  • Refactor

    • Action bar streamlined to IDE, Terminal, and Finder only (removed memo, notification, and copy actions)
  • Documentation

    • Added plan for project-grouped UI redesign
    • Added plan for upcoming settings panel and CLI-themed developer HUD

- Update `DESIGN.md` to reflect new UI architecture
- Introduce `AppSummary` component for global inventory and status rollup
- Replace flat task list with `ProjectGroup` components
- Remove `memoEdit`, `memoClear`, `notiClear`, and `copyPath` actions
- Update `commandForTaskAction` to reflect removed actions
- Refine terminology and microcopy in `DESIGN.md`

This redesign aims to improve the information hierarchy and visual clarity of the companion app. Grouping tasks by project and providing a global status summary makes it easier for users to quickly grasp the state of their work. The removal of certain actions simplifies the interface, focusing on core task management and navigation.
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@tkhwang, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 47 minutes and 49 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c8061c2c-50f9-419b-bf11-47b3bb1a5833

📥 Commits

Reviewing files that changed from the base of the PR and between cae49ca and 80e6c7a.

📒 Files selected for processing (1)
  • docs/plans/0037-companion-settings-cli-theme.md
📝 Walkthrough

Walkthrough

The companion popover is restructured from a flat title + row list to a project-grouped layout. MenuModel gains summary and groups (replacing title and rows). A new ProjectGroup component renders per-project sections. The command surface is narrowed to IDE, Terminal, and Finder only across CompanionCommand, TaskRow, and App.tsx. A plan document for the next settings/CLI-theme feature is also added.

Changes

Companion Project-Grouped UI and Action Surface Narrowing

Layer / File(s) Summary
Command surface narrowing: CompanionCommand and TaskRow actions
apps/workbranch-companion/src/infrastructure/tauriClient.ts, apps/workbranch-companion/src/ui/TaskRow.tsx, apps/workbranch-companion/tests/task-row.test.tsx
CompanionCommand union narrows to finder/ide/terminal. TASK_ACTION_KINDS reduces to the same three, updating labels, ARIA cases, and removing memoEdit/memoClear/notiClear/copyPath. TaskRow drops the project prop and reorders plan steps after CurrentStep. Tests updated to reflect the narrowed action set and removed prop.
MenuModel reshape: grouped types and buildMenuModel rewrite
apps/workbranch-companion/src/application/state.ts, apps/workbranch-companion/tests/acl.test.ts
Exports new ProjectGroup and MenuSummary types; MenuModel replaces title/rows with summary/groups. buildMenuModel is rewritten to group tasks per project, sort by updatedAt, filter empty groups, sort groups by latest task update, and compute aggregated counts. ACL tests updated to assert on the new grouped and summarized shape.
ProjectGroup component and CSS styles
apps/workbranch-companion/src/ui/ProjectGroup.tsx, apps/workbranch-companion/src/style.css, apps/workbranch-companion/tests/project-group.test.tsx
New ProjectGroup component renders a project-labeled header with pluralized task count and maps group.rows to TaskRow children. CSS adds .app-summary, .badge variants, and .project-group/header/count selectors; removes .project-line; reduces .task-name font size. New test suite verifies header, project name, task count, and ordering.
App.tsx: AppSummary component and grouped rendering
apps/workbranch-companion/src/App.tsx
Adds AppSummary component that renders inventory text and active/blocked/notification badges from MenuSummary. commandForTaskAction returns a non-optional CompanionCommand for only the three retained action kinds. Header replaces <h1> with <AppSummary>. Task list renders ProjectGroup instances from model.groups instead of flat TaskRow instances from model.rows.
DESIGN.md updates and plan 0036 documentation
DESIGN.md, docs/plans/0036-companion-project-grouped-ui.md
DESIGN.md describes the global inventory + status rollup information architecture and removes legacy microcopy. Plan 0036 document records the complete implementation spec including decision gates, coordinated file changes, task-by-task specs, verification criteria, and implementation results.
Plan 0037: Companion settings and CLI theme (future)
docs/plans/0037-companion-settings-cli-theme.md
New planning document defines requirements for an in-popover settings panel with launch-at-login toggle, fixed-width font selector, and four-preset CLI theme selector, using Tauri v2 autostart and store plugins, with full TypeScript preference contract, file structure, and acceptance criteria.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐇 Hop hop, the tasks now cluster near,
By project grouped, the path is clear!
No memo, no copy — just IDE and more,
Badges count what's active, blocked in store.
The summary blooms where flat rows once lay,
A tidy warren for a working day! 🌿

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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 'feat(ui): redesign companion app layout and summary' directly and accurately describes the main changes: UI redesign with new layout organization (project grouping) and a new summary component.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/update-0617-part4

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
docs/plans/0037-companion-settings-cli-theme.md (2)

251-255: 💤 Low value

Non-goals section has repeated sentence beginnings; improve readability.

Lines ~251–255 list four non-goals, each starting with "Do not", which LanguageTool flags as awkward repetition. Restructure for variety or use a bullet list without the repeated prefix.

Suggested revision for non-goals section
 ## Non-goals

-- Do not add task lifecycle mutation UI.
-- Do not add arbitrary custom theme editor or arbitrary font input.
-- Do not introduce Tailwind/shadcn/Radix.
-- Do not change `workbranch list --json` / `list --global --json` schemaVersion 1.
-Do not merge this work back into 0036; 0036 should remain independently implementable.
+- Task lifecycle mutation UI is out of scope.
+- Custom theme editors and arbitrary font inputs are not included.
+- Tailwind, shadcn, and Radix are not adopted.
+- The CLI contract (`workbranch list --json` / `list --global --json` schemaVersion 1) remains unchanged.
+- This work is not merged back into 0036; 0036 remains independently implementable.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/plans/0037-companion-settings-cli-theme.md` around lines 251 - 255, The
Non-goals section has repetitive sentence structure with each bullet point
starting with "Do not", which creates awkward readability. Restructure these
bullet points to vary the sentence beginnings and improve readability. You can
either rephrase some items using alternative verbs like "Avoid", "Skip", or "Do
not merge" to break up the monotony, or convert them to noun-phrase style
bullets (e.g., "Task lifecycle mutation UI" instead of "Do not add task
lifecycle mutation UI") while maintaining clarity about what should not be
included or changed.

192-201: ⚖️ Poor tradeoff

CSS variable naming and theme class structure should be prescribed upfront.

Task 6 specifies that root uses var(--app-font-family) but does not define the full CSS variable namespace for theme tokens (e.g., --theme-foreground, --theme-background, etc.) or the class/attribute naming pattern (e.g., data-theme="terminal-dark" vs class="theme-terminal-dark"). Define these patterns now to avoid rework during implementation.

Suggested CSS structure guidance for Task 6
 - [ ] Replace proportional root stack with `var(--app-font-family)` defaulting to fixed-width.
 - [ ] Add root classes or data attributes for `font-*` and `theme-*` preferences.
 - [ ] Define theme variables for the four presets.
+- [ ] Use CSS custom properties for all theme colors: `--color-bg`, `--color-fg`, `--color-accent`, `--color-border`, `--color-focus-ring`.
+- [ ] Use `data-theme="terminal-dark" | "amber-crt" | "green-mono" | "high-contrast"` on `:root` to select theme.
+- [ ] Use `data-font="system-mono" | "sf-mono" | ...` on `:root` to select font stack.
+- [ ] Define theme presets as `:root[data-theme="..."]` blocks in CSS.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/plans/0037-companion-settings-cli-theme.md` around lines 192 - 201, Task
6 specifies using CSS variables and theme presets but lacks prescriptive
guidance on the variable naming namespace and the structural pattern for
applying themes. Update the Task 6 section to define upfront the complete CSS
variable naming convention for theme tokens (e.g., the specific variable names
like --theme-foreground, --theme-background, etc.) and the exact class or
data-attribute naming pattern to use for theme selection (e.g.,
data-theme="terminal-dark" or class="theme-terminal-dark"). This will prevent
ambiguity and rework during implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/plans/0037-companion-settings-cli-theme.md`:
- Around line 164-175: The Task 4 specification for the SettingsPanel lacks
accessibility structure requirements that should guide implementation. Add a new
subsection titled "Accessibility Requirements" or expand the existing checklist
in Task 4 to explicitly define the HTML semantic structure: require fieldset
elements with legend children for the Startup, Font, and Theme sections; mandate
aria-label attributes on the toolbar icon button that opens the settings panel;
specify that each form control (launch-at-login toggle, font select, theme
select) must have an associated label element using the for/id pattern; clarify
keyboard focus order starting from the settings panel opener through all
controls; and note that state changes (e.g., toggle activation, preference
updates) must be announced to screen readers using appropriate ARIA live regions
or role changes. This ensures implementers understand the complete a11y contract
from the specification rather than discovering gaps during review.
- Around line 177-190: The error handling strategy in the planned tasks is
incomplete. While line 189 specifies that launch-at-login toggle failures set
the footer/status message, Tasks 4 and 5 do not define error handling for font
and theme selector changes (such as store write failures or sanitization edge
cases). Add clarification to both tasks about how errors from preference updates
will be handled - either specify that font/theme changes should also surface
errors via the footer/status message pattern, or explicitly document that these
operations are assumed to never fail and why that assumption is safe. Ensure the
error handling strategy is consistent across all preference update operations.

---

Nitpick comments:
In `@docs/plans/0037-companion-settings-cli-theme.md`:
- Around line 251-255: The Non-goals section has repetitive sentence structure
with each bullet point starting with "Do not", which creates awkward
readability. Restructure these bullet points to vary the sentence beginnings and
improve readability. You can either rephrase some items using alternative verbs
like "Avoid", "Skip", or "Do not merge" to break up the monotony, or convert
them to noun-phrase style bullets (e.g., "Task lifecycle mutation UI" instead of
"Do not add task lifecycle mutation UI") while maintaining clarity about what
should not be included or changed.
- Around line 192-201: Task 6 specifies using CSS variables and theme presets
but lacks prescriptive guidance on the variable naming namespace and the
structural pattern for applying themes. Update the Task 6 section to define
upfront the complete CSS variable naming convention for theme tokens (e.g., the
specific variable names like --theme-foreground, --theme-background, etc.) and
the exact class or data-attribute naming pattern to use for theme selection
(e.g., data-theme="terminal-dark" or class="theme-terminal-dark"). This will
prevent ambiguity and rework during implementation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c7157237-4190-4120-aa1d-7357db7d9bdf

📥 Commits

Reviewing files that changed from the base of the PR and between 2f75f83 and cae49ca.

📒 Files selected for processing (12)
  • DESIGN.md
  • apps/workbranch-companion/src/App.tsx
  • apps/workbranch-companion/src/application/state.ts
  • apps/workbranch-companion/src/infrastructure/tauriClient.ts
  • apps/workbranch-companion/src/style.css
  • apps/workbranch-companion/src/ui/ProjectGroup.tsx
  • apps/workbranch-companion/src/ui/TaskRow.tsx
  • apps/workbranch-companion/tests/acl.test.ts
  • apps/workbranch-companion/tests/project-group.test.tsx
  • apps/workbranch-companion/tests/task-row.test.tsx
  • docs/plans/0036-companion-project-grouped-ui.md
  • docs/plans/0037-companion-settings-cli-theme.md

Comment thread docs/plans/0037-companion-settings-cli-theme.md
Comment thread docs/plans/0037-companion-settings-cli-theme.md
@tkhwang tkhwang merged commit 24f4d51 into main Jun 17, 2026
4 checks passed
@tkhwang tkhwang deleted the feat/update-0617-part4 branch June 17, 2026 14:49
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