prettier-plugin-tailwindcss 0.5.14 -> 0.7.4, plus two patch bumps - #241
Conversation
A registry sweep found this plugin three minors behind, tracked by no phase of the upgrade plan. It goes to 0.7.4 rather than the latest 0.8.1 because 0.8.0 stops @ianvs/prettier-plugin-sort-imports from running on .vue files and leaves import blocks scrambled — upstream issue #465, still open. The js transform lists the sort plugin as compatible; the html transform, which owns the vue parser, does not. Established by formatting the whole tree under 0.5.14, 0.6.14, 0.7.4, 0.8.0 and 0.8.1 and diffing the results. 0.7.4's only effect here is three cosmetic lines in two files, so no source file changes. The Renovate rule is load-bearing: the existing "linting and formatting" group matches prettier-** on minors, so without it 0.8.1 would arrive as a routine bump and undo this. nodemailer 9.0.4 and @types/google.maps 3.65.4 ride along. Both were already inside their declared ^ ranges, so this is lockfile-only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JkKMceYAzAYLrSyC42FWTf
Adds the package-by-package sweep, the version comparison that ruled out 0.8.x, and the re-attempt condition. Three findings go to the backlog rather than into the change: - nuxt-app is 89 files from Prettier-clean on main, all of it from Prettier itself (the count is identical with the Tailwind plugin removed), dating to Phase 2's 3.2.5 -> 3.9.6. No CI step checks formatting, which is why it went unnoticed. Wants its own PR plus a --check gate, after stripe. - TalkItem.vue puts HTML comments inside a class attribute, so their words are served as class names. Not fixed here: removing them also removes an accidental display:grid from two divs, which needs visual verification. - prettier-plugin-tailwindcss 0.8.x, once upstream #465 lands. Also records that the first version comparison was discarded — run on a copy outside the project, it let the plugin resolve a different Tailwind config, so its class-order output described nothing real. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JkKMceYAzAYLrSyC42FWTf
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR updates Nuxt app tooling dependencies (primarily prettier-plugin-tailwindcss) while documenting the rationale and adding a Renovate guardrail to prevent accidental upgrades into a known-bad 0.8.x series that breaks .vue import sorting.
Changes:
- Bump
prettier-plugin-tailwindcssto^0.7.4(avoiding0.8.xdue to the documented upstream compatibility issue). - Patch-bump
nodemailerand@types/google.mapsvia lockfile updates. - Document the registry sweep findings in the dependency upgrade plan and add a Renovate
allowedVersions: "<0.8.0"rule forprettier-plugin-tailwindcss.
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
nuxt-app/package.json |
Updates the Tailwind Prettier plugin version range to ^0.7.4. |
nuxt-app/package-lock.json |
Locks prettier-plugin-tailwindcss to 0.7.4 and applies patch bumps for nodemailer and @types/google.maps. |
docs/dependency-upgrade-plan.md |
Adds a new write-up section documenting the registry sweep and the formatter version hold rationale. |
.github/renovate.json |
Adds an allowedVersions rule to prevent Renovate from proposing prettier-plugin-tailwindcss 0.8.x. |
Files not reviewed (1)
- nuxt-app/package-lock.json: Generated file
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| Asked whether anything besides `stripe` was still behind, and answered against the npm registry | ||
| rather than against this document. **Four things were, and one of them appeared in no phase at all.** |
There was a problem hiding this comment.
You were right, and it was my error. Fixed in #242 (58214ec), since that PR already touches this file.
The sentence meant the four packages that needed a decision — stripe, isomorphic-dompurify, typescript, prettier-plugin-tailwindcss — while the table also lists @types/google.maps and nodemailer, which were pure lockfile drift already inside their declared ^ ranges. That distinction was in my head and not on the page. Now reads:
Six were: four needing a decision, and two that were only lockfile drift. One of the four appeared in no phase at all.
Copilot caught a real inconsistency on #241: the sentence said four packages were behind while the table below it listed six. Four needed a decision; two were lockfile drift already inside their declared ranges. Reworded so the text and the table agree. Also logs a reviewer finding from #242 that is out of scope there: types/items.ts types Deepgram's utterances, words and speakers as single-element tuples rather than arrays. Pre-existing and untouched by the reformat, and harmless today because the only consumer calls .forEach. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JkKMceYAzAYLrSyC42FWTf
Closes the last of the routine dependency drift in
nuxt-app. After this,stripeis the only outstanding upgrade — and it is blocked on a colleague's review of the payment path.Why this exists at all
I answered "is anything besides
stripeout of date?" against the npm registry rather than against the plan, and foundprettier-plugin-tailwindcssthree minors behind, tracked by no phase. A plan that enumerates scopes is not a plan that enumerates packages.prettier-plugin-tailwindcssnodemailer@types/google.mapsThe other 27 declared packages were already at latest.
Why 0.7.4 and not 0.8.1
0.8.0 silently stops
@ianvs/prettier-plugin-sort-importsfrom running on.vuefiles. The result is not "unsorted" — it is scrambled, with blank lines inserted mid-block:Measured by formatting the whole tree under each version and diffing:
Upstream has it: tailwindlabs/prettier-plugin-tailwindcss#465, open since 2026-07-07. The
vueparser sits under the plugin'shtmltransform, whosecompatiblelist omits the sort-imports plugin; thejstransform already lists it, which is why.tsfiles are unaffected.Note the two minutes between 0.7.4 and 0.8.0 — 0.7.4 is not a maintained branch, just the last release before the break. This is a hold, not a home, with the re-attempt condition recorded.
The Renovate rule is load-bearing
The existing "linting and formatting" group matches
prettier-**on minors, so withoutallowedVersions: "<0.8.0"Renovate would arrive with 0.8.1 as a routine bump and undo this.No source file changes
0.7.4's entire effect on this repo is three cosmetic lines in two files — a stray trailing space, and a deduplicated
grid grid. Both are no-ops in the browser, so reformatting them would add review surface for nothing.The
grid gridis worth a look, though.TalkItem.vueputs HTML comments inside aclassattribute, so the browser receives<!--,Mobile,order,Reset,for,gridand-->as class names — the duplicate comes from the word "grid" appearing in two comments. Deliberately not fixed here: neither<div>has an intentionalgridclass, so removing the comments also removesdisplay: gridfrom both, which needs checking in a browser. Logged in the backlog.Verification
npm test91 passing / 10 files ·npm run lint0 errors, 128 warnings (unchanged) · typecheck ratchet steady at 263 ·SKIP_PRERENDER_ROUTE_DISCOVERY=true npm run buildexit 0 ·npm cireproduces all three intended versions.None of those gates can see a formatter change. What verified this upgrade was the tree-diff comparison above; the gate run covers the two patch bumps. Saying "all gates green" on a formatting PR would sound like evidence without being any.
Also disclosed in the plan: my first version comparison was discarded. Run on a file copied outside the project with
--no-config, it let the plugin resolve a different Tailwind config, so its class-order output described nothing real — including one "byte-identical" claim that was wrong. The import-order finding survived because plugin chaining is config-independent.Three things go to the backlog, not into this PR
nuxt-appis 89 files from Prettier-clean onmain, and no CI step checks formatting. Measured as Prettier-core drift, not plugin drift — the count is identical with the Tailwind plugin removed — dating to Phase 2'sprettier3.2.5 → 3.9.6. Wants its own PR plus a--checkgate, afterstripe, or an 89-file reformat will collide with that diff.TalkItem.vue's class-attribute comments, per above.prettier-plugin-tailwindcss0.8.x, once upstream #465 lands.🤖 Generated with Claude Code
https://claude.ai/code/session_01JkKMceYAzAYLrSyC42FWTf