Repository navigation
UI Consistency: 2 icon-mapping inconsistencies
Findings
apps/web/src/components/BranchToolbar.logic.ts/apps/web/src/components/BranchToolbar.tsx(new):isDesktopLocalwas added to the sharedEnvironmentOption, but the mobile counterpart of the same composer picker (MobileRunContextSelector) still hardcodesisPrimary ? MonitorIcon : CloudIconat both the trigger (~line 107) and theMenuRadioItemlist (~line 154).BranchToolbarrenders one or the other based onisMobile, so a WSL environment shows the Linux glyph on desktop and a cloud on mobile. Inline comment posted.apps/web/src/components/Sidebar.tsx(still open from the prior review):SidebarThreadTooltip(~line 318) rendersServerIconunconditionally, so a desktop-local thread row shows Tux while its own hover card — andSidebarSearchResultRow, which shares that tooltip — shows a server glyph for the same environment. Not re-commented inline to avoid duplication; noted in the review body.
Resolved since the last run
- Remote (non-desktop-local) sidebar rows keep
ServerIconvia the newremoteIconparameter, so the unintended server→cloud switch for all remote threads is gone. LegacySidebarnow renders the resolvedEnvironmentIconinstead of re-encoding the fallback ternary.
Details
Note
Your check run agent prompt is: .macroscope/check-run-agents/ui-consistency.md
More information about how Check Run Agents work can be found in our Help Center.
Scope reviewed: apps/web/src/components/{Icons,Sidebar,LegacySidebar,ChatView,BranchToolbarEnvironmentSelector}.tsx, apps/web/src/components/BranchToolbar.logic.ts, apps/web/src/sidebarProjectGrouping.ts, plus directly affected consumers of the changed types (BranchToolbar.tsx, MachineProfileRow.tsx, SidebarThreadTooltip / SidebarSearchResultRow in Sidebar.tsx).
Method: grepped every CloudIcon / ContainerIcon / MonitorIcon / ServerIcon / LinuxIcon render site under apps/web/src at head to find surfaces that describe the same environment class with a different glyph, and confirmed which of them consume the EnvironmentOption shape this PR extended.
Notes / non-findings:
- Icon tone:
LinuxIconusesfill="currentColor", and both new call sites inherit color from atext-*parent (text-sidebar-muted-foreground/70,text-icon-muted), so the migrated glyph keeps its intended muted tone. Thestroke-*styling used in the tooltip row is not applied to the new call sites. ProviderSettingsPanel.tsx(~lines 154-158) and_chat.pull-requests.tsx(~line 1449) contain separate pre-existing environment→icon mappings. They are not consumers of the changed type and were left unflagged as unrelated legacy cleanup.- Previously reported concern that a Tux mark asserts an OS from
isDesktopLocalConnectionTarget(which only means a host-managedlocal:backend) and sits next to OS-neutralaria-label="Local sandbox project"/Local sandbox: …wording inLegacySidebar.tsxremains unchanged at head; already commented in an earlier run, not re-posted.
🔍 Agent activity — 14 tool calls
💭 Let me check the current PR state to see if these issues were resolved—the Sidebar now passes ServerIcon as remoteIcon addressing the icon inconsistency, and the LegacySidebar ternary was fixed to use EnvironmentIcon. I still need to verify whether the tooltip inconsistency and the LinuxIcon assertion were addressed too.
1. git_tools — ServerIcon
2. browse_code — apps/web/src/components/Icons.tsx
💭 I notice the tooltip at line 318 still uses ServerIcon unconditionally, while the row now shows LinuxIcon for desktop-local threads — a mismatch that was flagged before. The cloud/server icon change got fixed, but the tooltip inconsistency itself was never actually addressed. Since posting a duplicate comment on an unfixed issue seems questionable per guidelines, I'll note it in the summary instead and move on to checking for new issues introduced between commits f01bc91 and 020546e.
3. git_tools — f01bc91..020546e
💭 This was likely force-pushed, so I should check the PR's commit list to confirm.
4. github_api_read_only — repos/{owner}/{repo}/pulls/{pull_number}/commits
💭 The head commit only fixed the server icon preservation issue, leaving the tooltip inconsistency unaddressed. I want to check whether the isDesktopLocal addition to EnvironmentOption in BranchToolbar.logic.ts has other producers besides ChatView's environment picker, since that could affect consistency across the codebase.
5. git_tools — EnvironmentOption
💭 I'm checking whether the PR actually updated
buildEnvironmentOptionin BranchToolbar.logic.ts to account for the newisDesktopLocalfield, since the diff only seems to add it to the interface while ChatView still constructs options around that same call. I should also check whether BranchToolbar.tsx builds its ownavailableEnvironmentslist separately, which could need the same fix.
6. browse_code — apps/web/src/components/BranchToolbar.logic.ts
7. browse_code — apps/web/src/components/ChatView.tsx
💭 I'm noticing a discrepancy in line numbers between the grep results and the actual file view for the logic file — the function locations shifted between what grep reported and what I'm now seeing, so I need to reconcile which version is accurate. I'm getting confused about which revision that grep actually ran against — some results match head (like the ServerIcon/getEnvironmentIcon changes) while others clearly don't (buildEnvironmentOption showing in ChatView, which isn't in this PR's scope). Rather than untangle the discrepancy, I should just directly view the Sidebar.tsx regions at head to confirm what's actually there. Now I want to check specific things at head: whether the Sidebar tooltip near line 318 is still using ServerIcon inconsistently with the row icon, whether BranchToolbar.tsx constructs EnvironmentOption objects that would need updating if isDesktopLocal became a required field, whether LegacySidebar's "Local sandbox" tooltip wording with the Linux icon is still unchanged from before, and whether the new icon helper in Icons.tsx is consistent in how it applies styling like
fillandcn. I'm also noticing that the new LinuxIcon uses fill-based coloring while the surrounding sidebar icons rely on stroke-based Tailwind classes likestroke-muted-foreground, which wouldn't affect a fill-only icon -- something to double check whereEnvironmentIconis actually rendered versus where ServerIcon is still hardcoded in the tooltip.
8. browse_code — apps/web/src/components/LegacySidebar.tsx
9. browse_code — apps/web/src/components/Sidebar.tsx
💭 I'm checking that currentColor works properly for both icons via stroke and fill, and noting a potential concern that a solid-filled Tux icon at small size might look visually heavier than the surrounding outlined lucide icons. I want to verify whether the repo already has an existing LinuxIcon or platform-icon convention elsewhere to avoid duplication, and check if other places rendering environment icons should be consistent with a shared helper, though unrelated cleanup isn't strictly required by the review.
10. git_tools — (CloudIcon|ContainerIcon|MonitorIcon|ServerIcon|LinuxIcon)
💭 I'm noticing BranchToolbar.tsx still has the primary/cloud ternary logic at a couple lines, and it sits alongside the already-migrated BranchToolbarEnvironmentSelector.tsx. I want to check whether BranchToolbar renders its own separate environment indicator variant, since that could mean a WSL environment still shows the wrong icon in that duplicate spot.
11. browse_code — apps/web/src/components/BranchToolbar.tsx
💭 I'm noticing another instance of this same issue:
MobileRunContextSelectorin BranchToolbar.tsx is the mobile counterpart to the desktop environment selector the PR migrated, and it still hardcodes the icon logic in two places rather than using the newisDesktopLocalfield consistently. I should check whether the desktop selector is only shown atmd+widths and the mobile one below that, since if they're alternate renderings of the same control, this drift would be directly visible to users switching between mobile and desktop. I'm notingProviderSettingsPanel's icon mapping is pre-existing and untouched by this PR, so it's out of scope, but the BranchToolbar mobile selector is directly relevant since it shares the same data type modified here.
12. browse_code — apps/web/src/components/BranchToolbarEnvironmentSelector.tsx
💭 Let me check how BranchToolbarEnvironmentSelector is positioned relative to MobileRunContextSelector in BranchToolbar.tsx, looking at the responsive visibility classes involved.
13. git_tools — BranchToolbarEnvironmentSelector|MobileRunContextSelector|max-md:hidden|md:hidden
💭 I've confirmed both paths render the same composer control with the same environment options, but mobile still hardcodes a monitor-or-cloud icon instead of using the new isDesktopLocal flag. That means a WSL environment shows a cloud icon on mobile while desktop correctly shows the Tux icon—a real, in-scope bug in the mobile selector component that hasn't been flagged yet. Since BranchToolbar.tsx itself isn't touched in this PR, I can't leave an inline review comment directly on its lines—GitHub only allows comments on diff lines. I'll instead anchor the comment on one of the added lines in BranchToolbarEnvironmentSelector.tsx (around line 34), noting that the mobile sibling component wasn't updated to match. I also want to flag a second issue: a mismatch between the ServerIcon used in the sidebar tooltip versus the icon shown in the row itself. I flagged this same tooltip issue in an earlier pass, and while the code partially responded by fixing the fallback logic, the tooltip mismatch itself is still unresolved. Rather than re-posting a duplicate comment, I'll note it as still-open in the check summary and fail the check on both this and the new finding. I'll also consider whether the redundant environment lookup in ChatView is worth flagging, but it seems too minor to call out. For the actual comment, I'm deciding where to anchor it — the shared type definition in BranchToolbar.logic.ts seems like the best spot since that's where the new field was added but the mobile picker still hardcodes the old behavior, so I want to point reviewers there even though the real fix belongs in BranchToolbar.tsx.
14. modify_pr — One new finding: the composer's mobile environment picker still hardcodes the old primary/cloud icon mapping, so the same WSL environment renders Tux on desktop and a cloud on mobile. Details inline. Still open from the previous review: SidebarThreadTooltip (apps/web/src/components/Sidebar.tsx ~318) renders ServerIcon unconditionally, so a desktop-local thread row shows the Linux glyph while its own hover card — and SidebarSearchResultRow, which shares that tooltip — still shows a server glyph for that identical environment.
Agent Credits: 111 credits
Token usage: 24 uncached input · 615,312 cache-read input · 79,500 cache-write input · 9,897 output
Agent Credits may also include non-token charges from external tools such as web research.