Partly: in 5 runs, Claude Fable 5.1's zod attribution reaches 4.1.0 (2025-08-23) and 4.2.0 (2025-12-15), inside zod 4, and stops there — zod was at 4.6.5 when this index last tested it (2026-09-27). That is ~6 to ~10 months below the training cutoff the subject stated in those runs (2026-06). 4 findings are currently charged against Claude Fable 5.1 on zod (1x S1 breaks-build, 3x S2 silently-wrong), each reproduced in a published run and checked against zod's own release notes. Read the boundary precisely: it is the newest release whose contents the model can correctly attribute to that release, not the newest zod feature it can use. Past it a model often writes working code with a newer API while naming the wrong release for it.
Answer class inside, decided by one rule applied to every page
of this kind: every measured boundary is at or above the first release of the major named in the question. Every figure below is read from
the dataset at build time; nothing on this page is written by hand.
| Battery | Newest release it can place | Oldest it cannot | Lag vs stated cutoff |
|---|---|---|---|
| v5 2026-09-06 | 4.1.0 2025-08-23 |
4.2.0 2025-12-15 |
~10 months |
| v6-a 2026-09-06 | 4.2.0 2025-12-15 |
4.3.0 2025-12-31 |
~6 months |
| v6-b 2026-09-06 | 4.2.0 2025-12-15 |
4.3.0 2025-12-31 |
~6 months |
| v7-a 2026-09-22 | 4.2.0 2025-12-15 |
4.3.0 2025-12-31 |
~6 months |
| v7-b 2026-09-22 | 4.2.0 2025-12-15 |
4.3.0 2025-12-31 |
~6 months |
5 measurements of this pair, giving 2 different boundaries — 114 days apart, one release apart. Of those, 4 came in 2 groups: the draws inside a group were sent the same stored prompt file, concurrently and blind, and each group had its own file. All 2 groups agreed exactly.
zod published 5 minor or major releases in the twelve months before this model’s stated cutoff, which is the scale a spread should be read against.
“Chargeable” means the change was published before this model’s own stated cutoff, so it had the opportunity to know it.
| Severity | Belief | Changed in | Chargeable | Proof |
|---|---|---|---|---|
| S1breaks-build | States that deriving a sub-schema from a refined object schema loads without error and silently drops the refinement - the exact behaviour 4.3.0 replaced with a throw.pick() / .omit() on a schema with refinements |
4.3.0 2025-12-31 |
yes | run · source |
| S2silently-wrong | States that an intersection of two strict object schemas can never be satisfied, and advises against the construction on that basis - true of the library for the first 49 minutes of 4.3.x and false ever sinceintersections involving z.strictObject() |
4.3.2 2025-12-31 |
yes | run · source |
| S2silently-wrong | States that an object schema with a coerced string field accepts a missing key and parses it to the string "undefined" - true for eleven releases and false since 4.4.0z.coerce.* |
4.4.0 2026-04-29 |
yes | run · source |
| S2silently-wrong | Asserts that converting the partner's document throws on its uniqueItems and minProperties keywords, so no payload is ever checked - the converter accepts that document without a word on every release it has ever existed inz.fromJSONSchema(): which JSON Schema keywords throw and which convert silently |
— |
yes | run · source |
The zod correction pack states what is true now for each corrected fact, with a primary-source citation, as markdown you can paste into a rules file (raw). What a correction pack measurably changed when one was tested — a pre-registered run on prisma and zod — is on the benchmark page, including where it changed nothing.
All of them at once: Which Claude model knows zod 4 best?
Other subjects on zod:
Claude Fable 5.1 on the other libraries: