Skip to content

fix(server): reject pairing with an incompatible server protocol - #23789

Merged
juliusmarminge merged 2 commits into
mainfrom
fix/issue-15492
Oct 24, 2026
Merged

juliusmarminge merged 2 commits into
mainfrom
fix/issue-15492

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

Problem

Running t3 pair against a server on another orchestration protocol prints a token that the server cannot use. For example, stable 0.0.45 writes state.sqlite while a V2 server reads statev2.sqlite; the reverse direction also creates an unnecessary V2 database before returning an unusable token.

Change

Check the discovered server's orchestration protocol before Tailscale setup or database/auth initialization. Refuse mismatches with both protocol versions and the exact server-version pairing command. Missing protocol metadata uses the existing V1 compatibility default; matching protocols retain the existing pairing path.

Scope and approval

Fixes #15492

Triaged bug via the automated issue flow: #15492. Limited to the pairing CLI compatibility check and its regression test.

Verification

  • Red test on d90dd6ee07: expected only server-runtime.json; actual also contained environment-id, secrets, and statev2.sqlite.
  • vp test run apps/server/src/cli/pair.test.ts: 14/14 passed on c502579298.
  • Scoped lint and format passed; server typecheck passed. Latest main was already contained in the branch.
Real server/CLI check Result
Published stable CLI → current V2 server Before: token printed, fresh exchange HTTP 401
Current CLI → published stable V1 server Before: token printed, fresh exchange HTTP 401; after: exit 1, actionable mismatch, no token, SQLite/sidecar hashes unchanged
Fixed current CLI → current V2 server Token issued, fresh exchange HTTP 200

issue-15492-runtime.md

Independent sanitized evidence audit

Server/CLI-only change; render matrix empty. Runtime verified on Linux x64, Node 26.12.1, isolated real V1/V2 servers. macOS desktop and Tailscale wrapping were not run. The already-published immutable 0.0.45 package remains affected; the source fix protects future CLI releases.

Models: Claude Opus 5.5 (Claude Agent harness), GPT-6.1-Sol (Codex harness).

Verification log

Review + omitted-protocol evidence at c502579298, against merge-base 044f07257c. No source changes or fixes applied; these are delegated review results, not posted forge reviews.

  • Reviewer A — Codex, gpt-6.1-sol: MERGE. Full diff and discovery/config/auth paths traced: guard precedes database/migrations, secrets, environment-id and Tailscale writes; failed/unreachable discovery cannot reach token minting. No pairing acceptance, scope or grant changes. Static review; diff check passed.
  • Reviewer B — Claude Agent, claude-opus-5-5: MERGE. Full diff and descriptor history traced: omitted metadata uses the established V1 default; production V2 producers always include the field. Focused pairing suite passed 14/14. Nonblocking caveats: retain original CLI flags with the suggested command; unpublished server versions may not have a matching npm release. No auth acceptance/grant change beyond refusing unusable token issuance, so neither reviewer triggered NEEDS_JULIUS.
Additional evidence row Before (merge-base) After (head)
Controlled HTTP descriptor server omits orchestrationProtocolVersion; real source CLI, isolated fresh and existing homes Exit 0, token printed. Fresh: creates environment-id, secrets/server-signing-key.bin, statev2.sqlite, one pairing row. Existing: database hash changes, pairing rows 1→2. Exit 1, no token; reports server protocol 1 / CLI protocol 2 and npx t3@0.0.45 pair. Fresh: no files created or changed. Existing: all file hashes unchanged, pairing rows remain 1.

Sanitized transcripts, file inventories, and exact driver. Driver SHA-256: 4c008957f981f4a2cb7812cd5067f23fa2ccf8b34861975e6e26a5ceb96e1226.

