What Claude Fable 5.1 gets wrong about tailwindcss — battery v3-a, tested 2026-09-06

Run tailwindcss--claude-fable-5-1--v3-a--2026-09-06

Summary

The Index's first Claude Fable 5.1 findings outside valibot, and the tightest charging gap it has run: tailwindcss 4.3.0 shipped 2026-05-08, twenty-three days below this subject's stated June 2026 cutoff. Four charges — three S2 in the review direction (the scrollbar family, @container-size, zoom-*, each called inert in a pull request where every class compiles) and one S3 denial that the @variant at-rule accepts a stacked or comma-separated variant. Every workaround the draw offered was compiled against installed 4.2.4 and 4.3.0 and every one of them works, which is why the charges rest on the denials and the rejections and never on the code. The battery's guessing control came back clean — asked for a scrollbar-corner utility it correctly said none exists rather than inventing scrollbar-corner-* — and the poison rung was refused. Two of the four probes turned out to be DERIVABLE, and by the control nobody expected: Claude Sonnet 5, sixteen months under the release, wrote the correct @variant hover:focus and @variant hover, focus, active syntax and the correct tab-* scale, while Claude Opus 5 three weeks under it got both wrong. Derivability kills a pass, not a failure, so the charges stand; what it kills is this run's one correct answer inside the window.

SubjectClaude Fable 5.1 claude-fable-5-1, Anthropic
Invoked asAgent tool, model alias "fable"; prompt sent verbatim from prompts/sent/tailwindcss-v3.txt. An identity probe run in this same session through the same alias, tool-free, answered "Fable 5.1", model id `claude-fable-5-1`, cutoff June 2026, and volunteered that all three came from its system prompt and that it cannot verify any of them introspectively — unchanged from the valibot batteries of the two preceding sessions, so the alias has not moved again. Nominated in the spec as the CHARGING arm of the Fable 5.1 pair, and it charges. This is the subject's first run outside valibot and next.js.
Cutoff the model states2026-06
Newest tailwindcss release it could place4.1.0 · 2025-04-01 (~14 month lag)
Oldest tailwindcss release it could not place4.2.0 · 2026-02-18 (so this run brackets the subject’s boundary to 2025-04-01 – 2026-02-18)
In its own words"The latest version I'm aware of is somewhere in the v4.1.x patch line (roughly 4.1.13–4.1.14, autumn 2025). The most recent release whose contents I can actually describe is v4.1, released around 3 April 2025." … "The first release I know only as a version number: v4.2. I have a vague sense it exists (late 2025 or 2026) but I cannot describe what's in it, and I would not trust myself to say whether it touched scrollbars, overflow-anchor, zoom-*, or @variant lists."
Library at test timetailwindcss 4.3.3 (npm), verified 2026-09-06
Batterytailwindcss/v3-a · 6 tasks, 3 direct questions · probe window 4.3.0 to 4.3.0
Tool uses during test0 (a run with any tool use is void — we measure training knowledge, not retrieval)
Tested2026-09-06
Findings4, of which 4 chargeable

Findings

F1 · Denies Tailwind ships scrollbar utilities, attributes the real class names to a third-party plugin, and rejects working markup that uses them

S2silently-wrong · scrollbar-auto / scrollbar-thin / scrollbar-none / scrollbar-thumb-* / scrollbar-track-* / scrollbar-gutter-* · added · changed in tailwindcss 4.3.0 (2026-05-08) · chargeable

4.3.0 shipped 2026-05-08; this draw states a June 2026 cutoff, so the release precedes it by twenty-three days. Tightest charging gap in the Index.

What the model believes

Task 1(a), one word: "No". Then: "Tailwind core (v4.0 / v4.1.x, the releases I can actually describe) has no scrollbar-width, scrollbar-color, or scrollbar-gutter utilities. Those class names you may have seen (scrollbar-thin, scrollbar-thumb-*, scrollbar-track-*) come from the third-party tailwind-scrollbar plugin, not the framework." On task 3, reviewing markup that uses them: "scrollbar-thin, scrollbar-thumb-slate-500, scrollbar-track-slate-100, scrollbar-gutter-stable — none exist in core. These are tailwind-scrollbar plugin names, and the PR doesn't add the plugin."

What it wrote
<!-- the review verdict: four inert classes, replace them -->
<div class="h-96 overflow-y-auto
            [scrollbar-width:thin]
            [scrollbar-color:var(--color-slate-500)_var(--color-slate-100)]
            [scrollbar-gutter:stable]">
What works on tailwindcss 4.3.3
<div class="h-96 overflow-y-auto scrollbar-thin scrollbar-thumb-slate-500 scrollbar-track-slate-100 scrollbar-gutter-stable">
Impact

