mirror of
https://github.com/stablyai/orca.git
synced 2026-11-14 01:47:24 +00:00
175f10e32b4901ac9219b078a2b3ee2e6a6dccbb
88
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
c2e716dbbb |
test: remove 17 low-value wrapper and private-state suites (#41292)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
f6b86ecf62 | refactor: group WSL and Orcad migration owners (#41148) | ||
|
|
d714d577bf |
test: remove 45 low-value suites and redundant cases (#40072)
* test: remove low-value synthetic and duplicated cases * test: remove low-value IPC and renderer cases * test: remove marginal mobile web build helper cases * test: remove marginal browser coverage * test: remove low-value mobile coverage * test: remove fixture inventories and diagnostic-only cases * test: remove low-value shared test suites and matrices * test: remove internal-work and mock-only coverage * test: remove prose passthrough and scan-count assertions * test: remove low-value renderer suites and copy counters --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
74106a0dbc |
Add protected telemetry milestones (#40043)
* Add protected telemetry milestones * Fix milestone provenance and acceptance * Fix telemetry test lint suppression * Relay remote accepted chat prompts to desktop telemetry * Honor paired desktop consent when chat host runs telemetry * Fix mobile typecheck for notification retry timer |
||
|
|
0d1220c31f |
Organize SSH and managed-server modules by concrete owner (#39937)
* refactor(main): organize SSH transport and managed server owners * Remove orphan deploy readiness fixture and shrink test baselines * refactor(wsl): import lock records from their defining owner * refactor(wsl): use the canonical deferred update contract |
||
|
|
c10881fa8c |
refactor(shared): organize execution and automation defining owners (#39776)
* refactor: import journal queue state from defining owners * refactor(shared): organize execution and automation owners * fix: retain type imports used by surviving test cases * refactor: finish work item owners and refresh validation metadata * test: infer reconnect status fixture type * test(claude): resolve source files beside same-named directories * test(runtime): group repository creation mock registrations |
||
|
|
9a1c3a362d |
more accurate chat ui invocation count (#39784)
* rm doc * wip * wip * wip * wip * wip * Handle opening message receipt collisions |
||
|
|
6d95515306 |
test: remove 297 low-value tests (#39720)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
e799cb419e |
test: remove 292 low-value tests (#39673)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
ce1426b8eb |
improve chat ui rolleout (#39420)
* wip * Standardize chat UI launch tip telemetry on corner-card-v3 |
||
|
|
4468deb34e |
test: remove 76 low-value fork and UI tests (#39321)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
5b1ade1e0e |
Count paired-phone chat and launches in usage stats (#38847)
* Count paired-phone chat sends, launches and tab opens in usage stats The host already knows when a request comes from a paired phone, so it records the phone's chat sends, agent launches and opened tabs with the same opt-out as the desktop's own counts. The desktop chat box tags its sends as desktop. * Count the views a phone opens and skip replayed sends A phone picks chat or terminal view on its own, so the opened count now comes from the stream it opens (chat transcript or full terminal), not from tab activation. Replayed sends no longer count twice, and phone sends report an unknown runtime. * Count a phone's view only once its stream is open A terminal counts after its snapshot reaches the phone, and a chat transcript the host cannot read is not counted. * Tag phone launches where the terminal launch is built Keeps the launch and runtime identity files within their line budget: the existing pane-agent reader is public instead of wrapped, and the phone launch tag is applied where the launch reaches the terminal. * Keep the phone launch tag when a launch creates a workspace * Use type guards instead of casts in phone usage counts * Never let a phone view count end the stream it observes The agent is read only for a view not yet counted today, inside a guard. Launch tests that check a caller's own label use a desktop caller, and a phone launch that creates a workspace is checked to stay tagged mobile. |
||
|
|
2f217b4d0d |
refactor(daemon): group endpoint, provider, session and transport owners (#38462)
* refactor(daemon): group transport, provider, endpoint, and terminal owners * refactor(daemon): consolidate owner imports and preserve pinned baseline sources * refactor(daemon): import termination budgets from their defining owner * fix(ci): retain serve mode coverage for extracted orcad startup * fix daemon build smoke to load concrete argument owner * read daemon protocol facts from historical defining paths * route protocol revision owners through compatibility checks |
||
|
|
6792990b83 |
test: remove 1015 low-value test declarations (#38087)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
74df8bf42e |
test: remove 997 low-value test declarations (#38058)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
d09519f0f1 | refactor: group workspace and runtime contracts by defining owner (#38018) | ||
|
|
ab6f6a7880 |
update chat ui intro (#37924)
* Remove live switching demo dialog * Fix corner-card rollout imports and version experiment telemetry |
||
|
|
4b655c9bbc |
Reduce logging data size (#37751)
* Reduce logging data volume * Remove volume control notes * Trim redundant sampling assertions |
||
|
|
e95b0ca056 | test: remove 58 low-value test declarations (#37853) | ||
|
|
a29d2e3f7f | test: remove 68 low-value test declarations (#37847) | ||
|
|
0a1340bf40 | test: remove 83 low-value checks across 30 whole suites (#37835) | ||
|
|
2169b791b7 |
refactor(git): group worktree operations and ref owners (#37783)
* refactor(git): group worktree operations and ref owners * test(git): retarget remaining concrete executor mocks |
||
|
|
c6b829ecf1 | refactor(main): group WSL host and orcad lifecycle owners (#37728) | ||
|
|
6d5edf8c33 |
refactor(main): organize WSL discovery filesystem and execution owners (#37722)
* refactor(main): organize WSL discovery filesystem and execution owners * refactor(main): consolidate defining-owner path imports |
||
|
|
f3088d53c9 | refactor(main): group terminal support by lifecycle owner (#37660) | ||
|
|
18f674e69f |
refactor: group workspace catalog and execution-host owners (#37641)
* refactor: group workspace catalog and execution-host owners * test: annotate catalog fixtures with portable public mock types * test(workspaces): preserve filesystem worktree mocks at concrete owners |
||
|
|
29479ddd3e |
Chat UI roll out implementation (#37222)
* Adjust Chat UI announcement rollout and show a nonblocking card - Assign new profiles to an 80/20 control and treatment experiment, with treatment split between all users and eligible harnesses. - Show terminal-default users a corner card and record targeting assignments to measure outcomes. * Refine the Chat UI announcement card layout and copy * Add live switching demo to Chat UI launch tip experiment * fix test * Shorten Chat UI announcement telemetry documentation * Add a swapped-button cohort to the Chat UI launch tip - Assign 10% of new enrollments to the new variant while preserving existing assignments. - Track live-switching link exposure and simplify the demo copy. * Adjust Chat UI launch tip rollout and switching options - Add a centered dialog cohort and independently vary button emphasis. - Target users who have not switched and allow switching back to terminal. - Record live-switching exposure only when the link is visible. * Validate persisted chat tip emphasis before initializing telemetry * Target chat UI launch tips using the current default surface Freeze eligibility at enrollment while preserving the historical audience. |
||
|
|
5e40d652b2 | refactor(persistence): import concrete owners and remove forwarding entry (#37081) | ||
|
|
ed3e82a2e7 |
test: remove 699 low-value test declarations and 116 suites (#37002)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
4eccb84167 |
Chat UI launch (#36891)
* feat(telemetry): A/B holdout for the Chat UI launch tip Freeze a 50/50 chat_ui_launch_tip_v1 cohort for profiles still due the tip on official builds with telemetry not disabled; control never sees the tip. Emit chat_ui_feature_tip_exposure in both arms and agent_default_surface_changed from the tip and from Settings -> Agents. Co-Authored-By: Claude <noreply@anthropic.com> * fix(telemetry): hold the Chat UI launch tip until the telemetry banner resolves Enroll only when consent is enabled. While the banner is pending, the tip is skipped for that launch without being marked seen, so its exposure is not spent unmeasured and the arm cannot influence the consent choice. Co-Authored-By: Claude <noreply@anthropic.com> * test(telemetry): document best-effort Chat UI tip exposure on rejected sends Co-Authored-By: Claude <noreply@anthropic.com> * test(telemetry): pass the exposure test through a hoisted mock instead of in-test importActual Co-Authored-By: Claude <noreply@anthropic.com> * test(telemetry): justify the fake Store assertion in the telemetry harness Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
94835244a2 |
fix(wsl): fail closed on an unknown default distro, stop no-start connects on a stop, and say unknown when WSL can't answer (E9) (#36797)
* fix(wsl): fail closed on an unknown default distro, fence no-boot deploys, and say unverifiable when WSL can't answer - A background wsl.exe run with no distro named reads the current default from the registry; when it can't be read, the run is refused as unverifiable instead of allowed. - A no-boot connect stops before its next guest command once a stop of the distro is heard mid-deploy. - Background UNC touches trust a running read for 15 s, not 60 s. - An unreadable running list is a retryable "couldn't confirm" on connect, and "Unknown" in the Add dialog, never "not running" or "stopped". * fix(wsl): one default distro per user act, cached registry read, adopted-holder watch, locales - The default distro comes from one resolver: Lxss first, `wsl --list` when the registry is blocked, cached for 5 s and single-flight, invalidated by a list change. A user act pins its answer, so the hook relay and every gate inside the act name the same distro. - A fenced no-boot connect that adopted a previous run's holder polls its process-table row (no wsl.exe); the holder found gone counts as a stop. - The Add dialog's request is a tested helper: Unknown and stopped distros are added with an explicit start. - New strings translated into the ten locales. * test(wsl): work an unnamed act leaves behind reads the default fresh after the act settles |
||
|
|
34f173bb88 |
test: remove 40 low-value test suites (#36336)
* test: remove 40 low-value test suites * test: preserve historical reliability command mapping --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
d6caa43719 | feat(telemetry): drop the plugin_uninstalled event; install counts are cumulative (#36214) | ||
|
|
0426223be5 |
feat(telemetry): count plugin installs from Orca's public catalogs (#36132)
* feat(telemetry): report plugin installs and removals from Orca's public catalogs * refactor(plugins): move marketplace install origin out of the installer |
||
|
|
5cd7b5d52c |
fix(telemetry): send PostHog events through the main HTTP client so they honor the proxy (#35972)
* fix(telemetry): send PostHog events through the main HTTP client so they honor the proxy * fix(telemetry): omit credentials on PostHog sends |
||
|
|
4642bc00d6 |
fix(telemetry): never deliver held startup events later than an eager client (#35949)
#35798 holds pre-window captures until the first window shows, which can delay delivery past what an eager client does: 20 quick events waited instead of tripping flushAt, and the first flush moved from 10s after the first event to 10s after the client started. Held events now start the client as soon as they reach flushAt, and a deadline 10s after the first held event starts the client if needed and flushes. It stands in for the timer an eager client would have armed, so it retires at the SDK's first flush attempt (the flushAt-th enqueue, whether that send succeeds or fails); after that the SDK's own flushAt and flushInterval alone decide batching. Held events are dropped when consent was withdrawn before start, and quit no longer loads the SDK just to drop them. Fixes #35752 Co-authored-by: Chad Tolkien <chad@sodadigital.com.au> |
||
|
|
1a12ec8864 |
fix(telemetry): keep the SDK opted out while an env override disables telemetry (#35940)
DO_NOT_TRACK, ORCA_TELEMETRY_DISABLED and CI markers beat the stored choice, but setOptIn(true) and banner acknowledgement still re-enabled the SDK, and setOptIn(false) then captured telemetry_opted_out, which quit flushed. Consent-change paths now skip SDK opt-in and the direct opt-out capture while an env override is active; the client is already opted out at creation under the override. |
||
|
|
568cd1ba72 |
perf(telemetry): load posthog-node and start its client after the first window (#35798)
Requiring posthog-node at bundle evaluation and constructing the PostHog client in initTelemetry put ~58ms on the main-process startup path before any window showed. The SDK is now required lazily inside createPostHogClient, and initTelemetry defers client creation until the first window is shown (15s fallback for headless serve / GPU failures). Captures tracked before the client starts are held with their original timestamps and replayed in order on start. Opt-out and shutdown start the client first so held events flush and telemetry_opted_out still enqueues before optOut(); a client start failure no longer blocks either path. Fixes #35752 Co-authored-by: Neil <neil@stably.ai> |
||
|
|
478a008299 |
feat(wsl): a WSL hosts block can ask for already-moved projects back (#35762)
The cached policy gains an optional movedProjects: keep | bring-back, read only with a block. An unknown value reads as keep, so it never drops the block, and older builds ignore the field. The gate records the choice for the run (wslHostsBringBackMovedProjects) and telemetry reports it as wsl_hosts_moved_projects. Nothing acts on it yet; bringing projects back follows. Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
0976872b9e |
feat(wsl): let a cached remote policy close the WSL hosts gate (kill switch, remote half 2/2) (#35529)
* feat(wsl): let a cached remote policy close the WSL hosts gate (kill switch 2/2) A cached remote policy of "block" now closes an internal gate the launch environment opened, for the whole run. It reuses the closed-gate path that already exists: with saved hosts or moves the gate becomes serve-only, so moved projects keep working while nothing new is added or moved. With nothing saved it is closed. A missing, unreadable or "allow" policy changes nothing. Main stamps windows so preload agrees, the download runs only on Windows with the internal gate open, and telemetry reports the block. Co-Authored-By: Claude <noreply@anthropic.com> * feat(wsl): report the applied WSL hosts policy and keep the way back under a block Telemetry reports the cached policy applied at launch as allow, block or missing (omitted when the internal gate left it unread). Tests pin that a block keeps Remove host, the way back and unfinished-move recovery, refuses new hosts and moves, and that a mid-run download applies only next launch. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
797bbaa64c | fix(wsl-mover): say a move waits for a project coming back, not for another move (#35406) | ||
|
|
203bf56dfd |
feat(wsl-mover): report how a move's undo ends (#35322)
* feat(wsl-mover): report how a move's undo ends (wsl_move_undo) * fix(wsl-mover): tell a thrown undo apart from a failed one; clamp its duration |
||
|
|
21ad2d9dc5 |
fix(wsl-mover): settle an interrupted move automatically, and hold the host's server update during a move (#34823)
* fix(wsl-mover): settle an interrupted move automatically, and hold the host's server update during a move An app update or crash between sending a move's copy and the host's commit leaves a `blobs-transferred` record. Startup recovery has no host to ask, so the projects stay fenced, and the automatic mover only previewed, which refuses an in-flight move, retrying forever. The projects stayed read-only until the user started the move from the dialog. The automatic mover's preview now settles that record first (through the host: back to zero, or forward when the host committed), holding the distro's run while it does so it never races a move the user starts. The dialog's preview stays read-only. The preview moves to its own module. A Settings Update or Force, or any reconnect, could also redeploy the host's server in the middle of a move, cutting it off (safe, but the move is lost). Once a running move has journaled, a version-changing redeploy now keeps the running server and reports the update as waiting for the move, mirroring the SSH path's skip while migrating. The move's own first connect, before it journals, can still update an outdated server. * fix(wsl-mover): an automatic settle never reloads the window, and never holds its own host update Review of #34823: - A settle that finds the host committed ran the desktop rewrite, which reloads the window past its unload veto. From the automatic mover it now records the commit only (the projects stay fenced), and the next start's rewrite pass finishes it before any window opens. A move the user starts still finishes at once. - The server hold counted any unfinished record of the distro, so an automatic settle of an old record with an outdated server was held, refused for an update, and retried the same way. The hold now counts only the cutover the running move journaled itself. * fix(wsl-mover): let the user finish a committed move in-session; park the automatic mover meanwhile After an automatic settle records a commit for the next start, nothing could finish it in-session: the user's Move refused as already in flight and the orchestrator retried for nothing. - A settle that finds the head committed but not yet rewritten on this desktop finishes it now when the user asked (their Move, or the status line's Retry), returning the existing "finished an earlier move" answer; the automatic mover still leaves it for the next start. - The automatic refusal carries detail `finish-pending`, which parks the distro (new reason `finish-pending`) instead of retrying; the next start, whose rewrite pass finishes the move before any window opens, puts it back to pending. - The park rules move to wsl-move-orchestrator-park.ts. * fix(wsl-mover): give the finish-pending park its own status line Main's move status line (#34676) names every park reason; the finish-pending reason this PR adds needs one: the earlier move is done on the host, and finishes here at restart or with Check again. |
||
|
|
bb10b80be5 |
feat(wsl-mover): D3a-2 move status line on WSL host rows (dark) (#34676)
* feat(wsl-mover): D3a-2 per-distro move status line on WSL host rows, with decline causes and stale-record pruning (dark) * fix(wsl-mover): key D3a-2 status records without the node-only journal module in the renderer * fix(wsl-mover): D3a-2 pre-review — never prune user choices or on an unreadable host file; calm paused line; one-key blocker sentence; Show terminal feedback * refactor(wsl-mover): D3a-2 distro-in-use check in its own module * test(wsl-mover): the orchestrator host-connect test gives the new in-use port * fix(wsl-mover): D3a-2 Check again runs as the user's act on the distro (stopped-distro gates) * fix(wsl-mover): D3a-2 user steps use main's runAsWslUserAct gate; wiring test |
||
|
|
ad8d35eb59 |
feat(wsl): serve saved WSL work behind a closed hosts gate (gate states, kill switch 1/2) (#34683)
* feat(wsl): serve saved WSL work behind a closed hosts gate (serve-only) The WSL hosts gate gains three states. A closed gate with a saved WSL host or a committed move becomes serve-only: saved hosts stay listed and reachable, committed rewrites, retention, interrupted-move recovery and the way back keep running, and the preload API is exposed through a stamped window argument. Adding hosts and starting moves still need the open gate. With nothing saved the gate stays closed exactly as before. * fix(wsl): stamp serve-only into the dashboard popout and Space windows too They load the same preload, so without the argument they hid saved WSL hosts' status and Connect in serve-only. One helper now supplies the argument for every window on the shared preload. * fix(wsl): reviewer follow-ups for the serve-only gate - Refuse wslHosts:add unless the internal gate is open here, so this PR is safe on its own. - Promote on any move journal entry, so recovery can reset an in-flight move whose host record is gone. - List unfinished moves in serve-only. - An unreadable WSL deployment store fails closed in serve-only too, through a shared serving flag main sets at startup. - Report the gate state in wsl_usage_snapshot as an optional field. |
||
|
|
1eaaf85e9f |
Land the WSL project mover dark (merges only after verify-15b, the flag-off audit and green CI) (#34059)
* test(orcad-migration): pin the SSH manifest through the real dormant collectors Co-Authored-By: Claude <noreply@anthropic.com> * refactor(orcad-migration): read the dormant-state export through a source-kind scope A local-WSL scope lives on host local and owns only its projects, so host-wide matches stay an SSH whole-host rule. SSH bytes are pinned by the collector golden. Co-Authored-By: Claude <noreply@anthropic.com> * feat(wsl-mover): export a local WSL move's signed manifest with its dormant state (D1b-3c) Collects the scoped projects, their groups and every dormant-state kind through the local-WSL export scope, rewrites UNC paths to the distro's, and returns blockers for anything the collectors can't carry instead of dropping it. Automations move disabled, as the wire requires, and come back as a list to re-enable on the host after commit. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): reset an interrupted move to zero, or finish it once the host proves a commit Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): abort a move by its identity when its manifest is too large for a request Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): cap a new move's manifest below the request limit, and move forward on a by-reference commit only once the host flushed it Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): remove only the newest move of a distro, so its chain stays readable Co-Authored-By: Claude <noreply@anthropic.com> * feat(runtime): clients read a migrated pane's scrollback from its host (D1b-6d-1) * fix(runtime): hold a remote pane only when its host is known to serve scrollback, and never read bytes in render (D1b-6d-1) * fix(runtime): route the scrollback read by the tab's own host, never the focused one (D1b-6d-1) * fix(runtime): resolve the scrollback host through resolveOwner and use the shared RPC error check, after main moved both (D1b-6d-1) * feat(wsl-mover): a moved project's existing chats stay listed and resumable on this computer (D1b-7a) * fix(wsl-mover): moved-project chats go through the layout owner instead of writing layout directly (D1b-7a) * test(wsl-mover): run the moved-project chat runtime test in the Node runtime (D1b-7a) * test(wsl-mover): read the hidden local row through main's per-host hidden-repo API (D1b-7a) * feat(wsl-mover): rewrite the desktop's routing and seed the host's session after a move (D1b-7c) Registers the main-side desktop rewrite stores ui-routing, session-globals and host-session-seed. Adds a +2 main layout-writer baseline line for wsl-move-main-rewrite-stores.ts: these are one-shot, ledgered move rewrites, and no LayoutCommand can set focus or seed a runtime host's partition. * fix(wsl-mover): finish the main rewrite before the window loads, keep one copy of each moved tab, and copy instead of move (D1b-7c) * feat(wsl-move): rewrite renderer stores for moved projects and keep their UI through catalog prunes (D1b-7d) Registers the renderer-side desktop rewrite stores quick-open-history, file-view-preferences and notebook-environments. The renderer copies each moved workspace's entry to its WSL host key, marks it applied in the same storage, and records the ledger entry; main requests a storage flush first and accepts only the main window. Committed moves are re-listed for re-application at every startup. Catalog prunes keep filters, hook trust and setup-script dismissals of moved repos. * fix(wsl-move): import the migration manifest types from main's orcad-migration folder (D1b-7d) * fix(wsl-move): import wslUncPathToLinux from shared wsl-paths in the manifest exporter, where 7d moved it (D1b-7d) * feat(wsl-mover): rewrite a moved project's orchestration history on the desktop (D1b-7e) Settled local worker dispatches and their worker-terminal rows in a moved project take the WSL host's worktree id, in one ledgered, idempotent store. Chat workers, live rows, federated attachments and JSON receipts stay as written; automations keep their unchanged local copy (the scheduler only advances it). Per-table dispositions for orchestration.db. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): hold the orchestration store while a worker in scope is live; skip federated rows (D1b-7e review) Co-Authored-By: Claude <noreply@anthropic.com> * feat(wsl-mover): copy in-app browser logins into the WSL host on a move (D1b-7f) A committed WSL move now copies each in-app browser profile's cookies once into the WSL host's stable route partition (owner decision 3a), merging without overwriting what the host jar holds and never touching the source. Where that is infeasible (no deployment link so no stable partition, the destination is not a WSL host or is gone, or the partition name is held by another identity) the host starts fresh and the move journal records why (3b). Registered as the ledgered browser-cookies rewrite store; it runs only once browser sessions and an app window exist. WSL_MOVE_DESKTOP_REWRITE_REGISTRY_COMPLETE stays false. * feat(wsl-mover): retain moved source rows, reconcile them on start, and plan delta moves (D1b-8) * fix(wsl-mover): keep the retained mark out of the WSL move manifest (D1b-8) * feat(wsl-mover): the move driver runs a WSL move end to end, with production gate facts and journaled restore folders One entry point (and preview/start/cancel/listUnfinished IPC for D1b-9) plans the move, gates terminals on the hook server's agent status, the close-tab process probe, running automation runs and live dispatches, pauses and proves exit, stages, sends blobs, commits only from blobs-transferred (#29825), and finishes on the desktop. Any failure resets to zero or goes forward when the host committed. Restore folders and the automations to turn back on are kept in the journal; the host turns those automations back on after commit, retried until it confirms. A real-PTY test pauses daemon shells, and runs on a real distro in the WSL orcad lane. * feat(wsl-mover): move dialog with preview, blockers, progress and result behind the internal WSL hosts gate (D1b-9) * fix(wsl-mover): move dialog hides instead of blocking, follows runs after a reload, and lets a start settle an unfinished move (D1b-9 review) * fix(wsl-mover): word an unfinished earlier move as still finishing (D1b-9) * test(wsl-mover): type the e2e's fake move state instead of reading it through Reflect (D1b-9) * WIP(wsl-mover): 7f-2 registry complete, coverage proof, startup re-apply (D1b-7f-2) * test(wsl-mover): registry-complete lifecycle, stale-focus restart, unload re-apply (D1b-7f-2) * fix(wsl-mover): share the session focus write so the re-apply adds no layout writer (D1b-7f-2) * fix(wsl-mover): redo additive rewrites once at a stale window's unload; behavioural coverage proof (D1b-7f-2 review) * test(wsl-mover): the IPC record test now finishes the rewrite with the registry complete (D1b-7f-2) * fix(wsl-mover): fence worktree-less spawns by cwd and re-prove terminal exit before commit (R46, WIP) * test(wsl-mover): pin the commit re-proof, browser jar identity and repeated move generations (R45, R46, R47) * fix(wsl-mover): fence any spawn by its folder and name the re-proof's reason (R46 review) * fix(wsl-mover): a terminal in a known folder outside the move never blocks it (R46 follow-up) * test(wsl-mover): kill the real move driver at every point against a real host store; abort a reset move's leftover stage on reconnect Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): carry unsaved drafts into the moved project; round-trip every fixture through the real export, driver and host import Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): reset a move waiting on a distro that is proven unregistered; test updates mid-move (R41), lost distros (R38) and two desktops (R39) Co-Authored-By: Claude <noreply@anthropic.com> * test(wsl-mover): list the D1b-10 real-SQLite mover tests Co-Authored-By: Claude <noreply@anthropic.com> * test(wsl-mover): type the fault test's journal hook without a cast Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): reset for a lost distro even when its kept host fails to connect, never for a renamed one; compare filled-in repo keys only where the source lacked them Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): carry markdown frontmatter visibility and closed-terminal-tab tombstones into the moved project Co-Authored-By: Claude <noreply@anthropic.com> * test(wsl-mover): read the persisted stage through a typed record, not Reflect Co-Authored-By: Claude <noreply@anthropic.com> * feat(telemetry): report how WSL moves end, by phase and reason code (R43) Co-Authored-By: Claude <noreply@anthropic.com> * fix(telemetry): report a pause refusal's reason, an outcome for a thrown run, and only real transport errors as unreachable Co-Authored-By: Claude <noreply@anthropic.com> * fix(agent-hooks): a WSL host's orcad never removes the hook entries the WSL bridge shares (R42) Co-Authored-By: Claude <noreply@anthropic.com> * fix(agent-hooks): a WSL host's Codex account-home launch with hooks off skips too; mark the R42 guard to drop with the bridge Co-Authored-By: Claude <noreply@anthropic.com> * feat(wsl-mover): "Use on this computer again" brings a moved project back as it was before the move Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): judge a bridge WSL pane's foreground inside its distro On Windows every live bridge pane's own process is wsl.exe, so the busy-terminal gate read every open WSL terminal as running a program and refused the move. Read the pane's terminal foreground process group inside the distro (processes carry ORCA_PANE_KEY): only shells means idle, anything else blocks, and an unreadable guest stays unverifiable. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): only the selected projects' session rows can refuse a WSL move The session eligibility check treated host local's whole partition as the move's, as the SSH conversion does. So an agent session or unsaved draft in any other project on this desktop, or in a project an earlier move retained, refused every later WSL move from that distro. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): sign the manifest as the journal and the host read it The digest was computed over in-memory rows. A value with toJSON (a Date on a row added this session) canonicalized to {} when signing but to its string once written to the journal or sent to the host, so the first move after adding a project reset with orcad_migration_manifest_digest_mismatch until a restart reloaded the row. Normalize through JSON before signing. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): carry a slept pane's scrollback from its daemon checkpoint The move sleeps every pane first, and a slept pane's history lives only in the daemon's checkpoint, never in a renderer snapshot. The export carried renderer snapshots only, so moved terminals opened empty. After Sleep the driver reads each paused pane's checkpoint (as cold restore would replay it) and the export carries it under the pane's own snapshot ref; the snapshot channel serves those bytes, checked against the signed hash. SSH conversions pass no reader and are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): say why when a move can't be prepared, instead of a bare reset An export or journal failure after the pause (a digest mismatch, on awin) was rethrown and shown as "everything was put back" with no reason. Nothing is journaled yet at that point, so refuse with the error named instead. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): retry a renderer store main refused to record The renderer applied a store and wrote its marker, but ignored a refused ledger record (gated-off, failed, not-main-window), so a committed move stayed unfinished and refused every later move of the distro until the next app start. Log the reason and retry with backoff until it lands. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): a WSL pane is idle only when its shell has nothing else Review of #32343: reading only the terminal's foreground group let background jobs, nohup and disowned work, setsid daemons and a script waiting at read pass as idle, and the move's Sleep would end them. Scan the pane shell's subtree, its session and every process carrying its key; any non-shell process, or a shell running a script, blocks. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): never leave behind an agent whose key may be the selected project Review of #32343: scoping the session check to the selected projects let an unqualified key for a repo id another host also registers fall out of both the transfer and the refusal. Such a key now refuses. Adds tests that fail on the old code: another project's live agent with its tab open and its draft don't refuse, the same kinds of state in the selected project still do. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): refuse an unreadable slept checkpoint, prefer it, and spool it to disk Review of #32343: - A checkpoint behind an unreadable log (or an unreadable one) refuses with the pane named instead of carrying stale history. - For a pane the move just slept the checkpoint is the newest copy, so it wins over an older renderer buffer or snapshot. - Buffers spool to a per-move folder and only their hashes and sizes stay in memory; the snapshot channel reads them by offset. The folder is removed whatever the outcome. - A journal write that landed before it threw is reset, so no orphan record blocks the next move. awin's checkpoints were 310-615 KB, well inside the 5 MB per-pane cap, so nothing there is trimmed. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): retry a failed listing, never a record another window was refused Review of #32343: not-main-window can't clear by waiting, while a listing failure is transient. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): sign the manifest as the host parses it The likelier cause of awin's digest mismatch: the signature covered the exported objects, but the manifest parser keeps only the fields it knows, so a session field it drops (one a sleep can write) left the journal and the host hashing something else. Sign the parsed form, and warn when the parser dropped anything, since such a field does not move. Co-Authored-By: Claude <noreply@anthropic.com> * chore(wsl-mover): split the journal step out of the driver, and format The review fixes took wsl-move-driver.ts past the line limit; the export-and-journal step moves to its own module unchanged. Co-Authored-By: Claude <noreply@anthropic.com> * fix(wsl-mover): a slept pane passes the busy check; say what each move dropped or lacked Re-run on awin ( |
||
|
|
ee09f979fa |
test: remove 78 low-value cases and four entire suites (#34687)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
0323d28498 |
test: remove 49 low-value test cases (#34678)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
84494ce394 |
test: remove 338 low-value cases and 28 suites (#34234)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |
||
|
|
4e0f391c38 |
test: remove 294 low-value cases and 12 suites (#34156)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> |