Found while implementing #8691 (the record:reference_rail row). Filed as an out-of-scope finding, unassigned.
The gap
After #8691, ComponentPropsMap carries 38 keys, record:* = 7. Three more record:* types sit in exactly the rail's pre-#8691 position — a registered objectui renderer, a PageComponentType enum entry (packages/spec/src/ui/page.zod.ts:58), a console palette slot (block-types.ts), and no props row — so the #5068 gate's dispatch skips them as unregistered and every authored key rides through in silence:
record:alert — the richest surface of the three: the objectui registration declares severity / title / body / visible / icon / action / dismissible / dismissKey as inputs (plugin-detail/src/index.tsx, ComponentRegistry.register('alert', …)), and the renderer reads them. A typo'd severty ships as a silent no-op today.
record:history — registration declares limit / emptyText / unknownUserText.
record:quick_actions — in the enum and the palette; renderer read points not yet measured.
The mechanism is #8691's, verbatim: an undeclared or misspelled key on these components parses, typechecks, validates, builds, ships, and does nothing, while sibling components in the same file get loud component-props-unknown-key diagnostics.
Why this may be deliberate — the triage question
validate-component-props.ts's header frames example-corpus types without rows ("record:quick_actions, record:alert and record:line_items") as "SDUI blocks live in objectui's registry and in the ADR-0080 manifest" — but that is the same framing the rail had until #8691 rejected it. Nothing in the map records a deliberate exclusion for these three (contrast object-chart, whose absence the #7751 comment records by name). Triage should decide: declare the rows (measuring key sets from the renderers' read points at the .objectui-sha pin, per the #8691 method — the registration's declared inputs are a claim to verify, not the measurement), or record the exclusion where the map states its other exclusions.
Note record:chatter is a spec row already but the console palette deliberately excludes it as a duplicate of record:discussion — and record:discussion (palette tier A) has no row either; whoever takes this should measure that pair together.
Blocked-by: nothing — independent of #8691, which is scoped to the rail only.
Generated by Claude Code
Found while implementing #8691 (the
record:reference_railrow). Filed as an out-of-scope finding, unassigned.The gap
After #8691,
ComponentPropsMapcarries 38 keys,record:*= 7. Three morerecord:*types sit in exactly the rail's pre-#8691 position — a registered objectui renderer, aPageComponentTypeenum entry (packages/spec/src/ui/page.zod.ts:58), a console palette slot (block-types.ts), and no props row — so the #5068 gate's dispatch skips them as unregistered and every authored key rides through in silence:record:alert— the richest surface of the three: the objectui registration declaresseverity/title/body/visible/icon/action/dismissible/dismissKeyas inputs (plugin-detail/src/index.tsx,ComponentRegistry.register('alert', …)), and the renderer reads them. A typo'dsevertyships as a silent no-op today.record:history— registration declareslimit/emptyText/unknownUserText.record:quick_actions— in the enum and the palette; renderer read points not yet measured.The mechanism is #8691's, verbatim: an undeclared or misspelled key on these components parses, typechecks, validates, builds, ships, and does nothing, while sibling components in the same file get loud
component-props-unknown-keydiagnostics.Why this may be deliberate — the triage question
validate-component-props.ts's header frames example-corpus types without rows ("record:quick_actions,record:alertandrecord:line_items") as "SDUI blocks live in objectui's registry and in the ADR-0080 manifest" — but that is the same framing the rail had until #8691 rejected it. Nothing in the map records a deliberate exclusion for these three (contrastobject-chart, whose absence the #7751 comment records by name). Triage should decide: declare the rows (measuring key sets from the renderers' read points at the.objectui-shapin, per the #8691 method — the registration's declared inputs are a claim to verify, not the measurement), or record the exclusion where the map states its other exclusions.Note
record:chatteris a spec row already but the console palette deliberately excludes it as a duplicate ofrecord:discussion— andrecord:discussion(palette tier A) has no row either; whoever takes this should measure that pair together.Blocked-by: nothing — independent of #8691, which is scoped to the rail only.
Generated by Claude Code