⚠️ Housekeeping: this issue was opened by accident (a write-capability probe that I wrongly expected to be rejected) and has been rewritten in place into the real finding below, so no stray issue is left behind. Its original title was a placeholder; nothing else was ever attached to it.
Found incidentally while executing the measurement dispatch on #6810 (walking all 433 catalog fixtures on origin/mainee851c32a). ⛔ Out of scope for #6810, which is scoped to the content key only — filed rather than fixed.
The defect
examples/schema-catalog/src/schemas/components-form-select/basic-select.json authors three options. The third one puts its display text under type:
{
"type": "select",
"label": "Choose an option",
"options": [
{ "label": "Option 1", "value": "1" },
{ "label": "Option 2", "value": "2" },
{ "type": "Option 3", "value": "3" }
]
}packages/components/src/renderers/form/select.tsx:61-62 reads exactly three keys off an option — value, disabled, label:
{schema.options?.map((opt)=>(<SelectItemkey={String(opt.value)}value={String(opt.value)}disabled={opt.disabled}>{opt.label}</SelectItem>))}There is no fallback from label to value, and matchOptionValue (packages/components/src/renderers/form/option-value.ts:38) only reads value. So the third option renders as a select item with no visible text — a shipped demo that draws a blank row.
SelectOption (packages/types/src/form.ts:266) declares label: string as required and does not declare type at all, so the fixture is also off-contract, not merely unrendered.
Why nothing already red covers it
Same class as #6805 / #6806 / #6829 — a catalog fixture authoring a key the resolving renderer never reads — but a different key and a different family, so none of those cards touch it. BaseSchema is .passthrough() and options are not nodes, so neither zod nor tsc rejects it. catalog-gallery-render.test.tsx's non-vacuity control is satisfied many times over by the two options that DO have labels, so it structurally cannot see one blank item inside a select.
Suggested repair
Author the key the renderer reads: { "label": "Option 3", "value": "3" }.
⛔ Not "teach ui:select to read type" — type is the node-type key of the JSON protocol and must not acquire a second meaning on option objects (AGENTS.md #0.1).
Scope note
This was found while validating a walker's node-type histogram, not by a systematic sweep. #6810 measured that the content key class is exhausted (0 defects across 707 content keys in 127 files); it did not measure other keys. This issue is one datum showing the non-content class is not empty.
Generated by Claude Code
Found incidentally while executing the measurement dispatch on #6810 (walking all 433 catalog fixtures on
origin/mainee851c32a). ⛔ Out of scope for #6810, which is scoped to thecontentkey only — filed rather than fixed.The defect
examples/schema-catalog/src/schemas/components-form-select/basic-select.jsonauthors three options. The third one puts its display text undertype:{ "type": "select", "label": "Choose an option", "options": [ { "label": "Option 1", "value": "1" }, { "label": "Option 2", "value": "2" }, { "type": "Option 3", "value": "3" } ] }packages/components/src/renderers/form/select.tsx:61-62reads exactly three keys off an option —value,disabled,label:There is no fallback from
labeltovalue, andmatchOptionValue(packages/components/src/renderers/form/option-value.ts:38) only readsvalue. So the third option renders as a select item with no visible text — a shipped demo that draws a blank row.SelectOption(packages/types/src/form.ts:266) declareslabel: stringas required and does not declaretypeat all, so the fixture is also off-contract, not merely unrendered.Why nothing already red covers it
Same class as #6805 / #6806 / #6829 — a catalog fixture authoring a key the resolving renderer never reads — but a different key and a different family, so none of those cards touch it.
BaseSchemais.passthrough()and options are not nodes, so neither zod nor tsc rejects it.catalog-gallery-render.test.tsx's non-vacuity control is satisfied many times over by the two options that DO have labels, so it structurally cannot see one blank item inside a select.Suggested repair
Author the key the renderer reads:
{ "label": "Option 3", "value": "3" }.⛔ Not "teach
ui:selectto readtype" —typeis the node-type key of the JSON protocol and must not acquire a second meaning on option objects (AGENTS.md #0.1).Scope note
This was found while validating a walker's node-type histogram, not by a systematic sweep. #6810 measured that the
contentkey class is exhausted (0 defects across 707contentkeys in 127 files); it did not measure other keys. This issue is one datum showing the non-contentclass is not empty.Generated by Claude Code