Skip to content

chore: sync with upstream T3 Code (v0.1.8-nightly.20261105.4218) - #60

Merged
nachogames merged 248 commits into
mainfrom
chore/sync-t3-20261105
Nov 5, 2026
Merged

nachogames merged 248 commits into
mainfrom
chore/sync-t3-20261105

Conversation

@nachogames

@nachogames nachogames commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Merges upstream T3 Code nightly v0.1.8-nightly.20261105.4218 (246 upstream commits) into Ctrl.

Native build needed: apps/mobile/package.json, app.config.ts and a new modules/t3-voice-transcription Android module changed, so the phone needs a new build (ctrl-android-v*), not an OTA.

Upstream highlights

  • Web: Copy thread copies a link that opens the thread; refresh button on provider status banners; open the full access menu from the new-thread context strip; new pairing links show without expanding the client list; long threads stream with ~70% less work-row derivation; styled Markdown markers in the composer are now editable.
  • Mobile: on-device Android dictation; copied thread links open the app (app.t3.codes app links); medium windows float the sidebar over the page; the inspector becomes a sheet without an inspector column.
  • Server: MCP Apps render from Claude tool calls; agents ask for secrets through request_secret; Claude models reported by Claude Code are listed; optional ghq-style clone folders; usage-limit keys and the EAS token can come from a secret provider; event pruning replaces event compaction; many PR-sync and recovery perf fixes.
  • Build: typecheck now runs effect-tsgo with Effect's diagnostics as errors; jose replaced by effect/jose; installs fail on unmet peers.
  • Policy: admins can set managed policy from a Group Policy template.

