Reproduced with the unchanged historical web client at 680152e27b against the real Linux server at 2333f16884: config decoding rejects the string and the socket closes/retries. The same client connects with the compatible wire codec. Fix and runtime evidence: #23213. 115 focused tests pass after merging main. Native Electron and the SSH transport were not verified.
[Bug]: desktop clients older than #23037 can't connect to newer servers (compactIdleThreads changed from boolean to string)#23109
Area
Server / desktop remote connection (contracts)
Steps to reproduce
- Run a T3 server built from
mainat or after d13fc84670 (#23037), for example5c3721e20. - Connect to it over SSH from the desktop app at nightly
v0.1.2-nightly.20261021.3486(680152e27), which predates #23037.
Expected behavior
The older desktop client connects, or reports a version mismatch.
Actual behavior
The connection fails in a loop with Cause: transport and Error: <host> connection failed unexpectedly.
The SSH tunnel, /.well-known/t3/environment, /api/auth/session and /api/auth/websocket-ticket all return 200, and /ws upgrades with 101. Each time, the client closes the socket within a few seconds of ws.rpc.subscribeServerConfig, which the server logs as InterruptError: All fibers interrupted without error.
#23037 changed ServerSettings.compactIdleThreads from Schema.Boolean to IdleCompactionModeSetting, which encodes as a string literal ("onReturn" by default). A client built before #23037 decodes that field as Schema.Boolean, so it fails to decode the server config and drops the connection. The patch type changed the same way (Schema.optionalKey(Schema.Boolean) to Schema.optionalKey(IdleCompactionMode)).
Impact
Any desktop client older than #23037 cannot use a remote environment running a newer server. No nightly containing #23037 had shipped yet, so the newest published desktop build couldn't connect to a server built from main.
Version or commit
- Desktop client:
v0.1.2-nightly.20261021.3486(680152e27) - Server:
5c3721e20(contains d13fc84670)
Environment
macOS desktop client connecting over SSH to a Linux (Arch) host.
Workaround
Run a server build from before d13fc84670 (for example 0bdf33a34) until the client updates.
A possible fix is to keep compactIdleThreads a boolean on the wire and carry the mode in a new field, or to have clients decode unknown setting values leniently.
I tried hard to fix and debug this on my 5 laptops and 3 phones connected everithing failiing before the update T.T i need this fixed asap
I am literally disconected from my fleet