From 8aca1d8d7f59d2dab704abcc10bd69a5b8c9f323 Mon Sep 17 00:00:00 2001 From: Martin Meredith Date: Tue, 10 Nov 2026 14:16:59 +0000 Subject: [PATCH] fix(web,mobile): thread-bound scheduled tasks no longer offer a model their runs ignore A scheduled task bound to a thread runs on that thread's current model. The saved selection only seeds new threads, but the editor's Model field stayed editable, so a change saved and then did nothing. The field is now disabled while the draft is bound, with a note saying runs use the thread's model. Unbinding enables it again. Co-Authored-By: Claude --- .../SettingsScheduledTasksRouteScreen.tsx | 9 +++++++-- .../ScheduledTasksSettings.browser.test.tsx | 16 ++++++++++++++++ .../settings/ScheduledTasksSettings.tsx | 5 ++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx b/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx index ef4b696c82ec8..7db9d48e6da4a 100644 --- a/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx +++ b/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx @@ -858,7 +858,10 @@ function TaskForm({ {promptField} - + navigation.navigate("SettingsScheduledTaskModel")} - disabled={saving || dictationPending || environmentUnavailable} + disabled={ + saving || dictationPending || environmentUnavailable || draft.threadId !== null + } /> diff --git a/apps/web/src/components/settings/ScheduledTasksSettings.browser.test.tsx b/apps/web/src/components/settings/ScheduledTasksSettings.browser.test.tsx index ca8192dd894e3..59019fe85bccd 100644 --- a/apps/web/src/components/settings/ScheduledTasksSettings.browser.test.tsx +++ b/apps/web/src/components/settings/ScheduledTasksSettings.browser.test.tsx @@ -215,4 +215,20 @@ describe("ScheduledTasksSettings", () => { await expect.element(dialog.getByRole("heading", { name: "New task" })).toBeInTheDocument(); await expect.element(name).toHaveValue("My draft"); }); + + it("locks the model while the task is bound to a thread", async () => { + setup(); + await using _screen = await render(); + const dialog = page.getByRole("dialog"); + const model = dialog.getByRole("button", { name: "Choose model" }); + const note = dialog.getByText("Runs use this thread's current model."); + await expect.element(model).toBeDisabled(); + await expect.element(note).toBeVisible(); + + await userEvent.click(dialog.getByRole("combobox", { name: "Destination" })); + await userEvent.click(page.getByRole("option", { name: "New thread each run" })); + + await expect.element(model).toBeEnabled(); + await expect.element(note).not.toBeInTheDocument(); + }); }); diff --git a/apps/web/src/components/settings/ScheduledTasksSettings.tsx b/apps/web/src/components/settings/ScheduledTasksSettings.tsx index ff024e5ba2ed2..412bc9a43be47 100644 --- a/apps/web/src/components/settings/ScheduledTasksSettings.tsx +++ b/apps/web/src/components/settings/ScheduledTasksSettings.tsx @@ -1786,7 +1786,7 @@ function ScheduledTaskEditorForm({
+ {draft.threadId !== "" ? ( +

Runs use this thread's current model.

+ ) : null}