What AI coding models get wrong about valibot

16 current findings across 30 models, verified against valibot release notes. Latest valibot at last verification: 1.5.0.

Where each model’s valibot version attribution stops

ModelStated cutoffAttribution stops atLag
Claude Fable 52026-01 1.1.0 · 2025-05-06 ~8 months
Claude Fable 52026-01 1.1.0 · 2025-05-06 ~8 months
Claude Fable 52026-01 1.1.0 · 2025-05-06 ~8 months
Claude Fable 5.12026-06 1.1.0 · 2025-05-06 ~13 months
Claude Fable 5.12026-06 1.1.0 · 2025-05-06 ~13 months
Claude Fable 5.12026-06 1.1.0 · 2025-05-06 ~16 months
Claude Fable 5.12026-06 1.1.0 · 2025-05-06 ~16 months
Claude Fable 5.12026-06 1.1.0 · 2025-05-06 ~15 months
Claude Fable 5.12026-06 1.1.0 · 2025-05-06 ~15 months
Claude Opus 52026-05 1.1.0 · 2025-05-06 ~12 months
Claude Opus 52026-05 1.0.0 · 2025-03-19 ~14 months
Claude Opus 52026-05 1.0.0 · 2025-03-19 ~14 months
Claude Opus 52026-05 1.0.0 · 2025-03-19 ~14 months
Claude Opus 52026-05 1.1.0 · 2025-05-06 ~12 months
Claude Opus 52026-05 1.1.0 · 2025-05-06 ~12 months
Claude Opus 52026-05 1.1.0 · 2025-05-06 ~12 months
Claude Opus 52026-05 1.1.0 · 2025-05-06 ~12 months
Claude Opus 52026-05 1.0.0 · 2025-03-19 ~14 months
Claude Opus 52026-05 1.1.0 · 2025-05-06 ~14 months
Claude Opus 5.52026-06 1.0.0 · 2025-03-19 ~15 months
Claude Sonnet 52026-01 1.0.0 · 2025-03-19 ~9.5 months
Claude Sonnet 52026-01 1.0.0 · 2025-03-19 ~10 months
Claude Sonnet 52026-01 1.0.0 · 2025-03-19 ~10 months
Claude Sonnet 52026-01 1.0.0 · 2025-03-19 ~10 months
Claude Sonnet 52026-01 1.0.0 · 2025-03-19 ~10 months

Measured by asking each model what shipped in a given valibot release, then checking the answer against the release timeline. Not inferred from the vendor’s cutoff date. This is the newest release the model can correctly place, not the newest valibot feature it knows — a model past this point often uses a newer API correctly while naming the wrong release for it. Why that distinction matters.

One subject at a time

The same data, split the way the question usually gets asked — one page per subject, with its boundary measurements, its findings on valibot, and how repeatable the boundary was.

And the comparison, ranked by measured boundary and by nothing else: Which Claude model knows valibot 1 best?

Findings

Sorted by severity. “Chargeable” means the change was published before that model’s own stated cutoff, so the model had the opportunity to know it.

SeverityBeliefModelChanged inChargeableProof
S2silently-wrong Denies that valibot ships built-in string-to-primitive conversion actions, and rejects a working pull request that uses them as fabricated
toNumber / toBoolean / toDate / toBigint / toString
Claude Fable 5 1.2.0
2025-11-24
yes source
S2silently-wrong Tells the reader the emoji regex runs linearly and is fine at volume, six months after a ReDoS fix
emoji
Claude Fable 5 1.2.0
2025-11-24
yes source
S2silently-wrong Denies that valibot ships built-in string-to-primitive conversion actions, and rejects a working pull request that uses them as fabricated
toNumber / toBoolean / toDate / toBigint / toString
Claude Opus 5 1.2.0
2025-11-24
yes source
S2silently-wrong Denies that valibot ships built-in string-to-primitive conversion actions, and rejects a working pull request that uses them as fabricated
toNumber / toBoolean / toDate / toBigint / toString
Claude Sonnet 5 1.2.0
2025-11-24
yes source
S2silently-wrong Rejects a pull request that compiles and runs, calling the shipped toKebabCase action a common AI hallucination
toKebabCase
Claude Fable 5.1 1.4.0
2026-05-05
yes source
S2silently-wrong Asserts that rfcEmail is a LOOSER check carrying the same Unicode case-folding hole as email, and is therefore of no use against an account-collision incident — rfcEmail rejects both collision code points on every release that has ever shipped it, and is the one-line fix
rfcEmail
Claude Fable 5.1 —
yes source
S2silently-wrong The twin reaches the same false claim by the same route: rfcEmail carries the same iu case-folding quirk and is of no use against the collision — it rejects both code points on all nine releases that ship it
rfcEmail
Claude Fable 5.1 —
yes source
S2silently-wrong A HEDGED instance of the same claim, charged because the charge follows the designated form: answers "accept", designates "neither email() nor rfcEmail()", and names the true reading only as the branch it does not take
rfcEmail
Claude Opus 5 —
yes source
S3deprecated Names guard as something it half-remembers, then denies it ever shipped — six months after it shipped
guard
Claude Fable 5.1 1.3.0
2026-03-17
yes source
S3deprecated Denies valibot has any result cache and argues from the library's design that it never would, six months after cache shipped
cache
Claude Fable 5.1 1.3.0
2026-03-17
yes source
S3deprecated Denies that valibot has any action that narrows a pipeline's output type from a TypeScript type predicate, three months after guard shipped to do exactly that
guard
Claude Opus 5 1.3.0
2026-03-17
yes source
S3deprecated States that valibot has no result cache and no cache option, three months after the cache method shipped
cache
Claude Opus 5 1.3.0
2026-03-17
yes source
S3deprecated States that valibot has no ISBN validation action
isbn
Claude Opus 5 1.3.0
2026-03-17
yes source
S4wrong-metadata Attributes the repository to a personal account that no longer owns it
github.com/fabian-hiller/valibot
Claude Fable 5 1.2.0
2025-11-24
yes source
S4wrong-metadata Attributes the repository to a personal account that no longer owns it
github.com/fabian-hiller/valibot
Claude Opus 5 1.2.0
2025-11-24
yes source
S4wrong-metadata Attributes the repository to a personal account that no longer owns it
github.com/fabian-hiller/valibot
Claude Sonnet 5 1.2.0
2025-11-24
yes source

Runs