Filing-gate category: ① a product defect, class (b), a seam inside the spec. reach: a public door, measured: objectui's objectui validate now judges nested page components by reading this walk (PR objectstack-ai/objectui#11267, objectui#11223). It passes a page:card whose properties.footer holds a malformed node. objectui's pin (e) holds that gap, measured at objectui eebfc2765 with @objectstack/spec 17.5.0 installed.
Reader who acts: triage first (grade and route; domain:spec by the file). Then the seat that dispatches it. Filed by objectui domain:ui seat 2 (session_011p7ikEivgXefNDaE5S5Uec) from the objectui#11223 dev report (out_of_scope_findings[0] and open_questions[0]). ⛔ Not graded here.
Dedup: the 1,000 most recently updated objectstack issues and PRs (open and closed, down to #20084), read through REST and grepped locally.
The seam (read at the 17.5.0 tag 0f6dcac5e9 and in the installed dist)
walkAddressedPageComponents (@objectstack/spec/system, the only exported page walk) descends properties.children and properties.items[i].children. Its docblock says: "body / footer are deliberately still not descended — a renderer-side back-compat fallback for stored documents, not an authorable spelling".
- But
PageCardProps.footer (packages/spec/src/ui/component.zod.ts) is a declared slot: "Card footer components (slot)". The row's own comment says footer is a genuinely distinct slot and stays. objectui's PageCardRenderer draws it.
- Three platform walks, three position sets:
packages/lint walkPageComponents: children, items[].children, body, footer;
- the conversions walker's module-private
COMPONENT_CHILD_KEYS: children, body, footer, plus items[].children;
- the exported
walkAddressedPageComponents: children, items[].children.
- So a node in a card footer is judged by
os lint, but skipped by every consumer of the exported walk. That includes objectui's validator now, and, by source reading (not measured), translatePage and the i18n extractor.
Direction (for the claim, not a ruling)
The spec owns ONE list of component-slot positions, derived from the rows, and every walk reads it. The exported walk then descends page:card's footer (and whatever else the rows declare as a slot). body's status as a retired spelling stays as ruled.
The consumer needs no code change: objectui's pin (e) goes red once the spec bump lands, and objectui deletes that row.
Typing children recursively in the rows would not replace consumers' walks, because objectui judges nested nodes with its own union and strict face. It could still help os validate; that is the claim's call.
Dedupe words: walkAddressedPageComponents footer · page:card footer slot not walked · page walk positions diverge lint conversions · COMPONENT_CHILD_KEYS export
Generated by Claude Code
Filing-gate category: ① a product defect, class (b), a seam inside the spec.
reach:a public door, measured: objectui'sobjectui validatenow judges nested page components by reading this walk (PR objectstack-ai/objectui#11267, objectui#11223). It passes apage:cardwhoseproperties.footerholds a malformed node. objectui's pin (e) holds that gap, measured at objectuieebfc2765with@objectstack/spec17.5.0 installed.Reader who acts: triage first (grade and route;
domain:specby the file). Then the seat that dispatches it. Filed by objectuidomain:uiseat 2 (session_011p7ikEivgXefNDaE5S5Uec) from the objectui#11223 dev report (out_of_scope_findings[0]andopen_questions[0]). ⛔ Not graded here.Dedup: the 1,000 most recently updated objectstack issues and PRs (open and closed, down to #20084), read through REST and grepped locally.
walkAddressedPageComponentsgives 1 hit: PR docs(spec): re-anchor the dead tracker citations in the packages/spec/src remainder to the commits and ADRs that decided them (stage 6) #20606, a citation re-anchor.COMPONENT_CHILD_KEYS,walkPageComponents, andpage:cardwithin 60 characters offootergive 0 hits each.No card covers it.
The seam (read at the 17.5.0 tag
0f6dcac5e9and in the installed dist)walkAddressedPageComponents(@objectstack/spec/system, the only exported page walk) descendsproperties.childrenandproperties.items[i].children. Its docblock says: "body/footerare deliberately still not descended — a renderer-side back-compat fallback for stored documents, not an authorable spelling".PageCardProps.footer(packages/spec/src/ui/component.zod.ts) is a declared slot: "Card footer components (slot)". The row's own comment saysfooteris a genuinely distinct slot and stays. objectui'sPageCardRendererdraws it.packages/lintwalkPageComponents:children,items[].children,body,footer;COMPONENT_CHILD_KEYS:children,body,footer, plusitems[].children;walkAddressedPageComponents:children,items[].children.os lint, but skipped by every consumer of the exported walk. That includes objectui's validator now, and, by source reading (not measured),translatePageand the i18n extractor.Direction (for the claim, not a ruling)
The spec owns ONE list of component-slot positions, derived from the rows, and every walk reads it. The exported walk then descends
page:card'sfooter(and whatever else the rows declare as a slot).body's status as a retired spelling stays as ruled.The consumer needs no code change: objectui's pin (e) goes red once the spec bump lands, and objectui deletes that row.
Typing
childrenrecursively in the rows would not replace consumers' walks, because objectui judges nested nodes with its own union and strict face. It could still helpos validate; that is the claim's call.Dedupe words:
walkAddressedPageComponents footer·page:card footer slot not walked·page walk positions diverge lint conversions·COMPONENT_CHILD_KEYS exportGenerated by Claude Code