π fix(ui): resolve iconify aliases and broken references in the icon bundle - #683
Conversation
β¦bundle - π fix(ui): resolve alias chains in extract-icons.mjs so renamed icons (lucide:history) survive regeneration - π fix(ui): point iconoir audit/gitlab/stack references at icons that exist in the locked collection - π¦ deps(ui): add @iconify-json/fa6-brands for the Font Awesome registry brand glyphs - β test(ui): guard that every icons.ts reference exists in the committed bundle - π docs: changelog entry
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. π βΉοΈ Recent review infoβοΈ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: β Files ignored due to path filters (1)
π Files selected for processing (1)
π§ Files skipped from review as they are similar to previous changes (1)
π WalkthroughWalkthroughThe UI adds the Font Awesome 6 brands package. Icon extraction now resolves recursive, untransformed aliases with a depth limit and warnings for unsupported transforms. The icon bundle updates SVG paths and adds Lucide, Iconoir, and Font Awesome icons. Three Iconoir mappings now use new identifiers. A test verifies that every icon referenced by Possibly related PRs
π₯ Pre-merge checks | β 2β Passed checks (2 passed)
β¨ Finishing Touchesπ§ͺ Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
β Action performedReview finished.
|
There was a problem hiding this comment.
π§Ή Nitpick comments (1)
ui/package.json (1)
31-31: π Maintainability & Code Quality | π΅ Trivial | β‘ Quick winKeep the Iconify collection out of runtime installs.
@iconify-json/fa6-brandsis used byui/scripts/extract-icons.mjsto generate the committed bundle. The application usesui/src/boot/icon-bundle.json, so the collection is not needed at runtime. Move Line 31 todevDependenciesand verify the lockfile entry after the move.π€ Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ui/package.json` at line 31, Move `@iconify-json/fa6-brands` from dependencies to devDependencies in package.json, preserving its version, since it is only consumed by the extract-icons.mjs build script. Regenerate or update the lockfile so its dependency classification reflects the move, and verify the application runtime dependencies no longer include the collection.
π€ Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@ui/package.json`:
- Line 31: Move `@iconify-json/fa6-brands` from dependencies to devDependencies in
package.json, preserving its version, since it is only consumed by the
extract-icons.mjs build script. Regenerate or update the lockfile so its
dependency classification reflects the move, and verify the application runtime
dependencies no longer include the collection.
βΉοΈ Review info
βοΈ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 4db788f8-440f-476d-8d67-c8882c89745d
β Files ignored due to path filters (2)
CHANGELOG.mdis excluded by!CHANGELOG.mdui/package-lock.jsonis excluded by!**/package-lock.json,!**/package-lock.json
π Files selected for processing (5)
ui/package.jsonui/scripts/extract-icons.mjsui/src/boot/icon-bundle.jsonui/src/icons.tsui/tests/boot/icon-bundle.spec.ts
|
Nitpick addressed in abdea8a β moved to devDependencies with the sibling collections; regenerated bundle is byte-identical. |
17-file identity roll-forward from rc.12 to rc.13, dated 2026-08-08. - CHANGELOG: new `[1.6.0-rc.13]` section from Unreleased content β #670 digest re-anchoring, #672 self-hosted Star History, #673 nanoid pin, #682 node 24.19.0 + trivy 0.73.0 base-image bumps, #683 icon-bundle alias resolution β plus compare-link rotation - README: version badge + rc.13 highlights block - Demo mocks, site config/content, docs API pages, quickstart, updates highlights, identity-test constants, changelog-link pairs Guarded by `scripts/release-identity.test.mjs` (4/4) and the web scripts suite (56/56). Once merged: devβmain wholesale-tree sync, then dispatch `release-cut.yml` for `v1.6.0-rc.13`. GA candidate clock restarts β earliest GA β Aug 16. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog π§ **Changed** - Advanced the release identity from `1.6.0-rc.12` to `1.6.0-rc.13`, dated August 8, 2026. - Updated README, demo mocks, site configuration, roadmap content, API examples, quickstart, and update highlights. - Updated changelog comparison links and release identity test constants. - Added release notes for digest re-anchoring, self-hosted Star History, `nanoid` pins, Node 24.19.0 and Trivy 0.73.0 base images, and icon-bundle alias resolution. π **Security** - Documented workspace-wide `nanoid` security pinning. - Documented base-image CVE remediation. ## Concerns - Sync the `dev` tree to `main` after merge. - Dispatch `release-cut.yml` for `v1.6.0-rc.13`. - Confirm the expected GA date remains approximately August 16. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Wholesale-tree sync ahead of the v1.6.0-rc.13 cut (same pattern as #667). The single commit carries the exact tree of `dev/v1.6` at b98808e onto `main` β after merge, `git diff --quiet origin/main origin/dev/v1.6` holds. Content on dev since rc.12: - #669/#670 β release-cut digest re-anchoring - #672 β self-hosted Star History chart - #673 β NAS acceptance follow-ups - #681 β v1.7 dependency ordering (forward-ported) - #682 β CVE base-image bumps + digest-pinned Node base guard test - #683 β icon-bundle alias resolution (fixes blank Audit/registry icons shipped in rc.12) - #684 β rc.13 identity roll-forward (17 files, CHANGELOG, README) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - β¨ Added repository-aware Docker digest selection and multi-anchor comparison. - β¨ Added self-hosted, theme-aware Star History SVG API with pagination, caching, deadlines, and fallback rendering. - β¨ Added icon alias resolution and bundle coverage tests. - β¨ Added required icon bundle entries and updated icon mappings. - π§ Updated Node and Trivy image digests. - π Pinned `nanoid` to `3.3.18` across workspaces. - π Added a digest-pinned Node 24 Alpine base-image guard test. - π§ Updated `js-yaml` override to `3.15.1`. - π§ Updated release documentation, examples, mocks, badges, and tests to `1.6.0-rc.13`. - π§ Removed the external Star History CSP allowlist and embed. ## Concerns - Verify the Star History route stays within GitHub API rate limits under concurrent requests. - Verify cache headers do not serve incomplete or repository-specific fallback responses incorrectly. - Verify Docker digest re-anchoring preserves legacy behavior for stored containers without `repoDigests`. - Verify icon aliases with rotation or flipping have acceptable fallback behavior. - Run the Docker, Star History, icon-bundle, release-identity, and workspace dependency tests. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
) (#686) Forward-ports #683 to dev/v1.7. #680 fixed the symptom here (direct icon-name renames) but not the root cause: `ui/scripts/extract-icons.mjs` still dropped icons that iconify collections demote to aliases (`collection.aliases[name].parent`), so any future collection bump could silently ship broken icons again β that's exactly how rc.12 shipped a blank Audit icon. What's in the port: - `extract-icons.mjs`: `resolveIcon()` follows alias parent chains (depth-capped), merges alias overrides, refuses transform-requiring aliases with a warning. - `ui/tests/boot/icon-bundle.spec.ts`: guard test β every `prefix:name` ref in `icons.ts` must exist in the bundle with a body. - `iconoir:stack` β `multiple-pages` (#680 had picked `cube`; `multiple-pages` matches v1.6 and verified valid against locked iconoir 1.2.11). - `@iconify-json/fa6-brands` 1.2.4 β 1.2.6 exact-pinned (devDependencies). - Bundle regenerated: 576/576 refs, zero warnings, 229.8 KB; `npm run build` leaves the tree clean. 4508 UI tests, 100% coverage, full pre-push gate green. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - β¨ Added recursive Iconify alias resolution with parent-chain traversal, override merging, depth limits, and transform warnings. - β¨ Added a guard test for missing or empty icon bundle entries. - π§ Replaced `iconoir:cube` with `iconoir:multiple-pages` for the `stack` icon. - π§ Pinned `@iconify-json/fa6-brands` to `1.2.6`. - π Fixed extraction of indirect icon aliases. ## Concerns - Verify aliases with rotation or flipping produce actionable warnings and do not enter the body-only bundle. - Keep the guard test aligned with all supported `icons.ts` reference formats. - Confirm the regenerated bundle contains all 576 references with nonempty bodies. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
What
The icon bundle is regenerated from the locked
@iconify-jsonpackages during every Docker image build (npm run buildβnpm run icons), butextract-icons.mjsonly looked up plain icon entries β never aliases. lucide 1.2.121 demotedhistoryto an alias ofrotate-ccw-clock, so every image built since that pin ships withoutlucide:history, and the Audit nav icon renders blank in the Lucide icon theme (the offline iconify API module means there's no network fallback). The committed bundle still had the icon only because it was generated from stale node_modules (lucide 1.2.107).Regenerating with the lockfile-correct packages also exposed references that have never resolved β broken in production all along:
iconoir:history,iconoir:gitlab,iconoir:stackdon't exist in the locked iconoir 1.2.11fa6-brands:github/gitlab/google/microsoft(registry icons in the Font Awesome theme) β the@iconify-json/fa6-brandspackage was never a dependencyFix
extract-icons.mjsresolves alias chains (parent-following, depth-capped); aliases carrying rotate/flip transforms are refused with a warning since the body-only bundle can't represent themiconoir:historyβiconoir:clock-rotate-right,iconoir:gitlabβiconoir:gitlab-full,iconoir:stackβiconoir:multiple-pages(group-view toggle in the containers list)@iconify-json/fa6-brandsadded (exact-pinned, build-time only)icons.tsreference exists in the committed bundle, so a collection rename fails CI instead of shipping a blank glyphWants to land before v1.6.0-rc.13 so the fix rides the release.
Changelog
@iconify-json/fa6-brands@1.2.6todevDependencies.extract-icons.mjsto resolve chained aliases.Concerns