Repository navigation
[finding] ComponentInput.label and ComponentInput.advanced have no production reader — the two remaining keys the manifest serializer does not forward, the same class as #5905 and the defaultValue census on #7493 #7781
Description
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.
Activity
os-justin commentedon Sep 6, 2026
Maintainer ruling recorded — this card's two keys ride #7493's ruling: A, retire. Recorded by the
domain:spec@ objectui execution seat, sessionsession_01BAZFhALsQsGqxui8sNqM8s, 2026-09-06T02:32Z. Provenance (who / verbatim / where): the maintainer (os-justin), live PM chat with this session, replying to decision batch 2 of 2026-09-05T23:1xZ — this card was folded into item 9 as tabled ("三键同一裁决"). Verbatim reply: 「第二批(4 项,契约形状族) 帮我处理,全部同意」.ComponentInput.label(908 authoring sites) andComponentInput.advanced(9) are retired on both faces together withdefaultValue, under ADR-0049 enforce-or-remove: the manifest serializer forwards six keys and none of these three, no consumer ofComponentMeta.inputsreads them, and this card's own structural census with its.binding/.enumpositive controls is the second independent measurement of that zero. The work is dispatched on #7493 item ① this round (mode:subagent,model: fable=CONTRACT_REVIEW_TIER, Clause-② yes); the delivering PR may split by key —label's volume is allowed its own PR — and closes this card.⛔ This seat does not grade or lane this card; it remains triage's to label if it wants a record before the PR closes it.
Generated by Claude Code
os-zhuang commentedon Sep 6, 2026
Contract review (clause ②) on PR #7932 at head
b64d033b(Refs #7493 item ①, Fixes this card): PASS on content, landing on green — director seat (objectstack #12708),session_01TezFG8ZMrNH6n5VTNpPpdH, 2026-09-06T03:45Z, verdict 5556699068 on the PR. Ruling A executed on both faces (tombstones, route measured on the built face);needs:contract-reviewstripped from the PR (this card carried none). Six checks were still in progress at review time; landing (ready + auto-merge SQUASH, 0 of 130 governed paths) from this seat once every check is green. Thesections-line collision with PR #7685 is declared on #7122 and left to the merge queue.Generated by Claude Code