The director now accepts a cell heartbeat whose reported connection cap is at or below its configured cap, and places with the lower of the two; a reported cap above the configured one is still refused. A cap-only change keeps the cell's stored capacity rows. This lets the US cells' configured cap be raised once, ahead of their rolls, so an old process at the lower cap stays live until it is replaced, instead of desktops pointed at it being refused during a resize.
* fix(wsl): the worktree watcher no longer probes a WSL distro's home synchronously at startup
For a project inside WSL the watcher resolved the workspace root before seeing the
repo is a UNC path it skips. That ran wsl.exe 'echo $HOME' synchronously with a 5 s
timeout: on a cold distro it blocked main for 5 s and killed the distro's first
boot, after which every wsl.exe call failed with Wsl/Service/E_UNEXPECTED. The
watcher now skips WSL repos first and resolves other roots asynchronously.
* revert(wsl): drop the transient E_UNEXPECTED retry from #33145
The error came from the watcher's synchronous home probe killing the distro's first
boot (fixed in the previous commit). Once that happens the distro answers every
wsl.exe call with E_UNEXPECTED for 14+ s, so a 2.5 s retry never recovered it; on
the measuring box it failed every attempt. With the trigger gone the retry is dead
weight.
* fix(wsl): skip mirrored WSL roots without probing; keep the direct-git guard
Review follow-ups: a Windows repo whose workspace root mirrors into WSL also probed
the distro's home (async, still killed at 5 s) only to skip it, so the watcher now
recognizes the mirror and keeps just the Git-common watch. The revert keeps one
piece of #33145: a WSL service failure no longer falls back to the login shell and
switches the direct git read path off.
* fix(wsl): retry a git read when wsl.exe hits a transient service error on a booting distro
On a cold distro, concurrent first wsl.exe launches intermittently fail with
Wsl/Service/E_UNEXPECTED before the guest runs. The bridge's worktree listing gave
up on the first one, so a WSL project showed 0 workspaces until the user acted.
Reads now retry that one error up to three times (0.25, 0.75, 1.5 s).
* fix(wsl): bound transient-error retries per distro, honour aborts, keep the direct git path
Review follow-ups: after one read spends its retries the distro fails fast for 5 s
instead of every queued read sleeping in its admission slot; an abort or a disposed
caller ends the backoff at once; a transient service error no longer falls back to
the login shell and turns the direct read path off.
* test(wsl): drop type assertions from the transient-retry test
* fix(remote-terminal): calm, honest reconnect status with one notice per server
* fix(remote-terminal): keep the SSH sign-in wait immediate under the calm reconnect banner
* fix(remote-terminal): a surface that loses its turn drops its notice at once
* fix(remote-terminal): resolved action cards and handed-off notices leave at once
* fix(remote-terminal): only the leader at the end of an outage holds its notice
* feat(telemetry): count Windows-drive WSL repos with WSL-made worktrees
The daily wsl_usage_snapshot gains projects_wsl_windows_drive_wsl_worktrees: of the
Windows-drive repos that run Git in WSL, how many have a linked worktree WSL Git made
(a Linux-path link). Git for Windows can't take those over, so the D1c conversion
refuses them; this sizes that class before the bridge is removed. Bucketed count only,
read from the link files with no Git spawned; optional in the schema so older payloads
still validate.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(telemetry): don't count Windows Git's //server/share worktree links as WSL-made
Review: a UNC link starts with '/' too. Reuse the prune guard's classifier, and note
that a repo whose .git is a file reads as having no worktrees (no Git is spawned).
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(terminal): keep xterm parse barriers and the output behind them across a resize
Orca waits for xterm to finish parsing by writing an empty string with a
callback. In xterm 6.1, resize() drains the write queue through
WriteBuffer.flushSync, whose loop stops at a falsy chunk and clears the rest of
the queue. A resize while such a barrier was queued therefore dropped its
callback and every chunk written after it: replay guards and output waits fell
back to their stall timers, and that pane output never reached the screen.
The replay guard, output scheduler and write-pipeline probe now write a
zero-length Uint8Array through writeXtermParseBarrier. It parses as nothing, but
it is a truthy chunk, so the flush keeps going. Test fakes that recognised a
barrier by '' now check for a zero-length write. Regression tests use real
@xterm/headless and fail before the fix.
Fixes#26950
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* test(terminal): verify parse barriers across installed xterm runtimes
Exercise the existing contributor workaround against both browser and
headless packages through replay waits, scheduler waits and health probes.
Check FIFO callbacks, following bytes, parser tails and no-resize controls.
Register the bounded resize invariant as an experimental reliability gate.
Make terminal test writers accept string or Uint8Array and preserve textual
captures through the existing fixture conversion. Keep the original PR's
production implementation and contributor ancestry unchanged.
* test(terminal): complete byte barriers in unhide restore fixture
---------
Co-authored-by: outof-place <contact@outofplace.space>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* fix(windows): include registry addon in relocated daemon host
* test(windows): preserve registry path in native-read child script
* fix(ci): match registry gate command to recorded validation
* fix(worktrees): don't prune worktrees the other Git (Windows or WSL) created
On Windows one repo can hold linked worktrees written by both Git for Windows
(link C:/...) and WSL Git (/mnt/c/..., /home/...), e.g. after the project runtime
toggle switched it. Each Git reads the other's links as missing, and the
`git worktree prune` Orca runs after removing a worktree (and before deleting a branch
held by one) deleted those worktrees' metadata, leaving checkouts git no longer knows.
All five prune sites now go through pruneGitWorktrees, which reads the link files first
and refuses (through each site's existing failure path) when any link is foreign to the
Git that would run.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(worktrees): lock the other Git's entries for the prune instead of skipping it
Review: refusing the whole prune broke stale-registration recovery and left branches
undeletable in mixed repos, and reading <cwd>/.git/worktrees missed bare and linked
checkouts. Now the other Git's entries get a marked lock file for the prune (git never
prunes a locked entry; a user's existing lock is kept), the rest prune as before, and
the admin dir comes from rev-parse --git-common-dir once routing is settled.
//server/share links read as Windows Git's.
Co-Authored-By: Claude <noreply@anthropic.com>
* test(worktrees): drop a type assertion from the prune guard test
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(worktrees): serialize guarded prunes per repo and reclaim stale guard locks
Re-review: two prunes in one repo could interleave so the first's unlock let the
second prune the other Git's entry, and a crash between lock and unlock left a lock
read as the user's forever. Prunes now chain per admin dir, and a lock carrying the
guard's own reason is reclaimed.
Co-Authored-By: Claude <noreply@anthropic.com>
* test(worktrees): assert the overlapping prune waits, not only its outcome
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(dashboard): skip hidden pop-out view transitions
A column change in a hidden Agent Dashboard pop-out started a View
Transition whose ready promise rejects with InvalidStateError. Nothing
observed that promise, so each move became an unhandled rejection.
Skip the transition while the document is hidden, and consume ready
when a transition still starts.
Fixes#21323
* fix: preserve visible dashboard transition errors
* test(dashboard): preserve unrelated hidden transition errors
---------
Co-authored-by: Neil <neil@stably.ai>