ci(relay): add a forced manual relay deploy - #13550
Conversation
Alchemy does not redeploy the relay Worker when only a Config value read in its Init changes (alchemy-run/alchemy#1831). Changing a production variable such as RELAY_TUNNEL_CLEANUP_MODE therefore never reached the Worker, and neither would turning tunnel cleanup off during an incident. Add a manual trigger that runs alchemy deploy --force from main, and update the release steps to use it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The workflow adds a manual You can add or adjust custom eligibility rules. Learn more. |
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. |
## What's Changed * fix(web): sidebar Back always returns to the main app by @t3dotgg in pingdotgg/t3code#13516 * fix(desktop): desktop updates reconnect in seconds, not minutes by @t3dotgg in pingdotgg/t3code#12006 * fix(connect): remove tunnels after hosts go offline by @t3dotgg in pingdotgg/t3code#9386 * fix(mobile): capture a lit 6.9-inch lock screen in the agent-activity showcase by @juliusmarminge in pingdotgg/t3code#13522 * feat(grok): offer one-click updates through `grok update` by @juliusmarminge in pingdotgg/t3code#13523 * fix(mobile): make Android subscription usage widgets scrollable by @tris203 in pingdotgg/t3code#13474 * fix(web): keep sidebar terminal pulses in sync by @t3dotgg in pingdotgg/t3code#12962 * feat(web): add iPhone Duo 3D controls by @juliusmarminge in pingdotgg/t3code#12813 * fix(relay): export tunnel cleanup counters to Axiom by @juliusmarminge in pingdotgg/t3code#13528 * fix(server): Grok accounts with no usage yet no longer vanish from Limits by @jakeleventhal in pingdotgg/t3code#12799 * fix(server): report the Grok account email so usage limits merge across environments by @jakeleventhal in pingdotgg/t3code#12588 * feat(web): add usage page keybinding by @jakeleventhal in pingdotgg/t3code#9434 * chore: clear Effect language service suggestions by @juliusmarminge in pingdotgg/t3code#13536 * ci(relay): add a forced manual relay deploy by @juliusmarminge in pingdotgg/t3code#13550 * fix(web): selected text stays visible on a revealed file line by @t3dotgg in pingdotgg/t3code#13548 * fix(web): collapsed composer bar stops flipping its labels while you scroll by @t3dotgg in pingdotgg/t3code#13555 * fix(clients): sync status no longer flickers when opening running threads by @t3dotgg in pingdotgg/t3code#13551 * fix(server): newer Codex models get T3 Code's instructions again by @t3dotgg in pingdotgg/t3code#13547 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260924.2223...v0.0.43-nightly.20260925.2237 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260925.2237
Merges `pingdotgg/t3code` `78af372cf..ebdcda1` (39 commits) into the fork. The merge PR is not stacked; it branches from `main`. ## Resolution - **8 conflicts.** Each was resolved using the verdict `preflight.mjs` gave for it. The per-file details are in `docs/fork/upstream-merge-log.md`. - `apps/server/src/cli/pair.ts` stays deleted, as listed in `deletedUpstreamPaths`. - `ThreadPullRequestsPanel.tsx` takes upstream. Upstream pingdotgg#13061 now names the repository on each linked PR, so the fork's delta there has converged and the file is identical to upstream. - **New gate.** Upstream's chat code-block **Run** button (pingdotgg#13060) runs `scripts.run` with a synthetic `chat-code-block` id. The Moatless backend rejects that id with `ScriptNotFound`, so `ChatView` hides the button on environments that report `workspaceScripts`. This is recorded in the inventory (`host-run-scripts`) and in `gaps.md`. - **Lint.** Upstream pingdotgg#13371/pingdotgg#13397 made `shadcn(no-arbitrary-values)` a lint error, which flagged 130 hits in fork code, mostly `settings/moatless/**`. I mapped each one onto the type scale the same way upstream mapped its own: `text-[13px]` becomes `text-sm`, `[11px]` becomes `text-2xs`, `[10.5px]` and `[.65rem]` become `text-3xs`, and so on. Some Moatless settings text therefore renders at slightly different sizes. - **Type fix.** The fork's Mermaid `MarkdownCodeBlock` now passes upstream's required `isStreaming` prop. - **Lockfile.** `pnpm-lock.yaml` was re-derived with `install.mjs`. - **File counts.** 515 files landed, against 489 in the upstream range. The fork delta is 756 files. The gap is explained in the log entry. ## Verification - A full run of `verify.mjs` passes all 10 checks, tests included. - The unsupported-method derivation reports no ADD and no DROP. - `resolution-check.mjs` and `duplicate-adds.mjs` report nothing. ## Upstream feature classification ### Usable as-is - The sidebar Back button always returns to the main app (pingdotgg#13516), including Escape on settings. - Linked PRs show repository names (pingdotgg#13061). - Colors come from theme tokens, text uses scale values, and disabled controls have consistent opacity (pingdotgg#13371, pingdotgg#13397, pingdotgg#11441). - Working and monitoring threads fade in the sidebar again (pingdotgg#13506). Sidebar terminal pulses stay in sync (pingdotgg#12962). - Selected text stays visible on a revealed file line (pingdotgg#13548). - The usage page has a keybinding, `usage.open` (pingdotgg#9434). ### Unsupported in Moatless / needs implementation - **Per-thread auto-settle switch (pingdotgg#11846).** This adds the `thread.auto-settle.set` command, the `thread.auto-settle-set` event, and the `threadAutoSettleOptOut` capability. Moatless never auto-settles and does not report the capability, so the menu item stays hidden. - **Run a shell command from a chat code block (pingdotgg#13060).** Gated off on `workspaceScripts` environments. It needs `scripts.run` to accept an inline command. - **iPhone Duo 3D device controls (pingdotgg#12813).** Behind `FEATURES.deviceHub`, which is off. - **One-click Grok CLI update (pingdotgg#13523).** Provider management is behind `FEATURES.providerConfiguration`, which is off. - **Relay/tunnel cleanup and a managed endpoint reaper (pingdotgg#9386, pingdotgg#13528).** Also the forced relay deploy workflow (pingdotgg#13550). Relay is decided out of the fork. - **Desktop update reconnect (pingdotgg#12006).** Electron is not a target. ### Backend behavior to consider reproducing in Moatless - **Racy edits in review diffs (pingdotgg#12613).** The review index copy rounds its mtime down so that edits made in the same second as the copy still appear in the diff (`apps/server/src/vcs/GitVcsDriverCore.ts`). - **Codex 0.156 (pingdotgg#13481, pingdotgg#13480).** Codex 0.156 is now the minimum, and the app-server protocol was regenerated (`packages/effect-codex-app-server`). - **Claude banked resets (pingdotgg#13118).** Upstream shows and redeems them (`claudeResetCredits.ts`, `resetCreditCoordinator.ts`). Separately, Grok account emails are reported so usage limits merge across environments, and Grok accounts no longer vanish (pingdotgg#12588, pingdotgg#12799). Codex keeps its reset answer when the re-probe fails (pingdotgg#13363). - **ACP (pingdotgg#13386).** Keeps one answer when a running tool reports progress. - **Antigravity (pingdotgg#13388, pingdotgg#13389).** Stop ends commands that outlived their turn, and Windows unpacking stays under MAX_PATH. - **Streamed section titles (pingdotgg#13504).** A title waits for the text beneath it. - **OpenTelemetry (pingdotgg#13355, pingdotgg#13469).** The kill switch is honored, and a malformed `OTEL_RESOURCE_ATTRIBUTES` no longer stops startup. - **Settlement.** If Moatless ever adds automatic settlement, it must honor the per-thread opt-out from pingdotgg#11846. The gaps register (`docs/fork/gaps.md`) was updated for the auto-settle capability, the chat-run gate, and three runtime-fix bullets. ## Left undone - Four files that auto-merged cleanly carry small fork deltas with no path-policy entry: `AgentsPanel.tsx`, `ThreadTerminalDrawer.tsx`, `client-runtime/src/state/threadDetail.ts` and `threadReducer.test.ts`. - `preflight.mjs` labels a modify/delete conflict on a `deletedUpstreamPaths` entry as `[unlisted]`. That is a minor script bug and was not fixed here. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- Moatless task: https://moatless.soaplabstest.com/tasks/8f4381ee-c9ed-4fc5-9ffd-039ee15731ca
* test(relay): remove constant-restating database mode test (pingdotgg#13932) * fix(server): let agents use simctl and adb alongside device tools (pingdotgg#13908) * feat(observability): honor OTEL_*_EXPORTER=none per signal (pingdotgg#13736) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(clients): hide duplicate Cursor Keychain prompts (pingdotgg#13870) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(build): validate Linux node-pty prebuilds in Windows artifacts (pingdotgg#13867) * test(usage): assert contract mismatch details (pingdotgg#13861) * fix(usage): identify client version mismatches (pingdotgg#8208) * fix(usage): omit Cursor warning when no login is saved (pingdotgg#13820) * fix(usage): tolerate newer provider variants (pingdotgg#10076) * fix(server): background git status fetches no longer fill the disk with failed repacks (pingdotgg#13812) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): cut idle wakeups from the Connect relay and session reaper (pingdotgg#13774) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(clients): saving the thread list cache no longer freezes the UI (pingdotgg#13767) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): background sweeps only read threads that can still settle (pingdotgg#13765) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(observability): the renderer trace proxy stops tracing itself (pingdotgg#13761) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(clients): sort projects and settled threads without re-parsing dates per comparison (pingdotgg#13759) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): opening Diagnostics no longer loads the whole trace ring into memory (pingdotgg#13763) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(observability): stop writing empty spans on spawns, projected events, and idle polls (pingdotgg#13756) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): let Antigravity inspect unsupported files by path (pingdotgg#13339) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Show a focus ring on sidebar thread and draft rows (pingdotgg#13344) * fix(server): bump node-pty to 1.2.0-beta.15 for linux-arm64 prebuild (pingdotgg#13748) * fix(server): prune expired replay-protection files from the secrets directory (pingdotgg#13695) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): installed editors no longer vanish when discovery is slow (pingdotgg#13669) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(editors): stop treating the agy CLI as the Antigravity IDE (pingdotgg#7079) * fix(opencode): accept v2 serve ready line when spawning server (pingdotgg#13651) * fix(usage): hide the Cursor keychain prompt when Cursor isn't set up (pingdotgg#13714) * perf(server): stop re-running git for every project each minute (pingdotgg#13689) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(observability): record event loop stalls in the server trace (pingdotgg#13697) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): per-thread settlement and PR checks no longer rebuild the whole thread list (pingdotgg#13691) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(client): slow servers finish loading the thread list instead of loading it twice (pingdotgg#13683) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): build the thread list snapshot without decoding it twice (pingdotgg#13693) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(observability): write a server heap snapshot on SIGUSR2 (pingdotgg#13694) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): pull request sync reads only threads with linked pull requests (pingdotgg#13704) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(cli): summarize the server trace file from the command line (pingdotgg#13698) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): the SQLite WAL file shrinks back after large writes (pingdotgg#13684) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(cli): t3 triage points agents at log files that exist (pingdotgg#13685) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(observability): name the command on subprocess spans (pingdotgg#13701) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(server): stop remapping every thread on each thread event (pingdotgg#13720) Co-authored-by: Claude <noreply@anthropic.com> * refactor(observability): name each service after its application (pingdotgg#13699) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(usage): price Cursor cache savings by base model (pingdotgg#13731) * perf(server): avoid rereading unchanged files in review previews (pingdotgg#13395) * fix(server): load Cursor keyring with createRequire (pingdotgg#13678) * fix(terminal): settling a thread closes its idle shells (pingdotgg#13673) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(observability): honor the standard OTLP endpoint, headers, and protocol variables (pingdotgg#13492) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(sqlite): retry failed statement preparations (pingdotgg#10584) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * feat(usage): read cursor, opencode, and antigravity history (pingdotgg#10409) Co-authored-by: Yash Singh <saiansh2525@gmail.com> * fix(usage): price Claude fast-mode requests at the fast rate (pingdotgg#13599) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(dev): one t3.json setup action that works on every OS (pingdotgg#13589) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(release): ship a Linux .deb that updates itself (pingdotgg#13575) The Linux release build now also makes a .deb in the same electron-builder run as the AppImage, and the release publishes it. electron-builder lists it in latest-linux.yml and writes resources/package-type into it, so the app updates a .deb install through electron-updater, which installs the new .deb with dpkg. The desktop updater now allows that path. The .deb uses xz in threaded mode (XZ_DEFAULTS=-T0): 113 MB in place of 141 MB with gzip. The Linux arm64 release job moves to a 16-vCPU Blacksmith arm64 runner. The download page, README, install guide, and release docs list the .deb. Based on community work in pingdotgg#4071, pingdotgg#5139, pingdotgg#4900, and pingdotgg#4887. Co-authored-by: chukfinley <chuk@chuk.dev> Co-authored-by: Primož Ajdišek <bigpod@bigpod.si> Co-authored-by: benthecarman <benthecarman@live.com> Co-authored-by: NaveDanan <nave0712@gmail.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(clients): a preview app no longer knocks the desktop's own server offline (pingdotgg#13577) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mcp): preview errors tell agents what to do instead (pingdotgg#13559) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mcp): preview snapshots fit in the agent's tool output again (pingdotgg#13558) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): newer Codex models get T3 Code's instructions again (pingdotgg#13547) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(clients): sync status no longer flickers when opening running threads (pingdotgg#13551) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * ci(relay): add a forced manual relay deploy (pingdotgg#13550) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): report the Grok account email so usage limits merge across environments (pingdotgg#12588) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com> * fix(server): Grok accounts with no usage yet no longer vanish from Limits (pingdotgg#12799) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(relay): export tunnel cleanup counters to Axiom (pingdotgg#13528) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(grok): offer one-click updates through `grok update` (pingdotgg#13523) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(connect): remove tunnels after hosts go offline (pingdotgg#9386) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * feat(codex): require Codex 0.156 and regenerate its protocol (pingdotgg#13481) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(codex): the protocol generator runs again on Effect rc.115 (pingdotgg#13480) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(antigravity): keep Windows runtime unpacking under MAX_PATH (pingdotgg#13389) Co-authored-by: javiergusart <42075376+javiergusart@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(acp): keep one answer when a running tool reports progress (pingdotgg#13386) Co-authored-by: adeebahmad01 <52380344+adeebahmad01@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(marketing): use the official OpenCode and Antigravity logos (pingdotgg#13365) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(observability): a malformed OTEL_RESOURCE_ATTRIBUTES no longer stops startup (pingdotgg#13469) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * feat(server): show and redeem Claude banked resets (pingdotgg#13118) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * chore(ci): use GPT 6 Sol Max for check agents (pingdotgg#13473) * fix(server): keep Codex's reset answer when the re-probe fails (pingdotgg#13363) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): preserve racy edits in review diff previews (pingdotgg#12613) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * feat(observability): honor the OpenTelemetry kill switch (pingdotgg#13355) Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(shared): preserve final quoted empty CSV records (pingdotgg#11425) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> * fix(server): stop replaying old agent alerts on restart (pingdotgg#13340) * fix(providers): restore compatibility ranges for every harness (pingdotgg#13328) * fix(ci): shard release tests like pull request CI (pingdotgg#13321) * fix(sync): resolve wave1 test/build fallout from upstream rebase After rebase of 78 upstream commits (78 picks, 70 drops) onto c37294d, the following merge-conflict artefacts remained because the rebase strategy kept fork-exclusive V2/Pi source while picking upstream implementations of shared files: - packages/shared/src/usageMerge.test.ts: removed orphan nested it() declaration from commit 9, removed dangling expect+}) from rebase residue, and renamed staleEnvironments -> contractMismatches to match the upstream field that commit 9/11/13 introduced (the fork exclusively uses the contractMismatches field name). - apps/server/src/usage/usagePricing.ts: collapsed the doubly-nested conflict markers left by commits 61 and 75 in cacheSavingsUsd into the upstream clause that resolves to rateModel ?? record.model. - apps/server/src/provider/Drivers/CursorDriver.ts: replaced with the upstream main implementation so the file matches the upstream auth/modelDiscovery shape; the fork V2 Cursor path was already covered by PiAdapterV2.test.ts (61/61 green) and is not touched. - apps/server/src/provider/Layers/CursorProvider.test.ts: restored the fork-main version (252 lines) because the upstream version exercises a CursorProvider path that this fork does not implement (fork ships only the V2 Pi adapter and the legacy Cursor provider layer tests); 7/7 green. Wave1 critical-point verification (vp test): packages/shared/src/usageMerge.test.ts 30/30 apps/server/src/orchestration-v2/Adapters/PiAdapterV2.test.ts 61/61 apps/server/src/usage/UsageService.test.ts 14/14 apps/server/src/provider/Layers/CursorProvider.test.ts 7/7 apps/server/src/provider/cursorCredentialStore.test.ts 1/1 packages/shared/src/usageFormat.test.ts 9/9 packages/client-runtime/src/state/usage.test.ts 9/9 apps/server/src/serverLogger.test.ts 6/6 137/137 --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Tristan Knight <admin@snappeh.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Ryan Ilano <ryanilano@users.noreply.github.com> Co-authored-by: Ephraim <ephraim39hr14m@gmail.com> Co-authored-by: Bob Fowler <bob@rjf.ca> Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com> Co-authored-by: Shirish Pothi <183252392+shirishpothi@users.noreply.github.com> Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: chukfinley <chuk@chuk.dev> Co-authored-by: Primož Ajdišek <bigpod@bigpod.si> Co-authored-by: benthecarman <benthecarman@live.com> Co-authored-by: NaveDanan <nave0712@gmail.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: javiergusart <42075376+javiergusart@users.noreply.github.com> Co-authored-by: adeebahmad01 <52380344+adeebahmad01@users.noreply.github.com> Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
## What's Changed * feat(mobile): add v2 preview store builds by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/11966 * fix(mobile): block incompatible server connections by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/11974 * fix(web): keep PR controls readable in narrow panels by @Bil0000 in https://github.com/pingdotgg/t3code/pull/11962 * fix(server): block updates under legacy service launchers by @Gigioxx in https://github.com/pingdotgg/t3code/pull/11940 * fix: reduce GitHub quota use with sharing enabled by @Bil0000 in https://github.com/pingdotgg/t3code/pull/11888 * fix(usage): refresh limits when the tab opens by @Bil0000 in https://github.com/pingdotgg/t3code/pull/11928 * fix(contracts): avoid Intl.Segmenter in monogram validation (Hermes crash) by @bompus in https://github.com/pingdotgg/t3code/pull/11984 * feat(lint): extend Hermes API bans with a configurable API list by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/11982 * fix(server): reuse Git index metadata during checkpoint capture by @im-kvijay in https://github.com/pingdotgg/t3code/pull/10792 * refactor: give project monograms their own icon variant by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/11993 * fix(clients): disable incompatible environments during discovery by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/11990 * fix(antigravity): stop health checks from filling the disk with _MEI folders by @t3dotgg in https://github.com/pingdotgg/t3code/pull/12008 * fix(mobile): bare t3code:// links no longer reset navigation to Home by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/12002 * fix(server): keep Claude rewind when fork history length changes by @maria-rcks in https://github.com/pingdotgg/t3code/pull/11954 * fix(mobile): use native toolbar search for licenses by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12011 * fix(server): detect unsupported legacy Android command-line tools by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/12017 * fix(web): stop the worktree setup card from flashing and shifting by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12015 * fix(clients): show unsupported environments as neutral rows with their machine icon by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12026 * fix(clients): hold the discovered machine icon across relay refreshes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12030 * fix(server): resolve Node for standalone helper scripts by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12033 * feat(web): reveal timestamps on tool rows and turn folds by @saphid in https://github.com/pingdotgg/t3code/pull/8641 * docs: make the standalone installer the primary way to get the CLI by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/11696 * fix(web): submit PR comments with Cmd/Ctrl+Enter by @flamboh in https://github.com/pingdotgg/t3code/pull/11994 * refactor(web): centralize pull request icon state presentation by @flamboh in https://github.com/pingdotgg/t3code/pull/11144 * feat(providers): expose native slash commands across clients by @maria-rcks in https://github.com/pingdotgg/t3code/pull/11519 * feat(web): add send shortcut and follow-up controls by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12075 * feat(chat): show provider thinking traces by @maria-rcks in https://github.com/pingdotgg/t3code/pull/11784 * feat(usage): show OpenCode Go, Cursor, and Grok subscription limits by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12115 * fix(web): dropped folders become path chips on the local environment and are refused on remote ones by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/12001 * fix(web): adapt provider settings to available content width by @tris203 in https://github.com/pingdotgg/t3code/pull/12138 * fix(web): show private repository media in pull request tabs by @maria-rcks in https://github.com/pingdotgg/t3code/pull/11706 * fix(review): show complete counts and load large diffs progressively by @tris203 in https://github.com/pingdotgg/t3code/pull/10822 * fix(web): prioritize linked pull requests over automatic diffs by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12142 * feat(cli): show installer and update download progress by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12044 * fix(web): simplify agent approval prompts by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12082 * fix(web): show tooltips for composer environment and workspace controls by @flamboh in https://github.com/pingdotgg/t3code/pull/11787 * fix(chat): group thoughts into the changing tool activity line by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12147 * fix(web): keep tool timestamps before disclosure chevrons by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/12152 * fix(web): default diff panel to working tree by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12139 * design(mobile): unify Android Material layouts and native controls by @PixPMusic in https://github.com/pingdotgg/t3code/pull/11841 * feat(web): choose themes from chat with color previews by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12143 * fix(web): align follow-up and license settings controls by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12167 * fix(web): align composer task rows by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12165 * fix(mobile): prevent Android compose FAB animation jitter by @PixPMusic in https://github.com/pingdotgg/t3code/pull/12169 * fix(server): keep large sparse checkouts on the fast checkpoint path by @vedprakash2302 in https://github.com/pingdotgg/t3code/pull/12154 * feat(web): make pull request comments easier to scan by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12150 * fix(server): propagate linked pr changes and settle threads immediately by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12161 * fix(web): reuse cached GitHub PR details across entry points by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12168 * Remove `new` badge from Fable 5.1 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12173 * fix(web): show author avatars in pull request previews by @extoci in https://github.com/pingdotgg/t3code/pull/12125 * fix(server): settle cancelled worktree setup before rollback by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12176 * feat(mobile): port worktree setup progress and agent handoff by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12177 * fix(server): flush checkpoint objects and refs before publishing them by @Mnigos in https://github.com/pingdotgg/t3code/pull/10944 * fix(server): keep ready checkpoints when a later placeholder arrives by @Adolanium in https://github.com/pingdotgg/t3code/pull/8432 * fix(server): keep VCS waits from blocking turn completion by @Vrtak-CZ in https://github.com/pingdotgg/t3code/pull/11970 * fix(web): keep header spacing stable when sidebar drawer opens by @flamboh in https://github.com/pingdotgg/t3code/pull/12162 * fix(web): fall back when pull request avatars fail by @tastelessjolt in https://github.com/pingdotgg/t3code/pull/11728 * feat(web): enable rich text composer by default by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12160 * feat(web): make keybindings searchable from settings search by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12175 * fix(web): preserve thread reading positions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12144 * fix(diff): collapse files by default by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12190 * fix(web): folder links from chat open the file tree instead of a broken preview by @pc-style in https://github.com/pingdotgg/t3code/pull/10909 * feat(web): command palette search matches thread IDs by @saphid in https://github.com/pingdotgg/t3code/pull/11185 * fix(web): align notification icons with titles by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12202 * fix(skills): support unicode currency symbols as skill aliases by @WilgotM in https://github.com/pingdotgg/t3code/pull/12098 * feat(settings): add automatic storage cleanup per machine and project by @maria-rcks in https://github.com/pingdotgg/t3code/pull/11598 * feat(web): command palette finds the pull requests and usage pages by @flamboh in https://github.com/pingdotgg/t3code/pull/12211 * feat(web): start new threads with multiple models in separate worktrees by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12179 * fix(mobile): keep screen awake during dictation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12227 * feat(mobile): add favorites to model picker by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12231 * fix(desktop): keep preview picking active across subframe navigation by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/9741 * fix(shared): keep the newest shared usage scan by @yashranaway in https://github.com/pingdotgg/t3code/pull/10315 * fix(web): keep thoughts and failed tool calls in one activity row by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12270 * fix(web): avoid reopening settled threads when adding projects by @dominic-r in https://github.com/pingdotgg/t3code/pull/11804 * feat(mobile): make Settings easier to navigate and scope by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12272 * fix(mobile): prevent overlapping text and UI on Android chat messages by @Exotic209093 in https://github.com/pingdotgg/t3code/pull/11611 * feat(web): pull request files can be marked as viewed by @yordis in https://github.com/pingdotgg/t3code/pull/7721 * fix(web): keep composer banners compact and readable by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12166 * fix(web): collapse thoughts within tool groups by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12302 * fix(usage): preserve saved totals after transcript cleanup by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12304 * fix(mobile): show Agent behavior icon on Android by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12316 * fix(web): keep PR panel actions in the current thread by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12320 * fix(web): keep browser pages aligned during panel animations by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12329 * fix(server): bound provider event log records before serialization by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12305 * fix(server): reject file rewind in shared workspaces by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12306 * fix(server): capture checkpoints when baseline lookup fails by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12307 * fix(server): refresh file search outside checkpoint processing by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12308 * fix(web): keep chat from jumping when the scroll-to-end pill mounts by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/12317 * fix(server): checkpoint workspaces with empty nested repositories by @saphid in https://github.com/pingdotgg/t3code/pull/12181 * chore(review): keep review bots out of the vendored .repos references by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12333 * fix(server): pass Codex image attachments by path to avoid oversized requests by @saphid in https://github.com/pingdotgg/t3code/pull/11050 * feat(web): filter sidebar from thread menu by @saphid in https://github.com/pingdotgg/t3code/pull/8719 * feat(web): open diff files from a right-click context menu by @saphid in https://github.com/pingdotgg/t3code/pull/11842 * fix(web): keep numbered jumps from stealing browser tabs by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/12315 * fix(mobile): define Clerk colors in every Uniwind theme by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12344 * refactor(web): reuse searchable picker inputs by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12353 * fix(web): share touch-visible pull request edit actions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12370 * fix(mobile): share accessible connection trace controls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12371 * fix(mobile): share settings control row layout by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12356 * refactor(web): share diagnostic process actions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12358 * refactor(mobile): share Android toolbar search fields by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12359 * refactor(web): share settings group surfaces by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12360 * refactor(web): reuse inline settings actions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12362 * refactor(mobile): share thread list section controls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12363 * refactor(mobile): share connection form fields by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12364 * refactor(mobile): share local environment lists by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12365 * refactor(mobile): share file preview feedback by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12368 * refactor(web): share standalone page layout by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12354 * fix(mobile): share settings action row defaults by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12369 * fix(mobile): share request action button defaults by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12366 * fix(web): share accessible color picker controls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12355 * fix(mobile): use singular label for one settings environment by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12282 * feat(mobile): add copy thread ID to thread list actions by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/12228 * fix(mobile): remove Android input underline backgrounds by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12394 * chore(deps): upgrade Effect to rc.115 and Alchemy to beta.78 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12326 * chore(refs): sync Effect and Alchemy references to rc.115 and beta.78 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12327 * chore(relay): deploy with the Alchemy CLI and publish client config through an Action by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12401 * chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/pingdotgg/t3code/pull/12411 * fix(git): prevent stale branch selections from restoring files by @yashranaway in https://github.com/pingdotgg/t3code/pull/10574 * chore(deps): bump parents that carry vulnerable transitive dependencies by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12417 * fix(web): keep a file-to-symlink type change from crashing the diff view by @Mnigos in https://github.com/pingdotgg/t3code/pull/11075 * Use T3 Device panel for mobile testing by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12414 * fix(web): client spans reach the trace proxy again by @yordis in https://github.com/pingdotgg/t3code/pull/12332 * fix(bitbucket): preserve rate limits from optional PR reads by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12486 * fix(mobile): synchronize native permission registry access by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12482 * fix(build): retain multiple license notices for one package by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12489 * fix(build): parse executable imports without matching source strings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12488 * fix(mobile): synchronize native notification delegates by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12483 * fix(relay): accept delegated thread IDs in activity routes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12484 * fix(git): explain fetch failures without exposing remote output by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12485 * fix(web): sidebar search matches message content by @koushikxd in https://github.com/pingdotgg/t3code/pull/11761 * fix(server): restore secrets when settings persistence fails by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12487 * fix(ci): accept V2 transfer reports without cross-scenario comparisons by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12492 * fix(web): speed up PR previews with fewer GitHub requests by @dominic-r in https://github.com/pingdotgg/t3code/pull/11825 * fix(server): retry transient git failures during checkpoint capture by @saphid in https://github.com/pingdotgg/t3code/pull/11665 * fix(mobile): keep archived threads visible during iOS search by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12420 * perf(mobile): isolate Material You conversion on Android by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12379 * perf(mobile): isolate iOS Live Activity imports by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12380 * refactor(mobile): split home headers by platform by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12381 * refactor(mobile): split native menus by platform by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12382 * refactor(mobile): isolate thread row appearance by platform by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12383 * refactor(mobile): split settings selection rows by platform by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12384 * refactor(mobile): centralize platform header rendering by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12388 * refactor(mobile): configure thread headers through the shared core by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12389 * refactor(mobile): share file header actions and search configuration by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12390 * refactor(mobile): share terminal header and menu configuration by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12391 * refactor(mobile): share archived thread header configuration by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12399 * refactor(mobile): compose review menus through the shared header by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12400 * feat(mobile): search projects when starting a task by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12496 * fix(mobile): preserve multiple model favorites by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12505 * feat(server): export log records over OTLP by @yordis in https://github.com/pingdotgg/t3code/pull/12493 * fix(mobile): use native settings and snooze controls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12512 * feat(web): sort pull requests by what is blocked on me by @flamboh in https://github.com/pingdotgg/t3code/pull/12508 * fix(mobile): prefer pull-to-refresh on list screens by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12515 * fix(acp): accept SDK elicitation requests by @shivamhwp in https://github.com/pingdotgg/t3code/pull/11294 * fix(release): read relay configuration without loading deployment providers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12518 * fix(ci): reconcile native change labels against pinned commits by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12517 * fix(release): strip Alchemy progress before parsing relay state by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12519 * refactor: remove obsolete code by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9917 * fix(server): release oversized pull request diff cache entries by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12523 * feat(mobile): view and control agent devices by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12531 * fix(preview): recover host registration after request timeouts by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12535 * fix(mobile): align built-in theme colors with desktop by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12534 * feat(desktop): export main process telemetry over OTLP by @yordis in https://github.com/pingdotgg/t3code/pull/12520 * fix(codex): surface app permission requests as approvable by @Exotic209093 in https://github.com/pingdotgg/t3code/pull/7861 * chore(desktop): leave main process metrics export off until a metric exists by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12540 * fix(release): drop placeholder allowBuilds entry that broke desktop builds by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12544 * fix(mobile): adapt workspace navigation and expand controls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12551 * chore(mobile): add dev client script with preview environment by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12558 * fix: detect installed editors outside PATH by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12439 * fix(web): show plain text in collapsed thought previews by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12377 * fix(web): wrap long titles in confirmation dialogs by @saphid in https://github.com/pingdotgg/t3code/pull/12571 * fix(mobile): keep the Android composer placeholder on one line by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/12605 * fix(web): restore providers settings heading by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12552 * Add new GitHub user 'yordis' to VOUCHED.td by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12546 * chore: vouch cestercian by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12638 * fix(web): keep desktop annotation screenshots under CSP by @cestercian in https://github.com/pingdotgg/t3code/pull/12636 * fix(web): keep typed text when a question option is clicked by @cestercian in https://github.com/pingdotgg/t3code/pull/12577 * fix(server): empty Claude homePath shares continuation with ~/.claude by @cestercian in https://github.com/pingdotgg/t3code/pull/12624 * fix(desktop): include SnapShot app text for Flatpak and GTK4 by @cestercian in https://github.com/pingdotgg/t3code/pull/12635 * fix(server): surface ACP stderr when cursor-agent exits at session start by @cestercian in https://github.com/pingdotgg/t3code/pull/12625 * fix(web): align pull request state glyph to top of row by @akash3444 in https://github.com/pingdotgg/t3code/pull/11268 * fix(web): align menu item icons in pull request detail panel by @akash3444 in https://github.com/pingdotgg/t3code/pull/11263 * fix(web): honor whitespace settings in pull request diffs by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12438 * fix(web): keep citation comment when popover is dismissed by @flamboh in https://github.com/pingdotgg/t3code/pull/10831 * fix(web): keep narrow chat headers readable and aligned by @shivamhwp in https://github.com/pingdotgg/t3code/pull/12453 * refactor(observability): hold OTLP export settings per signal by @yordis in https://github.com/pingdotgg/t3code/pull/12657 * fix(web): explain what enabling network access means in its confirmation by @Mnigos in https://github.com/pingdotgg/t3code/pull/10098 * fix(web): reuse current PR status in the sidebar by @flamboh in https://github.com/pingdotgg/t3code/pull/12545 * fix(web): stabilize pull request loading layout by @flamboh in https://github.com/pingdotgg/t3code/pull/12721 * fix(desktop): align preview recording cursors and show input feedback by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12779 * fix(web): the Run on / Workspace menu closes after a pick by @Mnigos in https://github.com/pingdotgg/t3code/pull/12685 * fix(web): keep portaled menus clickable over Electron drag regions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12527 * fix(web): render citations in queued messages by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12403 * fix(web): keep the timeline still when the resting composer expands by @flamboh in https://github.com/pingdotgg/t3code/pull/12771 * fix: composer hero reads project name to screen readers by @Leos-Khai in https://github.com/pingdotgg/t3code/pull/12397 * fix(mobile): respect word wrap in diffs by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/12590 * fix(web): allow full contrast in assistant replies by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12405 * fix(web): pull request chips share the link hover preview by @flamboh in https://github.com/pingdotgg/t3code/pull/12719 * fix(web): compact the worktree setup glass popover by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12802 * fix(web): route keyboard submit through the primary worktree action by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12526 * fix(web): skip image inline chip when composer is empty by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12528 * fix(web): only show notice details when text is clipped by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/12760 * fix(devices): recover simulator streams after failures by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12639 * chore(server): bump device tooling versions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12809 * fix: allow more attachments without raising the image payload budget by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12620 * fix(web): device Reconnect starts one stream instead of two by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12808 * fix(server): tolerate shutting down an iOS simulator that is already off by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12807 * feat(web): use the linked pull request row layout on the pull requests page by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12536 * fix(clients): keep backslashes in copied Codex citations by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/12243 * feat(web): truncate branch names and paths in the middle by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12805 * fix(web): paste markdown with inline code inside bold, italic, or strikethrough by @Gigioxx in https://github.com/pingdotgg/t3code/pull/12290 * feat(web): show the pull request refresh spinning in the detail header by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12833 * fix(web): dismiss composer suggestions with Escape by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/12836 * fix(mobile): keep the source worktree when starting a thread on a branch by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/12623 * fix(web): keep composer controls visible while they fit by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12837 * feat(devices): show installed and running tool versions per host by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12816 * feat(devices): show automatic update progress and host retry by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12817 * feat(devices): add read-only update discovery and remote ownership by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12818 * fix(devices): safely reclaim obsolete managed tool versions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12819 * fix(web): match thread notification icons to sidebar status by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12806 * fix(web): move sidebar shelves as one block by @maria-rcks in https://github.com/pingdotgg/t3code/pull/11772 * fix(web): offer undo after unpinning a thread by @saphid in https://github.com/pingdotgg/t3code/pull/10744 * feat(web): undo settle, snooze and archive, with a mod+z shortcut by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12848 * fix(mobile): use a proper pull request icon on iOS by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12855 * test(web): remove redundant favicon test by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/12856 * feat(devices): offer manual updates in tool version details by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12877 * feat(web): answer pull request actions on the row at once by @maria-rcks in https://github.com/pingdotgg/t3code/pull/12843 * fix(mobile): stop iOS autocorrect from rewriting search queries by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12949 * fix(web): pull request embed chip shows the state icon by @flamboh in https://github.com/pingdotgg/t3code/pull/12951 * fix(web): dismiss selection actions when pressing buttons by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/12950 * fix(web): name message copy actions accurately by @saphid in https://github.com/pingdotgg/t3code/pull/12865 * fix(contracts): old message-sent events without turnId no longer stop the server from starting by @Mnigos in https://github.com/pingdotgg/t3code/pull/12763 * fix(web): the custom snooze calendar starts the week where the locale does by @Mnigos in https://github.com/pingdotgg/t3code/pull/12745 * feat(server): let t3.json limit or disable submodule init in new worktrees by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12953 * feat(settings): resolve t3.json inside the project settings resolver by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12954 * feat(settings): choose how new worktrees initialize submodules by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12955 * fix(web): show thread undo notice in the sidebar by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12972 * feat(web): merge the comment and review buttons into one composer by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12945 * fix(web): allow text selection when renaming threads by @carterwsmith in https://github.com/pingdotgg/t3code/pull/12935 * chore(lint): report className restyling of components/ui exports by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12982 * refactor(web): drop className overrides that repeat the base styles by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12984 * fix(web): close menus when clicking into the browser tab by @Gigioxx in https://github.com/pingdotgg/t3code/pull/11148 * refactor(web): give Spinner and RefreshIcon a size prop by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12985 * fix(web): retry failed attachment uploads after reconnect by @StiensWout in https://github.com/pingdotgg/t3code/pull/10338 * fix(web): respect panel motion in composer transitions by @gsimone in https://github.com/pingdotgg/t3code/pull/11064 * fix(web): read panel animation settings in the composer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13098 * feat(models): add opus 5.5 without changing existing aliases by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13094 * refactor(web): use ghost-muted where ghost buttons restyled to muted by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13020 * refactor(web): fold repeated overrides into ui defaults by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13021 * refactor(web): mark the current menu value with MenuRadioGroup by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13022 * refactor(web): add an active prop to CommandItem by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13023 * chore(lint): exempt CollapsibleTrigger from no-restyle by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13024 * refactor(web): use icon-xs where icon buttons were forced to size-6 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13025 * refactor(web): add radius="none" to ScrollArea by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13026 * refactor(web): add font="mono" to Input by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13027 * refactor(web): add SidebarInput by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13028 * refactor(web): add a label variant to Badge by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13029 * refactor(web): give Skeleton three shapes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13030 * refactor(web): one wrap width for tooltips, plus a code variant by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13031 * refactor(web): one vertical rhythm for dialog bodies by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13032 * refactor(web): ghost-muted icons follow the text; add ghost-destructive by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13033 * refactor(web): InlineButton underlines on hover and takes a tone by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13034 * refactor(web): one minimum width for menus, three widths for popovers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13035 * refactor(web): every textarea caps its growth; the diff comment box is a Textarea by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13036 * refactor(web): stacked sidebar groups share one inset by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13037 * refactor(web): Collapsible stays a plain container by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13038 * refactor(web): show more / show less are ordinary sidebar sub-rows by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13039 * refactor(web): Empty has three sizes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13040 * refactor(web): one row height for select, combobox and radio items by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13041 * refactor(web): render menu and popover triggers through Button by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13042 * refactor(web): sidebar alerts use the standard variants; one keycap by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13043 * fix(server): bypass owned caches on explicit provider refresh by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13109 * chore(devices): bump agent-device to 0.21.12 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13124 * chore(mobile): drop dead nitro-markdown tgz override and @expo/metro-runtime by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13148 * feat(web): show settings scope as a sentence at the top of the page by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13139 * refactor(web): move settings scope pickers into breadcrumbs by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13165 * feat(auth): share provider sign-in flows and credential bindings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12983 * refactor(mobile): git sheets use uniwind platform variants instead of className ternaries by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13161 * chore(mobile): name the two project favicon caches by their job by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13160 * revert(mobile): git sheets back to Platform.OS ternaries (un-guarded uniwind variants broke both platforms) by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13169 * docs(mobile): document the two mobile routes that intentionally skip deep links by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13164 * refactor(mobile): break module cycles with focused extractions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13151 * fix(server): generate PR diffs from branch changes by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13170 * fix(web): preserve nested scroll behavior in chat timeline by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13167 * test(web): cover usage model ordering without static markup by @flamboh in https://github.com/pingdotgg/t3code/pull/13104 * fix(desktop): find linuxbrew node for the WSL backend by @CodyRay in https://github.com/pingdotgg/t3code/pull/7827 * chore(models): use GPT-6 Luna for text generation by @extoci in https://github.com/pingdotgg/t3code/pull/13115 * fix(mobile): keep ordinary offline outbox failures out of console.warn by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13144 * feat(providers): check remote compatibility ranges by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13130 * chore(lint): keep mobile theme escape-hatch allowlist honest by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13146 * fix(web): the pull request badge reads at the meta size again by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13175 * fix(mobile): uniwind platform variants stay guarded on both platforms by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13172 * refactor(mobile): git sheets use uniwind platform variants instead of className ternaries by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13185 * refactor(mobile): remaining className platform ternaries become class variants by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13188 * fix(web): align provider emails without clipping by @Derpedyea in https://github.com/pingdotgg/t3code/pull/13174 * perf(mobile): recycle the default v2 home list and scope the snooze minute tick by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13149 * refactor(mobile): retire the legacy grouped thread list by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13183 * fix(server): background PR checks spend less GitHub quota by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13189 * fix(server): background PR sync reads summaries in batches by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13198 * fix(server): GitHub PR lookups stop probing owner-qualified heads by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13200 * chore(mobile): clear the legacy-list deletion fallout by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13203 * hatch/variant functions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13191 * refactor(web): context chips render through one ContextChip component by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13192 * refactor(web): ui components drop their secondary className props by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13193 * refactor(web): menu triggers and items stop restyling ui/menu by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13205 * refactor(web): field controls stop restyling Input, Select, Combobox and Command by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13206 * refactor(web): app code stops restyling sidebar, popover, table and misc ui exports by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13207 * refactor(web): Button consumers outside the composer stop restyling it by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13208 * refactor(web): composer controls own their look instead of restyling ui components by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13209 * chore(web): no-restyle fails lint, and the ceiling gate goes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13210 * fix(mobile): recover from screen render errors by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13197 * feat(web): navigate back and forward with mod+[ and mod+] by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13212 * fix(web): sort title matches by recent activity by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13219 * test(desktop): remove redundant keyring module-load test by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13220 * feat(mobile): capture Live Activities and agent notifications in showcase screenshots by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13316 * feat(mobile): manage environment and provider updates by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13302 * fix(ci): shard release tests like pull request CI by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13321 * fix(web): show previous worktree branch on second line by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13314 * fix(providers): restore compatibility ranges for every harness by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13328 * fix(preview): use the visible browser for new agent sessions by @Bil0000 in https://github.com/pingdotgg/t3code/pull/13064 * fix(server): stop replaying old agent alerts on restart by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13340 * fix(web): use a brain icon for the effort dropdown by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13309 * fix(desktop): SnapShot shortcut helper no longer adds a Dock icon on macOS by @Gigioxx in https://github.com/pingdotgg/t3code/pull/13286 * fix(web): composer chip rings no longer clip at the editor edge by @flamboh in https://github.com/pingdotgg/t3code/pull/13301 * fix(web): switches announce their real state to screen readers by @Leos-Khai in https://github.com/pingdotgg/t3code/pull/11580 * fix(shared): preserve final quoted empty CSV records by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/11425 * feat(web): add an interactive 3D device workspace by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12787 * chore: add scratchyone to vouched list by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13353 * feat(observability): honor the OpenTelemetry kill switch by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13355 * fix(server): preserve racy edits in review diff previews by @tris203 in https://github.com/pingdotgg/t3code/pull/12613 * fix(web): show repository names on linked pull requests by @Bil0000 in https://github.com/pingdotgg/t3code/pull/13061 * lint/unknown and static by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13366 * fix(web): web colors come from theme tokens by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13371 * fix(web): appearance classes use theme tokens and scale values by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13397 * fix(server): keep Codex's reset answer when the re-probe fails by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13363 * fix(mobile): branch search finds remote and space-typed branches by @Bil0000 in https://github.com/pingdotgg/t3code/pull/13454 * chore(ci): use GPT 6 Sol Max for check agents by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13473 * feat(server): show and redeem Claude banked resets by @Bil0000 in https://github.com/pingdotgg/t3code/pull/13118 * fix(observability): a malformed OTEL_RESOURCE_ATTRIBUTES no longer stops startup by @yordis in https://github.com/pingdotgg/t3code/pull/13469 * fix(antigravity): let Stop end commands that outlived their turn by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13388 * fix(web,mobile): drop the baked-in tile from the Antigravity icon by @flamboh in https://github.com/pingdotgg/t3code/pull/13373 * fix(marketing): use the official OpenCode and Antigravity logos by @flamboh in https://github.com/pingdotgg/t3code/pull/13365 * fix(acp): keep one answer when a running tool reports progress by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13386 * feat(web): run shell commands from chat in the thread terminal by @Bil0000 in https://github.com/pingdotgg/t3code/pull/13060 * fix(antigravity): keep Windows runtime unpacking under MAX_PATH by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13389 * fix(codex): the protocol generator runs again on Effect rc.115 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13480 * feat(codex): require Codex 0.156 and regenerate its protocol by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13481 * feat(threads): add per-thread auto-settle switch by @t3dotgg in https://github.com/pingdotgg/t3code/pull/11846 * fix(web): working and monitoring threads fade in the sidebar again by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13506 * fix(server): streamed section titles wait for the text under them by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13504 * fix(web): normalize disabled control opacity by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/11441 * fix(web): sidebar Back always returns to the main app by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13516 * fix(desktop): desktop updates reconnect in seconds, not minutes by @t3dotgg in https://github.com/pingdotgg/t3code/pull/12006 * fix(connect): remove tunnels after hosts go offline by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9386 * fix(mobile): capture a lit 6.9-inch lock screen in the agent-activity showcase by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13522 * feat(grok): offer one-click updates through `grok update` by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13523 * fix(mobile): make Android subscription usage widgets scrollable by @tris203 in https://github.com/pingdotgg/t3code/pull/13474 * fix(web): keep sidebar terminal pulses in sync by @t3dotgg in https://github.com/pingdotgg/t3code/pull/12962 * feat(web): add iPhone Duo 3D controls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12813 * fix(relay): export tunnel cleanup counters to Axiom by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13528 * fix(server): Grok accounts with no usage yet no longer vanish from Limits by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/12799 * fix(server): report the Grok account email so usage limits merge across environments by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/12588 * feat(web): add usage page keybinding by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/9434 * chore: clear Effect language service suggestions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13536 * ci(relay): add a forced manual relay deploy by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13550 * fix(web): selected text stays visible on a revealed file line by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13548 * fix(web): collapsed composer bar stops flipping its labels while you scroll by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13555 * fix(clients): sync status no longer flickers when opening running threads by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13551 * fix(server): newer Codex models get T3 Code's instructions again by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13547 * feat(web): control Android foldables in the Device panel by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13534 * fix(mcp): preview snapshots fit in the agent's tool output again by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13558 * fix(web): paste after clicking away from the composer lands in it again by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13553 * feat(desktop): keep running threads synced in the background by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13554 * fix(mcp): preview errors tell agents what to do instead by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13559 * feat(web): agents working banner links to the Agents panel by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13572 * fix(web): size the Android fold model from the inner display by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13574 * fix(clients): a preview app no longer knocks the desktop's own server offline by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13577 * fix(web): keep nested task states out of parent bullets by @dominic-r in https://github.com/pingdotgg/t3code/pull/11477 * feat(release): ship a Linux .deb that updates itself by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13575 * perf(desktop): cache compiled JavaScript between launches by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13501 * fix(dev): one t3.json setup action that works on every OS by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13589 * fix(web): new worktree threads no longer say "checkout" during setup by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13590 * fix(desktop): `t3 app` keeps working after a second desktop app quits by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13585 * fix(usage): price Claude fast-mode requests at the fast rate by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13599 * fix: update OpenAI logo to current brand asset by @aaditagrawal in https://github.com/pingdotgg/t3code/pull/13611 * fix(mobile): render assigned project icons in chat list by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/12810 * feat(usage): read cursor, opencode, and antigravity history by @maria-rcks in https://github.com/pingdotgg/t3code/pull/10409 * fix(sqlite): retry failed statement preparations by @yashranaway in https://github.com/pingdotgg/t3code/pull/10584 * fix(mobile): scale Android controls with appearance text size by @none23 in https://github.com/pingdotgg/t3code/pull/13356 * fix(web): return focus to the composer after saving a citation note by @mackinleysmith in https://github.com/pingdotgg/t3code/pull/13450 * feat(observability): honor the standard OTLP endpoint, headers, and protocol variables by @yordis in https://github.com/pingdotgg/t3code/pull/13492 * fix(terminal): settling a thread closes its idle shells by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13673 * fix(server): load Cursor keyring with createRequire by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13678 * perf(server): avoid rereading unchanged files in review previews by @shivamhwp in https://github.com/pingdotgg/t3code/pull/13395 * feat(desktop): honor the standard OTLP variables in the main process and WSL backends by @yordis in https://github.com/pingdotgg/t3code/pull/13641 * fix(web): restore compact provider instance badges by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13700 * perf(mobile): lighter Home rows away from the viewport by @AKolenda in https://github.com/pingdotgg/t3code/pull/13702 * fix(usage): price Cursor cache savings by base model by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13731 * perf(mobile): render Home rows further ahead while scrolling by @AKolenda in https://github.com/pingdotgg/t3code/pull/13705 * refactor(observability): name each service after its application by @yordis in https://github.com/pingdotgg/t3code/pull/13699 * perf(server): stop remapping every thread on each thread event by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13720 * Remove unused items tracking from Claude adapter state by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13718 * feat(observability): name the command on subprocess spans by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13701 * fix(cli): t3 triage points agents at log files that exist by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13685 * fix(server): the SQLite WAL file shrinks back after large writes by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13684 * feat(cli): summarize the server trace file from the command line by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13698 * perf(server): pull request sync reads only threads with linked pull requests by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13704 * feat(observability): write a server heap snapshot on SIGUSR2 by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13694 * perf(server): shutdown no longer rewrites every stopped session row by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13688 * perf(server): build the thread list snapshot without decoding it twice by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13693 * fix(client): slow servers finish loading the thread list instead of loading it twice by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13683 * perf(web): hidden terminal drawers no longer keep full thread history in memory by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13686 * perf(server): per-thread settlement and PR checks no longer rebuild the whole thread list by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13691 * fix(mobile): running threads open at the latest message by @AKolenda in https://github.com/pingdotgg/t3code/pull/13530 * feat(observability): record event loop stalls in the server trace by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13697 * perf(server): stop re-running git for every project each minute by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13689 * fix(usage): hide the Cursor keychain prompt when Cursor isn't set up by @Gigioxx in https://github.com/pingdotgg/t3code/pull/13714 * feat(web): add chat width setting for wide screens by @otavio in https://github.com/pingdotgg/t3code/pull/11594 * fix(opencode): accept v2 serve ready line when spawning server by @shirishpothi in https://github.com/pingdotgg/t3code/pull/13651 * fix(editors): stop treating the agy CLI as the Antigravity IDE by @ishaanko in https://github.com/pingdotgg/t3code/pull/7079 * fix(web): make the empty workspace draggable on desktop by @otavio in https://github.com/pingdotgg/t3code/pull/13713 * fix(server): installed editors no longer vanish when discovery is slow by @bfowler in https://github.com/pingdotgg/t3code/pull/13669 * fix(git): exclude SSH ports from provider URLs by @GaMeRaM in https://github.com/pingdotgg/t3code/pull/12537 * fix(web): Mod+B bolds on non-Latin layouts by @ValeraZSD in https://github.com/pingdotgg/t3code/pull/13409 * fix(server): prune expired replay-protection files from the secrets directory by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13695 * fix(web): terminal links drop a trailing colon by @ValeraZSD in https://github.com/pingdotgg/t3code/pull/13408 * fix(server): bump node-pty to 1.2.0-beta.15 for linux-arm64 prebuild by @Ephraim-9 in https://github.com/pingdotgg/t3code/pull/13748 * Show a focus ring on sidebar thread and draft rows by @ryanilano in https://github.com/pingdotgg/t3code/pull/13344 * fix(mobile): keep composer within folded screen after resume by @PixPMusic in https://github.com/pingdotgg/t3code/pull/13310 * fix(server): let OpenCode generate session titles by @macodev00 in https://github.com/pingdotgg/t3code/pull/13368 * fix(server): let Antigravity inspect unsupported files by path by @Bil0000 in https://github.com/pingdotgg/t3code/pull/13339 * fix(mobile): link URLs with ports and single-label hosts by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13795 * feat(web): add keyboard navigation for usage by @tris203 in https://github.com/pingdotgg/t3code/pull/10158 * perf(observability): stop writing empty spans on spawns, projected events, and idle polls by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13756 * perf(server): opening Diagnostics no longer loads the whole trace ring into memory by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13763 * perf(clients): sort projects and settled threads without re-parsing dates per comparison by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13759 * fix(observability): the renderer trace proxy stops tracing itself by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13761 * perf(server): background sweeps only read threads that can still settle by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13765 * perf(clients): saving the thread list cache no longer freezes the UI by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13767 * perf(server): cut idle wakeups from the Connect relay and session reaper by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13774 * fix(mobile): keep trailing underscores and tildes in autolinked URLs by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13807 * fix(web): queued messages send while their thread is not open by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13764 * fix(server): background git status fetches no longer fill the disk with failed repacks by @t3dotgg in https://github.com/pingdotgg/t3code/pull/13812 * fix(mobile): thread list shows the pull request icon instead of # by @flamboh in https://github.com/pingdotgg/t3code/pull/13742 * fix(accessibility): correct control announcements and sidebar traversal by @blinding-pixels in https://github.com/pingdotgg/t3code/pull/13491 * fix(usage): tolerate newer provider variants by @tris203 in https://github.com/pingdotgg/t3code/pull/10076 * fix(usage): omit Cursor warning when no login is saved by @tris203 in https://github.com/pingdotgg/t3code/pull/13820 * fix(usage): identify client version mismatches by @tris203 in https://github.com/pingdotgg/t3code/pull/8208 * fix(web): stop mistaking offline servers for updates by @tris203 in https://github.com/pingdotgg/t3code/pull/13083 * test(usage): assert contract mismatch details by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13861 * fix(build): validate Linux node-pty prebuilds in Windows artifacts by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13867 * fix(clients): hide duplicate Cursor Keychain prompts by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13870 * feat(observability): honor OTEL_*_EXPORTER=none per signal by @yordis in https://github.com/pingdotgg/t3code/pull/13736 * fix(web): align reasoning arrows with tool calls by @Adamulek123 in https://github.com/pingdotgg/t3code/pull/13850 * fix(server): let agents use simctl and adb alongside device tools by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/13908 * fix(web): environment status tooltip resizes when the status changes by @BearHuddleston in https://github.com/pingdotgg/t3code/pull/13845 * test(relay): remove constant-restating database mode test by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13932 * fix(web): continue onboarding after incomplete history imports by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/13935 * fix(server): let Claude abort turns before closing sessions by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/13999 * fix(web): prevent usage summary shift for unpriced records by @tris203 in https://github.com/pingdotgg/t3code/pull/13991 * fix(web): skip unchanged shortcut modifier updates - 195x typing latency improvement by @callmemorgan in https://github.com/pingdotgg/t3code/pull/13884 * fix(web,mobile): say that removing a T3 Connect environment keeps its account registration by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/14127 * Add Claude Sonnet 5.5 to the model manifest by @arturict in https://github.com/pingdotgg/t3code/pull/14152 * fix(server): restore Windows terminal startup after node-pty upgrade by @SegFaultZero in https://github.com/pingdotgg/t3code/pull/13927 * fix(desktop): make Linux URL handlers discoverable with the app icon by @limwa in https://github.com/pingdotgg/t3code/pull/8673 * fix(server): prevent Windows PTY helper crashes in watch mode by @UtkarshUsername in https://github.com/pingdotgg/t3code/pull/14179 * fix(shared): local-path remotes no longer crash legacy PR link projection by @pujitha24 in https://github.com/pingdotgg/t3code/pull/13463 * fix(server): preserve usage in oversized transcript records by @shivamhwp in https://github.com/pingdotgg/t3code/pull/13650 * fix(server): OpenCode stop no longer hangs when a turn is interrupted before submission by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/12003 * feat: save Bitbucket credentials from Source Control settings by @gabrielelpidio in https://github.com/pingdotgg/t3code/pull/14103 * fix(provider): mark OpenCode v2 incompatible by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/14198 * fix(web): pull request badge sits on the sidebar row's baseline by @Jardo-51 in https://github.com/pingdotgg/t3code/pull/14007 * feat(codex): connect ChatGPT accounts with managed authentication by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/14290 ## New Contributors * @bompus made their first contribution in https://github.com/pingdotgg/t3code/pull/11984 * @im-kvijay made their first contribution in https://github.com/pingdotgg/t3code/pull/10792 * @vedprakash2302 made their first contribution in https://github.com/pingdotgg/t3code/pull/12154 * @Adolanium made their first contribution in https://github.com/pingdotgg/t3code/pull/8432 * @Vrtak-CZ made their first contribution in https://github.com/pingdotgg/t3code/pull/11970 * @pc-style made their first contribution in https://github.com/pingdotgg/t3code/pull/10909 * @Exotic209093 made their first contribution in https://github.com/pingdotgg/t3code/pull/11611 * @dependabot[bot] made their first contribution in https://github.com/pingdotgg/t3code/pull/12411 * @koushikxd made their first contribution in https://github.com/pingdotgg/t3code/pull/11761 * @cestercian made their first contribution in https://github.com/pingdotgg/t3code/pull/12636 * @akash3444 made their first contribution in https://github.com/pingdotgg/t3code/pull/11268 * @CodyRay made their first contribution in https://github.com/pingdotgg/t3code/pull/7827 * @aaditagrawal made their first contribution in https://github.com/pingdotgg/t3code/pull/13611 * @AKolenda made their first contribution in https://github.com/pingdotgg/t3code/pull/13702 * @otavio made their first contribution in https://github.com/pingdotgg/t3code/pull/11594 * @shirishpothi made their first contribution in https://github.com/pingdotgg/t3code/pull/13651 * @bfowler made their first contribution in https://github.com/pingdotgg/t3code/pull/13669 * @GaMeRaM made their first contribution in https://github.com/pingdotgg/t3code/pull/12537 * @ValeraZSD made their first contribution in https://github.com/pingdotgg/t3code/pull/13409 * @Ephraim-9 made their first contribution in https://github.com/pingdotgg/t3code/pull/13748 * @ryanilano made their first contribution in https://github.com/pingdotgg/t3code/pull/13344 * @macodev00 made their first contribution in https://github.com/pingdotgg/t3code/pull/13368 * @blinding-pixels made their first contribution in https://github.com/pingdotgg/t3code/pull/13491 * @BearHuddleston made their first contribution in https://github.com/pingdotgg/t3code/pull/13845 * @callmemorgan made their first contribution in https://github.com/pingdotgg/t3code/pull/13884 * @arturict made their first contribution in https://github.com/pingdotgg/t3code/pull/14152 * @SegFaultZero made their first contribution in https://github.com/pingdotgg/t3code/pull/13927 * @limwa made their first contribution in https://github.com/pingdotgg/t3code/pull/8673 * @pujitha24 made their first contribution in https://github.com/pingdotgg/t3code/pull/13463 **Full Changelog**: https://github.com/pingdotgg/t3code/compare/v0.0.42...v0.0.43 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43
Changing a relay variable in the
productionenvironment never reaches the Worker. Alchemy does not redeploy the Worker when only aConfigvalue read in its Init changes (alchemy-run/alchemy#1831), so both a rerun and a push tomainwithout relay code changes plan "no changes". That's whyRELAY_TUNNEL_CLEANUP_MODE=dry-runis set but production still runsoff. The same would happen to the incident switch back tooff, and to a rotated secret such asCLERK_SECRET_KEY.This adds a
workflow_dispatchtrigger to Deploy T3 Connect relay with aforceinput (checked by default) that runsalchemy deploy --force. The job only runs onrefs/heads/main, so a manual run from another branch can't deploy that branch to production. Pushes tomainbehave as before.--forcemakes every resource in the stack reconcile. I checked the ones that hold credentials:CloudMintKeyPair,ApnsDeliveryJobSigningSecret, the Axiom ingest tokens, andRelayPostgresRuntimeRoleall keep their stored value when one already exists. A forced deploy rotates no keys, tokens or passwords.docs/operations/release.mdnow says a changed variable needs a forced deploy, and uses one in the cleanup rollout, the incident switch, the rollback, and the canary.Verification:
vp runforwards--forcetoalchemy deploy, confirmed with a probe script. actionlint reports only the existing custom Blacksmith runner label. After merging, run the workflow frommainonce to applydry-run, then checkrelay.managed_endpoint_reaper.modeon the next sweep span in Axiom.🤖 Generated with Claude Code
Summary by CodeRabbit