Allow mid-session model switching with a persisted transcript marker

Picker stays live for the session; switches persist a model_switch notice (§17 revised).
Rebinds refused mid-turn; images become placeholders for non-vision targets at send time.
This commit is contained in:
Rohit C Prasad
2026-07-22 15:43:54 -07:00
committed by Rohit P
parent a63710ecfe
commit f1eb652d61
13 changed files with 261 additions and 56 deletions
+3 -3
View File
@@ -21,9 +21,9 @@ test("send → user bubble → streamed echo reply renders", async ({ page }) =>
// The message carried the composer's visible model (model-per-message contract): what the
// user sees at send time is exactly what serves the turn.
await expect(page.getByText("[model=anthropic:claude-opus-4-8]")).toBeVisible();
// …and having sent, the model is now FIXED for this session (§17/§22): the composer picker is
// gone and the fact reads in the topbar's facts subtitle instead.
await expect(page.locator(".dd").filter({ hasText: "Claude Opus" })).toHaveCount(0);
// …and the picker STAYS actionable after the first turn (§17 rev 2026-07-22 — mid-session
// switching shipped); the fact also reads in the topbar's facts subtitle.
await expect(page.locator(".dd").filter({ hasText: "Claude Opus" })).toBeVisible();
await expect(page.getByTestId("session-subtitle")).toContainText("Claude Opus 4.8");
// Composer cleared and re-armed for the next turn.
await expect(box).toHaveValue("");