A model identifier in an API request is a pointer, and the two popular forms of pointer guarantee different things. Anthropic's documentation is unusually explicit about this: every Claude model ID identifies a pinned version, the underlying model stays constant for the lifetime of that ID, and dateless IDs in the current generation (for example claude-sonnet-4-6) are snapshots, not evergreen pointers that route to the newest weights (Claude model IDs and versioning). The same page notes that older minor-version aliases such as claude-sonnet-4-5 do behave as convenience pointers that resolve to the most recent dated snapshot for that minor version.
That single distinction is the whole article in miniature. A snapshot pins behavior; an alias pins a promise. Pinning a snapshot means your test asserts against a specific set of weights, so a passing test tells you your prompt, parsing and tool schemas still work with the thing you shipped. Pinning an alias means your test asserts against whatever the provider routes to that name, so a passing test tells you your code still works with the current default, and a failing test may be telling you the underlying model changed, not that your code broke.
Two further wrinkles matter when you write tests. First, weights can be fixed while serving infrastructure changes. Anthropic warns that routers, safety classifiers and sampling logic around a model can change over time and occasionally produce minor behavioral differences even when the model ID and weights have not changed (Claude model IDs and versioning). Second, the same model can carry different lifecycle dates on different platforms: Anthropic states that partner-operated platforms such as Amazon Bedrock and Google Cloud set their own retirement schedules, so a model's status and dates can differ by platform (AI model deprecation and lifecycle calendar). A test suite pinned to a Bedrock model ID is therefore not testing the same lifecycle as one pinned to the first-party API ID.
| What you pin | What the test actually protects | Failure mode when the provider changes something | Best fit |
|---|---|---|---|
| Fixed snapshot ID (dated or current-generation dateless) | Prompt, parser, tool schema and tool-choice logic against known weights | Snapshot is retired and calls error out; occasional drift from serving changes | Regression assertions you want to be stable |
| Alias (minor-version pointer or vendor default name) | Your code's compatibility with whatever the provider currently serves under that name | Silent behavior change passes or fails tests for reasons you did not choose | A small smoke suite that should break on retirement |
| Recorded fixture | Serialization, parsing, error handling, tool-call shapes | Nothing, until you re-record | Everything else |



