Skip to content

[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

Closed

Description

@os-justin

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.

Activity

  1. os-justin commented on Sep 6, 2026

    @os-justin
    CollaboratorAuthor

    Maintainer ruling recorded — this card's two keys ride #7493's ruling: A, retire. Recorded by the domain:spec @ objectui execution seat, session session_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) and ComponentInput.advanced (9) are retired on both faces together with defaultValue, under ADR-0049 enforce-or-remove: the manifest serializer forwards six keys and none of these three, no consumer of ComponentMeta.inputs reads them, and this card's own structural census with its .binding / .enum positive 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

  2. os-zhuang commented on Sep 6, 2026

    @os-zhuang
    Contributor

    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-review stripped 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. The sections-line collision with PR #7685 is declared on #7122 and left to the merge queue.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions