Skip to content

fix(web): sidebar v2 polish — jump hints, working duration, in-flight fade, settled sort#4274

Merged
juliusmarminge merged 1 commit into
mainfrom
sidebar-v2-nits
Jul 23, 2026
Merged

fix(web): sidebar v2 polish — jump hints, working duration, in-flight fade, settled sort#4274
juliusmarminge merged 1 commit into
mainfrom
sidebar-v2-nits

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Jul 22, 2026

Copy link
Copy Markdown
Member

Four polish nits on the sidebar v2 beta, applied on top of the surface redesign:

  1. 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-none pill 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.

  2. 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 the role="status" live region so screen readers don't announce every tick.

  3. 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.

  4. Settled threads sorted by message time, not settled time. resolveSettledTimestamp uses settledAt when stamped (explicit settles); auto-settled threads fall back to last activity using the same candidate set as threadLastActivityAt (user message + all latestTurn stamps). Sort and slim-row label share the resolver, so they can't disagree.

Verification

  • bun run typecheck (apps/web) passes
  • apps/web unit tests: 1476 passed (includes tests for settled sort incl. turn-completion activity, working-start resolution incl. malformed timestamps, and duration formatting)

🤖 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 JumpHintBadge on the row edge so layout and settle buttons stay stable.

Working rows now show a live elapsed time (Working 3m) via resolveWorkingStartedAt, formatWorkingDurationLabel, and a self-ticking WorkingDuration component; the timer is aria-hidden so 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 (explicit settledAt, else latest activity including turn completion) instead of message/updatedAt only; slim settled rows show the same timestamp in settledTimeLabel.

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

  • Adds JumpHintBadge, a floating overlay badge in SidebarV2.tsx that displays jump hints without displacing status or time labels.
  • Adds WorkingDuration, a self-ticking component that shows elapsed time next to the 'Working' status, updating every second.
  • In-flight rows (working, approval, input) now fade and de-emphasize when not active or selected.
  • Settled thread sorting is replaced with sortSettledThreadsForSidebarV2, ordering by resolved settled timestamp descending with stable tie-breaking by id; settled row time labels are updated to match.
  • New logic utilities (resolveWorkingStartedAt, formatWorkingDurationLabel, resolveSettledTimestamp) handle timestamp resolution and duration formatting with fallback and clamping behavior.

Macroscope summarized 869c55a.

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Title check ✅ Passed The title is concise and accurately summarizes the sidebar v2 polish changes in this PR.
Description check ✅ Passed The description covers what changed, why, and verification well enough, even though it doesn't follow the template headings exactly.
✨ 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 sidebar-v2-nits

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

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment thread apps/web/src/components/Sidebar.logic.ts
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jul 22, 2026
@macroscopeapp

macroscopeapp Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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.

@jakeleventhal

jakeleventhal commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

#4026 (comment) for visbility

@macroscopeapp
macroscopeapp Bot dismissed their stale review July 22, 2026 13:18

Dismissing prior approval to re-evaluate ea2f4bb

Comment thread apps/web/src/components/SidebarV2.tsx Outdated
Comment thread apps/web/src/components/SidebarV2.tsx Outdated
Comment thread apps/web/src/components/Sidebar.logic.ts

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread apps/web/src/components/SidebarV2.tsx
@t3dotgg t3dotgg changed the title fix(web): sidebar v2 polish — hotkey hints, working duration, in-flight fade, icon order, settled sort, no list animation fix(web): sidebar v2 polish — working duration, in-flight fade, jump-hint placement, settled sort Jul 23, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jul 23, 2026
@macroscopeapp
macroscopeapp Bot dismissed their stale review July 23, 2026 11:32

Dismissing prior approval to re-evaluate 4512b82

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jul 23, 2026
@macroscopeapp
macroscopeapp Bot dismissed their stale review July 23, 2026 12:25

Dismissing prior approval to re-evaluate f897ad3

@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 23, 2026
Comment thread packages/contracts/src/settings.ts Outdated
@t3dotgg t3dotgg changed the title fix(web): sidebar v2 polish — working duration, in-flight fade, jump-hint placement, settled sort fix(web): sidebar v2 polish — jump hints, working duration, in-flight fade, settled sort Jul 23, 2026
@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Jul 23, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jul 23, 2026
… 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>
@macroscopeapp
macroscopeapp Bot dismissed their stale review July 23, 2026 20:07

Dismissing prior approval to re-evaluate 869c55a

@juliusmarminge
juliusmarminge merged commit ddd5a46 into main Jul 23, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the sidebar-v2-nits branch July 23, 2026 20:50
jetblk added a commit to jetblk/t3code that referenced this pull request Jul 24, 2026
…nch inheritance fix

22 upstream commits (pingdotgg#4274-pingdotgg#4411). No conflicts; no overlap with the fork's
provider-usage feature or release pipeline.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants