Repository navigation
fix(mobile): the phone's host list never flashes a list shaped unlike the desktop's - #31301
Merged
Merged
Conversation
… the desktop's Before the host's sidebar feed installed, the feed-built list drew worktree.ps's rows flat: no Pinned section, no project groups, no host badges, in another order, then snapped to the desktop's list. It now waits for the feed (the loading spinner), or opens on the host's last installed feed when this page has one. An older desktop without the feed still gets the worktree.ps list.
This was referenced Oct 21, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ELI5
When you opened a desktop's workspace list on the phone, a different list showed for a split second: no Pinned section, no project groups, no host badges, and a different order. Then it jumped to the real list. The phone now never draws a list that is shaped differently from the desktop's.
What Changed
worktree.ps) as one flat, unsorted list. That query usually answers first, so the flat list flashed before the real one.worktree.pslist is now used only for a desktop that has no feed (an older Orca), so that desktop still gets a list.use-host-list-sections.tsdraws the flat fallback only when the feed state isreopen(no feed, or a version this page can't read), no longer while it isloading.use-host-sidebar-feed.tskeeps each paired desktop's last installed feed in memory, capped at 20 desktops. It uses that copy until the fresh read installs, and forgets it when the desktop stops serving the feed. A remembered copy in a version this page can't read is skipped, so it never flashes "Reopen to update".Why
The flash was the fallback list, so the only way to remove it is to not draw a list the desktop wouldn't draw. Alternatives considered:
Offline (desktop unreachable): before the first feed, the list shows the spinner and the header shows the connection status, which is what the list already did when it had no rows. A desktop seen earlier in this page shows its last known list.
With the switch off, the phone builds its own grouped and pinned list from
worktree.psand never draws the flat fallback. This flash is a regression introduced by turning the switch on.Linked Issue
N/A (found by the owner on ad hoc candidate 7)
Visual Proof
N/A. The only visible change is that a one-frame wrong list is replaced by the spinner (or by the right list). Covered by the hook test below.
Testing
Automated tests added:
mobile/src/host-screen/host-list-first-frame.test.tsxrenders the feed hook and the list builder together withworktree.psrows present.worktree.psrows.On the base branch, the first-frame and other-desktop cases fail. Without the remembered feed, the reopen case fails.
Mobile typecheck, mobile tests, oxfmt,
pnpm tc, and the static gate including both ratchets.Review
Base:
sidebar-flip-a. This leaveshost-list-highlight.tsalone and changes one line inuse-host-list-sections.ts, because a parallel highlight change touches that file.Notes
Mixed versions: an older desktop without
sidebarInputs.readstill gets theworktree.pslist, with "Reopen to update". There is no wire change. SSH and remote-server rows come through the same feed, so they are unaffected.