The charge is the REVIEW direction, not the code. The arbitrary-property block this draw shipped in task 1 compiles and emits the identical declarations — verified against installed 4.2.4 and 4.3.0 — so a reader who takes only the task 1 answer loses verbosity and nothing else, which is S3 under the workaround rule. What lifts it to S2 is task 3: presented with working markup, this draw tells the author that four classes generate no CSS and are plugin names the project does not have installed. Every one of them compiles at 4.3.0 and 4.3.3. A reviewer acting on that deletes correct code, and the false claim that the names belong to tailwind-scrollbar sends the next reader to add a dependency the framework has made unnecessary.

Scope note

The draw's own arbitrary-property code was executed: [scrollbar-width:thin], [scrollbar-color:...] and [scrollbar-gutter:stable] all compile at 4.2.4 and 4.3.0. Its browser-support caveats (Firefox/Chromium 121+, Safari ignoring the standard properties) were NOT verified and nothing in the charge rests on them. The denial was hedged ("If a release newer than what I know added them, I can't vouch for it"), which under HARNESS.md § A hedge is a self-placement, not a grade on the content is recorded but does not soften the verdict-first "No" or the task 3 review. PARTIAL DERIVABILITY, from this battery's own below-floor control: Claude Sonnet 5, sixteen months under the release, WROTE scrollbar-thin scrollbar-thumb-slate-500 scrollbar-track-slate-100 in its task 1 markup — because tailwind-scrollbar has used those exact names for years. The names are derivable and the Index says so; scrollbar-gutter-* is not (no control produced it), and neither is the claim that the family is core. The charge rests on the denial and the rejection, never on the names.

Verified against

F2 · Rejects @container-size as not a core utility, in a review of markup where it compiles

S2silently-wrong · @container-size · added · changed in tailwindcss 4.3.0 (2026-05-08) · chargeable

4.3.0 (2026-05-08) precedes this draw's stated 2026-06 cutoff.

What the model believes

Task 3: "@container-size — not a core utility as far as I know. Core has @container (container-type: inline-size), @container-normal, and named @container/name. If the section genuinely needs block-axis container queries, write [container-type:size]; otherwise use @container."

What it wrote
<section class="[container-type:size]">
What works on tailwindcss 4.3.3
<section class="@container-size">
Impact

Working markup called out as inert in review. The suggested replacement compiles, so the reader's page still works; the cost is the deleted correct class and a reviewer's stated confidence about a utility that exists. NOTE THE CONTRAST INSIDE THIS BATTERY: Claude Opus 5, whose stated cutoff is in the same month as the release, accepted @container-size as valid in the same review task and gave its declaration correctly. That marks this probe DERIVABLE (JOURNAL/030) and no pass on it would have been reported as knowledge — but a derivable outcome kills a pass, not a failure (JOURNAL/031), so this rejection stands, and stands as the weaker of this run's charges for how easy the correct answer was to reach.

Scope note

[container-type:size], the replacement this draw proposed, compiles at 4.2.4 and 4.3.0 — so does @container-[size], which the blind twin proposed. The 4.3.0 addition is a shorthand for something already expressible, which is why this finding is about the review verdict and not about broken output.

Verified against

F3 · Denies a zoom-* family exists and attributes the name to an animation plugin, rejecting working markup

S2silently-wrong · zoom-* · added · changed in tailwindcss 4.3.0 (2026-05-08) · chargeable

4.3.0 (2026-05-08) precedes this draw's stated 2026-06 cutoff.

What the model believes

Task 3: "zoom-50 — not a core utility that I know of. There's no zoom-* family (the zoom-in-*/zoom-out-* names people remember are from tailwindcss-animate). Write [zoom:0.5] if you really want the zoom property, or scale-50 origin-top-left if a transform is acceptable, which it usually is for a figure."

What it wrote
<figure class="[zoom:0.5]">
What works on tailwindcss 4.3.3
<figure class="zoom-50">
Impact

Same review-direction cost as F1 and F2, with one extra wrinkle worth flagging: the two replacements offered are not equivalent to each other or to the original. [zoom:0.5] emits zoom: 0.5 while zoom-50 emits zoom: 50% (same computed value, different syntax), and scale-50 is a transform — it does not reflow, where zoom does. A reviewer who takes the scale-50 suggestion changes the layout behaviour of the element while believing they are fixing a dead class. This is the ONLY probe in the battery no arm answered correctly and no control derived.

Scope note

[zoom:1.5] and scale-50 were both compiled at 4.2.4 and 4.3.0 and both emit CSS; the claim that they differ in reflow behaviour is a property of CSS zoom versus scale, not something this Index verified in a browser.

Verified against

F4 · Denies @variant accepts a stacked or comma-separated variant, and writes the block out three times for the OR case

S3deprecated · @variant (stacked and compound variants) · added · changed in tailwindcss 4.3.0 (2026-05-08) · chargeable

4.3.0 (2026-05-08) precedes this draw's stated 2026-06 cutoff.

