diff --git a/packages/app/src/provider-selection/resolve-agent-form.test.ts b/packages/app/src/provider-selection/resolve-agent-form.test.ts index aa6ca01048..bb7ab5b954 100644 --- a/packages/app/src/provider-selection/resolve-agent-form.test.ts +++ b/packages/app/src/provider-selection/resolve-agent-form.test.ts @@ -1477,3 +1477,16 @@ it("keeps a new model's thinking preference when pending fork defaults finish re }); expect(ready.form).toEqual(edited.form); }); + +it("preserves saved thinking when a legacy default-model fork resolves", () => { + const resolved = resolveFormState( + { provider: "codex", model: "default", thinkingOptionId: "low" }, + { providerPreferences: { codex: { thinkingByModel: { "gpt-5.3-codex": "xhigh" } } } }, + CODEX_MODELS, + INITIAL_USER_MODIFIED, + makeState().form, + codexProviderMap, + ); + expect(resolved.model).toBe("gpt-5.3-codex"); + expect(resolved.thinkingOptionId).toBe("low"); +}); diff --git a/packages/app/src/provider-selection/resolve-agent-form.ts b/packages/app/src/provider-selection/resolve-agent-form.ts index 8db7c79d63..18915479d2 100644 --- a/packages/app/src/provider-selection/resolve-agent-form.ts +++ b/packages/app/src/provider-selection/resolve-agent-form.ts @@ -141,7 +141,11 @@ function resolveCanonicalModelId( ): string { const normalizedModelId = normalizeSelectedModelId(modelId); if (!normalizedModelId || !availableModels) return normalizedModelId; - return findModelByReference(availableModels, normalizedModelId)?.id ?? ""; + const model = findModelByReference(availableModels, normalizedModelId); + if (model) return model.id; + // COMPAT(default-model-id): added in v0.7.2, remove after 2026-12-06. + // Older drafts used "default" before providers exposed concrete model IDs. + return normalizedModelId === "default" ? resolveDefaultModelId(availableModels) : ""; } export function resolveEffectiveModel( @@ -304,13 +308,6 @@ function resolveModelField(input: { if (!provider) return ""; const initialModel = normalizeSelectedModelId(initialValues?.model); const preferredModel = normalizeSelectedModelId(providerPrefs?.model); - // COMPAT(default-model-id): added in v0.7.2, remove after 2026-12-06. - // Older drafts used "default" before providers exposed concrete model IDs. - if ((initialModel || preferredModel) === "default" && availableModels?.length) { - return ( - findModelByReference(availableModels, "default")?.id || resolveDefaultModelId(availableModels) - ); - } if (initialModel) { return !availableModels ? initialModel