Skip to content

feat(desktop): choose external project icons

MacroscopeApp / Macroscope - UI Consistency failed Aug 21, 2026 in 3m 9s

UI Consistency: 2 issues found

Two consistency findings in the changed web UI code, both in apps/web/src/components/settings/ProjectFaviconPickerDialog.tsx:

  • Duplicated footer action treatment (lines 88-113): the new "Open in " button copies CommandPalette.tsx (2421-2431) exactly β€” variant="ghost" size="xs" with h-auto px-2 text-muted-foreground text-xs hover:bg-transparent hover:text-foreground. These call-site classes override the xs size's core height and padding and re-create the ghost-muted variant's base state colors while cancelling its hover background. With two call sites now sharing the same durable treatment, it should be a shared footer-action component or a named button size/variant, with only disabled/onClick/label at the call site.
  • Duplicated label logic (lines 53-58): re-implements getLocalFileManagerName from CommandPalette.tsx (178-186), so the same user-visible platform label is derived in two places and can drift. Export/share the existing helper instead.

No other findings: footerTrailing is an existing CommandPaletteContent prop, ProjectSettingsPanel.tsx's conditional prop wiring is behavior-only, and no CSS/theme/scroll ownership was changed.

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/settings/ProjectFaviconPickerDialog.tsx, apps/web/src/components/settings/ProjectFaviconPickerDialog.test.tsx, apps/web/src/components/settings/ProjectSettingsPanel.tsx (desktop/server/contracts changes read only as context).

Verification performed:

  • Confirmed footerTrailing already exists on CommandPaletteContent and is rendered inside CommandFooter, so no new chrome contract was introduced.
  • Read apps/web/src/components/ui/button.tsx: size="xs" supplies h-7 ... px-[calc(--spacing(2)-1px)] text-sm sm:h-6 sm:text-xs, and a ghost-muted variant already provides muted text with hover:text-foreground; the call-site string therefore overrides height/padding and reconstructs variant state colors.
  • Compared against CommandPalette.tsx (footerTrailing at 2420-2432, getLocalFileManagerName at 178-186) to confirm the duplication rather than an isolated one-off.
  • Checked apps/web/src/components/ui/command.tsx for an existing shared footer-action primitive (none exists; CommandFooter only styles the container), which is why extraction is the suggested fix.
  • No global CSS, theme variant, mask, scroll-area, or virtualized-list behavior is touched by this PR, so emitted-CSS and scroll-behavior gates were not applicable.

Both findings were posted as inline review comments on the smallest relevant line ranges.


πŸ” Agent activity β€” 13 tool calls

πŸ’­ I'm reviewing the web UI changes in ProjectFaviconPickerDialog.tsx and ProjectSettingsPanel.tsx, checking whether the footerTrailing prop actually exists on CommandDialogPopup, whether Button supports a size="xs" variant, and whether the large className override at the call site conflicts with the primitive's own height styling. This is a candidate finding since "muted ghost actions" is called out as a pattern that should become a named variant if it recurs. I also need to verify isMacPlatform, isWindowsPlatform in ~/lib/utils, and isWindowsAbsolutePath in @t3tools/shared/path actually exist before checking the real files.

1. browse_code β€” apps/web/src/components/settings/ProjectFaviconPickerDialog.tsx

