{
  "$schema": "../../schema/run.schema.json",
  "run_id": "tailwindcss--claude-opus-5--v1--2026-08-31",
  "markdown": "data/tailwindcss/opus-5.md",
  "library": {
    "name": "tailwindcss",
    "ecosystem": "npm",
    "latest_version_at_test": "4.3.3",
    "latest_version_verified_on": "2026-08-31"
  },
  "model": {
    "id": "claude-opus-5",
    "label": "Claude Opus 5",
    "vendor": "Anthropic",
    "invoked_as": "Agent tool, model alias \"opus\"",
    "self_reported_cutoff": "2026-05",
    "cutoff_basis": "Self-reported: \"May 2026.\"",
    "believed_latest_version": "4.1.x",
    "believed_latest_quote": "\"Latest I'm aware of: Tailwind CSS v4.1.x. That's the newest line I can name with confidence. Most recent release whose contents I can genuinely describe: v4.1, published early April 2025 ... my cutoff is well past April 2025, so there are almost certainly newer Tailwind releases — quite possibly a v4.2 or beyond — whose contents I cannot describe.\"",
    "knowledge_stops_at_version": "4.1.0",
    "knowledge_stops_on": "2025-04-01",
    "knowledge_gap_starts_at_version": "4.2.0",
    "knowledge_gap_starts_on": "2026-02-18",
    "cutoff_lag_months": 13
  },
  "test": {
    "date": "2026-08-31",
    "battery": "tailwindcss/v1",
    "battery_spec": "prompts/tailwindcss.md",
    "prompt_file": null,
    "tasks": 10,
    "direct_questions": 3,
    "tool_uses_during_test": 0,
    "probe_window": {
      "from": "4.0.0",
      "to": "4.2.0"
    },
    "self_test": true,
    "saturated": false,
    "status": "open",
    "retested_on": null
  },
  "sources": [
    "https://tailwindcss.com/docs/upgrade-guide",
    "https://tailwindcss.com/blog/tailwindcss-v4",
    "https://tailwindcss.com/docs/installation/using-vite",
    "https://tailwindcss.com/docs/detecting-classes-in-source-files",
    "https://tailwindcss.com/docs/adding-custom-styles",
    "https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md",
    "https://registry.npmjs.org/tailwindcss"
  ],
  "summary": "One finding, and it is not about code. All ten code tasks are correct v4 — including the two answers no other subject gave, the parenthesised variable shorthand `bg-(--brand)` and the functional `@utility tab-*` form — and the silent-behaviour questions are answered with the right values and the right version attribution. What it cannot do is see past 4.1.0 (2025-04-01), even though 4.2.0 shipped 2026-02-18, well inside its stated 2026-05 window. That is a thirteen-month lag, the largest in the Index, from the model with the latest cutoff in it. Disclosed self-test — the operator model is the subject.",
  "findings": [
    {
      "id": "F1",
      "severity": "S4",
      "severity_label": "wrong-metadata",
      "title": "Version knowledge stops at 4.1.0, thirteen months before its stated cutoff",
      "api": null,
      "change_kind": "version-fact",
      "introduced_in": "4.2.0",
      "introduced_on": "2026-02-18",
      "chargeable": true,
      "chargeable_note": "4.2.0 was published 2026-02-18, roughly two and a half months before this subject's stated cutoff of 2026-05. It is inside the window, so the fairness rule permits charging it. The same finding is NOT charged against Sonnet 5 or Fable 5, whose 2026-01 cutoffs precede 4.2.0.",
      "model_belief": "\"Latest I'm aware of: Tailwind CSS v4.1.x. That's the newest line I can name with confidence.\" It then correctly reasoned about its own gap — \"quite possibly a v4.2 or beyond\" — without being able to name or describe anything in it.",
      "wrong_code": null,
      "correct_code": null,
      "impact": "Low on its own — nothing in 4.2.0 breaks 4.1 code; it adds logical-property utilities and deprecates `start-*`/`end-*`. The value is diagnostic. This subject has the latest cutoff in the entire Index and the largest measured lag in it, on all three libraries tested. Recency of cutoff does not buy recency of knowledge: what a model retains in usable detail lags what it was shown, and the gap widens rather than narrows with a later cutoff.",
      "citations": [
        {
          "url": "https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md",
          "title": "tailwindcss CHANGELOG — 4.2.0",
          "published_on": "2026-02-18",
          "quote": "Deprecate `start-*` and `end-*` utilities in favor of `inset-s-*` and `inset-e-*` utilities"
        },
        {
          "url": "https://registry.npmjs.org/tailwindcss",
          "title": "npm registry metadata for tailwindcss (publication timestamps)"
        }
      ],
      "scope_note": "Anchored to 4.2.0, the first MINOR release the model cannot describe, not to the current 4.3.3. Patch releases within the 4.1 line are not counted against it."
    }
  ],
  "non_findings": [
    {
      "kind": "correct",
      "summary": "Task 1: `@tailwindcss/vite` and `@import \"tailwindcss\";`, with the PostCSS alternative correctly given as `@tailwindcss/postcss` for non-Vite toolchains, and an explicit \"no tailwind.config.js, no npx tailwindcss init\".",
      "api": "tailwindcss as a PostCSS plugin / npx tailwindcss",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 2: `@theme`, plus the CSS detail no other subject mentioned — that @import rules must precede other rules, so the font import goes above `@import \"tailwindcss\"`.",
      "api": "tailwind.config.js",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 3: `@utility tab-4`, then the functional form `@utility tab-* { tab-size: --value(integer) }`. Verified against the custom-styles docs, whose own example is the same utility. Correctly warned that a plain `.tab-4 {}` rule works as a class but gets no variants.",
      "api": "@layer utilities / @layer components (for defining custom classes)",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 4: the fullest answer of the three — `@source inline()` with brace expansion, `@source` for paths outside the scanned tree, `@source not`, and `source(none)`. Also correctly stated that v4 auto-detects sources, obeys .gitignore, and skips node_modules, which is the 4.1.0 change.",
      "api": "node_modules scanning",
      "introduced_in": "4.1.0"
    },
    {
      "kind": "correct",
      "summary": "Task 5: `size-10 shrink-0`, `min-w-0 flex-1`, with the min-width:auto explanation.",
      "api": "flex-shrink-* / flex-grow-* / overflow-ellipsis / decoration-slice / decoration-clone",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 6: `bg-black/50`, and stated unprompted that `bg-opacity-50` was removed in v4 and will produce no CSS — the precise failure mode, not just the replacement.",
      "api": "bg-opacity-* / text-opacity-* / border-opacity-* / ring-opacity-* / placeholder-opacity-* / divide-opacity-*",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 7: the only subject to lead with the v4 parenthesised shorthand `bg-(--brand)`, correctly describing it as new in v4, with `bg-[var(--brand)]` given as the still-valid longhand and the bracket form correctly required for fallbacks and color-mix expressions.",
      "api": "bg-[--var] (CSS variable shorthand in arbitrary values)",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 8: currentColor default correct, with the practical consequence spelled out (\"a hard black 1px box, not the soft grey you probably wanted\") and the exact @layer base restoration block from the upgrade guide.",
      "api": "border / divide (default colour)",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 9: ring is 1px currentColor, and drew the consequence the question was built to test — on a white-text button the v4 default ring is effectively invisible, so it is no longer a usable focus indicator on its own.",
      "api": "ring",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Task 10: `@reference` pointing at the project's own entry file, the correct note that it must be repeated per style block, and the faster alternative of using the generated theme variables directly instead of @apply.",
      "api": "@apply inside Vue/Svelte/Astro <style> blocks and CSS modules",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "correct",
      "summary": "Question (c): a complete and accurate account of v4 configuration — `@import \"tailwindcss\"`, `@theme` namespaces, `--color-*: initial` to clear a namespace, `@theme inline`, `@utility`/`@variant`, `@plugin`, and `@config` as the migration escape hatch. Belief and generated code agree throughout this run.",
      "api": null,
      "introduced_in": "4.0.0"
    },
    {
      "kind": "context",
      "summary": "The model stated the mechanism behind its own finding without being asked: \"a cutoff is the boundary of what I saw, not a guarantee of what I retained in detail. Recent-but-thinly-covered material is exactly where I'm least reliable.\" That is the Index's thesis, volunteered by a subject. It does not excuse F1 — the gap is measured, not asserted — but it is worth recording that the failure is legible to the model from the inside.",
      "api": null,
      "introduced_in": null
    }
  ],
  "open_questions": [
    {
      "question": "The model gave the v4 shadow-sm value as `0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)` and shadow-xs as `0 1px 2px 0 rgb(0 0 0 / 0.05)`. The direction of the rename is verified against the upgrade guide; the exact pixel values were not checked against the shipped theme.css.",
      "status": "open"
    }
  ]
}
