Skip to content

fix(web): polish timeline work history

MacroscopeApp / Macroscope - UI Consistency failed Aug 14, 2026 in 1m 41s

UI Consistency: 1 new issue found

Findings on the newest commit (786ff45)

  • apps/web/src/components/chat/MessagesTimeline.tsx (line 1459) — the new live tool-call row wraps LiveActivityRow in a <button> with aria-label="Expand current tool calls". The aria-label overrides the row's visible text, so the activity label (e.g. "Running vitest") is no longer part of the accessible name; previously it was plain announced text. The sibling WorkGroupToggleTimelineRow in the same file keeps its summary as the accessible name and relies on aria-expanded alone. Inline comment posted with a suggested fix.

Previously reported, still open (not re-posted)

  • apps/web/src/components/chat/ChangedFilesTree.tsx — @container/changed-files dropped and Open diff label reverted to the sm: viewport breakpoint.
  • apps/web/src/components/ThreadTerminalDrawer.tsx — TERMINAL_SIDEBAR_MIN_WIDTH (and the 144px default) is narrower than the intrinsic width of the compact toolbar now hosted in the sidebar header.
  • apps/web/src/components/chat/MessagesTimeline.tsx — PlainWorkEntryRow keeps role="button"/keyboard toggling but lost both its chevron and hover:bg-accent/20 affordance.
  • apps/web/src/components/WorkspacePageContainer.tsx — deleted tests for the new shared header/segmented-tab/panel-control primitives.

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

Diff between merge base 9885a84 and head 786ff45, focused on the incremental commit 786ff45 ("fix(web): polish timeline work history") since the previous run at 2a7d0e7. Files changed in that commit and in scope for this check:

  • apps/web/src/components/chat/MessagesTimeline.tsx
  • apps/web/src/components/chat/MessagesTimeline.logic.ts and its tests
  • apps/web/src/session-logic.ts (toolCallId field) and its tests

Notes on items examined and not flagged

  • TurnFoldTimelineRow now rotates a single ChevronRightIcon by -90deg when expanded rather than swapping to ChevronDownIcon. Because the fold anchor moved to the entry following the hidden range, expanded content renders above the disclosure, so an upward-pointing chevron is consistent with the new placement.
  • The live row's shimmer overlay (live-activity-focus) is aria-hidden and its duplicated content is not exposed; the mask/animation utilities correctly live in index.css as reusable, behaviorally complex CSS.
  • work-live row identity now keys off toolCallId, keeping expandedWorkGroupIds stable while entries append; covered by the new logic tests.

🔍 Agent activity — 1 tool call

💭 I need to check what's changed in the codebase since the previous commits I reviewed, so I'm comparing the diff between the earlier versions and the current head to see if my prior findings still hold up. I'm looking at the commit history to understand what changed. The head commit is 786ff45, which comes right after 2a7d0e7. I need to examine what 786ff45 introduced, since prior reviews flagged issues in 2a7d0e7 (the WorkspacePageContainer test deletion) and an earlier commit d1ddd16 (the ChangedFilesTree container-query regression that's still showing up in the current diff). Since d1ddd16 was force-pushed out of the history, I shouldn't repeat those findings unless the code changed. The Terminal sidebar min-width issue and MessagesTimeline hover styling removal are still present, so I'll skip those too. Let me check the actual diff between 2a7d0e7 and 786ff45 to see what's new. Looking at the updated LiveWorkEntryTimelineRow component, I see it's now a button element wrapping LiveActivityRow with an expandable chevron that rotates on interaction. I need to check for accessibility and HTML validity issues since nesting interactive content inside a button could be problematic. The main concern is that the button intentionally has no hover affordance—the test explicitly asserts this isn't present. That's a deliberate choice by the author, though it's worth noting that PlainWorkEntryRow also had its hover state removed in a prior commit. The live work row itself has the animated shimmer overlay inside the button, with LiveActivityRow using w-fit max-w-full while the button spans w-full with left-aligned text. Let me verify whether the earlier feedback about PlainWorkEntryRow's missing hover was addressed or if that's still an outstanding issue. Looking at what's new in this commit, the live work row button introduces an accessibility concern: the aria-label overrides the visible content label, so screen readers would announce "Expand current tool calls" instead of the actual activity text like "Running vitest." That's a genuine a11y regression—the visible label gets lost because aria-label replaces the accessible name. A better approach would be to either use title without aria-label so the accessible name matches the content, or include the activity text in the aria-label itself. The overlay div is properly marked aria-hidden, which is correct, but the label semantics issue is a concrete violation within the scope of these changes. I'm also noticing an inconsistency: the sibling WorkGroupToggleTimelineRow button uses aria-expanded without an aria-label, so it announces the summary text properly and has hover feedback. The live row lacks that hover state and suppresses its content with the aria-label, making it inconsistent with the existing pattern. The strongest issue is the aria-label itself — it replaces the tool name announcement entirely, so screen reader users only hear "Expand current tool calls" and miss what's actually running. I should fix this by including the activity label in the accessible name. The button's width and overflow behavior look fine — the shimmer animation extends beyond the parent but gets clipped properly. The author intentionally didn't add hover states to indicate expandability, so I'll leave that as is. For the chevron rotation, it's now a ChevronRight that rotates -90 degrees when expanded, pointing upward instead of the previous ChevronDown behavior. So the up-pointing chevron is actually correct given how the expanded content renders above the fold row. Let me check if this rotation pattern aligns with other disclosure components in the codebase, then I should look at the actual MessagesTimeline source to verify the line numbers for any comments I'm making. I'm noticing an accessibility issue where the aria-label is overriding the visible label, so screen readers only announce "Expand current tool calls, collapsed" and miss the live activity indicator like "Running vitest". The sibling component handles this better by not using an aria-label. This feels like a real inconsistency worth flagging with an inline comment. I'm also wondering whether the toggle handler works correctly for live rows when the expanded state is keyed by group ID. There's a dead group/live-work class defined but unused — no consumers with group-hover/live-work: — though it's minor and I'll keep the focus on the aria-label issue. I should verify how other expand toggles in the codebase handle this pattern, like checking whether TurnFoldTimelineRow uses aria-label or relies on visible content instead. Nesting a <div> inside a <button> is technically invalid HTML and could break in some browsers due to interactive content nesting rules, though React handles it fine in practice. Since LiveActivityRow now renders inside a button but also renders standalone for ThinkingActivityRow, I could mention this briefly, but I'll keep the comment focused on just the aria-label finding to avoid noise. I'll mark this as a failure since the accessibility issue warrants it, and the comment should go on line 1459 in the diff. The LiveWorkEntryTimelineRow function is new in this PR, so line 1459 should be commentable on the right side of the diff where the button is added.

1. modify_pr — One accessibility finding on the new live tool-call row. Earlier findings from previous runs on this PR (changed-files container query, terminal sidebar minimum width, plain tool row hover affordance, deleted primitive tests) still stand and are not repeated here.


Agent Credits: 159 credits