Skip to content

fix(server): probe configured codex account

MacroscopeApp / Macroscope - UI Consistency completed Aug 26, 2026 in 3m 53s

UI Consistency: 2 minor findings in UsagePage

Reviewed the in-scope web files (apps/web/src/components/usage/UsagePage.tsx, UsageProviderChart.tsx, UsagePage.test.tsx). The subscription-limit meters correctly reuse the shared Tooltip primitive (matching existing TooltipTrigger render={...} call sites), keep provider color/label indirection through PROVIDER_PRESENTATION, follow the repo's existing role="progressbar" meter pattern (StatusPage, ContextWindowMeter), and keep all presentation as owner-local Tailwind. The skeleton reshape flagged in the previous run is resolved: it now mirrors the loaded row (no stale color dot, gap-6/gap-1.5/gap-0.5, second summary line, meter grid, min-h-60 chart matching UsageProviderChart).

Two minor findings posted inline, both in apps/web/src/components/usage/UsagePage.tsx:

  • Unlimited-window boxShadow glow is clipped by the track's overflow-hidden rounded-full, so it never renders (dead styling). Drop it or move it to the track element.
  • Meter wrapper and meter-row grid geometry are duplicated verbatim between UsageLimitMeters and UsageSkeleton, reintroducing the drift risk that caused the earlier skeleton mismatch. Suggest module-level class constants shared by both.

Neither is a user-facing regression, so this is reported as non-blocking.

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.

Checks performed:

  • Shared primitives: confirmed no Progress primitive exists in apps/web/src/components/ui, so the local meter is not a reconstructed primitive; Tooltip/TooltipTrigger/TooltipPopup are used per existing repo convention, including non-interactive render elements (ThreadErrorBanner, pullRequestPresentation, PanelLayoutControls).
  • Accessibility: progressbar has aria-label, aria-valuemin/max, aria-valuenow (omitted for unlimited, indeterminate) and aria-valuetext, so the exact reset time is available to AT even though the tooltip trigger is a non-focusable div — consistent with other informational tooltips in the codebase. Minor wording note (not posted): aria-valuetext hardcodes "No five-hour limit" for any unlimited window; today only fiveHour can be unlimited.
  • Layout parity: compared loaded rows against UsageSkeleton line by line (mark size-4, min-h-5 label row, pl-6/ml-6 second line, meter wrapper pt-3 pb-1 pl-6, 3-column meter grid) and the chart column against UsageProviderChart (min-h-60/min-h-56, w-14 axis gutter, min-w-0 flex-1 plot, lg:h-full stretch). No mismatch found beyond a sub-5px x-axis label placeholder height.
  • Scope discipline: apps/mobile, apps/server, packages/* and docs changes were read for context only; no actions taken outside the configured include patterns.
  • Verification: text-[9px], bg-muted track, and inline var(--contrast-foreground) color usage all have existing precedent in the repo, so they were not reported.

🔍 Agent activity — 16 tool calls

💭 Checking whether the skeleton mismatch flagged in the prior review was addressed—it looks like the diff now updates the skeleton sizing and spacing, so that issue seems resolved. Now I'm shifting focus to reviewing the current diff across the usage page, chart component, and test file for any new findings. I want to verify the Tooltip primitive's requirements around TooltipProvider, check whether the progressbar role handles an undefined aria-valuenow correctly for unlimited usage, and consider whether wrapping tooltip content in a non-focusable div creates a keyboard accessibility gap. I also want to trace whether window.timeZone refers to a shadowed local loop variable or the actual browser global, since that distinction matters for correctness—so I'll pull up the actual file to confirm. I'm also noting the removed color dot next to the provider legend as a possible intentional design change worth flagging rather than a bug.

1. browse_code — apps/web/src/components/usage/UsagePage.tsx

2. browse_code — apps/web/src/components/ui/tooltip*

💭 Good, that's just a destructured local variable. Now I want to check tooltip.tsx to understand its API and contract.

3. browse_code — apps/web/src/components/ui/tooltip.tsx

4. browse_code — apps/web/src/components/usage/UsagePage.tsx

💭 I want to check how Tooltip is used elsewhere in the repo, particularly whether TooltipProvider is needed and how TooltipTrigger handles render props. I'm also concerned that rendering the trigger as a div loses keyboard focusability, since Base UI's Tooltip normally renders a button and relies on hover/focus to open—a plain div without tabIndex won't be reachable by keyboard. That said, they added aria-valuetext with equivalent info on the progressbar, which partially addresses the accessibility gap for screen reader users. I also want to check whether removing the color dot from the provider row creates a consistency issue—previously the dot matched the chart's color-coded series, so without it there's no visual link between the row and the chart legend. I should look at UsageProviderChart to see if it has its own legend or labeling that would compensate for this.

5. git_tools — TooltipTrigger

6. browse_code — apps/web/src/components/usage/UsageProviderChart.tsx

💭 I'm checking the progressbar role usage on the span, which seems fine even with an unlimited/indeterminate value. Then I'm looking at the tooltip trigger being a non-interactive div — Base UI's Tooltip opens on hover and focus, but a div isn't focusable by default, which could be a key accessibility gap. Actually, I notice other call sites in the repo do the same pattern, and here the tooltip content (exact reset time) is duplicated in aria-valuetext and the visible countdown text, so keyboard/AT users still get the info — I wouldn't flag this one. There's precedent both ways for adding tabIndex to div triggers, and the HTML nesting looks valid overall. I'm now looking at whether formatUsageResetDateTime returning null on invalid input could cause a downstream issue. The "unlimited" aria-valuetext wording hardcodes "five-hour" even though the schema technically allows any window to be unlimited — a minor scope nit, probably not worth flagging since only the five-hour window can currently be unlimited per normalization. I'm comparing the skeleton layout against the loaded row's spacing and structure to see if they match, and checking whether the skeleton renders meters for every provider unconditionally while the loaded state only renders them when limits actually exist. I'm counting the grid-rows occurrences in the test to confirm it expects two providers times two windows, then tracing through whether removing the provider color dot breaks the visual link between the legend and the chart's series colors, since meter bars only show provider color when limits exist — leaving providers without limits with no color cue at all. I want to check whether the chart has its own legend or tooltip that still ties colors to providers via the ProviderMark icon. I'm also considering the layout risk from UsageProviderChart switching to flex-1 with min-height and lg:h-full: on larger screens the chart stretches to match the left column, which could get very tall if there are many providers with meters, so I need to check if that's actually a problem or just intentional flexible sizing. Now let me look at ProviderMark's size-4 styling compared to before, and check the skeleton implementation for consistency.

7. browse_code — apps/web/src/components/usage/UsagePage.tsx

8. browse_code — apps/web/src/components/usage/UsagePage.tsx

💭 I'm comparing the skeleton's axis label placeholder against the real chart's bottom label row structure to make sure the spacing and height match up correctly. Now I want to check whether providers are color-coded via a legend or dots, and whether their brand colors come from PROVIDER_PRESENTATION or usageProviders.tsx.

9. browse_code — apps/web/src/components/usage/usageProviders.tsx

10. browse_code — apps/web/src/components/usage/UsageProviderChart.tsx

💭 The chart itself never had color swatches, so the provider dot in the summary column was really the only visual key tying line colors to providers—and it's been replaced by colored meter bars as an intentional design choice. Flagging its removal as a legend regression feels more like an aesthetic nitpick than a real functional issue, especially since the earlier skeleton concern was already addressed. Still, I want to check the usageProviders file to see whether the brand icon mark itself carries color that could compensate.

11. browse_code — */usageProviders.

