Run zod--claude-fable-5-1--v7-b--2026-09-22
The non-charging blind twin of zod/v7-a, sent the byte-identical file in the same session. It agrees with its twin on the cutoff (2026-06), on the internal control (LF5 at 4.0.0), on task 3's charged failure and hedge, and on task 2's inverted answer - and it DISAGREES with it on task 1, where -a asserted the converter throws on the document's two keywords and this arm said it silently drops them, which is what the packages do on every release below 4.6.0. The disagreement is the duplication paying for itself: the invention charged as -a F1 is one draw's, not the subject's.
| Subject | Claude Fable 5.1 claude-fable-5-1, Anthropic |
|---|---|
| Invoked as | Agent tool, model alias "fable", general-purpose subagent, instructed to use no tools; NON-CHARGING BLIND TWIN of `zod/v7-a`, spawned concurrently with it and with the below-floor control, from the byte-identical file prompts/sent/zod-v7.txt. Neither twin could see the other's session. |
| Cutoff the model states | 2026-06 |
| Newest zod release it could place | 4.2.0 · 2025-12-15 (~6 month lag) |
| Oldest zod release it could not place | 4.3.0 · 2025-12-31 (so this run brackets the subject’s boundary to 2025-12-15 – 2025-12-31) |
| As recorded (this record does not declare whether the words are the subject’s or a summary of them) | "The latest version I have any awareness of is the 4.2 line, with a vague sense that 4.3 exists as a number. The most recent release whose contents I can actually describe with confidence is 4.1 (August 2025); I can describe 4.2 only partially (roughly December 2025 – January 2026, estimate)." |
| How the bracket was read | SELF-PLACED AT 4.1.0 AND DEMONSTRATED AT 4.2.0, so the two readings differ by one minor and the recorded boundary is the demonstrated one. At (a) this arm put its confident knowledge at 4.1 and called 4.2 partial; at (b) it then described 4.2.0's headline content correctly (z.fromJSONSchema(), flagged "moderate confidence on the headline, low on the rest") and used that API unprompted in task 1, which is a demonstration and not a self-report. Its twin -a self-placed and demonstrated at 4.2.0 with no gap. This is the JOURNAL/052 hedged-demonstration shape on the boundary field rather than on a task, and it runs in the same direction JOURNAL/061 found: the self-report UNDERSTATES what the subject holds. |
| Library at test time | zod 4.6.5 (npm), verified 2026-09-22 |
| Battery | zod/v7-b · 3 tasks, 4 direct questions · probe window 4.2.0 to 4.6.0 |
| Tool uses during test | 0 (a run with any tool use is void — we measure training knowledge, not retrieval) |
| Tested | 2026-09-22 |
| Findings | 0, of which 0 chargeable |
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.
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.
| Kind | API | Note |
|---|---|---|
| correct | z.fromJSONSchema() with minProperties / maxProperties / uniqueItems / contains / minContains / maxContains |
TASK 1: THIS ARM WAS RIGHT WHERE ITS TWIN WAS CHARGED, AND SAID SO WITH THE RIGHT UNCERTAINTY. "My belief is that z.fromJSONSchema() drops keywords it can't represent rather than throwing, but I'm not certain of that; if it instead throws on unsupported keywords, validatorFor throws at conversion time and no payload is ever checked." It then graded (i) accepted, (ii) accepted, (iii) accepted, and named the two false positives as false positives: "If those two keywords matter, Zod alone cannot honour the contract." Executed on 4.2.0, 4.3.6, 4.4.3 and 4.5.4: correct, exactly. On 4.6.0 and 4.6.2 the converter enforces both and (i) and (ii) are rejected, so the answer is stale at the current release - which charges nothing, because 4.6.0 was published three months after this subject's stated cutoff and is a declared derivability control on this battery. (Correct for every release the subject can know; wrong only above its stated cutoff, where the battery declared before drawing that no arm can charge. Its twin's contradictory answer is charged as zod/v7-a F1.) |
| context | z.enum() / z.nativeEnum() over a numeric TypeScript enum: .options |
TASK 2: THE SAME INVERTED ANSWER AS ITS TWIN, WORD FOR WORD IN SUBSTANCE. "Zod 4's z.enum filters out the numeric-key reverse mappings, so .options is the clean value list; the schema accepts exactly 0, 1, 2", and the option list built as CountrySchema.options.map((value) => ({ value, label: Country[value] })). That is zod 4.6.0's behaviour, published three months after this subject's stated cutoff. Executed: six options on 4.2.0 through 4.5.4, three of which the schema rejects; exactly the claimed three on 4.6.0 and 4.6.2. Two blind twins reaching the identical inverted answer is what makes it the subject's belief rather than a draw, and it is the battery's headline result. (No divergence from current truth, and the -b arm charges nothing in any case. See zod/v7-a's non_findings and open_questions for the rule question this raises.) |
| miss | z.coerce.* |
TASK 3: THE SAME CHARGED FAILURE AS ITS TWIN, WITH THE SAME HEDGE. "result.success === true; result.data is { search: \"undefined\" }", with the mechanism spelled out correctly for the pre-4.4.0 line, followed by "If a later release made coerced strings reject a missing key, then on that release result.success would be false with an invalid_type issue at path [\"search\"]. I don't know of such a release." False from 4.4.0 (2026-04-29), one month inside this subject's stated cutoff. — RECLASSIFIED 2026-09-28 (JOURNAL/317): filed as context while carrying chargeable_miss: true; misses are counted off kind, so this one was invisible to the run's title and tallies. Kind is now miss. Nothing charged and no F-number added. (The -b draw charges nothing (HARNESS, the duplicated-test-arm rule). The failure IS counted, once, on the -a twin as F2, and this record exists so the agreement between the twins is visible rather than implied.) [chargeable miss — a replicate, a duplicated arm’s second draw or a below-floor control charges nothing;
charged as a finding on zod--claude-fable-5-1--v7-a--2026-09-22] |
| correct | z.record() |
The internal control on attribution was placed correctly here too: (c)(i), z.record(keySchema, valueSchema), answered "4.0.0 (introduced during the 4.0 beta in April 2025, shipped stable July 2025). Not a patch release." Both twins place LF5 correctly, so both arms' attribution answers are readable (JOURNAL/030). On (c)(ii) this arm also said "cannot place", adding "If this change exists, it's in a release I can't describe (4.3 or later), and I'd rather say that than guess a number." The release is 4.4.0. (Correct answer on the internal control.) |
| context | — | THE POISON RUNG WAS DECLINED AND SO WAS A REAL RELEASE, IN THE SAME WORDS. This arm answered 4.4.9 with "cannot describe; I don't know whether it was published" and 4.4.0 with "cannot describe; I don't know whether it was published" - identical treatment of an invented release and one that shipped on 2026-04-29 and that this same arm is (via its twin) charged against. No confabulation, which is the rung's job; but the decline carries no information about discrimination for this subject, and a battery that read it as such would be over-reading. Recorded because the twin arm's answer to 4.4.9 was differently worded and the two should not be averaged. (An instrument reading.) |
Battery specification: prompts/zod.md in the studio repo.
Every finding above also carries its own citation.