feat: clearer worktree status indicators - #265
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Claude finished @Guilhem-lm's task in 2m 11s —— View job Code Review — PR #265: clearer worktree status indicatorsNice, well-scoped PR. The split into three commits, the pure-helper extraction with tests, and the position-based bars are all clean. Below are findings grouped by severity. Nothing here is a blocker — mostly minor robustness/UX notes. 🟡 Worth addressing1. Consider keying the effect on the branch identity list rather than the whole row objects, so it only re-observes when rows are added/removed: let branchKey = $derived(rows.map((r) => r.worktree.branch).join("\n"));
$effect(() => {
const root = listEl;
if (!root) return;
branchKey; // re-observe only when the set of rows changes
...
});2. 🟢 Minor / nits3. Empty icon slot still occupies a flex gap 4. "open conversation" == 5. "above" cycling starts from the top-most row, not the nearest ✅ Looks good
I did not run the build/tests in this review; relying on the PR's stated
|
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
webmux | 35d4a16 | Commit Preview URL Branch Preview URL |
Jun 08 2026, 02:21 PM |
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Claude finished @Guilhem-lm's task in 3m 32s —— View job Code Review — PR #265: clearer worktree status indicatorsReviewed the diff against Notably, the two items from the earlier automated review are now resolved in the current commits:
Nothing below is a blocker. 🟡 Worth a look1. 2. 🟢 Minor / nits3. Empty icon slot still occupies the flex gap (carried from prior review, still applies) 4. Chip count has no accessible label 5. ✅ Looks good
I did not install deps / run the build here (
|
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Makes the sidebar worktree status indicators legible by removing the agent-status vs. unread-dot overlap, and adds floating bars that surface the statuses of rows scrolled out of view.
Three increments (see commits):
done+ unread), and nothing fordone+read / idle. The standalone blue dot beside the icon is gone.Demo
Screen.Recording.2026-06-08.at.14.40.01.mov
Changes
App.svelte: skip adding the open (selectedBranch) conversation tonotifiedBranches.AgentStatusIcon.svelte: animated working dots;donerenders a blue accent dot only whenunread, otherwise nothing; newunreadprop.WorktreeList.svelte: removed the separate unread<span>(folded intoAgentStatusIcon);IntersectionObserverclassifies each row as above/visible/below; two position-based floating bars rendered from a shared{#snippet}; per-direction click-to-cycle scrolling.worktree-list.ts: pure helpersoverflowStatusOf,countAgentStatusesIn,branchesWithAgentStatus(+rowShowsAgentStatus). Bars countwaiting,error, anddone-unread; hidden-only, both directions.worktree-list.test.ts: 8 new unit tests for the counting/cycling helpers.Notes / scope
mux !== "✓"), its icon/dot is suppressed by the existing row guard; the "closed" badge carries the row instead.Checks
bun run check(frontend) — 0 errors / 0 warningsbunx vitest run src/lib/worktree-list.test.ts src/lib/WorktreeList.test.ts— 18 passinglocalStorage/happy-dom env failures unrelated to this branch)Test plan
waiting/error/done-unreadrows sit off both ends — verify a top bar and a bottom bar appear independently and hide when nothing is hidden in that direction.Generated with Claude Code