Found by the corpus census the objectui#6708 ruling required before its diagnostic's level could be chosen. Filed rather than fixed: objectui#6708's PR is the SchemaRenderer-tier diagnostic and changes no authored metadata.
The mechanism (settled, not re-litigated here)
SchemaRenderer hoists properties.* onto the node; props is evaluated and then spread as React props instead. A renderer declared as ({ schema }) — the normal component-renderer shape — never sees it. The element:* family is the exception, because its readProps() merges both bags. Every gate accepts the spelling: BaseSchema is .passthrough().
The two hits, measured on faac0d935
| where | node | keys under props | the renderer reads |
|---|
packages/types/examples/data-display-examples.json (compositeExample) | flex | direction, gap | schema.direction, schema.gap — flex.tsx |
skills/objectui/guides/page-builder.md | statistic | label, value | schema.* — StatisticRenderer is declared ({ schema }) |
Both therefore render as if the bag were empty: the flex node gets the default row direction and the default gap whatever the example says, and the statistic node renders with no label and no value. Both are published teaching material presented as correct.
The skills one is the higher-leverage half: the published skills corpus is what an AI author learns the spelling from, and this is the same failure class as objectui#5473 and objectui#5947.
What is NOT a hit, and should stay as it is
Three other authored occurrences of the same shape are deliberate counter-examples, already marked as wrong where they stand, and must not be "fixed":
skills/objectui/rules/protocol.md — a card with props: { title }, immediately followed by the measurement table showing it renders no header;skills/objectui/guides/schema-expressions.md — a card and a text node, both flagged with a cross mark and the words "evaluated, then dropped".
Census scope
Every JSON document, every json fence in every .md/.mdx, and every TypeScript object literal in the repo, walked for nodes carrying both type and props: 39 nodes, 22 on component-renderer types, 19 of those 22 test fixtures exercising the shape on purpose. These two are the whole authored, non-test remainder that is not a counter-example. No application runtime metadata in the repo carries the shape.
Suggested fix
Mechanical, and the correct target differs per node: both flex and statistic declare their keys at NODE level in their schemas, so the fix is to lift the keys out of the envelope rather than to rename props to properties. Worth confirming against each schema before editing.
Related: objectui#6708 (the diagnostic that now names this at render), objectui#6508 (a different defect in the same guide file), objectui#5473, objectui#5947.
Generated by Claude Code
Found by the corpus census the objectui#6708 ruling required before its diagnostic's level could be chosen. Filed rather than fixed: objectui#6708's PR is the SchemaRenderer-tier diagnostic and changes no authored metadata.
The mechanism (settled, not re-litigated here)
SchemaRendererhoistsproperties.*onto the node;propsis evaluated and then spread as React props instead. A renderer declared as({ schema })— the normal component-renderer shape — never sees it. Theelement:*family is the exception, because itsreadProps()merges both bags. Every gate accepts the spelling:BaseSchemais.passthrough().The two hits, measured on
faac0d935propspackages/types/examples/data-display-examples.json(compositeExample)flexdirection,gapschema.direction,schema.gap—flex.tsxskills/objectui/guides/page-builder.mdstatisticlabel,valueschema.*—StatisticRendereris declared({ schema })Both therefore render as if the bag were empty: the
flexnode gets the defaultrowdirection and the default gap whatever the example says, and thestatisticnode renders with no label and no value. Both are published teaching material presented as correct.The skills one is the higher-leverage half: the published skills corpus is what an AI author learns the spelling from, and this is the same failure class as objectui#5473 and objectui#5947.
What is NOT a hit, and should stay as it is
Three other authored occurrences of the same shape are deliberate counter-examples, already marked as wrong where they stand, and must not be "fixed":
skills/objectui/rules/protocol.md— acardwithprops: { title }, immediately followed by the measurement table showing it renders no header;skills/objectui/guides/schema-expressions.md— acardand atextnode, both flagged with a cross mark and the words "evaluated, then dropped".Census scope
Every JSON document, every
jsonfence in every.md/.mdx, and every TypeScript object literal in the repo, walked for nodes carrying bothtypeandprops: 39 nodes, 22 on component-renderer types, 19 of those 22 test fixtures exercising the shape on purpose. These two are the whole authored, non-test remainder that is not a counter-example. No application runtime metadata in the repo carries the shape.Suggested fix
Mechanical, and the correct target differs per node: both
flexandstatisticdeclare their keys at NODE level in their schemas, so the fix is to lift the keys out of the envelope rather than to renamepropstoproperties. Worth confirming against each schema before editing.Related: objectui#6708 (the diagnostic that now names this at render), objectui#6508 (a different defect in the same guide file), objectui#5473, objectui#5947.
Generated by Claude Code