Commit Graph

5243 Commits

Author SHA1 Message Date
gsxdsm
09acfbb707 FN-6875: allow manual unpause for assigned tasks
Allow users to recover paused agent-assigned tasks without switching to agent controls.

- Remove the API conflict that blocked manual pause and unpause on assigned tasks.
- Keep pause and unpause actions visible for assigned, paused, and agent-paused tasks in the detail menu.
- Cover assigned-task pause controls and route unpause behavior with regression tests.
- Document manual unpause support and add a patch changeset.

Files changed:
 .changeset/fn-6875-allow-unpause-assigned.md       |   5 +
 docs/agents.md                                     |   2 +-
 docs/dashboard-guide.md                            |   1 +
 .../dashboard/app/components/TaskDetailModal.tsx   |  17 +++-
 .../TaskDetailModal.definition-actions.test.tsx    |  97 +++++++++++++++++--
 .../register-task-workflow-routes.unpause.test.ts  | 103 ++++++++++++++-------
 .../src/routes/register-task-workflow-routes.ts    |  14 ++-
 7 files changed, 187 insertions(+), 52 deletions(-)

Fusion-Task-Id: FN-6875

Fusion-Task-Lineage: 9233822c-2013-475d-b17a-2212a38ab388
2026-06-21 16:34:41 -07:00
gsxdsm
55266b6e9e FN-6874: document Command Center pricing semantics
Document the Command Center pricing contract for maintainers and users.

- Explain that estimated token costs are derived at read time from the maintained pricing table and are not persisted billing truth.\n- Document pricingAsOf, stale low-confidence, unknown-model unavailable, and provider coverage maintenance expectations.\n- Add a documentation contract test to keep the dashboard and architecture guides aligned.

Files changed:\n docs/architecture.md                               |  2 ++\n docs/dashboard-guide.md                            |  3 +-\n .../__tests__/command-center-pricing-docs.test.ts  | 35 ++++++++++++++++++++++\n 3 files changed, 39 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6874

Fusion-Task-Lineage: 04606ae1-4870-479a-afb6-8a24675fe66b
2026-06-21 16:28:30 -07:00
gsxdsm
58f758842b FN-6816: add shadcn custom color picker
Add a Shadcn Custom theme flow for editing and applying sanitized dashboard color tokens.

- Add a lazy-loaded Shadcn color picker modal with token defaults, reset controls, and validation tests.
- Persist sanitized custom color overrides through settings, pre-hydration theme bootstrapping, and Command Center/theme dropdown surfaces.
- Register the Shadcn Custom theme option in core types, schema, docs, theme CSS, and release notes.

Files changed:
 .changeset/fn-6816-shadcn-custom-colors.md         |   5 +
 docs/dashboard-guide.md                            |   2 +-
 docs/settings-reference.md                         |   3 +-
 packages/core/src/settings-schema.ts               |   1 +
 packages/core/src/types.ts                         |   4 +
 packages/dashboard/app/App.tsx                     |   7 +-
 packages/dashboard/app/components/AppModals.tsx    |   6 +
 .../dashboard/app/components/SettingsModal.tsx     |  12 ++
 .../dashboard/app/components/ShadcnColorPicker.css | 101 ++++++++++++++
 .../dashboard/app/components/ShadcnColorPicker.tsx |  95 +++++++++++++
 .../dashboard/app/components/ThemeDropdown.tsx     |  23 +++-
 .../dashboard/app/components/ThemeSelector.css     |  14 ++
 .../dashboard/app/components/ThemeSelector.tsx     |  19 ++-
 .../__tests__/ShadcnColorPicker.test.tsx           |  50 +++++++
 .../components/__tests__/ThemeDropdown.test.tsx    |  19 +++
 .../components/__tests__/ThemeSelector.test.tsx    |  64 +++++++++
 .../__tests__/shadcnCustomColors.test.ts           |  52 ++++++++
 .../components/command-center/CommandCenter.tsx    |  15 +++
 .../command-center/CommandCenterControls.tsx       |   8 +-
 .../settings/sections/AppearanceSection.tsx        |   8 +-
 .../dashboard/app/components/shadcnCustomColors.ts |  80 +++++++++++
 packages/dashboard/app/components/themeOptions.ts  |   1 +
 .../dashboard/app/hooks/__tests__/useTheme.test.ts | 108 +++++++++++++++
 packages/dashboard/app/hooks/useTheme.ts           |  91 ++++++++++++-
 packages/dashboard/app/index.html                  |  19 ++-
 packages/dashboard/app/public/theme-data.css       | 148 ++++++++++++++++++++-
 26 files changed, 938 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-6816

Fusion-Task-Lineage: f16baaa9-16f5-4526-8159-9a1ceff4f807
2026-06-21 16:13:54 -07:00
gsxdsm
ef4889585f FN-6779: add artifacts gallery to Documents
Adds a Documents-view artifact gallery backed by dashboard artifact registry APIs.

- Add artifact listing and media-serving endpoints with project scoping, validation, and safe artifact path resolution.
- Add client artifact API helpers, SWR caching, and a useArtifacts hook for background-refresh gallery data.
- Extend Documents view with an Artifacts tab, media previews, localized labels, documentation, tests, and a published package changeset.

