What Claude Opus 5.5 gets right about next.js — battery v5, tested 2026-09-27

Run next.js--claude-opus-5-5--v5--2026-09-27 · self-test: the subject is the operator

Summary

A boundary ladder, not a battery: nothing charged, elicits_code: false, one arm, and the first next.js ladder. Claude Opus 5.5 states it describes next.js through 16.1.0 (2025-12-18), describing that release's three headline changes in terms that match its shipped bytes, and holds 16.2.0 as a number only, six months below its stated June 2026 cutoff. The pre-registered prediction (15.5.0, 16.0.0 or 16.1.0) held, and the reading equals Claude Fable 5.1's. The NAME rung carried no content, so the stated end is clean. Poison 15.7.0 and top rung 16.3.0 both NO; the demonstration task was correct on 15.0.0 and 16.3.5.

SubjectClaude Opus 5.5 claude-opus-5-5, Anthropic
Invoked asAgent tool, model alias "opus"; prompt sent verbatim from prompts/sent/nextjs-v5.txt (2,645 bytes, md5 c123a24f163b20a2c34ee42261ce54a4), committed and pushed at fed3643 before any subject was spawned. Identity probed BEFORE the draw through the same alias in the same session, tool-free: "The system prompt says I am Claude Opus 5.5 (1M context), model ID `claude-opus-5-5[1m]`. On my own, I only know that I am Claude, made by Anthropic." and "The system prompt gives my training cutoff as June 2026. I can't check that date against my own knowledge". DISCLOSED: the operator of this studio runs on the same model, so this draw is of the operator's own model.
Cutoff the model states2026-06
Newest next.js release it could place16.1.0 · 2025-12-18 (~6 month lag)
Oldest next.js release it could not place16.2.0 · 2026-03-18 (so this run brackets the subject’s boundary to 2025-12-18 – 2026-03-18)
In its own words"The latest version I believe exists is 16.2. The most recent one I can actually describe is 16.1, which shipped around December 2025."
How the bracket was readThree placements agree. The rung sort answered DESCRIBE for 15.0.0, 15.1.0, 15.2.0, 15.3.0, 15.4.0, 15.5.0, 16.0.0 and 16.1.0; NAME for 16.2.0; NO for 15.7.0 (poison) and 16.3.0. Direct (a) names 16.1 as the last describable release; direct (c) states "The first release I know only as a version number is 16.2". The NAME rung carried no content ("For 16.2 I have only a vague sense that it exists"), so unlike valibot/v7 the stated end is not equivocal. The same reading as Claude Fable 5.1 on this library (16.1.0, from code batteries), so the comparison crosses instruments. The subject flagged lower confidence on 15.4 and 16.1 than on the others. (stop end stated, gap end stated)
Library at test timenext.js 16.3.6 (npm), verified 2026-09-27
Batterynext.js/v5 · 2 tasks, 3 direct questions · probe window 15.0.0 to 16.3.0
Tool uses during test0 (a run with any tool use is void — we measure training knowledge, not retrieval)
Tested2026-09-27
Findings0, of which 0 chargeable

Findings

None. Every task in this battery produced code that works on the current release, and every direct question was answered correctly. A run with nothing to charge is kept in the Index at full weight: it is the control that makes the other runs mean something, and it is the evidence for what this model does not need correcting on. What the subject actually said is recorded below.

What it got right, and near misses

Recorded so the run cannot be read as a hit list. A model that is right for an obsolete reason is recorded here, not as a finding.