12. browse_code — apps/web/src/components/usage/usageProviders.ts

💭 With two providers, distinct brand icons already distinguish them, so removing the dot isn't a real issue. I'm also checking that the box-shadow using color-mix with the contrast-foreground variable resolves correctly at computed time, which it does. Now I'm looking at how the meter fill's background color is being set. The mobile file falls outside scope since only apps/web is included. I'm scanning for other potential issues: the unlimited meter bar at full width with reduced opacity plus a glow looks fine, the tooltip trigger wrapping the whole row is fine since the popup has pointer-events disabled, and the aria-valuetext still being present when aria-valuenow is undefined for unlimited progress bars should be acceptable for screen readers. Now checking repo conventions for consistency.

13. browse_code — apps/web/src/components/ui/*

💭 Since there's no Progress primitive, using a local meter seems fine. I'm checking whether other progress bars in the app, like ServerUpdateProgress, follow a shared pattern with role="progressbar" and aria-valuenow for consistency, though that's more a style preference than a violation. The tooltip's hover-only accessibility seems consistent with existing repo precedent using non-focusable spans as tooltip triggers, so it's not really a finding. I'm also checking a minor issue where aria-valuetext says "No five-hour limit" regardless of window type, and looking at whether the progressbar's nested height classes could cause a layout bug given the parent span's display behavior. Since the parent span is a grid item, it should be blockified so the inner h-full div still works correctly, same as the skeleton version. I'm now weighing whether the very small text-[9px] size on the second row is a real inconsistency versus other repo text sizes like 10px or 11px, though that's a weak, mostly aesthetic concern rather than a concrete violation, so I want to verify if that size shows up elsewhere in the codebase before flagging it.

14. git_tools — text-[9px]

15. git_tools — role="progressbar"

💭 The sizing difference between h-1.5 and h-1 seems consistent with existing patterns in the repo, so that's not a real issue. I'm now digging into actual behavioral regressions, starting with how summaryProviders includes providers with subscription limits even when there's no usage, which could affect how totals are calculated in the row. I'm checking that the chart still relies on activeProviders correctly, then looking at whether the 60-second interval for nowMs causes unnecessary full-page re-renders even when no limits exist — a minor perf issue, but not really a UI consistency problem. I'm also considering a possible mismatch between the skeleton state and the loaded state: since providers without limits don't render meters once data loads, but skeletons might always render meters for both providers, there could be a visual jump when the real data arrives. Looking further, the layout spacing and grid stretching seem consistent, and the tooltip works fine without a TooltipProvider since Base UI only needs that for delay grouping. The test mocking tooltips as plain divs means it isn't validating the real primitive, but that's not a genuine bug. I do notice a small accessibility concern: the progressbar has both an aria-label and visible text like "5h" with a percentage, which could cause duplicated screen reader announcements. There's also a subtler issue where aria-valuenow is undefined while aria-valuetext is set, which needs checking against ARIA guidelines for progressbar roles. The bigger find is that the parent element uses overflow-hidden while the inner fill span has a glow box-shadow for the unlimited-window case — since the fill spans 100% of the parent, that glow effect gets clipped entirely and never actually renders. This looks like real dead styling introduced by the diff, worth flagging as a concrete visual bug rather than just a stylistic nitpick. This is a minor dead-style issue, not a true regression, so it probably doesn't warrant an outright failure. Since the check defaults to failure but demands "All clear" only when there are zero findings, I need to decide between neutral and failure given I do have one small finding to flag inline. Let me keep checking other parts of the layout before settling on a verdict—looking now at how the countdown text is positioned in the grid, and whether the progressbar span nested inside the tooltip trigger creates any accessibility conflicts. I'm also considering whether each meter's tooltip lacking a shared provider causes repeated hover delays, whether the unlimited case's undefined aria-valuenow is handled correctly, and whether a variable named window shadowing the global object inside the map callback actually causes any bugs—it doesn't seem to, since the destructured local is used consistently. I want to see if there's a more substantial issue in UsageLimitMeters before making a final call. I notice the grid layout classes and the wrapper spacing are duplicated verbatim between the live meters and the skeleton — that's the exact drift risk that caused the earlier finding. It'd be worth extracting shared constants for these repeated class strings to keep them in sync. I'll post two inline comments: one about the clipped box-shadow on the track from overflow-hidden, and one about the skeleton's duplicated meter geometry, suggesting shared class constants and referencing the prior drift issue. I'll include it since it's drift caused by this PR. As for the overall verdict, the customer's framework doesn't really offer a "neutral" option—it defaults to failure unless everything is clear—but given these are minor findings, I'm inclined toward treating this as neutral rather than an outright failure, even though that's not explicitly how the customer framed it. The skeleton/live duplication is a drift risk that already caused an issue in this PR, which supports going with failure. Still, failing over a clipped box-shadow and class duplication feels harsh, so I'm double-checking the diff for anything more substantial — comparing the loaded row's text offset against the skeleton's placeholder offset, and they match up fine. Continuing the comparison, the label row alignment, meter wrapper padding, meter column widths, label spans, and chart axis dimensions between the loaded state and skeleton all line up consistently. That's a pre-existing pattern discrepancy, so it's negligible. I've confirmed there's no shared Progress-like component elsewhere, so I'm deciding on a final verdict: I'll lean toward marking this as a genuine failure since the drift-risk finding is a real consistency issue, even though extracting a class constant could be seen as an aesthetic preference the check shouldn't fail on. Actually, re-reading the guidance, only clear consistency risks may fail the check, and the default-to-failure rule mainly exists to discourage lazy "all clear" reviews. So I'll settle on neutral to signal findings without blocking. Now I'm ready to post the review comments, targeting the inline style block around lines 551-553 in the head file, using line 552 for the boxShadow line with start_line 551. For the second comment, I'm looking at the duplicated grid class on line 727 of the skeleton file. I'm working out the best way to phrase a fix for comment 1 — the simplest approach is to drop the boxShadow lines entirely, but since a suggestion block needs to replace the exact commented range, I'm considering widening the range to cover the whole style object so I can offer a clean replacement without the boxShadow property, and checking the exact surrounding lines to get the range right. I'm deciding between an inline suggestion that deletes the boxShadow lines entirely versus a diff-style comment for clarity, and leaning toward the diff form since it unambiguously shows the removal without ambiguity about empty suggestion blocks.

16. modify_pr — Reviewed the web usage UI changes (UsagePage.tsx, UsageProviderChart.tsx, UsagePage.test.tsx) for shared-primitive use, Tailwind ownership, and layout/skeleton parity. The skeleton reshape from the previous round now matches the loaded provider rows (mark size, gap-6/gap-1.5/gap-0.5, second summary line, meter grid, min-h-60 chart), so that earlier finding is resolved. Two smaller items remain, both in apps/web/src/components/usage/UsagePage.tsx; neither blocks the feature.


Agent Credits: 240 credits