Files changed:
 .changeset/fn-6779-artifacts-gallery.md            |   5 +
 docs/dashboard-guide.md                            |   6 +-
 packages/dashboard/app/api/legacy.ts               |  34 ++++
 .../dashboard/app/components/DocumentsView.css     | 142 ++++++++++++++++
 .../dashboard/app/components/DocumentsView.tsx     | 178 ++++++++++++++++++--
 .../components/__tests__/DocumentsView.test.tsx    | 163 +++++++++++++++++-
 .../app/hooks/__tests__/useArtifacts.test.ts       | 136 +++++++++++++++
 packages/dashboard/app/hooks/useArtifacts.ts       | 145 ++++++++++++++++
 packages/dashboard/app/utils/swrCache.ts           |   1 +
 .../src/routes/__tests__/artifacts-routes.test.ts  | 182 +++++++++++++++++++++
 .../src/routes/register-task-workflow-routes.ts    | 125 ++++++++++++++
 packages/i18n/locales/en/app.json                  |  22 ++-
 packages/i18n/locales/es/app.json                  |  27 ++-
 packages/i18n/locales/fr/app.json                  |  27 ++-
 packages/i18n/locales/ko/app.json                  |  27 ++-
 packages/i18n/locales/zh-CN/app.json               |  27 ++-
 packages/i18n/locales/zh-TW/app.json               |  27 ++-
 scripts/line-count-baseline.json                   |  16 +-
 18 files changed, 1255 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-6779

Fusion-Task-Lineage: 1d71e4be-4bfc-4706-9cbf-7214f91a79d1
2026-06-21 16:01:07 -07:00
gsxdsm
32455363d0 FN-6845: add resizable right dock for More views
Add a tablet and desktop right dock for overflow dashboard views while preserving mobile navigation behavior.

- Route the non-mobile More views affordance into a resizable right dock with expand-to-modal support.
- Add an overflow view registry and controller to render auxiliary dashboard views in the dock.
- Make the right dock default-on in settings alongside the default left sidebar, with explicit opt-outs for legacy tests.
- Cover right dock behavior, navigation fallbacks, and overflow registry entries with focused tests and docs.

Files changed:
 docs/dashboard-guide.md                            |  10 +
 packages/dashboard/app/App.tsx                     |  15 +-
 .../mobile-feature-access-regression.test.tsx      |  78 +++++
 packages/dashboard/app/components/Header.tsx       |  66 ++++-
 packages/dashboard/app/components/RightDock.css    | 165 +++++++++++
 packages/dashboard/app/components/RightDock.tsx    | 234 +++++++++++++++
 .../app/components/RightDockExpandModal.tsx        |  70 +++++
 .../dashboard/app/components/SettingsModal.tsx     |  17 +-
 .../app/components/__tests__/Header.test.tsx       |  70 +++++
 .../app/components/__tests__/RightDock.test.tsx    | 202 +++++++++++++
 .../__tests__/navigation-history.test.tsx          |   2 +-
 .../__tests__/overflowViewRegistry.test.tsx        |  67 +++++
 .../app/components/overflowViewRegistry.tsx        | 314 +++++++++++++++++++++
 .../app/components/useRightDockController.tsx      | 126 +++++++++
 14 files changed, 1408 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-6845

Fusion-Task-Lineage: 3cb04264-cf7a-43e1-b774-678ff3cb325b
2026-06-21 13:52:12 -07:00
gsxdsm
d99246cb74 FN-6834: use OS-available memory for system metrics
Use shared OS-available memory readings so macOS cache/inactive pages are not counted as used.

- Add a core available-memory helper that prefers `process.availableMemory()` and flags `freemem` fallback reliability.
- Route core metrics, dashboard system stats, and the dashboard TUI through the shared helper.
- Move and expand memory tests across core, dashboard routes, and verification coverage while documenting the telemetry behavior.
- Add a patch changeset for the published CLI package.

Files changed:
 .changeset/fix-macos-memory-used.md                |  5 ++
 docs/architecture.md                               |  2 +-
 docs/dashboard-guide.md                            |  2 +-
 .../__tests__/available-memory.test.ts             | 54 --------------
 .../cli/src/commands/dashboard-tui/controller.ts   | 37 +---------
 .../core/src/__tests__/available-memory.test.ts    | 83 ++++++++++++++++++++++
 packages/core/src/__tests__/system-metrics.test.ts | 36 +++++++++-
 packages/core/src/available-memory.ts              | 32 +++++++++
 packages/core/src/index.ts                         |  1 +
 packages/core/src/system-metrics.ts                |  9 ++-
 .../dashboard/src/__tests__/routes-system.test.ts  | 27 +++++++
 packages/dashboard/src/routes.ts                   |  7 +-
 .../src/__tests__/run-verification-command.test.ts | 18 +++++
 13 files changed, 218 insertions(+), 95 deletions(-)

Fusion-Task-Id: FN-6834

Fusion-Task-Lineage: 2e651551-6c35-46d1-b517-535758c7ace2
2026-06-21 13:32:19 -07:00
gsxdsm
217fd74f56 FN-6866: fix active planning chat guidance
Prevent task chat from showing idle guidance while planner sessions are actively working.

- Treat triage/planning task states as active steering sessions when they are not queued, paused, or blocked.\n- Keep queued, awaiting, failed, and paused states on idle guidance even in active columns.\n- Cover inline and expanded planning chat surfaces across empty, populated, and loading transcripts.\n- Update the dashboard guide to document planning and live session bridge steering behavior.\n\nFiles changed:\n docs/dashboard-guide.md                            |  2 +-\n packages/dashboard/app/components/TaskChatTab.tsx  | 24 +++++++---\n .../app/components/__tests__/TaskChatTab.test.tsx  | 51 +++++++++++++++++++---\n 3 files changed, 66 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-6866

Fusion-Task-Lineage: 48c57515-40fa-40c1-ae3b-fec0690bba75
2026-06-21 13:25:41 -07:00
gsxdsm
2ecf78af28 FN-6860: rescue dashboard quarantine coverage
Rescue dashboard process lifecycle coverage and clear stale quarantine state.

- Track dev server lifecycle work so stale probes and output parsing cannot race cleanup.
- Assert duplicate URL detection suppression and fallback probe cleanup across failure, restart, stop, and cleanup paths.
- Remove rescued dashboard tests from quarantine config and ledger, and document the loaded-shard proof.

Files changed:
 docs/testing.md                                    |  4 ++
 .../src/__tests__/dev-server-process.test.ts       | 28 +++++++-
 packages/dashboard/src/dev-server-process.ts       | 74 +++++++++++++++++-----
 packages/dashboard/vitest.config.ts                |  5 +-
 scripts/lib/test-quarantine.json                   | 13 +---
 5 files changed, 95 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-6860

Fusion-Task-Lineage: abd22a00-e08e-4f65-bebc-c663c715b40e
2026-06-21 13:25:41 -07:00
gsxdsm
eb3477aba4 FN-6835: add system stats node selection
Add Command Center controls for inspecting local or remote node system telemetry.

- add a System area node selector with local defaults, remote stats loading, and per-node sample resets
- expose proxied node system-stats fetching and route local node requests through the shared stats builder
- route Vitest kill requests through node-aware proxy plumbing and cover node stats behavior with tests
- add localized node selector copy, docs, and a published package changeset

Files changed:
 .changeset/fuzzy-nodes-watch.md                    |   5 +
 docs/dashboard-guide.md                            |   4 +-
 packages/dashboard/app/api/legacy.ts               |  14 +-
 .../__tests__/CommandCenter.mobile-scroll.test.tsx |   2 +
 .../__tests__/CommandCenter.tablet-layout.test.tsx |   2 +
 .../__tests__/CommandCenter.test.tsx               |   1 +
 .../__tests__/SystemStatsArea.test.tsx             | 160 +++++++++++++++++
 .../command-center/areas/SystemStatsArea.css       |  13 ++
 .../command-center/areas/SystemStatsArea.tsx       |  72 +++++++-
 .../dashboard/src/__tests__/routes-system.test.ts  | 122 +++++++++++++
 packages/dashboard/src/routes.ts                   | 190 +++++++++++++--------
 packages/i18n/locales/en/app.json                  |  10 ++
 packages/i18n/locales/es/app.json                  |  10 ++
 packages/i18n/locales/fr/app.json                  |  10 ++
 packages/i18n/locales/ko/app.json                  |  10 ++
 packages/i18n/locales/zh-CN/app.json               |  10 ++
 packages/i18n/locales/zh-TW/app.json               |  10 ++
 17 files changed, 562 insertions(+), 83 deletions(-)

Fusion-Task-Id: FN-6835

Fusion-Task-Lineage: 8f9a047b-78d0-477e-824e-f7592966cdc0
2026-06-21 13:25:41 -07:00
gsxdsm
32fad6dfba FN-6863: raise footer concurrency slider limits
Raise the footer engine control sliders to support higher concurrency without hiding persisted values.

- Increase max tasks, max triage, and max worktree slider baselines to 50.
- Preserve value-aware slider maxima for persisted settings above the new baseline.
- Add coverage for in-range 50 limits, above-range persisted values, and saving a value of 50.

Files changed:
 .../dashboard/app/components/EngineControlMenu.tsx |  9 ++--
 .../__tests__/EngineControlMenu.test.tsx           | 50 +++++++++++++++++++---
 2 files changed, 49 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-6863

Fusion-Task-Lineage: f42373fc-322b-4d20-9b8b-2d0c63254e79
2026-06-21 13:25:41 -07:00
gsxdsm
24c1c023a8 FN-6858: fix toast contrast across Shadcn themes
Make dashboard toast status text readable across themed dark and light modes.

- Add toast text tokens and Shadcn-specific success/info color overrides that preserve contrast.
- Cover success, error, and info toast contrast across all Shadcn variants and mobile toast styling.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6858-toast-contrast.md               |   5 +
 .../app/__tests__/toast-theme-contrast.test.ts     | 320 +++++++++++++++++++++
 packages/dashboard/app/styles.css                  |  44 ++-
 3 files changed, 368 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6858
Fusion-Task-Lineage: 1c06e346-9269-4965-a3ae-4ac02b43188e
2026-06-21 13:25:41 -07:00
gsxdsm
21a7416614 FN-6857: restore mobile Git toolbar horizontal scrolling
Restores touch-friendly horizontal scrolling for the Git Manager mobile section toolbar.

- Opt the Git Manager mobile sidebar back into horizontal touch panning and momentum scrolling.
- Prevent Git Manager mobile nav items from shrinking so every section remains reachable.
- Add mobile CSS coverage for the Git Manager toolbar scroll contract.

Files changed:
 packages/dashboard/app/components/ScriptsModal.css    | 12 ++++++++++++
 .../components/__tests__/core-modals-mobile.test.tsx  | 19 +++++++++++++++++++
 2 files changed, 31 insertions(+)

Fusion-Task-Id: FN-6857

Fusion-Task-Lineage: 8967bdd2-e830-4f2d-8cde-c96ccc80d67a
2026-06-21 13:25:41 -07:00
gsxdsm
ca08828813 FN-6855: raise Command Center concurrency sliders to 50
Command Center scheduler controls now expose a default slider ceiling of 50 without hiding higher persisted values.

- Set max concurrent tasks, max triage concurrency, and max worktrees sliders to default to a maximum of 50.
- Preserve dynamic slider maxima for persisted settings above 50 so existing out-of-range values remain visible.
- Add regression coverage for persisting 50, in-range slider maxima, and above-range readouts.

Files changed:
 .../command-center/CommandCenterControls.tsx       |  9 ++-
 .../__tests__/CommandCenterControls.test.tsx       | 71 +++++++++++++++++++---
 2 files changed, 67 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6855

Fusion-Task-Lineage: 780d5322-5f3c-4503-9ec7-17716e966961
2026-06-21 13:25:41 -07:00
gsxdsm
47ba99a25e FN-6853: bump pi SDK packages
Update the pi SDK dependency family across Fusion packages and record a patch changeset.

