The default changed under you, and it isn''t backward compatible
On July 1, Anthropic made Claude Sonnet 5 the default for every Free and Pro user and shipped it to the API as claude-sonnet-5. Most of the coverage led with the headline: near-Opus performance at a lower price. That part is real. The part builders should care about is quieter, and it lands directly in your codebase.
Sonnet 5 has hard breaking changes. If you set temperature, top_p, or top_k to anything other than the default, the API now returns a 400. Manual extended thinking, deprecated on Sonnet 4.6, also returns a 400. Adaptive thinking is on by default whether you asked for it or not. And the model ships with a new tokenizer, so the exact same input can produce anywhere from 1x to 1.35x the tokens it did before.
Read that last one again. Your prompt didn''t change. Your bill did.
Why this is a dependency problem, not an AI problem
We already have a discipline for this. It''s called dependency management, and every engineer has been burned by a minor version bump that wasn''t actually minor. A model provider is a dependency. The fact that it answers in English instead of returning a struct doesn''t change that.
The teams that felt nothing on July 1 had one thing in common. They pinned a specific model string and treated the upgrade as a deliberate change, not something that happened to them. The teams that got paged were calling a floating alias, hard-coding temperature: 0.2 across their prompts, and forecasting cost as if token counts were stable.
Three failure modes showed up:
- Silent 400s in production. A parameter you set once, a year ago, and forgot about is now a hard error. If your integration tests don''t exercise real API calls, you heard about it from users.
- Cost drift with no code change. A 35% swing in token count on the same traffic is the difference between a healthy margin and a finance conversation. If your cost model assumed tokenizer stability, it was never stable.
- Behavioral regressions. Adaptive thinking on by default changes latency and output shape. Not worse, just different. Different is enough to break a downstream parser or blow a p95 SLA.
What to actually do
Pin the exact model string. Not the alias, the version. Upgrades become pull requests, not surprises.
Put real API calls in CI. Mocking the provider means you test your assumptions about the provider, not the provider itself. Hit the actual endpoint on a small fixture set so a new 400 fails a build instead of a customer.
Re-measure tokens and cost on every model change. Replay a sample of yesterday''s traffic through the new model and diff the token counts before you flip the default. A tokenizer change is a pricing change.
Read the changelog like a migration guide, because that is what it is. "Temperature now returns 400" is one line in a release note and one incident in your on-call channel. Which one you get depends on whether anyone read it.
We''re here to help founders and teams design and build digital products that are built to scale with you, not slow you down. If you''re looking to build something, get in contact with us today!
The takeaway
Sonnet 5 is a good model and the upgrade is worth taking. That is not the point. The point is that "default" is not a contract. Provider defaults move, and when they move they can 400 your requests and re-price your traffic on the same day. Treat every model like a pinned dependency with a changelog you actually read, and the next default change becomes a planned merge instead of a Tuesday fire.