Filed unassigned by the domain:ui dev seat (session 01EuPCi56cnGyykygi3z9w4m) while implementing #5675. Measured, not fixed — #5675 is fenced out of ComponentInput, and this is about ComponentInput itself.
Measured on origin/main (merge-base 515f171f3)
ComponentInput (packages/types/src/base.ts) declares thirteen keys. Five of them — inputType, min, max, step, placeholder — appear to have no reader anywhere in this repository, on either the consumption or the publication path:
No consumer reads them. A scan for property access across packages/ returns nothing for any of the five on a ComponentInput value. The only hits are unrelated: PreviewProvider.ts writing input.placeholder on a DOM input, a block-config.ts inspector field literally named placeholder, and Math.max calls.
The manifest serializer drops them.packages/sdui-parser/src/index.ts forwards exactly six keys per input when it builds the published sdui.manifest.json:
inputs: (c.inputs??[]).map((i)=>({name: i.name,type: canonicalizeInputType(i.type),required: i.required,enum: i.enum,binding: i.binding,description: i.description,})),None of the five is in that list, so a declaration that sets one cannot reach the published manifest.
The widget adapter never populates them.WidgetRegistry.load() (packages/core/src/registry/WidgetRegistry.ts) synthesises a ComponentInput from a WidgetInput and maps eight keys; the five are simply absent from the object it builds.
Why this is worth a card
Four of the five (min, max, step, placeholder) became writable only recently: #4972 converged the structural copies of ComponentInput onto one declaration, and its changeset records that those four had been missing from the copy every component registration actually imports, so they were unwritable at any real registration until that landed. The convergence was correct. What it also did was make four keys writable that nothing has ever read — declared surface with no enforcement and no consumer, which is the shape ADR-0049 enforce-or-remove exists to triage.
The neighbouring type field already has a maintainer ruling that bears on this (2026-08-17, quoted in base.ts): the coarse arm plus descriptionis the publication face's expression ceiling today, and giving ComponentInput real constraint slots was deferred, not rejected — two sources of truth, free to drift. min / max / step read exactly like the constraint slots that ruling declined to add, sitting on the type already.
Not pre-judged
Three dispositions look plausible and this card does not pick one:
The unmeasurable half is what decides between the first and the third, so this needs triage rather than a patch.
Related context, no action implied for those cards: #5675 (where this was measured), #4972 (which made four of the five writable).
Generated by Claude Code
Generated by Claude Code
Filed unassigned by the
domain:uidev seat (session01EuPCi56cnGyykygi3z9w4m) while implementing #5675. Measured, not fixed — #5675 is fenced out ofComponentInput, and this is aboutComponentInputitself.Measured on
origin/main(merge-base515f171f3)ComponentInput(packages/types/src/base.ts) declares thirteen keys. Five of them —inputType,min,max,step,placeholder— appear to have no reader anywhere in this repository, on either the consumption or the publication path:No consumer reads them. A scan for property access across
packages/returns nothing for any of the five on aComponentInputvalue. The only hits are unrelated:PreviewProvider.tswritinginput.placeholderon a DOM input, ablock-config.tsinspector field literally namedplaceholder, andMath.maxcalls.The manifest serializer drops them.
packages/sdui-parser/src/index.tsforwards exactly six keys per input when it builds the publishedsdui.manifest.json:None of the five is in that list, so a declaration that sets one cannot reach the published manifest.
The widget adapter never populates them.
WidgetRegistry.load()(packages/core/src/registry/WidgetRegistry.ts) synthesises aComponentInputfrom aWidgetInputand maps eight keys; the five are simply absent from the object it builds.Why this is worth a card
Four of the five (
min,max,step,placeholder) became writable only recently: #4972 converged the structural copies ofComponentInputonto one declaration, and its changeset records that those four had been missing from the copy every component registration actually imports, so they were unwritable at any real registration until that landed. The convergence was correct. What it also did was make four keys writable that nothing has ever read — declared surface with no enforcement and no consumer, which is the shape ADR-0049 enforce-or-remove exists to triage.The neighbouring
typefield already has a maintainer ruling that bears on this (2026-08-17, quoted inbase.ts): the coarse arm plusdescriptionis the publication face's expression ceiling today, and givingComponentInputreal constraint slots was deferred, not rejected — two sources of truth, free to drift.min/max/stepread exactly like the constraint slots that ruling declined to add, sitting on the type already.Not pre-judged
Three dispositions look plausible and this card does not pick one:
PluginComponentInputis a published name with zero consumers, and after #4972 it is a pure alias ofComponentInput#5674 recorded forPluginComponentInput).sdui-parser'scheckTypeto read them, which is the direction the 2026-08-17 ruling deferred rather than refused, and which needs its own measured pull.The unmeasurable half is what decides between the first and the third, so this needs triage rather than a patch.
Related context, no action implied for those cards: #5675 (where this was measured), #4972 (which made four of the five writable).
Generated by Claude Code
Generated by Claude Code