Found while implementing #5631 (the ui:icon glyph-key contract migration). Out of that card's scope — it is the wrong resolver table family, not the wrong schema key — so recorded here rather than folded in.
What happens
scripts/check-lucide-icon-record-names.mjs judges authored icon names by a hand-maintained census, RECORD_READING_TYPES, mapping a component type to the paths where its glyph names sit:
'button': { paths: ['icon'], … }
'action:button': { paths: ['icon'], … }
'action:icon': { paths: ['icon'], … }
…8 entries
'icon' — the ui:icon node type itself — is not among them, and could not have been before #5631: that renderer named its glyph with name, and every census path is an icon path.
After #5631 lands, ui:icon resolves schema.icon through lucide's runtime icons record. It is now exactly the kind of resolver this gate exists for, and its authored names are still not judged.
How it was measured
The gate's own --report counter, run on the same tree before and after the corpus conversion (the conversion reverted in place under a restoring trap, then restored — the tree verified byte-identical to HEAD afterwards):
before conversion: authored icon names judged: 30 | declines to judge: 254
after conversion: authored icon names judged: 30 | declines to judge: 350
+96, and judged does not move. The delta is exactly the 96 non-.mdx icon nodes the migration converted from name to icon; they moved out of "invisible to the gate" and into "seen, and declined". The gate stays green either way, which is the property worth noting: this is not a gate that fails, it is a gate whose population quietly shrank relative to what now reaches a resolver.
Why it matters concretely
Three of those 96 are a retired lucide spelling today:
examples/schema-catalog/src/schemas/marketing/call-to-action.json:53 icon: 'check-circle'
examples/schema-catalog/src/schemas/marketing/call-to-action.json:69 icon: 'check-circle'
examples/schema-catalog/src/schemas/marketing/call-to-action.json:85 icon: 'check-circle'
check-circle is absent from lucide's runtime icons record (the #5622 / #5586 mechanism: a retired spelling is dropped from the record while the deprecated named export survives). Those three rendered nothing before #5631 and render the visible placeholder after it — unchanged behaviour, no regression from that card — but they are precisely the population check-lucide-icon-record-names.mjs was built to catch, and it does not see them.
The fix is not mechanical, which is why this is filed rather than done
Adding
'icon': { paths: ['icon'], resolver: 'packages/components/src/renderers/basic/icon.tsx' },
to the census turns the gate red on the three check-circle nodes. That is the correct outcome, but it makes the census entry and a retired-spelling repair land together — and the spelling family (#5622 / #5586) is deliberately kept separate from the key family. Whoever takes this decides whether the repair is circle-check in the fixtures or something the #5935 consolidation should absorb first.
Related but distinct
References
Found while implementing #5631 (the
ui:iconglyph-key contract migration). Out of that card's scope — it is the wrong resolver table family, not the wrong schema key — so recorded here rather than folded in.What happens
scripts/check-lucide-icon-record-names.mjsjudges authored icon names by a hand-maintained census,RECORD_READING_TYPES, mapping a componenttypeto the paths where its glyph names sit:'icon'— theui:iconnode type itself — is not among them, and could not have been before #5631: that renderer named its glyph withname, and every census path is aniconpath.After #5631 lands,
ui:iconresolvesschema.iconthrough lucide's runtimeiconsrecord. It is now exactly the kind of resolver this gate exists for, and its authored names are still not judged.How it was measured
The gate's own
--reportcounter, run on the same tree before and after the corpus conversion (the conversion reverted in place under a restoring trap, then restored — the tree verified byte-identical toHEADafterwards):+96, and
judgeddoes not move. The delta is exactly the 96 non-.mdxicon nodes the migration converted fromnametoicon; they moved out of "invisible to the gate" and into "seen, and declined". The gate stays green either way, which is the property worth noting: this is not a gate that fails, it is a gate whose population quietly shrank relative to what now reaches a resolver.Why it matters concretely
Three of those 96 are a retired lucide spelling today:
check-circleis absent from lucide's runtimeiconsrecord (the #5622 / #5586 mechanism: a retired spelling is dropped from the record while the deprecated named export survives). Those three rendered nothing before #5631 and render the visible placeholder after it — unchanged behaviour, no regression from that card — but they are precisely the populationcheck-lucide-icon-record-names.mjswas built to catch, and it does not see them.The fix is not mechanical, which is why this is filed rather than done
Adding
to the census turns the gate red on the three
check-circlenodes. That is the correct outcome, but it makes the census entry and a retired-spelling repair land together — and the spelling family (#5622 / #5586) is deliberately kept separate from the key family. Whoever takes this decides whether the repair iscircle-checkin the fixtures or something the #5935 consolidation should absorb first.Related but distinct
ui:iconbecoming a ninth record-reading site is an input to that card's table.icons-record resolver —editin DetailView's mobile Edit action,smileas theiconrenderer's own default — and only one of the four resolver copies is pinned #5622 /ViewSwitcherrenders NO icon forchartandganttviews: both icon names were dropped from lucide'siconsrecord #5586 — the retired-spelling family that supplies the three concrete instances above.References
scripts/check-lucide-icon-record-names.mjs—RECORD_READING_TYPESpackages/components/src/renderers/basic/icon.tsx— the resolver, post-ui:iconreads the SDUI identity keynameas its lucide icon name, so any icon node that authorsnamerenders nothing at all #5631ui:iconreads the SDUI identity keynameas its lucide icon name, so any icon node that authorsnamerenders nothing at all #5631 — where this surfaced