Repository navigation
UI Consistency: 2 issues found
Two consistency issues introduced by narrowing the environment indicator from "desktop-local" to "WSL":
apps/web/src/components/LegacySidebar.tsx(~2326-2337): the project header now keys offproject.allRemoteMembersAreWslwhileSidebarThreadRowin the same file still keys offisDesktopLocalConnectionTarget(~403-406, ~854). A non-wsl:*local backend renders as "Local" with no glyph in the thread rows but "Remote project" with a cloud icon in its own project header; the updated comment at ~398-402 also no longer matches the code.apps/web/src/components/settings/ProviderSettingsPanel.tsx(152-165):providerEnvironmentIcon/providerEnvironmentDetailswitched toisWslConnectionTarget, so other host-managed local backends loseLaptopIconand "Local device" and are presented as remote (displayUrl ?? "Remote device"+CloudIcon). The test added in this PR establishes such targets are representable.
Both were posted as inline review comments with the smallest suggested fix.
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.
Verified beyond the diff:
-
apps/web/src/connection/desktopLocal.ts:isWslConnectionTargetmatches awsl:backend-id prefix; the desktop side does mint those ids (apps/desktop/src/wsl/DesktopWslBackend.tsWSL_INSTANCE_ID_PREFIX), so the new predicate is real, and today alllocal:bearer environments happen to bewsl:* -
so the two findings are divergence/consistency risks the PR's own test makes representable rather than currently visible regressions.
-
apps/web/src/components/Icons.tsx:getEnvironmentIconreturnsIcon-typed components;LinuxIconusesfill="currentColor"and every new call site colors viatext-*/text-icon-muted, notstroke-*, so tone is preserved.p-0.5keeps the glyph optically aligned with lucide's inner bounds. -
apps/web/src/components/Sidebar.tsx:SidebarThreadRowhas a single call site (line ~3693), andremoteIcon: ServerIconpreserves the previous glyph for non-WSL remote rows.
Not re-reported (already flagged on earlier commits of this PR and unchanged): MobileRunContextSelector in BranchToolbar.tsx (~107, ~154) still resolves isPrimary ? MonitorIcon : CloudIcon inline instead of using the shared helper, and SidebarThreadTooltip (Sidebar.tsx ~318) still renders ServerIcon for a WSL environment whose row now shows the Linux glyph.
π Agent activity β 14 tool calls
π I'm checking the current PR head at 8e21744 against the previously flagged commit 960e0e1 to see what's changed. I need to verify whether the MobileRunContextSelector still has the inline icon conditional, and confirm whether ProviderSettingsPanel's icon mapping was properly updated to use getEnvironmentIcon.
1. git_tools β MonitorIcon|CloudIcon|isPrimary|getEnvironmentIcon β rejected: repo.url: required parameter is missing or empty;repo: required parameter is missing or empty
2. git_tools β 960e0e1..8e21744
π Since the branch was force-pushed, those earlier commits aren't accessible in the repo anymore, so I'll just grep at the current head instead.
3. git_tools β MonitorIcon|CloudIcon|isPrimary|getEnvironmentIcon|isWsl
π I'm checking whether this hardcoded mobile selector issue was already flagged beforeβit was, at BranchToolbar.logic.ts line 14 in a prior commit. But the underlying variable changed from
isDesktopLocaltoisWsl, so this might count as a meaningful change worth re-flagging rather than a duplicate. I also want to verify whether the second prior finding, the ProviderSettingsPanel divergence, has actually been fixed by the switch to the shared helper, since the icon logic for WSL versus desktop targets still looks inconsistent in the updated code. This narrowing from desktop-local to WSL-only seems like a real behavioral shift β non-WSL local backends now render as "Remote project" with a cloud icon instead of "Local sandbox project" with a container icon, which could clash with SidebarThreadRow's separate labeling logic around line 400. I want to check that file to see whether it still uses isDesktopLocalConnectionTarget, which would create an inconsistency between thread and project labels.
4. browse_code β apps/web/src/components/settings/ProviderSettingsPanel.tsx
5. git_tools β isDesktopLocal|isWsl|allRemoteMembersAre
π I'm noticing that the LegacySidebar thread row still checks desktop-local connection status for the "Local" label, while the project header now checks WSL-only status. That creates a real inconsistency: for a desktop-local non-WSL environment, thread rows would suppress the remote icon and show "Local," but the header would show "Remote project" insteadβpreviously these were aligned since both used the same desktop-local check. I'm also spotting a stale comment that still claims the project header shows a Linux icon for all desktop-local projects, when it now only does so for WSL ones. This looks like a genuinely new issue worth flagging, distinct from earlier feedback about the ContainerIcon/LinuxIcon wording mismatch that was already addressed. There's a second potential finding brewing around how ProviderSettingsPanel handles environment details for non-WSL desktop setups. For WSL threads, the row still shows LinuxIcon while the tooltip shows ServerIcon, so that specific divergence flagged before remains unaddressed even though the non-WSL cloud-icon issue was fixed. Since the code did change in direct response to the original comment, but the residual tooltip mismatch is largely the same point restated, I'm leaning toward not reposting it to avoid duplicate noise. The mobile BranchToolbar issue was also flagged twice already and remains unaddressed, so I won't repost that either. I want to double check the sidebarProjectGrouping comment and the Sidebar.tsx tooltip logic for consistency, and confirm LinuxIcon's aria handling is fine since aria-hidden gets forwarded properly through props. I also want to verify that the padding utility on LinuxIcon merges correctly with the size classes via the className merge order. The padding shrinks the drawn glyph area to roughly match lucide's default inner margin proportions, which seems like a deliberate optical adjustment rather than a bug. I also notice LinuxIcon lacks a strokeWidth prop and uses fill instead of stroke, making it look visually heavier next to the lucide icons, but that's a minor aesthetic difference not worth flagging. Now I want to check whether ProviderSettingsPanel still imports LaptopIcon anywhere.
6. git_tools β ServerIcon
7. browse_code β apps/web/src/connection/desktopLocal.ts
π I should verify whether the platform actually mints "wsl:" prefixed backend ids in connection/platform.tsβif the real ids look like "wsl-Ubuntu" instead, isWslConnectionTarget would always be false and the whole PR would be a no-op.
8. git_tools β desktopLocalConnectionId(|wsl:|"wsl
π I notice CommandPalette.tsx already has an inline check for the "wsl:" prefix at line 791, which the new isWslConnectionTarget helper duplicates. It's a pre-existing pattern now made relevant, and I could suggest consolidating to a shared helper, though that's a minor point about change discipline. The more important finding is in LegacySidebar: the project header now keys off WSL-only status while thread rows in the same sidebar still use isDesktopLocalConnectionTarget. This means a non-WSL desktop-local project gets inconsistent treatment β thread rows suppress the remote glyph and show "Local", but the project header shows CloudIcon with "Remote project"/"Remote environment" text. The comment nearby also now incorrectly claims the project header shows a Linux icon for all desktop-local projects. I should flag this and suggest deriving both from the same predicate rather than mixing WSL-only and desktop-local checks. Now I'm turning to look at the ProviderSettingsPanel code around lines 152-165. I'll anchor the comment across lines 153-158 with a reference to 165. Then I pause to double-check whether the regression actually matters in practice β checking whether any non-WSL desktop-local backends exist today. Tracing through the bootstrap logic, it looks like local: bearer connections currently only ever come from wsl:* entries, since the primary environment gets filtered out, so isWsl may functionally cover all current cases even if it's fragile going forward. That undercuts findings A and B, since today the two predicates coincide with no visible divergence. But the PR's own new test explicitly asserts these two conditions can diverge (e.g. "native-linux"), which means the code now relies on two separate predicates for what's meant to be the same visual decision β a real divergence risk introduced by this change rather than a pre-existing bug. Given the instruction to only report concrete violations from changed lines, I think the stronger point is that LegacySidebar now computes the same "local backend" state via two different predicates, and the comment even acknowledges they're expected to agree, so this inconsistency is worth flagging directly tied to the new test's assertions. I'll also note ProviderSettingsPanel has a similar latent issue: dropping LaptopIcon means a non-WSL desktop-local project would render as cloud. Since these are separate files, I'll post two distinct inline comments rather than merging them, while being clear that today's behavior is equivalent. Given the check defaults to failure when there are findings, I'll set the result to failure and move on to checking whether isWslEnvironment is passed consistently at other call sites in Sidebar.tsx besides the one at line 3747. I'm also considering whether the LinuxIcon's fill-based coloring would clash with the stroke-based styling used elsewhere in the thread row β I want to check the surrounding context around Sidebar.tsx line 1580-1590 and LegacySidebar around line 2328 to confirm.
9. browse_code β apps/web/src/components/Sidebar.tsx
10. git_tools β SidebarThreadRow
π Only one call site uses this, so color via currentColor works fine for the fill. The Tux glyph's sizing and stroke weight compared to ServerIcon will look slightly different visually, but that's just aesthetic and not worth fixing. I also notice LinuxIcon doesn't set aria-hidden/focusable itself, relying on call sites to pass it β I'm checking other icon usages like EnvironmentIcon for consistency there. I'm also checking whether lucide-react adds aria-hidden by default, and it seems it doesn't, so there's parity across icon types. Then I'm digging into the type compatibility between the custom
Icontype (React.FC<SVGProps>) used for LinuxIcon and the ForwardRefExoticComponent type lucide icons use β reasoning through whether assigning a LucideIcon to that type will actually typecheck given the ref/props differences. I want to verify this against existing precedent, so I'm checking how ProviderSettingsPanel's callers render providerEnvironmentIcon to see if they pass props like size or strokeWidth that could break compatibility once it returns the Icon type instead of a lucide icon directly.
11. git_tools β providerEnvironmentIcon|EnvironmentIcon
12. git_tools β : Icon =|Icon[]|Icon;
π I want to check how the ProviderSettingsPanel renders its tab icons, particularly whether the Icon component's className includes stroke color classes that might be causing a display issue.
13. browse_code β apps/web/src/components/settings/ProviderSettingsPanel.tsx
π I'm deciding what findings to post as comments. The first one flags a mismatch in LegacySidebar.tsx where the header check uses a WSL condition but the thread rows use a desktop-local check, and points out that the comment nearby is now inaccurate β I need to confirm the anchor line exists in the diff. Second finding targets ProviderSettingsPanel.tsx where narrowing the check to WSL-only drops the "Local device" label for other desktop-local backends, tied to the icon fallback change. I'm deciding to skip flagging the wording/icon mismatch since narrowing to WSL justifies the Linux icon, then drafting the actual comment text explaining the two divergent predicates for the "is this really local" check. eeping the desktop-local flag on the snapshot for wording, using WSL only for the glyph, or else narrowing SidebarThreadRow to isWslConnectionTarget so both surfaces agree. For the second comment, I'm noting that providerEnvironmentDetail and its icon now key off isWslConnectionTarget instead of isDesktopLocalConnectionTarget, which breaks local-device treatment for other host-managed local backends β a 127.0.0.1 backend would render as "Remote device" with a CloudIcon instead of LaptopIcon, contradicting the PR's own new test for a non-wsl desktop-local target. I'm suggesting they keep desktop-local as the actual "local" signal here. I'm putting together a diff that restores LaptopIcon for desktop-local targets while keeping WSL detection separate, and noting that this requires re-importing LaptopIcon and isDesktopLocalConnectionTarget, plus a note that the detail line should stay on isDesktopLocalConnectionTarget. I'm deciding to include the diff alongside that note, and figuring out where to anchor comment 2 given it spans two regions of the file. I'll anchor the second comment at line 165 since it covers the concrete regression, while still mentioning the icon fallback issue nearby. Both comments target files matching the intended include patterns, so I'll go ahead and post the review as a COMMENT-type submission. I need to double-check that both comment lines actually appear in the diff hunks β line 2326 for LegacySidebar and line 165 for ProviderSettingsPanel both show up as changed lines, so that's fine. I'll set start_line equal to line and side to RIGHT for each comment.
14. modify_pr β Two places where this PR's narrowing from "desktop-local" to "WSL" splits one piece of state into two predicates, so the same environment can be described two different ways.
Agent Credits: 181 credits
Token usage: 20 uncached input Β· 773,159 cache-read input Β· 160,389 cache-write input Β· 13,095 output
Agent Credits may also include non-token charges from external tools such as web research.