What was observed
scripts/__tests__/plugin-published-stylesheet.test.ts runs its five per-package
assertions — the themed utilities survive, the subtraction really ran, utilities only
(no preflight, no theme block), the same bytes from any working directory, and the
exports/build-step declaration — over exactly two subjects:
constSUBJECTS=[{name: 'plugin-grid',mod: gridStylesheet},{name: 'plugin-kanban',mod: kanbanStylesheet},]asconst;@object-ui/fields is not one of them, and it is the package whose stylesheet has
actually been shipping to consumers since #4059 — the very defect the test's own header
cites as the reason the shape exists. Its dist/index.css is covered by the four
write-time assertions inside the builder (which run only at build time) and by nothing in
the test suite.
Why it is newly cheap to close
Before #6405 fields ran its own copy of the builder and exposed no module surface, so it
could not be a subject without being rewritten first. It now runs the same shared
createPluginStylesheetBuilder and exports the same shape the two plugins do —
PACKAGE_ROOT, PACKAGE_NAME, MUST_SURVIVE, CLASS_CEILING, builder,
buildOptions — behind the same isEntrypoint guard. Adding it to SUBJECTS is
mechanical; the only genuinely new content is a CARD_THEMED entry naming the fields
utilities that resolve unpublished @theme tokens (bg-primary/20, hover:bg-accent/30,
ring-destructive/50 are the ones #4059 measured), derived independently rather than read
back off MUST_SURVIVE, per the note the test already makes about why it names its own
list.
One caveat worth checking rather than assuming: fields passes a per-package header, so
whichever assertions read the emitted banner have to take it from buildOptions rather
than from the shared default.
Not done in #6405
That card's acceptance gate was byte identity of the emitted sheet, and its scope was the
re-point. Widening a pin test to a third subject is a different change with a different
review; filed rather than ridden along.
Filed unassigned, as an observation from the #6405 implementation.
Generated by Claude Code
What was observed
scripts/__tests__/plugin-published-stylesheet.test.tsruns its five per-packageassertions — the themed utilities survive, the subtraction really ran, utilities only
(no preflight, no theme block), the same bytes from any working directory, and the
exports/build-step declaration — over exactly two subjects:@object-ui/fieldsis not one of them, and it is the package whose stylesheet hasactually been shipping to consumers since #4059 — the very defect the test's own header
cites as the reason the shape exists. Its
dist/index.cssis covered by the fourwrite-time assertions inside the builder (which run only at build time) and by nothing in
the test suite.
Why it is newly cheap to close
Before #6405 fields ran its own copy of the builder and exposed no module surface, so it
could not be a subject without being rewritten first. It now runs the same shared
createPluginStylesheetBuilderand exports the same shape the two plugins do —PACKAGE_ROOT,PACKAGE_NAME,MUST_SURVIVE,CLASS_CEILING,builder,buildOptions— behind the sameisEntrypointguard. Adding it toSUBJECTSismechanical; the only genuinely new content is a
CARD_THEMEDentry naming the fieldsutilities that resolve unpublished
@themetokens (bg-primary/20,hover:bg-accent/30,ring-destructive/50are the ones #4059 measured), derived independently rather than readback off
MUST_SURVIVE, per the note the test already makes about why it names its ownlist.
One caveat worth checking rather than assuming: fields passes a per-package
header, sowhichever assertions read the emitted banner have to take it from
buildOptionsratherthan from the shared default.
Not done in #6405
That card's acceptance gate was byte identity of the emitted sheet, and its scope was the
re-point. Widening a pin test to a third subject is a different change with a different
review; filed rather than ridden along.
Filed unassigned, as an observation from the #6405 implementation.
Generated by Claude Code