Repository navigation
fix(hosts): preserve complete status changes in the renderer - #29033
Conversation
|
Review status: done. Review, Windows QA and CI are complete on the final head The problem: in Settings → WSL hosts, a host that was already connected could defer a server update (because a terminal was still running), but its row didn't show the "Update to … deferred." line or the Update / Force update buttons until a reload. After the update went through, the row could keep showing the stale deferral. Cause: the app compared WSL host status using a hand-picked list of fields that left out the deferred update, so a status change that only touched that field was thrown away. SSH host status used the same kind of hand-picked list. What changes for the user: the WSL host row now shows a deferred update as soon as it happens and clears it as soon as the update goes through, with no reload. The app now compares the whole status, so a field added later can't be dropped the same way. Review: one round at Final head
Review path: the light review path. The change is 2 production files and 24 lines, renderer-only, with no saved data, wire, process or lifecycle change. The only commits on these files in the last 30 days are the original features, not earlier fixes for this symptom. CI: the full PR workflow passed on Windows QA: run on the final head on Windows high spec, with a throwaway imported WSL distro and isolated homes. Codex drove the app through the debugging protocol only; details are in the QA comment.
Not verified: SSH host rows (no live SSH check; the existing SSH tests pass in CI). For Brennan's review Branch, right after a deferral and then after clearing it: Main, with the same steps: no deferral shown after connecting, then a stale deferral still showing after Force update: Places where your judgment matters:
Update (10-19): main moved again and conflicted on one test file this PR doesn't own (it was only in the diff because the pre-commit formatter had rewrapped it). Final head 5624698 merges main again and takes main's version of that file; no code in the PR's own files changed since QA. The formatter rewrapped 6 more of main's files on this merge (formatting only). Full PR checks green on 5624698. |
…host-status-dedupe
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 11 minutes. View limit details
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to
|
QA on Windows: WSL host row shows and clears "Update … deferred" without a reload (PR head d2a4c4a)Result: pass. On this branch the Settings → WSL hosts row picked up a deferral-only status change both ways (deferral appears, deferral clears) with no reload. On the PR's base commit (current Problem being checkedWhen an already-ready WSL host's status changed only in Setup
Steps on this branch (expected vs observed)
Same steps on the base commit 75b6fa2 (old behavior, for comparison)Fresh profile, same distro, one live terminal, template switched to N+3, same
Things a user might not expect (outside this diff)
Config files (sha256 before → after)
CleanupAll test copies and helper processes were stopped by their recorded PIDs. |
…host-status-dedupe # Conflicts: # src/main/runtime/rpc/methods/structured-agent-session-adoption-replay.test.ts








ELI5
An already-connected WSL host could defer a server update, but Settings → WSL hosts hid the reason and Update/Force actions until a renderer reload. The renderer discarded the new status because it compared only the connection state, detail and distro name.
What Changed
The renderer now compares complete WSL and SSH status snapshots using the existing structural comparator. Changes to update details reach the existing host row immediately, and adding status fields cannot silently exclude them from comparison. Runtime environment status already uses this mechanism and needs no change.
Why
Main publishes full WSL snapshots without deduplicating them, so the renderer still needs to suppress repeated equivalent snapshots. Reusing the comparator already used for runtime environments removes the incomplete field lists instead of adding one more field to them. This follows the common pattern of consuming complete published state; the existing desktop event transport is an intended difference because it preserves Orca's host ownership and needs no protocol change.
Linked Issue
Follow-up to #27934 (live Windows QA finding F-1).
Ownership: Neil (@nwparker) owns the WSL host UI; this touches his
src/renderer/src/store/slices/wsl-hosts.tsslice and addswsl-hosts.test.ts. No mover or main-process WSL modules change.Visual Proof
Windows recheck handed to the coordinator for the next WSL host run: keep Settings open on a ready host, defer a server update while work is live, and verify its reason and Update/Force actions appear without reload and clear after the update. No layout or copy changes.
Testing
8d4269f6461573de47550a570b738b5a15b84274in PR Checks run 38693703882..github/workflows/pr.ymlworkflow, including Linux packaging and the aggregatePR checks passedgate, passed on attempt 2 for that exact head.wsl-hosts.test.tsas passed in shard 5, and the existing SSH store tests as passed in shard 1; no checks ran on the memory-constrained Mac.browser-popup-native-compatibility.electron.test.ts→preserves native Shift POST context, title and policy ordering: local(failed job and log). One failed-job retry passed the full Linux package job without code changes.Review
Compared WSL, SSH and runtime environment status storage. SSH had the same field-list comparison and now uses the same full-value comparator; runtime status retains its existing exclusion of the unread probe timestamp. No wire format, host execution, path or workspace ownership changes.
Agent skill upstream boundary
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)