Skip to content

fix(web): show saved service access with Local environment off - #26464

Merged
shivamhwp merged 3 commits into
mainfrom
issue-watch/26420
Nov 5, 2026
Merged

shivamhwp merged 3 commits into
mainfrom
issue-watch/26420

Conversation

@shivamhwp

@shivamhwp shivamhwp commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

With Local environment off, the desktop app showed "No environment selected" in Sharing & access even while connected to a background service. The page now selects a connected service and offers a picker when several are available. Pairing and T3 Connect actions use that service's credentials and permissions. Desktop network controls remain restricted to the backend the app manages, and switching services clears the displayed pairing credential.

Closes #26420

Evidence

Verified head d86991209bf586bf1d152e6f1ae3590198f5750c, built from base a185dd924889cd7f925760431a9f29b973a35e2f. The rebase preserves main's new collapsed pairing-link preview. An independent Codex review found no findings.

Before

Historical Linux desktop reproduction at 48a292364ab37574c67fb377b5227e5d281d9203: a connected saved service has no access target with Local environment off.

Before: connected service has no access target

linux-before.mp4

After at this head

Physical corex, Linux Electron 44.10.1, two real bundled servers on loopback ports 27731 and 27732 with separate test homes. Both services were enrolled through Add environment. Electron used the production gnome_libsecret backend with a task-isolated GNOME secret-service session collection. The saved connection catalog was encrypted; Electron's basic store was not used.

Local environment off and both saved services connected

Saved service A with its new pairing-link preview

The recording follows Labs to Sharing & access, creates A's pairing link while Authorized clients is collapsed, switches to B, creates and revokes B's link, then returns to A. A's link survives B's revocation and its copyable credential is cleared on switching. It then revokes A's link, links A and B for publishing, unlinks A while B remains linked, and finally unlinks B. The last view shows Local environment off and both services connected. Idle pauses are shortened and the fixture boundary is captioned.

linux-final-short.mp4

Only unavailable external boundaries were fixtures: Clerk FAPI/session responses and its account widget, plus a local HTTPS relay. The real Clerk SDK, production renderer/hooks/controllers, selected-service HTTP authentication, and real /api/connect handlers ran unchanged. The relay fixture verified real Ed25519 proofs before returning invented per-environment credentials. The fixture certificate required Electron's --ignore-certificate-errors.

Cloud linking in the recording is publish-only. The managed T3 Connect switch is visible and stays off. After each action, authenticated reads of both real servers and hashes of their secret files confirmed the selected service changed and the other service did not. All five checkpoints passed.

The Browser panel also exercised primary-environment pairing creation and revocation at this head. The collapsed list displayed its new preview, then removed it on revocation.

Primary environment keeps the collapsed preview

Web and macOS/Windows desktop run the same ConnectionsSettings, AuthorizedClientsSettings, useCloudLinkController and executeConnectedEnvironmentHttpRequest paths exercised here. Native mobile has separate UI; no mobile call sites use the new pairing commands, and no native mobile UI changed.

Real server proof and checks

Against the two current-head servers, commands verified manual and managed link-proof signatures and claims, exact loopback ports, unauthorized/wrong-port rejection, account-mismatch rejection without mutation, and relay-config persistence. After restarting both servers, exact secret bytes, 0600 modes, preferences and signing keys survived. A's bearer failed on B; unlinking A left B's state and files unchanged.

Commands, runtime results, build provenance and fixture limits

Boat job j_kz4jyhrkvej3ewyhzgfy exited 0. vp run check:changed passed format, lint, both knip passes, affected-package typechecks, all 67 focused tests in 8 files, and 15 selected React compiler cases. vp run build:desktop passed. The focused run includes environment HTTP authentication, auth commands, saved-service credentials, cloud controller behavior, selection, pairing rows and scheduled-task compatibility.

Changed-file check and desktop build results

Commands and successful output as text
PR #26464 current-head verification
Head: d86991209bf586bf1d152e6f1ae3590198f5750c
Build/test base: a185dd924889cd7f925760431a9f29b973a35e2f
Machine: physical corex, Linux, Electron 44.10.1
Build: Boat j_kz4jyhrkvej3ewyhzgfy, worker bx_3grjdm9s, large, attempt 1, exit 0
Build command: vp i --frozen-lockfile; vp run check:changed "$FLEET_SOURCE_BASE"; export T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_Y2xlcmsuZml4dHVyZS50ZXN0JA; export T3CODE_CLERK_JWT_TEMPLATE=fixture-relay; export T3CODE_RELAY_URL=https://127.0.0.1:27740; vp run build:desktop
Runtime archive SHA256: 64c03516bf48ab18f9c91d5e9a0932f175d6de1069ea59b4e21f463542756ff7

The exact built desktop/server/web outputs were extracted without source edits.
Two real bundled server processes, separate test homes and ports 27731/27732:
node runtime/apps/server/dist/bin.mjs serve --base-dir /tmp/t3code-26464-rebase/service-a --port 27731 --host 127.0.0.1 --no-browser
node runtime/apps/server/dist/bin.mjs serve --base-dir /tmp/t3code-26464-rebase/service-b --port 27732 --host 127.0.0.1 --no-browser

Electron used --password-store=gnome-libsecret with a task-isolated D-Bus GNOME secret-service session collection.
Actual startup output: backend: gnome_libsecret
Persisted connection-catalog.json has only version and encryptedCatalog fields, 3584 bytes.
Both services enrolled through normal Add environment host/code UI. Local environment was off.

Native recording: Labs -> Sharing & access, selected A Create link with collapsed list -> new preview + Copy code; switch B -> A preview clears; create/revoke B; return A -> A link remains, credential cleared; revoke A; publish-only link A; link B; unlink A; return B still publishing; unlink B; Environments shows Local off and both connected.
Production client hooks/controllers/auth and real /api/connect handlers were unchanged.
Only external Clerk FAPI/session/account-widget and HTTPS relay responses were fixtures.
Real Clerk SDK, real server Ed25519 proofs verified at the relay fixture, invented per-service credentials.
Managed Connect switch stayed off. Publish-only linking/unlinking was exercised.
Video contains actual Electron viewport only, pauses shortened while retaining the setup and dialog and a fixture caption added.

Real-server proof commands:
node real-server-proof.mjs prepare proof-input-final.private.json
Stop/restart each captured server PID with the same base directory and port.
node real-server-proof.mjs verify-after-restart proof-input-final.private.json
Private input has only isolated loopback server credentials and is not attached.

A: GET /api/connect/link-state -> 200
A: POST /api/connect/link-proof -> 200
A: verified manual link-proof signature against persisted public key; challenge, environment, endpoint, loopback port, audience, TTL and scopes match
A: POST /api/connect/link-proof -> 200
A: verified cloudflare_tunnel link-proof signature against persisted public key; challenge, environment, endpoint, loopback port, audience, TTL and scopes match
A: POST /api/connect/link-proof -> 400
A: POST /api/connect/link-proof -> 401
A: POST /api/connect/relay-config -> 200
A: POST /api/connect/preferences -> 200
A: GET /api/connect/link-state -> 200
A: POST /api/connect/relay-config -> 409
A: real relay-config and preference handlers persisted six private secret files; exact values and 0600 modes verified; account mismatch rejected without mutation
B: GET /api/connect/link-state -> 200
B: POST /api/connect/link-proof -> 200
B: verified manual link-proof signature against persisted public key; challenge, environment, endpoint, loopback port, audience, TTL and scopes match
B: POST /api/connect/link-proof -> 200
B: verified cloudflare_tunnel link-proof signature against persisted public key; challenge, environment, endpoint, loopback port, audience, TTL and scopes match
B: POST /api/connect/link-proof -> 400
B: POST /api/connect/link-proof -> 401
B: POST /api/connect/relay-config -> 200
B: POST /api/connect/preferences -> 200
B: GET /api/connect/link-state -> 200
B: POST /api/connect/relay-config -> 409
B: real relay-config and preference handlers persisted six private secret files; exact values and 0600 modes verified; account mismatch rejected without mutation
A: GET /api/connect/link-state -> 401
B: GET /api/connect/link-state -> 401
PREPARE PASS. Stop/restart both isolated servers using their original base directories and ports, then run verify-after-restart with this same input file. No server, relay or process was mocked by this script.

A: GET /api/connect/link-state -> 200
A: POST /api/connect/link-proof -> 200
A: verified manual link-proof signature against persisted public key; challenge, environment, endpoint, loopback port, audience, TTL and scopes match
A: restart retained linked state, publishing preference, exact relay-config secret bytes and signing key
B: GET /api/connect/link-state -> 200
B: POST /api/connect/link-proof -> 200
B: verified manual link-proof signature against persisted public key; challenge, environment, endpoint, loopback port, audience, TTL and scopes match
B: restart retained linked state, publishing preference, exact relay-config secret bytes and signing key
B: GET /api/connect/link-state -> 200
A: POST /api/connect/unlink -> 200
A: GET /api/connect/link-state -> 200
B: GET /api/connect/link-state -> 200
A: unlink removed only A's relay secrets; B's real link state and persisted bytes are unchanged
B: POST /api/connect/unlink -> 200
B: GET /api/connect/link-state -> 200
B: unlink removed B's relay secrets
VERIFY-AFTER-RESTART PASS. Real production HTTP auth, link-proof signing, configuration persistence, restart reads and selected-server unlink isolation verified. External Clerk/relay/tunnel/guest-link behavior remains unverified.

Cloud UI checkpoints:
baseline PASS: http://127.0.0.1:27731 linked=false publishing=false; http://127.0.0.1:27732 linked=false publishing=false; other service state and persisted file hashes unchanged.
link-a PASS: http://127.0.0.1:27731 linked=true publishing=true; http://127.0.0.1:27732 linked=false publishing=false; other service state and persisted file hashes unchanged.
link-b PASS: http://127.0.0.1:27731 linked=true publishing=true; http://127.0.0.1:27732 linked=true publishing=true; other service state and persisted file hashes unchanged.
unlink-a PASS: http://127.0.0.1:27731 linked=false publishing=false; http://127.0.0.1:27732 linked=true publishing=true; other service state and persisted file hashes unchanged.
unlink-b PASS: http://127.0.0.1:27731 linked=false publishing=false; http://127.0.0.1:27732 linked=false publishing=false; other service state and persisted file hashes unchanged.

Browser panel: same head primary pairing creation/revocation and collapsed preview passed.

Unverified: production Clerk login, live relay provisioning/revocation, managed connector startup, tunnel reachability and guest links through a live tunnel. No test account is available.

PR #26464 | head d86991209bf586bf1d152e6f1ae3590198f5750c
Base a185dd924889cd7f925760431a9f29b973a35e2f
Boat j_kz4jyhrkvej3ewyhzgfy | large bx_3grjdm9s | attempt 1 | exit 0
Command: vp i --frozen-lockfile; vp run check:changed "$FLEET_SOURCE_BASE"; vp run build:desktop

