fix(web): resume imported custom-provider threads - #10184
Conversation
Resolve imported thread instance IDs through the environment provider catalog before locking the composer to a driver. Keep an existing session authoritative and preserve unavailable instance locks. Prepared with GPT 6 Astra using the Codex harness.
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a small, localized web bug fix that preserves provider/session identity when resuming imported custom-provider threads. Runtime changes are confined to composer provider resolution and are accompanied by targeted tests for custom, missing, disabled, and session-backed instances. You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
## What's Changed * fix(web): align tool disclosure chevrons with expanded state by @maria-rcks in pingdotgg/t3code#9935 * fix(antigravity): distinguish session initialization auth failures by @maria-rcks in pingdotgg/t3code#9919 * fix(cursor): cache successful model discovery between refreshes by @maria-rcks in pingdotgg/t3code#9918 * fix(opencode): revert from the first removed assistant message by @maria-rcks in pingdotgg/t3code#9924 * fix(web): resume imported custom-provider threads by @juliusmarminge in pingdotgg/t3code#10184 * test(web): cancel pending highlight fixture frames during cleanup by @juliusmarminge in pingdotgg/t3code#10188 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260905.1289...v0.0.39-nightly.20260905.1290 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260905.1290
Imported Claude and Codex histories could show no available provider when they belonged to a custom provider instance. Before their first GUI prompt they have no projected session, and the composer mistook the instance ID for a driver name.
Resolve that instance through the thread environment's provider catalog before locking the composer. Existing session identity stays authoritative. Missing or disabled instances remain unavailable; this does not enable cross-provider switching.
The production importer/decider/projector reproduces the no-session trigger for custom Claude and Codex, with built-in instances and a session-bind control. Three new desired-selection regressions fail on main. All 145 focused tests pass on the fix, including an independent rerun. Targeted lint, formatting and diff checks pass. Local web typecheck reports the same unrelated fileEditorVirtualization.test.ts argument-count error on clean main and this candidate.
In the actual Chromium 152 client, the same synthetic imported history changes from an unavailable-provider composer to the correct Claude model picker. The environment is connected and the custom instance is ready in both captures; the thread has two messages and no session. The picker opens normally after the fix, and empty Send remains disabled. No provider turn or real account was used. This visual fixture is separate from the production import regression test.
Verified against cb9a6942, with relevant paths unchanged on current main 4ca71463. Desktop shares this web renderer. Mobile already resolves the exact instance separately and is unchanged; no native verification is claimed.
The broader provider-switching proposal #9392 touches this helper but makes a different policy change. This fix preserves the current lock policy.
Before:
After:
Prepared by GPT 6 Astra via Codex in T3 Code.
Note
Fix imported custom-provider thread resume selection in
resolveComposerProviderSelectionimportedThreadfixture helper that creates a started thread with a selected provider instance and an imported-history user message without a sessionMacroscope summarized dbaabec.