Measured at 190fbd01 (the current objectstack .objectui-sha pin) while working objectstack-ai/objectstack#11661 (declaring renderer-honoured record:details section keys):
packages/plugin-detail/src/DetailSection.tsx:513 and :542 are the only read points: section.headerColor && + a template-literal class of the form bg- + ${section.headerColor} inside cn(...).- Tailwind here is v4 (
tailwindcss ^4.3.3) with @source scanning over source files and no safelist — apps/console/src/__tests__/sdui-preview-page-source-styling.test.ts documents this repo's own reading: "a utility class authored in real page metadata produces no CSS". A template-literal class is never a complete token in scanned source, so this call site generates no CSS at all; an authored value styles the header only when some other source file happens to use the identical bg-<value> class literally (accidental, unversioned liveness). - Dead-in-practice at the pin: zero producers author
headerColor anywhere in objectstack (examples, platform pages, content) or in objectui outside the @object-ui/types mirror and the detail-section registry input row (packages/plugin-detail/src/index.tsx:287) — both declaration-only surfaces, which is why check:react-declaration-parity never saw it (it compares two declarations, never a declaration against a renderer).
Consequence: the key is unsafe-by-construction — advertised by the registry input and the @object-ui/types mirror (views.ts documents 'muted', 'primary/10' examples) while the renderer cannot deliver it for arbitrary values. objectstack#11661 therefore deliberately does not declare headerColor on the strict spec section schema (declaring a dead key is the capability-illusion shape).
Fix directions (either, plus dropping the registry input row and the mirror examples):
- Remove the dead read entirely (
headerColor from DetailSection.tsx, the detail-section registry inputs, and the @object-ui/types mirror) — smallest honest surface; matches the spec-side refusal. - Implement it safely: map a closed enum of supported values to static class literals Tailwind can see (e.g. a lookup object with complete
bg-muted / bg-primary/10 strings), then propose the enum for spec declaration.
Filed as a finding (observation, unassigned) — the disposition is a triage call.
Back-link: objectstack-ai/objectstack#11661.
Measured at
190fbd01(the current objectstack.objectui-shapin) while working objectstack-ai/objectstack#11661 (declaring renderer-honouredrecord:detailssection keys):packages/plugin-detail/src/DetailSection.tsx:513and:542are the only read points:section.headerColor &&+ a template-literal class of the formbg-+${section.headerColor}insidecn(...).tailwindcss ^4.3.3) with@sourcescanning over source files and no safelist —apps/console/src/__tests__/sdui-preview-page-source-styling.test.tsdocuments this repo's own reading: "a utility class authored in real page metadata produces no CSS". A template-literal class is never a complete token in scanned source, so this call site generates no CSS at all; an authored value styles the header only when some other source file happens to use the identicalbg-<value>class literally (accidental, unversioned liveness).headerColoranywhere in objectstack (examples, platform pages, content) or in objectui outside the@object-ui/typesmirror and thedetail-sectionregistry input row (packages/plugin-detail/src/index.tsx:287) — both declaration-only surfaces, which is whycheck:react-declaration-paritynever saw it (it compares two declarations, never a declaration against a renderer).Consequence: the key is unsafe-by-construction — advertised by the registry input and the
@object-ui/typesmirror (views.tsdocuments'muted','primary/10'examples) while the renderer cannot deliver it for arbitrary values. objectstack#11661 therefore deliberately does not declareheaderColoron the strict spec section schema (declaring a dead key is the capability-illusion shape).Fix directions (either, plus dropping the registry input row and the mirror examples):
headerColorfromDetailSection.tsx, thedetail-sectionregistry inputs, and the@object-ui/typesmirror) — smallest honest surface; matches the spec-side refusal.bg-muted/bg-primary/10strings), then propose the enum for spec declaration.Filed as a finding (observation, unassigned) — the disposition is a triage call.
Back-link: objectstack-ai/objectstack#11661.