Resolutions

  • HomeScreen: took upstream's ScreenContent wrapper and sidebarSurface; kept Ctrl's home list items, group-member item type, drag scroll lock and edit-mode recycling.
  • AppBar.types / ThreadHeader: kept Ctrl's subtitleAccessory beside upstream's titleContent. Dropped the sidebar prop, because upstream moved it into AppBar.
  • ProjectionMaintenance: took upstream's event pruning. It replaces the compaction list that Ctrl had added thread.group-reordered to.
  • ClaudeProvider: kept Ctrl's skill-aware slash commands alongside upstream's reported models.
  • ws.ts: passed upstream's new readSettingsClient argument inside Ctrl's merged RPC layers.
  • Composer: upstream removed the marker extension, so Ctrl's flash and live-text plugins now sit in a small composer-overlays extension.
  • Sidebar: followed upstream's revert of the disconnected-environment shelf (revert(web): working threads stay in the Working shelf when their environment disconnects pingdotgg/t3code#31269). Kept Ctrl's Home row, battery and environment jump keys. The Home row shows upstream's new preparing status as working.
  • ConnectionsSettings: Ctrl's display name setting moved into upstream's per-environment access section, so it now names whichever machine is selected.
  • app.config: kept Ctrl's app icons, blocked permissions and shared mic string. Added upstream's app.t3.codes thread links. These are inert for Ctrl's package because that domain doesn't list it.
  • Kept both sides: clientRpcPermissions, OrchestratorMcpService, ClaudeAdapterV2 imports, inlineSkills test, voice-input controller, keybindings doc, evals README and run.ts (Claude Code harness plus upstream's --shell-model, empty-prompt replay and resultFile).
  • pnpm-lock: regenerated from upstream's lockfile.

Follow-ups the merge forced

  • push-relay: typecheck moved to effect-tsgo, and @cloudflare/workers-types bumped to v5 to meet wrangler's peer. Upstream dropped typescript from the catalog and now fails installs on unmet peers.
  • Direct push signs with effect/jose (upstream replaced jose): the APNs provider token (ES256) and the FCM OAuth assertion (RS256). apps/server no longer depends on jose; push-relay keeps it. Checked live with the real keys and a fake device token: Google issued an access token and APNs accepted the provider token (BadDeviceToken). A wrong key id and client email fail as InvalidProviderToken and OAuth. A new unit test verifies the FCM assertion. DirectPush also picked up two new lint rules (shorter header comment, named Effect.fn).
  • Ctrl code fixed for the new Effect diagnostics: typed tryPromise catches in ClaudeProvider, ClaudeModUi and evals, and Schema.TaggedError in the voice session.
  • Ctrl code fixed for upstream API changes: VoiceTranscriptionError takes fields, MCP tests now need AssetSigner, and the Claude query session has new methods.
  • Claude test fixture: it now answers reload_skills, which Ctrl's capability probe sends. Without that, two ProviderInstanceRegistry tests hung on the test clock.
  • agentContextBudget.json: set to the measured values. These are Ctrl's previous budget less upstream's own trim, so Ctrl added no text.

Verification

  • Migration guard: ✓ upstream migration ledger untouched.
  • vp run typecheck passes in contracts, shared, client-runtime, server, web, mobile, desktop, push-relay and evals.
  • Tests pass: server provider, persistence, mcp, plugins, reviewSessions, push, ws and the conflicted orchestration tests (2014 tests); web Sidebar.logic, dictation and composer-rich-text unit tests; composer browser tests (39); shared inlineSkills; client-runtime voice; contracts.
  • Known failures on this machine that the sync did not cause:
    • ClaudeSkillDispatch "plugin-qualified skill": a Ctrl test that also fails on main, because the implementation doesn't return skillName.
    • ClaudeSkills "merges plugin enablement": upstream's own test. It fails with upstream's files too, because macOS /var vs /private/var breaks the new repo-root cache.
  • Pre-commit fmt, lint and knip pass.
  • Reviewloop: 5/5, no findings, on the resolution diff (git's raw auto-merge with conflict markers → final tree, 35 files).
  • Not done: a real-client pass on web or mobile. The HomeScreen, Sidebar Home row, composer overlays and ConnectionsSettings ports want one.

Claude Opus 5.5 via Claude Code (syncing-ctrl-with-t3 skill).

🤖 Generated with Claude Code

astarktc and others added 30 commits November 3, 2026 10:27
…arent's turn (pingdotgg#29752)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…and longer fences (pingdotgg#29755)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ts or subagents (pingdotgg#29917)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… without raw provider text (pingdotgg#29877)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ect under diff.relative (pingdotgg#29879)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…in a subagent or side chat (pingdotgg#29891)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ingdotgg#28684)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…squash-merged (pingdotgg#29919)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ointed parent run (pingdotgg#25662)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
pingdotgg#29580)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
… the project folder (pingdotgg#29908)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Maria <maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oading it (pingdotgg#29893)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oved or steered (pingdotgg#29904)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… it inherited (pingdotgg#29794)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
shivamhwp and others added 29 commits November 5, 2026 06:44
…0085)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gdotgg#28622)

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

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ders (pingdotgg#24904)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…0421)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Elliot Drel <elliotdrel@gmail.com>
…gg#28928)

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

Co-authored-by: Maxime Cathala <84846651+mcathala@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…onnection in a loop (pingdotgg#23758)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
… it (pingdotgg#24946)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…7935)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…otgg#26464)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Albert Li <albertli_042@hotmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…wake (pingdotgg#28204)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ingdotgg#25341)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…ironment disconnects (pingdotgg#31269)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…pingdotgg#29639)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…ve Error (pingdotgg#31216)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#31277)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Resolutions:
- HomeScreen: took upstream's ScreenContent wrapper and sidebarSurface; kept Ctrl's home list items, group-member item type, drag scroll lock and edit-mode recycling.
- AppBar.types / ThreadHeader: kept Ctrl's subtitleAccessory beside upstream's titleContent; dropped the sidebar prop upstream moved into AppBar.
- ProjectionMaintenance: took upstream's event pruning, which replaces the compaction list Ctrl added thread.group-reordered to.
- ClaudeProvider: kept Ctrl's skill-aware slash commands with upstream's reported models; skills stay discovered after the slash commands.
- ws.ts: upstream's new readSettingsClient argument inside Ctrl's merged RPC layers.
- Composer: upstream removed the marker extension; Ctrl's flash and live-text plugins now ride a small composer-overlays extension.
- Sidebar: followed upstream's revert of the disconnected-environment shelf (pingdotgg#31269); kept Ctrl's Home row, battery and environment jump keys. The Home row maps the new "preparing" status to working.
- ConnectionsSettings: Ctrl's display name setting moved to upstream's per-environment access section.
- app.config: kept Ctrl's app icons, blocked permissions and shared mic string; added upstream's app.t3.codes thread links.
- clientRpcPermissions, OrchestratorMcpService, ClaudeAdapterV2 imports, inlineSkills test, voice-input controller, keybindings doc, evals README/run.ts: kept both sides.
- pnpm-lock: regenerated from upstream's lock.

Follow-ups the merge needed:
- Upstream typechecks with effect-tsgo and dropped typescript from the catalog: push-relay uses effect-tsgo and @cloudflare/workers-types v5 (wrangler's peer; installs now fail on unmet peers).
- apps/server declares jose, which it imported without declaring.
- Ctrl code fixed for the new Effect diagnostics (typed tryPromise catches, Schema.TaggedError) and upstream API changes (VoiceTranscriptionError fields, AssetSigner in MCP tests, new Claude query session methods).
- Claude test fixture answers reload_skills, which Ctrl's capability probe sends.
- agentContextBudget.json set to the measured values.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream replaced jose with effect/jose. Direct push now signs its APNs
provider token (ES256) and FCM OAuth assertion (RS256) the same way, so
apps/server no longer needs jose. push-relay keeps jose.

Checked live: Google issued an access token for the assertion and APNs
accepted the provider token (BadDeviceToken on a fake device); a wrong
key id and client email fail as InvalidProviderToken and OAuth.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nachogames
nachogames merged commit c157072 into main Nov 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.