---
library: tailwindcss
library-latest: "4.3.3"
library-latest-verified: 2026-08-31
model: claude-sonnet-5 (spawned via Agent model alias "sonnet")
model-self-reported-cutoff: 2026-01
model-believed-latest: "v4 line known; 4.1 (~April 2025) is the last release whose contents it can describe"
test-date: 2026-08-31
battery: tailwindcss/v1 (10 idiomatic tasks + 3 direct questions; probes restricted to 4.0.0 and 4.1.0)
tool-uses-during-test: 0
verified-against: https://tailwindcss.com/docs/upgrade-guide · https://tailwindcss.com/blog/tailwindcss-v4 · https://raw.githubusercontent.com/tailwindlabs/tailwindcss/main/CHANGELOG.md
status: open (no retest yet)
json: sonnet-5.json
---

# Tailwind CSS × Claude Sonnet 5 — battery v1 findings

**Zero findings.** The first run in this Index with nothing to charge.

Ten code tasks, every one of them idiomatic Tailwind v4: `@import "tailwindcss"` with the
`@tailwindcss/vite` plugin and no config file; `@theme` for the brand colour and display font;
`@utility` for the custom `tab-size` utility, with the correct reason (`@utility` gets variants,
a bare class does not); `@source inline()` with brace expansion for the runtime-assembled class
names; `shrink-0` rather than `flex-shrink-0`; `bg-black/50` rather than `bg-opacity-50`;
`@reference` inside the Vue single-file component's `<style>` block.

The two silent-behaviour questions are answered correctly and with the right version attribution:
the uncoloured border renders as `currentColor` in v4 where v3 gave `gray-200`, and the shadow
scale shifted one step, so v4's `shadow-sm` is v3's `shadow` and v3's `shadow-sm` is now
`shadow-xs`.

This battery was built to catch a model writing v3. It found none.

## The result is not "the model is up to date"

Its knowledge stops in the same place as everything else in this dataset. Asked directly, it names
**4.1, around April 2025**, as the newest release whose contents it can describe, and volunteers
the reason: *"training data density thins out closer to a model's cutoff."* Its stated cutoff is
**2026-01**. That is a **nine-month lag** — squarely in the range this Index measures everywhere
else.

What is different is the library, not the model:

| | when the breakage shipped | model's knowledge boundary | findings |
|---|---|---|---|
| zod | 4.2 → 4.5, through 2026-08 | 4.0.0 (2025-07-10) | 7 + 3 |
| next.js | 16.0.0 (2025-10-22) | 15.0.0 (2024-10-21) | 7 |
| **tailwindcss** | **4.0.0 (2025-01-21)** | **4.1.0 (2025-04-01)** | **0** |

Tailwind put every breaking change of its current major into one release, and that release landed
**three months before this model's knowledge boundary and twelve months before its cutoff**. The
stale region is real and the same size as ever. It just happens to contain nothing that breaks.

## Recorded but not charged

- **Task 7** answered `bg-[var(--brand)]`. That is the explicit longhand and it is valid on 4.x.
  The v4 change was to the bare shorthand — `bg-[--brand]` became `bg-(--brand)` — and this answer
  never used the bare form. Working code; it simply did not offer the newer spelling. Opus 5 was
  the only subject that did.
- **Question (a)** is a disclosure rather than an assertion, and no version-recency finding is
  charged. Under the rule, S4 applies only when knowledge stops earlier than the last release
  published before the model's own cutoff. The last *minor* before 2026-01 is 4.1.0 — which this
  model can describe. 4.2.0 shipped 2026-02-18, outside its window, and is excluded by the probe
  fairness rule. Charging it on 4.1.x patch trivia instead would be inflating the dataset.

## Battery status

Marked **saturated** for this subject. Every probe targets 4.0.0/4.1.0 and every one passed;
running it again against this model teaches nothing. It becomes informative again when a subject
appears whose cutoff postdates 4.2.0 (2026-02-18), at which point the parked `start-*`/`end-*`
deprecation and the logical-property family become admissible.

Method, elicitation prompts and scoring rules: [`prompts/tailwindcss.md`](../../prompts/tailwindcss.md).
Machine-readable twin: [`sonnet-5.json`](sonnet-5.json).
