Repository navigation
UI Consistency: 1 issue found
apps/web/src/components/chat/MessagesTimeline.tsx — the new assistant "Model: …" label (max-w-[22rem] truncate) is a flex item without min-w-0, so its content-based minimum is clamped only by the 22rem max-width. In narrow chat columns (inline split view can leave the chat column under 352px; it is w-0 when the right panel is maximized) the label will not shrink, pushing the copy button and timestamp past the timeline root's overflow-x-clip boundary, and truncation never engages. Adding min-w-0 matches the existing truncation pattern in the same file (WorkingTimelineRow).
Inline comment with a suggested fix has been 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.
Scope reviewed: apps/web/src/components/chat/MessagesTimeline.tsx and apps/web/src/components/chat/MessagesTimeline.test.tsx (only files matching the check's include patterns). Server, contracts, client-runtime, and mobile changes were read for context only.
Checks performed:
- Shared primitives: the new indicator composes
Tooltip/TooltipTrigger/TooltipPopupfromapps/web/src/components/ui/tooltip.tsxvia therenderprop, consistent with the adjacent timestamp trigger; no raw control reconstructs a core primitive. - Interaction preservation: the hover/focus reveal (
opacity-0 … focus-within:opacity-100 group-hover/assistant:opacity-100) was correctly relocated to the nested wrapper so the copy button and timestamp keep their previous reveal behavior; the always-visible model label is the intended new behavior and does not change row height (the meta row previously occupied space while transparent). - Typography/theming:
text-xs tabular-numsremains on the meta row and is inherited by the new label;text-muted-foregroundkeeps the existing muted tone in both themes. - Test coverage: a focused render test asserts the label and its data attribute, which is proportionate for this change.
- Layout: verified chat-column width constraints (
ChatView.tsx,PreviewPanelShell.tsx,rightPanelLayout.ts) — no minimum width protects the chat column at 22rem, which is the basis for the reported finding.
🔍 Agent activity — 1 tool call
💭 Looking at the MessagesTimeline.tsx changes, the visibility behavior shifted—previously the entire row with the copy button and timestamp was hidden until hover, but now the model text stays visible while only the copy button and timestamp fade in on hover. The text styling appears to inherit from the parent container's text-xs class, though the specific styling on the model paragraph itself seems incomplete in what I'm seeing. I'm checking whether the truncate class and max-width constraint work together properly on a flex item—the max-width should cap the element at 22rem, which means it can shrink below its content width even without an explicit min-width-0, so the text truncation should function as intended. There's a potential layout issue in narrow containers like mobile or inline preview mode where the 22rem model text plus the copy button could overflow the row, and adding min-w-0 would help it shrink more aggressively, though the mobile version uses max-w-[70%] instead. The model indicator is now always visible rather than being hidden until hover, which appears to be an intentional change from the PR, and there's a question about how the
data-assistant-actual-modelattribute gets passed through the TooltipTrigger's render prop. On accessibility, the truncated model name is only revealed via tooltip on a non-focusable paragraph element, which means keyboard and touch users can't access the full model name—this mirrors the existing timestamp pattern but the timestamp isn't truncated so there's no information loss here, whereas the model text does lose information. I should check whether the Tooltip primitive in this codebase adds tabIndex to make it keyboard-accessible, and also whether the previous hover-reveal wrapper had focus-within styling that applied to the copy button as well. The layout remains stable since the meta row always renders when showAssistantMeta is true, just as it did before (previously invisible with opacity-0). I need to verify that the truncate class has min-w-0 set on its container and confirm the gap alignment works correctly when the model is absent. I'm noticing that line 1319 in the same file also usesmin-w-0 truncate, which confirms the pattern for flex truncation. Now let me check the tooltip.tsx file to understand how the trigger behaves. I'm working through the min-w-0 issue with the flex container—the parent has flex with gap-2, and the model paragraph has max-w-[22rem] with truncate but no min-w-0. The CSS spec shows that the automatic minimum size for flex items gets clamped by their max-width, which is why the text isn't truncating properly. In narrower chat panels (like split-view scenarios where the panel is less than 352px), the paragraph still tries to maintain its 22rem minimum width, forcing overflow instead of shrinking. Adding min-w-0 would allow it to shrink below the content size and truncate at the available width, which seems like a genuine layout preservation issue worth addressing. The hover reveal for the timestamp still works as before, and the model text inherits the appropriate styling from its parent. The data attribute on the paragraph is fine for test assertions, and the accessibility approach is consistent with the existing timestamp pattern—screen readers will pick up the full "Model: X" text even if it's visually truncated. The main trade-off here is that showing the model line permanently under every assistant message increases visual density compared to the previous fully hover-revealed meta row, but that's an intentional design choice. The empty flex wrapper for the copy button when it's hidden during streaming leaves a negligible 8px trailing gap—invisible whitespace that has no real visual impact. The row height stays the same since the meta row was already occupying space even when opacity-0, so scroll anchoring and virtualization measurements aren't affected. Themin-w-0pattern should handle overflow properly in narrow chat panels. I'm realizing the chat column can be narrower than 22rem, and without a minimum width constraint, the model text becomes the limiting factor in that flex row, which pushes the copy button and timestamp off to the side. Since the timeline root clips overflow, those interactive elements could end up hidden off-screen on narrow layouts—that's a real usability issue. Let me check the CSS Flexbox spec to see how min-width auto interacts with max-width constraints. The content-based minimum size gets clamped by the max-width property, so the minimum width resolves to whichever is smaller: the full text width or the 22rem limit. For a long model ID withtruncateapplied (which setswhitespace-nowrap), the min-content size is the entire string width, clamped to 352px. In a 340px column, that means the text alone takes up more space than available, causing overflow that gets clipped away—pushing the copy button and timestamp out of view. The fix is to addmin-w-0to allow the text to shrink below its content size. I'm flagging this as a concrete violation of the visual and layout preservation requirement. The model chip stays visible while the timestamp and copy button disappear, which breaks the expected layout. I'll post an inline comment with the exact suggestion for line 1134, using the proper indentation and diff line numbers. Now I'm weighing whether this failure is justified — the risk is real since flex items default tomin-width: auto, and very long model IDs like "anthropic/claude-sonnet-4-20250514-thinking-high" could overflow the 22rem cap. Though most IDs fit comfortably, the inconsistency with the existing pattern is a clear regression. I'm deciding between marking this as a failure or neutral — the instructions say the check defaults to failure and only outputs "All clear" when there are no findings, so since I've identified a concrete layout issue, I should report it as a failure in the JSON response.
1. modify_pr — UI consistency review found one layout issue in the new assistant model indicator. Everything else (primitive usage, tooltip composition, hover/focus reveal of the copy button and timestamp) is preserved.
Agent Credits: 149 credits