Domain concepts (tokens, cost, model, user, session, trace, …) were each drawn with a lucide icon picked ad-hoc per file, so one concept drifted to several glyphs across the app. The registry work introduced frontend/ui/src/components/icons/domain-icons.ts as the single source of truth, migrated ~25 surfaces onto it, and added a no-restricted-imports guard so the registry cannot be bypassed.
These are the pieces deliberately left out of that change, either because they needed their own design decision or because they were cross-cutting refactors that did not belong in a feature PR.
Scope
Ordering
#1627 is the highest value: it closes a live case of one component being drawn under two spellings, and it is the only item that removes a documented carve-out from the lint guard. #1628 is a small self-contained fix. #1629 is pure hygiene and can go last.
Not in scope
Some lucide glyphs stay deliberately unrestricted because each has a genuine second meaning in this app: Eye (password visibility), Hash (Slack channel), Clock (durations), ArrowRight (call-to-action arrows), Sparkle ("magic"), CircleAlert (generic warnings). Those are correct as-is and should not be migrated.
Domain concepts (tokens, cost, model, user, session, trace, …) were each drawn with a lucide icon picked ad-hoc per file, so one concept drifted to several glyphs across the app. The registry work introduced
frontend/ui/src/components/icons/domain-icons.tsas the single source of truth, migrated ~25 surfaces onto it, and added ano-restricted-importsguard so the registry cannot be bypassed.These are the pieces deliberately left out of that change, either because they needed their own design decision or because they were cross-cutting refactors that did not belong in a feature PR.
Scope
Ordering
#1627 is the highest value: it closes a live case of one component being drawn under two spellings, and it is the only item that removes a documented carve-out from the lint guard. #1628 is a small self-contained fix. #1629 is pure hygiene and can go last.
Not in scope
Some lucide glyphs stay deliberately unrestricted because each has a genuine second meaning in this app:
Eye(password visibility),Hash(Slack channel),Clock(durations),ArrowRight(call-to-action arrows),Sparkle("magic"),CircleAlert(generic warnings). Those are correct as-is and should not be migrated.