- Bump @earendil-works/pi-ai and @earendil-works/pi-coding-agent to ^0.79.9 where used by CLI, dashboard, and engine packages.
- Refresh pnpm-lock.yaml to resolve the updated pi SDK dependency graph.
- Add a patch changeset for the published @runfusion/fusion package.

Files changed:
 .changeset/fn-6853-pi-sdk-bump.md |   5 +
 packages/cli/package.json         |   4 +-
 packages/dashboard/package.json   |   2 +-
 packages/engine/package.json      |   4 +-
 pnpm-lock.yaml                    | 285 +++++++++++++++++++++++++++-----------
 5 files changed, 214 insertions(+), 86 deletions(-)

Fusion-Task-Id: FN-6853
Fusion-Task-Lineage: bc2dba95-b8c2-48d1-855d-847e6eec9606
2026-06-21 13:25:41 -07:00
gsxdsm
eb9635a406 FN-6843: enable left sidebar navigation by default
Left sidebar navigation now defaults on for non-mobile project screens while preserving an explicit opt-out.

- Treat an unset leftSidebarNav flag as enabled in the App desktop/tablet gate.
- Show the Settings experimental toggle checked by default and save false when users opt out.
- Extend regression coverage across unset/true/false flag states, desktop/tablet/mobile surfaces, and header suppression.
- Update dashboard guide documentation for the default-on behavior and opt-out flag.

Files changed:
 docs/dashboard-guide.md                            |  4 +-
 packages/dashboard/app/App.tsx                     |  5 +-
 .../mobile-feature-access-regression.test.tsx      | 69 ++++++++++++++++++----
 .../dashboard/app/components/SettingsModal.tsx     | 16 ++++-
 .../components/__tests__/SettingsModal.test.tsx    | 39 ++++++++++++
 5 files changed, 119 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-6843

Fusion-Task-Lineage: 44d73b9e-92aa-4381-883b-c42714bd7f99
2026-06-21 13:25:41 -07:00
gsxdsm
dcf1ab1164 FN-6870: render wide team org charts horizontally
Render the Command Center Team org chart horizontally when its container has room.

- Measure the Team org-chart viewport and reuse the shared Agents org-chart layout resolver.
- Add horizontal and vertical data-layout styling for Team org-chart roots and children.
- Cover wide, narrow, unmeasured, loading, error, empty, and single-root Team org-chart states.
- Document the Team org-chart horizontal layout behavior.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 .../components/command-center/areas/TeamArea.tsx   | 38 ++++++++++-
 .../command-center/areas/__tests__/areas.test.tsx  | 77 ++++++++++++++++++++++
 .../app/components/command-center/areas/areas.css  | 36 +++++++++-
 4 files changed, 149 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6870

Fusion-Task-Lineage: b023788a-a353-4b10-ad68-a661e72e5be6
2026-06-21 13:25:41 -07:00
gsxdsm
2f7905386f FN-6848: refresh workflow dropdown counts on open
Refresh workflow dropdown counts from the latest board-workflows data whenever users open the selector.

- Refactor Board and ListView workflow payload fetching into reusable refresh callbacks shared by mount, visibility, focus, SSE, and dropdown-open events.
- Add a WorkflowSwitcher onOpen hook that fires only on closed-to-open click or keyboard transitions.
- Cover Board, ListView, and WorkflowSwitcher refresh behavior with regression tests and document the refreshed dropdown counts.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/Board.tsx        | 49 +++++++++++---------
 packages/dashboard/app/components/ListView.tsx     | 49 +++++++++++---------
 .../dashboard/app/components/WorkflowSwitcher.tsx  | 38 +++++++++++++---
 .../app/components/__tests__/Board.test.tsx        | 14 ++++++
 .../app/components/__tests__/ListView.test.tsx     | 39 ++++++++++++++++
 .../components/__tests__/WorkflowSwitcher.test.tsx | 53 ++++++++++++++++++++++
 7 files changed, 195 insertions(+), 49 deletions(-)

Fusion-Task-Id: FN-6848

Fusion-Task-Lineage: bb83cee9-4184-4094-89d6-f2cf2a4fbd46
2026-06-21 13:25:41 -07:00
gsxdsm
1c6fe544e2 FN-6846: move header search after workflow slot
Move the desktop and tablet search toggle to follow the workflow portal slot.\n\n- Reorder the non-mobile header search button after the workflow portal mount point.\n- Preserve the mobile search trigger position and behavior.\n- Add header tests covering empty, populated, tablet, and mobile slot behavior.\n\nFiles changed:\n packages/dashboard/app/components/Header.tsx       | 29 ++++++++-------\n .../app/components/__tests__/Header.test.tsx       | 42 ++++++++++++++++++++--\n 2 files changed, 56 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-6846

Fusion-Task-Lineage: 294100b1-76ae-4c46-b4b3-e4c83e4a55f8
2026-06-21 13:25:41 -07:00
gsxdsm
c9146e15b2 FN-6830: use theme accent for sidebar active states
Align the left sidebar selected and resize states with each active dashboard theme.

- Switch active left-sidebar item color and background to the shared --accent token.
- Update the resize-handle focus and hover accent to follow theme accent colors.
- Add a CSS regression test and documentation for the theme-accent invariant.
- Define shared typography tokens and replace an optional-step danger fallback with an existing error token.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 .../left-sidebar-active-accent.css.test.ts         | 38 ++++++++++++++++++++++
 .../dashboard/app/components/LeftSidebarNav.css    | 10 +++---
 .../app/components/WorkflowOptionalStepsPanel.css  |  2 +-
 packages/dashboard/app/styles.css                  |  3 ++
 5 files changed, 48 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6830

Fusion-Task-Lineage: add8e9cd-4b91-45a1-a848-a54dd1083723
2026-06-21 13:25:41 -07:00
gsxdsm
e412a1c1c6 FN-6833: keep usage popover near board top
Keep the desktop usage popover pinned near the board header regardless of viewport height or anchor position.