This row uses a descriptor fixture advertising 0.0.45, not a full production server; no exchange result is claimed. All runtime homes were under /tmp/ev-23789; no real T3 database was accessed. No Tailscale command was run. Server port-owner PIDs were recorded and their cwd checked before stopping. An initial Vite+ shim bootstrap was discarded and the row rerun using the installed Node binary directly. Missing metadata on a hypothetical modified V2 server would also be treated as V1; shipped V2 descriptor constructors emit the field. No correction to the existing PR-body evidence claims was found.

juliusmarminge and others added 2 commits October 22, 2026 19:22
…le server's database

Adds a failing pair test: a discovered server reporting protocol 1 / version
0.0.45 must be rejected with an exact `npx t3@0.0.45 pair` hint before the
CLI opens or migrates its database.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An older CLI discovered a protocol 2 server, minted into a database that
server never reads, and printed a token it rejects. Pair now compares the
discovered descriptor's protocol before opening any local database and points
at the matching `npx t3@<serverVersion> pair`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Oct 22, 2026
@github-actions github-actions Bot added the size:S 10-29 changed lines (additions + deletions). label Oct 22, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — This narrowly scoped fix rejects protocol-incompatible servers before pairing setup can initialize authentication storage or mint an unusable credential, while preserving matching and legacy paths. Because it changes authentication-related runtime behavior, human review is warranted.

You can add or adjust custom eligibility rules. Learn more.