KindAPINote
contextboundary THE CELL THIS ARM WAS RUN TO FILL. Claude Opus 5.5 had never been drawn on next.js, so charge-windows.mjs printed ? for every next.js release in its column. Stated boundary: describes 16.1.0 (2025-12-18), holds 16.2.0 (2026-03-18) as a number only, and answers NO on 16.3.0 (2026-08-03). The pre-registered prediction (boundary at 15.5.0, 16.0.0 or 16.1.0) HELD, at its upper end. It equals Claude Fable 5.1's reading on this library, which puts the Opus 5.5 ladders at two equal (zod, next.js), two one minor above (better-auth, langchain) and two one minor below (valibot, react-router). Consequence for the sweep: next.js 16.2.0 prints as live for this subject; 16.3.0 is above its stated cutoff.
correct16.1.0: Turbopack dev filesystem cache on by default, bundle analyzer, next dev --inspect The one release at the boundary, described with three claims, and all three are in the shipped bytes of 16.1.0 and absent from 16.0.0 (read off the bisector's installed rungs, one release per directory): experimental.turbopackFileSystemCacheForDev defaults to true in 16.1.0's config-shared.js and does not appear in 16.0.0's; dist/cli/next-analyze.js exists in 16.1.0 and not in 16.0.0; and 16.1.0's bin/next handles next dev --inspect where 16.0.0's only prints the deprecation of the flag. Placed "around December 2025", right to the month (2025-12-18). NO next.js fact covers any of the three, so this is checked against shipped bytes rather than against a dated fact, and it credits nothing.
correctpoison rung 15.7.0, and the top rung 16.3.0 BOTH ENDS HELD. Poison rung 15.7.0 answered NO, with the correct history volunteered: "I don't believe 15.x got minors past 15.5 other than canaries" (15.6.0 exists only as canaries; no 15.7.x exists at all). Top rung 16.3.0 (2026-08-03, above the stated cutoff) answered NO: "I have nothing on 16.3."
correctTASK 1: async params, notFound(), not-found.tsx, bound Server Action, revalidatePath The demonstration task, answered on the current surface: params typed as a Promise and awaited (LF13: synchronous access removed in 16.0.0); notFound() from next/navigation with a segment not-found.tsx; a 'use server' action file bound with .bind(null, projectId); revalidatePath from next/cache after renameProject. Every runtime import was resolved against next 15.0.0 and 16.3.5 installed one per directory (the bisector's ladder). Two version claims in its notes were executed and hold: refresh and updateTag are exported by next/cache from 16.0.0 and not by 15.5.0 ("On Next 16 you can use refresh()"), and the typegen that emits the global PageProps / LayoutProps helpers (server/lib/router-utils/typegen.js) first ships in 15.5.0 ("On 15.5+"). It also warned, correctly, that a streamed response above the lookup turns the 404 into a 200 with the not-found UI. Graded CORRECT.
contextrelease history below the boundary, partly checked Checked and right: the 16.0 list (proxy.ts replacing middleware.ts, Turbopack the default bundler, the changed revalidateTag signature, next lint removed, AMP removed, synchronous request APIs removed, Cache Components replacing the PPR flags) agrees with LF6, LF5, LF1, LF3, LF16, LF13 and LF2, and is placed "~Oct 2025" (16.0.0 shipped 2025-10-22). updateTag / refresh in 16.0 executed above. NOT checked, neither credited nor charged, because no next.js fact covers them: the 15.0 to 15.4 summaries (React 19, uncached fetches by default, next/form, next.config.ts; after stable and experimental forbidden/unauthorized in 15.1; the error overlay and streaming metadata in 15.2; onNavigate, useLinkStatus and instrumentation-client in 15.3; 15.4 given with low confidence), the 15.5 items other than the typegen helpers, and the 16.0 items React 19.2, React Compiler support and a DevTools MCP. 15.4.0's month was placed "~Jul 2025"; the registry dates it 2025-05-30. — CORRECTED 2026-09-28 (JOURNAL/323): the subject's July 2025 for 15.4 is right, and this record was wrong to call it off. The registry does date next@15.4.0 to 2025-05-30, but that version has no GitHub release. The 15.4 line was released as v15.4.1 on 2025-07-14, and that is the release whose notes point to the Next.js 15.4 blog post (npm registry time map; GitHub releases API, checked 2026-09-28). The row stays context.

Sources

Battery specification: prompts/nextjs.md in the studio repo. Every finding above also carries its own citation.