- Replace the viewport-ratio top cap with a small fixed near-top limit derived from the header inset.
- Update desktop popover positioning expectations for anchored, tall-viewport, and modal fallback cases.
- Cover low-anchor tall viewport behavior so the popover stays near the top of the board.

Files changed:
 .../dashboard/app/components/UsageIndicator.tsx    | 15 ++++-----
 .../components/__tests__/UsageIndicator.test.tsx   | 38 +++++++++++++++++++---
 2 files changed, 40 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6833

Fusion-Task-Lineage: 907c08fc-4da9-4b15-80aa-6c638900df15
2026-06-21 13:25:41 -07:00
gsxdsm
c1b7ced9ef FN-6865: fix mobile agent tab overflow
Ensure the Agent Detail tab strip keeps scrollable tab widths on narrow mobile screens.

- Prevent agent detail tabs from shrinking inside the horizontal overflow strip.
- Extend mobile and tablet scroll regression coverage to assert non-shrinking tabs.

Files changed:
 packages/dashboard/app/components/AgentDetailView.css               | 4 ++++
 .../app/components/__tests__/AgentDetailView.mobile-scroll.test.tsx | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6865

Fusion-Task-Lineage: 6a105b60-3a89-4023-b1cb-cc1a46c9f2f4
2026-06-21 13:25:41 -07:00
gsxdsm
300c31e335 FN-6864: enable touch panning for task detail tabs
Restores horizontal swiping for overflowing task detail tabs on touch viewports.

- Allow the detail tab strip to opt into horizontal touch panning despite the mobile pan-y default.
- Extend the CSS contract test to require the task detail tabs to remain touch-pannable.

Files changed:
 packages/dashboard/app/components/TaskDetailModal.css               | 6 ++++++
 .../dashboard/app/components/__tests__/TaskDetailModal.css.test.ts  | 3 ++-
 2 files changed, 8 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6864

Fusion-Task-Lineage: 0863d551-8088-4c8d-b583-1212b199ed69
2026-06-21 13:25:41 -07:00
gsxdsm
47be640bfb FN-6836: allow narrower left sidebar resizing
Allow the dashboard left sidebar to resize down to a compact but still labeled width.

- Lower the resizable left sidebar minimum width from 192px to 160px.
- Keep narrow sidebar labels truncated so badges and toggles stay aligned.
- Cover drag, keyboard, and persisted-width clamping at the new minimum.

Files changed:
 .../dashboard/app/components/LeftSidebarNav.css    |  4 +++
 .../dashboard/app/components/LeftSidebarNav.tsx    |  5 ++-
 .../components/__tests__/LeftSidebarNav.test.tsx   | 37 ++++++++++++++++++++++
 3 files changed, 45 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6836

Fusion-Task-Lineage: e136647f-3cd8-4b82-8186-b69d630946fc
2026-06-21 13:25:41 -07:00
gsxdsm
b20a25c526 FN-6815: add Shadcn Gray Blue theme
Add a slate-neutral Shadcn Gray Blue dashboard theme variant.\n\n- Register shadcn-gray-blue across core theme validation, startup bootstrap, and selector options.\n- Add dark and light slate blue-gray design tokens, swatches, and shared shadcn styling coverage.\n- Extend theme tests, dashboard docs, and the published package changeset for the new variant.\n\nFiles changed:\n .changeset/shadcn-gray-blue-theme.md               |   5 +\n docs/dashboard-guide.md                            |   2 +-\n packages/core/src/types.ts                         |   2 +\n .../dashboard/app/components/ThemeSelector.css     |  15 +++\n .../components/WorkflowOptionalStepsDropdown.css   |   3 +-\n packages/dashboard/app/components/themeOptions.ts  |   2 +\n .../dashboard/app/hooks/__tests__/useTheme.test.ts |  12 ++\n packages/dashboard/app/index.html                  |   2 +-\n packages/dashboard/app/public/theme-data.css       | 143 ++++++++++++++++++++-\n 9 files changed, 177 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6815

Fusion-Task-Lineage: 71cca9b3-12ab-4b91-93c5-e3d2498501ce
2026-06-21 13:25:41 -07:00
gsxdsm
465b7b6263 FN-6842: fix trait-less workflow status counts
Restore workflow switcher counts for built-in linear workflows with empty column traits.

- Add canonical lifecycle id fallback after flag-based status classification.
- Cover trait-less built-in workflows and flag-authority edge cases in status-count tests.
- Document the built-in fallback behavior for Board and List workflow switchers.

Files changed:
 docs/dashboard-guide.md                            |   2 +-
 .../__tests__/workflowStatusCounts.test.ts         | 207 +++++++++++++++++++--
 .../app/components/workflowStatusCounts.ts         |  64 +++++--
 3 files changed, 246 insertions(+), 27 deletions(-)

Fusion-Task-Id: FN-6842

Fusion-Task-Lineage: f51eb675-74e7-440f-970f-3eb29de0b3ea
2026-06-21 13:25:40 -07:00
gsxdsm
5e1422edc3 FN-6838: fix dashboard footer CSS token scoping
Keep the dashboard project footer height token scoped with the footer-safe padding contract.

- Preserve the project shell footer-height token for sibling layout consumers.
- Co-locate the desktop footer-height token with the project content padding consumer.
- Repeat the mobile footer-height override where concatenated CSS order can otherwise restore the desktop value.

Files changed:
 .../dashboard/app/components/ProjectSelector.css   | 43 +++++++++++++++-------
 1 file changed, 30 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6838

Fusion-Task-Lineage: 0c20437f-7c58-478c-a721-ba963343c995
2026-06-21 13:25:40 -07:00
gsxdsm
e67dd11b50 FN-6829: dock todos as a project view
Convert Todos into the standard project right-content navigation surface.

