{
  "$schema": "../../schema/run.schema.json",
  "run_id": "next.js--claude-fable-5--v2-d--2026-09-02",
  "supersedes": null,
  "replicate_of": null,
  "library": {
    "name": "next.js",
    "ecosystem": "npm",
    "latest_version_at_test": "16.3.4",
    "latest_version_verified_on": "2026-09-02"
  },
  "model": {
    "id": "claude-fable-5",
    "label": "Claude Fable 5",
    "vendor": "Anthropic",
    "invoked_as": "Agent tool, model alias \"fable\"",
    "self_reported_cutoff": "2026-01",
    "cutoff_basis": "Self-reported: \"My training cutoff is January 2026, with the caveat that coverage of the final couple of months before that is noticeably sparser.\"",
    "believed_latest_version": "16.1.x",
    "believed_latest_quote": "\"16.0 shipped October 21, 2025, with patch releases (and I believe a 16.1 around December 2025, though I can't reliably describe its contents) ... my grasp of anything after roughly November 2025 is thin.\"",
    "knowledge_stops_at_version": "16.0.0",
    "knowledge_stops_on": "2025-10-22",
    "knowledge_gap_starts_at_version": "16.1.0",
    "knowledge_gap_starts_on": "2025-12-18",
    "cutoff_lag_months": 3
  },
  "test": {
    "date": "2026-09-02",
    "battery": "next.js/v2-d",
    "battery_spec": "prompts/nextjs.md",
    "prompt_file": "prompts/sent/nextjs-v2.txt",
    "tasks": 9,
    "direct_questions": 2,
    "tool_uses_during_test": 0,
    "probe_window": {
      "from": "16.1.5",
      "to": "16.2.0"
    },
    "self_test": false,
    "saturated": false,
    "status": "open",
    "retested_on": null
  },
  "sources": [
    "https://nextjs.org/blog/next-16-2",
    "https://nextjs.org/docs/app/api-reference/components/image",
    "https://unpkg.com/next@16.3.4/"
  ],
  "summary": "The second below-floor control arm, and the more informative of the two: its next.js attribution stops at 16.0.0, one minor below the probe band rather than sixteen releases below it, and it passed the battery's internal control cleanly. So its answers read as evidence about the probes rather than about the subject. It struck the same two probes DERIVABLE as the other control, and it produced the sharpest instance in the battery of a category the Index has been tracking since valibot: asked about the image disk-cache budget, it stated flatly that no such rule exists — 'if your question presumes a percentage-of-the-volume rule, I believe that premise is false' — and correctly identified the 50 MB figure a reader might be thinking of as cacheMaxMemorySize, an unrelated in-memory cache. Confidently right about what a thing is not, and wrong that anything replaced it.",
  "findings": [],
  "non_findings": [
    {
      "kind": "context",
      "summary": "DERIVABLE — task 1(b). 'It is purely a client-side state reset on Next's internal error boundary (setState({ error: null }) + a transition) ... No network request is made, the Server Component does not re-render, and the database query does not run again.' Correct in mechanism and in what does re-execute, from below the band. Prediction P4 confirmed by both controls independently.",
      "api": "error.tsx retry prop",
      "introduced_in": "16.2.0",
      "chargeable_miss": false
    },
    {
      "kind": "context",
      "summary": "DERIVABLE — task 2(b). Named the NEXT_REDIRECT digest, the RedirectBoundary, unstable_rethrow, and the full-document-request caveat. Prediction P5 confirmed.",
      "api": "catchError (next/error)",
      "introduced_in": "16.2.0",
      "chargeable_miss": false
    },
    {
      "kind": "miss",
      "summary": "Task 5(a) — the sharpest single answer in the battery, and a third instance of 'right about the removal, wrong about the replacement'. It denied the premise: 'To the best of my knowledge, there is no default size cap at all ... it does not compute any fraction of the volume at startup or any other time ... I'm reasonably confident no such rule exists in stable Next.js.' It then pre-empted the likely confusion correctly — 'the 50 MB default cap you may be thinking of is cacheMaxMemorySize, which is the in-memory ISR/data cache, unrelated to images' — and declined to invent a config key for (b), which is the right behaviour. Everything it ruled out, it ruled out correctly. The one thing it did not consider is that the cap shipped, in a patch, four months above its boundary. Not chargeable: 16.1.7 is 2026-03-16, two months above this subject's stated cutoff.",
      "api": "images.maximumDiskCacheSize",
      "introduced_in": "16.1.7",
      "chargeable_miss": false
    },
    {
      "kind": "miss",
      "summary": "Task 3: 'Noto Sans ... Confidence: high on the family name.' The fourth of four draws to name it. Not chargeable — 16.2.0 is above this subject's cutoff.",
      "api": "ImageResponse default font",
      "introduced_in": "16.2.0",
      "chargeable_miss": false
    },
    {
      "kind": "miss",
      "summary": "Task 4: 'transitionTypes is not a real next/link prop in any stable Next.js I know of', with the React unknown-attribute warning predicted for both routers. Not chargeable — above cutoff.",
      "api": "Link transitionTypes",
      "introduced_in": "16.2.0",
      "chargeable_miss": false
    },
    {
      "kind": "miss",
      "summary": "Task 8: experimental.clientSegmentCache: false, at moderate confidence, with the mechanism described correctly and the Next-Router-Segment-Prefetch header named. The key was removed in 16.0.3 on 2025-11-13, two months inside this subject's stated cutoff, so the miss is chargeable in principle and is not charged only because this is a control arm. Both controls made this recommendation; it wants a charging battery.",
      "api": "experimental.clientSegmentCache",
      "introduced_in": "16.0.3",
      "chargeable_miss": true,
      "miss_class": "non_charging_arm",
      "charged_on": null
    },
    {
      "kind": "correct",
      "summary": "Task 7, the internal control, passed cleanly: the [75] default, the 400 enforcement asserted with the clamp named as the alternative, and the release dated correctly to 16.0.0 in October 2025 with the 15.5 deprecation warning that preceded it. This subject can place a change it holds, in a major, to the release. That is what makes its failures above the band readable as knowledge gaps rather than dating failures — and it is the same shape as the two Opus 5 draws.",
      "api": "images.qualities",
      "introduced_in": "16.0.0",
      "chargeable_miss": false
    },
    {
      "kind": "context",
      "summary": "Task 9: it declined to guess a version for a rule it had denied — 'Since I claim the percentage-of-the-volume rule doesn't exist, there is no release to name for it; if it does exist, it postdates my reliable knowledge and this is a stated gap, not a guess at a version.' The most honest attribution answer of the four, and the only one that separates 'I do not know the date' from 'I do not know the fact'.",
      "chargeable_miss": false
    },
    {
      "kind": "context",
      "summary": "Boundary reproduced exactly: next.js/v1 measured this subject at 16.0.0 / 16.1.0 on 2026-08-31 with a different prompt, and v2 lands on the same pair. All three subjects reproduced their v1 next.js boundary under v2. Not re-charged; the recency finding belongs to v1.",
      "chargeable_miss": false
    }
  ],
  "open_questions": []
}
