What Claude Opus 5.5 gets right about zod, 1 imprecision recorded — battery v8, tested 2026-09-27

Run zod--claude-opus-5-5--v8--2026-09-27 · self-test: the subject is the operator

Summary

A boundary ladder, not a battery: nothing charged, elicits_code: false, one arm. Claude Opus 5.5 describes zod through 4.1.0 (2025-08-23) and holds 4.2.0 onward as a bare number, ten months below its stated June 2026 cutoff: the same bracket Claude Fable 5.1 gave on the byte-identical prompt. zod 4.2.0, 4.3.0 and 4.4.0 become live windows for this subject. Poison and top rung both answered NO. One wrong prose claim below the boundary (that 4.0 removed .strict()/.passthrough()) was executed and recorded, not charged.

SubjectClaude Opus 5.5 claude-opus-5-5, Anthropic
Invoked asAgent tool, model alias "opus"; prompt sent verbatim from prompts/sent/zod-v8.txt (2,399 bytes, md5 5da357337d0260ea70822a48002d478a, byte-identical to prompts/sent/zod-v5.txt), committed and pushed at d91252a before any subject was spawned. Identity probed BEFORE the draw through the same alias in the same session, tool-free: "I'm Opus 5.5 with the 1M-token context window, model ID `claude-opus-5-5[1m]`", cutoff June 2026, and "Both answers come from my system prompt, not from 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 zod release it could place4.1.0 · 2025-08-23 (~10 month lag)
Oldest zod release it could not place4.2.0 · 2025-12-15 (so this run brackets the subject’s boundary to 2025-08-23 – 2025-12-15)
In its own words"The latest version I know of by number is 4.3.x, and I'm not certain of that. The most recent release whose contents I can describe is 4.1, from about August 2025."
How the bracket was readThree placements agree. The rung sort answered DESCRIBE for 3.25.0 and 4.0.0, NAME for 4.2.0 and 4.3.0, NO for 4.4.0 and 4.5.0; direct (a) names 4.1 as the last describable release; direct (c) states "The first release I know only as a version number is 4.2.0". 4.1.0 was not on the rung list, so its end is stated in (a) and (c) only. Identical bracket to Claude Fable 5.1's zod/v5 on the identical prompt. (stop end stated, gap end stated)
Library at test timezod 4.6.5 (npm), verified 2026-09-27
Batteryzod/v8 · 2 tasks, 3 direct questions · probe window 3.25.0 to 4.5.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 zod, so charge-windows.mjs printed ? for every zod release in its column. Boundary: describes 4.1.0 (2025-08-23), holds 4.2.0 (2025-12-15) as a number only. Consequence for the sweep: zod 4.2.0, 4.3.0 and 4.4.0 become LIVE against this subject (all above 4.1.0 and below its stated 2026-06 cutoff); 4.5.0 and 4.6.0 stay below the floor. The pre-registered prediction (boundary at 4.1.0 or 4.2.0) held. The bracket is the same as Claude Fable 5.1's on the same bytes (zod/v5), so on this library two subjects with the same stated cutoff read the same.
correctpoison rung 3.26.0, and the top rung 4.5.0 BOTH ENDS HELD. Poison rung 3.26.0 answered NO with the correct history: "I don't think it exists. I remember the 3.x line going up to many 3.25.x patch releases, after which 4.0 took over latest." Top rung 4.5.0 (2026-08-28, above the stated cutoff) answered NO, and so did 4.4.0 (2026-04-29, inside the stated window but above the demonstrated boundary).
context4.2.0 held as NAME with a correct association The arm held 4.2.0 at NAME and said why: "I have a vague link between it and JSON Schema work (possibly z.fromJSONSchema), but I'm not confident enough to call it DESCRIBE." The association is right: z.fromJSONSchema() is LF6, introduced in 4.2.0. The boundary is read as the subject placed it (4.1.0), for the same reason zod/v5 took Fable 5.1's self-correction: the subject's own verdict precedes the direct questions and (a) and (c) agree with it. A reading with the boundary at 4.2.0 would remove 4.2.0 from the live set and leave 4.3.0 and 4.4.0 live; it is published here so it is not lost.
correctTASK 1: safeParse, the `error` param, top-level error helpers The demonstration task, answered in Zod 4 throughout: z.enum([...], { error: '...' }) for the custom message, with the note that v3 wanted errorMap and that message is deprecated; safeParse branching on success; z.flattenError(result.error).fieldErrors.mode with .flatten() called deprecated; z.prettifyError and z.treeifyError named. All 4.0.0 surface, correctly attributed.
imprecision.strict() / .passthrough() One wrong claim below the boundary, in the prose of direct (c) and not in any code: 4.0.0 is described as bringing the "Removal of .strict() / .passthrough() in favor of z.strictObject / z.looseObject". Executed this session on the installed ladder (sp-zod-bisect, rungs 4.0.0, 4.1.0, 4.6.2): z.object({a: z.string()}).strict().safeParse({a:'x', b:1}).success is false and .passthrough().parse(...) returns {a:'x', b:1} on all three, the same as z.strictObject beside it. Both methods exist and work across the 4.x line; 4.0 recommends the top-level constructors, it does not remove the methods. A reader told they are removed would rewrite working code, not break it. (A ladder charges nothing and elicits no code (prompts/boundary-ladder.md). The claim is also below this subject's boundary and appeared in a description, not in shipped code; TASK 1 did not use either method. No zod fact covers these methods, and a fact needs a reproduced failure in code, which this is not.)
correctrelease dating below the boundary Dated to the month on every release it described: 3.25.0 about May 2025 (2025-05-19), 4.0.0 July 2025 (2025-07-09), 4.1.0 about August 2025 (2025-08-23), with 4.1.0 described as codecs (z.codec, z.encode/z.decode), which is LF16's release. 3.24 was placed in late 2024 (2024-12-10) with Standard Schema support, flagged as less certain.

Sources

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