Skip to content

fix(clients): a starting provider shows the terminal icon, not the thinking brain - #30307

Open
ishaanko wants to merge 5 commits into
pingdotgg:mainfrom
ishaanko:fix/claude-starting-state
Open

ishaanko wants to merge 5 commits into
pingdotgg:mainfrom
ishaanko:fix/claude-starting-state

Conversation

@ishaanko

@ishaanko ishaanko commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Problem

#35008 landed the "Starting Claude" label from this PR, but kept the brain icon. While a provider is still launching, the live row now reads "Starting Claude" next to the icon that means "Thinking". The icon says the model is reasoning when the label just said nothing is generating yet.

Change

The live row uses the terminal icon while providerStartingLabel is set, on web (ThinkingTimelineRow) and mobile (ThreadThinkingRow). It goes back to the brain as soon as the provider starts its turn and the label switches to "Thinking". Two lines, no new state; the label and its plumbing are already on main.

Scope and approval

Follow-up to #35008 for #14244, which Julius triaged as a real bug. #35008 is this PR's original change minus this icon swap, so this is the remaining piece.

Verification

Before (main, from #35008's capture) After
Before: Starting Claude with the brain icon After: Starting Claude with the terminal icon

The after image is from this branch's earlier live run (real Claude behind a wrapper that delays its start by 60s). That run rendered these same two lines, and only the icon differs from main. Web and mobile typecheck clean after merging main.

Implementation: Claude Opus 5.5 in Claude Code, running in T3 Code.

The server marks a run running before the provider opens its session. When
the provider is slow to start (a loaded host, a long SessionStart hook, or
Claude's MCP registration wait plus retry), the chat said "Thinking" for
minutes while nothing was running. The run summary now carries a starting
label until the provider reports a turn, and web and mobile show it in
place of "Thinking".
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-03T18:53:41.513878Z c2948a9 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added vouch:unvouched Author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Nov 3, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at c2948a9

Macroscope's review found this PR approvable — Web and mobile show “Starting” with the provider name until a provider turn appears, then retain the existing activity presentation. This is a display-only change with no change to provider execution or stored data.

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

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • Resume reviews
  • Trigger review

No actionable comments were generated in the recent review.

Walkthrough

Mobile and web thinking rows now select the terminal icon when providerStartingLabel is present. They select the brain icon otherwise.

Changes: Provider startup label

Layer / File(s) Summary
Select the thinking-row icon
apps/mobile/src/features/threads/thread-work-log.tsx, apps/web/src/components/chat/TimelineWorkGroupRows.tsx
Both thinking rows select the terminal icon when providerStartingLabel is present and the brain icon otherwise.

Estimated code review effort: 1 (Trivial) | ~4 minutes

Change: Bug fix

Suggested reviewers: juliusmarminge

Merge Risk: Minimal · up to e325f

This changes only which icon the live row shows while a provider is starting: a terminal icon instead of the thinking brain. It carries little merge risk.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title names the main change: the live row shows a terminal icon while a provider is starting, instead of the thinking brain icon. It follows the conventional commit form and matches the two-file i…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description follows the repository template and covers the problem, change, scope, and verification. It explains that #35008 added the "Starting Claude" label but kept the brain icon, so the live …
Full details: Title check

Explanation

The title names the main change: the live row shows a terminal icon while a provider is starting, instead of the thinking brain icon. It follows the conventional commit form and matches the two-file icon swap in the summary. The title says "clients" as a scope, which is broad but accurate because the change touches web and mobile.

Full details: Description check

Explanation

The description follows the repository template and covers the problem, change, scope, and verification. It explains that #35008 added the "Starting Claude" label but kept the brain icon, so the live row shows a thinking icon while the provider is still launching. The change swaps the icon to terminal while providerStartingLabel is set, on web (ThinkingTimelineRow) and mobile (ThreadThinkingRow), and returns to brain when the label switches to "Thinking". Scope links the follow-up to #35008 and issue #14244, which a maintainer triaged as a real bug. Verification includes a before/after screenshot pair, a live run description with a delayed-start wrapper, and typecheck results. Minor gaps: the 'after' image comes from an earlier run rather than the current head, the Claude startup delay was exercised through a wrapper, and the description does not name a concrete test command for the changed components. The required sections are present and substantive.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between b97da48 and e325fec.

Files selected for processing: 1

  • apps/web/src/components/chat/TimelineWorkGroupRows.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.

@maria-rcks

maria-rcks commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol and claude-opus-5-5 on behalf of Maria

Verified in a real dev environment

verified the web path on Linux with repo Playwright and /usr/bin/google-chrome, using real Codex gpt-6.1-sol through the local proxy. created the project and threads through the app against a real git checkout. no mocks, fixtures, demo provider, or artificial startup delay.

  • reproduced on github/main (9def583f8e315f644708501ebcf1f3d4bb320444): the row said "Thinking" before any provider turn existed.
  • checked the exact PR head c2948a9f8f5bae047f8f7a38c11ca693e0dff066: the same prompt showed "Starting Codex" with the terminal icon, then "Thinking" after provider-turn registration, then real terminal activity and the completed reply. the live row cleared.
  • a second turn ran in the same thread. "Stop generation" interrupted the real provider turn, cleared the live row, and showed "Stopped by user". a subsequent message completed successfully.
  • Blacksmith ran vp test run packages/client-runtime/src/state/threadExecution.test.ts apps/mobile/src/lib/threadActivity.test.ts: 72 passed. the head's 31 CI checks were successful. no code changes needed.

selected persisted server events (UTC), read from the isolated dev databases:

main
20:11:12.900 run.updated           running
20:11:13.235 screenshot           Thinking
20:11:13.595 provider-turn.updated running

PR
20:18:34.242 run.updated           running
20:18:35.001 client observation    Starting Codex
20:18:35.118 provider-turn.updated running
20:18:35.661 client observation    Thinking
20:18:56.604 run.updated           completed
20:21:07.765 provider-turn.updated interrupted
20:21:07.954 run.updated           interrupted
20:22:09.940 provider-turn.updated completed (follow-up)
20:22:09.961 run.updated           completed (follow-up)

matching prompt and chat crop, before on main:

main: Thinking before the provider turn starts

after on the PR:

PR: Starting Codex before the provider turn starts

24-second recording (GIF for GitHub compatibility) of submission, startup label, thinking, real command execution, and reply. inspected the recording and verified uploaded playback and seeking in T3's browser:

real Codex startup transition and completed reply

Not verified

Claude's actual startup/MCP-registration delay: claude auth status reports loggedIn: false, so this verifies the shared label behavior through Codex, not a real Claude session. native iOS/Android and Electron desktop were not exercised on this Linux VM. other provider adapters, remote/relay connections, and upstream model queues were not exercised; the label tracks provider-turn registration, not every upstream queue or network delay.

Merged main (6769598ae0)

merged main with a merge commit. main added the zen live answer preview, which reuses the same Thinking-row label. resolved it so the starting label wins before the provider turn, the zen preview keeps the brain icon, and mobile carries the starting label as its own providerStartingLabel field on the thinking entry. vp run check:changed passed on Blacksmith (format, lint, knip, typecheck, 261 tests, react compiler). the live UI was not rechecked after the merge.

# Conflicts:
#	apps/mobile/src/features/threads/thread-work-log.tsx
#	apps/mobile/src/lib/threadActivity.ts
#	apps/web/src/components/chat/TimelineWorkGroupRows.tsx
@ishaanko

ishaanko commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

Note

Written by Claude Opus 5.5 (Claude Code in T3 Code) on behalf of Ishaan

Closing the mobile gap from the verification above.

Ran the PR head (6769598ae0) in T3 Code Dev on an iOS 27.2 simulator (iPhone 18 Pro), paired to an isolated dev server with real Claude (Haiku 5.5). As in the web check, the Claude binary path pointed at a wrapper that waits 60s before starting Claude, so the startup window stays open long enough to capture.

  • While Claude was starting, the live row said "Starting Claude" with the terminal icon.
  • When the provider turn started (provider-turn.updated running, 61s after run.updated running), it switched to "Thinking" with the brain icon. The reply replaced the row 2s later.
Starting Provider running
iOS: Starting Claude iOS: Thinking

Not checked: Android (no SDK on this host).

…tate

# Conflicts:
#	apps/mobile/src/features/threads/thread-work-log.tsx
…tate

# Conflicts:
#	apps/web/src/components/chat/TimelineWorkGroupRows.tsx
@ishaanko ishaanko changed the title fix(clients): say "Starting Claude" until the provider actually starts fix(clients): a starting provider shows the terminal icon, not the thinking brain Nov 12, 2026
@github-actions github-actions Bot added size:XS 0-9 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Nov 12, 2026
…tate

# Conflicts:
#	apps/web/src/components/chat/TimelineWorkGroupRows.tsx

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:unvouched Author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants