From 581f85013ab23f96e426beb2c9d8556ca940e341 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Sun, 28 Jun 2026 12:10:10 -0700 Subject: [PATCH] FN-7198: pin Compound Engineering sidebar icon Keep Compound Engineering navigation surfaces on the Boxes glyph even when stale plugin metadata is served. - Route desktop and mobile plugin nav entries through a dashboard-view icon resolver. - Pin Compound Engineering plugin nav icons to Boxes by plugin id while preserving normal icon fallback behavior for other plugins. - Align manifest/header icon invariants and add regression coverage for stale Sparkles/Grid3X3 metadata. - Add a patch changeset for the published Fusion package. Files changed: .changeset/FN-7198-compound-engineering-icon-match.md | 7 +++++++ packages/dashboard/app/components/LeftSidebarNav.tsx | 4 ++-- packages/dashboard/app/components/MobileNavBar.tsx | 6 +++--- .../app/components/__tests__/LeftSidebarNav.test.tsx | 6 +++++- .../app/components/__tests__/MobileNavBar.test.tsx | 10 +++++++--- .../app/components/__tests__/pluginNavIcon.test.ts | 10 +++++++++- packages/dashboard/app/components/pluginNavIcon.tsx | 12 ++++++++++++ .../src/__tests__/manifest.test.ts | 14 ++++++++++++++ .../src/dashboard/CompoundEngineeringView.tsx | 3 ++- 9 files changed, 61 insertions(+), 11 deletions(-) Fusion-Task-Id: FN-7198 Fusion-Task-Lineage: e910bb82-55a7-4c81-a4fe-947a07b3e308 Co-authored-by: Fusion (runfusion.ai) --- .../FN-7198-compound-engineering-icon-match.md | 7 +++++++ .../dashboard/app/components/LeftSidebarNav.tsx | 4 ++-- packages/dashboard/app/components/MobileNavBar.tsx | 6 +++--- .../components/__tests__/LeftSidebarNav.test.tsx | 6 +++++- .../app/components/__tests__/MobileNavBar.test.tsx | 10 +++++++--- .../app/components/__tests__/pluginNavIcon.test.ts | 10 +++++++++- .../dashboard/app/components/pluginNavIcon.tsx | 12 ++++++++++++ .../src/__tests__/manifest.test.ts | 14 ++++++++++++++ .../src/dashboard/CompoundEngineeringView.tsx | 3 ++- 9 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 .changeset/FN-7198-compound-engineering-icon-match.md diff --git a/.changeset/FN-7198-compound-engineering-icon-match.md b/.changeset/FN-7198-compound-engineering-icon-match.md new file mode 100644 index 0000000000..3f1b692327 --- /dev/null +++ b/.changeset/FN-7198-compound-engineering-icon-match.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: Compound Engineering sidebar navigation now matches its Boxes header icon. +category: fix +dev: Pins Compound Engineering plugin nav entries to Boxes by plugin id so stale dashboard view metadata cannot render Sparkles/Grid3X3 in desktop or mobile navigation. diff --git a/packages/dashboard/app/components/LeftSidebarNav.tsx b/packages/dashboard/app/components/LeftSidebarNav.tsx index 38b8e34059..b3c726adc3 100644 --- a/packages/dashboard/app/components/LeftSidebarNav.tsx +++ b/packages/dashboard/app/components/LeftSidebarNav.tsx @@ -31,7 +31,7 @@ import { import type { ProjectInfo, PluginDashboardViewEntry } from "../api"; import type { TaskView } from "../hooks/useViewState"; import { buildPluginTaskViewId } from "../plugins/pluginViewRegistry"; -import { getPluginNavIcon } from "./pluginNavIcon"; +import { getPluginDashboardViewNavIcon } from "./pluginNavIcon"; import { GithubIcon } from "./GithubIcon"; export interface LeftSidebarExperimentalFeatures { @@ -241,7 +241,7 @@ export function LeftSidebarNav({ const mapPluginEntry = useCallback( (entry: PluginDashboardViewEntry): SidebarNavEntry => { - const PluginIcon = getPluginNavIcon(entry.view.icon); + const PluginIcon = getPluginDashboardViewNavIcon(entry); const targetView = getPluginEntryView(entry); return { id: `plugin-${entry.pluginId}-${entry.view.viewId}`, diff --git a/packages/dashboard/app/components/MobileNavBar.tsx b/packages/dashboard/app/components/MobileNavBar.tsx index 8959a4f412..9b8556a84d 100644 --- a/packages/dashboard/app/components/MobileNavBar.tsx +++ b/packages/dashboard/app/components/MobileNavBar.tsx @@ -36,7 +36,7 @@ import type { PluginDashboardViewEntry } from "../api"; import { useViewportMode } from "./Header"; import type { TaskView } from "../hooks/useViewState"; import { buildPluginTaskViewId, isPluginViewId } from "../plugins/pluginViewRegistry"; -import { getPluginNavIcon } from "./pluginNavIcon"; +import { getPluginDashboardViewNavIcon } from "./pluginNavIcon"; export interface PublishedMobileNavHeightInput { navOffsetHeight: number; @@ -440,7 +440,7 @@ export function MobileNavBar({ {topLevelPrimaryPluginViews.map((entry) => { const pluginTaskView = buildPluginTaskViewId(entry.pluginId, entry.view.viewId); - const PluginIcon = getPluginNavIcon(entry.view.icon); + const PluginIcon = getPluginDashboardViewNavIcon(entry); return (