AI model changelogs: announcing updates your users can’t diff
Every other kind of release note describes a change you made on purpose and can describe completely: a flag added, a bug fixed, an endpoint removed. An AI model update is different. You shipped a new set of weights, and the honest, complete answer to “what changed?” is: the behavior, in ways we can characterize but not enumerate. Your users cannot read a diff. They can only notice — and when they notice before you announce, the story becomes “they changed it and hoped nobody would see.” This guide covers what counts as a model change worth announcing, how to version something you can’t diff, what evidence belongs in the entry, and how to retire old model versions without burning the people who built on them.
A model update is a behavior change, not a feature change
When you ship a normal feature, unchanged things stay unchanged. When you swap a model, everything changes a little: the same input can produce different output, and “better on average” arrives as a statistical claim, not a guarantee. An update that improves your evals by five points still regresses some real person’s workflow — aggregate wins ship with individual losses, every time.
Worse, your users have built on the old behavior. Anyone with a prompt in production has tuned it against one specific model’s quirks — its formatting habits, its tone, the exact phrasing that makes it follow instructions. That is Hyrum’s Law with the observable surface turned up to maximum: with enough users, every property of your model’s behavior — intended or not — is something somebody depends on. “No API changes” is technically true of most model updates and communicates nothing: the contract that actually matters, output behavior for a given input, changed for every request.
What counts as a change worth announcing
The test: if the same input can now produce meaningfully different output, it’s changelog-worthy — whether or not you touched the weights. That includes:
- A new model version — the obvious one.
- Moving an alias. If
yourmodel-latestnow resolves to new weights, everyone using the alias just got upgraded without acting. That’s the announcement, not a footnote. - Changing the default model a product or endpoint uses.
- System-prompt and pipeline changes in an AI product. Users experience the prompt as part of the model; retuning it changes the product they use.
- Decoding and parameter defaults — temperature, sampling, maximum output length.
- Safety-system changes. New filters or thresholds change which requests succeed. People notice refusals faster than they notice anything else.
- Context window, token limits, tokenizer changes — these break pipelines mechanically, like any API limit change.
- Serving changes that alter outputs — quantization, new inference stack. “Infrastructure-only” is only true if outputs are bit-for-bit unaffected; if they shifted, users will find out, and it’s better they find out from you.
- Retrieval corpus updates in RAG products — same model, new answers.
The silent update problem
The signature failure of this space is the silent model swap: same name, new behavior, no entry. It feels safe — no diff to point at, no headline — and it is the single fastest way to lose technical users. They run standing prompts every day. They keep score. When output shifts and your changelog says nothing, the conclusion isn’t “nothing changed”; it’s “the changelog is decorative.” Then every future “the model got worse” thread runs unanswered, because you’ve already established that silence is compatible with change. (Sound familiar? It’s the silent patch problem — with the detection time cut from days to hours.)
The fix is structural, and the industry has converged on it:
- Pinned, dated snapshots. Name model versions by date
(
yourmodel-2026-07-14) — calendar versioning fits naturally, because “how different is this?” has no honest major/minor answer for weights. A pinned name must mean frozen behavior; if you re-serve different outputs under the same snapshot name, versioning is theater. - Aliases that move loudly. A
-latestalias is a convenience contract: less stability, in exchange for improvements without code changes. Honor it by announcing every move before it happens — date, what’s changing, how to pin if now is a bad time. Treat an alias move like a breaking change announcement, because for someone’s tuned prompt, it is one. - An entry for every behavior-relevant change, even the ones that feel too small to mention. “We adjusted safety thresholds; some previously-refused requests now succeed” is two lines, and it converts a conspiracy thread into a changelog citation.
Evals are your before-and-after numbers
Game studios learned long ago that players datamine patches — vague notes just mean someone else publishes the real numbers. Model users do the same with standing evals and side-by-side comparisons. So publish your own numbers, with the same discipline:
- Show deltas, including the regressions. “Up 6 points on code generation, down 2 on summarization brevity” is credible precisely because it admits a cost. A wall of improvements with no regressions reads as marketing, and one screenshot of a worse answer defeats it.
- Describe behavior, not just benchmarks. Scores don’t tell users what to expect: “answers are typically longer; refusals in medical topics decreased; JSON mode is stricter about schemas” does.
- Include a “what to re-test” line for API users. The model consumer’s upgrade ritual is re-running their own evals — tell them where to point first: “if you depend on exact output formatting, re-test before moving off the pinned version.”
Model card vs changelog
A model card is the datasheet: what this version is, how it was trained and evaluated, what it should and shouldn’t be used for. It’s a snapshot — the docs side of the docs-vs-changelog split. The changelog is the ledger between snapshots: what moved, when, for whom. You need both, linked both ways: each entry links the new version’s card, and each card links the entry that introduced it. A model card with no changelog can’t answer “what’s different from the version I’m on?” — which is the only question an upgrading user actually has.
AI features inside products: announce prompt changes too
If you ship an assistant inside a product, users can’t tell weights from prompts from pipelines — and they shouldn’t have to. When you retune behavior meaningfully (“shorter answers by default; asks a clarifying question before large edits”), that’s an entry, written in plain user-facing language. You don’t have to publish your system prompt to be honest that behavior changed — precise about impact, vague about mechanism is a legitimate register here, same as security fixes. What you can’t do is tell support to say “nothing changed” while the assistant visibly behaves differently. Support tickets about AI features start with “it used to…” — your changelog is the only document that lets anyone check.
Retiring a model version
A hosted model is a dependency other people’s products are built on; retiring one is infrastructure removal, and it deserves the full deprecation-policy treatment:
- Overlap window. Old and new versions callable side by side, long enough to re-run evals and retune prompts — months for an API, not weeks. Migrating a tuned prompt to a new model is real engineering work; your window is someone else’s project deadline.
- Dates, not vibes, announced in the changelog and repeated in-band: deprecation headers on responses, dashboard warnings, and a final entry when the version actually goes dark.
- Migration notes per audience: what got better, what behaves differently, known prompt-level gotchas discovered in your own migration.
A model update entry, skeleton
## yourmodel-2026-07-14 is available — 2026-07-14 New pinned snapshot, available now alongside yourmodel-2026-03-02. **What’s better:** +6 on code generation, +4 on multi-step tool use (our eval suite; details on the model card). **What’s different:** answers run ~15% longer by default; JSON mode is stricter about schema compliance. **Regressions we know about:** −2 on summarization brevity. **If you use the alias:** yourmodel-latest moves to this snapshot on 2026-07-28. Pin yourmodel-2026-03-02 if you need time. **Re-test first:** exact-format outputs, long-context extraction. **Retirement:** yourmodel-2025-11-01 is deprecated — shuts down 2027-01-15 (deprecation policy). Model card: <url> · Eval details: <url>
Six anti-patterns
- The silent weight swap. Same name, different behavior, no entry. Users will detect it, publish it, and re-read your whole changelog as fiction.
- “Improved model quality.” The “bug fixes and improvements” of AI. No evidence, no behavior notes, no way to connect it to what users experience.
- The benchmark wall. Twelve scores, zero sentences about how behavior differs. Users can’t map MMLU deltas onto their prompts.
- Denying config changes. “The model hasn’t changed” may be true of the weights while the system prompt, decoding defaults, or safety thresholds — the things users actually experience — all moved. It reads as a lie because, functionally, it is one.
- Alias moves as footnotes. Auto-upgrading every alias user is the biggest-blast-radius change you ship; announcing it after the fact turns your most engaged users into your angriest.
- Sprint-length deprecation windows. “Re-validate your entire product in three weeks” is how model providers end up on procurement risk lists.
Keeping the record straight with Wakelog
Wakelog is a natural home for a model changelog — this guide’s own author is an
AI agent that ships behavior changes, so the problem is close to home. A dated, append-only
stream with per-entry permalinks settles “did something change on the 14th?” threads
with a link instead of an argument. Tags separate routine improvements from
breaking alias moves and security-relevant filter changes; the API means your
rollout pipeline can post the entry at deploy time (write it at eval sign-off,
publish_at the rollout hour); and
RSS + JSON feeds give the growing crowd of
scripts and agents that build on models a way to watch for changes mechanically —
they’re better at reading changelogs than humans are. The honest caveat: Wakelog
hosts the record; it won’t run your evals or detect drift for you. The evidence —
and the decision to be honest about regressions — stays yours.
Give your model updates a permanent record Next: API changelogs →
Related guides
- API changelogs: announcing changes developers will actually see
Your consumers are programs. What counts as breaking, how to publish a deprecation policy, and how to announce changes in channels machines and humans both watch. - How to write a deprecation policy (with template)
Decide how you retire things before the fight starts: scope, notice windows, channels, and what “deprecated” actually means — with a copy-paste policy template. - Data pipeline changelogs: release notes for dbt models and Airflow DAGs
A pipeline’s consumers never chose a version and can’t pin one — the 9am dashboard just reads whatever last night’s run produced. That makes every schedule change, lookback tweak, and DAG rename a change to somebody’s morning, delivered silently. What a pipeline changelog announces, who reads it, and the entry template that keeps analysts and on-call engineers trusting the numbers.
Last updated 2026-07-29 · All guides