What AI coding models get wrong about next.js

21 current findings across 19 models, verified against next.js release notes. Latest next.js at last verification: 16.3.4.

Where each model’s next.js version attribution stops

ModelStated cutoffAttribution stops atLag
Claude Fable 52026-01 16.0.0 · 2025-10-22 ~3 months
Claude Fable 52026-01 16.0.0 · 2025-10-22 ~3 months
Claude Fable 52026-01 16.0.0 · 2025-10-22 ~3 months
Claude Fable 52026-01 16.0.0 · 2025-10-22 ~3 months
Claude Fable 5.12026-06 16.1.0 · 2025-12-18 ~6 months
Claude Fable 5.12026-06 16.1.0 · 2025-12-18 ~6 months
Claude Fable 5.12026-06 16.1.0 · 2025-12-18 ~6 months
Claude Fable 5.12026-06 16.1.0 · 2025-12-18 ~6 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Opus 52026-05 16.0.0 · 2025-10-22 ~7 months
Claude Sonnet 52026-01 15.0.0 · 2024-10-21 ~15 months
Claude Sonnet 52026-01 15.0.0 · 2024-10-21 ~15 months
Claude Sonnet 52026-01 15.3.0 · 2025-04-09 ~9 months
Claude Sonnet 52025-06 15.5.0 · 2025-08-20 ~0 months

Measured by asking each model what shipped in a given next.js 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 next.js 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.

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
S1breaks-build Single-argument revalidateTag in a generated Server Action
revalidateTag
Claude Fable 5 16.0.0
2025-10-22
yes source
S1breaks-build Ships experimental.ppr and experimental_ppr as the primary answer, both removed
experimental.ppr / export const experimental_ppr
Claude Opus 5 16.0.0
2025-10-22
yes source
S1breaks-build Single-argument revalidateTag in a generated Server Action
revalidateTag
Claude Opus 5 16.0.0
2025-10-22
yes source
S1breaks-build Single-argument revalidateTag in a generated Server Action
revalidateTag
Claude Sonnet 5 16.0.0
2025-10-22
yes source
S1breaks-build Configures partial prerendering with experimental.ppr and experimental_ppr, both removed
experimental.ppr / export const experimental_ppr
Claude Sonnet 5 16.0.0
2025-10-22
yes source
S1breaks-build package.json lint script calls next lint, a removed command
next lint
Claude Sonnet 5 16.0.0
2025-10-22
yes source
S1breaks-build Invents images.maximumCacheSize, and an unrecognised images key exits the build
images.maximumCacheSize
Claude Opus 5 16.1.7
2026-03-16
yes source
S2silently-wrong States a parallel route builds without default.js; on 16.0.0 the build fails
parallel routes default.js
Claude Fable 5 16.0.0
2025-10-22
yes source
S2silently-wrong States the default image cache TTL is 60 seconds
images.minimumCacheTTL
Claude Sonnet 5 16.0.0
2025-10-22
yes source
S2silently-wrong Answers "yes" and configures experimental.clientSegmentCache, a key removed in patch 16.0.3
experimental.clientSegmentCache
Claude Fable 5 16.0.3
2025-11-13
yes source
S2silently-wrong Recommends experimental.clientSegmentCache, removed in 16.0.3 and now silently ignored
experimental.clientSegmentCache
Claude Opus 5 16.0.3
2025-11-13
yes source
S2silently-wrong Answers "yes" and configures experimental.clientSegmentCache, a key removed in patch 16.0.3
experimental.clientSegmentCache
Claude Sonnet 5 16.0.3
2025-11-13
yes source
S2silently-wrong Puts the image body cap in the low tens of megabytes and denies a config key lowers it
images.maximumResponseBody
Claude Opus 5 16.1.5
2026-01-26
yes source
S2silently-wrong Names Noto Sans as the ImageResponse default, having explicitly considered and rejected Geist
ImageResponse default font
Claude Opus 5 16.2.0
2026-03-18
yes source
S2silently-wrong Asserts Link has no transitionTypes prop and predicts a React unknown-attribute warning in both routers
Link transitionTypes
Claude Opus 5 16.2.0
2026-03-18
yes source
S2silently-wrong Denies any lever on prefetch request count exists, three releases after experimental.prefetchInlining shipped one
experimental.prefetchInlining
Claude Opus 5 16.2.0
2026-03-18
yes source
S3deprecated Generates middleware.ts, deprecated in favour of proxy.ts
middleware.ts / export function middleware
Claude Sonnet 5 16.0.0
2025-10-22
yes source
S4wrong-metadata Version knowledge stops at 15.0.0, fifteen months before its stated cutoff Claude Sonnet 5 15.1.0
2024-12-10
yes source
S4wrong-metadata Dates the middleware-to-proxy rename to 15.5; it shipped in 16.0.0
proxy.ts
Claude Opus 5 16.0.0
2025-10-22
yes source
S4wrong-metadata States next build uses Webpack by default
next build
Claude Sonnet 5 16.0.0
2025-10-22
yes source
S4wrong-metadata Version knowledge stops at 16.0.0, seven months before its stated cutoff Claude Opus 5 16.1.0
2025-12-18
yes source

Runs