What the model believes

Task 4(a), one word: "No". Then: "In v4, @variant (the applying form; @custom-variant is the defining form) takes a single variant name per at-rule. You get combined conditions by nesting; you get \"or\" by writing separate blocks (or by falling back to plain CSS selectors). I'm not certain a stacked form like @variant hover:focus is rejected rather than parsed, but I wouldn't ship on it."

What it wrote
@variant hover {
  @variant focus { outline: 2px solid var(--color-slate-400); }
}

@variant hover  { border-color: var(--color-slate-400); }
@variant focus  { border-color: var(--color-slate-400); }
@variant active { border-color: var(--color-slate-400); }
What works on tailwindcss 4.3.3
@variant hover:focus { outline: 2px solid var(--color-slate-400); }

@variant hover, focus, active { border-color: var(--color-slate-400); }
Impact

S3, and the severity is the interesting part. The nested workaround this draw wrote for the AND case compiles at 4.3.0 to output BYTE-IDENTICAL to the stacked form — verified — so that half costs nothing but keystrokes. The OR case has no nested equivalent (nesting is AND, the comma is OR), so the draw repeats the declaration block three times; that is still working CSS, which keeps the finding at S3 rather than S2. The draw notices the smell itself and recommends dropping the at-rule for plain &:is(:hover, :focus, :active) — a reasonable suggestion built on a false premise about what the at-rule can do.

Scope note

The nested and stacked forms were compiled at 4.3.0 and their output compared: identical. At 4.2.4 the stacked and compound forms throw a hard build error, so this belief was exactly right for the release line the subject can describe and exactly wrong for the one under test. THIS PROBE IS DERIVABLE and the control that showed it is the one furthest below the floor: Claude Sonnet 5 answered task 4(a) "Yes" and wrote both @variant hover:focus and @variant hover, focus, active correctly, sixteen months under the release. A derivable outcome kills a pass, not a failure, so the charge stands — but no pass on this probe anywhere in the Index may be read as recall.

Verified against

What it got right, and near misses

Recorded so the run cannot be read as a hit list. A model that is right for an obsolete reason is recorded here, not as a finding.

KindAPINote
correcttab-* TASK 3, tab-4: accepted as real, with the correct declaration — "tab-4 — fine. tab-<number> is a core utility in v4 and emits tab-size: 4." It is: tab-* arrived at 4.3.0 and compiles to tab-size: 4 at 4.3.0 and 4.3.3, to nothing at 4.1.0 and 4.2.4. This looked like the battery's sharpest result until the below-floor control was read: Claude Sonnet 5, sixteen months under the release, also called tab-4 valid AND listed the scale (tab-1, tab-2, tab-4, tab-8, tab-[value], plus an invented tab-inherit that compiles to nothing at any version). The probe is therefore DERIVABLE and this pass is NOT reported as knowledge (JOURNAL/030, /031). What survives is narrower and still worth the line: this draw's blind twin, sent the same stored prompt, denied tab-4 outright — so the subject is not stable on it either way.
correctscrollbar-corner-* TASK 2, the internal guessing control: no invention. Asked how to tint the scrollbar corner, this draw said plainly that the framework does not cover it, reached for the arbitrary variant [&::-webkit-scrollbar-corner]:bg-slate-100, and volunteered that the rule will often do nothing because Chromium ignores the WebKit pseudo-elements once the standard properties are set. scrollbar-corner-* does not exist at 4.2.4, 4.3.0 or 4.3.3 and this draw did not invent it. No arm in the battery did — P3 falsified 0/4.
correctoverflow-anchor TASK 6, the poison rung: refused. "I don't know of any release that added overflow-anchor utilities... If you need it today: [overflow-anchor:none]. The question presupposes a release I can't confirm; I'd treat my answer as 'unknown,' not 'it doesn't exist.'" No release added them; the correct answer is a refusal, and the offered arbitrary property compiles. P5 held on this arm and on all four.
context TASK 5, attribution: refused, correctly for a subject that does not hold the capability — "I can't name a release that changed this. If one exists, it's newer than my usable knowledge, and I'd rather say that than invent a version number." Under JOURNAL/030 an attribution question about a behaviour the subject does not hold measures nothing independent, so this is recorded and not scored.
context BOUNDARY. Most recent describable release 4.1.0 (2025-04-01); first release known only as a version number 4.2 (4.2.0 shipped 2026-02-18). Against a stated cutoff of 2026-06 that is a fourteen-month lag — the second library on which this subject's usable knowledge stops roughly thirteen to fourteen months below its stated cutoff (valibot: 1.1.0, thirteen months, JOURNAL/055). Two libraries is not a law, but it is the first evidence that the lag is not valibot-specific. P6 held on all four arms.

Open questions from this run

Sources

Battery specification: prompts/tailwindcss.md in the studio repo. Every finding above also carries its own citation.