Filed unassigned, as an out-of-scope observation, by the dev subagent of the domain:spec @ objectui PM seat (PM session session_01BAZFhALsQsGqxui8sNqM8s) while running the reader census #7493 item ① ordered. Measured, not fixed. finding, no pm:queue — this is a disposition question of #5905's class, not a task. Attribution: generated by Claude Code, session https://claude.ai/code/session_01BAZFhALsQsGqxui8sNqM8s.
Measured on origin/main 669d71bf
ComponentInput (packages/types/src/base.ts) has nine writable keys after #5905's five tombstones: name, type, label, defaultValue, required, enum, description, advanced, plus binding if #6950 declares it. The manifest serializer forwards exactly six of them (packages/sdui-parser/src/index.ts:153-160: name, type, required, enum, binding, description). The three it does not forward are label, defaultValue and advanced. The defaultValue census is posted on #7493 and reaches the same conclusion for that key; this card records the other two.
Instrument — every non-test consumer of ComponentMeta.inputs, and what each reads
The reader question was settled structurally rather than by grepping the key name: enumerate every path that reaches a ComponentMeta.inputs array outside tests, then read what each does with an entry.
| consumer |
what it reads from an input |
packages/sdui-parser/src/index.ts:153-160 (manifestFromConfigs) |
the six forwarded keys; label / advanced / defaultValue dropped |
packages/sdui-parser/src/codegen.ts and validate.ts |
operate on the manifest shape; its boundary type RegistryConfigLike.inputs (index.ts:70-84) has no label / advanced / defaultValue slot at all |
packages/core/src/registry/Registry.ts:392-394 (withElementDataSourceInput, the ElementDataSourceGate seam) |
input?.name only |
packages/core/src/registry/WidgetRegistry.ts:175-184 |
a WRITE — copies label, defaultValue, advanced from WidgetInput onto the synthesized ComponentInput; WidgetInput.label / .advanced have no reader either |
packages/components/src/renderers/layout/page.tsx:463-465 |
forwards meta?.inputs verbatim into manifestFromConfigs (the serializer above) |
getPublicConfigs() callers — packages/sdui-parser/scripts/gen-manifest.ts:20, apps/console/dev/manifest-dump.tsx:41, packages/components/src/renderers/layout/react-page.tsx:75 |
the serializer, or { type, isContainer } |
packages/plugin-designer/**, packages/app-shell/** inspectors |
read NO registry meta.inputs at all — the designer's PropertyEditor never consults ComponentMeta; the .inputs hits there are cn(...inputs) and flow-simulator variables |
So no consumer reads any key outside the six forwarded ones. Receiver-shaped greps agree: (i|input|inp).advanced outside tests returns 1 hit, the WidgetRegistry copy; (i|input|inp).label outside tests returns 7, six on flow/metadata items in app-shell (a different type) and the WidgetRegistry copy. Test files: zero reads of .label or .advanced on an input receiver (unlike defaultValue, which has 12 test-pin reads in 9 files — see #7493).
Controls on the same instrument, same tree: .binding returns 8 hits including the serializer, codegen.ts:152 and validate.ts:82-83 readers; .enum on an input receiver returns 3 reader hits in sdui-parser (codegen.ts:109, index.ts:157, validate.ts:157). The instrument sees readers of forwarded keys.
Authorship (a depth-1 bracket-balanced scan over every inputs: array — 129 files, 211 arrays, 957 input objects)
label 908 · advanced 9 · defaultValue 245 — controls in the same pass: name 951, type 951, description 193, enum 119, required 86, binding 4. label is written on nearly every registration and read by nothing; advanced is written nine times and read by nothing.
Sibling objectstack at d701e65: zero ComponentInput references. Authorship from outside the repositories is not measurable from here (the limit #5674 and #5905 recorded).
Not pre-judged
The same three dispositions #5905 listed: retire under enforce-or-remove (tombstone both faces via retirementTombstone(), deleting 908 label writes is the cost), forward (teach the serializer — refused on record for inputType in #5905, "a write nothing reads is not demand for a feature", and the 2026-08-17 expression-ceiling ruling on type is untouched by this), or keep as deliberate designer-facing surface with a docblock saying so. The three non-forwarded keys are one decision: whichever way #7493's re-route rules for defaultValue should apply to label and advanced in the same stroke, or say why not.
Refs: #7493 · #5905 · #6950 · #5674.
Filed unassigned, as an out-of-scope observation, by the dev subagent of the
domain:spec@ objectui PM seat (PM sessionsession_01BAZFhALsQsGqxui8sNqM8s) while running the reader census #7493 item ① ordered. Measured, not fixed.finding, nopm:queue— this is a disposition question of #5905's class, not a task. Attribution: generated by Claude Code, sessionhttps://claude.ai/code/session_01BAZFhALsQsGqxui8sNqM8s.Measured on
origin/main669d71bfComponentInput(packages/types/src/base.ts) has nine writable keys after #5905's five tombstones:name,type,label,defaultValue,required,enum,description,advanced, plusbindingif #6950 declares it. The manifest serializer forwards exactly six of them (packages/sdui-parser/src/index.ts:153-160:name,type,required,enum,binding,description). The three it does not forward arelabel,defaultValueandadvanced. ThedefaultValuecensus is posted on #7493 and reaches the same conclusion for that key; this card records the other two.Instrument — every non-test consumer of
ComponentMeta.inputs, and what each readsThe reader question was settled structurally rather than by grepping the key name: enumerate every path that reaches a
ComponentMeta.inputsarray outside tests, then read what each does with an entry.packages/sdui-parser/src/index.ts:153-160(manifestFromConfigs)label/advanced/defaultValuedroppedpackages/sdui-parser/src/codegen.tsandvalidate.tsRegistryConfigLike.inputs(index.ts:70-84) has nolabel/advanced/defaultValueslot at allpackages/core/src/registry/Registry.ts:392-394(withElementDataSourceInput, theElementDataSourceGateseam)input?.nameonlypackages/core/src/registry/WidgetRegistry.ts:175-184label,defaultValue,advancedfromWidgetInputonto the synthesizedComponentInput;WidgetInput.label/.advancedhave no reader eitherpackages/components/src/renderers/layout/page.tsx:463-465meta?.inputsverbatim intomanifestFromConfigs(the serializer above)getPublicConfigs()callers —packages/sdui-parser/scripts/gen-manifest.ts:20,apps/console/dev/manifest-dump.tsx:41,packages/components/src/renderers/layout/react-page.tsx:75{ type, isContainer }packages/plugin-designer/**,packages/app-shell/**inspectorsmeta.inputsat all — the designer'sPropertyEditornever consultsComponentMeta; the.inputshits there arecn(...inputs)and flow-simulator variablesSo no consumer reads any key outside the six forwarded ones. Receiver-shaped greps agree:
(i|input|inp).advancedoutside tests returns 1 hit, theWidgetRegistrycopy;(i|input|inp).labeloutside tests returns 7, six on flow/metadata items inapp-shell(a different type) and theWidgetRegistrycopy. Test files: zero reads of.labelor.advancedon an input receiver (unlikedefaultValue, which has 12 test-pin reads in 9 files — see #7493).Controls on the same instrument, same tree:
.bindingreturns 8 hits including the serializer,codegen.ts:152andvalidate.ts:82-83readers;.enumon an input receiver returns 3 reader hits insdui-parser(codegen.ts:109,index.ts:157,validate.ts:157). The instrument sees readers of forwarded keys.Authorship (a depth-1 bracket-balanced scan over every
inputs:array — 129 files, 211 arrays, 957 input objects)label908 ·advanced9 ·defaultValue245 — controls in the same pass:name951,type951,description193,enum119,required86,binding4.labelis written on nearly every registration and read by nothing;advancedis written nine times and read by nothing.Sibling
objectstackatd701e65: zeroComponentInputreferences. Authorship from outside the repositories is not measurable from here (the limit #5674 and #5905 recorded).Not pre-judged
The same three dispositions #5905 listed: retire under enforce-or-remove (tombstone both faces via
retirementTombstone(), deleting 908labelwrites is the cost), forward (teach the serializer — refused on record forinputTypein #5905, "a write nothing reads is not demand for a feature", and the 2026-08-17 expression-ceiling ruling ontypeis untouched by this), or keep as deliberate designer-facing surface with a docblock saying so. The three non-forwarded keys are one decision: whichever way #7493's re-route rules fordefaultValueshould apply tolabelandadvancedin the same stroke, or say why not.Refs: #7493 · #5905 · #6950 · #5674.