2. browse_code β€” apps/web/src/components/ui/*.tsx

πŸ’­ I'm wondering whether the footerTrailing prop already exists on CommandPaletteContent since the diff only shows added lines, so I should check the existing component. I also want to verify the Button component supports an "xs" size and confirm the platform detection helpers in lib/utils.

3. browse_code β€” apps/web/src/components/ui/button.tsx

4. git_tools β€” footerTrailing

πŸ’­ I recall there's a similar footer button pattern already in CommandPalette.tsx, so I want to check whether it uses the "ghost-muted" variant, since the new code's styling looks like it's essentially recreating that same variant manually.

5. browse_code β€” apps/web/src/components/CommandPalette.tsx

6. browse_code β€” apps/web/src/components/CommandPaletteContent.tsx

πŸ’­ I notice this new button duplicates the exact variant, size, and className of the existing CommandPalette footerTrailing button, which means the same durable treatment is now repeated across two call sitesβ€”something the rules flag as a case for extracting a named primitive size or variant rather than copying large class strings. So the call site is essentially reconstructing ghost-muted on top of ghost, which is a real violation worth flagging β€” the cleanest fix is extracting the shared "Open in file manager" footer button into its own component, since it duplicates both the styling and the fileManagerName computation. I want to check whether CommandPalette.tsx also computes fileManagerName separately, so let me search for any existing shared helper.

7. git_tools β€” fileManagerName

8. git_tools β€” isMacPlatform|isWindowsPlatform

πŸ’­ I notice CommandPalette.tsx already exports a helper for getting the local file manager name by platform, so I should check that existing implementation.

9. browse_code β€” apps/web/src/components/CommandPalette.tsx

πŸ’­ I notice the new file duplicates getLocalFileManagerName and the entire footer button class/variant string, which is a UI consistency issue β€” the "Open in file manager" footer action now exists as repeated code at two call sites instead of being extracted into a shared component or helper. The class string also overrides the primitive's height, padding, and hover background to reconstruct a "ghost-muted" variant on top of "ghost" β€” since this pattern is now shared across two call sites, it's the strongest finding and should extend the primitive contract instead. I should also check the ProjectSettingsPanel.tsx changes, particularly the favicon computation and conditional spread around lines 288-340 and 1175-1190, though the a11y and hit-target behavior of the footer button seem fine as-is.

10. browse_code β€” apps/web/src/components/settings/ProjectSettingsPanel.tsx

11. browse_code β€” apps/web/src/components/settings/ProjectSettingsPanel.tsx

πŸ’­ This does look like a concrete violation β€” the same five-utility override string shows up at both footer call sites, overriding the primitive's height, padding, and ghost hover background. That's exactly the duplicated-treatment pattern the rule flags, so the fix should be introducing a named primitive variant instead of repeating the override. I'm also noting the duplicated getLocalFileManagerName logic tied to the same footer control, which I can fold into the same comment rather than raising separately. Then I want to double-check whether the hover:bg-transparent override actually wins against the ghost variant's hover state given matching specificity β€” it comes down to which utility Tailwind emits later in the generated CSS. There's a similar duplicated label pattern in OpenInPicker.tsx, but that's pre-existing and unrelated. Weighing whether this counts as an optional aesthetic preference versus a genuine consistency issue, I think the repeated class-string override reconstructing the ghost-muted treatment matches the documented pattern where call sites should prefer a named variant instead of duplicating overrides. I'll flag this as a finding with a suggestion and lean toward marking it a failure. Since the check defaults to failure unless there are no findings, having this one concrete issue pushes the state to failure. Let me also check the other changed files more carefully β€” only two web files plus a test file are in scope, and I want to verify the test file's approach to mocking hooks doesn't introduce its own consistency concerns. I notice the check uses the member's workspaceRoot while the picker uses the representative's β€” not a UI concern though. I should check whether the Button size and overrides match other footer patterns, and see if there's a shared component like CommandFooter in ui/command.tsx already handling this.

12. browse_code β€” apps/web/src/components/ui/command.tsx

πŸ’­ I'll plan two inline comments: one on the new Button block flagging the duplicated override string shared with CommandPalette.tsx and suggesting extraction into a shared footer action or variant, and a second shorter one on the duplicated getLocalFileManagerName logic noting label consistency across palettes. Since a real fix requires cross-file changes, I'll leave these as suggestions without a diff rather than a partial fix. Now I need to figure out the correct diff line numbers for each comment β€” the button block sits around lines 86-115 and the file manager name logic around lines 53-58, both within added hunks, so I'll anchor the comments there and post them.

13. modify_pr β€” Reviewed the web UI changes (ProjectFaviconPickerDialog.tsx, ProjectSettingsPanel.tsx). Two consistency findings: the palette footer "Open in " action is now duplicated verbatim (button treatment and label logic) instead of being shared with the command palette. Details inline.


Agent Credits: 82 credits