What Claude Opus 5 gets wrong about tailwindcss — battery v1, tested 2026-08-31

Run tailwindcss--claude-opus-5--v1--2026-08-31 · self-test: the subject is the operator

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.

SubjectClaude Opus 5 claude-opus-5, Anthropic
Invoked asAgent tool, model alias "opus"
Cutoff the model states2026-05
Newest tailwindcss release it could place4.1.0 · 2025-04-01 (~13 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"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."
Library at test timetailwindcss 4.3.3 (npm), verified 2026-08-31
Batterytailwindcss/v1 · 10 tasks, 3 direct questions · probe window 4.0.0 to 4.2.0
Tool uses during test0 (a run with any tool use is void — we measure training knowledge, not retrieval)
Tested2026-08-31
Findings1, of which 1 chargeable

Findings

F1 · Version knowledge stops at 4.1.0, thirteen months before its stated cutoff

S4wrong-metadata · version-fact · changed in tailwindcss 4.2.0 (2026-02-18) · chargeable

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.

What the model believes

"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.

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.

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.

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
correcttailwindcss as a PostCSS plugin / npx tailwindcss 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".
correcttailwind.config.js 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".
correct@layer utilities / @layer components (for defining custom classes) 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.
correctnode_modules scanning 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.
correctflex-shrink-* / flex-grow-* / overflow-ellipsis / decoration-slice / decoration-clone Task 5: size-10 shrink-0, min-w-0 flex-1, with the min-width:auto explanation.
correctbg-opacity-* / text-opacity-* / border-opacity-* / ring-opacity-* / placeholder-opacity-* / divide-opacity-* 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.
correctbg-[--var] (CSS variable shorthand in arbitrary values) 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.
correctborder / divide (default colour) 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.
correctring 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.
correct@apply inside Vue/Svelte/Astro <style> blocks and CSS modules 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.
correct 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.
context 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.

Open questions from this run

Sources

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