{
  "$schema": "../../schema/run.schema.json",
  "run_id": "zod--claude-opus-5--v1--2026-08-29",
  "markdown": "data/zod/opus-5.md",
  "library": {
    "name": "zod",
    "ecosystem": "npm",
    "latest_version_at_test": "4.5.2",
    "latest_version_verified_on": "2026-08-29"
  },
  "model": {
    "id": "claude-opus-5",
    "label": "Claude Opus 5",
    "vendor": "Anthropic",
    "invoked_as": "Agent tool, model alias \"opus\"",
    "self_reported_cutoff": "2026-05",
    "believed_latest_version": "4.1.x",
    "believed_latest_quote": "4.1.x; expects unknown 4.1.x/4.2.x patches since; 'I am not aware of a Zod 5'",
    "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": 9
  },
  "test": {
    "date": "2026-08-29",
    "battery": "zod/v1",
    "battery_spec": "prompts/zod.md",
    "prompt_file": null,
    "tasks": 6,
    "direct_questions": 3,
    "tool_uses_during_test": 0,
    "probe_window": null,
    "self_test": true,
    "saturated": true,
    "status": "open",
    "retested_on": null
  },
  "sources": [
    "https://zod.dev/v4/changelog",
    "https://registry.npmjs.org/zod/latest"
  ],
  "summary": "Zero S1/S2/S3 on battery v1 — the battery is saturated for this subject. The one finding is the load-bearing one for the whole dataset: the model's Zod version attribution stops nine months before its own stated cutoff, and it named the mechanism itself. Cutoff date is not knowledge recency. On v1's evidence alone that is a dating failure; the v2 battery that supersedes this run went on to demonstrate the feature gap in code.",
  "findings": [
    {
      "id": "F1",
      "severity": "S4",
      "severity_label": "wrong-metadata",
      "title": "version recency lag inside the training window",
      "api": null,
      "change_kind": "version-fact",
      "introduced_in": "4.2.0",
      "introduced_on": "2025-12-15",
      "chargeable": true,
      "model_belief": "Believes the latest Zod is the 4.1.x line (dated to ~August 2025) and states it is unaware of anything past 4.2.x. On the mechanism, unprompted: \"my knowledge of any given library thins out well before the nominal cutoff — recency in the training corpus is uneven, and for a fast-moving package like Zod the last few months before a cutoff are always sparsely represented.\"",
      "wrong_code": null,
      "correct_code": null,
      "impact": "A recent stated cutoff is not a defence against stale priors. The model's describable Zod knowledge ends 2025-08-23 against a stated 2026-05 cutoff — a nine-month lag entirely inside the training window. This is the finding the Index exists to generalise.",
      "citations": [
        {
          "url": "https://registry.npmjs.org/zod/latest",
          "title": "npm registry — zod@latest is 4.5.2 (fetched 2026-08-29)",
          "published_on": null
        }
      ],
      "scope_note": "Calibration was excellent and is recorded in the model's favour: it graded confidence per claim (\"high for 'the current major is 4'... low for the precise current patch version\") and told the reader to check npm. It did not invent a changelog.",
      "chargeable_note": "Anchored to the first release the model could not describe, not to the current release: that is the point at which its version belief became wrong, and it is inside the stated cutoff. The current version at test date is in library.latest_version_at_test."
    }
  ],
  "non_findings": [
    {
      "kind": "correct",
      "summary": "All six code tasks produced correct, current Zod 4 code and all three direct questions were answered correctly.",
      "api": null,
      "introduced_in": null
    },
    {
      "kind": "correct",
      "summary": "Beyond the battery it volunteered several genuinely current v4 facts: z.partialRecord(), exhaustive records for enum keys, .merge() changed in favour of .extend(), z.treeifyError / z.flattenError / z.prettifyError, z.stringbool(), z.toJSONSchema(), Standard Schema interop, and Zod Mini.",
      "api": null,
      "introduced_in": null
    }
  ],
  "open_questions": [
    {
      "question": "The model asserted Zod 4 removed .deepPartial(). Is that a stale prior of a new kind — a model stuck on an intermediate v4 minor whose removal was later reversed?",
      "status": "resolved-non-finding",
      "resolution": "Not a finding. The assertion was TRUE at the model's cutoff. The functional form of z.deepPartial(), alongside .exactPartial(), returned in 4.5.0 published 2026-08-28 — one day before this test. Verified against the GitHub Releases API during the battery v2 verification pass. Shipping it would have put a false entry in the dataset.",
      "resolved_in_run": "zod--claude-opus-5--v2--2026-08-29"
    }
  ]
}
