fix(clients): a preview app no longer knocks the desktop's own server offline - #13577
Conversation
… offline Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped connection-compatibility bug fix that prevents relay discovery results from disabling direct servers sharing an environment ID, while preserving relay compatibility enforcement. A focused regression test covers both paths, and no defaults, schemas, deployment settings, or static-analysis rules are changed. You can add or adjust custom eligibility rules. Learn more. |
## What's Changed * feat(web): control Android foldables in the Device panel by @juliusmarminge in pingdotgg/t3code#13534 * fix(mcp): preview snapshots fit in the agent's tool output again by @t3dotgg in pingdotgg/t3code#13558 * fix(web): paste after clicking away from the composer lands in it again by @t3dotgg in pingdotgg/t3code#13553 * feat(desktop): keep running threads synced in the background by @t3dotgg in pingdotgg/t3code#13554 * fix(mcp): preview errors tell agents what to do instead by @t3dotgg in pingdotgg/t3code#13559 * feat(web): agents working banner links to the Agents panel by @t3dotgg in pingdotgg/t3code#13572 * fix(web): size the Android fold model from the inner display by @juliusmarminge in pingdotgg/t3code#13574 * fix(clients): a preview app no longer knocks the desktop's own server offline by @t3dotgg in pingdotgg/t3code#13577 * fix(web): keep nested task states out of parent bullets by @dominic-r in pingdotgg/t3code#11477 * feat(release): ship a Linux .deb that updates itself by @t3dotgg in pingdotgg/t3code#13575 * perf(desktop): cache compiled JavaScript between launches by @t3dotgg in pingdotgg/t3code#13501 * fix(dev): one t3.json setup action that works on every OS by @t3dotgg in pingdotgg/t3code#13589 * fix(web): new worktree threads no longer say "checkout" during setup by @t3dotgg in pingdotgg/t3code#13590 * fix(desktop): `t3 app` keeps working after a second desktop app quits by @t3dotgg in pingdotgg/t3code#13585 * fix(usage): price Claude fast-mode requests at the fast rate by @t3dotgg in pingdotgg/t3code#13599 * fix: update OpenAI logo to current brand asset by @aaditagrawal in pingdotgg/t3code#13611 * fix(mobile): render assigned project icons in chat list by @SunkenInTime in pingdotgg/t3code#12810 ## New Contributors * @aaditagrawal made their first contribution in pingdotgg/t3code#13611 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260925.2237...v0.0.43-nightly.20260925.2251 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260925.2251
After I updated to the latest nightly, the desktop app said "Mainbook is offline" about its own local server. Reconnect did nothing. The local server was healthy.
The cause: T3 Code (Alpha), the Orchestrator v2 preview, was running on the same Mac from the same
~/.t3home. So it had the same environment id and label, but it uses orchestration protocol 2. Relay discovery reported the Alpha server's descriptor for that id.watchDiscoveredCompatibilitythen marked nightly's local primary environment "unsupported", switched it off, and dropped its socket. The traces showsetCompatibilitycallingdisconnecton the primary 3 seconds after launch.Relay discovery describes the server behind the relay route. Now it sets compatibility only on relay targets. Direct connections (the desktop's own server, saved URLs, SSH) already check the protocol in their socket handshake.
Proof: a new registry test puts an incompatible discovered descriptor on a connected primary and on a relay target. Without the fix, the primary gets disabled, the same as the live failure. With the fix, only the relay target is disabled and the primary stays connected. The client-runtime suite (1671 tests), typecheck, lint, and fmt pass. I found the root cause from live traces and by comparing the
/.well-known/t3/environmentoutput on both local servers.Created with Claude Opus 5.5 in Claude Code.
🤖 Generated with Claude Code
Summary by CodeRabbit