fix(web): sidebar v2 polish — jump hints, working duration, in-flight fade, settled sort#4274
Conversation
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
ApprovabilityVerdict: Approved UI polish changes for sidebar v2: adds working duration timer display, jump hint badges, visual fading for in-flight rows, and improved sorting for settled threads. All changes are frontend display logic with comprehensive test coverage and no backend/security implications. You can customize Macroscope's approvability policy. Learn more. |
|
#4026 (comment) for visbility |
Dismissing prior approval to re-evaluate ea2f4bb
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 8e47ccc. Configure here.
Dismissing prior approval to re-evaluate 4512b82
Dismissing prior approval to re-evaluate f897ad3
… fade, settled sort - jump hotkey hints render as a pointer-events-none pill at the row's right edge instead of replacing the status/time label, so holding cmd no longer hides Working/Done - the Working label shows elapsed time, ticking in a self-contained component outside the role=status live region - in-flight rows (working/approval/input) recede: 70% opacity and muted normal-weight text, hover restores; only the colored status label stands out (inbox-zero — prominence is for done/read/failed) - settled threads sort and label by settledAt, falling back to last activity (all latestTurn stamps) for auto-settled rows; label and order share one resolver so they can't disagree Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 869c55a
…nch inheritance fix 22 upstream commits (pingdotgg#4274-pingdotgg#4411). No conflicts; no overlap with the fork's provider-usage feature or release pipeline.

Four polish nits on the sidebar v2 beta, applied on top of the surface redesign:
Holding cmd made the status disappear. The jump hotkey hint rendered in the same slot as the status/time label, so holding the modifier blanked out "Working"/"Done" on every row. Hints now render as a
pointer-events-nonepill floating at the row's right edge — no layout shift, status stays visible, and the pill can't block the settle/un-settle hover buttons.No way to see how long a thread has been working. The Working label shows elapsed time (
Working 3m), counting from the running turn's start (request time until adoption, session transition as fallback; malformed timestamps fall through). The timer ticks in a self-contained component so the row doesn't re-render every second, and sits outside therole="status"live region so screen readers don't announce every tick.Working threads were too prominent. Inbox-zero: in-flight threads (working, approval, input) aren't your problem yet. They fade to 70% opacity with muted normal-weight text (hover restores); only the colored status label stands out. Prominence is reserved for done (unread), read-but-unsettled, and failed.
Settled threads sorted by message time, not settled time.
resolveSettledTimestampusessettledAtwhen stamped (explicit settles); auto-settled threads fall back to last activity using the same candidate set asthreadLastActivityAt(user message + alllatestTurnstamps). Sort and slim-row label share the resolver, so they can't disagree.Verification
bun run typecheck(apps/web) passes🤖 Generated with Claude Code
Note
Low Risk
Client-only sidebar presentation and sorting logic with unit tests; no auth, data, or API changes.
Overview
Sidebar v2 polish improves how thread rows look and order without changing server APIs.
Keyboard jump hints no longer replace the status/time slot (which hid “Working” while holding ⌘). They render as a floating
JumpHintBadgeon the row edge so layout and settle buttons stay stable.Working rows now show a live elapsed time (
Working 3m) viaresolveWorkingStartedAt,formatWorkingDurationLabel, and a self-tickingWorkingDurationcomponent; the timer isaria-hiddenso only the status label is announced.In-flight threads (working, approval, input) that are read and not selected recede (opacity + muted title weight) so unread, unsettled, and failed rows stand out.
Settled threads use
resolveSettledTimestamp/sortSettledThreadsForSidebarV2(explicitsettledAt, else latest activity including turn completion) instead of message/updatedAtonly; slim settled rows show the same timestamp insettledTimeLabel.Reviewed by Cursor Bugbot for commit 869c55a. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Polish sidebar v2 with jump hint badges, live working duration, in-flight fade, and consistent settled sort
JumpHintBadge, a floating overlay badge inSidebarV2.tsxthat displays jump hints without displacing status or time labels.WorkingDuration, a self-ticking component that shows elapsed time next to the 'Working' status, updating every second.sortSettledThreadsForSidebarV2, ordering by resolved settled timestamp descending with stable tie-breaking by id; settled row time labels are updated to match.resolveWorkingStartedAt,formatWorkingDurationLabel,resolveSettledTimestamp) handle timestamp resolution and duration formatting with fallback and clamping behavior.Macroscope summarized 869c55a.