{
  "$schema": "../../schema/run.schema.json",
  "run_id": "tailwindcss--claude-fable-5-1--v7-a--2026-09-28",
  "supersedes": null,
  "replicate_of": null,
  "library": {
    "name": "tailwindcss",
    "ecosystem": "npm",
    "latest_version_at_test": "4.3.3",
    "latest_version_verified_on": "2026-09-28",
    "latest_version_note": "Registry `latest` 4.3.3 with no 4.4 (`fetch-releases.mjs --check` current at 2026-09-28T02:01Z, COMMITTED TREE), so the release the prompt names is the one `tailwindcss/v2` was graded against. Everything this draw wrote that `v2`'s and `v6`'s tables did not already cover was compiled this session with the engine's own `compile()` against installed 4.1.0, 4.2.0 and 4.3.3: `py-6` (`padding-block`), `[margin-block-end:--spacing(4)]`, `[border-block-start-width:2px]`, `[inline-size:100%]`, `[max-block-size:--spacing(96)]`, `inset-x-0` (`inset-inline`), `border-x-2`/`border-y-2` (`border-inline-width`/`border-block-width`), `space-x-4` and `divide-x-2` (`margin-inline-*`/`border-inline-*-width`), and the `@utility pbs-* { padding-block-start: --spacing(--value(integer)) }` definition it offered. All compile at all three releases."
  },
  "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/tailwindcss-v2.txt (3,725 bytes, md5 d444013308540553aefae1d5875bd3e2) — the SAME stored file `tailwindcss/v2` sent to Claude Opus 5, Claude Sonnet 5 and Claude Fable 5 on 2026-09-03 and `v6` sent to Claude Opus 5.5 and Claude Haiku 4.5 on 2026-09-28. The re-send and its predictions were committed and pushed at 50bc2fa before any subject was spawned. Identity probed BEFORE the draw through the same alias in the same session, tool-free: \"Fable 5.1 — from the system prompt\", \"claude-fable-5-1 — from the system prompt\", \"June 2026 — from the system prompt (stated as the knowledge cutoff; I have no independent way to verify it from training)\". Nominated in the spec as the CHARGING arm of the Fable 5.1 pair, and it charges.",
    "self_reported_cutoff": "2026-06",
    "cutoff_basis": "Self-reported and affirming at direct (b), qualifying only the density of recall: \"My nominal training cutoff is June 2026. In practice my reliable Tailwind knowledge thins out noticeably around late 2025, so treat anything I say about 2026 releases as unreliable.\" Under HARNESS.md § *A density self-assessment is not a stated cutoff* that does not disqualify the arm — the same reading `v3-a` took of an almost identical sentence. 4.2.0 shipped 2026-02-18, about four months below the stated cutoff.",
    "believed_latest_version": "4.1.x",
    "believed_latest_quote": "\"Latest version I'm aware of: I have a hazy sense that a **v4.2** exists, but I cannot describe its contents. The most recent release whose contents I can actually describe is **v4.1.0 (April 2025)**, plus the 4.1.x patch line through roughly autumn 2025\" … \"First release I know only as a version number: **v4.2**. I believe it exists and cannot tell you a single thing that's in it — including whether it's the release that made Task 3's classes real.\"",
    "believed_latest_quote_form": "draw",
    "knowledge_stops_at_version": "4.1.0",
    "knowledge_stops_on": "2025-04-01",
    "knowledge_stops_provenance": "stated",
    "knowledge_gap_starts_at_version": "4.2.0",
    "knowledge_gap_starts_on": "2026-02-18",
    "knowledge_gap_provenance": "stated",
    "boundary_note": "The same boundary `v3-a` stated on 2026-09-06, and this time it holds under the cue: a prompt about logical properties drew no 4.2 content at all, where the same bytes drew three uncued 4.2.0 contents from Opus 5.5 (`v6-a`). Its 4.1.0 list (`text-shadow-*`, `mask-*`, coloured `drop-shadow`, `safe` alignment, `items-baseline-last`, pointer variants, `noscript`, `user-valid`, `inverted-colors`, `@source inline()`) is 4.1.0's, and `v6-a`'s and `v4`'s verification of those names stands for it. So on tailwindcss the stated boundary is not an under-report for this subject.",
    "cutoff_lag_months": 14
  },
  "test": {
    "date": "2026-09-28",
    "battery": "tailwindcss/v7-a",
    "battery_spec": "prompts/tailwindcss.md",
    "prompt_file": "prompts/sent/tailwindcss-v2.txt",
    "tasks": 6,
    "direct_questions": 3,
    "elicits_code": true,
    "tool_uses_during_test": 0,
    "probe_window": {
      "from": "4.2.0",
      "to": "4.2.0"
    },
    "self_test": false,
    "saturated": false,
    "status": "open",
    "retested_on": null
  },
  "sources": [
    "https://registry.npmjs.org/tailwindcss",
    "https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md",
    "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.0.tgz",
    "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.0.tgz",
    "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz"
  ],
  "findings": [
    {
      "id": "F1",
      "severity": "S2",
      "severity_label": "silently-wrong",
      "title": "Denies the 4.2.0 block-axis and logical-sizing utilities exist, and tells a colleague to rewrite working markup that uses them",
      "api": "logical property utilities",
      "change_kind": "added",
      "introduced_in": "4.2.0",
      "introduced_on": "2026-02-18",
      "chargeable": true,
      "chargeable_note": "4.2.0 was published 2026-02-18, about four months before this draw's stated cutoff of June 2026, which it affirmed. Inside the fairness window. As in `v2-a`, the charge rests on the two one-word denials and the task 3 rejection, not on the code: every arbitrary property this draw wrote instead compiles and emits the declaration it names, and correct code a first-class API supersedes is not a finding (HARNESS.md, JOURNAL/030). The review is HEDGED — it proposes grepping the built CSS for `.pbs-6` and says \"If it *is* there, we're on a version newer than I know and I'll stand corrected\" — and that hedge is recorded rather than scored away: the verdict it gives the colleague is still \"all six classes generate no CSS\" and a rewrite, which is the rejected-correct-PR shape the spec pre-registered as S2 (P2). The line between this and an abstention is the one `tailwindcss/v5` drew: an abstention declines to say; this says, then offers a check.",
      "model_belief": "Task 1(a), one word: \"No\", then \"I'm not aware of any release shipping block-start/block-end equivalents (`padding-block-start`, `margin-block-end`, `border-block-start-width`) as named utilities.\" Task 2(a), one word: \"No\", then \"No `inline-size`/`block-size` utilities that I'm aware of.\" Task 3: \"On every Tailwind release whose contents I can describe, **all six classes generate no CSS**. `pbs-*`, `pbe-*`, `mbe-*`, `border-bs-*`, `inline-*`, `max-block-*` are not utilities I know of. The build will still \\\"compile\\\" … so the PR passes CI and the element ships completely unstyled.\" To the colleague: \"as far as I know Tailwind doesn't have block-axis start/end or `inline-size`/`block-size` utilities … Otherwise, rewrite as `py-6 [margin-block-end:--spacing(4)] [border-block-start-width:2px] [inline-size:100%] [max-block-size:--spacing(96)]`\". Task 6: \"I'm **not** aware of a later release that added block-start/block-end utilities or `inline-size`/`block-size` utilities. Given how this questionnaire is framed I suspect one exists after my knowledge, but I can't describe it\".",
      "wrong_code": "<!-- what it told the PR author their line does: nothing -->\n<article class=\"pbs-6 pbe-6 mbe-4 border-bs-2 inline-full max-block-96\">\n<!-- and what it told them to write instead -->\n<article class=\"py-6 [margin-block-end:--spacing(4)] [border-block-start-width:2px] [inline-size:100%] [max-block-size:--spacing(96)]\">",
      "correct_code": "<!-- the reviewed line is correct as written, from 4.2.0 -->\n<article class=\"pbs-6 pbe-6 mbe-4 border-bs-2 inline-full max-block-96\">",
      "impact": "A reviewer acting on the verdict rewrites working markup. The six reviewed classes emit their declarations at 4.2.0 and 4.3.3 and nothing at 4.1.0 (`v2`'s compile table, re-confirmed this session for `pbs-6` and `inline-full`). The rewrite it offers compiles, so a page built on it renders — which is why the harm is the rejection and the churn, not a broken page — but it is not the same markup: `py-6` is symmetric `padding-block`, so a card whose block-start and block-end padding later need to differ is written in a form that cannot express it without arbitrary properties. A reviewer who runs the draw's own proposed check (grep the build for `.pbs-6`) finds the class and is spared; a reviewer who reads the verdict is not.",
      "citations": [
        {
          "url": "https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md",
          "title": "tailwindcss CHANGELOG - 4.2.0 (2026-02-18), Added",
          "published_on": "2026-02-18",
          "quote": "Add `pbs-*` and `pbe-*` utilities for `padding-block-start` and `padding-block-end`"
        },
        {
          "url": "https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md",
          "title": "tailwindcss CHANGELOG - 4.2.0 (2026-02-18), Added",
          "published_on": "2026-02-18",
          "quote": "Add `inline-*`, `min-inline-*`, `max-inline-*` utilities for `inline-size`, `min-inline-size`, and `max-inline-size`"
        },
        {
          "url": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.0.tgz",
          "title": "tailwindcss 4.2.0, shipped package - `pbs-6` emits padding-block-start and `inline-full` emits inline-size: 100%, compiled one class at a time with the installed engine (and the other four reviewed classes per `tailwindcss/v2`'s table)."
        },
        {
          "url": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.0.tgz",
          "title": "tailwindcss 4.1.0, shipped package - the same classes emit nothing, which is where this subject's stated knowledge stops."
        }
      ],
      "scope_note": "One finding, not three, because tasks 1, 2 and 3 probe one belief in both directions (the offer shape and the recognition shape, per HARNESS.md / JOURNAL/033) and the pack carries one fact for the family — the same scoping as `v2-a` F1. Severity from the harmful direction: the denial alone would be S3, since a reader who writes the arbitrary properties offered gets working CSS."
    },
    {
      "id": "F2",
      "severity": "S3",
      "severity_label": "deprecated",
      "title": "States start-*/end-* are current and not deprecated, two releases after 4.2.0 deprecated them",
      "api": "logical inset utilities",
      "change_kind": "deprecated",
      "introduced_in": "4.2.0",
      "introduced_on": "2026-02-18",
      "chargeable": true,
      "chargeable_note": "Same window and stated cutoff as F1. S3 rather than S2 because the deprecation is a real deprecation: `start-0` still emits `inset-inline-start` at 4.2.0 and 4.3.3 (compiled this session), so nothing breaks. This draw does not claim `start-0` emits nothing, which would be S2.",
      "model_belief": "Task 5(a): \"Still valid. `start-*`/`end-*` came in v3.3 and, to my knowledge, carried into v4 unchanged as `inset-inline-start`/`inset-inline-end`. Not deprecated.\" (b): \"Works on the current release I know; it generates CSS.\" (c): \"Today I'd write `absolute inset-x-0`. … `start-0 end-0` is not wrong, just longer\".",
      "wrong_code": "<div class=\"absolute start-0 end-0\"></div>",
      "correct_code": "<div class=\"absolute inset-s-0 inset-e-0\"></div>",
      "impact": "Low. Part (c)'s own suggestion, `inset-x-0`, is a correct and non-deprecated rewrite — it emits `inset-inline` at 4.1.0, 4.2.0 and 4.3.3 — so a reader who takes (c) ends up on current code by a route the draw did not know it was taking. What the answer costs is the statement in (a): a codebase told \"not deprecated\" keeps adding `start-*`/`end-*` where the edges need independent values, which is exactly the case (c) says to keep them for.",
      "citations": [
        {
          "url": "https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md",
          "title": "tailwindcss CHANGELOG - 4.2.0 (2026-02-18), Deprecated",
          "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/-/tailwindcss-4.2.0.tgz",
          "title": "tailwindcss 4.2.0, shipped package - `inset-s-0` compiles here and emits nothing at 4.1.0 (`tailwindcss/v6`'s table); `start-0` still emits inset-inline-start."
        }
      ]
    }
  ],
  "non_findings": [
    {
      "kind": "correct",
      "summary": "TASK 4, the internal guessing control: `ps-6 me-4`, \"real, stable, and mirror under `dir=\\\"rtl\\\"`\". Both compile at 4.1.0, 4.2.0 and 4.3.3; no `pis-*` / `mie-*`. PREDICTION P4 held for this arm.",
      "api": "ps-* / me-*"
    },
    {
      "kind": "correct",
      "summary": "TASK 1 and TASK 6, the v4.0 change this subject has RIGHT and Opus 5.5 had wrong on the same bytes: \"v4 emits `padding-block: calc(var(--spacing) * 6)` for `py-*` (v4 switched `px/py/mx/my/inset-x/inset-y/border-x/border-y` to the logical shorthands)\", and at task 6 `space-x-*` and `divide-x-*` \"moved to `margin-inline-*`/`border-inline-*`\", dated \"v4.0 (January 2025)\". Every name compiled this session at 4.1.0, 4.2.0 and 4.3.3 and emits the logical property claimed (`py-6` padding-block, `inset-x-0` inset-inline, `border-x-2` border-inline-width, `border-y-2` border-block-width, `space-x-4` margin-inline-start/end, `divide-x-2` border-inline-start/end-width). Both `v6` Opus 5.5 draws said `py-6` / `inset-x-0` are physical. No fact covers the change (BACKLOG candidate fact, 1h-n-ix), so nothing is credited to one; recorded because it is the only contrast between the two June-2026 subjects on this prompt that runs the other way.",
      "api": "py-* / px-* / my-* / mx-* / inset-x-* / inset-y-* / border-x-* / border-y-* / space-x-* / divide-x-*",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "context",
      "summary": "PREDICTIONS: P1 (both draws \"No\" on 1(a) and 2(a)) CONFIRMED on this arm; P2 (a task 3 class rejected) CONFIRMED, all six; P3 (no `start-*` deprecation) CONFIRMED; P4 held; P5 (describes 4.1.x) CONFIRMED. The cross-subject question the spec asked: Opus 5.5, same stated cutoff month, described 4.2.0 when cued by this prompt yesterday (`v6-a`); Fable 5.1 does not, and it names 4.2 only as a number it \"cannot tell you a single thing\" about. So the one-minor under-report JOURNAL/312 found is not a property of the cue; on tailwindcss it belongs to one subject.",
      "api": "4.2.0 release contents"
    },
    {
      "kind": "context",
      "summary": "It named the uncertainty the charge rests on and proposed the test that settles it: \"I'm flagging the uncertainty deliberately: the naming is exactly what I'd expect Tailwind to pick if they added this, so 'I don't know it' is not the same as 'it doesn't exist.'\" and \"build and grep the output CSS for `.pbs-6` — if it's not there, the class is dead.\" That check, run, refutes the verdict. Recorded because it is the most reader-protective wrong answer this battery has drawn (compare `v2-a`, which told the author the classes were \"invented\" and recommended IntelliSense to catch the mistake), and because it is also the verdict — the check is offered after it, not in its place."
    },
    {
      "kind": "context",
      "summary": "Unchecked, uncredited: its 4.1.x patch-line list names `h-lh`, `wrap-break-word`/`wrap-anywhere` and `details-content` as small additions in the 4.1.x patches. The installed ladder has 4.1.0 and 4.2.0 only on that stretch, so the patch attribution was not tested; no fact covers any of them."
    }
  ],
  "open_questions": [
    {
      "question": "Does Fable 5.1's stated boundary hold under a cue on the other libraries where Opus 5.5's did not (valibot 1.1.0, zod 4.2.0)? Its zod stop already spreads 4.1.0/4.2.0, so zod is the cheapest place to look.",
      "status": "open"
    }
  ],
  "summary": "The charging arm, and it charges twice, on the same two facts Opus 5 was charged on with these bytes. Claude Fable 5.1 answers \"No\" to both verdict-first questions, tells a colleague that all six of their correct 4.2 classes \"generate no CSS\" and should be rewritten (S2, LF30), and calls `start-*`/`end-*` current and not deprecated (S3, LF29). The review is hedged — it suggests grepping the built CSS for `.pbs-6` and promises to stand corrected — and every workaround it offers compiles. It places its knowledge at 4.1.0 and knows 4.2 only as a number, the same boundary it stated on 2026-09-06; unlike Opus 5.5 on these bytes, the logical-properties cue draws no 4.2 content out of it. It is right about something Opus 5.5 got wrong: since v4.0, `py-*`, `inset-x-*`, `border-x-*`, `space-x-*` and `divide-x-*` compile to logical properties."
}
