WIP: fix(mobile): reconnects no longer shift the thread list - #5372
WIP: fix(mobile): reconnects no longer shift the thread list#5372t3dotgg wants to merge 1 commit into
Conversation
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>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ 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> |
There was a problem hiding this comment.
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.
Reviewed by Cursor Bugbot for commit d61499f. Configure here.
ApprovabilityVerdict: 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. |


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.tswith tests extended for the new presentation helper.Testing
vp test runinapps/mobile: 611 passingpackages/contracts/src/orchestration.tserror reproduces on cleanmain, unrelated to this branch)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.
getConnectionAwareBrandHeaderOptionswires this into iOS nav headers; Android home header and iPad sidebar (native + custom chrome) use the same component. SharedbrandTitleOffsetkeeps status aligned with the brand.workspace-connection-status.tsgainsworkspaceConnectionStatusPresentation(label + whether to show progress); tests cover it.onOpenEnvironmentsmoves fromHomeScreentoHomeHeader/ 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
WorkspaceConnectionStatuscomponent (rendered insideHomeScreenandThreadNavigationSidebarPane) with a newWorkspaceConnectionTitlecomponent that swaps the header brand area to show connection status during reconnects.getConnectionAwareBrandHeaderOptionsto wireWorkspaceConnectionTitleinto native stack headers, with platform-specific placement (iOS native glass vs. Android).useDelayedConnectionStatus, which suppresses status changes shorter than 800ms so brief reconnects don't flash the UI.unstable_headerLeftItemsfor alignment.Macroscope summarized d61499f.