Repository navigation
UI Consistency: 2 issues found
Two regressions introduced by the providers page rework:
apps/web/src/components/settings/ProviderInstanceCard.tsx— the editor header dropped the status row, sosummary.detail(server-supplied reasons such as "CLI not detected on PATH.") andliveProvider.auth.emailare no longer rendered anywhere in the settings surface; only a truncated headline survives in the 20rem list column.apps/web/src/components/settings/ProviderSettingsPanel.tsx— the icon-only "Refresh provider status" button lost itsTooltipwrapper (the file's Tooltip import was removed), diverging from every other icon-only settings action in this area.
Previously flagged items are resolved in this head commit: the device strip and Models/Configuration strip no longer declare an unimplemented ARIA tab pattern, both now carry cursor-pointer and focus-visible rings, the Models tab is hidden when the driver is not shipped, the Advanced disclosure uses the shared Collapsible primitive, and the "Add provider" button no longer restates size="sm" geometry.
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.
Method: reviewed the merge-base→head diff for the three in-scope files, then read the head versions of ProviderInstanceCard.tsx, ProviderSettingsPanel.tsx, providerStatus.ts, ui/collapsible.tsx, and ui/button.tsx; compared the previously reviewed commit (9159a2c) against the head to confirm which prior findings were addressed; traced consumers of PROVIDER_STATUS_STYLES, getProviderSummary, ProviderInstanceIcon, and RedactedSensitiveText to confirm the status detail and auth email have no remaining renderer; and checked the icon-only Button size="icon-micro" + Tooltip convention across apps/web/src/components/settings.
Not flagged: providerStatus.ts moving the disabled dot from bg-amber-400 to the semantic bg-muted-foreground/50 (an improvement); raw <button> elements implementing selectable rows and tab strips (explicitly allowed); SettingsPageContainer width="expanded" (valid WorkspacePageWidth); and the residual className="text-xs" on the "Add provider" button, which was already raised and partially addressed.
🔍 Agent activity — 20 tool calls
💭 I'm checking the current PR head at dd06a1b against the earlier flagged issues from commits 9159a2c and e7309cd, and it looks like several have been resolved—tabs now use aria-pressed instead of role="tab", cursor-pointer and focus-visible rings were added, buttons use size="sm" with text-xs, and the Advanced section now uses Collapsible components. Let me verify the rest. The models tab visibility, device tab styling, and the Add provider button all seem to match resolutions from prior review rounds, so I shouldn't re-flag those. I still want to check whether the status dot replacement in the fallback icon and provider status indicator work correctly, and whether CollapsibleTrigger and the ProviderInstanceCard row have proper focus styling. I also need to verify the SettingsPageContainer's "expanded" width prop actually exists, and note that removing RedactedSensitiveText eliminates the email auth display — likely an intentional change. Let me check the actual current files to confirm these details.
1. browse_code — apps/web/src/components/settings/ProviderInstanceCard.tsx
2. browse_code — apps/web/src/components/ui/collapsible.tsx
💭 The Advanced disclosure now correctly uses the Collapsible primitive, addressing the prior finding. I'm scanning for remaining issues: whether ProviderInstanceIcon nests invalid elements inside the button, whether the warning status color change from amber to muted-gray affects other consumers of PROVIDER_STATUS_STYLES, whether removing the RedactedSensitiveText auth email display leaves dead code, and whether the Advanced Collapsible trigger lacks a focus-visible ring compared to established patterns elsewhere. I want to check the actual consumers of PROVIDER_STATUS_STYLES and the SettingsPageContainer width prop before flagging anything further.
3. git_tools — PROVIDER_STATUS_STYLES|providerStatus
4. browse_code — apps/web/src/components/settings/providerStatus.ts
💭 I'm checking whether the diff's line 9 change corresponds to the "disabled" status entry rather than "warning," since the current code shows disabled using the muted-foreground color while warning keeps its own dot style.
5. browse_code — apps/web/src/components/settings/providerStatus.ts
6. git_tools — apps/web/src/components/settings/providerStatus.ts a6797b3..dd06a1b
💭 The disabled dot switched from a raw amber palette color to a semantic muted-foreground token, which is an improvement rather than a bug. Now I'll look at the rest of ProviderSettingsPanel at head.
7. browse_code — apps/web/src/components/settings/ProviderSettingsPanel.tsx
8. browse_code — apps/web/src/components/settings/ProviderSettingsPanel.tsx
💭 I need to check whether SettingsPageContainer actually supports a "width" prop, and revisit the earlier finding about Button's size="sm" being overridden by the variant's sm:text-sm at larger breakpoints, potentially negating the intended text-xs styling. Beyond that, I'm scanning several smaller areas — the ProviderInstanceCard row layout, editor mode tab buttons, the Collapsible trigger's focus styling, and SettingsSection's headerAction — but none look like real problems. The main open question is verifying Button's variant definitions and the container's width prop before deciding if anything needs flagging.
9. git_tools — size:|sm:h-|sm:text-sm
10. git_tools — width
💭 I'm tracing through how tailwind-merge resolves the class conflict: the
text-xspassed at the call site will override the basetext-base, but sincesm:text-smis a differently-scoped variant, it survives the merge and still wins at larger screens—meaning the button ends up showingtext-smat ≥640px rather than the expected size. Now I'm reconsidering whether this is actually a fresh violation to flag or a repeat: I already noted this exact same-line issue in a prior run and recommended switching tosize="compact"since that variant already ships withtext-xsbaked in. Since the current head still hasn't adopted that fix, I need to decide whether flagging it again is redundant or still warranted given the author hasn't acted on the earlier suggestion.
11. git_tools — 9159a2c..dd06a1b
💭 This was likely force-pushed, so let me check the list of commits on the PR.
12. github_api_read_only — repos/{owner}/{repo}/pulls/{pull_number}/commits
💭 I notice the PR has 4 commits, with dd06a1b being the third and under review, plus a later commit that seems to revert some Collapsible advanced settings. Since fetching the diff for an earlier commit failed with "commit not found," likely due to a shallow clone, I'll try comparing commits through the GitHub compare API instead.
13. github_api_read_only — repos/{owner}/{repo}/compare/9159a2c7b7d1294a516645d1460020cd8c44e705...dd06a1b
💭 The latest commit fixed all five prior findings, so now I'm checking whether it introduced any new issues or left something unaddressed—specifically looking at whether the text-xs class on that small button still gets overridden by the base sm:text-sm breakpoint, since my earlier comment about this prompted the change but may not have fully resolved it. I'm weighing whether this is worth flagging a third time versus genuine noise, and scanning other areas like the focus ring offset, the status dot styling in list rows, and whether summary detail text got dropped from the editor header entirely. I want to check whether removing the auth row also left
RedactedSensitiveTextandsummary.detailunused elsewhere, and whetherstatusDotClassName/indicatorBackgroundprops onProviderInstanceIconare now dead code across other consumers. I'm also checking whether the icon component renders a div that would end up nested inside the button, which could be an accessibility problem. I still need to verify thatSettingsPageContaineractually accepts awidth="expanded"prop by finding its definition, so I don't get a typecheck failure.
14. browse_code — In apps/web/src/components/settings: (1) Does SettingsPageContainer accept a width prop with value "expanded"? Show its definition. (2) Show the root element and props of ProviderInstanceIcon (file components/settings/ProviderInstanceIcon.tsx or wherever), especially whether it accepts statusDotClassName and indicatorBackground props and which other files pass them. (3) Which files import RedactedSensitiveText?
15. git_tools — summary|rawSummary|statusStyle
💭 I notice statusStyle and summary are only used in list mode, so no unused-variable issue arises. Editor mode drops the status indicator entirely, but since list mode still shows the dot and headline, status remains discoverable elsewhere — not a major concern. Now I'm digging into whether there's a genuine consistency violation worth flagging. The editor's ProviderInstanceIcon no longer receives a statusDotClassName prop, making that branch of the primitive effectively dead code, though that's minor. I'm also checking aria-pressed usage on the list-row button and tabs, the Switch behavior in list mode, and row spacing — most of these look acceptable, but I want to verify one potential real regression more carefully. I'm confirming that EnvironmentUnavailableRow, selection state resets, and read-only handling for device tabs all behave correctly. The more interesting issue is the refresh button in the list footer, which previously had a Tooltip with descriptive text but now only carries an aria-label — a mild loss of visual affordance consistency with other icon-only controls elsewhere in the codebase. The focus ring on tab strip buttons looks fine given the height and padding setup. I'm now wondering whether there's a shared tabs component elsewhere in the codebase worth cross-checking against these patterns. I'm also checking the responsive grid behavior — below the lg breakpoint, the list and selected editor stack full-width, which seems acceptable, and the row's aria-pressed selection behavior alongside the Switch control looks reasonable too. I'm confirming the tab state resets correctly since the editor instance is keyed by instanceId, so switching providers remounts cleanly, and the list versus editor keys don't collide since they belong to separate parent components. Now I notice something more concerning: the diff removed the auth email and detail message rendering entirely, so error details like "CLI not detected on PATH" from
summary.detailare no longer shown anywhere in the UI — only the truncated headline remains visible. This looks like a genuine regression since it was the only surface for server-provided error messages, though I need to check whether it falls under the visual preservation rules or a separate concrete-violation category. I'm weighing whether to default to "All clear" since prior findings seem resolved, then double-checking the text-xs/sm:text-sm Tailwind conflict — considering how tailwind-merge groups modifier classes separately, meaning both could survive and the sm breakpoint override might still apply depending on source order in the className string. The author only partially applied my earlier suggestion, and re-posting the same duplicate comment now feels noisy for what's a minor 12px vs 14px text sizing quirk—I'd rather not re-litigate it. Let me check if there's a more substantial issue I've overlooked, like keyboard accessibility on the list rows. I'm verifying the icon's root element structure works fine nested inside a button, and that the "On" column header span isn't meaningfully broken despite lacking explicit association with the Switch. Now I'm checking whether the PR includes focused tests for the new mode/state behavior changes, since composition and state transition changes should require test coverage.
16. git_tools — isExpanded|onExpandedChange|openInstanceDetails|providerEnvironmentDetail
17. git_tools — ProviderInstanceCard|mode="list"|mode="editor"
💭 I'm noting that SourceControlSettings uses a similar Button-with-aria-expanded and Collapsible pattern, which stays consistent. I'm also checking whether other selectable-row components like ModelPickerSidebar or Sidebar rows use aria-selected or data-selected attributes, though this seems non-critical for now. I spot a minor inconsistency where list-mode rows use a slightly different border opacity than the header and footer, but that's purely aesthetic. I'm also thinking through the disabled-provider status logic — when a provider is enabled locally but the server hasn't reported yet, the dot could show "disabled" while the headline text says "Authenticated," which is a minor edge case worth noting but not a major flaw. The real issue I'm settling on: when an enabled provider has a server error status, the dot shows destructive and the headline says "Unavailable," but the actual error detail text is never rendered anywhere since removing
authRowNode— this is a genuine information regression I should flag, with the simplest fix being to render the summary headline/detail in the editor header, which also currently lacks any status indicator. I'm also noting a secondary, smaller finding: an icon-only refresh button lost its Tooltip in this change, which is a minor discoverability regression — I want to confirm this is against the codebase's established pattern of always pairing icon-only buttons with tooltips before including it in my comment.
18. git_tools — size="icon-micro"
💭 I notice icon-only refresh buttons elsewhere in settings consistently use a Tooltip wrapper, but this PR removed that wrapper from the provider refresh button along with the Tooltip imports themselves — since restoring it requires re-adding imports, this can't be a simple inline suggestion and would need a fuller diff instead. Separately, I'm noticing that
provider.message(auth errors, CLI detection status, authenticated email) is no longer rendered anywhere afterauthRowNodewas removed — that's a real regression worth flagging. I want to suggest showing headline and detail in the editor header where there's room, and I need to anchor my comment on a line that's actually part of the diff, like the{titleTailNode}line in the rewritten header block around line 690-695. For the refresh button, I'll target the added lines around 833-845 in ProviderSettingsPanel.tsx, and fold the missing status indicator concern into the same comment rather than raising it separately. Before finalizing this as a finding, though, I should verify the auth email isn't shown elsewhere — checking whether ProviderSettingsForm displays auth status or a login button, since that would make my regression claim a false positive.
19. browse_code — In apps/web/src/components/settings/ProviderSettingsForm.tsx and ProviderModelsSection.tsx (at the PR head), is the provider's authentication status/email (ServerProvider.auth.email / auth.label) or the server-provided status message (provider.message, i.e. getProviderSummary's detail) displayed anywhere? I want to know whether removing the auth email row and the summary detail line from ProviderInstanceCard leaves those values unrendered anywhere in the providers settings surface. List any component in apps/web/src that renders provider.auth.email or getProviderSummary().detail.
💭 I've confirmed two legitimate issues: the provider status detail and authenticated email are no longer rendered anywhere due to the removed authRowNode, which is a real regression—I should suggest surfacing this in the editor header instead. The refresh icon button also lost its tooltip along with the removed Tooltip import, making it inconsistent with other icon-only actions elsewhere in settings. Given the rule that clear consistency or regression risks can fail the check, the missing info display feels like a genuine regression worth flagging. I'm drafting a comment for line 690 in ProviderInstanceCard.tsx explaining that the editor header dropped the status row—the computed status style and detail are no longer rendered, and the authenticated email is gone entirely, making server-supplied detail copy and account info unreachable in the settings UI. For the second comment, I'm noting that the refresh action in ProviderSettingsPanel.tsx (lines 833-845) lost its Tooltip wrapper since the Tooltip import was removed, meaning the icon-only button no longer has an accessible label or hover explanation. Every other icon-only settings button pairs the size="icon-micro" pattern with a Tooltip, so I'll suggest restoring it and the import rather than providing a diff since that requires an import change. Now I'm confirming the line numbers correspond correctly to the diff's added lines in both files before submitting the review as a COMMENT.
20. modify_pr — UI consistency review of the providers settings rework. The earlier ARIA/tab-role, cursor, Collapsible, and button-geometry items are resolved in dd06a1b. Two regressions introduced by the removed header content remain.
Agent Credits: 644 credits