- Route Todos through taskView state instead of modal manager state.
- Remove TodoModal wiring, styles, and tests while updating header, sidebar, mobile nav, and history coverage.
- Polish TodoView as a standalone content page with refreshed header and layout styling.
- Update dashboard and todo documentation for the full-view behavior.

Files changed:
 docs/dashboard-guide.md                            |   5 +-
 docs/todo-view.md                                  |   5 +-
 packages/dashboard/app/App.tsx                     |  30 ++---
 .../app/__tests__/lazy-loaded-views-docs.test.ts   |  10 +-
 packages/dashboard/app/components/AppModals.tsx    |  16 ---
 packages/dashboard/app/components/Header.tsx       |  12 +-
 .../dashboard/app/components/LeftSidebarNav.tsx    |   8 +-
 packages/dashboard/app/components/MobileNavBar.tsx |   8 +-
 packages/dashboard/app/components/TodoModal.css    |  76 ------------
 packages/dashboard/app/components/TodoModal.tsx    |  79 ------------
 packages/dashboard/app/components/TodoView.css     |  55 ++++++---
 packages/dashboard/app/components/TodoView.tsx     |  24 ++--
 .../app/components/__tests__/AppModals.test.tsx    |  56 ---------
 .../app/components/__tests__/Header.test.tsx       |  26 ++--
 .../components/__tests__/LeftSidebarNav.test.tsx   |   7 +-
 .../app/components/__tests__/MobileNavBar.test.tsx |  22 +++-
 .../app/components/__tests__/TodoModal.test.tsx    | 136 ---------------------
 .../__tests__/TodoView.mobile-css.test.ts          |   7 --
 .../app/components/__tests__/TodoView.test.tsx     |  11 +-
 ...-merge-toggle-blank.mobile-integration.test.tsx |   1 -
 .../__tests__/navigation-history.test.tsx          |  29 ++++-
 .../dashboard/app/hooks/useMobileScrollLock.ts     |   2 +-
 packages/dashboard/app/hooks/useModalManager.ts    |  10 --
 packages/dashboard/app/hooks/useViewState.ts       |   7 +-
 24 files changed, 161 insertions(+), 481 deletions(-)

Fusion-Task-Id: FN-6829

Fusion-Task-Lineage: b4034bf2-b8e2-47ec-be7c-11c320d2fc44
2026-06-21 13:25:40 -07:00
gsxdsm
12aae94447 FN-6813: add shadcn mono accent variants
Expand the shadcn theme family with mono accent variants and migrate the legacy mono id.

- Rename the legacy shadcn-mono theme path to shadcn-mono-red with compatibility migration.
- Add shadcn mono blue, green, purple, pink, orange, and yellow theme tokens and swatches.
- Keep Shadcn Gray registered alongside the expanded shadcn family after conflict resolution.
- Cover theme migration and option registration with hook tests and docs.

Files changed:
 .changeset/shadcn-mono-color-family.md             |   5 +
 docs/dashboard-guide.md                            |   2 +-
 packages/core/src/types.ts                         |  14 +-
 .../dashboard/app/components/ThemeSelector.css     |  90 ++-
 packages/dashboard/app/components/themeOptions.ts  |   8 +-
 .../dashboard/app/hooks/__tests__/useTheme.test.ts |  35 +-
 packages/dashboard/app/hooks/useTheme.ts           |  10 +-
 packages/dashboard/app/index.html                  |   4 +-
 packages/dashboard/app/public/theme-data.css       | 802 ++++++++++++++++++++-
 9 files changed, 947 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6813
Fusion-Task-Lineage: c489300c-2131-4914-84f6-41b8e12929d3
2026-06-21 13:25:40 -07:00
gsxdsm
da7fb002d5 FN-6862: give engine controls popover an opaque surface
Keep the footer engine controls popover opaque by using valid dashboard CSS tokens.

- Replace the undefined elevated surface token with the solid card surface.
- Align disabled action opacity, range accent, and mobile height CSS with defined tokens/values.
- Add a CSS token regression test for the engine control menu popover.

Files changed:
 .../dashboard/app/components/EngineControlMenu.css |  8 +-
 .../dashboard/app/components/EngineControlMenu.tsx |  3 +
 .../__tests__/EngineControlMenu.css.test.ts        | 99 ++++++++++++++++++++++
 3 files changed, 106 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6862
Fusion-Task-Lineage: 5e41177a-6fc5-48d0-861d-fefbcfca7060
2026-06-21 13:25:40 -07:00
gsxdsm
7e478fb473 Merge pull request #1703 from Runfusion/gsxdsm/workflow-optional-steps
feat(dashboard): workflow optional steps — authoring, full-modal parity, stepwise seam
2026-06-21 09:04:39 -07:00
gsxdsm
f13aaa1a99 FN-6722: expose resolved GitHub issues
Expose resolved GitHub issue details in Command Center analytics and exports.

- Add resolved issue rows to local GitHub issue analytics with exact-vs-approximate timestamp metadata.
- Render a resolved issues table in the Command Center GitHub area without empty links when issue URLs are missing.
- Include resolved issue details in CSV export, route coverage, dashboard tests, docs, and the release changeset.
- Quarantine the unrelated dashboard dev-server process timer flake observed during workspace verification under the deletion ratchet.

Files changed:
 ...fn-6722-command-center-resolved-issue-detail.md |   5 +
 docs/dashboard-guide.md                            |   3 +-
 .../src/__tests__/github-issue-analytics.test.ts   | 109 +++++++++++++++++++--
 packages/core/src/github-issue-analytics.ts        |  45 ++++++++-
 packages/core/src/index.ts                         |   1 +
 .../__tests__/CommandCenter.mobile-scroll.test.tsx |   4 +-
 .../__tests__/CommandCenter.test.tsx               |   1 +
 .../components/command-center/areas/GithubArea.tsx |  67 +++++++++++++
 .../command-center/areas/__tests__/areas.test.tsx  |  55 +++++++++++
 .../register-command-center-routes.test.ts         |  61 +++++++++++-
 packages/dashboard/src/command-center-csv.ts       |  39 +++++++-
 packages/dashboard/vitest.config.ts                |   7 +-
 scripts/lib/test-quarantine.json                   |   5 +
 13 files changed, 382 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6722
Fusion-Task-Lineage: 9fcbd8c2-f1bc-4b86-b5f5-593e5fd0e675
2026-06-21 09:00:40 -07:00
gsxdsm
e18745b79e FN-6844: move engine controls to footer status bar
Move engine stop, pause, and scheduler tuning controls into the executor footer status bar.

- Add a footer EngineControlMenu popover with stop/start, pause/resume, and debounced concurrency/worktree sliders.
- Remove the engine controls from the dashboard header and wire the footer running-state text to open the controls.
- Update dashboard tests, English labels, and operator documentation for the footer control location.

Files changed:
 docs/dashboard-guide.md                            |   4 +
 packages/dashboard/app/App.tsx                     |   7 -
 .../app/__tests__/tablet-header-controls.test.tsx  |  21 +-
 .../dashboard/app/components/EngineControlMenu.css | 118 +++++++++
 .../dashboard/app/components/EngineControlMenu.tsx | 292 +++++++++++++++++++++
 .../dashboard/app/components/ExecutorStatusBar.css |  28 ++
 .../dashboard/app/components/ExecutorStatusBar.tsx |  25 +-
 packages/dashboard/app/components/Header.css       |  89 -------
 packages/dashboard/app/components/Header.tsx       |  81 +-----
 .../app/components/__tests__/App.test.tsx          | 132 ----------
 .../__tests__/EngineControlMenu.test.tsx           | 145 ++++++++++
 .../__tests__/ExecutorStatusBar.test.tsx           |  40 +++
 .../app/components/__tests__/Header.test.tsx       |  57 +---
 .../components/__tests__/MultiProjectFlow.test.tsx |   8 -
 .../app/components/__tests__/ResearchView.test.tsx |   4 -
 packages/i18n/locales/en/app.json                  |   5 +-
 16 files changed, 666 insertions(+), 390 deletions(-)

Fusion-Task-Id: FN-6844

Fusion-Task-Lineage: f0e17e3d-489e-483c-ba7d-a020c111231c
2026-06-21 09:00:40 -07:00
gsxdsm
85f324fd2c Merge pull request #1705 from Runfusion/gsxdsm/fix-spinners
fix: make loading spinners actually spin across the dashboard
2026-06-21 04:10:56 -07:00
gsxdsm
3b61ac3d23 fix: make loading spinners actually spin across the dashboard
Many loading states rendered bare "Loading…" text with no spinner
element, and a couple rendered an unstyled `loading-spinner` div with no
matching CSS (invisible). The global spin animation was never broken —
it rotates in Chromium and WebKit — so prior transform-box edits chased
a non-bug, validated only by a string-matching CSS test.

Add a shared <LoadingSpinner> (self-contained animated SVG, no
lucide-react import so it survives partial test mocks) and adopt it
across ~47 loading placeholders so every loading state shows a
consistent animated spinner. Includes a component test that asserts the
svg carries the animate-spin utility.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 03:53:43 -07:00
gsxdsm
4672203acd FN-6814: add Shadcn Gray theme variant
Adds a neutral Shadcn Gray dashboard color theme across selection, bootstrap, documentation, and release notes.

- Add Shadcn Gray to core theme validation and dashboard theme picker options.
- Define dark and light zinc-gray theme tokens plus matching swatch previews.
- Cover the new theme with regression tests and document the expanded theme count.

Files changed:
 .changeset/shadcn-gray-variant.md                  |   5 +
 docs/dashboard-guide.md                            |   2 +-
 packages/core/src/types.ts                         |   4 +-
 .../app/__tests__/shadcn-gray-theme.test.ts        |  65 ++++++++++
 .../dashboard/app/components/ThemeSelector.css     |  15 +++
 packages/dashboard/app/components/themeOptions.ts  |   2 +
 packages/dashboard/app/index.html                  |   2 +-
 packages/dashboard/app/public/theme-data.css       | 143 ++++++++++++++++++++-
 8 files changed, 228 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-6814

Fusion-Task-Lineage: 0548ad7a-5a3c-4e39-8dab-3eb5d40d84c1
2026-06-21 03:40:56 -07:00
gsxdsm
f030f73032 FN-6847: move sidebar collapse toggle into footer
Move the left sidebar collapse control into the footer so it sits above Settings with row-style behavior.

- Replace the floating border collapse button with a footer row button that keeps accessible expanded/collapsed labels.
- Retokenize collapse toggle CSS around shared sidebar item styling and remove the obsolete floating modifier.
- Extend sidebar tests and dashboard guide coverage for the footer placement and collapsed rail behavior.

Files changed:
 docs/dashboard-guide.md                            |  4 +-
 .../dashboard/app/components/LeftSidebarNav.css    | 24 ++--------
 .../dashboard/app/components/LeftSidebarNav.tsx    | 32 ++++++-------
 .../components/__tests__/LeftSidebarNav.test.tsx   | 54 ++++++++++++++++++++--
 4 files changed, 72 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-6847

Fusion-Task-Lineage: 5d7781a1-afc9-4e5c-bf7b-0648bb874285
2026-06-21 03:40:56 -07:00
gsxdsm
1ff87147b7 FN-6831: narrow list sidebar and wrap task titles
Refine the desktop list split pane so narrower sidebars still show readable task titles.

- Lower the list-view sidebar minimum width from 280px to 200px across resize and keyboard handling.
- Clamp desktop list task titles to two wrapped lines with overflow protection.
- Update ListView coverage for the smaller persisted/keyboard minimum and title-clamp CSS.

Files changed:
 packages/dashboard/app/components/ListView.css     | 10 +++++++++-
 packages/dashboard/app/components/ListView.tsx     |  2 +-
 .../app/components/__tests__/ListView.test.tsx     | 22 +++++++++++++++++-----
 3 files changed, 27 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6831

Fusion-Task-Lineage: ac3e455d-8cb0-4f42-ac5c-d735e56d2b89
2026-06-21 03:40:56 -07:00
gsxdsm
9d55f29c7a FN-6822: add dashboard i18n accessible-name fallbacks
Ensure dashboard accessibility labels render English defaults when i18n catalogs are unavailable.

- Add inline default text for the dashboard loader status label.
- Reuse the stash copy-reference fallback label for button accessibility and initial focus targeting.

Files changed:
 packages/dashboard/app/components/DashboardLoader.tsx    | 10 +++++++++-
 packages/dashboard/app/components/StashConflictModal.tsx | 12 +++++++++---
 2 files changed, 18 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6822

Fusion-Task-Lineage: 5057b051-43bd-467c-87b7-9ce86522c0c3
2026-06-21 03:40:56 -07:00
gsxdsm
19d60480db FN-6826: elevate the theme dropdown when open
Ensure the Command Center theme selector renders above neighboring views while preserving mobile in-flow behavior.

- Add an open state class to the theme dropdown root for local stacking control.
- Raise the open dropdown and popover above Command Center sibling cards without exceeding app chrome layers.
- Cover desktop elevation and mobile static popover behavior in ThemeDropdown tests.

Files changed:
 .../dashboard/app/components/ThemeDropdown.css     | 15 +++++++-
 .../dashboard/app/components/ThemeDropdown.tsx     |  2 +-
 .../components/__tests__/ThemeDropdown.test.tsx    | 40 ++++++++++++++++++++++
 3 files changed, 55 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6826

Fusion-Task-Lineage: ff43c06e-f3a7-4b4c-8e29-46deb66e9145
2026-06-21 03:40:56 -07:00
gsxdsm
0a49023f0b Address PR review feedback (#1704)
- Stop reconciliation/startAll/onProjectAccessed from warning every tick for
  externally-owned engines: swallow EngineAlreadyRunningError in the outer
  catches (it's expected and already logged once in createAndStart)
- Add FNXC:DashboardHealth requirement-trace comments on the externalEngines
  field and the dashboard hasRunningEngine health check
- Add regression test: reconciliation stays quiet across ticks for an
  externally-owned engine (inner refusal logged once, outer failure suppressed)
- Add regression test: hasDashboardEngine legacy fallback to getAllEngines when
  hasRunningEngine is unavailable on the manager

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 03:29:47 -07:00
gsxdsm
7c8eba38b4 Address PR review feedback (#1703)
- FNXC requirement-trace comments on the stepwise workflow-step seam,
  the flowToIr v2-signal/byte-identity contract, and TaskForm's
  optional-steps create-mode behavior
2026-06-21 03:13:23 -07:00
gsxdsm
7635ba8682 fix: report engine available when another fusion process owns it
The dashboard's engine-availability health check only counted engines
this process started. A second launch (e.g. `pnpm dev dashboard`
alongside an already-running `fusion`) is correctly refused the
per-machine engine singleton lock, so its engine map stays empty and
the dashboard showed a false "engine not running" banner even though an
engine was live on the machine.

ProjectEngineManager now records projects whose singleton lock is held
by another process (via EngineAlreadyRunningError) and exposes
hasRunningEngine(), which the health endpoint consults so the banner
reflects machine-level truth. Reconciliation still retries so this
process takes over if the other exits, and the "refusing to start" log
fires once per project instead of on every 30s reconciliation tick.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 03:09:35 -07:00
gsxdsm
45dc1795ef Address PR review feedback (#1703)
- Dropdown: aria-multiselectable, drop dead aria-labelledby, ArrowUp opens panel
- Dirty-state: NewTaskModal tracks enabledWorkflowSteps so toggles trigger discard prompt
- TaskForm: reset optionalStepsLoading on the no-workflow early return
- Node editor: pass plugin step templates into the optional-steps panel (both layouts)
- FNXC requirement comments on the new optional-steps components
2026-06-21 03:00:40 -07:00
gsxdsm
e16d48910c fix(ci): drop unknown react-hooks/exhaustive-deps disable directive in TaskForm 2026-06-21 02:45:34 -07:00
gsxdsm
481e38d422 fix(review): apply autofix feedback 2026-06-21 02:39:15 -07:00
gsxdsm
4f9c4cf10d Merge pull request #1701 from Runfusion/gsxdsm/compound-improve
fix: show plugin-contributed skills in the workflow editor
2026-06-21 02:36:43 -07:00
gsxdsm
275e97edc1 Merge pull request #1699 from Runfusion/codex/start-engines-by-default
[codex] Start Fusion engines by default
2026-06-21 02:35:13 -07:00
gsxdsm
dcb2190790 feat(dashboard): wire optional-steps dropdown into the full New Task modal 2026-06-21 02:31:18 -07:00
gsxdsm
67e76e2b80 Address PR review feedback (#1701)
- Plugin skills now respect project-settings enable/disable toggles
  (discoverSkills consults getSkillSettingState, falling back to the
  plugin's declared default) so toggleExecutionSkill writes persist
- readSkillContent returns synthesized content for plugin-contributed
  skills (name + description + provenance) instead of a silent blank
  panel, since their path is a virtual runtime-materialized path

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 02:23:59 -07:00
gsxdsm
a609c16a77 Merge pull request #1700 from Runfusion/perf/dashboard-test-project-dedup
perf(dashboard): de-duplicate overlapping vitest projects
2026-06-21 02:15:29 -07:00