You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(wsl-mover): say a move waits for a project coming back, not another move - #35406
While a moved project is coming back to this computer, Orca now refuses to start a move of the same WSL distro (#35369). The refusal used the "a move is already running" message, which is wrong: nothing is moving. It now says "A project is coming back from Ubuntu. Try again once that finishes." It also gets its own code, so the automatic mover and telemetry can tell the two cases apart.
What Changed
Before: starting a move of a distro while one of its projects was being brought back showed "A move into Ubuntu is already running. Wait for it to finish, then try again." Telemetry recorded it as already_running.
After: the dialog shows "A project is coming back from Ubuntu. Try again once that finishes." It is reported as wsl_move_undo_running (telemetry undo_running). A real concurrent move still shows the old message.
Mechanism:
A new WslMoveRefusalCode, wsl_move_undo_running.
A new wslMoveClaimRefusal(distro) in wsl-move-running-moves.ts says why claimWslMoveRun just returned null: the distro's undo mark, or another move.
The driver (moveProjectsToWslHost) and the orchestrator's settling preview return that code.
The orchestrator maps it to { next: 'stay' } (retry on the next trigger), like wsl_move_already_running.
WSL_MOVE_REFUSAL_VALUES gains undo_running. The existing type check fails the build if a refusal code has no telemetry value.
wsl-move-copy.ts has the new message (wslMove.refusal.undoRunning).
Why
Why a companion function rather than changing claimWslMoveRun's return type.claimWslMoveRun returns the run or null, and 13 call sites (code and tests) rely on that. Making it return a refusal object would turn every expect(claim).not.toBeNull() into a silent pass. The companion reads the same registry synchronously, right after the failed claim, so it can't disagree.
Locales: the wslMove.refusal copy exists only in en and de today. The other nine locales have no mover refusal strings at all and fall back to English for the whole dialog. So the new string is in en and de, matching its siblings. Adding just this one string to the other nine would mix languages inside one dialog.
Flag-off: moves and undo exist only behind the WSL hosts gate. With ORCA_INTERNAL_WSL_HOSTS unset, no undo mark is ever taken, so this code is never produced.
User-risk: none to behaviour. Only the wording and the telemetry value of one refusal change.
Linked Issue
Follow-up to #35369 (merged), from e9-reviewer’s copy note.
Visual Proof
N/A. One refusal's text in the existing move dialog; covered by the dialog's every-refusal-has-a-message test.
Testing
I manually tested these changes locally
Automated tests added/updated, or explained why not below
wsl-move-release-here-move-race.test.ts: the orchestrator's move and settling preview of the distro mid-undo now return wsl_move_undo_running.
updater-wsl-move-install-hold.test.ts: wslMoveClaimRefusal names the undo for the undone distro, and a move for a distro held by a move.
WslMoveDialog.test.tsx: the new code has its own distinct message.
wsl-move-telemetry.test.ts: it is reported as undo_running.
Checks run: pnpm tc, pnpm run typecheck:ci, 87 test files (837 tests passing: every moving-wsl-projects, mover IPC, mover telemetry, install-hold and move-dialog test), verify-localization-catalogs, verify-localization-extraction, pnpm run check:code-quality:changed, anti-slop oxlint, oxlint, ast-grep scan and gates.
Review
Agent skill upstream boundary
Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.
Notes
Wire compatibility: refusal codes stay inside this desktop (driver → renderer through local IPC), so no remote peer sees the new code.
SSH and folder workspaces: not affected.
Status
Ready for review.
Checklist
This PR is small and focused
I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
Before/after screenshots or videos attached for UI changes, or N/A with reason
Self-reviewed for correctness, security, and performance
Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)
STATUS: ready. Head 002d5c8, stacked on #35369 (8932eae); I'll rebase onto main when it merges. New refusal code wsl_move_undo_running with its own dialog copy (en and de; the other nine locales have no wslMove.refusal strings), wslMoveClaimRefusal for the reason, orchestrator → stay, telemetry undo_running. Checks: pnpm tc, typecheck:ci, 87 test files (837 tests passing), localization, code-quality, anti-slop, oxlint, ast-grep scan and gates. Review requested from e9-reviewer.
The move flow now returns wsl_move_undo_running when an undo is active for the requested distro. The orchestrator, telemetry schema, and renderer handle the new refusal code. English and German messages explain that the user can retry after the return operation finishes.
Priority: Low
Merge Risk: Low · previous review a3609
Regenerate the English runtime catalog before merging; otherwise localization validation fails even though English currently falls back to the inline message.
Pre-merge checks: 4 · 1
Failed checks: 1 warning
Check name
Status
Explanation
Resolution
Docstring Coverage
Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta…
Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed checks: 4 passed
Check name
Status
Explanation
Title check
The title clearly identifies the primary change: correcting the WSL move refusal message when a project is coming back. It is concise and specific.
Description check
The description follows the required template and explains the user-visible change, mechanism, rationale, linked issue, visual proof, testing, compatibility notes, and checklist status. It documents t…
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
Full details: Description check
Explanation
The description follows the required template and explains the user-visible change, mechanism, rationale, linked issue, visual proof, testing, compatibility notes, and checklist status. It documents that manual testing was not performed and that some broad commands remain unchecked, but the description is otherwise substantially complete.
Full details: Docstring Coverage
Explanation
Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 5 functions across 12 files. (2 skipped: 2 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
Finishing Touches: 💡 2
📝 Generate docstrings: 💡
Commit to this branch
Create a new PR
🛠️ Fix failing CI checks: 💡
Commit to this branch
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
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.
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.
src/renderer/src/i18n/locales/en.json adds wslMove.refusal.undoRunning, but src/renderer/src/i18n/en-runtime-required.json does not contain it. The WSL refusal path calls translate() with the distro interpolation option, so the runtime catalog generator requires this key in the eager English resource. Without it, English currently relies on the inline fallback and the localization catalog validation fails. Regenerate en-runtime-required.json with pnpm run sync:localization-runtime-catalog.
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
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
While a moved project is coming back to this computer, Orca now refuses to start a move of the same WSL distro (#35369). The refusal used the "a move is already running" message, which is wrong: nothing is moving. It now says "A project is coming back from Ubuntu. Try again once that finishes." It also gets its own code, so the automatic mover and telemetry can tell the two cases apart.
What Changed
Before: starting a move of a distro while one of its projects was being brought back showed "A move into Ubuntu is already running. Wait for it to finish, then try again." Telemetry recorded it as
already_running.After: the dialog shows "A project is coming back from Ubuntu. Try again once that finishes." It is reported as
wsl_move_undo_running(telemetryundo_running). A real concurrent move still shows the old message.Mechanism:
WslMoveRefusalCode,wsl_move_undo_running.wslMoveClaimRefusal(distro)inwsl-move-running-moves.tssays whyclaimWslMoveRunjust returned null: the distro's undo mark, or another move.moveProjectsToWslHost) and the orchestrator's settling preview return that code.{ next: 'stay' }(retry on the next trigger), likewsl_move_already_running.WSL_MOVE_REFUSAL_VALUESgainsundo_running. The existing type check fails the build if a refusal code has no telemetry value.wsl-move-copy.tshas the new message (wslMove.refusal.undoRunning).Why
Why a companion function rather than changing
claimWslMoveRun's return type.claimWslMoveRunreturns the run or null, and 13 call sites (code and tests) rely on that. Making it return a refusal object would turn everyexpect(claim).not.toBeNull()into a silent pass. The companion reads the same registry synchronously, right after the failed claim, so it can't disagree.Locales: the
wslMove.refusalcopy exists only inenanddetoday. The other nine locales have no mover refusal strings at all and fall back to English for the whole dialog. So the new string is inenandde, matching its siblings. Adding just this one string to the other nine would mix languages inside one dialog.Flag-off: moves and undo exist only behind the WSL hosts gate. With
ORCA_INTERNAL_WSL_HOSTSunset, no undo mark is ever taken, so this code is never produced.User-risk: none to behaviour. Only the wording and the telemetry value of one refusal change.
Linked Issue
Follow-up to #35369 (merged), from e9-reviewer’s copy note.
Visual Proof
N/A. One refusal's text in the existing move dialog; covered by the dialog's every-refusal-has-a-message test.
Testing
I manually tested these changes locally
Automated tests added/updated, or explained why not below
wsl-move-release-here-move-race.test.ts: the orchestrator's move and settling preview of the distro mid-undo now returnwsl_move_undo_running.updater-wsl-move-install-hold.test.ts:wslMoveClaimRefusalnames the undo for the undone distro, and a move for a distro held by a move.wsl-move-orchestrator-transitions.test.ts:wsl_move_undo_running→stay.WslMoveDialog.test.tsx: the new code has its own distinct message.wsl-move-telemetry.test.ts: it is reported asundo_running.Checks run:
pnpm tc,pnpm run typecheck:ci, 87 test files (837 tests passing: every moving-wsl-projects, mover IPC, mover telemetry, install-hold and move-dialog test),verify-localization-catalogs,verify-localization-extraction,pnpm run check:code-quality:changed, anti-slop oxlint, oxlint, ast-grep scan and gates.Review
Agent skill upstream boundary
Notes
Status
Ready for review.
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)