Re-assessed 2026-07-30: escalated P3 → P1. The predicted failure has already happened.
This row was opened on 2026-07-20 as a "will eventually deprecate" watch item. Checked against
Anthropic's current model catalog this pass, claude-3-5-sonnet-20240620 (model.py:32) is
listed as retired on 2025-10-28 — retired models return 404 not_found_error, and the
documented drop-in replacement for this exact snapshot is claude-sonnet-5. So the anthropic
option in the picker () has
been broken for roughly nine months, in both backends. The original body's framing — "low
urgency; tracked so it does not silently rot into a broken option" — is what has to change:
it already rotted.
gemini-1.5-pro (model.py:41) is the same class of pin and of the same vintage. Treat it as
suspect and re-check it against Google's current model list before shipping; this row does not
assert a retirement date for it, because that would be a claim without a source.
Why this is P1 and not a nit
The failure mode is precisely the one this repo has no defence against. There are no tests, no CI and no mypy (coverage), the model id is a plain string with no validation, and nothing calls the provider at startup — so the 404 surfaces only when a user picks that option mid-conversation. A one-line fix that recovers a quarter of the product's advertised surface is about as high-leverage as this ledger gets.
This row previously recorded a second, compounding harm: the model-selection playbook taught readers that a failing dropdown option is , which sent debugging at the wrong target. That was raised as a scan blocker and fixed — now separates from , states that the pin is dead, links back to this row, and orders the debugging . So a reader is no longer misdirected. : and still carry the retired id and the option still 404s, which is why this row stays at P1. Do not read the doc fix as the fix.
Fix both ports in one edit
The pins are duplicated verbatim in the TypeScript agent — model.ts:26 and model.ts:32
carry the same two strings (agent-typescript-parity).
The Python agent is the one npm run dev actually starts, so fix it first, but change both in
the same commit or the parity note gains another drift entry.
Two things to get right while editing:
- Use exact ids from the provider's current catalog; do not construct one. In particular,
do not append a date suffix to a current Anthropic alias —
claude-sonnet-5is complete as written, and a hand-builtclaude-sonnet-5-<date>404s exactly like the string being replaced. - A retired-model 404 is indistinguishable from a typo'd-model 404. Since neither backend
validates the id, consider whether the
raise ValueError("Invalid model specified")path () should be joined by a startup check — out of scope for the 10-minute fix, but it is why this keeps being invisible.