@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ The exact PR base did not have a successful artifact. Baseline uses the latest successful main measurement shown below.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB −7 B (−0.1%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB −7 B (−0.6%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.9 KiB 20.9 KiB 0 B (0.0%) 29.3 KiB ✅
Codex Live turn messages 2 2 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB 0 B (0.0%) 29.3 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: 4eae8ae · PR result: c502579 · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
📥 Commits

Reviewing files that changed from the base of the PR and between 044f072 and c502579.

📒 Files selected for processing: 2
  • apps/server/src/cli/pair.test.ts
  • apps/server/src/cli/pair.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.

📝 Walkthrough

The pairing CLI now checks the discovered server’s orchestration protocol version before continuing with pairing setup. It returns an incompatibility error for a mismatch. A regression test verifies that this failure does not create additional userdata files.

Changes: Pairing protocol compatibility

Layer / File(s) Summary
Protocol compatibility guard
apps/server/src/cli/pair.ts
pairCommand compares the discovered server’s protocol version with the CLI’s version. If they differ, it returns IncompatibleServerProtocolError with the server version and protocol version. A missing server protocol version defaults to 1.
Mismatch regression test
apps/server/src/cli/pair.test.ts
The test descriptor helper accepts a supplied descriptor. The regression test checks that a protocol mismatch fails and leaves only the existing server-runtime.json file in the userdata directory.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Possibly related issues

  • pingdotgg/t3code issue 22235 — The PR rejects a CLI/server protocol mismatch, but does not address duplicate servers or stale endpoint routing.

Suggested reviewers: t3dotgg

Merge Risk: ⚪ Minimal · up to c5025

The compatibility check rejects mismatched servers before pairing changes local state. No merge-blocking issue was found.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly and concisely states the main change: rejecting pairing when the server protocol is incompatible.
Linked Issues check Passed Issue #15492 requires the CLI to reject a protocol mismatch before database access and provide an actionable matching-version command. The reviewed source adds IncompatibleServerProtocolError, which…
Out of Scope Changes check Passed The changes are limited to the pairing protocol check and its regression test, as requested by issue #15492. The descriptor helper updates and protocol fields support that test. No unrelated changes a…
Description check Passed The description follows the required template. It explains the problem, change, scope and approval, focused verification results, limitations, and agent attribution. It also documents the linked issue…
Full details: Linked Issues check

Explanation

Issue #15492 requires the CLI to reject a protocol mismatch before database access and provide an actionable matching-version command. The reviewed source adds IncompatibleServerProtocolError, which reports both protocol versions and npx t3@&lt;serverVersion&gt; pair. The supplied change summary places the check before server configuration and token creation. The regression test uses a protocol 1 server descriptor and checks failure, the versioned command hint, and that no userdata files beyond server-runtime.json are created. Missing protocol metadata retains the V1 default, and matching protocols retain the existing path.

Full details: Out of Scope Changes check

Explanation

The changes are limited to the pairing protocol check and its regression test, as requested by issue #15492. The descriptor helper updates and protocol fields support that test. No unrelated changes are evident in the reviewed summary or test diff.

Full details: Description check

Explanation

The description follows the required template. It explains the problem, change, scope and approval, focused verification results, limitations, and agent attribution. It also documents the linked issue and relevant test evidence.

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@juliusmarminge juliusmarminge added the bugfix Fix PR opened by an issue lead; enters the PR loop label Oct 22, 2026 — with GitCafe Production
@juliusmarminge juliusmarminge added pr:needs-verification Reviewed and green; needs a run on a desktop, Android or iOS device and captures posted pr:in-progress A lead is working on this PR pr:ready Every gate passed; waits for Julius's land label and removed pr:needs-verification Reviewed and green; needs a run on a desktop, Android or iOS device and captures posted pr:in-progress A lead is working on this PR labels Oct 22, 2026
@juliusmarminge
juliusmarminge merged commit 3f3a1bf into main Oct 24, 2026
51 checks passed
@juliusmarminge
juliusmarminge deleted the fix/issue-15492 branch October 24, 2026 03:19
@juliusmarminge juliusmarminge removed the pr:ready Every gate passed; waits for Julius's land label label Oct 24, 2026
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 24, 2026
## What's Changed
* fix(web): clear stale resource monitor errors after retry by @juliusmarminge in pingdotgg/t3code#24229
* fix(mobile): align draft workspace controls with the composer by @PixPMusic in pingdotgg/t3code#24239
* feat(mobile): thread header minimizes on the Duo while reading back through history by @juliusmarminge in pingdotgg/t3code#24235
* fix(web): center pull request timeline actions by @PixPMusic in pingdotgg/t3code#24259
* fix(server): find the resource monitor when the server runs from its build output by @yordis in pingdotgg/t3code#23965
* fix(pull-requests): list filters narrow on every host that can by @juliusmarminge in pingdotgg/t3code#23922
* fix(pull-requests): a filtered list fills its page instead of waiting for a scroll by @juliusmarminge in pingdotgg/t3code#23923
* feat(pull-requests): label and author filters search the host by @juliusmarminge in pingdotgg/t3code#23924
* fix(mobile): chat and composer chips stay readable in light mode by @flamboh in pingdotgg/t3code#22585
* fix(web): review thread avatars no longer clip in collapsed activity rows by @flamboh in pingdotgg/t3code#23545
* ci: close "needs more info" issues after 7 days without a reply by @juliusmarminge in pingdotgg/t3code#22628
* fix(server): Codex accounts show ChatGPT's current plan names by @flamboh in pingdotgg/t3code#24200
* fix(observability): desktop dev version and web environment match the other services by @yordis in pingdotgg/t3code#23975
* fix(observability): custom resource attributes use the t3code prefix by @yordis in pingdotgg/t3code#23974
* fix(mobile): Home and pull request lists let UIKit own their top inset by @juliusmarminge in pingdotgg/t3code#24284
* fix(mobile): keep the Duo's Home and pull request headers fixed by @juliusmarminge in pingdotgg/t3code#24295
* fix(server): interrupts started by an agent no longer say "by user" in the timeline by @juliusmarminge in pingdotgg/t3code#24299
* ci(relay): deploy labeled PRs to relay preview stages by @juliusmarminge in pingdotgg/t3code#23872
* fix(mobile): HTML links in pull request comments open when tapped by @flamboh in pingdotgg/t3code#22110
* perf(client): avoid full ordering scans for streamed replacements by @juliusmarminge in pingdotgg/t3code#24264
* fix(server): a fork's first /compact compacts its inherited history by @juliusmarminge in pingdotgg/t3code#24172
* fix(server): agent recordings honor the browser frame rate setting by @juliusmarminge in pingdotgg/t3code#23895
* fix(client-runtime): Stop clears commands already finished on the server by @juliusmarminge in pingdotgg/t3code#23814
* fix(web): SSH environments on an older reused remote server explain the version mismatch instead of reconnecting forever by @juliusmarminge in pingdotgg/t3code#23647
* fix(web): keep usage-limit wake action visible by @juliusmarminge in pingdotgg/t3code#23803
* fix(server): reject pairing with an incompatible server protocol by @juliusmarminge in pingdotgg/t3code#23789


**Full Changelog**: pingdotgg/t3code@v0.1.3-nightly.20261023.3592...v0.1.3-nightly.20261024.3604

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.3-nightly.20261024.3604
adampeterhiggins added a commit to adampeterhiggins/t3code that referenced this pull request Oct 24, 2026
* test: delete low-value tests and dead test-only exports (pingdotgg#24058)

* test(server): restore DST scheduling tests deleted in the test snap (pingdotgg#23991)

* test(web): restore project settings permission tests deleted in the test snap (pingdotgg#24011)

* test(mobile): restore clipboard secret-redaction test deleted in the test snap (pingdotgg#23980)

* fix(web): Cmd+B toggles the sidebar unless text is selected (pingdotgg#24063)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): agent-browser and Chrome no longer outlive the agent that started them (pingdotgg#21299)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Theo Browne <me@theo.li>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* test(client-runtime): restore render scheduler tests deleted in the test snap (pingdotgg#23977)

* fix(web): cmd+k search hides subagents and favors recent, whole-word matches (pingdotgg#24032)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* test(lint): new polling loops in tests now fail lint (pingdotgg#23983)

* ci: unused dependency patches fail in check:changed, not after push (pingdotgg#23988)

* fix(desktop): PDFs in the preview can be annotated (pingdotgg#24022)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): instructed compact runs without a bare compaction first (pingdotgg#24008)

Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* fix(desktop): reduce app crashes when a preview tab's renderer dies during agent screenshots (pingdotgg#24056)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): Stop stops a thread's subagents again (pingdotgg#23886)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(desktop): a stuck quit no longer leaves the app unkillable (pingdotgg#23873)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): keep blockquote text readable in every theme (pingdotgg#24036)

* fix(bitbucket): stop the startup sweep from flooding Bitbucket with 429s (pingdotgg#23889)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): screen readers hear when the open thread starts, needs you or finishes (pingdotgg#23752)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* perf(web): reduce allocations in streaming timeline scans (pingdotgg#23739)

* perf(web): reuse a collator when sorting changed-file trees (pingdotgg#23776)

* perf(scripts): check:changed finishes in about 10 s (pingdotgg#23581)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): size Usage header controls to the available width (pingdotgg#24123)

* perf(server): speed up large terminal clipboard sequences (pingdotgg#23819)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): make stale CLI service recovery actionable (pingdotgg#23541)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): pasted images show their upload tile instantly (pingdotgg#23832)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): clean up deleted threads worktrees with subagents (pingdotgg#23900)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): pause periodic PR discovery without foreground clients (pingdotgg#23852)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): meter checkpoint git subprocess attempts (pingdotgg#24218)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(web): clear stale resource monitor errors after retry (pingdotgg#24229)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(mobile): align draft workspace controls with the composer (pingdotgg#24239)

* feat(mobile): thread header minimizes on the Duo while reading back through history (pingdotgg#24235)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): center pull request timeline actions (pingdotgg#24259)

* fix(server): find the resource monitor when the server runs from its build output (pingdotgg#23965)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Victor Vogel <satsdev@only21mil.xyz>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Joseph Vidal <135430578+josephv123@users.noreply.github.com>
Co-authored-by: Theo Browne <me@theo.li>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com>
Co-authored-by: Ben Davis <45952064+bmdavis419@users.noreply.github.com>

* fix(pull-requests): list filters narrow on every host that can (pingdotgg#23922)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(pull-requests): a filtered list fills its page instead of waiting for a scroll (pingdotgg#23923)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(pull-requests): label and author filters search the host (pingdotgg#23924)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mobile): chat and composer chips stay readable in light mode (pingdotgg#22585)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): review thread avatars no longer clip in collapsed activity rows (pingdotgg#23545)

* ci: close "needs more info" issues after 7 days without a reply (pingdotgg#22628)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* fix(server): Codex accounts show ChatGPT's current plan names (pingdotgg#24200)

* fix(observability): desktop dev version and web environment match the other services (pingdotgg#23975)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(observability): custom resource attributes use the t3code prefix (pingdotgg#23974)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(mobile): Home and pull request lists let UIKit own their top inset (pingdotgg#24284)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mobile): keep the Duo's Home and pull request headers fixed (pingdotgg#24295)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): interrupts started by an agent no longer say "by user" in the timeline (pingdotgg#24299)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(relay): deploy on-demand preview stages for labeled PRs

Labeled same-repo PRs deploy stage pr-<n> behind the relay-preview environment reviewer gate. Unlabel or close tears the stage down, and a nightly job retries failed teardowns. Runtime-created managed endpoint tunnels and CNAMEs are swept by a PreviewTunnelSweep resource.

Known gaps, tracked as follow-ups: an interrupted preview deploy can leave runtime tunnels behind; repo-level relay secrets still bypass the environment gate until moved.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

* fix(mobile): HTML links in pull request comments open when tapped (pingdotgg#22110)

* perf(client): avoid full ordering scans for streamed replacements (pingdotgg#24264)

* fix(server): a fork's first /compact compacts its inherited history (pingdotgg#24172)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): agent recordings honor the browser frame rate setting (pingdotgg#23895)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(client-runtime): Stop clears commands already finished on the server (pingdotgg#23814)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): SSH environments on an older reused remote server explain the version mismatch instead of reconnecting forever (pingdotgg#23647)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): keep usage-limit wake action visible (pingdotgg#23803)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): reject pairing with an incompatible server protocol (pingdotgg#23789)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mobile): Live Activity stops shouting the running-agent count (pingdotgg#24329)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(usage): include Muse Code session history (pingdotgg#22443)

Co-authored-by: Theo Browne <me@theo.li>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(mobile): add Usage and Settings to workspace navigation (pingdotgg#23841)

* fix(mobile): keep iPad workspace columns aligned while resizing (pingdotgg#24182)

* fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546)

* fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(client-runtime): avoid duplicate handoff previews during startup (pingdotgg#24349)

* fix(mobile): Usage and Settings use the glass header and the Duo rail (pingdotgg#24348)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* perf(server): coalesce superseded streaming text updates (pingdotgg#24267)

* fix(server): stop flooding analytics with successful MCP tool calls (pingdotgg#24287)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(search): Cmd+K finds the right thread first, with indexed message search (pingdotgg#24343)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

---------

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Joseph Vidal <135430578+josephv123@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Theo Browne <me@theo.li>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com>
Co-authored-by: Ben Davis <45952064+bmdavis419@users.noreply.github.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: Victor Vogel <satsdev@only21mil.xyz>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Wiktor Golicz <56449542+Wiktor102@users.noreply.github.com>
Pipyakas pushed a commit to Pipyakas/t3code that referenced this pull request Oct 24, 2026
…gdotgg#23789)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 3f3a1bf)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Fix PR opened by an issue lead; enters the PR loop size:S 10-29 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Stable t3 pair prints an unusable token for a running Nightly/V2 server

1 participant