FN-6781: keep Command Center inline in the header

Keep Command Center anchored as an inline header destination while preserving changed-test coverage selection.

- Render Command Center immediately after Agents on tablet and desktop instead of moving it into the More views overflow.
- Update header and tablet tests plus docs to lock the stable inline navigation contract.
- Treat the quarantine data file as test-irrelevant so edits do not force gate mode and drop affected-package tests.

Files changed:
 .changeset/fix-quarantine-json-gate-mode.md        |  5 ++
 .changeset/fn-6781-command-center-header.md        |  5 ++
 CONCEPTS.md                                        |  3 +
 docs/dashboard-guide.md                            |  4 +-
 ...data-file-forces-gate-mode-dropping-coverage.md | 74 ++++++++++++++++++++++
 .../app/__tests__/tablet-header-controls.test.tsx  |  7 +-
 packages/dashboard/app/components/Header.tsx       | 51 +++++----------
 .../app/components/__tests__/Header.test.tsx       |  8 ++-
 scripts/__tests__/test-changed.test.mjs            | 20 ++++++
 scripts/test-changed.mjs                           |  8 +++
 10 files changed, 142 insertions(+), 43 deletions(-)

Fusion-Task-Id: FN-6781

Fusion-Task-Lineage: d328501d-7ec4-40ac-a140-6a491ea560e2
This commit is contained in:
gsxdsm
2026-06-19 19:28:42 -07:00
parent 60557cfea6
commit 0c0fda1d7d
5 changed files with 32 additions and 43 deletions

View File

@@ -0,0 +1,5 @@
---
"@runfusion/fusion": patch
---
Keep Command Center inline next to Agents across desktop and tablet header widths instead of moving it into the More views overflow menu.

View File

@@ -658,8 +658,8 @@ Features:
Command Center is the combined analytics and live-operations surface for a project: it pairs historical usage, cost, throughput analytics, live system telemetry, and a live Mission Control panel.
Navigation:
- Desktop: **Header → More views → Command Center**
- Mobile: **More** sheet → **Command Center**
- Desktop/tablet: primary header view toggle, immediately after **Agents**
- Mobile: bottom nav tab, immediately after **Mailbox**
- Deep link: `?view=command-center`
Features:

View File

