Release 0.224
0.224.0: The models you pinned, and whether they still exist (branch feat/model-drift)
A pinned model is a decision, not a subscription. It was right the day it
was chosen and nothing ages it. Nothing in the product ever checked whether the
ids agents.model and ai_workers.model actually send are still real — the
first sign of a delisted model is a failed conversation.
pinned-model-drift is a new read-only maintenance report, on the nightly
schedule alongside deps-drift. It reads every enabled agent and worker, asks
each provider what it currently lists, and reports pins that no longer exist
plus newer versions of the same family. It never rewrites a model: which one
you run is a cost and behaviour decision, and that stays yours.
It does not replace models-drift, and the two are easy to confuse.
models-drift is catalogue-level — does our onboarding dropdown still offer
what providers serve — and it deliberately skips OpenRouter, whose list is
built from the provider and cannot drift. That is true of a catalogue and false
of a pin, so this report covers exactly what that one skips.
Most of the work here is in not crying wolf. The naive version was written first and pointed at the real fleet, where it confidently reported three retired models across five healthy boxes. All three were the checker being wrong:
- OpenRouter’s
/modelsenumerates chat models only — no TTS or STT id appears in it at all — so every voice worker read as dead. A pin is now compared only against catalogue entries of its own modality, and the modality comes from the row, never from the catalogue. ~x-ai/grok-latestis a real, current id; the tilde is OpenRouter’s auto-alias marker. Ids are matched exactly, never normalised or tidied. An alias is also never told that something newer exists — tracking the family is the point of pinning one.- A provider with no list API, or one whose key is missing, tells us nothing.
So everything unjudgeable is reported as not checked, with the reason, never as missing, and every cannot-see case is decided before any conclusion about the id. A report that flags healthy pins gets muted within a week, and then the genuine delisting goes unread too.
One judgement is stated wherever the output is read rather than buried in the
source: version segments compare as integers, so 4.20 is newer than 4.5,
matching how these vendors number releases rather than how decimals sort.