Observed while wiring objectui#5931 (PR #6644). Filed unassigned, not fixed there — out of that card's fence.
Measured
HeaderBarSchema.crumbs is typed BreadcrumbItem[] — the same interface BreadcrumbSchema.items uses (packages/types/src/navigation.ts, mirrored as BreadcrumbItemSchema in packages/types/src/zod/navigation.zod.ts, which declares icon: z.string().optional()).
packages/components/src/renderers/navigation/header-bar.tsx contains 0 occurrences of the substring icon (grep -c icon on the file). Its BreadcrumbLabel helper reads crumb.label, crumb.siblings and crumb.href, and nothing else.
Why it is worth a card now rather than before
PR #6644 makes ui:breadcrumb resolve BreadcrumbItem.icon through the shared resolveIcon. After it lands, one declared key behaves differently in its two consumers: authored on a breadcrumb item it draws a glyph, authored on a header-bar crumb it draws nothing. That asymmetry is invisible today only because it is a uniform zero.
No components-navigation-header-bar/*.json fixture authors a crumb icon and the header-bar docs page does not mention one, so there is no user-visible failure to point at yet — this is the ADR-0049 declared-but-unenforced shape, recorded before someone authors the key and finds it inert.
Not decided here
Either header-bar should resolve it the same way (a four-line change mirroring #6644), or crumbs should stop being typed as the full BreadcrumbItem. Both are real; the second is a retirement of a declared key on one consumer and needs a maintainer's call.
Adjacent, already tracked
The icon-record gate (scripts/check-lucide-icon-record-names.mjs) correctly does not census header-bar: its crumb names reach no resolver, so declining them is right. Do not "fix" this by teaching that gate to guess — that blind spot is objectui#5992.
Generated by Claude Code
Observed while wiring objectui#5931 (PR #6644). Filed unassigned, not fixed there — out of that card's fence.
Measured
HeaderBarSchema.crumbsis typedBreadcrumbItem[]— the same interfaceBreadcrumbSchema.itemsuses (packages/types/src/navigation.ts, mirrored asBreadcrumbItemSchemainpackages/types/src/zod/navigation.zod.ts, which declaresicon: z.string().optional()).packages/components/src/renderers/navigation/header-bar.tsxcontains 0 occurrences of the substringicon(grep -c iconon the file). ItsBreadcrumbLabelhelper readscrumb.label,crumb.siblingsandcrumb.href, and nothing else.Why it is worth a card now rather than before
PR #6644 makes
ui:breadcrumbresolveBreadcrumbItem.iconthrough the sharedresolveIcon. After it lands, one declared key behaves differently in its two consumers: authored on abreadcrumbitem it draws a glyph, authored on aheader-barcrumb it draws nothing. That asymmetry is invisible today only because it is a uniform zero.No
components-navigation-header-bar/*.jsonfixture authors a crumbiconand the header-bar docs page does not mention one, so there is no user-visible failure to point at yet — this is the ADR-0049 declared-but-unenforced shape, recorded before someone authors the key and finds it inert.Not decided here
Either
header-barshould resolve it the same way (a four-line change mirroring #6644), orcrumbsshould stop being typed as the fullBreadcrumbItem. Both are real; the second is a retirement of a declared key on one consumer and needs a maintainer's call.Adjacent, already tracked
The icon-record gate (
scripts/check-lucide-icon-record-names.mjs) correctly does not censusheader-bar: its crumb names reach no resolver, so declining them is right. Do not "fix" this by teaching that gate to guess — that blind spot is objectui#5992.Generated by Claude Code