@@ -113,14 +113,15 @@ describe("tablet header controls", () => {
expect(screen.queryByTestId("view-overflow-command-center")).toBeNull();
});
it("keeps desktop Documents inline and Command Center in overflow", () => {
it("keeps desktop Documents and Command Center inline without Command Center overflow", () => {
renderDesktopHeader({ onChangeView: noop, showAgentsTab: true });
expect(screen.getByTitle("Documents view")).toBeDefined();
expect(screen.queryByTestId("view-toggle-command-center")).toBeNull();
expect(screen.getByTestId("view-toggle-command-center")).toBeDefined();
expect(screen.getByTestId("view-toggle-command-center").previousElementSibling).toBe(screen.getByTitle("Agents view"));
fireEvent.click(screen.getByTestId("view-toggle-overflow-trigger"));
expect(screen.getByTestId("view-overflow-command-center")).toBeDefined();
expect(screen.queryByTestId("view-overflow-command-center")).toBeNull();
expect(screen.queryByTestId("view-overflow-documents")).toBeNull();
});

View File

@@ -1019,26 +1019,21 @@ export function Header({
<Bot size={16} />
</button>
)}
{isTablet && (
/*
FNXC:Navigation 2026-06-19-12:00:
Tablet navigation promotes Command Center immediately after Agents while desktop keeps Command Center in the More-views overflow.
Documents moves to the tablet More-views overflow below to conserve horizontal space without changing desktop ordering.
FNXC:Navigation 2026-06-19-08:24:
FN-6725 re-verified this tablet contract after a suspected revert: Command Center remains a single inline tablet destination after Agents, Documents remains overflow-only on tablet, and desktop ordering stays unchanged.
*/
<button
className={`view-toggle-btn${view === "command-center" ? " active" : ""}`}
onClick={() => onChangeView("command-center")}
title={t("header.commandCenterView", "Command Center")}
aria-label={t("header.commandCenterView", "Command Center")}
aria-pressed={view === "command-center"}
data-testid="view-toggle-command-center"
>
<Gauge size={16} />
</button>
)}
{/*
FNXC:Navigation 2026-06-19-12:00:
FN-6781 supersedes the prior tablet-only inline / desktop-overflow split: Command Center must remain a stable inline destination immediately after Agents on tablet and desktop so the affordance does not relocate while resizing.
Documents still moves to the tablet More-views overflow to conserve horizontal space without changing desktop ordering.
*/}
<button
className={`view-toggle-btn${view === "command-center" ? " active" : ""}`}
onClick={() => onChangeView("command-center")}
title={t("header.commandCenterView", "Command Center")}
aria-label={t("header.commandCenterView", "Command Center")}
aria-pressed={view === "command-center"}
data-testid="view-toggle-command-center"
>
<Gauge size={16} />
</button>
<button
className={`view-toggle-btn${view === "missions" ? " active" : ""}`}
onClick={() => onChangeView("missions")}
@@ -1113,7 +1108,7 @@ export function Header({
<>
<button
ref={viewOverflowTriggerRef}
className={`view-toggle-btn${["research", "skills", "insights", "memory", "secrets", "dev-server", "devserver", "graph", "stash-recovery"].includes(view) || (!isTablet && view === "command-center") || (isTablet && view === "documents") || (experimentalFeatures?.evalsView && view === "evals") || (experimentalFeatures?.goalsView && view === "goalsView") || (todosEnabled && todosOpen) || isPluginViewId(view) ? " active" : ""}`}
className={`view-toggle-btn${["research", "skills", "insights", "memory", "secrets", "dev-server", "devserver", "graph", "stash-recovery"].includes(view) || (isTablet && view === "documents") || (experimentalFeatures?.evalsView && view === "evals") || (experimentalFeatures?.goalsView && view === "goalsView") || (todosEnabled && todosOpen) || isPluginViewId(view) ? " active" : ""}`}
onClick={() => setIsViewOverflowOpen((prev) => !prev)}
title={t("header.moreViews", "More views")}
aria-label={t("header.moreViews", "More views")}
@@ -1255,20 +1250,6 @@ export function Header({
<span>{t("header.documentsView", "Documents view")}</span>
</button>
)}
{!isTablet && (
<button
className={`view-toggle-overflow-item${view === "command-center" ? " active" : ""}`}
onClick={() => {
onChangeView("command-center");
setIsViewOverflowOpen(false);
}}
role="menuitem"
data-testid="view-overflow-command-center"
>
<Gauge size={14} />
<span>{t("header.commandCenterView", "Command Center")}</span>
</button>
)}
{experimentalFeatures?.devServerView && (
<button
className={`view-toggle-overflow-item${view === "dev-server" || view === "devserver" ? " active" : ""}`}

View File

@@ -299,14 +299,16 @@ describe("Header", () => {
expect(screen.getByTestId("view-toggle-overflow-trigger")).toBeDefined();
});
it("keeps desktop Documents inline and Command Center only in overflow", () => {
it("keeps desktop Documents and Command Center inline without Command Center overflow", () => {
renderHeader({ onChangeView: noop, showAgentsTab: true }, "desktop");
expect(screen.getByTitle("Documents view")).toBeInTheDocument();
expect(screen.queryByTestId("view-toggle-command-center")).toBeNull();
const agentsButton = screen.getByTitle("Agents view");
const commandCenterButton = screen.getByTestId("view-toggle-command-center");
expect(commandCenterButton.previousElementSibling).toBe(agentsButton);
fireEvent.click(screen.getByTestId("view-toggle-overflow-trigger"));
expect(screen.getByTestId("view-overflow-command-center")).toBeInTheDocument();
expect(screen.queryByTestId("view-overflow-command-center")).toBeNull();
expect(screen.queryByTestId("view-overflow-documents")).toBeNull();
});