authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-03-01 18:49:54-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-03-01 22:36:35-08:00
log508872e04b87dc7cb53632988115b54b15f78e06
treea04d878a974cb1e9b99118576ce9a55f93606a13
parentaced302b638608042c8a1d30b6fc91dc5661657a

Preserve explicit DEFAULT_MODEL draft overrides

Co-authored-by: codex <codex@users.noreply.github.com>

2 files changed, 21 insertions(+), 6 deletions(-)

apps/web/src/composerDraftStore.test.ts+20
......@@ -242,3 +242,23 @@ describe("composerDraftStore project draft thread mapping", () => {
242242 });
243243 });
244244});
245
246describe("composerDraftStore setModel", () => {
247 const threadId = ThreadId.makeUnsafe("thread-model");
248
249 beforeEach(() => {
250 useComposerDraftStore.setState({
251 draftsByThreadId: {},
252 draftThreadsByThreadId: {},
253 projectDraftThreadIdByProjectId: {},
254 });
255 });
256
257 it("keeps explicit DEFAULT_MODEL overrides instead of coercing to null", () => {
258 const store = useComposerDraftStore.getState();
259
260 store.setModel(threadId, "gpt-5.3-codex");
261
262 expect(useComposerDraftStore.getState().draftsByThreadId[threadId]?.model).toBe("gpt-5.3-codex");
263 });
264});
apps/web/src/composerDraftStore.ts+1-6
......@@ -1,5 +1,4 @@
11import {
2 DEFAULT_MODEL,
32 DEFAULT_REASONING,
43 ProjectId,
54 REASONING_OPTIONS,
......@@ -671,11 +670,7 @@ export const useComposerDraftStore = create<ComposerDraftStoreState>()(
671670 if (threadId.length === 0) {
672671 return;
673672 }
674 const normalizedModelCandidate = normalizeModelSlug(model);
675 const normalizedModel =
676 normalizedModelCandidate && normalizedModelCandidate !== DEFAULT_MODEL
677 ? normalizedModelCandidate
678 : null;
673 const normalizedModel = normalizeModelSlug(model) ?? null;
679674 set((state) => {
680675 const existing = state.draftsByThreadId[threadId];
681676 if (!existing && normalizedModel === null) {