* fix: keep the saved layout when panes die during host shutdown
refs #5349
* test: check hangup recording with the server signal monitor installed
refs #5349
Preview update checks select a newer stable release while retaining the preview preference for future builds. Preserve implicit Windows preferences with a TOML-aware edit and cover release selection, config forms, and install behavior with regression tests.
The lease test spawned PowerShell on Windows and allowed five seconds for
the worker's first ready marker. On a loaded Windows runner PowerShell
startup alone consumed that budget, so the test failed at the readiness
deadline even though the worker started normally.
Run the worker as the test binary itself instead. The child is a native
process with no shell startup, and it performs the same ready/release/result
file handshake from the checkout directory. Cover the child with an ignored
test spawned through `--exact ... --ignored`. The child returns immediately
when no handshake request exists, so a direct `cargo test -- --ignored` run
stays green.
A window drag can momentarily make the terminal report a zero-sized grid.
`terminal_grid_size()` turns that into an error, and the resize watcher
treated any error as a dead terminal: it detached and exited the client,
which ends the session on a remote host.
Keep the last known geometry and the pending resize signal, then resample.
Real terminal failures still detach, and startup still rejects a
zero-sized grid.
This prevents a zero-sized-grid-induced detach. Whether it fully explains
the reported Git Bash over SSH session loss is unconfirmed: the pasted ssh
log shows a normal session teardown, and the report's leftover mouse
reporting is not reproduced here.
refs #4105
* fix: keep the macos server running when its terminal quits
refs #4920
* test: cover the macos server leaving its launchd job
refs #4920
* test: wait for the launcher to exit before checking the detached server
refs #4920
* fix: stop server crash when a cursor move carries a link onto a full page
refs #5296
* fix: keep cursor link when a style page split moves the cursor
refs #5296
OpenSSH for Windows hands the SSH command argument to the login shell
wrapped in double quotes, which expanded the `$`/`$(...)` in Herdr's POSIX
discovery and API bridge scripts before `/bin/sh` ran them. A saved machine
whose default shell is WSL bash is detected as POSIX, so `herdr --machine`
then failed with `remote binary discovery failed`.
Deliver the discovery script on stdin (`/bin/sh -s`) and base64-encode the
cached POSIX API bridge command so the whole script, including any executable
path, stays out of the command argument. The decoded bridge reads the API
payload from fd 3 so decoding the script cannot consume it.
refs #5132
* fix: probe windows remote hosts before /bin/sh
Interactive remote setup forwards SSH stderr, so a Windows OpenSSH host with a
PowerShell default shell printed the raw `/bin/sh` CommandNotFoundException and
Windows was only identified by the fallback probe. Probe for Windows first for
interactive connections so those hosts never receive a `/bin/sh` command;
background bridges capture stderr and keep the POSIX-first probe.
refs #5187
* fix: distinguish wsl from native windows ssh shells
refs #5187
The macOS CI job intermittently fails
server::client_transport::tests::observer_write_timeout_resets_when_sending_makes_progress
with "assertion failed: write_framed_bytes(...)" followed by "observer
disconnected while making progress".
The test proves that every partial write resets the writer's deadline by
draining a 1 MiB frame through an observer that sleeps 5 ms per 16 KiB read
while the writer's send timeout is 100 ms. On a loaded runner, one scheduler
stall longer than 100 ms makes write_client_stream time out and shut the
socket down, so the write assertion fails and the observer then reads EOF.
Give the writer a 1 s timeout and slow the observer to 25 ms per read. The
transfer still takes about 1.6 s, longer than the timeout, so the deadline
reset is still required, while the stall budget grows 10x and the drain
cadence stays 40x below it.
Also bound both kernel socket buffers well below the frame size. The reset
path is only exercised while the writer is blocked, so the test should not
depend on the platform default buffers happening to be smaller than 1 MiB.
PowerShell serializes progress records such as module auto-loading's
"Preparing modules for first use." to the stderr CLIXML stream when stderr is
redirected under `-EncodedCommand`, and Herdr forwards that stderr during
interactive remote setup. Set `$ProgressPreference = 'SilentlyContinue'` in the
shared Windows PowerShell preamble so `machine add` and `--remote` no longer
print raw CLIXML records.
refs #4639
The client_mode::federated_client_starts_without_local_and_survives_its_restart
integration test fails intermittently on the ubuntu (and macos) runners at two
polling budgets:
- "remote must be usable before Local exists"
- "remote reconnect N must restore visible input and preserve the shell"
Both budgets are shorter than the client's own connection and activation
deadlines. Saved-SSH discovery probes are bounded by a 15s SSH command timeout,
the remote handshake read timeout is 60s, and each endpoint activation phase has
a 5s deadline that can retry. Under a loaded runner the client can still be
legitimately connecting, or holding pane input closed through an activation
retry, when the test gives up.
Give the remote-readiness and remote-input waits budgets that exceed those
deadlines. The waits still return as soon as the observed condition holds, so
only the failure path gets slower. The intentionally tight waits that prove
Local does not wait for a stalled remote stay at 3s.
Every bundled Windows PowerShell hook read its hook JSON with
`[Console]::In.ReadToEnd()`, which decodes stdin using the process console
input code page instead of UTF-8. On Korean Windows (CP949) that corrupts
the payload, `ConvertFrom-Json` throws, and the hook silently exits without
reporting the session. Read the raw stdin stream as UTF-8 (BOM-aware) in
every PowerShell hook and bump the affected integration versions.
refs #5253
portable-pty's Windows search_path accepted any existing candidate, so a directory on PATH whose name matched the program shadowed the real executable and CreateProcessW failed with os error 5. Require a regular file for both the exact name and the PATHEXT candidates.
refs #5267
* fix: retry a reconnecting machine immediately when selected
Assisted-by: Claude <noreply@anthropic.com>
* fix: retry the active SSH machine when selected
refs #4721
---------
Co-authored-by: Bart Louwers <bart@emeel.net>
* fix: open goto search on shifted slash in report-all panes
refs #4963
* fix: use the typed character for overlay slash and text shortcuts
refs #4963
* fix: require typed evidence for a shifted slash in goto
refs #4963
* fix: map non-latin layout ctrl chords to their base keys
refs #1079
* fix: keep us shifted symbols for non-latin punctuation chords
* fix: limit base-key chords to non-latin scripts and skip altgr-like ctrl+alt
* fix: recover shifted key alternates from vt bytes on windows input
* fix: cover cherokee, syllabics, mongolian and nearby scripts in base-key chords
* fix: cover lowercase cherokee supplement in base-key chords
* fix: only reparse windows vt keys that carry a shifted kitty alternate
* fix: match ghostty for layout ctrl chords and drop extra rewrites
* fix: keep shift-implied layout ctrl chords on the layout key
* fix: pair layout chord releases when modifiers change first
* fix: lease layout ctrl chords by their reported key
* fix: stop waiting forever for an unfinished host color reply
refs #5052
* fix: keep input that follows an unfinished host color reply
refs #5052
* fix: drop an unfinished host color reply after an idle timeout
refs #5052