Replace lucide-react with Phosphor (bold), ban Sparkle - #118
Merged
Merged
Conversation
TheGreatAxios
force-pushed
the
cl-icons-phosphor
branch
from
August 20, 2026 13:46
a856884 to
f0581dd
Compare
Owner ruling: Phosphor (@phosphor-icons/react) is now the one icon
library, bold is the only weight, and the Sparkle/Sparkles glyph is
banned outright — every former sparkle spot now carries a glyph that
means something specific to what it marks (Lightning for Skills, Cpu
for the model-routing header).
- New @corbits/icons package: the curated Phosphor re-export every
app/package imports glyphs through, plus BoldIconProvider (an
IconContext wrapper mounted once at apps/web's root) so weight
stays bold everywhere without repeating the prop at each call site.
Extraction-ready for corbitsdev/react-ui per its own header comment.
- Every lucide-react import across apps/web and packages/{api-query,
artifact-ui,bench-ui,chat-ui,plugins-ui,settings-ui,tasks-ui} now
routes through @corbits/icons; lucide-react dropped from every
package.json and the lockfile.
- eslint.config.ts: no-restricted-imports bans lucide-react and
@phosphor-icons/react outside packages/icons/src; no-restricted-syntax
bans importing Sparkle/Sparkles from anywhere.
Glyph mapping (lucide -> Phosphor, bold):
ArrowDown -> ArrowDown, ArrowDownUp -> ArrowsDownUp,
ArrowLeft -> ArrowLeft, ArrowUp -> ArrowUp, Bell -> Bell,
Blocks -> SquaresFour, Bot -> Robot, Cable -> Plugs,
ChartColumn -> ChartBar, ChevronDown -> CaretDown,
ChevronLeft -> CaretLeft, ChevronRight -> CaretRight,
CircleAlert -> WarningCircle, Clock -> Clock, Compass -> Compass,
Copy -> Copy, Cpu -> Cpu, ExternalLink -> ArrowSquareOut,
FileQuestion -> FileDashed, FileStack -> Stack, FileText -> FileText,
GitBranch -> GitBranch, GitPullRequest -> GitPullRequest,
Hash -> Hash, KeyRound -> Key, Library -> FolderOpen (Files nav),
Link -> LinkSimple, List -> ListBullets, Loader2 -> CircleNotch,
Lock -> Lock, LogOut -> SignOut, LucideIcon (type) -> Icon,
Maximize2 -> ArrowsOut, MessageSquare -> ChatCircle,
MessageSquarePlus -> ChatCircleDots, Mic -> Microphone,
Minimize2 -> ArrowsIn, MoreHorizontal -> DotsThree,
Paperclip -> Paperclip, Pencil -> PencilSimple, Pin -> PushPin,
PinOff -> PushPinSlash, PlayCircle -> PlayCircle,
Plug -> PuzzlePiece (Plugins nav + MCP servers), Plus -> Plus,
Repeat -> Repeat, Reply -> ArrowBendUpLeft, RotateCw -> ArrowClockwise,
Search -> MagnifyingGlass, Send -> PaperPlaneRight, Shield -> Shield,
SlidersHorizontal -> SlidersHorizontal, SmilePlus -> Smiley,
Sparkles (Skills nav/empty states/skill icon) -> Lightning,
Sparkles (default-model routing header) -> Cpu, Star -> Star,
SunMoon -> MoonStars, TriangleAlert -> Warning, User -> User,
UserPlus -> UserPlus, UserRound -> UserCircle, Users -> Users,
Workflow -> FlowArrow, X -> X
Verified: tsc + bun test clean on every touched package
(api-query, artifact-ui, bench-ui, chat-ui, icons, plugins-ui,
settings-ui, tasks-ui, apps/web — 578 web tests, 940+ across
packages), check:ui-vocabulary, check:react-ui-drift, and
apps/web's production build all pass. Confirmed the new eslint
rules reject a lucide-react import, a direct @phosphor-icons/react
import, and a Sparkle import.
TheGreatAxios
force-pushed
the
cl-icons-phosphor
branch
from
August 20, 2026 14:02
f0581dd to
ab1337a
Compare
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
@phosphor-icons/react, bold weight) replaces lucide-react as the one icon library acrossapps/weband every UI package; the Sparkle/Sparkles glyph is banned outright (owner never wants to see a generic sparkles glyph again).@corbits/iconspackage: the curated Phosphor re-export surface every app/package imports glyphs through, plusBoldIconProvider— anIconContextwrapper mounted once atapps/web's root (app.tsx) so bold weight applies everywhere without repeating the prop at each call site. Deliberately just re-exports + one provider, extraction-ready forcorbitsdev/react-ui(see the header comment inpackages/icons/src/index.tsx).lucide-reactimport inapps/webandpackages/{api-query,artifact-ui,bench-ui,chat-ui,plugins-ui,settings-ui,tasks-ui}now routes through@corbits/icons.lucide-reactremoved from everypackage.json; no physical install remains (only referenced as@corbits/react-ui's own upstream peer dependency, out of scope here).eslint.config.tsgained ano-restricted-importsrule banninglucide-reactand direct@phosphor-icons/reactimports outsidepackages/icons/src, and ano-restricted-syntaxrule banning anySparkle/Sparklesimport from anywhere. Verified all three trip correctly.Glyph mapping (lucide → Phosphor, bold)
Coordination
Siblings
cl-6368-shell-polish,cl-6369-urls,cl-6362-routines-globalwere in flight and may add newlucide-reactimports concurrently — the eslint guard added here (no-restricted-imports+no-restricted-syntax) catches any straggler import on rebase/merge, so nothing slips back in.Test plan
tsc --noEmitclean on every touched package (api-query, artifact-ui, bench-ui, chat-ui, icons, plugins-ui, settings-ui, tasks-ui, apps/web)bun testclean in every touched package dir (940+ package tests, 578 apps/web tests)bun run check:ui-vocabulary— okbun run check:react-ui-drift— okapps/webproduction build (bun run build) succeedslucide-reactimport, a direct@phosphor-icons/reactimport, and aSparkleimportweight="..."prop other than"bold"— none found (weight enforced globally viaBoldIconProvider)