Finish the ADR-0080 page-source styling retraction across the remaining 8 prose sites - #5665
Finish the ADR-0080 page-source styling retraction across the remaining 8 prose sites#5665os-sales wants to merge 2 commits into
Conversation
…emaining 8 prose sites ADR-0080's 2026-06-30 header amendment (under ADR-0065, Accepted) retracted the "HTML + Tailwind" framing for a page's `source`: source is runtime metadata, the console's Tailwind is compiled at build time by scanning the console's own `src` with no safelist, so an authored utility class produces CSS only by coincidence and otherwise nothing, with no error anywhere. objectui#5461 corrected 3 sites; a multiline census finds 8 more. The tiers, parse-never-execute, the untrusted-author safety argument and the deprecated 'jsx' alias are all unchanged — only the styling primitive is corrected, to the wording already used by content/docs/guide/react-pages.md §Styling and by the `page-source-className-tailwind` rule in @objectstack/lint@11.5.0. Consumer-facing sites name the real primitive; the four source/test docstrings just drop the Tailwind half of the compound. CHANGELOG.md hits are untouched — immutable release history.
… for the prose retraction Each entry is justified against the package's BUILT artefact rather than assumed: the react-runtime README ships to npm, and the corrected headers of sdui-parser/src/types.ts and components/src/renderers/basic/html-elements.tsx both project verbatim into their published .d.ts files.
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Hold stands — but the reason is narrower than I first statedI held this PR on #5668 saying the
Measured contrast, same base So this is not "everything is blocked"; it is "PRs that touch docs content are blocked, and this is one of them". The PR remains ACCEPTed on its merits and held on #5668 alone. No fix pushed from here — the defect is not in this diff and widening this PR to chase it would be the wrong shape. Generated by Claude Code |
Fixes #5469
ADR-0080's 2026-06-30 header amendment (under ADR-0065, Accepted) retracted the
"JSX/HTML + Tailwind" framing for a page's
source. #5461 corrected 3 sites andasserted that was the complete set; it was 11. This lands the remaining 8.
The census, re-derived (not trusted)
The card's own multiline instrument was re-derived rather than taken on faith, and
cross-checked against two independent instruments. All numbers below are occurrence
counts (NUL records / match counts), never
grep -c, which counts lines.Before: 17 occurrences. After: 10, all of them deliberately preserved. Verified
identically by
rg -U --pcre2 --hiddenand by agit ls-files-driven sweep.Two corrections to the instrument as published on the card, both of which silently
change the answer:
--exclude-dir=node_modules --exclude-dir=dist. Run in a builttree it returned 51, because the emitted
.d.ts/.jscopies of the veryfiles being fixed are matched too. The card's clean census only held because it
was taken in an unbuilt tree.
rgskips dot-directories by default, so it silently misses.changeset/**unless--hiddenis passed. That is a two-occurrence blind spoton this exact pattern.
The 8 sites
Consumer-facing sites name the real primitive; the four source/test docstrings
just drop the Tailwind half of the compound.
packages/react-runtime/README.md:17-18JSX/HTML +⏎Tailwind(line-wrapped)packages/components/src/renderers/layout/page.tsx:541JSX/HTML+Tailwindkind === 'html'dispatch armcontent/docs/components/basic/div.mdx:20JSX/Tailwindcontent/docs/components/basic/span.mdx:22JSX/Tailwindpackages/sdui-parser/src/types.ts:5JSX/HTML+Tailwind+ Tailwindpackages/components/src/renderers/basic/html-elements.tsx:10JSX/Tailwind+ Tailwindpackages/components/src/__tests__/div-deprecation-provenance.test.tsx:12JSX/Tailwind+ Tailwindpackages/components/src/__tests__/span-deprecation-provenance.test.tsx:13JSX/Tailwind+ TailwindNote: the card and its dispatch both say "the three test/source docstrings".
There are four —
sdui-parser/src/types.tsis the one the count misses. Allfour are handled.
Wording is taken from
content/docs/guide/react-pages.md§Styling and from thesibling TSDoc #5461 landed in
packages/types/src/layout.ts, so no fourth phrasingenters the tree. The rule named is
page-source-className-tailwind(
@objectstack/lint@11.5.0), a warning on kindshtml/react/jsx— notvalidate-responsive-styles.ts, which never reads pagesource. The tiers,parse-never-execute, the untrusted-author safety argument and the deprecated
jsxalias are all unchanged; only the styling primitive moves.
What was deliberately NOT touched (the 10 remaining)
CHANGELOG.mdfiles — immutable release history.git diff origin/main...HEAD -- '*CHANGELOG.md'is empty: zero CHANGELOGbytes changed. (The card says "5"; the sixth is
packages/react/CHANGELOG.md:2363raw-HTML/Tailwind, which is a different construct — a degraded-variant note, notthe page-source framing. Either reading leaves it untouched.)
.changeset/page-source-tailwind-framing-5461.md— Three objectui sources still teach the "HTML + Tailwind" page-source framing ADR-0080's amendment retracted — one of them is a published TSDoc on PageSchema.kind #5461'sown changeset, quoting the retracted framing in the course of describing its
retraction. A mention, not a use, and another PR's pending changeset besides.
apps/console/src/sdui-jsx-preview.tsx:36— this isThe three console SDUI preview harnesses author 79 Tailwind classNames inside real page
sourcestrings — the practice the shipped lint rule warns on, working only by the coincidence ADR-0065 names as the failure #5470 / PR The SDUI authoring preview stops teaching Tailwind in page source; the two plumbing previews declare the exception #5662's declared ADR-0080 exception: a renderer-plumbing previewthat keeps its Tailwind and says so in its header, pinned by
apps/console/src/__tests__/sdui-preview-page-source-styling.test.tsas anEXPECTED finding. Touching it would break a landed pin. Not on the card's list of 8.
mention-not-use reason.)
#5461 overlap verdict: landed, zero overlap
#5461 merged as PR #5471 (
a691c0bee), before this branch's base. Its declaredsurface —
packages/types/src/layout.tsandpackages/components/src/renderers/layout/react-page.tsx— is measured clean of thepattern, and neither file is touched here. The two file sets are disjoint.
Verification
All at
4060df523, exit codes captured before any pipe.check-changeset-presence.mjs✅ 5 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s)check-changeset-no-major.mjs✅ No changeset declares a 'major' bump.check-changeset-fixed.mjs✅ All workspace packages are in the changeset fixed group.check-control-bytes.mjs✅ check-control-bytes: OK (scanned 4717 tracked text file(s))check-doc-links.mjsLinks are valid across 13 scan roots.check-doc-component-types.mjs✅ Every documented component type is registered.type-check× 3 pkgsDone, 3 of 3 scripts echoed (guards the zero-match silent pass)lint× 3 pkgs0 errors(898 pre-existing warnings, none in the touched files)Test Files 2 passed (2) / Tests 8 passed (8)Control probe. Predicted: the census detects a re-injected line-wrapped⚠️ The restore leg used
occurrence (9 → 10) while a line-oriented grep misses it. Measured exactly that —
the census went 9 → 10 and
grep -rnP 'JSX/HTML \+\s*Tailwind'returned no match onthe same mutated file. Mutation was confirmed on disk by anchored counts in both
directions, never by an editor exit code.
git checkout -- <path>against an uncommitted edit and therefore reverted thisPR's own README changes rather than only the mutation; that was detected by the
follow-up census (back to 10), re-applied, re-verified, and the work was committed
before any further verification. Reported rather than silently retried.
Changeset
Three packages, each justified against its built artefact rather than assumed:
@object-ui/react-runtime—README.mdships to npm (npm includesREADME.mdregardless of
files).@object-ui/sdui-parser— the corrected header projects verbatim intodist/types.d.ts.@object-ui/components— the corrected header projects verbatim intodist/renderers/basic/html-elements.d.ts. Thepage.tsxdispatch-arm commentdoes not project (it is inside a function body).
Generated by Claude Code
Generated by Claude Code