Repository navigation
feat(wsl-mover): a moved project's existing chats stay listed and resumable on this computer (D1b-7a) - #29550
Closed
nwparker wants to merge 4 commits into
Conversation
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 16, 2026 09:13
b2bddf5 to
5f9a900
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 16, 2026 09:15
830d672 to
cf7b47a
Compare
Contributor
Author
|
SSH coverage for the |
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 16, 2026 11:24
5f9a900 to
371a5d0
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 16, 2026 11:25
e9cd5d5 to
21de21c
Compare
8 of 9 tasks
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 16, 2026 12:02
371a5d0 to
9b87fc4
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 16, 2026 12:02
21de21c to
d9a6f2f
Compare
9 tasks done
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 16, 2026 12:18
d9a6f2f to
1a052ad
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 16, 2026 12:41
b86fcc6 to
2e3663b
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 16, 2026 12:41
1a052ad to
5d9dcb2
Compare
This was referenced Oct 16, 2026
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 20, 2026 21:05
2e3663b to
f24ad83
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 20, 2026 21:06
5d9dcb2 to
fa92dab
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 20, 2026 23:15
f24ad83 to
d034364
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 20, 2026 23:16
fa92dab to
76f3e02
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 21, 2026 00:44
d034364 to
b303971
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 21, 2026 00:46
76f3e02 to
c035565
Compare
…umable on this computer (D1b-7a)
…ad of writing layout directly (D1b-7a)
…dden-repo API (D1b-7a)
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-6d1-host-scrollback
branch
from
October 21, 2026 05:16
b303971 to
4a74631
Compare
nwparker
force-pushed
the
nwparker/wsl-mover-d1b-7a-moved-project-chats
branch
from
October 21, 2026 05:16
c035565 to
ed9c23a
Compare
Contributor
Author
|
Contained in the dark landing PR #34059 (its head commit is an ancestor of the landing branch). Closing in favour of it; branch kept. |
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.
Shared paths this PR touches
WslMovedProjectsSectionsits under the worktree list. It renders only when a WSL move has committed, so nothing changes for anyone today.repos:listWslMovedis read-only. The paired web client returns[].runtimeHiddenRepoIdsbecomesruntimeHiddenRepos(...).has(repoId, hostId). It is used byworktree.ps,worktree.listand the hidden-host check. Tests cover the same-id case for both WSL and SSH. The SSH Docker end-to-end shards must run on this PR.sidebar.wslMoved.movedToHost, is added to all six locale files.ELI5
The owner decided that when a WSL project moves to its WSL host, its existing chats stay on this computer. New chats start on the host. Without this PR those chats would vanish after a move, because the moved project is hidden from the sidebar. This PR keeps the moved project in the sidebar as a small read-only entry, "Moved to host", that lists only its existing chats. Each chat opens and resumes on this computer as before. Terminals and edits for that project stay refused, because they now live on the host.
What Changed
This is step D1b-7a of the lossless WSL project mover.
repos:listandfolderWorkspaces:list. A separate read-onlyrepos:listWslMovedreturns{kind, id, displayName, path, distro}for local rows the WSL host now owns, taking the distro from the move journal. The renderer keeps these inwslMovedProjects, so a moved project is never treated as an editable one. Phone and CLI lists are unchanged.agent-sessiontabs only. Its terminal, editor and browser tabs are dropped, because those moved to the host.worktree.psandworktree.list.Why
Why existing chats stay: chats in a WSL project run on Windows. Their transcripts and account homes are in the Windows home, so moving them to the host would strand them (owner decision C, 2026-10-16). Keeping them reachable here is the lossless choice until per-provider transcript moves exist (follow-ups A1–A5).
Why a separate read-only entry: the alternative was to list the chats under the host's project, which has the same repo id. That would mean rewriting each chat's location to a host it never ran on.
Linked Issue
N/A (maintainer; tracked in the WSL-via-orcad implementation tracker, step D1b-7a).
Visual Proof
Taken over CDP from a hidden window (
ORCA_BACKGROUND_LAUNCH=1), using a seeded committed move journal and one chat:For review:
Testing
I manually tested these changes locally
Automated tests added/updated, or explained why not below
Session freeze: chats are accepted after commit and refused while the move is only quiesced; the slept terminal is kept.
listWslMovedProjects: lists only local rows the host owns, never mid-move, and never an SSH row with the same id.Runtime hidden repos by (id, host): covered for both WSL and SSH.
Main runtime: a moved chat's folder still resolves to its UNC path through attach, ensure and restart-resume, and its revealed tab is saved alongside the frozen terminal.
Renderer:
End-to-end:
tests/e2e/wsl-move-moved-project-chats.spec.ts: it seeds a chat and a committed journal and reveals the chat. It then checks the entry and label, that the chat is the only button, and that the terminal is gone. After closing, both the chat and the slept terminal are saved.wsl-move-fence.spec.tsstill passes.Checks:
pnpm tc:node,pnpm tc:web, both oxlint configs, the changed-code quality gate, the localization checks, dead classes, max lines, and the focus-read ratchet all pass. The touched suites pass (386 files).Known limitation: a seeded chat tab doesn't come back by itself after a restart unless the host republishes it. The same happens in an unmoved project with this fixture, so the e2e uses the reveal path.
AI Disclosure
Review
Agent skill upstream boundary
Notes
Nothing writes a move journal yet, so this changes nothing for anyone today. The internal WSL host gate is unchanged.
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)