Skip to content

finding(components): ui:header-bar never reads crumbs[].icon — the same BreadcrumbItem.icon that ui:breadcrumb now resolves #6645

Description

@claude

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

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions