{
  "$schema": "../../schema/run.schema.json",
  "run_id": "tailwindcss--claude-fable-5--v2-d--2026-09-03",
  "supersedes": null,
  "replicate_of": null,
  "library": {
    "name": "tailwindcss",
    "ecosystem": "npm",
    "latest_version_at_test": "4.3.3",
    "latest_version_verified_on": "2026-09-03"
  },
  "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, flat and unhedged: \"My training cutoff is January 2026.\" Below 4.2.0 (2026-02-18) by about seven weeks, so this arm is a valid below-floor control under the battery's pre-registered condition.",
    "believed_latest_version": "4.1.x",
    "believed_latest_quote": "\"The most recent release whose contents I can genuinely describe is v4.1, which shipped around April 2025, followed by a stream of 4.1.x patch releases through 2025 ... I do not have reliable knowledge of a v4.2 - I can't tell you whether one shipped before my cutoff, and I can't describe its contents, so I won't pretend to.\"",
    "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": 9
  },
  "test": {
    "date": "2026-09-03",
    "battery": "tailwindcss/v2-d",
    "battery_spec": "prompts/tailwindcss.md",
    "prompt_file": "prompts/sent/tailwindcss-v2.txt",
    "tasks": 6,
    "direct_questions": 3,
    "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://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"
  ],
  "summary": "The second below-floor control, and the best-informed draw in the battery about everything except the release under test. It denied the 4.2.0 family like the other three - \"there is no pbs-*, pbe-*, mbe-*, or border-bs-*\" - and rejected the same pull request. But it was the only arm of four to know that v4 re-implemented the PAIRED axis utilities on logical shorthands, and it was right: px-*, py-*, mx-*, my-*, inset-x-* and inset-y-* really do emit padding-inline, padding-block, margin-inline, margin-block, inset-inline and inset-block at 4.2.0, all six verified against the installed engine. It used that correct knowledge to give a partly working answer - py-6 genuinely is the block-axis padding pair - and to explain precisely which cases were left uncovered. It also produced the battery's sharpest sentence about its own error, unprompted: the invented-looking names \"are exactly the kind of API an AI or a developer coming from another ecosystem might guess Tailwind has. It doesn't.\" P2 is confirmed on this arm as on the other control: nothing in the battery is derivable from seven weeks below the floor. Nothing is chargeable here.",
  "findings": [],
  "non_findings": [
    {
      "kind": "context",
      "summary": "P2 CONFIRMED on the second control arm. Seven weeks below 4.2.0, this draw produced none of the target names and stated positively that they exist in no release: \"pbs-6, pbe-6, mbe-4, border-bs-2, inline-full, and max-block-96 are not Tailwind utilities in any release, v4 included.\" Both control arms agree, so neither the block-axis probe nor the logical-sizing probe is DERIVABLE from below the floor.",
      "api": "logical property utilities",
      "introduced_in": "4.2.0"
    },
    {
      "kind": "correct",
      "summary": "Knew something the three other arms did not, and it checks out. \"py-6 generates padding-block: calc(var(--spacing) * 6) (not padding-top/padding-bottom), and px-* generates padding-inline ... and I believe inset-x/inset-y -> inset-inline/inset-block.\" All six compiled against installed 4.2.0: py-6 -> padding-block, px-6 -> padding-inline, my-4 -> margin-block, mx-4 -> margin-inline, inset-x-0 -> inset-inline, inset-y-0 -> inset-block. Its hedge on the inset pair was unnecessary. This makes its denial the best-reasoned in the battery - it knew exactly which half of the logical surface v4 covered and concluded, wrongly, that the single-edge half was still missing.",
      "api": "px-* / py-* / mx-* / my-* / inset-x-* / inset-y-*",
      "introduced_in": "4.0.0"
    },
    {
      "kind": "miss",
      "summary": "Denies the 4.2.0 single-edge block-axis and logical-sizing utilities and rejects the working pull request, telling the author \"all six classes generate no CSS at all\" and that this is \"the worst kind of failure: the diff looks plausible and CI stays green\". All six compile at 4.2.0.",
      "api": "logical property utilities",
      "introduced_in": "4.2.0",
      "chargeable_miss": false,
      "why_not_a_finding": "4.2.0 postdates this subject's stated cutoff of 2026-01, and this is a control arm by design. Outside the fairness window, so it is not a chargeable miss and does not enter the undercount total."
    },
    {
      "kind": "miss",
      "summary": "States start-*/end-* are current and not legacy, and recommends inset-x-0 as the modern alternative. The current spelling as of 4.2.0 is inset-s-0 / inset-e-0. Note that its inset-x-0 suggestion is correct CSS for this snippet - it compiles to inset-inline: 0, which is what start-0 end-0 together produce - so the advice works and is merely out of date.",
      "api": "logical inset utilities",
      "introduced_in": "4.2.0",
      "chargeable_miss": false,
      "why_not_a_finding": "Outside this subject's stated cutoff window, and this is a control arm."
    },
    {
      "kind": "correct",
      "summary": "Cleared the internal guessing control with `ps-6 me-4`. Fourth of four arms to clear it: not one draw over-generalised the naming scheme into pis-*/mie-*, which exist at no release.",
      "api": "ps-* / me-*",
      "introduced_in": "3.3.0"
    },
    {
      "kind": "context",
      "summary": "Named the mechanism the battery was measuring, while inside it. Reviewing the PR: the names \"look like abbreviations of the CSS logical property names (padding-block-start -> pbs), which is a naming convention some other tools use - and exactly the kind of API an AI or a developer coming from another ecosystem might guess Tailwind has. It doesn't.\" It correctly identified that other tools use the convention (tailwindcss-logical does, as the v2-b twin named outright), correctly identified guessing as the risk, and then landed on the wrong side of it.",
      "api": null,
      "introduced_in": null
    }
  ],
  "open_questions": []
}
