Skip to content

fix(web): preserve pull request header semantics

MacroscopeApp / Macroscope - UI Consistency failed Aug 30, 2026 in 2m 46s

UI Consistency: 1 issue found

  • apps/web/src/routes/_chat.pull-requests.tsx:1876 — the filters breadcrumb crumb was changed to shrink-0, so with the title crumb now sr-only while the search is expanded nothing in the overflow-hidden nav can shrink; the truncate added to CompactFilterMenu never engages and the trailing filter trigger is hard-clipped and unreachable by pointer/keyboard. Suggested fix: use shrink so the deficit truncates the menu labels instead.

Previously flagged issues that are unchanged on this head (the checks-popover hidden @xs/pr-row-meta:inline-flex leaving a trailing · separator in PullRequestRow.tsx) were not re-posted.

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.

Analysis focused on the newest commit c2478fb ("preserve pull request header semantics"), which replaced the unmounted title crumb with an sr-only crumb — resolving the earlier heading/aria-current regression — and dropped the min-w-[8.125rem] floor on the condensed control group, resolving that earlier finding as well.

The remaining problem is the accompanying change from shrink to shrink-0 on the filters crumb. WorkspaceBreadcrumbItem already applies shrink-0 to non-current items, and sr-only positions the title crumb absolutely, so in the expanded-search state the nav has no shrinkable content and its new overflow-hidden clips the trailing CompactFilterMenu. The trigger truncation added earlier in this PR (min-w-0 + inner truncate span) only takes effect if the crumb itself is allowed to shrink.


🔍 Agent activity — 12 tool calls

💭 I'm checking the current state of the code at head, since prior runs flagged issues. Looking at the diff, the PullRequestRow component now moves matchedElsewhere to the front of the meta line with a tooltip and container-based responsive hiding, while the checks popover gets similar container query styling for showing/hiding labels at small widths. That specific hidden-label styling was already flagged in a prior comment on an earlier commit, and since the code hasn't changed since then, I shouldn't repeat it. Now I want to pull up PullRequestRow.tsx and PullRequestMetaLine directly at head to look for anything new.

1. browse_code — apps/web/src/components/pullRequest/PullRequestRow.tsx

2. git_tools — 7d35a9b..c2478fb

💭 That commit 7d35a9b might be from a force-pushed branch that's no longer reachable, so I want to check the branch's commit history. I also want to look at PullRequestMetaLine to understand how the separator contract works there.

3. git_tools — PullRequestMetaLine

4. github_api_read_only — repos/{owner}/{repo}/pulls/{pull_number}/commits?per_page=100

💭 The latest commit c2478fb addresses the earlier feedback about the title crumb using sr-only instead of unmounting, so I want to check its diff to see the actual change.

5. git_tools — c2478fb

💭 The latest commit made the title crumb sr-only when search is expanded and changed the filters crumb from shrink to shrink-0. Now I'm considering whether making the filters crumb shrink-0 combined with the container's overflow-hidden causes issues, since the crumb itself won't shrink even though the CompactFilterMenu triggers inside now have min-w-0 and truncating labels. But since the crumb itself is shrink-0, its contents never get the chance to truncate — instead the overflow-hidden breadcrumb container just clips the filter menu outright. That echoes the earlier finding from a prior commit, though now reversed: back then, making the crumb shrinkable caused hard clipping because its children were shrink-0, and now shrink-0 on the crumb blocks the newly-added truncate behavior inside. I want to trace through the full header layout to understand which end actually gets clipped, so I'm going to look at the broader section of the route file covering the header row.

6. browse_code — apps/web/src/routes/_chat.pull-requests.tsx

7. browse_code — apps/web/src/routes/_chat.pull-requests.tsx

💭 I'm looking at how the new commit applies sr-only conditionally to the breadcrumb item wrapping the heading, and I want to verify whether WorkspaceBreadcrumbItem correctly merges that className rather than overriding its own styles. I also need to check whether sr-only elements are positioned absolutely, which could affect layout. The aria-current="page" attribute is preserved on the crumb since it's marked current, so screen readers still get proper context even with sr-only applied to the title. Now I want to trace the flex layout: the spacer div with min-w-0 flex-1 will shrink to zero quickly under space pressure since it uses flex-basis: 0%, so the real question is whether the breadcrumb has shrink-0 set and how that interacts with the shrinking right-side group when search expands — I need to check the WorkspaceBreadcrumb component definition to confirm.

8. git_tools — WorkspaceBreadcrumb|WorkspacePageHeader

9. browse_code — apps/web/src/components/WorkspaceBreadcrumb.tsx

10. browse_code — apps/web/src/components/WorkspacePageHeader.tsx

💭 I'm checking whether Tailwind's sr-only utility, which visually hides an element while keeping it accessible, might conflict with the flex class when merged via tailwind-merge's conflict-resolution groups. They belong to different class groups, so both survive—meaning the element stays flex-display but is absolutely positioned off-screen at 1px, which removes it from normal flow. I'm now considering that positioning is relative to the nearest positioned ancestor, which in this route is the header with relative applied. The h1 inside sr-only is still fine for accessibility since it remains in the a11y tree, addressing the earlier concern. The shrink-0 on the filters crumb turns out to be redundant since it's already the default, so it's a no-op once merged. The real question is how flex-shrink distributes at narrow widths: the breadcrumb nav can shrink but its filters crumb can't, so with overflow-hidden on the nav, that content will get clipped rather than shrinking further—and I need to figure out which side gets clipped in LTR layout. I'm tracing which end gets clipped when the nav content overflows, since that's the trailing host/involvement menu getting cut off — this matches the exact issue flagged in an earlier review about a clipped trigger being unreachable by pointer and tab focus scrolling into a hidden box. I'm trying to map out how this was addressed across the commit history, but some of the referenced commits aren't in the current list I'm looking at. I'm noticing all four early commits share the same committer timestamp, which points to a rebase having rewritten their SHAs — so the earlier review comments referencing those missing hashes likely correspond to these same commits under their pre-rebase identities. Now with shrink-0 applied, the crumb won't shrink anymore, so it stays sized to its content instead of engaging the truncate class inside CompactFilterMenu — instead the nav itself just clips the overflowing crumb since it's set to overflow-hidden. I'm trying to figure out whether this is actually a regression compared to the base behavior or just a different way of handling the same overflow problem. Comparing against the merge-base version, the crumb previously defaulted to shrink-0 too, but the nav lacked overflow-hidden, and the title crumb was the one that truncated via its h1 element. At head with search expanded, the title becomes visually hidden while the filters crumb stays shrink-0, so it's the nav's shrinking behavior that determines whether the filter menu gets clipped and becomes unreachable — this seems like the same issue flagged before. I'm now checking whether the nav actually shrinks below the crumb's natural width given how the spacer and other flex items compete for space. Since the spacer has a zero flex-basis, it absorbs none of the shrinking distribution and never shrinks further, so any overflow deficit gets split between the nav and the right-hand group based on their base sizes — meaning in a narrow condensed layout with search expanded, the nav will indeed shrink and its filter menus can get clipped, while the right group shrinks too. Now I'm checking whether the shrink-0 on the crumb is a regression introduced by this commit. In the earlier 4ff1c86 version, the crumb was allowed to shrink and truncate via min-w-0 with a truncating span, so it never clipped — it just proportionally shrank and ellipsized. With shrink-0 added now, that truncation behavior is disabled, bringing back the clipping bug that was previously fixed. This looks like a genuine regression of the earlier fix, distinct from the other flagged lines, and worth calling out specifically at this new line. I'm tracing through whether shrink-0 on the crumb actually prevents truncation from ever engaging — since the li itself won't shrink below its content width, the nav's overflow-hidden would just clip the whole crumb rather than letting inner text truncate gracefully. I need to check I'm not contradicting my earlier comment on 0e975ec, which argued against making the crumb shrinkable — but that concern doesn't apply now since CompactFilterMenu was updated in this same PR to support truncation. Still, I should verify the clipping actually happens in practice, considering how narrow the column gets when the right panel is open and what else occupies the condensed topbar. The sr-only h1 toggling isn't an issue either way. I'm checking PullRequestRow's checks popover visibility pattern, which was already flagged before and remains unchanged, and confirming the matchedElsewhere segment doesn't cause a stray trailing separator since it's conditionally rendered as null rather than hidden. But the checks popover, being the last segment, could still leave a dangling "·" when hidden below the breakpoint — that's the same already-flagged issue. Since the latest commit only touched the route, not PullRequestRow, I don't need to re-flag things that haven't changed. I'm also verifying the truncate class on the review decision span is harmless within its flex container. I checked the sr-only/tailwind-merge interaction and confirmed no conflict — separate class groups mean both classes apply as intended, so that's not a bug either.

11. git_tools — export function PullRequestActorLabel

💭 I'm zeroing in on line 1876's shrink-0 on the filters crumb, checking whether it actually causes clipping. In the non-expanded state, the title crumb has no shrink-0 and truncates first while the filters crumb stays fixed—this matches the intended base design. But once searchExpanded kicks in, the title crumb becomes sr-only, leaving nothing shrinkable in the nav, so the nav clips the filters instead. Before this change, the crumb was shrink, which meant filter labels would truncate ("Open ▾" → "Op… ▾") rather than becoming unreachable—annoying but still clickable and better than the current clipped-off state. So my recommendation is to restore shrink from the earlier commit as a minimal, single-line fix on line 1876, and I'm now checking whether there are other regressions in this diff worth flagging. I'm checking a few edge cases: whether sr-only's clip and absolute positioning conflict with min-w-0 (they don't, different properties), whether an absolutely-positioned li inside a flex ol breaks list semantics (it doesn't), and whether that 1px sr-only element could interfere with clicks or drag regions near the header (unlikely enough to skip flagging). I also want to confirm whether ExpandableSearch's width classes were already addressed in review. I'm also noting that shrink on a couple of flex-item divs is redundant since shrink defaults to 1, so that's harmless rather than an actual issue. That leaves just one real finding, so I'm preparing to leave an inline comment at line 1876, where the WorkspaceBreadcrumbItem with shrink-0 gap-1.5 classes appears on the right side of the diff, confirming that line is part of the head file's changes so the comment will attach correctly. Since the primitive already handles min-w-0 on the li, shrink alone is sufficient. This is a real finding, so the check should report a failure state rather than "all clear" — I'll write up the review comment now.

12. modify_pr — One finding on the latest commit: the filters crumb was changed back to shrink-0, which disables the truncation this PR added to CompactFilterMenu and lets the new overflow-hidden nav hard-clip a filter trigger while the topbar search is expanded.


Agent Credits: 95 credits

Token usage: 18 uncached input · 376,354 cache-read input · 70,819 cache-write input · 10,881 output
Agent Credits may also include non-token charges from external tools such as web research.