Skip to content

WIP: fix(mobile): reconnects no longer shift the thread list - #5372

Open
t3dotgg wants to merge 1 commit into
mainfrom
t3code/mobile-reconnect-status
Open

WIP: fix(mobile): reconnects no longer shift the thread list#5372
t3dotgg wants to merge 1 commit into
mainfrom
t3code/mobile-reconnect-status

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Aug 5, 2026

Copy link
Copy Markdown
Member

Warning

WIP — not ready to merge. The change has not yet been verified on a real device; local repro was blocked by an unrelated environment connection issue.

When an environment reconnected on mobile, the connection status appeared as a row above the thread list. Every reconnect pushed all the rows down, then popped them back when it resolved. Jarring, and it happens constantly.

Now the header's brand slot doubles as the status surface. While an environment is unavailable, the T3 Code lockup ("Threads" on the iPad sidebar) fades to a spinner plus a status label in the same place, then fades back on reconnect. Nothing is inserted into the list, so its geometry never moves.

An 800ms debounce gates the swap, so the sub-second blips that make up most reconnects now show nothing at all. Offline and error states get a wifi-slash icon instead of the spinner, and tapping the status still opens environment settings the way the old pill did.

Covers every surface the old pill lived on: iPhone Home (both the liquid-glass and pre-glass header paths), Android Home, and the iPad sidebar in both native and custom chrome. The pill component is deleted; its display logic stays in workspace-connection-status.ts with tests extended for the new presentation helper.

Testing

  • vp test run in apps/mobile: 611 passing
  • Typecheck and lint clean for the changed files (one pre-existing packages/contracts/src/orchestration.ts error reproduces on clean main, unrelated to this branch)
  • Not yet exercised on device — that is the remaining WIP item

Written by Claude Opus 5 (1M context) in T3 Code.


Note

Low Risk
UI-only mobile header/list layout change with no auth, data, or API changes; main risk is header animation/native chrome edge cases on device (not yet verified per PR).

Overview
Reconnects used to insert a connection status pill above the thread list, which pushed rows down and back on every blip. That pill is removed; status now lives in the header brand/title slot via new WorkspaceConnectionTitle, so list geometry stays fixed.

While disconnected (after an 800ms debounce), the T3 Code lockup or “Threads” title is replaced in place by a tappable label (spinner for reconnect/sync, wifi-slash for offline/errors) that still opens environment settings. getConnectionAwareBrandHeaderOptions wires this into iOS nav headers; Android home header and iPad sidebar (native + custom chrome) use the same component. Shared brandTitleOffset keeps status aligned with the brand.

workspace-connection-status.ts gains workspaceConnectionStatusPresentation (label + whether to show progress); tests cover it. onOpenEnvironments moves from HomeScreen to HomeHeader / route header options.

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

Note

Move connection status display from thread list into the header title area

  • Replaces the inline WorkspaceConnectionStatus component (rendered inside HomeScreen and ThreadNavigationSidebarPane) with a new WorkspaceConnectionTitle component that swaps the header brand area to show connection status during reconnects.
  • Adds getConnectionAwareBrandHeaderOptions to wire WorkspaceConnectionTitle into native stack headers, with platform-specific placement (iOS native glass vs. Android).
  • Introduces useDelayedConnectionStatus, which suppresses status changes shorter than 800ms so brief reconnects don't flash the UI.
  • On Android, the header brand area becomes pressable to open environment settings; iOS uses unstable_headerLeftItems for alignment.
  • Behavioral Change: connection status no longer shifts the thread list layout; it is shown in-place within the header title slot.

Macroscope summarized d61499f.

The environment connection status rendered as a row above the thread
list, so every reconnect pushed the rows down and popped them back.

The brand/title slot in the header now doubles as the status surface:
while an environment is unavailable the lockup ("Threads" on the iPad
sidebar) fades to a spinner plus status label in place, and fades back
on reconnect. Nothing is inserted into the list, so its geometry never
moves. An 800ms debounce keeps sub-second blips invisible entirely.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 5, 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: f1f323bb-e050-401a-8d61-682cf1d3d01f

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

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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 5, 2026

@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 OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d61499f. Configure here.

{status.label}
</Text>
</Pressable>
</StatusFadeIn>

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 labels overflow header actions

Medium Severity

When WorkspaceConnectionTitle displays a connection status with grow, the inner Pressable and its label don't properly constrain their width. This allows long status messages to overflow and overlap adjacent header controls, as flex: 1 and minWidth: 0 are not effectively applied to the content.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit d61499f. Configure here.

@macroscopeapp

macroscopeapp Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

PR is marked WIP and introduces a new component with meaningful UI behavior changes (relocating connection status display). An unresolved comment identifies a potential layout overflow issue in the new component.

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

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