{
  "$schema": "../../schema/run.schema.json",
  "run_id": "zod--claude-fable-5-1--v5--2026-09-06",
  "supersedes": null,
  "replicate_of": null,
  "library": {
    "name": "zod",
    "ecosystem": "npm",
    "latest_version_at_test": "4.5.4",
    "latest_version_verified_on": "2026-09-06",
    "latest_version_note": "Re-fetched this session by tools/fetch-releases.mjs against https://registry.npmjs.org/zod. Newest stable: 4.5.4; newest stable minor: 4.5.0 (2026-08-28), this ladder's top rung. The same query establishes the poison rung: the stable minor line runs 3.25.0 (2025-05-19) -> 4.0.0 (2025-07-09) with no 3.26.0 ever published."
  },
  "model": {
    "id": "claude-fable-5-1",
    "label": "Claude Fable 5.1",
    "vendor": "Anthropic",
    "invoked_as": "Agent tool, model alias \"fable\"; prompt sent verbatim from prompts/sent/zod-v5.txt. Identity probed through the same alias in the same session, tool-free: \"Fable 5.1\", `claude-fable-5-1`, cutoff June 2026, all three attributed to the system prompt rather than to self-knowledge.",
    "self_reported_cutoff": "2026-06",
    "cutoff_basis": "Self-reported and AFFIRMING: \"My stated training cutoff is June 2026, but my usable, detailed knowledge of zod specifically thins out around late summer / autumn 2025. That gap between stated cutoff and reliable recall is real and I'd rather flag it than pretend the later versions are familiar.\" A density qualification scoped to recall; no substitute date is offered as the cutoff, so it is not the JOURNAL/055 repudiation.",
    "believed_latest_version": "4.1.x, possibly 4.2.x",
    "believed_latest_quote": "\"The latest version I'm aware of by number is somewhere in the 4.1.x / possibly 4.2.x range. The most recent release whose contents I can genuinely describe is 4.1.0 (codecs), roughly August 2025. Everything after that I know only vaguely or not at all.\"",
    "knowledge_stops_at_version": "4.1.0",
    "knowledge_stops_on": "2025-08-23",
    "knowledge_gap_starts_at_version": "4.2.0",
    "knowledge_gap_starts_on": "2025-12-15",
    "cutoff_lag_months": 10
  },
  "test": {
    "date": "2026-09-06",
    "battery": "zod/v5",
    "battery_spec": "prompts/zod.md",
    "prompt_file": "prompts/sent/zod-v5.txt",
    "tasks": 2,
    "direct_questions": 3,
    "elicits_code": false,
    "tool_uses_during_test": 0,
    "probe_window": {
      "from": "3.25.0",
      "to": "4.5.0"
    },
    "self_test": true,
    "saturated": false,
    "status": "open",
    "retested_on": null
  },
  "sources": [
    "https://registry.npmjs.org/zod"
  ],
  "findings": [],
  "non_findings": [
    {
      "kind": "context",
      "api": "boundary",
      "summary": "THE CELL THIS ARM WAS RUN TO FILL. Claude Fable 5.1 had never been drawn on zod. Boundary: describes 4.1.0 (2025-08-23), holds 4.2.0 (2025-12-15) as a number only, stated in direct question (a) and again in (c) (\"the first release I know only as a version number is 4.2.0\"). Consequence for the sweep: zod 4.2.0, 4.3.0 and 4.4.0 are all LIVE against this subject. 4.4.0 (2026-04-29) is charged against three other subjects and was uncoloured for this one; 4.2.0 and 4.3.0 are the window zod/v4 spent on Claude Fable 5 and Claude Sonnet 5, and BACKLOG 1a-ii parked it for want of a subject with a cutoff in the band. This subject is that subject."
    },
    {
      "kind": "context",
      "api": "rung sort — the subject revised its own verdict on 4.3.0",
      "summary": "THE ONE INSTRUMENT EVENT IN THIS LADDER. The sort's first line answered DESCRIBE for 4.3.0. Before the direct questions the arm corrected itself unprompted — \"I marked 4.3.0 DESCRIBE at first sight above — correcting that: I cannot actually describe 4.3.0, so treat line one as NAME at best\" — and reprinted the full seven-word list with that single change. The two readings are not equivalent: DESCRIBE on 4.3.0 would put the boundary at 4.3.0 and leave only 4.4.0 live. The revised reading is taken, for three reasons stated here rather than argued later: the correction is the subject's own and precedes the direct questions; direct (a) and (c) independently place the last describable release at 4.1.0; and no 4.3.0 content was produced anywhere in the transcript. The discarded reading is published here in full."
    },
    {
      "kind": "correct",
      "api": "poison rung 3.26.0, and the top rung 4.5.0",
      "summary": "BOTH ENDS HELD. Poison rung 3.26.0 answered NO with the correct history — \"my recollection is that 3.x stopped at 3.25.x (patch releases into the 3.25.7x range) once 4.0 went stable\" — which matches the registry: no stable 3.26.0 exists. Top rung 4.5.0 (2026-08-28, two months above the stated cutoff) answered NO, as was 4.4.0 (2026-04-29, inside the stated window but four minors above the demonstrated boundary)."
    },
    {
      "kind": "correct",
      "api": "TASK 1 — safeParse, the `error` param, top-level error helpers",
      "summary": "The demonstration task, and it is Zod 4 rather than Zod 3 throughout: `z.enum([...], { error: '...' })` for the custom message with the explicit note that 3.x wanted `errorMap`/`invalid_type_error`, `safeParse` branching on `success`, and `z.flattenError` / `z.treeifyError` / `z.prettifyError` named as top-level functions with the `.flatten()`/`.format()` methods called deprecated. All of that is 4.0.0 surface, correctly attributed to 4.0.0 in the rung explanation, and it is the demonstration the ladder needs before the boundary question."
    },
    {
      "kind": "correct",
      "api": "release dating below the boundary",
      "summary": "Dated to the month on every rung it claimed: 3.25.0 ~May 2025 (2025-05-19), 4.0.0 ~Jul 2025 (2025-07-09), 4.1.0 ~Aug 2025 (2025-08-23). It also volunteered 4.1.0 unprompted as codecs (`z.codec`, `.decode()`/`.encode()`), a release not on the rung list at all."
    }
  ],
  "open_questions": [
    {
      "question": "Did a trailing-`?` key constructor — `z.interface()` — exist during the Zod 4 beta line and get cut before 4.0 stable? This arm volunteered it again inside its 4.0.0 description (\"`z.interface` dropped before final in favor of getter-based recursion\"), which makes it the third Claude subject to say so. JOURNAL/027 verified only that no such constructor exists in the PUBLISHED 4.x line; prereleases are outside what `data/zod/releases.json` covers, so the beta history stays unverified. Resolving it needs the zod 4 beta changelog or the cut commit.",
      "status": "open"
    }
  ],
  "summary": "A boundary ladder, not a battery: nothing charged, `elicits_code: false`, one arm. Claude Fable 5.1 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. It is the first subject the Index has whose cutoff sits above zod 4.4.0 while its boundary sits below 4.2.0, which reopens the window BACKLOG 1a-ii parked for want of exactly that. The arm corrected its own verdict on one rung before the direct questions and the discarded reading is published beside the taken one."
}