> vp test (8 files)  pass  21.4s

 RUN  v5.0.5 /tmp/fleet-job/j_kz4jyhrkvej3ewyhzgfy/src

 ✓  @t3tools/web (unit)  src/components/settings/ConnectionsSettings.logic.test.ts (17 tests) 5ms
 ✓  @t3tools/web (browser) (chromium)  src/components/settings/AuthorizedClientsSettings.browser.test.tsx (2 tests) 111ms
 ✓  @t3tools/client-runtime  src/state/auth.test.ts (2 tests) 3ms
 ✓  @t3tools/web (browser) (chromium)  src/cloud/useCloudLinkController.browser.test.tsx (8 tests) 196ms
stdout | unknown test
[02:00:03.182] WARN (#38): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
stdout | src/components/settings/ScheduledTasksSettings.browser.test.tsx > ScheduledTasksSettings > creates on a permitted secondary and reacts to permission changes
[02:00:03.286] WARN (#87): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
 ✓  @t3tools/client-runtime  src/state/environmentHttpAuth.test.ts (31 tests) 103ms
 ✓  @t3tools/web (unit)  src/cloud/linkEnvironment.test.ts (1 test) 41ms
stdout | src/components/settings/ScheduledTasksSettings.browser.test.tsx > ScheduledTasksSettings > keeps the permitted representative as the creation target
[02:00:03.534] WARN (#173): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
 ✓  @t3tools/web (browser) (chromium)  src/components/settings/ScheduledTasksSettings.browser.test.tsx (5 tests) 717ms
   ✓ ScheduledTasksSettings (5)
     ✓ creates on a permitted secondary and reacts to permission changes 319ms
stdout | unknown test
[02:00:06.200] WARN (#38): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
stdout | unknown test
[02:00:06.565] WARN (#173): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
stdout | unknown test
[02:00:09.232] WARN (#38): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
stdout | unknown test
[02:00:09.587] WARN (#173): Could not discover the primary environment. {
  error: [ConnectionTransientError: Remote environment endpoint returned an invalid response from http://localhost:62601/.well-known/t3/environment.],
}
 ✓  t3  src/provider/AgentContextBudget.test.ts (1 test) 75ms

 Test Files  8 passed (8)
      Tests  67 passed (67)
   Start at  01:59:52
   Duration  17.86s (transform 57%, import 20%, worker 16%, setup 5%, tests 2%)

> vp react compiler (15 files)  pass  7.5s

 RUN  v5.0.5 /tmp/fleet-job/j_kz4jyhrkvej3ewyhzgfy/src

 ✓  @t3tools/web (unit)  src/reactCompilerCoverage.test.ts (1305 tests | 1290 skipped) 137ms

 Test Files  1 passed (1)
      Tests  15 passed | 1290 skipped (1305)
   Start at  02:00:12
   Duration  5.94s (transform 66%, setup 25%, import 6%, tests 3%)

check:changed summary
  pass  unused patches  17.8s
  pass  format  0.2s
  pass  lint  0.7s
  pass  knip 1/2  5.8s
  pass  knip 2/2  12.5s
  pass  typecheck (40 packages)  27.6s
  pass  test (8 files)  21.4s
  pass  react compiler (15 files)  7.5s
  CI also runs: full test suites, build, rust, release smoke
  pass not cached: files changed during the run

Desktop build output:
✔ Build complete in 965ms

---
vp run: 5/5 successful. (Run `vp run --last-details` for full details)

Compatibility with the updated base

Live main advanced to a07be97ab0753b2b5b0caecebba69d7f872594fa. Its only overlapping PR file changes the client-runtime typecheck command to effect-tsgo tsrs --noEmit. It also refactors server signing and shares DPoP creation. Access UI, pairing commands and selected-service HTTP functions are unchanged from the head recorded above.

A clean test-only merge of PR head d86991209bf586bf1d152e6f1ae3590198f5750c and that base passed on Boat job j_72mvirsqdv22342oypju, exit 0. The new typechecker passed for 40 packages; changed-file checks passed 68 tests in 8 files and 15 selected compiler cases. The focused server auth, cloud-link and HTTP suites passed 44 tests; shared DPoP passed 2 tests. The merge was not pushed and the PR head is unchanged.

Updated-base commands, exact revisions and successful output

Updated-base verification commands and output
PR #26464 base compatibility, 2026-11-04
PR head: d86991209bf586bf1d152e6f1ae3590198f5750c
Live base: a07be97ab0753b2b5b0caecebba69d7f872594fa
Test-only merge: f492e863febd862a1a6caf94eddd3abac9125823
Merged tree: 88df5d56091dbf56258b4d662583246de463a293
Boat job: j_72mvirsqdv22342oypju, large bx_7hdhu7jj, attempt 1, succeeded, exit 0
No branch changes or push. The temporary merge contains the exact PR head and live base.
Only overlapping PR file: packages/client-runtime/package.json changes typecheck to effect-tsgo tsrs --noEmit.
Access UI, pairing commands and selected-service HTTP functions are unchanged from the recorded PR head.

Commands:
vp i --frozen-lockfile
vp run check:changed a07be97ab0753b2b5b0caecebba69d7f872594fa
(cd apps/server && vp test run src/cloud/http.test.ts src/cloud/CloudLink.test.ts src/auth/PairingGrantStore.test.ts src/auth/SessionStore.test.ts)
(cd packages/client-runtime && vp test run src/relay/dpopProof.test.ts)

Actual output, install and migration chatter omitted:
✓ Lockfile passes supply-chain policies (2031 entries in 14s)
 ✓  @t3tools/web (unit)  src/components/settings/ConnectionsSettings.logic.test.ts (17 tests) 9ms
 ✓  @t3tools/client-runtime  src/state/auth.test.ts (2 tests) 4ms
 ✓  @t3tools/web (browser) (chromium)  src/components/settings/AuthorizedClientsSettings.browser.test.tsx (2 tests) 117ms
 ✓  @t3tools/client-runtime  src/state/environmentHttpAuth.test.ts (31 tests) 146ms
 ✓  @t3tools/web (browser) (chromium)  src/cloud/useCloudLinkController.browser.test.tsx (8 tests) 169ms
 ✓  @t3tools/web (unit)  src/cloud/linkEnvironment.test.ts (1 test) 33ms
 ✓  @t3tools/web (browser) (chromium)  src/components/settings/ScheduledTasksSettings.browser.test.tsx (5 tests) 621ms
 ✓  t3  src/provider/AgentContextBudget.test.ts (2 tests) 92ms
 Test Files  8 passed (8)
      Tests  68 passed (68)
 ✓  @t3tools/web (unit)  src/reactCompilerCoverage.test.ts (1305 tests | 1290 skipped) 124ms
 Test Files  1 passed (1)
      Tests  15 passed | 1290 skipped (1305)
check:changed summary
  pass  unused patches  20.4s
  pass  format  0.4s
  pass  lint  1.1s
  pass  knip 1/2  10.3s
  pass  knip 2/2  19.7s
  pass  typecheck (40 packages)  23.9s
  pass  test (8 files)  22.7s
  pass  react compiler (15 files)  7.3s
  CI also runs: full test suites, build, rust, release smoke
  pass not cached: files changed during the run

 ✓ src/auth/SessionStore.test.ts (22 tests) 1291ms
 ✓ src/cloud/CloudLink.test.ts (7 tests) 58ms
 ✓ src/cloud/http.test.ts (8 tests) 434ms
 ✓ src/auth/PairingGrantStore.test.ts (7 tests) 354ms
 Test Files  4 passed (4)
      Tests  44 passed (44)
 ✓ src/relay/dpopProof.test.ts (2 tests) 44ms
 Test Files  1 passed (1)
      Tests  2 passed (2)
COMPATIBILITY PASS

Ready check compared this head with live main a07be97ab0753b2b5b0caecebba69d7f872594fa. The merge is clean. Current-head runtime evidence remains applicable to the unchanged access and cloud-link UI; the compatibility checks above cover the new base. Required checks pass and no review threads remain unresolved. Auto-merge is off and there is no merge queue entry.

Unverified live path: production Clerk login, live relay provisioning/revocation, managed connector startup, tunnel reachability, and guest links through a live tunnel. No dedicated test account is available. These external paths are not claimed by the fixture proof. Initial linking retains the server's existing loopback-origin restriction.

Implemented and rebased by Claude Opus 5.5 in Claude Code. Investigated, tested and independently reviewed by GPT-6.1 Sol in Codex through T3 Code.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Oct 28, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 44dba53

Macroscope's review found this PR approvable — Access settings can now manage saved environments with Local environment off, using each environment's own authenticated connection. Access changes remain explicit and permission-scoped, while desktop backend controls stay restricted to the primary environment.

No code changes detected at d869912. Prior analysis still applies.

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

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 21.5 KiB 21.5 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 1 1 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.9 KiB 21.9 KiB 0 B (0.0%) 24.4 KiB ✅
Claude Live turn messages 1 1 0 (0.0%) 8 ✅

Baseline: a185dd9 · PR result: d869912 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

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

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

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • Resume reviews
  • Trigger review

No actionable comments were generated in the recent review.

Walkthrough

Access settings can select an environment and use its session, permissions, and authentication commands. Cloud-link state and operations use the selected environment’s connected HTTP services. The changes also add tests and remote-access documentation.

Changes: Environment-scoped access and cloud links

Layer / File(s) Summary
Connected-environment authentication commands
packages/client-runtime/src/state/environmentHttpAuth.ts, packages/client-runtime/src/state/auth.ts, packages/client-runtime/package.json, apps/web/src/environments/primary/auth.ts, apps/web/src/environments/primary/index.ts, apps/web/src/environments/primary/sessionState.ts, apps/web/src/state/session.ts
The client runtime adds authenticated HTTP requests and pairing or client-management commands for connected environments. The primary-environment pairing, revocation, and session-state helpers are removed. Session state accepts a nullable environment ID.
Environment-scoped cloud-link state and operations
apps/web/src/cloud/cloudLinkState.ts, apps/web/src/cloud/linkEnvironment.ts, apps/web/src/cloud/linkEnvironmentAtoms.ts, apps/web/src/cloud/primaryCloudLinkState.ts, apps/web/src/cloud/linkEnvironment.test.ts
Cloud-link reads and mutations use a target environment’s prepared connection. State, refresh, and cached reads are scoped to an environment. Tests check target-specific origins and bearer tokens.
Environment selection and access management
apps/web/src/components/settings/ConnectionsSettings.logic.ts, apps/web/src/components/settings/ConnectionsSettings.logic.test.ts, apps/web/src/components/settings/ConnectionsSettings.tsx, apps/web/src/components/settings/AuthorizedClientsSettings.tsx, apps/web/src/components/settings/AuthorizedClientsSettings.browser.test.tsx, apps/web/src/components/settings/SettingsScopeSentence.tsx, docs/user/remote-access.md
Access settings resolve a selected environment and use its session state, permissions, and authentication commands. Pairing and client revocation target that environment. The documentation describes selecting an environment and managing a same-machine background service.
Cloud-link controls and settings integration
apps/web/src/cloud/useCloudLinkController.ts, apps/web/src/cloud/useCloudLinkController.browser.test.tsx, apps/web/src/components/cloud/ConnectOnboardingDialog.tsx, apps/web/src/components/settings/SavedEnvironmentRows.tsx, apps/web/src/components/settings/ScheduledTasksSettings.tsx, apps/web/src/components/settings/useAvailableSettingsSearchItems.ts
The cloud-link controller and settings rows receive an environment ID. The onboarding dialog passes the primary environment ID.

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Bug fix · Severity of issue fixed: Medium

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant ConnectionsSettings
  participant useEnvironmentSessionState
  participant authEnvironmentCommand
  participant ConnectedEnvironment
  User->>ConnectionsSettings: Select an environment
  ConnectionsSettings->>useEnvironmentSessionState: Read session for selected environment
  ConnectionsSettings->>authEnvironmentCommand: Create pairing credential or revoke client
  authEnvironmentCommand->>ConnectedEnvironment: Send authenticated request
  ConnectedEnvironment-->>authEnvironmentCommand: Return command result
Loading

Suggested reviewers: maria-rcks

Merge Risk: Minimal · up to d2bc9

The change lets Sharing & access work for a connected service when Local environment is off. No blocking risk was found in the reviewed changes. Signed-in T3 Connect and multi-environment selection were not exercised by the author. The T3 Connect onboarding dialog still acts on the primary environment; it behaved that way before this change.

Pre-merge checks: Passed 3 · Inconclusive 1

Failed Failed checks: 1 inconclusive

Check name Status Explanation Resolution
Description check Inconclusive The description follows the repository template's sections (Problem, Change, Scope and approval, Verification) only partly. It opens with a clear problem statement and links issue #26420, so the probl… 1. Add a clear Change section. Explain how the fix works. Describe the selection of the connected environment, the picker, and the move of cloud-link and pairing commands to environment-scoped APIs. State why the changes in the web, client-…
Passed Passed checks: 3 passed
Check name Status Explanation
Title check Passed The title is concise, conventional, and accurately describes the main change: showing saved-service access when Local environment is off.
Linked Issues check Passed Issue #26420 is the only active directly linked target. Its coding requirement: Settings → Sharing & access must show a connected non-primary service when Local environment is off. The page must offer…
Out of Scope Changes check Passed The whole-PR summary (merge base d897d3f to head d2bc956) shows changes that serve #26420:
- Environment selection and picker in ConnectionsSettings and resolveAccessEnvironmentId.
- Environment-s…
Full details: Linked Issues check

Explanation

Issue #26420 is the only active directly linked target. Its coding requirement: Settings → Sharing & access must show a connected non-primary service when Local environment is off. The page must offer that service's settings and T3 Connect link/unlink controls, not 'No environment selected'.

Evidence at head d2bc956 (whole PR, merge base d897d3f):

  • resolveAccessEnvironmentId in ConnectionsSettings.logic.ts keeps a listed explicit selection. Otherwise it uses the listed primary environment, then a connected listed environment, then the first listed environment. It returns null only when no environments exist. ConnectionsSettings.tsx offers a picker when several are listed.
  • Access queries, session state, scopes, pairing, client revocation and cloud-link rows target the selected environment. SavedEnvironmentRows.tsx gives CloudLinkRow an environmentId, so the T3 Connect row renders for the selected service.
  • Cloud-link requests in linkEnvironment.ts and environment-scoped commands in packages/client-runtime/src/state/auth.ts run through the selected environment's prepared connection (executeConnectedEnvironmentHttpRequest).
  • The rebase adds managed-policy checks that follow the selected service. AuthorizedClientsSettings.browser.test.tsx (read at head) covers the selected service denying remote clients (pairing disabled) and an unmanaged selected service with a managed primary (pairing enabled). This matches the PR description.
  • Unproven at head: signed-in T3 Connect link/unlink and guest-link creation through a live tunnel. The issue requires the UI path and environment-scoped requests, and the code provides both. Live tunnel behavior does not change this verdict. Maria's run covers saved-service access and pairing on head 286d53a. It does not cover the later rebase at d2bc956.
Full details: Out of Scope Changes check

Explanation

The whole-PR summary (merge base d897d3f to head d2bc956) shows changes that serve #26420:

  • Environment selection and picker in ConnectionsSettings and resolveAccessEnvironmentId.
  • Environment-scoped cloud-link state, controller and commands (cloudLinkState.ts, linkEnvironment.ts, linkEnvironmentAtoms.ts, useCloudLinkController.ts, SavedEnvironmentRows.tsx, ConnectOnboardingDialog.tsx passing the primary ID).
  • Environment-scoped pairing and revocation in packages/client-runtime/src/state/auth.ts and environmentHttpAuth.ts. These replace primary-only helpers removed from apps/web/src/environments/primary/auth.ts, index.ts and sessionState.ts.
  • AuthorizedClientsSettings.tsx changes: selected-environment pairing and managed-policy checks for that environment. The rebase moved policy checks from the primary to the selected service, which is part of making pairing for the selected service correct.
  • Primary-only desktop network, Tailscale, WSL and onboarding controls keep the primary target. The PR description and summary state this, and it matches the issue's scope.
  • Comment, import and docs updates (SettingsScopeSentence.tsx, useAvailableSettingsSearchItems.ts, ScheduledTasksSettings.tsx, docs/user/remote-access.md, the environmentHttpAuth package export) and tests for the changed behavior.
    The summary shows no server, server-authorization or native mobile changes. The rebase over PR #27197 did not add a file that the summary lists as unrelated. The server typecheck issue in AgentSessionScanner.ts, if present, is a main-branch condition and not a change of this PR.
Full details: Description check

Explanation

The description follows the repository template's sections (Problem, Change, Scope and approval, Verification) only partly. It opens with a clear problem statement and links issue #26420, so the problem is clear. The Change section is short and does not explain how the fix works across components. The Scope and approval section links only the issue. It does not show a maintainer approval comment or explain why the change qualifies without one. The Verification section is very detailed and reports the head commit, base commit, focused tests, desktop build, real-server proof, and screenshots. It also states what was not verified, including production Clerk login and live tunnel behavior. The description also says it was implemented by Claude Opus 5.5 and reviewed by GPT-6.1 Sol, which satisfies the template's agent attribution requirement.

Resolution

  1. Add a clear Change section. Explain how the fix works. Describe the selection of the connected environment, the picker, and the move of cloud-link and pairing commands to environment-scoped APIs. State why the changes in the web, client-runtime, and docs files belong to the same fix. 2. Complete the Scope and approval section. Add the maintainer-approved issue or discussion link, or quote the approval comment. If no approval exists, explain why this fix qualifies as a very small, focused fix of an obvious bug. Consider that the change removes server-auth helpers and renames several public cloud-link APIs, so broader scope may need approval. 3. Trim the Verification section to the focused checks that cover the changed behavior. Keep the observed results and the unverified items. The template asks for focused checks, not a long log. 4. Keep the before and after screenshots for the UI change.
Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 286d53a and d2bc956.

Files selected for processing: 5
  • apps/web/src/components/cloud/ConnectOnboardingDialog.tsx
  • apps/web/src/components/settings/AuthorizedClientsSettings.browser.test.tsx
  • apps/web/src/components/settings/AuthorizedClientsSettings.tsx
  • apps/web/src/components/settings/ConnectionsSettings.tsx
  • apps/web/src/components/settings/SavedEnvironmentRows.tsx

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

@maria-rcks

maria-rcks commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

Verified head 286d53a8f18ce56c9a431d0ed7bec0f79c4ec711 on a Linux Boat VM. Reproduced on github/main (8b74a69019): real Electron with Local environment off and a connected saved service showed "No environment selected" in Sharing & access. On this PR, the same saved connection shows Permissions, Authorized clients, and Create link.

Used the real dev server, Electron renderer, and repository Playwright with system Chrome. Added a real git project through the app and ran Codex gpt-6.1-sol turns on both revisions. Both read README.md through a terminal; the PR returned PR_RUNTIME_OK. No mocks or injected desktop bridge.

Created a pairing code from saved-service access, paired a fresh Chrome client, then revoked it. The client lost its connection and returned to pairing on reload. Also created/revoked an unused link and verified primary web pairing creation/revocation. Desktop-only network controls remain absent for the saved service.

Actual saved-service requests, credentials omitted:

POST http://127.0.0.1:16733/api/auth/pairing-token -> 200 bearer=true
POST http://127.0.0.1:16733/api/auth/pairing-links/revoke -> 200 bearer=true

vp run check:changed 85bd3f2a2a0ad4a8ddf2950e01db80765e9a1bf4 passed through blacksmith-check: 39 package typechecks, 65 tests across 7 files, 15 selected React compiler checks, format, lint, both knip passes, and unused patches. No code changes.

before: main shows no environment selected with the saved service connected

after: PR shows the saved service access controls

desktop local-off navigation, pairing creation and revocation

real Codex turns read the repository on main and PR

Not verified

Signed-in T3 Connect linking/unlinking, managed tunnels, and guest links require an external test account that was unavailable. Multi-environment selection was not exercised because this pass used one server. macOS, Windows, native iOS and Android were not exercised on this Linux VM.

Merge verification, 2026-11-04

Merged current main (a185dd924889) without conflicts and pushed merge commit d86991209bf586bf1d152e6f1ae3590198f5750c to this head. No feature code changed. The PR diff remains 25 files, +852/-509.

All 33 GitCafe check contexts passed; GitHub reports CLEAN and MERGEABLE. Two independent scoped code reviews found no blocker or should-fix findings. No actionable bot threads were present.

Ran vp run check:changed a185dd924889cd7f925760431a9f29b973a35e2f through blacksmith-check: format, lint, both knip passes, unused patches, 40 package typechecks, 67 tests in 8 files, and 15 selected React compiler checks passed. Worker setup needed parent history and Playwright Chromium, then the complete check passed.

Fresh real Chrome pairing and the primary Sharing & access page worked on the merged head. Real Electron launched with Local environment off. Repeating saved-service pairing was blocked by unavailable desktop secure storage; using the configured protected backend opened a keyring prompt, so verification stopped without interacting with that prompt. The earlier saved-service evidence above is from the stated earlier head and is not a fresh runtime verification of this merge commit. Signed-in T3 Connect and the other platforms remain unverified.

Harness: Codex; model: gpt-6.1-sol.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Nov 1, 2026
PR Batch Tester and others added 2 commits November 4, 2026 01:22
…nvironment is off

With Local environment off there is no primary environment, so Sharing &
access showed "No environment selected" even while a background service on
the same machine was connected, and there was no way to link it to T3 Connect.

The page now picks an environment: the primary when there is one, otherwise a
connected saved environment, with a picker when several are connected.
Access changes, pairing links, revocations, session permissions and the
T3 Connect link all run on that environment with this client's own
credentials for it, through the shared authenticated environment HTTP helper.
Desktop network, Tailscale and WSL controls still appear only for the
desktop-managed local environment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@macroscopeapp
macroscopeapp Bot dismissed their stale review November 4, 2026 01:40

Dismissing prior approval to re-evaluate 44dba53

@shivamhwp
shivamhwp merged commit d520d5b into main Nov 5, 2026
37 of 38 checks passed
@shivamhwp
shivamhwp deleted the issue-watch/26420 branch November 5, 2026 01:30
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Nov 5, 2026
**v0.1.8-nightly.20261105.4205** · 28 changes from 3 contributors

- **Claude MCP Apps.** Use interactive MCP Apps in Claude Code threads.
- **Organized repository clones.** Clone repositories into host, owner, and repository folders, including repositories with the same name.
- **Agent browser tabs.** Open new agent browser tabs when idle tabs have filled the shared limit.
- **Pending questions.** Answer or dismiss older questions and approval prompts even after their messages leave the loaded conversation.

### Plus 22 more bug fixes.

<details>
<summary>Full changelog</summary>

## What's Changed
* docs: scope managed-policy LAN note to old background services by @b2bvic in pingdotgg/t3code#30900
* feat(server): render MCP Apps from Claude tool calls by @juliusmarminge in pingdotgg/t3code#29803
* build: run Effect rules on mobile and lock in clean suggestion rules by @juliusmarminge in pingdotgg/t3code#31111
* fix(mobile): keep iOS composer empty after sending an autocorrected word by @shivamhwp in pingdotgg/t3code#30308
* fix(server): idle agent tabs free a slot when the server's 32-tab browser limit is full by @shivamhwp in pingdotgg/t3code#24186
* fix(web): keep message navigation visible on touch when there is room by @shivamhwp in pingdotgg/t3code#26806
* fix(mobile): pinch wide images from anywhere in the Android viewer by @shivamhwp in pingdotgg/t3code#30929
* fix(mobile): preserve autocorrect in custom question answers by @shivamhwp in pingdotgg/t3code#30744
* fix(web): show Setting up during worktree setup by @shivamhwp in pingdotgg/t3code#28832
* fix(mobile): keep iOS thread menus short enough for drag selection by @shivamhwp in pingdotgg/t3code#30944
* fix(web): show the comparison base beside Changes totals by @shivamhwp in pingdotgg/t3code#30085
* fix(mobile): use H.264 for iOS previews and keep Close reachable by @shivamhwp in pingdotgg/t3code#28622
* fix(mobile): iOS image previews open without waiting for the gallery by @shivamhwp in pingdotgg/t3code#29044
* feat: optionally clone repos into ghq-style <host>/<owner>/<repo> folders by @shivamhwp in pingdotgg/t3code#24904
* fix(devices): explain Windows SSH host failures by @shivamhwp in pingdotgg/t3code#30941
* fix(web): make styled composer Markdown markers editable by @shivamhwp in pingdotgg/t3code#30421
* fix(mobile): configure another Claude account from Providers by @shivamhwp in pingdotgg/t3code#28928
* fix(web,mobile): save pull request description checkbox changes by @shivamhwp in pingdotgg/t3code#30704
* fix(client): a big server config on a slow link no longer drops the connection in a loop by @shivamhwp in pingdotgg/t3code#23758
* fix(server): restart T3 Connect's tunnel client when Cloudflare drops it by @shivamhwp in pingdotgg/t3code#24946
* fix(mobile): compact stale Claude threads before sending by @shivamhwp in pingdotgg/t3code#27935
* fix(web): show saved service access with Local environment off by @shivamhwp in pingdotgg/t3code#26464
* fix: keep older pending questions answerable by @shivamhwp in pingdotgg/t3code#26435
* fix(web): deleted forks no longer remain in Lineage by @shivamhwp in pingdotgg/t3code#29000
* fix(server): preserve sibling wakeups when interrupting a completion wake by @shivamhwp in pingdotgg/t3code#28204
* fix(server): attribute usage-limit auto-resume to T3 Code by @shivamhwp in pingdotgg/t3code#29838
* fix(acp): time out silent Antigravity prompts by @shivamhwp in pingdotgg/t3code#30377
* fix(codex): sharing usage limits offer the existing recovery options by @shivamhwp in pingdotgg/t3code#25341

## New Contributors
* @b2bvic made their first contribution in pingdotgg/t3code#30900

**Full Changelog**: pingdotgg/t3code@v0.1.8-nightly.20261104.4192...v0.1.8-nightly.20261105.4205

</details>


Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.8-nightly.20261105.4205
vedprakash2302 added a commit to vedprakash2302/Cody that referenced this pull request Nov 5, 2026
- DesktopBackendConfiguration: keep Cody's Windows sign-in helper import beside upstream's HostProcess import; the helper still joins WSLENV.
- DesktopBackendConfiguration.test: the Windows sign-in test passes env through HostProcess.Environment instead of process.env (pingdotgg#31218).
- ConnectionsSettings.logic(.test): keep Cody's tailnet pairing endpoints alongside upstream's resolveAccessEnvironmentId (pingdotgg#26464).
- agentContextBudget.json: upstream's new sizes (pingdotgg#30257) plus Cody's 371-byte final-answer block, re-measured by AgentContextBudget.test.
- No patches superseded or adapted this round; scheduled task Model field left as is (upstream still shows it).
- personal-fork skill: typecheck with effect-tsgo now that upstream dropped typescript; env in Effect tests goes through HostProcess.Environment.
Pipyakas pushed a commit to Pipyakas/t3code that referenced this pull request Nov 5, 2026
…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>
(cherry picked from commit d520d5b)
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Nov 10, 2026
## What's Changed
* refactor(android): every header goes through AppBar, so the filter stays put by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/26741
* refactor(mobile): one inspector column, declared with <Inspector> by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27085
* refactor(mobile): a pane's bar draws its own sidebar toggle by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27086
* refactor(mobile): Android's sidebar is the Home route in the sidebar column by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27087
* feat(mobile): medium windows float the sidebar over the page by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27088
* feat(mobile): without an inspector column, the inspector is a sheet by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27090
* docs(mobile): the five layers of the mobile layout, with x-ray diagrams by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27107
* refactor(mobile): the inspector's bar is its pane's AppBar by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27205
* fix(mobile): the iPad inspector hides the sidebar where the page would get too narrow by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27218
* fix(mobile): iPad workspace tabs live in the sidebar and leave with it by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27229
* fix(mobile): the drawer surface is only for a sidebar beside a page by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27289
* feat(server): list Claude models reported by Claude Code by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30511
* fix(relay): production deploys no longer hang while computing the plan by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30513
* fix(web): give dialog titles a readable line height by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30527
* fix(tools): show images from MCP and OpenCode outputs by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30389
* fix(mobile): smoother Settings and composer transitions on wide Android by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/26297
* fix(mobile): the Android split slides as one strip, so sidebar and detail pane always fill the width by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/26328
* fix(server): retry unstarted runs after recovery by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30560
* perf(server): narrow agent awareness startup reads by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30561
* fix(web): validate terminal links against filesystem metadata by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30526
* fix(server): avoid message ordering scans during recovery and settlement by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30582
* fix(client-runtime): expire missing file metadata per thread by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30606
* fix(web): align usage table padding and thread status rows by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30621
* fix(mobile): every Android content pane gets its rounded card from ScreenContent by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30500
* fix(web): load selected diff metadata before file patches by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/30567
* test(evals): measure how agents get secrets only the user has by @gabrielelpidio in https://github.com/pingdotgg/t3code/pull/30256
* feat(server): agents ask for secrets through request_secret instead of chat by @gabrielelpidio in https://github.com/pingdotgg/t3code/pull/30257
* fix(relay): use released drizzle rc.5 and fail installs on unmet peers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31016
* build: typecheck with tsrs and Effect's rules through @effect/tsgo by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31028
* refactor: replace jose with effect/jose by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30474
* refactor: move HMAC, key, and random work to effect/crypto by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30501
* refactor(server): sign server tokens through PayloadSigner by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30523
* refactor: hold relay signing keys in EnvironmentSigningKey and CloudMintSigner by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30529
* refactor(client-runtime): share DPoP proof creation across web and mobile by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30540
* fix(client-runtime): a thread keeps syncing after a stream defect by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31071
* test(server): AgentSessionScanner blocked-repo test no longer races the git-read timeout by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30554
* test(web): PDF preview tests wait on pdf.js loads and stop timing out by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31104
* docs: scope managed-policy LAN note to old background services by @b2bvic in https://github.com/pingdotgg/t3code/pull/30900
* feat(server): render MCP Apps from Claude tool calls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/29803
* build: run Effect rules on mobile and lock in clean suggestion rules by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31111
* fix(mobile): keep iOS composer empty after sending an autocorrected word by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30308
* fix(server): idle agent tabs free a slot when the server's 32-tab browser limit is full by @shivamhwp in https://github.com/pingdotgg/t3code/pull/24186
* fix(web): keep message navigation visible on touch when there is room by @shivamhwp in https://github.com/pingdotgg/t3code/pull/26806
* fix(mobile): pinch wide images from anywhere in the Android viewer by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30929
* fix(mobile): preserve autocorrect in custom question answers by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30744
* fix(web): show Setting up during worktree setup by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28832
* fix(mobile): keep iOS thread menus short enough for drag selection by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30944
* fix(web): show the comparison base beside Changes totals by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30085
* fix(mobile): use H.264 for iOS previews and keep Close reachable by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28622
* fix(mobile): iOS image previews open without waiting for the gallery by @shivamhwp in https://github.com/pingdotgg/t3code/pull/29044
* feat: optionally clone repos into ghq-style <host>/<owner>/<repo> folders by @shivamhwp in https://github.com/pingdotgg/t3code/pull/24904
* fix(devices): explain Windows SSH host failures by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30941
* fix(web): make styled composer Markdown markers editable by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30421
* fix(mobile): configure another Claude account from Providers by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28928
* fix(web,mobile): save pull request description checkbox changes by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30704
* fix(client): a big server config on a slow link no longer drops the connection in a loop by @shivamhwp in https://github.com/pingdotgg/t3code/pull/23758
* fix(server): restart T3 Connect's tunnel client when Cloudflare drops it by @shivamhwp in https://github.com/pingdotgg/t3code/pull/24946
* fix(mobile): compact stale Claude threads before sending by @shivamhwp in https://github.com/pingdotgg/t3code/pull/27935
* fix(web): show saved service access with Local environment off by @shivamhwp in https://github.com/pingdotgg/t3code/pull/26464
* fix: keep older pending questions answerable by @shivamhwp in https://github.com/pingdotgg/t3code/pull/26435
* fix(web): deleted forks no longer remain in Lineage by @shivamhwp in https://github.com/pingdotgg/t3code/pull/29000
* fix(server): preserve sibling wakeups when interrupting a completion wake by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28204
* fix(server): attribute usage-limit auto-resume to T3 Code by @shivamhwp in https://github.com/pingdotgg/t3code/pull/29838
* fix(acp): time out silent Antigravity prompts by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30377
* fix(codex): sharing usage limits offer the existing recovery options by @shivamhwp in https://github.com/pingdotgg/t3code/pull/25341
* revert(web): working threads stay in the Working shelf when their environment disconnects by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31269
* refactor: Effect code reads env through HostProcess.Environment by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31218
* refactor: Effect.try calls map failures to typed errors by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31217
* fix(web): sidebar project filter rows line up and stay still on hover by @shivamhwp in https://github.com/pingdotgg/t3code/pull/29639
* refactor: errors are Schema.TaggedError, not Data.TaggedError or native Error by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31216
* fix(server): a stopped run no longer shrinks thread history to one row by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31266
* fix(server): refresh divergence after a merged branch ref changes by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31342
* fix(mobile): one aligned notice for ChatGPT sharing limits by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31277
* fix(mobile): composer keeps the keyboard when a queued edit ends by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31317
* fix(mobile): delivered messages no longer reappear at the bottom of reopened long threads by @saphid in https://github.com/pingdotgg/t3code/pull/31182
* fix(threads): side chats inherit parent permissions by default by @extoci in https://github.com/pingdotgg/t3code/pull/31114
* fix(server): threads follow their worktree's branch changes by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31599
* fix(pi): usage reports include sessions stored in a --session-dir launch argument by @saphid in https://github.com/pingdotgg/t3code/pull/30690
* perf(mobile): skip unchanged terminal toolbar fade updates by @saphid in https://github.com/pingdotgg/t3code/pull/25312
* perf(mobile): assemble HTML replacements in one pass by @saphid in https://github.com/pingdotgg/t3code/pull/25278
* perf(mobile): skip canceled SVG parsing by @saphid in https://github.com/pingdotgg/t3code/pull/25314
* test(server): strengthen v1 cutover proof with event-stream waits and content snapshots by @saphid in https://github.com/pingdotgg/t3code/pull/11869
* fix(contracts): a stored secret reference is always sensitive by @yordis in https://github.com/pingdotgg/t3code/pull/31403
* fix(server): a settings save no longer reads an unreadable secret again by @yordis in https://github.com/pingdotgg/t3code/pull/31226
* fix(threads): allow snoozing pending input requests by @saphid in https://github.com/pingdotgg/t3code/pull/20058
* fix(server): repair cutover test crypto import breaking main CI by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31630
* feat(server): sends can start a fresh provider session by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30323
* feat: /clear starts a fresh session in the same thread by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30325
* feat: scheduled tasks can run in one thread with a fresh session each run by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30326
* fix(web): dragging a sidebar thread no longer scrolls the list out from under the pointer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30346
* fix(assets): preserve the PR repository for GitHub media by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/21631
* fix(server): load PR uploads from SSO organizations by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/21632
* fix(mobile): the Duo inspector stops at its widest instead of vanishing by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31665
* test(server): launcher PATH lookup test no longer drops the Windows drive letter by @tris203 in https://github.com/pingdotgg/t3code/pull/22534
* test(server): replay tests delete their temp directories by @only21mil in https://github.com/pingdotgg/t3code/pull/23445
* fix(mobile): transcribe Android audio during recording by @PixPMusic in https://github.com/pingdotgg/t3code/pull/31300
* test(web): linked-environment subagents keep opening in their own thread by @RealDoc06 in https://github.com/pingdotgg/t3code/pull/26492
* test(server): pin post-commit outbox settle boundary by @Narayan201120 in https://github.com/pingdotgg/t3code/pull/27560
* test: remove unreachable github cli decoding test by @t3-code-bot[bot] in https://github.com/pingdotgg/t3code/pull/28115
* test(server): retain delegated child events when detaching a parent by @benjamin-di in https://github.com/pingdotgg/t3code/pull/29622
* test(lint): pin which ResizeObserver constructions no-raw-resize-observer reports by @only21mil in https://github.com/pingdotgg/t3code/pull/28781
* test(mobile): drop two deleted tests from the React test list by @only21mil in https://github.com/pingdotgg/t3code/pull/28800
* test(web): worked-for expand test waits for the timeline to finish loading by @saphid in https://github.com/pingdotgg/t3code/pull/29661
* test(web): avoid PDF worker startup timeouts in attachment tests by @voltcrash in https://github.com/pingdotgg/t3code/pull/29933
* test(web): source control writing settings test waits for the reset button by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30372
* test(web): keep the work heading test inside the viewport by @voltcrash in https://github.com/pingdotgg/t3code/pull/30613
* test: use an empty config file instead of the null device for git fixtures on Windows by @Pyseph in https://github.com/pingdotgg/t3code/pull/30772
* test: remove stale tests for unused thread and onboarding helpers by @t3-code-bot[bot] in https://github.com/pingdotgg/t3code/pull/30817
* test(server): correct Windows path and settings assertions by @ElliotDrel in https://github.com/pingdotgg/t3code/pull/30983
* feat(claude): Ultracode works with any effort, like Claude Desktop by @Bil0000 in https://github.com/pingdotgg/t3code/pull/27034
* perf(pr): pull requests paint from data already held, on web, desktop and mobile by @Bil0000 in https://github.com/pingdotgg/t3code/pull/27798
* fix(mobile): approval card buttons line up by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31415
* fix(gitlab): author names link to GitLab profiles by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30418
* fix(gitlab): merge messages drop agent credits by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30441
* fix(gitlab): file and image comments appear as review threads by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30425
* fix(web): screen readers no longer read out a secret typed into the request card by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31653
* perf(pr): actions update every client from the host's reply instead of re-reads by @Bil0000 in https://github.com/pingdotgg/t3code/pull/25761
* feat(mobile): start side chats with /side by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31709
* feat(claude): expose Ultracode on Claude Sonnet 5.5 and Haiku 5.5 by @DrSeedon in https://github.com/pingdotgg/t3code/pull/30781
* feat(settings): Simlock, Antigravity and OpenCode credentials can come from a secret provider by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31652
* refactor(mobile): screens declare what they are; layout and AppBar own every platform bar decision by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31310
* fix(server): a saved source control token that can't be read no longer falls back to another account by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31646
* feat(secrets): answer a secret request with a secret provider reference by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31670
* fix(settings): removing a secret provider clears the fields that used it by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31651
* docs(user): explain secret providers and secret requests by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31654
* feat(server): transcribe audio on a chosen environment by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30625
* feat(web): opt into environment dictation on this device by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30623
* feat(desktop): dictate into browser annotations with the same consent by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30624
* feat(mobile): opt in to dictation on a paired environment by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31059
* fix(web): keep the folder path caret in place while editing by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31642
* perf(mobile): call the highlights lexer through Nitro, up to 10x faster calls on Android by @camchis in https://github.com/pingdotgg/t3code/pull/31188
* fix(claude): turns use the downloaded model catalog by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31717
* fix(gitlab): bot authors are flagged as bots by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30383
* fix(gitlab): merge requests can edit their labels by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30483
* perf(mobile): faster thread sync, connects, and reconnects on bad wifi by @Bil0000 in https://github.com/pingdotgg/t3code/pull/28487
* fix(mobile): iPad composer drops when the keyboard floats or minimizes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31251
* perf(mobile): stop iOS syntax highlighting from looking up a thread-local on every lexer call by @camchis in https://github.com/pingdotgg/t3code/pull/31187
* fix(gitlab): edited comments wake PR watchers by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30403
* fix(gitlab): merge requests can delete their source branch by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30453
* fix(gitlab): comments link to their note on GitLab by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30411
* fix(mobile): iOS terminal accepts Chinese, Japanese and Korean input by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30546
* fix(mobile): Android app no longer stays offline after reopening by @kahlstrm in https://github.com/pingdotgg/t3code/pull/28625
* fix(mobile): show one Android notification per thread completion by @shivamhwp in https://github.com/pingdotgg/t3code/pull/27699
* fix(mobile): stop Android composer flicker at the wrap boundary by @shivamhwp in https://github.com/pingdotgg/t3code/pull/27682
* fix(mobile): Android dictation works with regional preferences set by @EhsanulHaqueSiam in https://github.com/pingdotgg/t3code/pull/31030
* fix(mobile): iOS compose button no longer grows while a tab is pressed by @Jerematix in https://github.com/pingdotgg/t3code/pull/28955
* fix(mobile): Android terminal Backspace deletes on the first press by @only21mil in https://github.com/pingdotgg/t3code/pull/24983
* fix(mobile): Android secret requests no longer offer password manager logins by @voida6 in https://github.com/pingdotgg/t3code/pull/29825
* fix(mobile): iOS composer text no longer turns invisible mid-draft by @wojas in https://github.com/pingdotgg/t3code/pull/30135
* fix(mobile): iOS 26 scroll edge effect no longer hides composer text by @wojas in https://github.com/pingdotgg/t3code/pull/30138
* fix(mobile): typing after in-app dictation reaches the draft again on iOS by @wojas in https://github.com/pingdotgg/t3code/pull/30139
* perf(mobile): skip obsolete queued iOS diff row decodes by @saphid in https://github.com/pingdotgg/t3code/pull/25287
* fix(gitlab): the checks and review list filters work by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30433
* fix(mobile): keep Android tablet cold launches in landscape by @Dwite in https://github.com/pingdotgg/t3code/pull/28825
* fix(pr): GitCafe attachments render in pull request bodies by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31741
* fix(gitlab): unresolved overview threads count as review findings by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30397
* fix(mobile): Android alerts and the live card show the same status bar icon by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/29738
* fix(mobile): keyboard state follows Android's nonanimated IME show by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/25847
* fix(mobile): Android composer no longer accepts autofill by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27489
* perf(mobile): skip obsolete queued full token decodes by @saphid in https://github.com/pingdotgg/t3code/pull/25320
* fix(gitlab): threads on changed code show as outdated by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30423
* fix(gitlab): the checks panel lists each pipeline job by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/28728
* perf(mobile): avoid code row scans while dragging file paths by @saphid in https://github.com/pingdotgg/t3code/pull/25484
* fix(chat): show one usage-limit recovery notice by @shivamhwp in https://github.com/pingdotgg/t3code/pull/29292
* fix(web): adding to the composer no longer drops earlier findings and selections by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/24990
* feat(pull-requests): PR composers complete @user mentions by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30747
* feat(web): add pull request comments to the chat by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30579
* feat(gitlab): link issue, merge request, commit and user references by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30524
* fix(mobile): sending on iOS no longer leaves an autocorrected draft behind by @saphid in https://github.com/pingdotgg/t3code/pull/26452
* feat(gitlab): reviews can request changes by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30549
* feat(pull-requests): PR composers complete #123 and GitLab !123 references by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30857
* feat(gitlab): merge requests from forks can toggle maintainer edits by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/30518
* fix(prs): reviewer menu searches past the first page and keeps GitLab's requested reviewers by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/22489
* fix(ui): snooze menu times match the menu's typography by @ishaanko in https://github.com/pingdotgg/t3code/pull/30596
* feat(web): a Labs setting hides tool calls so threads read like a chat by @flamboh in https://github.com/pingdotgg/t3code/pull/30000
* feat(scheduled-tasks): tasks link to their thread by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31764
* fix(shared): recognize numeric bare-repository config by @macodev00 in https://github.com/pingdotgg/t3code/pull/27500
* fix(server): a command id reused for two threads at once no longer succeeds for both by @saphid in https://github.com/pingdotgg/t3code/pull/18385
* fix(server): coalesce tool output before it fills the live buffer by @snarkyalyx in https://github.com/pingdotgg/t3code/pull/16317
* perf(server): Windows git reads no longer start a console host by @AkiVonAkira in https://github.com/pingdotgg/t3code/pull/19288
* fix(server): a publish whose first push fails still shows the new remote by @saphid in https://github.com/pingdotgg/t3code/pull/29688
* fix(server): reverting files removes what a new .gitignore from the turn was hiding by @saphid in https://github.com/pingdotgg/t3code/pull/29795
* fix(server): Codex titles no longer fail on ChatGPT accounts without gpt-6-luna by @Muzammil-Bit in https://github.com/pingdotgg/t3code/pull/30078
* fix(desktop): quit no longer orphans a backend that is slow to stop by @saphid in https://github.com/pingdotgg/t3code/pull/22572
* perf(server): GitHub activity reads skip PR-wide fields on later review-thread pages (8.9 s → 6.8 s median) by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/30294
* perf(server): the headless browser closes after five idle minutes (517 MiB → 1.6 MiB median) by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/30306
* fix(provider-acp-registry): surface agent error message on sign-in failure by @iScabrous in https://github.com/pingdotgg/t3code/pull/30295
* perf(server): a slow host no longer delays other watched PRs' wakes (935 ms → 65 ms median) by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/30291
* perf(server): PR cache invalidation no longer waits on other projects' reads (1,163 ms → 0.12 ms median) by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/30293
* fix(opencode): tools stopped mid-run show as interrupted, not failed by @saphid in https://github.com/pingdotgg/t3code/pull/29762
* fix(client-runtime): pull request bodies with CRLF line endings keep their code blocks whole by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30352
* fix(shared): long assistant quote chips no longer end in a broken character by @spoukyii in https://github.com/pingdotgg/t3code/pull/30367
* fix(cli): t3 connect unlink no longer warns about a server that is gone by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30324
* fix(server): ACP agents get T3CODE_THREAD_ID like Claude and Codex sessions by @frankhommers in https://github.com/pingdotgg/t3code/pull/30361
* fix(server): accept a case-insensitive DPoP authorization scheme by @spoukyii in https://github.com/pingdotgg/t3code/pull/30337
* fix(server): usage-limit auto-resume no longer arms subagents of archived or deleted parents by @spoukyii in https://github.com/pingdotgg/t3code/pull/30363
* fix(provider-core): background work notices no longer end in a broken character by @spoukyii in https://github.com/pingdotgg/t3code/pull/30369
* fix(client-runtime): subagent previews no longer end in a broken character by @spoukyii in https://github.com/pingdotgg/t3code/pull/30391
* fix(server): explain fake-IP DNS failures in HTML previews by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30318
* perf(resource-monitor): Linux terminal process checks use a third of the CPU by @jaikhuranna in https://github.com/pingdotgg/t3code/pull/30381
* fix(server): failed Claude text generation shows Claude's error instead of raw JSON by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30331
* fix(server): pull request tools point a bare thread uuid at its mcp: thread by @spoukyii in https://github.com/pingdotgg/t3code/pull/30375
* fix(server): message search keeps results when a short non-Latin word differs in case by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30332
* fix(web): preview annotation chip labels no longer end in a broken character by @spoukyii in https://github.com/pingdotgg/t3code/pull/30345
* fix(server): thread titles no longer fail when the text generation provider can't run by @medric-z in https://github.com/pingdotgg/t3code/pull/29607
* fix(web): refresh resource timeline while diagnostics is open by @shawk08033 in https://github.com/pingdotgg/t3code/pull/30528
* fix(usage): a CLIProxy hub saved as its management.html panel URL shows accounts again by @Jolymmiles in https://github.com/pingdotgg/t3code/pull/25579
* fix(shared): command output keeps text after an unterminated OSC by @spoukyii in https://github.com/pingdotgg/t3code/pull/30479
* fix(cli): t3 up's retry and restart hints keep --base-dir by @spoukyii in https://github.com/pingdotgg/t3code/pull/30480
* fix(server): a branch tracking another local branch no longer shows that branch's PR by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30563
* fix(web): terminal links keep route and pnpm paths in one piece by @tiliakoos in https://github.com/pingdotgg/t3code/pull/30603
* fix(shared): CSV and TSV attachments keep their table under generic file types by @tiliakoos in https://github.com/pingdotgg/t3code/pull/30601
* fix(server): report Claude settings compaction threshold by @voltcrash in https://github.com/pingdotgg/t3code/pull/29220
* fix(cli): t3 project remove finds a deleted project by a relative or trailing-slash path by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30562
* fix(server): an invalid regex in project search still finds its text when Match case is off by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30569
* fix(server): agents see why a project update was refused instead of a generic failure by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30564
* perf(client-runtime): stop tracing streamed thread batches by @ElliotDrel in https://github.com/pingdotgg/t3code/pull/30679
* fix(server): rewound Codex threads import their history from before the rewind by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30652
* fix(server): keep writes moving with a larger WAL limit by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31804
* fix(opencode): edits that delete text keep their empty replacement by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30643
* fix(forgejo): read author assignees once by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30686
* fix(cli): t3 pair's no-running-server hint keeps --base-dir by @saphid in https://github.com/pingdotgg/t3code/pull/30689
* perf(server): stop tracing routine port polling helpers by @ElliotDrel in https://github.com/pingdotgg/t3code/pull/30678
* fix(server): ACP MCP bridge no longer splits messages on U+2028/U+2029 by @geezoria in https://github.com/pingdotgg/t3code/pull/30719
* fix(cli): expand home-relative thread project paths by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30721
* perf(ci): boot the built web client in Build and Typecheck, not Test Web (about 22 s off the longest job) by @Pyseph in https://github.com/pingdotgg/t3code/pull/30752
* fix(shared): ignore unfinished quoted Git config continuations by @imharjot in https://github.com/pingdotgg/t3code/pull/30743
* fix(review-guide): preserve excerpt line terminators by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30717
* feat(pi): show extension status in existing controls by @StiensWout in https://github.com/pingdotgg/t3code/pull/23901
* fix(fx): preserve literal unicode escape text in clipped replies by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30701
* perf(dev): knip:check runs its two passes side by side (34 s → 26 s median on 4 CPUs) by @Pyseph in https://github.com/pingdotgg/t3code/pull/30737
* fix(shared): command output no longer prints the final byte of escape sequences with intermediates by @geezoria in https://github.com/pingdotgg/t3code/pull/30724
* fix(web): restore folder breadcrumb trails when reopening tabs by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30706
* fix(client-runtime): sanitized error stacks keep line and column for URLs with a query by @geezoria in https://github.com/pingdotgg/t3code/pull/30726
* fix(shared): shortened agent paths like /tmp/... no longer become broken file chips by @saphid in https://github.com/pingdotgg/t3code/pull/30762
* fix(server): MCP auth spans no longer include the tool call by @navidnadali in https://github.com/pingdotgg/t3code/pull/30834
* fix(server): preview browser picks up Chrome 157 security fixes by @snnbotchway in https://github.com/pingdotgg/t3code/pull/30820
* fix(server): agents read RTF paragraphs that end with a backslash by @geezoria in https://github.com/pingdotgg/t3code/pull/30848
* fix(server): a late checkpoint keeps the stopped run's baselines by @navidnadali in https://github.com/pingdotgg/t3code/pull/30830
* fix(shared): preserve IPv6 hosts when switching clone protocols by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/30798
* docs: explain Linux desktop installation by @voltcrash in https://github.com/pingdotgg/t3code/pull/30819
* perf(server): each live event is projected once for all subscribers by @navidnadali in https://github.com/pingdotgg/t3code/pull/30860
* fix(server): request_secret asks for one value per card by @rgrvlsk in https://github.com/pingdotgg/t3code/pull/30805
* fix(ssh): host discovery skips hidden Include matches by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/30910
* docs: clarify diagnostic exports and their separate controls by @Mr-Neutr0n in https://github.com/pingdotgg/t3code/pull/30942
* docs: fix worktree cleanup path in FAQ by @jacobcorbett in https://github.com/pingdotgg/t3code/pull/31000
* fix(server): a policy that manages observability endpoints is refused instead of ignored by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/30973
* fix(client-runtime): untitled subagent titles no longer end in a broken character by @spoukyii in https://github.com/pingdotgg/t3code/pull/30390
* fix(shared): underline styles and colours no longer scramble command output colours by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/21542
* perf(server): batch queued provider writes without waiting by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31656
* fix(server): prepare restart continuations faster on shutdown by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31807
* fix(web): keep change totals aligned beside the label by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31814
* fix(web): rank usage provider summaries by the selected metric by @dharmeshgurnani in https://github.com/pingdotgg/t3code/pull/15632
* fix(server): wait for automatic follow-ups before settling threads by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31815
* fix(web): settings descriptions use the full row and stay two lines by @flamboh in https://github.com/pingdotgg/t3code/pull/31826
* fix(voice): insert Unicode word boundaries for dictation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31799
* fix(mobile): use preferred languages for on-device iPhone dictation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31800
* fix(mobile): keep the opening words of local iPhone dictation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31801
* fix(server): keep PR generation focused on the change by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31819
* chore(desktop): trace shutdown phases by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31850
* perf(server): batch shutdown recovery commits by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31854
* perf(server): batch projection recovery reads into one query by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31842
* fix(desktop): let the window shrink to 400x360 so it fits half-screen tiles by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28223
* fix(web): improve Changes row text and spacing by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31858
* feat(server): stop opted-in project actions when threads settle by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31857
* fix(build): skip Koffi source builds during cross-packaging by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31864
* fix(server): Antigravity installs on Intel Macs by @aledog007 in https://github.com/pingdotgg/t3code/pull/30189
* fix(desktop): arm64 macOS builds no longer ship x64-only objc-js binary by @joshuarossi in https://github.com/pingdotgg/t3code/pull/31285
* fix(web): keep task updates static in the timeline by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/31888
* fix(devices): keep devices listed when simulator discovery fails by @shivamhwp in https://github.com/pingdotgg/t3code/pull/25971
* fix(web): dragging a sidebar thread no longer scrolls the list to the bottom by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27691
* fix(web): tagging a thread by drag no longer scrolls the sidebar by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31924
* ci: stacked PRs stop evicting the shared pnpm cache by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31937
* fix(web): remote subagents no longer split from the lineage list by @t3dotgg in https://github.com/pingdotgg/t3code/pull/29285
* perf(ci): release uploads stop recompressing installers and CLI archives by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31942
* feat(antigravity): identify as T3 Code to agy acp 1.5.1+ by @patrick-toulme in https://github.com/pingdotgg/t3code/pull/31158
* ci(release): JS bundle jobs stop building an unused Linux helper by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31941
* feat(marketing): help search engines tell t3.codes apart from copycat sites by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31142
* perf(server): background service launcher uses 75% less memory by @t3dotgg in https://github.com/pingdotgg/t3code/pull/29284
* fix(azure-devops): a fork's same-named branch no longer hides the branch's own pull request by @saphid in https://github.com/pingdotgg/t3code/pull/29817
* perf(server): provider-thread reads start from owned rows, not every node of the thread by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31012
* perf(server): stop tracing the per-event background-work probe by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31584
* perf(server): stop tracing each transcript file in usage scans by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31586
* perf(cursor): stop tracing the per-event account usage hash by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31017
* fix(muse): recover from unavailable session views by @Sidreyas in https://github.com/pingdotgg/t3code/pull/32154
* feat(web): sort and filter transcription models by @voltcrash in https://github.com/pingdotgg/t3code/pull/32045
* fix(azure-devops): existing pull requests are found for branches containing # by @aotradovec in https://github.com/pingdotgg/t3code/pull/31928
* perf(server): background PR discovery no longer delays git status after a restart by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32162
* fix(web): the citation comment box opens at the quote instead of sliding in from the corner by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32141
* fix(clients): dictating a citation comment or preview annotation uses the full width by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32142
* fix(web): PR bodies keep before/after video tables intact by @bartlomiejbloniarz in https://github.com/pingdotgg/t3code/pull/25988
* perf(release): fetch the nightly Android APK in a background step by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31949
* perf(release): macOS CLI notarization no longer blocks the desktop build by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31945
* ci(release): npm publish no longer checks out and installs the workspace by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31936
* ci(release): macOS arm64 stops compressing a pnpm store it cannot save by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31955
* fix(web): relay-connected microphone destinations authorize speech requests by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31778
* fix(server): a usage-limit auto-resume survives a server restart by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31292
* fix(mobile): review diff no longer goes blank after switching sections by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27960
* fix(mobile): iOS filter menus close back into their pill without clipping or garbling by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31168
* fix(mobile): Android composer renders DM Sans by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/30230
* fix(desktop): open Teams web in the preview browser by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31489
* fix(web): popovers over the desktop header respond to the pointer by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31794
* fix(web): add installable icons for Firefox on Android by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30420
* fix: show latest reply age in active thread rows by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31825
* fix(mobile): keep settled status pills readable by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31635
* fix(mobile): preserve line breaks in Markdown table cells by @shivamhwp in https://github.com/pingdotgg/t3code/pull/29355
* fix(mobile): stop the work-row shimmer from updating every frame by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28530
* fix(server): t3 service install no longer moves a --base-dir service onto an empty ~/.t3 by @shivamhwp in https://github.com/pingdotgg/t3code/pull/23878
* feat(voice): opt into cloud dictation with OpenAI, Grok, or OpenRouter by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31769
* fix(web): make first-run dictation setup discoverable by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32197
* fix(web): first-run voice setup offers a model for the user's language by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32035
* feat: auto-settle inactive threads after 7 days by default by @t3dotgg in https://github.com/pingdotgg/t3code/pull/32325
* docs(updates): say when Update all leaves a provider out by @Djordje-Stojanovic in https://github.com/pingdotgg/t3code/pull/32269
* test(server): three more tests stop assuming a POSIX host by @MikaMcFlurry in https://github.com/pingdotgg/t3code/pull/32263
* fix(server): git failures are read in English when macOS git follows the system language by @jason5545 in https://github.com/pingdotgg/t3code/pull/32252
* fix(marketing): balance fork and download heading text by @extoci in https://github.com/pingdotgg/t3code/pull/32194
* perf(shared): scan usage-limit support once per provider catalog by @luke2x in https://github.com/pingdotgg/t3code/pull/32179
* fix(pi): the T3 MCP extension file is written atomically by @rishabhx29 in https://github.com/pingdotgg/t3code/pull/32231
* fix(web): the main sidebar stays collapsed after relaunch by @shivamhwp in https://github.com/pingdotgg/t3code/pull/24202
* fix(codex): explain speed limits on managed connections by @shivamhwp in https://github.com/pingdotgg/t3code/pull/30322
* fix(web): isolate scrollbar styles from iframe owners by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/32398
* fix(azure-devops): default-branch lookup no longer fails for missing --repository by @voltcrash in https://github.com/pingdotgg/t3code/pull/29586
* perf(server): avoid lsof polling when Linux proc is usable by @voltcrash in https://github.com/pingdotgg/t3code/pull/30011
* fix(providers): remove incomplete ChatGPT connections by @voltcrash in https://github.com/pingdotgg/t3code/pull/29280
* fix(acp): retain streamed child tool output by @StiensWout in https://github.com/pingdotgg/t3code/pull/32411
* fix(web): recover ACP settings when projects change by @StiensWout in https://github.com/pingdotgg/t3code/pull/32409
* fix(shared): inline code like `allocator.cc:217` becomes a file chip by @felixlaga in https://github.com/pingdotgg/t3code/pull/32403
* fix(server): theme files saved with a UTF-8 BOM are published instead of rejected by @felixlaga in https://github.com/pingdotgg/t3code/pull/32405
* fix(grok): long command titles no longer end in a broken character by @felixlaga in https://github.com/pingdotgg/t3code/pull/32408
* fix(github): keep review-required until required reviewers approve by @wSedlacek in https://github.com/pingdotgg/t3code/pull/32395
* feat(web): delete archived threads from the archive page by @voltcrash in https://github.com/pingdotgg/t3code/pull/22160
* fix(provider-acp): preserve UTF-8 across interleaved terminal streams by @StiensWout in https://github.com/pingdotgg/t3code/pull/32391
* fix(pi): preserve explicit thinking when switching models by @StiensWout in https://github.com/pingdotgg/t3code/pull/32389
* fix(acp): bound unread raw notification retention by @StiensWout in https://github.com/pingdotgg/t3code/pull/19585
* fix(web): keep Pi thinking controls visible before selection by @voltcrash in https://github.com/pingdotgg/t3code/pull/27397
* fix(desktop): published themes reach the app when it uses this machine's service by @not-compromised in https://github.com/pingdotgg/t3code/pull/26324
* fix(antigravity): check account access after installation by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/32446
* fix(acp): preserve native form questions and typed answers by @StiensWout in https://github.com/pingdotgg/t3code/pull/19659
* fix(antigravity): explain missing SOCKS dependency during refresh by @StiensWout in https://github.com/pingdotgg/t3code/pull/19660
* fix(cursor): use the SDK account for usage data by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/32448
* fix(web): agent sign-in defaults to Auto access by @flamboh in https://github.com/pingdotgg/t3code/pull/32186
* fix(gitlab): `glab mr accept` counts as a shell merge by @felixlaga in https://github.com/pingdotgg/t3code/pull/32400
* fix(forgejo): tea's `pull` and `m` aliases count as shell merges by @felixlaga in https://github.com/pingdotgg/t3code/pull/32401
* fix: side chats start with the parent's permission mode and reasoning level by @Iweisc in https://github.com/pingdotgg/t3code/pull/32315
* fix(mobile): center the Choose project empty-state buttons by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27450
* fix(mobile): Android terminal sends hardware-keyboard arrows, Tab, and Escape to the PTY by @only21mil in https://github.com/pingdotgg/t3code/pull/32666
* fix(mobile): group settled PR threads in the continue menu by @arifali123 in https://github.com/pingdotgg/t3code/pull/27941
* fix(mobile): shorten the model picker save action by @PixPMusic in https://github.com/pingdotgg/t3code/pull/32551
* fix(mobile): center Android header confirmation buttons by @PixPMusic in https://github.com/pingdotgg/t3code/pull/32239
* fix(muse): a declined /compact reports its reason and no longer wedges the thread by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/28454
* fix(web): restore bold weight in rendered Markdown by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/25694
* fix(web): device tool update buttons fit their popovers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27030
* fix(web): mobile sidebar keeps its width when shelves expand by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27541
* fix(web): lineage phase headers truncate instead of overflowing the details card by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27582
* fix(server): storage report lists project worktrees nested inside plain folders by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/25883
* fix(scripts): report:renders starts on Windows without a vp shim by @only21mil in https://github.com/pingdotgg/t3code/pull/32777
* perf(server): skip oversized history during handoff selection by @AksharP5 in https://github.com/pingdotgg/t3code/pull/23821
* feat(antigravity): support agy CLI as custom binaryPath by @jorotodorovv in https://github.com/pingdotgg/t3code/pull/32503
* fix(mobile): share PDFs from the Android attachment viewer by @shivamhwp in https://github.com/pingdotgg/t3code/pull/32266
* fix(server): saved preview screenshots keep full resolution by @TonybynMp4 in https://github.com/pingdotgg/t3code/pull/28255
* fix(server): refresh linking tools in existing agent sessions by @shivamhwp in https://github.com/pingdotgg/t3code/pull/26737
* feat(server): html tools take a file path, so agents stop retyping pages by @t3dotgg in https://github.com/pingdotgg/t3code/pull/32833
* fix(search): keep whole-word title matches above busy prefixes by @shivamhwp in https://github.com/pingdotgg/t3code/pull/32242
* fix(connect): show why relay unlink failed by @shivamhwp in https://github.com/pingdotgg/t3code/pull/25198
* fix(mobile): keep scheduled task prompts clear of microphone by @shivamhwp in https://github.com/pingdotgg/t3code/pull/32498
* feat(web,mobile): move a scheduled task to another thread by @binjamshid in https://github.com/pingdotgg/t3code/pull/31379
* perf(server): Codex tool calls no longer wait on reasoning summaries by @t3dotgg in https://github.com/pingdotgg/t3code/pull/31149
* fix(web): fill combobox search fields by @shivamhwp in https://github.com/pingdotgg/t3code/pull/32926
* fix(server): mise-installed providers update through mise instead of their own updater by @ryanrhughes in https://github.com/pingdotgg/t3code/pull/21524
* perf(sidebar): avoid full git status for branch labels by @StiensWout in https://github.com/pingdotgg/t3code/pull/32947
* perf(desktop): speed up cold Linux x64 backend startup by @StiensWout in https://github.com/pingdotgg/t3code/pull/32987
* fix(clients): unloaded thread links show their title and project icon by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/32830
* fix(clients): parse angle-bracketed thread link destinations by @ScriptedAlchemy in https://github.com/pingdotgg/t3code/pull/30709
* fix(desktop): prepare server bytecode on Linux ARM64 by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/33050
* fix(desktop): open cursor:// and vscode:// file links from chat by @fixfon in https://github.com/pingdotgg/t3code/pull/23486
* perf(server): batch worktree branch allocation and avoid path collisions by @StiensWout in https://github.com/pingdotgg/t3code/pull/32934
* perf(server): skip unnecessary worktree cleanup scans by @StiensWout in https://github.com/pingdotgg/t3code/pull/32933
* fix(server): wake idle parents for late delegated results by @StiensWout in https://github.com/pingdotgg/t3code/pull/32573
* fix(mobile): keep side chats readable over the conversation by @PixPMusic in https://github.com/pingdotgg/t3code/pull/32240
* fix(desktop): declare Calendar access for hosted commands by @Lenoridev in https://github.com/pingdotgg/t3code/pull/21592
* fix(server): macOS Bash terminals now start as login shells by @fixfon in https://github.com/pingdotgg/t3code/pull/22295
* fix(web): keep the wide table scrollbar visible when it overflows by @fixfon in https://github.com/pingdotgg/t3code/pull/24084
* fix(web): file chip tooltips show the whole path by @Princeyadav05 in https://github.com/pingdotgg/t3code/pull/27993
* fix(web): sidebar search results can be dragged onto the composer by @root-daemon in https://github.com/pingdotgg/t3code/pull/28016
* fix(server): allow slow Antigravity browser preflights by @maria-rcks in https://github.com/pingdotgg/t3code/pull/25211
* fix(server): name rejected certificates when linking peers by @maria-rcks in https://github.com/pingdotgg/t3code/pull/28060
* fix(web): terminal types macOS Option-layer characters by @neominik in https://github.com/pingdotgg/t3code/pull/21596
* fix(web): boring sidebar threads drag onto the composer again by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/26724
* fix(web): Copy MCP URL uses the T3 Connect address by @t3dotgg in https://github.com/pingdotgg/t3code/pull/32937
* fix(web): cmd+shift+o picks the current project before pinned ones by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33109
* fix(server): respect gh Unix sockets for GitHub requests by @voltcrash in https://github.com/pingdotgg/t3code/pull/27733
* perf(mobile): thread list resumes from the saved cache, and large gaps reload over gzip HTTP by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32287
* feat(mobile): iOS socket compresses traffic by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32288
* perf(server): macOS worktrees open 2x faster by cloning a cached checkout by @t3dotgg in https://github.com/pingdotgg/t3code/pull/32927
* fix(web): mic button always sits next to send by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33133
* feat: Settings reclaims freed database space in one click by @t3dotgg in https://github.com/pingdotgg/t3code/pull/32941
* fix(github): hidden GitHub comments and reviews no longer show in T3 Code by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33134
* feat(mobile): long-press an image to save it to Photos by @t3dotgg in https://github.com/pingdotgg/t3code/pull/29598
* feat(settings): clean up Labs: promote tool calls, remove plan mode and old toggles by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33131
* feat: Labs option to suggest your next prompt after Claude and Codex turns by @t3dotgg in https://github.com/pingdotgg/t3code/pull/28047
* fix(antigravity): agy CLI threads open in Full access and Auto-accept edits by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33143
* test(web): OpenInPicker announcement test no longer hears the previous test by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33139
* ci(release): retry transient GitHub API errors when resolving the release commit by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33149
* fix(muse): retries show while Muse waits and fold away once it recovers by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33151
* feat(cli): npx t3 offers to install the t3 command by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33150
* fix(web): removing a secret provider lists the Simlock tokens that read from it by @MarcoDotIO in https://github.com/pingdotgg/t3code/pull/31754
* fix(server): a duplicate variable row no longer deletes a stored secret by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/31337
* chore(mobile): sync Enriched Markdown with upstream 1d00a92a by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32180
* feat(mobile): Mermaid and math fences render like they do on web by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32190
* feat(desktop): a fresh install sets up the t3 command by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33153
* fix(release): Windows signing retries transient Azure Trusted Signing errors by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33148
* fix: secret cards show the agent's sign-in link as a button by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33157
* ci(release): scheduled nightly checks read 10 KB instead of 28 MB by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33141
* docs(secrets): sign op in with a service account or Connect on remote servers by @yordis in https://github.com/pingdotgg/t3code/pull/31760
* fix(provider-core): agents ask for a sudo password through the private secret card by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27748
* ci(release): Linux desktop builds reuse cached AppImage, FPM, and 7-Zip downloads by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33142
* ci(release): hosted web alias job checks out 3 files, not the repo by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33145
* ci: startup and sidebar changes open the seeded thread before merge by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33146
* refactor(mobile): components/ui platform primitives are iOS files with .android overrides by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33173
* FEATURE: Fast and Ultrafast service tiers for Pi models by @bmdavis419 in https://github.com/pingdotgg/t3code/pull/33177
* fix(mobile): older chat messages show the date, not just the time by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33189
* feat: text generators let model APIs write titles, commits, and transcript cleanup by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33147
* fix(mobile): feature screens use the components/ui menu, dialog and search primitives by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33193
* fix(web): Markdown tasks no longer stay checked after their source is unchecked by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/27353
* fix(web): return focus to composer after timeline prompts by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/33192
* fix(mobile): SVG markers with orient="auto-start-reverse" no longer crash Android by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32812
* fix(mobile): Android keyboard clipboard pastes fold into attachments by @only21mil in https://github.com/pingdotgg/t3code/pull/24482
* fix(mobile): text no longer clips in Android desktop windows on external displays by @satchlj in https://github.com/pingdotgg/t3code/pull/19064
* fix(mobile): compose button no longer covers the last tab on iPhone by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/32995
* fix(mobile): accept image drops in the iOS message input by @12ya in https://github.com/pingdotgg/t3code/pull/25532
* fix(mobile): Android chip taps open the chip from either half by @maria-rcks in https://github.com/pingdotgg/t3code/pull/33126
* fix(mobile): iOS Agent Activity widget shows your agents instead of a blank tile by @shivamhwp in https://github.com/pingdotgg/t3code/pull/21163
* fix(mobile): Android navigation bar follows the app theme by @vinceglb in https://github.com/pingdotgg/t3code/pull/27576
* fix(android): keep diagonal horizontal swipes inside HTML blocks by @none23 in https://github.com/pingdotgg/t3code/pull/21652
* fix(mobile): keep Android live activity independent of alerts by @PixPMusic in https://github.com/pingdotgg/t3code/pull/24933
* fix(desktop): update xa11y to 0.15.4 so App Shots read window text faster by @MatthewFeroz in https://github.com/pingdotgg/t3code/pull/33135
* feat(source-control): add Cursor Origin provider by @maria-rcks in https://github.com/pingdotgg/t3code/pull/33093
* perf(mobile): sign DPoP proofs natively, up to 355x faster on Android by @camchis in https://github.com/pingdotgg/t3code/pull/31998
* feat(marketing): localize the site in 8 languages by @maria-rcks in https://github.com/pingdotgg/t3code/pull/33155
* fix(mobile): iOS terminal can copy, paste, and stop freezing by @t3dotgg in https://github.com/pingdotgg/t3code/pull/25828
* feat(web,mobile): @-mention a model to name it for the agent by @ScriptedAlchemy in https://github.com/pingdotgg/t3code/pull/31207
* fix(server): delegated Claude tasks report the model that ran by @shivamhwp in https://github.com/pingdotgg/t3code/pull/27753
* fix(mobile): nested code blocks no longer overlap the next message on Android by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/28524
* refactor: upgrade Legend List to 3.7.2 and drop our list workarounds by @jmeistrich in https://github.com/pingdotgg/t3code/pull/28125
* fix(mobile): select file text across lines on Android by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31286
* fix(mobile): restore the sidebar toggle and drop the inspector toggle on iPhone Duo by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33213
* fix(server): phones get the approval push when a subagent waits by @shivamhwp in https://github.com/pingdotgg/t3code/pull/24079
* fix(deps): update vulnerable dependencies and lockfile resolutions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33226
* fix(mobile): Android sends with Return on a hardware keyboard by @shivamhwp in https://github.com/pingdotgg/t3code/pull/21687
* fix(server): include thread titles in MCP links by @shivamhwp in https://github.com/pingdotgg/t3code/pull/33255
* fix(composer): persist model picks before the next message by @shivamhwp in https://github.com/pingdotgg/t3code/pull/31739
* fix(server): Codex /goal no longer tries to create the goal twice by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33260
* fix(server): steering during a Claude compaction shows it stopped, not failed by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33291
* fix(server): background command results reach a running Codex goal by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33268
* perf(mobile): threads open over the socket without an extra HTTP round trip by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33306
* feat(web,server): use T3 Code in another app (MCP) by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33196
* feat(web): first run is one Welcome page instead of a 3-step wizard by @t3dotgg in https://github.com/pingdotgg/t3code/pull/33209
* fix(desktop): chat videos go fullscreen across the whole screen again by @Luca-Lucidera in https://github.com/pingdotgg/t3code/pull/25835
* fix(desktop): recording cursor stays above modal dialogs and popovers by @mateusjunges in https://github.com/pingdotgg/t3code/pull/27046
* perf(web): changing file counts no longer re-render the chat view by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/28571
* fix(desktop): a window saved 1px past a display edge reopens where it was by @Abhishek-B-R in https://github.com/pingdotgg/t3code/pull/28638
* fix(web): open citation comments with the caret at the end by @kimkhoi2202 in https://github.com/pingdotgg/t3code/pull/28667
* fix(desktop): page redirects during loading no longer show a navigation error by @shivamhwp in https://github.com/pingdotgg/t3code/pull/28814
* fix(web): banner button hover follows the banner's rounded corners by @Byntham in https://github.com/pingdotgg/t3code/pull/29018
* fix(web,mobile): per-thread auto-settle menu says what it does by @iamabhishekt in https://github.com/pingdotgg/t3code/pull/29025
* perf(web): switching threads no longer re-renders every sidebar row by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/29150
* fix(web): deleting an archived thread also clears its draft, staged uploads and terminal state by @saphid in https://github.com/pingdotgg/t3code/pull/29164
* perf(web): Appearance settings no longer re-probe fonts on every open by @chelokot in https://github.com/pingdotgg/t3code/pull/29171
* fix(desktop): discover browser profiles in XDG config home by @voltcrash in https://github.com/pingdotgg/t3code/pull/29243
* fix(desktop): annotating inside a page's dialog no longer closes it by @thatsnoi in https://github.com/pingdotgg/t3code/pull/29287
* fix(desktop): preserve concurrent downloads with the same name by @voltcrash in https://github.com/pingdotgg/t3code/pull/29308
* fix(web): removing a queued message's attachment counts as an edit when its run starts by @saphid in https://github.com/pingdotgg/t3code/pull/29601
* fix(web): keybinding settings recognize the previewOpen condition by @saphid in https://github.com/pingdotgg/t3code/pull/29642
* fix(web): thread navigation shortcuts honor previewFocus and previewOpen conditions by @saphid in https://github.com/pingdotgg/t3code/pull/29678
* fix(web): editing a scheduled task shows its saved time when the hour has one digit by @saphid in https://github.com/pingdotgg/t3code/pull/29851
* perf(web): long reasoning previews format in linear time (600 ms → 1.3 ms median) by @Yuruzuu in https://github.com/pingdotgg/t3code/pull/30038
* fix(web): keep typed unpublished variable rows across settings re-deliveries by @justsrc in https://github.com/pingdotgg/t3code/pull/30115
* fix(web): deleting the open thread no longer opens a side chat or subagent by @spoukyii in https://github.com/pingdotgg/t3code/pull/30370
* fix(web): review findings handed to a thread no longer end in a broken character by @spoukyii in https://github.com/pingdotgg/t3code/pull/30392
* fix(web): project content search no longer opens a result on an IME Enter by @spoukyii in https://github.com/pingdotgg/t3code/pull/30448
* refactor(shared): simplify remote branch filtering by @roxvi in https://github.com/pingdotgg/t3code/pull/30456
* fix(web): an IME Escape no longer sends the file picker or content search back to the palette by @spoukyii in https://github.com/pingdotgg/t3code/pull/30467
* fix(composer): bound long path search requests on web and mobile by @Jo2234 in https://github.com/pingdotgg/t3code/pull/30714
* fix(web): rich text previews keep paragraphs that end with a backslash by @geezoria in https://github.com/pingdotgg/t3code/pull/30812
* fix(web): deleting a thread clears its side chats' drafts by @saphid in https://github.com/pingdotgg/t3code/pull/29832
* fix(mobile): thread row timers no longer reflow the title every second by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33447
* fix(mobile): smooth expand/collapse when the feed is at the bottom by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33449
* fix(mobile): keep project and environment pickers reachable with the keyboard up by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33456
* chore(mobile): update Expo SDK 58 and React Native native modules by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33228
* ci: give Release Smoke 15 minutes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/33478
* chore(mobile): update gesture handler and keyboard controller by @juliusmarminge in https://github.com/…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sharing & access shows "No environment selected" when the desktop app connects to a background service with Local environment off

2 participants