Uh oh!
There was an error while loading. Please reload this page.
chore(config): delete three Tailwind config files nothing reads (#4065, #4066) - #4349
Merged
Merged
Conversation
#4066) Root `postcss.config.mjs` (#4065) and the two tracked `tailwind.config.*` files (#4066) are dead configuration left over from the Tailwind v4 migration. All three are removed; no dependency is added and no setting is ported, because nothing in them is live. #4065 — root `postcss.config.mjs` It registers `@tailwindcss/postcss` and `autoprefixer`, and the repo root declares neither `@tailwindcss/postcss` nor `postcss`; under pnpm's isolated node_modules neither resolves from the root either. Any consumer that discovered this config would fail on its first plugin, so no working consumer can exist. Enumerated, no consumer exists at all: - the root has zero `.css`/`.html` files, and every root build script runs through a per-package filter (`pnpm --filter` / `turbo run`); - the 5 packages that build CSS through Vite each carry their own `postcss.config.*`, which stops postcss-load-config's upward walk; - `packages/app-shell` ships `src/styles.css` raw (`build` is `tsc`, and `exports['./styles.css']` points at the source), so no PostCSS runs; - `packages/fields/scripts/build-css.mjs` passes an explicit plugin array to `postcss([tailwindPostcss()])`, so it performs no config discovery; - `packages/plugin-calendar` sets vitest `css: true` but imports no `.css`. This is the same enumeration `scripts/__tests__/helpers/build-program.ts` already records as a known blind spot ("no package does BOTH today"). Deleting the file retires that blind spot rather than merely documenting it. #4066 — `apps/console/tailwind.config.js`, `examples/byo-backend-console/tailwind.config.ts` Tailwind 4 loads a JS config only when a stylesheet opts in with `@config`, and `@config` has zero occurrences across the repo (counter-probe: `@import 'tailwindcss'` matches 9 stylesheets, including both apps'). Measured against each app's live v4 CSS entry, neither file sets anything to port: - `theme.extend` is empty in both, `plugins` is empty in both; - the v3 `content` arrays are superseded by the `@source` directives already in each `src/index.css`; - byo's `darkMode: ['class']` is already provided by `packages/app-shell/src/styles.css`, which both entries import and which declares `@custom-variant dark (&:where(.dark, .dark *));` — the v4 spelling of that exact setting. `apps/console/tailwind.config.js` also held TypeScript syntax (`import type`, `satisfies Config`) in a `.js` file, which is why `eslint.config.js` ignores `**/tailwind.config.js`. It was never in any TS program either — both apps' tsconfigs include only `src` (and `dev`). The parse bomb goes with the file. Verification: both apps' emitted CSS is byte-identical before and after, via real `vite build` runs — same sha256 and the same content-hashed asset filenames (4 assets for console, 2 for byo). No changeset is owed: `check-changeset-presence.mjs` reports 0 files under any released package's `src/`, and `tailwind.config.js` was never in `apps/console`'s published `files` list. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qqyix2QcnpUC9XeYVDzx3
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This was referenced Aug 11, 2026
yinlianghui
marked this pull request as ready for review
August 11, 2026 19:29
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes#4065
Closes#4066
Deletes three Tailwind configuration files that nothing in the repo reads. No dependency is added and no setting is ported, because measurement says there is nothing live in any of them.
Both cards were triaged with an explicit delete ruling, and this PR implements exactly that.
#4065 — root
postcss.config.mjsTriage ruling on #4065:
Premise re-verified on
origin/main@f046f885a— the file is still present, and the root still declares neither plugin. Node's own resolver, from eachpackage.json:Rather than rely on the ruling's by-construction argument alone, I enumerated every possible consumer. There are none:
.css/.htmlfiles (git ls-treeat depth 1), and every root build script runs through a per-package filter (pnpm --filter/turbo run);.cssfiles, the 5 packages that build CSS through Vite each carry their ownpostcss.config.*(apps/console,apps/site,packages/components,packages/runner, and the two console examples), which stopspostcss-load-config's upward walk before it reaches the root;packages/app-shellshipssrc/styles.cssraw — itsbuildis plaintsc, andexports['./styles.css']points at the source file — so no PostCSS runs over it at all;packages/fieldshas CSS and no postcss config, butscripts/build-css.mjscallspostcss([tailwindPostcss()])with an explicit plugin array, so it performs no config discovery;packages/plugin-calendarsets vitestcss: trueand has no postcss config of its own, but imports no.cssfile, so the CSS pipeline never fires.This is the same enumeration
scripts/__tests__/helpers/build-program.tsalready records, as a deliberately documented known blind spot:Deleting the file retires that blind spot instead of continuing to document it: with no root config, there is nothing for the upward walk to find.
#4066 — the two tracked
tailwind.config.*filesTriage ruling on #4066:
Premise re-verified:
@configstill has zero occurrences across every.cssfile in the repo; counter-probe that the scan works,@import 'tailwindcss'matches 9 stylesheets, including both apps' ownsrc/index.css.I re-measured each setting against the app's live v4 CSS entry rather than taking the ruling on trust. Per-setting disposition, all three "already covered / nothing to port":
apps/consoleexamples/byo-backend-consoletheme.extend{}{}@themeblock.plugins[][]@plugin '@tailwindcss/typography'from its CSS entry.content['./index.html', './src/**/*.{js,ts,jsx,tsx}']['./index.html', './src/**/*.{ts,tsx}']@sourcedirectives already in eachsrc/index.css(37 hits in console's, 15 in byo's).darkMode: ['class']@import '@object-ui/app-shell/styles.css', which declares@custom-variant dark (&:where(.dark, .dark *));— the v4 spelling of exactly that setting.The
darkModerow is the one worth stating explicitly, because "inert" and "already provided" are different facts and only the second makes deletion safe without a port. Porting it would have been the wrong move: it is not missing.Incidental, and retired with the file:
apps/console/tailwind.config.jsis a.jsfile containing TypeScript syntax (import type { Config },satisfies Config). Two things were hiding that parse bomb, and both are now moot —eslint.config.jsignores**/tailwind.config.jsfor precisely this reason ("Tailwind configs are authored in TypeScript despite the.jsextension"), and the file was never in any TS program either, since both apps' tsconfigs include onlysrc(plusdevfor console).One nice side effect:
packages/cli/src/__tests__/app-generator.test.tsalready describes this repo as one that "has been on Tailwind 4 (and carried zerotailwind.config.*files) since its own migration". That sentence was false on main. It is true now.Verification
CSS is provably unchanged — byte-identical, from real builds. Each app was built twice with
vite build, once with the three files restored and once with them deleted, and the emitted CSS assets compared by sha256:No normalization was needed and none was applied. Vite's asset filenames embed a content hash rather than a timestamp, so identical content yields identical filenames — the comparison covers 4 CSS assets for console (
index-PgjYDqEe.css,plugin-dashboard-DnNKJB60.css,plugin-map-5lRITB8H.css,ui-components-BL3SEdAz.css) and 2 for byo (index-DYuRB4AA.css,dist-kzrx2K5g.css), and the filenames themselves are part of the evidence.A second, independent probe compiled each app's
src/index.cssdirectly through the same@tailwindcss/postcssplugin its ownpostcss.config.jsregisters, from the app directory as cwd. Same verdict, at full byte granularity:Reverse verification, with the expected direction stated first. The usual "revert the fix and watch the tests go red" shape does not apply here, and forcing it would have been a fabrication: the claim under test is that these files are inert, so restoring them must leave the CSS identical and move only what
objectui doctorreports. Both halves came out as predicted — the CSS hashes above are the restored-vs-deleted comparison, and the doctor warnings returned verbatim on restore.objectui doctor(the #4064-fixed one), before and after.apps/consoleandexamples/byo-backend-console— the #4066 warning is gone in both, and both are now fully clean:Repo root — and here the result is partial, which I am reporting rather than smoothing over:
The
✓ PostCSS config uses @tailwindcss/postcssline disappears with the file, as expected. Thexdoes not, and cannot: readingpackages/cli/src/commands/doctor.ts, that finding is gated on the rootpackage.jsondeclaringtailwindcsswhile declaring no@tailwindcss/postcss— it is driven by the manifest, not bypostcss.config.mjs. The root's owntailwindcssandautoprefixerdevDependencies are the remaining half of the same vestigial surface, and removing them is outside both the ruling ("do not add the two devDependencies" rules on additions only) and this PR's scope, so it is filed separately as #4350 rather than smuggled in here. No regression either way: 1 issue before, 1 issue after.Gates and tests.
node scripts/check-changeset-presence.mjs—No source of a released package changed in this range, so no changeset is owed.(3 files changed, 0 under any released package'ssrc/). Substantively true as well as mechanically:apps/console's publishedfileslist is["dist","plugin.ts","plugin.js","plugin.d.ts","README.md"], sotailwind.config.jswas never in the tarball, andexamples/byo-backend-consoleis private.node scripts/check-control-bytes.mjs— OK, 4068 tracked text files scanned.vitest run scripts/__tests__/turbo-build-inputs.test.ts scripts/__tests__/doc-version-claims.test.ts— 2 files, 38 tests passed. These are the tests that model the repo's build programs, including the one whose comment names the root postcss config.vitest run packages/cli/— 4 files, 105 tests passed (doctor, app-generator, cli-bin).pnpm --filter @object-ui/console lint— 0 errors (206 pre-existing warnings);pnpm --filter @object-ui/example-byo-backend-console lint— 0 errors (14 pre-existing warnings).pnpm --filter @object-ui/console --filter @object-ui/example-byo-backend-console type-check— bothDone, after building each app's dependency closure first.No repo tests cover the three deleted paths directly — they were untested precisely because nothing loaded them. The
@config-vs-contentbehavior they were misread as configuring is already pinned bypackages/cli/src/__tests__/doctor.test.ts, which builds its own temp fixtures and is unaffected.Scope
Three deletions, 28 lines, nothing added:
No CSS entry was edited, because no port was owed. Deliberately left alone and filed as #4350 (
finding, unassigned) rather than fixed here: the roottailwindcss/autoprefixerdevDependencies noted above; the now-vestigial**/tailwind.config.jsignore ineslint.config.js; and thescripts/__tests__/helpers/build-program.tscomment, whose blind-spot narrowing stays true in principle but now names a file that no longer exists.Related
#4198 is an open
findingabout this exact rootpostcss.config.mjs— "a dormant fifth instance of the #3514 class — outside every build program only by coincidence". This PR retires that instance by a route none of its three options considered: with no config at the root,postcss-load-config's upward walk has nothing to arrive at, which is strictly stronger than its option B (givepackages/fieldsits own config so the walk stops earlier). Its class concern survives —build-program.tsstill does not model postcss discovery — so I commented there rather than assuming it can be closed, and left the disposition to triage.Generated by Claude Code