Skip to content

fix(chat): smooth worktree setup status - #8922

Merged
juliusmarminge merged 3 commits into
mainfrom
smooth-worktree-setup-logs
Aug 31, 2026
Merged

fix(chat): smooth worktree setup status#8922
juliusmarminge merged 3 commits into
mainfrom
smooth-worktree-setup-logs

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Aug 31, 2026

Copy link
Copy Markdown
Member

What changed

Creating a thread with a new worktree could make the timeline jump and leave a "Received 2 updates" group above the running turn.

Web setup now uses a fixed-height status line: shimmering "Setting up worktree…" changes to "Working for…" when the turn starts. The normal Thinking marker then appears below, until assistant content or live tool activity replaces it. Its space stays reserved during setup so the handoff does not shift the timeline. The draft stays mounted through setup and keeps its timeline position when navigation completes.

Routine setup notices are omitted from the web and mobile work logs. Setup errors stay visible. Mobile shows the pending label in its workspace controls. Both shimmer implementations respect reduced motion.

UI changes

The same completed thread on the base version and this branch:

Before After
Setup notices remain in history Routine setup notices are removed

Successful worktree setup recording: a real checkout, the shimmer-to-timer handoff with Thinking, and the completed response. The fixture briefly pauses checkout so the transition is visible.

Failed worktree setup recording: a Git checkout hook deliberately exits with an error. Setup feedback clears, the error remains, and the original prompt returns to an editable draft with Send available.

Ordinary turn before its first response: a current-checkout turn shows the working timer and Thinking immediately, then the response.

Failed checkout screenshot

Checkout error with the original prompt restored

Validation

  • Focused web and mobile tests cover setup error retention, draft promotion, timeline anchoring, and composer behavior. Two server startup-ordering tests passed.
  • The Thinking follow-up passed 49 timeline logic tests and 38 timeline component tests, including empty assistant placeholders, content/tool handoff, and stable-row updates.
  • Targeted lint and formatting passed. React Doctor found no new issues in the changed code.
  • Web, mobile, and client-runtime typechecks passed.
  • Real browser runs verified successful checkout, checkout failure, an ordinary turn before its first response, and history after reload. The status block kept the same position and height through setup, the first Thinking state, and navigation to the thread. The setup shimmer unmounts at handoff.
  • Mobile verification covered logic tests and typechecking; the recordings show the web client.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Medium Risk
Changes draft promotion timing and timeline row derivation, which affect first-send and worktree flows; behavior is covered by new tests but navigation edge cases are user-visible.

Overview
Improves worktree setup so chat stays visually stable: one fixed-height status line shimmers “Setting up worktree…” (web timeline and mobile new-task workspace controls), then hands off to “Working for…” when the turn starts. The composer footer no longer shows a separate “Preparing worktree…” label.

Draft → thread navigation waits until the server has something meaningful to show: the first turn has startedAt, or the session ends in error / stopped / interrupted. That keeps the draft mounted through checkout/setup instead of promoting too early.

Work logs on web and mobile drop routine setup-script.requested / setup-script.started noise via shared isWorktreeSetupActivity; error-toned setup failures still appear in the feed.

The active-turn working row no longer always shows a placeholder “Thinking” line—only when there’s no assistant text and no live tool activity—reducing extra rows at setup-to-turn transitions. Timeline anchoring uses CHAT_TIMELINE_ANCHOR_OFFSET (24px) so promotion preserves scroll position.

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

Note

Smooth worktree setup status across mobile and web chat UI

  • Delays draft-to-server thread promotion until the first turn starts or setup ends in an error/stop/interruption, so the draft stays mounted during worktree setup
  • Replaces workspace controls on mobile and working timeline rows on web with a shimmering 'Setting up worktree…' status during setup, hiding the elapsed timer and thinking indicator
  • Filters routine setup-script.requested and setup-script.started activities from derived work logs unless they are error-toned, via new isWorktreeSetupActivity helper in presentation.ts
  • Introduces ActivityShimmerOverlay and increases timeline anchor offset from 16 to 24 in timelineScrollAnchoring.ts
  • Risk: resolveDraftPromotionNavigationTarget signature changes from boolean to serverThread object; callers in ChatView.logic.ts and _chat.draft.$draftId.tsx are updated but out-of-tree consumers would break

Macroscope summarized 4b10ed5.

@coderabbitai

coderabbitai Bot commented Aug 31, 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 Plus

Run ID: 20769c12-fd52-4451-b0a4-c95043d4049e

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@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 Aug 31, 2026
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.3 KiB 13.3 KiB −29 B (−0.2%) 15.1 KiB
Codex Thread snapshot wire 6.9 KiB 6.9 KiB +1 B (+0.0%) 7.3 KiB
Codex Live turn WebSocket wire 6.4 KiB 6.4 KiB −30 B (−0.5%) 7.8 KiB
Codex Live turn WebSocket decoded 55.6 KiB 55.5 KiB −44 B (−0.1%) 66.4 KiB
Codex Live turn messages 10 9 −1 (−10.0%) 21
Claude Total thread wire 13.3 KiB 13.3 KiB +55 B (+0.4%) 15.1 KiB
Claude Thread snapshot wire 6.9 KiB 6.9 KiB −2 B (−0.0%) 7.3 KiB
Claude Live turn WebSocket wire 6.4 KiB 6.4 KiB +57 B (+0.9%) 7.8 KiB
Claude Live turn WebSocket decoded 56.4 KiB 56.4 KiB +88 B (+0.2%) 66.4 KiB
Claude Live turn messages 9 11 +2 (+22.2%) 21

Baseline: bba79cc · PR result: 4b10ed5 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 109.4 KiB
  • Claude decoded thread snapshot: 110.1 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@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 0e6f80e. Configure here.

Comment thread apps/web/src/components/ChatView.logic.ts
@macroscopeapp

macroscopeapp Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — The change improves worktree setup feedback, but it also changes draft promotion timing, shared activity filtering, and timeline rendering/scroll anchoring across web and mobile. Because these interconnected production paths have a broader behavioral surface than a small isolated UI fix, human review is warranted.

You can add or adjust custom eligibility rules. Learn more.

@macroscopeapp macroscopeapp 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.

Reviewed the web UI changes for shared-component/Tailwind ownership and visual behavior. Three findings, one of which is a concrete duplicated-status inconsistency introduced by this patch.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment thread apps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment thread apps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
@juliusmarminge
juliusmarminge merged commit ef84bc9 into main Aug 31, 2026
28 checks passed
@juliusmarminge
juliusmarminge deleted the smooth-worktree-setup-logs branch August 31, 2026 19:01
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 1, 2026
## What's Changed
* chore(deps): bump Electron to 43.4.1 by @StiensWout in pingdotgg/t3code#8626
* fix(chat): smooth worktree setup status by @juliusmarminge in pingdotgg/t3code#8922
* feat(mobile): add video playback with native iOS controls by @juliusmarminge in pingdotgg/t3code#8919


**Full Changelog**: pingdotgg/t3code@v0.0.38-nightly.20260831.1240...v0.0.38-nightly.20260831.1241

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.38-nightly.20260831.1241
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
The v2 equivalents of main's #8984 and #8922: a "Working for ..." header
anchors the active run, the trailing live tool row survives between
actions in past tense instead of vanishing, and a shimmering Thinking
row marks reasoning gaps. During workspace preparation the header shows
"Setting up worktree..." (driven by the local dispatch flag or the v2
run's preparing status, so remote viewers see it too), the composer
footer span is gone, and draft promotion waits until the run starts or
startup fails instead of navigating mid-preparation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 1, 2026
## What's Changed
* Add mobile composer attachment menu with video support by @juliusmarminge in pingdotgg/t3code#8843
* fix(web): restore unified activity logs and composer banners by @t3dotgg in pingdotgg/t3code#8734
* fix(web): address composer banner review follow-ups by @juliusmarminge in pingdotgg/t3code#8850
* fix(web): widen sync banners and simplify the working timer by @juliusmarminge in pingdotgg/t3code#8855
* fix(preview): improve browser recording quality by @maria-rcks in pingdotgg/t3code#8839
* fix(web): mark pull request links as external by @juliusmarminge in pingdotgg/t3code#8856
* fix(mobile): replace Callstack glass with Expo glass by @juliusmarminge in pingdotgg/t3code#8862
* fix(server): skip IDE detection in Claude probes by @yashranaway in pingdotgg/t3code#8634
* chore(macroscope): review diagnostic overrides by @t3-code[bot] in pingdotgg/t3code#8917
* fix(contracts): accept CLI event origins by @nateEc in pingdotgg/t3code#8905
* fix(web): hide invalid slash skill completions by @nateEc in pingdotgg/t3code#8904
* fix(mobile): defer draft navigation until submission completes by @juliusmarminge in pingdotgg/t3code#8914
* chore: disable CodeRabbit review status by @juliusmarminge in pingdotgg/t3code#8933
* Delete app.json by @juliusmarminge in pingdotgg/t3code#8934
* fix(web): show scrollbar for wide markdown tables by @UtkarshUsername in pingdotgg/t3code#8868
* fix(mobile): shimmer active tool rows by @juliusmarminge in pingdotgg/t3code#8932
* chore(deps): bump Electron to 43.4.1 by @StiensWout in pingdotgg/t3code#8626
* fix(chat): smooth worktree setup status by @juliusmarminge in pingdotgg/t3code#8922
* feat(mobile): add video playback with native iOS controls by @juliusmarminge in pingdotgg/t3code#8919
* fix(web): prevent chat metadata overlap by @MatthewFeroz in pingdotgg/t3code#8851
* fix(server): preserve usage cache outside walked roots by @Lucenx9 in pingdotgg/t3code#8540
* feat(mobile): add native image and PDF previews by @juliusmarminge in pingdotgg/t3code#8959
* fix(server): allow long thread IDs in HTTP routes by @nateEc in pingdotgg/t3code#8898
* fix(shared): preserve Windows shell PATH priority by @UtkarshUsername in pingdotgg/t3code#8748
* fix(web): make WSL settings searchable by @UtkarshUsername in pingdotgg/t3code#8881
* feat(web): add expand/collapse all control to the files surface by @UtkarshUsername in pingdotgg/t3code#8889
* feat(mobile): upload attachments while composing by @juliusmarminge in pingdotgg/t3code#8978
* fix(chat): keep agent activity visible between actions by @maria-rcks in pingdotgg/t3code#8984
* fix(server): isolate remote web session cookies by @Bil0000 in pingdotgg/t3code#8085
* feat(pull-requests): link GitHub references in markdown by @maria-rcks in pingdotgg/t3code#8812
* perf(server): reduce frequency of full tool call output being loaded into memory from db by @t3dotgg in pingdotgg/t3code#8988
* feat(web): add pull request list filters by @maria-rcks in pingdotgg/t3code#8809
* feat(web): search individual settings by detail by @maria-rcks in pingdotgg/t3code#8831
* feat(client): render viewed images in work logs by @maria-rcks in pingdotgg/t3code#8936
* fix(client): use package import for markdown image helpers by @juliusmarminge in pingdotgg/t3code#9010
* test: remove static presentation snapshots by @t3-code[bot] in pingdotgg/t3code#9008
* perf(server): bound snapshot activity payload memory by @t3dotgg in pingdotgg/t3code#9000
* perf(server): cut idle CPU use and stop provider event leaks by @t3dotgg in pingdotgg/t3code#8187
* perf(server): scan only appended transcript bytes for usage summaries by @StiensWout in pingdotgg/t3code#9024
* perf(server): cut chatty tool-update frames by 90% by @Adamulek123 in pingdotgg/t3code#8368
* fix(server): settle threads server-side by @t3dotgg in pingdotgg/t3code#8600
* fix(clients): dedupe skills in composer menus by @Adamulek123 in pingdotgg/t3code#8043
* fix(server): stop OpenCode child sessions by @t3dotgg in pingdotgg/t3code#9005
* perf(web): defer pull request line stats until visible by @Adamulek123 in pingdotgg/t3code#6471
* perf(server): skip full-message reads while streaming by @t3dotgg in pingdotgg/t3code#9032
* perf(client-runtime): halve server config bootstrap traffic by @Adamulek123 in pingdotgg/t3code#8367
* fix(web): align un-settle banner action by @StiensWout in pingdotgg/t3code#9033
* fix(web): block type-to-focus behind open dialogs by @Lucenx9 in pingdotgg/t3code#8139
* feat(shortcuts): copy active thread reference by @maria-rcks in pingdotgg/t3code#8994
* fix(mobile): keep thread scroll bounds current after animations by @juliusmarminge in pingdotgg/t3code#9013
* fix(server): cache project favicon resolution by @willsheldon in pingdotgg/t3code#9080
* feat(claude): add Claude Fable 5.1 model by @q1 in pingdotgg/t3code#9078
* fix(preview): restore recording and macOS rendering after Electron 43 by @StiensWout in pingdotgg/t3code#9001
* feat(desktop): add configurable quit shortcut confirmation by @juliusmarminge in pingdotgg/t3code#9076
* feat(web): open project settings from thread menus by @SunkenInTime in pingdotgg/t3code#8925
* fix(chat): reuse one row for live activity by @maria-rcks in pingdotgg/t3code#9062
* feat(models): discover Claude models from remote manifest by @juliusmarminge in pingdotgg/t3code#9084
* Revert "fix(chat): reuse one row for live activity" by @maria-rcks in pingdotgg/t3code#9096
* fix(web): sync sidebar PR state from open panel by @t3-code[bot] in pingdotgg/t3code#9092
* fix(web): changing projects no longer creates a draft by @extoci in pingdotgg/t3code#9097
* fix(web): keep theme placeholder text dimmer than entered text by @flamboh in pingdotgg/t3code#9104
* fix(web): keep the selected environment when changing projects by @t3dotgg in pingdotgg/t3code#9102

## New Contributors
* @willsheldon made their first contribution in pingdotgg/t3code#9080
* @q1 made their first contribution in pingdotgg/t3code#9078

**Full Changelog**: pingdotgg/t3code@v0.0.37...v0.0.38

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.38
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
The v2 equivalents of main's #8984 and #8922: a "Working for ..." header
anchors the active run, the trailing live tool row survives between
actions in past tense instead of vanishing, and a shimmering Thinking
row marks reasoning gaps. During workspace preparation the header shows
"Setting up worktree..." (driven by the local dispatch flag or the v2
run's preparing status, so remote viewers see it too), the composer
footer span is gone, and draft promotion waits until the run starts or
startup fails instead of navigating mid-preparation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
NoahHendrickson added a commit to NoahHendrickson/t3code that referenced this pull request Sep 2, 2026
The merge re-exposed several fork seams around upstream's banner dock and
working row:

- the prompt frame regained upstream's attached-banner glass (backdrop
  filter, drop shadow, ::after ring) for every banner except Questions;
  shed it unconditionally since the surface owns the fill and hairline
- the Questions drawer kept ComposerBanner.Root's 4px inset on three
  sides; clear all padding, not only the bottom
- the stash tab squeezed the full-width Questions card; the dock stacks
  and the tab rides above the card's right shoulder instead
- "Preparing worktree..." rendered twice: upstream pingdotgg#8922 moved it into
  the timeline working row, so drop the composer control-row copy
- the working-row rain sat baseline-aligned and gapless against the
  timer text after upstream's row rewrite; centre it with an 8px gap
- the shell kept the mode/model row painted under the mobile
  pending-answer cluster, which upstream hides
- BranchToolbar's no-thread branch reuses the liveness strip fallback
  instead of re-rendering it inline with a dead measure ref
- drop the unused PencilRulerIcon import and a redundant guard clause

Guards and manifest intents updated to pin each of these.

Claude Fable 5.1 via Claude Code.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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