Skip to content

fix(mobile): show loading and syncing in the working pill - #9466

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/reuse-mobile-working-pill
Sep 3, 2026
Merged

fix(mobile): show loading and syncing in the working pill#9466
juliusmarminge merged 1 commit into
mainfrom
t3code/reuse-mobile-working-pill

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Mobile drew two different pills above the composer: the composer's own "Loading messages…" / "Syncing messages…" pill (bold text, tappable, no glass) and the floating "Working for …" timer pill (glass, merges with the scroll-to-end button). Opening a thread that was already working faded one out and the other in, with a different shape and font each time.

The floating working control now takes a status of either syncing (spinner + label) or working (timer), so both states render in the same element and the label just swaps in place. ThreadDetailScreen derives that status from the thread sync state and the active turn, with syncing taking priority. The composer's status pill now only reports connection problems (reconnecting, offline, error, not connected). The old sync pill's tap called reconnect, but since it only ever showed while already connected, nothing is lost by making the new one non-interactive.

Same gating as the timer had: hidden while disconnected or while an approval/user-input card owns the composer slot. The feed's bottom inset already keyed off the pill's presence, so it now reserves space during loading/syncing too.

Before / after

Loading a thread (left: before, right: after):

loading

Working timer, unchanged (left: before, right: after):

working

Load transition on the new build (server delayed 3s locally to make it visible):

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6c62066b94880475/mobile-pill-loading-after.mp4

Verified on iOS Simulator (iPhone 17 Pro, iOS 26.5) against a disposable environment seeded from real data. vp run typecheck in apps/mobile passes; lint shows only pre-existing warnings.

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Mobile thread UI and status presentation only; no auth, data, or API changes. Feed inset logic already keyed off floating pill visibility, now extended to loading/syncing.

Overview
Thread loading and syncing now show in the same glass floating pill above the composer as the “Working for …” timer, instead of a separate bold composer status pill.

FloatingWorkingControl takes a status of syncing (spinner + “Loading/Syncing messages…”) or working (elapsed timer) so the label swaps in place without a second pill fading in. ThreadDetailScreen builds that status from thread sync + feed presentation, with syncing ahead of active work, and still hides the pill when disconnected or when approval/user-input owns the composer.

ThreadComposer drops threadSyncPhase and limits its status pill to connection problems (reconnecting, offline, error, not connected); when connected it shows nothing for sync.

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

Note

Show loading and syncing status in the floating working pill

  • Moves message loading and synchronization status display from the composer connection pill to the floating working control pill on the thread detail screen.
  • ThreadDetailScreen derives a floatingStatus from sync and content state, and passes it to FloatingWorkingControl. The floating pill now shows the sync label (with activity indicator) before showing the active-work timer.
  • ThreadComposer and composerConnectionStatus no longer accept or produce a syncing status; the composer pill now reports only connection/retry states.
  • Risk: ThreadComposerProps.threadSyncPhase is removed; any caller still passing it will get a type error. FloatingWorkingControl API changes from a nullable startedAt value to a nullable status object, requiring all callers to migrate.

Macroscope summarized 2317bdd.

The composer drew its own pill for "Loading messages" / "Syncing
messages" while the working timer lived in a separate floating pill
above it. Opening a thread that was already working fades one out and
the other in, with a different shape and font each time.

The floating working control now takes a status: syncing (spinner plus
label) or working (timer). ThreadDetailScreen derives that from the
thread sync state and active turn, syncing taking priority, and the
composer's status pill only reports connection problems.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@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 Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 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.6 KiB 13.6 KiB −7 B (−0.1%) 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.0 KiB +1 B (+0.0%) 7.3 KiB
Codex Live turn WebSocket wire 6.5 KiB 6.5 KiB −8 B (−0.1%) 7.8 KiB
Codex Live turn WebSocket decoded 57.0 KiB 57.0 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 9 9 0 (0.0%) 21
Claude Total thread wire 13.8 KiB 13.5 KiB −225 B (−1.6%) 15.1 KiB
Claude Thread snapshot wire 7.0 KiB 7.0 KiB +7 B (+0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.7 KiB 6.5 KiB −232 B (−3.4%) 7.8 KiB
Claude Live turn WebSocket decoded 59.3 KiB 57.8 KiB −1.5 KiB (−2.5%) 66.4 KiB
Claude Live turn messages 10 8 −2 (−20.0%) 21

Baseline: d5825e1 · PR result: 2317bdd · 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: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

macroscopeapp Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 2317bdd

Macroscope's review found this PR approvable — This is a contained mobile UI fix that consolidates existing loading, syncing, and working indicators into one floating pill while preserving connection gating and existing timer behavior. No schema, data-processing, deployment, security, billing, or product-default changes are involved.

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

@juliusmarminge
juliusmarminge merged commit de025aa into main Sep 3, 2026
22 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/reuse-mobile-working-pill branch September 3, 2026 19:52
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 4, 2026
## What's Changed
* fix(web): make right panel tabs easier to scroll by @maria-rcks in pingdotgg/t3code#9461
* fix(web): render transparent previews on white by @UtkarshUsername in pingdotgg/t3code#9463
* fix(mobile): show loading and syncing in the working pill by @juliusmarminge in pingdotgg/t3code#9466
* fix(server): keep a/ and b/ prefixes in rendered git patches by @Mnigos in pingdotgg/t3code#9438
* fix(server): full-access OpenCode threads no longer ask for approvals by @shivamhwp in pingdotgg/t3code#9282
* fix(web): reuse pull request list data while loading by @maria-rcks in pingdotgg/t3code#9467
* feat(web): let users turn off composer collapse on blur and scroll by @juliusmarminge in pingdotgg/t3code#9469

## New Contributors
* @Mnigos made their first contribution in pingdotgg/t3code#9438

**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1272...v0.0.39-nightly.20260903.1273

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1273
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