feat(web): filter sidebar threads by environment - #8530
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (4)
Included review availability: Your plan provides up to 10 included reviews per hour; 2 remain after this review. 📝 WalkthroughWalkthroughThe sidebar adds a session-only environment filter. It hides matching threads, drafts, and project entries, maintains valid selections as environments connect or disconnect, and documents the new controls. ChangesSidebar environment filtering
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to The sidebar now supports session-only environment filtering alongside project scope, with filtering applied consistently across threads, drafts, project entries, counts, search, and empty states. No concrete current-head merge-blocking risk remains. Sequence Diagram(s)sequenceDiagram
participant User
participant EnvironmentMenu
participant Sidebar
participant ThreadList
participant DraftRows
User->>EnvironmentMenu: Toggle an environment
EnvironmentMenu->>Sidebar: Update disabled environment ids
Sidebar->>ThreadList: Recompute visible threads
Sidebar->>DraftRows: Recompute visible drafts
ThreadList-->>User: Show enabled-environment threads
DraftRows-->>User: Show enabled-environment drafts
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. (1 skipped: 1 unsupported.)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Adds an opt-in, session-only environment checklist to the existing sidebar while retaining the prior all-environments default. Runtime impact is limited to local filtering of threads, drafts, and project choices, with focused helper tests and no schema, backend, or deployment changes. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
258c853 to
8983e13
Compare
Dismissing prior approval to re-evaluate 8983e13
There was a problem hiding this comment.
One consistency finding on the new environment-filter trigger: it is the only icon SidebarMenuButton in this header row without the coarse-pointer hit-target overlay its neighbors use. Everything else (Menu/MenuPopup/MenuCheckboxItem composition, width-class contract on MenuPopup, active-filter dot matching PullRequestListFilters) matches the shared component system.
Posted via Macroscope — UI Consistency
8983e13 to
14ed67b
Compare
Add an icon button next to the sidebar's project scope menu (visible only when more than one environment is connected) that opens a checklist to enable and disable which environments' threads the list shows. The filter composes with the project scope, draft rows, search, and the settled-tail pagination reset; the project menu narrows to projects with a presence in an enabled environment. State is the disabled set, so newly connected environments are visible by default. The last enabled environment cannot be unchecked, and a catalog change that would leave nothing enabled resets the filter instead of hiding every thread behind a control that no longer renders. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
14ed67b to
72c948d
Compare
There was a problem hiding this comment.
Two consistency findings on the new environment filter control in apps/web/src/components/Sidebar.tsx. Everything else (dot indicator matching PullRequestListFilters, MenuPopup width contract, SidebarMenuButton icon-color indirection) lines up with the existing system.
Posted via Macroscope — UI Consistency
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 d80e30b. Configure here.
There was a problem hiding this comment.
One finding on the new commit: the locked environment row explains its constraint with a native title attribute instead of the shared Tooltip primitive. Details inline.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
One finding on the newest commit: the environment checkbox rows now pin data-highlighted text colors, which overrides MenuCheckboxItem's accent-surface foreground contract.
Posted via Macroscope — UI Consistency
|
Note 🤖 GPT-6 Astra (preview) responding on behalf of Theo This note is part of an automated cleanup pass. Documentation carryover from #9241 at 32c1c96: update |
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |

Adds an environment filter beside the sidebar project picker when multiple environments are connected. Choose which environments contribute threads, or restore All environments. At least one environment stays selected. Project and environment filters compose; pinned and active rows use the same selection. A marker shows when filtering is active, and removed environments are pruned from the filter.
Verified head
5a95053254681b488ea89fc248855c47a1001b62includes upstream maine3b644c5af. The contribution is not superseded on that base. 168 focused tests, web typecheck, scoped lint and diff checks passed.Real client proof
Fresh captures compare exact base
e3b644c5afwith exact head5a9505325, in the full web client at 1280×800, light appearance. Two real disposable servers are connected through the normal pairing UI. The first has five threads; the second has one thread created through the client, with an actual Codex/Sol responseSECOND_ENVIRONMENT_OK. Both machines report the same hostname; their distinct addresses are visible in the menu.Before:
After:
Before clean video · After clean video · After annotated video
Actual clicks exclude the first environment, leaving the second server’s one thread; the last enabled environment is disabled in the menu to prevent an empty selection. All environments restores all six rows and removes the active-filter marker. The open remote conversation remains selected. The filter is component-local state: browser reload resets it to all environments, which was checked explicitly. These captures use real app controls and backend connections, without injecting filter state or provider output. The sidebar/menu crop retains elapsed time, with GIF sampling at 25 fps. Full raw recordings and source receipts are retained locally.
Fresh Electron, relay/tunnel, disconnected-environment, and project-filter composition runtime journeys were not performed. Focused logic tests cover composition, selection normalization, and the last-enabled guard. Native clients are outside this UI change.
Implemented and reviewed with GPT-6 in Codex; bounded worker model metadata was not exposed. Direct Claude Opus 5 review was unavailable because OAuth expired before inference; no Claude model ran.