fix(app): preserve thinking defaults in legacy fork drafts

Resolve the legacy default model placeholder through the same canonical model lookup used for selection and identity comparisons.
This commit is contained in:
paseo-bot[bot]
2026-11-07 22:55:37 +00:00
parent 9e0c9e8537
commit 1d545a6628
2 changed files with 18 additions and 8 deletions
@@ -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");
});
@@ -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