Skip to content

Move mobile working timer into the thread timeline#4285

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-composer-animation-timeline-timer
Jul 22, 2026
Merged

Move mobile working timer into the thread timeline#4285
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-composer-animation-timeline-timer

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Jul 22, 2026

Copy link
Copy Markdown
Member

Summary

  • Move the mobile working-duration indicator from the composer overlay into the thread timeline.
  • Add timeline rendering and elapsed-time updates for active work states.
  • Animate the composer connection status pill and simplify route/sidebar handling.
  • Add coverage for active work timeline presentation.

Testing

  • Added focused threadActivity coverage for active work rows.
  • Not run: lint and broader test suites.

Note

Low Risk
Presentation-only mobile thread UI and feed derivation; scroll inset changes are a deliberate simplification with no auth or data-path impact.

Overview
Moves the “Working for …” indicator from the floating composer stack into the thread message list, so active agent work reads as part of the conversation timeline instead of sitting above the input.

deriveThreadFeedPresentation now accepts activeWorkStartedAt and appends a synthetic working row (working-indicator-row) at the end of the presented feed. ThreadFeed renders that row with a per-second elapsed label via WorkingTimelineRow. The empty-thread placeholder is suppressed when work is active so users still see the timer on an otherwise empty thread.

Thread detail / composer chrome: WorkingDurationPill and the extra overlay height reserved for it are removed; keyboard/list bottom inset math no longer includes a working-indicator slot. Pending approval/user-input cards stay in the composer overlay but without the layout animation wrapper that surrounded the old working pill.

Composer connection pill: The reconnect/sync status pill is repositioned above the composer (absolute + bottom-full) and gets FadeInDown / FadeOutDown enter/exit animations.

Tests cover appending the active-work row and stripping it when re-derived without activeWorkStartedAt.

Reviewed by Cursor Bugbot for commit 864aeef. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Move the working timer from the composer overlay into the thread timeline

  • Removes the WorkingDurationPill overlay above the composer in ThreadDetailScreen and instead passes activeWorkStartedAt down to ThreadFeed.
  • Adds a new WorkingTimelineRow component that renders a live-updating "Working for " row at the bottom of the feed, refreshing every second via setInterval.
  • Extends threadActivity.ts with a 'working' entry type and updates deriveThreadFeedPresentation to append or remove it based on activeWorkStartedAt.
  • The connection status pill in ThreadComposer is changed to an absolutely positioned overlay with FadeInDown/FadeOutDown animations, freeing up vertical layout space.
  • Behavioral Change: the list bottom inset is reduced since it no longer reserves space for the working indicator overlay, and the empty-state placeholder is suppressed while work is active.
📊 Macroscope summarized 864aeef. 4 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

- Render active work duration as a timeline row
- Animate the composer connection status above the composer
- Add coverage for active work feed presentation
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
return (
<View className="items-center pb-2">
<Animated.View
className="absolute inset-x-0 bottom-full items-center pb-2"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium threads/ThreadComposer.tsx:242

ComposerConnectionStatusPill is now absolutely positioned at bottom-full, the same anchor used by ComposerCommandPopover (which also has z-10). When a command popover is open while a reconnect/loading status exists, the popover renders on top of the status pill, obscuring its message and reconnect button. The previous in-flow layout reserved vertical space so the two elements never shared the same slot. Consider offsetting the status pill further (e.g. accounting for the popover height) or repositioning it so it doesn't collide with the popover.

🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/mobile/src/features/threads/ThreadComposer.tsx around line 242:

`ComposerConnectionStatusPill` is now absolutely positioned at `bottom-full`, the same anchor used by `ComposerCommandPopover` (which also has `z-10`). When a command popover is open while a reconnect/loading status exists, the popover renders on top of the status pill, obscuring its message and reconnect button. The previous in-flow layout reserved vertical space so the two elements never shared the same slot. Consider offsetting the status pill further (e.g. accounting for the popover height) or repositioning it so it doesn't collide with the popover.

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 50a8c101-40dd-4f27-b3dc-fb4ee05f690a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/fix-composer-animation-timeline-timer

Comment @coderabbitai help to get the list of available commands.

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is ON, but a cloud agent failed to start.

Reviewed by Cursor Bugbot for commit 864aeef. Configure here.

className="absolute inset-x-0 bottom-full items-center pb-2"
entering={FadeInDown.duration(180)}
exiting={FadeOutDown.duration(140)}
pointerEvents="box-none"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Status pill overlays approval cards

Medium Severity

The ComposerConnectionStatusPill is now absolutely positioned (bottom-full), which removes it from the layout flow. This means it no longer reserves space, causing it to overlap with the feed end, new working rows, and pending approval/user-input cards. This overlap can also lead to it stealing presses from underlying elements.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 864aeef. Configure here.

@macroscopeapp

macroscopeapp Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR relocates the working timer from above the composer to the thread timeline. Two unresolved review comments identify potential UI overlap issues with the connection status pill's new absolute positioning, which could obscure other elements or interfere with touch events.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit 7e2bb47 into main Jul 22, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-composer-animation-timeline-timer branch July 22, 2026 15:36
UNN-Devotek pushed a commit to unn-corp/t3code that referenced this pull request Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant