Why upgrade at all
There was no feature I was chasing. Tailwind v4 moves configuration out of a JavaScript file and into CSS: the theme lives in an @theme block, colors and spacing become custom properties, and tailwind.config.ts simply stops existing. For a site whose whole design system already lived in CSS custom properties, that felt less like a migration and more like the config finally moving to where the rest of the styling already was.
So the bar was simple, and high: nothing on screen should move by a single pixel. An infrastructure change you can see is an infrastructure change that went wrong. I expected a quiet afternoon. I got a site with no spacing.