Filed unassigned by the os-dev seat while implementing objectui#8344 (session session_01CZY49skxUBYyJcdnTcYPrE). Grading and domain:* are the triage seat's. ⛔ Deliberately NOT repaired on #8344's PR: that card's appetite routes every Class-A spelling needing a NEW component arm into its own card, because an arm is a public-surface widening.
The defect
Measured on origin/main c90395b2, walking the corpora objectui#7581's script walks (431 catalog fixtures + the json fences under content/docs) and collecting every value that sits at a DECLARED node slot whose type resolves in no arm of AnyComponentSchema:
footer 1 · h1 1 · header 1 · line-chart 1 · main 1 · my-component 1 · nav 1 · password 1 · ui:calendar 1
Every one except my-component is a REGISTERED, LIVE renderer:
h1 — packages/components/src/renderers/basic/html-elements.tsx registers the safe flow/inline HTML set (h1…h6, p, a, ul, img, …). Its docblock states the purpose: a kind:'html' page is parsed into the SDUI tree, so "the everyday HTML tags an author reaches for … must each resolve to a renderer".
header / nav / main / footer / article / section / aside — the semantic sectioning family, registered elsewhere and carrying nine catalog fixtures of their own under examples/schema-catalog/src/schemas/components-layout-semantic/.
ui:calendar — the date-picker primitive @object-ui/components registers under exactly that key (skipFallback), with five catalog fixtures.
my-component is the opposite case and is listed for completeness: it is the READER's own plugin component in content/docs/utilities/runner.mdx, already carrying a written exemption in scripts/check-doc-component-types.mjs. No arm can ever exist for it.
Why it matters, and why it is invisible today
check:doc-types is green: it judges type literals against the RENDERER registry (656 keys), not against AnyComponentSchema (107). So the two faces disagree by construction and nothing compares them at a node slot.
A reader following content/docs/utilities/runner.mdx's own instruction — "copy one, wrap it in a page document … and save it as src/app-data/pages/index.json" — gets a document whose h1 renders correctly and which objectui check refuses. The example is wrong in the direction that costs the most: it works in the browser and fails the validator.
Scope of a repair, stated so it can be priced
An arm per family, not per tag: the html-elements set is 30-odd tags with a shared shape, and the sectioning family is seven. ⚠️ It is a public-surface widening either way — each arm makes that type authorable everywhere, which is the reason objectui#8344 refuses to take it in flight.
Reproduction
pnpm --filter @object-ui/types build, then run scripts/measure-strict-authoring-face.mjs --json and read unresolvedNodeTypes.
Generated by Claude Code
Filed unassigned by the
os-devseat while implementing objectui#8344 (sessionsession_01CZY49skxUBYyJcdnTcYPrE). Grading anddomain:*are the triage seat's. ⛔ Deliberately NOT repaired on #8344's PR: that card's appetite routes every Class-A spelling needing a NEW component arm into its own card, because an arm is a public-surface widening.The defect
Measured on
origin/mainc90395b2, walking the corporaobjectui#7581's script walks (431 catalog fixtures + thejsonfences undercontent/docs) and collecting every value that sits at a DECLARED node slot whosetyperesolves in no arm ofAnyComponentSchema:Every one except
my-componentis a REGISTERED, LIVE renderer:h1—packages/components/src/renderers/basic/html-elements.tsxregisters the safe flow/inline HTML set (h1…h6,p,a,ul,img, …). Its docblock states the purpose: akind:'html'page is parsed into the SDUI tree, so "the everyday HTML tags an author reaches for … must each resolve to a renderer".header/nav/main/footer/article/section/aside— the semantic sectioning family, registered elsewhere and carrying nine catalog fixtures of their own underexamples/schema-catalog/src/schemas/components-layout-semantic/.ui:calendar— the date-picker primitive@object-ui/componentsregisters under exactly that key (skipFallback), with five catalog fixtures.my-componentis the opposite case and is listed for completeness: it is the READER's own plugin component incontent/docs/utilities/runner.mdx, already carrying a written exemption inscripts/check-doc-component-types.mjs. No arm can ever exist for it.Why it matters, and why it is invisible today
check:doc-typesis green: it judges type literals against the RENDERER registry (656 keys), not againstAnyComponentSchema(107). So the two faces disagree by construction and nothing compares them at a node slot.A reader following
content/docs/utilities/runner.mdx's own instruction — "copy one, wrap it in a page document … and save it assrc/app-data/pages/index.json" — gets a document whoseh1renders correctly and whichobjectui checkrefuses. The example is wrong in the direction that costs the most: it works in the browser and fails the validator.Scope of a repair, stated so it can be priced
An arm per family, not per tag: the html-elements set is 30-odd tags with a shared shape, and the sectioning family is seven.⚠️ It is a public-surface widening either way — each arm makes that type authorable everywhere, which is the reason objectui#8344 refuses to take it in flight.
Reproduction
pnpm --filter @object-ui/types build, then runscripts/measure-strict-authoring-face.mjs --jsonand readunresolvedNodeTypes.Generated by Claude Code