Commit Graph

9315 Commits

Author SHA1 Message Date
gsxdsm
2ca2627533 FN-6788: verify bottom settings placement
Expand LeftSidebarNav tests to lock the settings control at the sidebar footer.

- Assert the settings button renders as the last sidebar button in the footer.
- Preserve bottom settings coverage when optional destinations are gated off and when the rail is collapsed.
- Cover clicking the settings button without an optional handler.

Files changed:
 .../components/__tests__/LeftSidebarNav.test.tsx   | 26 +++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6788

Fusion-Task-Lineage: 7f378f59-094f-4be1-9fee-eafb1b631cf8
2026-06-20 02:46:54 -07:00
gsxdsm
98720f3626 FN-6766: fix mobile nav icon spacing
Keeps mobile bottom navigation icons evenly centered across tab variants.

- Make each mobile nav tab an equal-width flex column that ignores intrinsic label width.
- Center and truncate labels without affecting icon spacing.
- Add coverage for optional tabs, active tabs, badges, status dots, and overflow plugin views.
- Add a patch changeset for the published CLI bundle.

Files changed:
 .changeset/fn-6766-mobile-nav-spacing.md           |  5 ++
 packages/dashboard/app/components/MobileNavBar.css | 18 ++--
 .../app/components/__tests__/MobileNavBar.test.tsx | 95 ++++++++++++++++++++++
 3 files changed, 113 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6766

Fusion-Task-Lineage: 0fe92813-9110-4bc9-b0d0-39d98dc7dba9
2026-06-20 02:38:27 -07:00
gsxdsm
c4f34ceed1 FN-6767: make agents sidebar resizable
Make the Agents split view wider by default and persist user-adjusted sidebar widths.

- Add a desktop/tablet resize handle with pointer and keyboard controls, clamped accessible values, and per-project storage.\n- Update split-layout CSS so mobile remains stacked while non-mobile views reserve a resize affordance column.\n- Cover default, stored, clamped, pointer, keyboard, mobile, and org-chart sidebar behaviors in tests.\n- Add a patch changeset for the published Fusion package.\n\nFiles changed:\n .changeset/fn-6767-agents-sidebar.md               |   5 +\n packages/dashboard/app/components/AgentsView.css   |  47 ++++++--\n packages/dashboard/app/components/AgentsView.tsx   | 101 +++++++++++++++-\n .../app/components/__tests__/AgentsView.test.tsx   | 132 +++++++++++++++++++++\n .../app/utils/__tests__/projectStorage.test.ts     |   3 +-\n packages/dashboard/app/utils/projectStorage.ts     |   1 +\n 6 files changed, 280 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6767

Fusion-Task-Lineage: 93605e16-7524-4577-bbcd-666c105a867b
2026-06-20 02:25:11 -07:00
gsxdsm
7eceec00cc FN-6763: add themed workflow status switcher
Add a reusable dashboard workflow picker that shows inline task status counts across board and list views.

- Replace native workflow selects with a themed accessible dropdown component.
- Share workflow status count calculation between board and list views.
- Add styling, i18n labels, tests, and dashboard docs for the switcher behavior.

Files changed:
 docs/dashboard-guide.md                            |   3 +-
 packages/dashboard/app/components/Board.tsx        |  28 +--
 packages/dashboard/app/components/Lane.css         |   2 +
 .../dashboard/app/components/LeftSidebarNav.tsx    |   2 +-
 packages/dashboard/app/components/ListView.css     |  17 --
 packages/dashboard/app/components/ListView.tsx     |  31 ++-
 .../dashboard/app/components/WorkflowSwitcher.css  | 186 ++++++++++++++
 .../dashboard/app/components/WorkflowSwitcher.tsx  | 270 +++++++++++++++++++++
 .../app/components/__tests__/Board.test.tsx        |  60 +++--
 .../app/components/__tests__/ListView.test.tsx     |  79 +++++-
 .../components/__tests__/WorkflowSwitcher.test.tsx |  92 +++++++
 .../__tests__/workflowStatusCounts.test.ts         | 122 ++++++++++
 .../app/components/workflowStatusCounts.ts         |  54 +++++
 packages/i18n/locales/en/app.json                  |   9 +
 packages/i18n/locales/es/app.json                  |   9 +
 packages/i18n/locales/fr/app.json                  |   9 +
 packages/i18n/locales/ko/app.json                  |   9 +
 packages/i18n/locales/zh-CN/app.json               |   9 +
 packages/i18n/locales/zh-TW/app.json               |   9 +
 19 files changed, 930 insertions(+), 70 deletions(-)

Fusion-Task-Id: FN-6763
Fusion-Task-Lineage: 3503ea85-841a-4cd3-9960-1b22ef2cd4ea
2026-06-20 02:08:36 -07:00
gsxdsm
1ab2d4161a FN-6789: make dashboard utility views fill flex rows
Goals, Research, and Stash Recovery now keep full-width layouts inside the project-content flex row.

- Add flex growth, zero min-width, and full-width root sizing to Goals, Research, and Stash Recovery views.
- Document the view-level flex sizing requirement with FNXC comments.
- Add CSS contract tests for both bundled and base CSS fixtures.

Files changed:
 packages/dashboard/app/components/GoalsView.css      |  7 +++++++
 packages/dashboard/app/components/ResearchView.css   |  7 +++++++
 .../dashboard/app/components/StashRecoveryView.css   |  7 +++++++
 .../app/components/__tests__/GoalsView.test.tsx      | 20 ++++++++++++++++++++
 .../app/components/__tests__/ResearchView.test.tsx   | 19 +++++++++++++++++++
 .../components/__tests__/StashRecoveryView.test.tsx  | 20 ++++++++++++++++++++
 6 files changed, 80 insertions(+)

Fusion-Task-Id: FN-6789

Fusion-Task-Lineage: f650d95b-583b-48c8-a2e4-fe63317b4576
2026-06-20 01:52:26 -07:00
gsxdsm
58a6dccfb2 FN-6758: set shadcn theme accent orange
Update the default shadcn dashboard theme to use orange highlight accents while keeping its neutral base.\n\n- Set dark and light shadcn accent tokens and accent text for orange highlights.\n- Update shadcn theme swatches and documentation to reflect the orange accent.\n- Adjust theme tests to assert the orange accent token and preserved glow neutralization.\n\nFiles changed:\n docs/dashboard-guide.md                                 |  2 +-\n packages/dashboard/app/components/ThemeSelector.css     |  4 ++--\n packages/dashboard/app/hooks/__tests__/useTheme.test.ts | 12 ++++++++----\n packages/dashboard/app/public/theme-data.css            | 11 +++++++----\n 4 files changed, 18 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-6758

Fusion-Task-Lineage: b4fe5a6d-416e-4cd1-be57-7e6da5a07f59
2026-06-20 01:43:20 -07:00
gsxdsm
7559883940 FN-6765: fix mobile nav mailbox duplication
Keep Mailbox as a single top-level entry while Todos stays in overflow navigation.

- Remove the duplicate Mailbox action from the mobile More sheet while preserving its primary-tab badges.
- Cover desktop, tablet, and mobile navigation placement expectations for Todos and Mailbox.
- Update dashboard docs to describe compact Header and mobile bottom-nav mailbox indicators.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 .../mobile-feature-access-regression.test.tsx      |  3 +-
 packages/dashboard/app/components/MobileNavBar.tsx | 22 +++---------
 .../app/components/__tests__/Header.test.tsx       | 19 +++++++----
 .../app/components/__tests__/MobileNavBar.test.tsx | 39 ++++++++++++++++++----
 5 files changed, 52 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-6765
Fusion-Task-Lineage: e32f271e-7dab-43e0-b824-da598641aa77
2026-06-20 01:34:51 -07:00
gsxdsm
10208ecd63 FN-6764: make research and insights tablet layouts full width
Research and Insights now reflow at tablet widths to avoid cut-off content while preserving mobile and desktop behavior.

- Add tablet-specific full-width Research layout rules with shrink-safe reader/history containers.
- Add tablet-specific Insights layout rules that stack the category rail above the detail pane.
- Cover Research and Insights responsive CSS contracts across desktop, mobile, and tablet tiers.

Files changed:
 packages/dashboard/app/components/InsightsView.css | 67 ++++++++++++++++++++++
 packages/dashboard/app/components/ResearchView.css | 47 +++++++++++++++
 .../app/components/__tests__/InsightsView.test.tsx | 20 +++++++
 .../app/components/__tests__/ResearchView.test.tsx | 13 +++++
 4 files changed, 147 insertions(+)

Fusion-Task-Id: FN-6764

Fusion-Task-Lineage: ed528038-e69b-4794-9885-fb3b5f47b3ed
2026-06-20 01:27:54 -07:00
gsxdsm
aaa1aa2fed FN-6786: narrow experimental sidebar labels
Refine the experimental left sidebar so it uses shorter labels in a narrower layout.

- Reduce the default and tokenized sidebar width while preserving resize bounds.
- Switch sidebar entries to noun labels and remove plugin "view" suffixes.
- Shorten the Compound Engineering plugin label to Compound and cover the behavior in sidebar tests.
- Add localized nav label keys for supported app locales.

Files changed:
 .../dashboard/app/components/LeftSidebarNav.css    |  2 +-
 .../dashboard/app/components/LeftSidebarNav.tsx    | 34 ++++++++++++------
 .../components/__tests__/LeftSidebarNav.test.tsx   | 40 ++++++++++++++++++++++
 packages/i18n/locales/en/app.json                  |  2 ++
 packages/i18n/locales/es/app.json                  |  2 ++
 packages/i18n/locales/fr/app.json                  |  2 ++
 packages/i18n/locales/ko/app.json                  |  2 ++
 packages/i18n/locales/zh-CN/app.json               |  2 ++
 packages/i18n/locales/zh-TW/app.json               |  2 ++
 9 files changed, 76 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-6786

Fusion-Task-Lineage: e8a35018-3b9c-44f6-a4ae-5b6a59281df3
2026-06-20 01:11:42 -07:00
gsxdsm
2e3b965909 FN-6757: smooth mobile Quick Chat keyboard resizing
Smooth Quick Chat mobile panel height changes while keeping viewport sampling synchronous.\n\n- Add Android resize-content detection that toggles height easing only for coarse keyboard viewport samples.\n- Clear smoothing and viewport CSS variables on blur, unmount, and suppressed shrink paths.\n- Cover Android smoothing, iOS offsetTop refocus, Latest gate, and streaming state with Quick Chat regression tests.\n- Document the mobile keyboard smoothing behavior and add a published package changeset.\n\nFiles changed:\n .changeset/smooth-mobile-quick-chat-keyboard.md    |   5 +\n docs/dashboard-guide.md                            |   1 +\n .../quick-chat-mobile-keyboard-board-shift.md      |   2 +\n packages/dashboard/app/components/QuickChatFAB.css |   8 ++\n packages/dashboard/app/components/QuickChatFAB.tsx |  17 +++\n .../app/components/__tests__/QuickChatFAB.test.tsx | 141 +++++++++++++++++++++\n 6 files changed, 174 insertions(+)

Fusion-Task-Id: FN-6757

Fusion-Task-Lineage: d301aee8-ef76-4d70-a4cd-91641bb05259
2026-06-20 00:41:36 -07:00
gsxdsm
24fd4952bb FN-6753: isolate routes-auth from dashboard backfill
Preserve auth route coverage by moving the suite out of the contended API backfill shard.\n\n- Add routes-auth to the curated dashboard API quality shard.\n- Document the FN-6753 suite-load coupling classification and shard-isolation remedy.\n\nFiles changed:\n docs/testing.md                     | 4 ++++\n packages/dashboard/vitest.config.ts | 7 ++++++-\n 2 files changed, 10 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6753

Fusion-Task-Lineage: 4da2f45f-87ba-4b80-baed-68dbde93a09e
2026-06-20 00:30:54 -07:00
gsxdsm
9483670d6a FN-6755: move org chart and heartbeat controls to Team
Relocate Command Center team operations out of Overview and into the Team section.

- Render the agent org chart and heartbeat pause/resume controls above Team analytics.
- Keep Overview controls focused on global engine, concurrency, and theme settings.
- Add Team-specific styling and tests for org chart, heartbeat, and responsive placement.
- Update Command Center documentation to describe the new Team operations layout.

Files changed:
 docs/dashboard-guide.md                            |   5 +-
 .../components/command-center/CommandCenter.tsx    |   2 +-
 .../command-center/CommandCenterControls.css       |  61 ------
 .../command-center/CommandCenterControls.tsx       | 188 +------------------
 .../__tests__/CommandCenter.mobile-scroll.test.tsx |   8 +-
 .../__tests__/CommandCenter.tablet-layout.test.tsx |   2 +-
 .../__tests__/CommandCenter.test.tsx               |   4 +
 .../__tests__/CommandCenterControls.test.tsx       |  89 +--------
 .../components/command-center/areas/TeamArea.tsx   | 204 ++++++++++++++++++++-
 .../command-center/areas/__tests__/areas.test.tsx  | 123 ++++++++++++-
 .../app/components/command-center/areas/areas.css  | 181 ++++++++++++++++++
 11 files changed, 526 insertions(+), 341 deletions(-)

Fusion-Task-Id: FN-6755

Fusion-Task-Lineage: 63ceb609-f0e3-4e02-8fea-c97cfc18ccf2
2026-06-20 00:15:25 -07:00
gsxdsm
24246fba2b FN-6772: add experimental left sidebar navigation
Add a flag-gated desktop/tablet sidebar navigation surface while preserving mobile navigation behavior.

- Add LeftSidebarNav with project selection, primary and overflow destinations, badges, collapsed state, and resize persistence.
- Wire the experimental flag through App and Header so the sidebar owns non-mobile navigation when enabled.
- Style the sidebar shell, resize handle, collapsed rail, and project selector adaptations.
- Document the experiment and cover sidebar/mobile navigation regressions with tests.

Files changed:
 docs/dashboard-guide.md                            |  10 +
 packages/dashboard/app/App.tsx                     |  52 ++-
 .../mobile-feature-access-regression.test.tsx      |  94 ++++-
 packages/dashboard/app/components/Header.tsx       |  12 +-
 .../dashboard/app/components/LeftSidebarNav.css    | 217 ++++++++++
 .../dashboard/app/components/LeftSidebarNav.tsx    | 465 +++++++++++++++++++++
 .../dashboard/app/components/ProjectSelector.css   |  20 +
 .../dashboard/app/components/SettingsModal.tsx     |   1 +
 .../components/__tests__/LeftSidebarNav.test.tsx   | 201 +++++++++
 9 files changed, 1063 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6772
Fusion-Task-Lineage: 13ba4ea0-e64b-47a0-abf0-3134a750007a
2026-06-19 23:28:35 -07:00
gsxdsm
a326e8e684 FN-6717: move Nodes into Command Center
Move node management into the Command Center experience while removing the separate Nodes overlay entry points.

- Add a gated Nodes tab to Command Center and pass toast wiring through from App.
- Remove top-level header and mobile-nav Nodes overlay controls and overlay-only styling.
- Let NodesView render without a close button when embedded as a tab.
- Update navigation, lazy-load docs, mobile access, and Command Center tests for the new surface.

Files changed:
 AGENTS.md                                          |  3 +-
 packages/dashboard/app/App.tsx                     | 57 ++-------------
 .../app/__tests__/lazy-loaded-views-docs.test.ts   | 11 +--
 .../mobile-feature-access-regression.test.tsx      | 12 ++--
 packages/dashboard/app/components/Header.tsx       | 33 +--------
 packages/dashboard/app/components/MobileNavBar.tsx | 16 -----
 packages/dashboard/app/components/NodesView.css    | 37 ----------
 packages/dashboard/app/components/NodesView.tsx    | 22 +++---
 .../app/components/__tests__/Header.test.tsx       | 22 ++----
 .../app/components/__tests__/MobileNavBar.test.tsx | 22 +-----
 .../app/components/__tests__/NodesView.test.tsx    | 81 +++-------------------
 ...-merge-toggle-blank.mobile-integration.test.tsx |  1 -
 .../components/command-center/CommandCenter.tsx    | 17 ++++-
 .../__tests__/CommandCenter.mobile-scroll.test.tsx |  2 +-
 .../__tests__/CommandCenter.tablet-layout.test.tsx |  2 +-
 .../__tests__/CommandCenter.test.tsx               | 40 ++++++++++-
 packages/dashboard/app/styles.css                  |  2 +-
 packages/i18n/locales/en/app.json                  |  1 +
 18 files changed, 106 insertions(+), 275 deletions(-)

Fusion-Task-Id: FN-6717

Fusion-Task-Lineage: 89306335-c247-4c66-8937-adfdf8c3cbb8
2026-06-19 23:16:19 -07:00
gsxdsm
f3343ca79f FN-6754: restore Command Center tablet API mocks
Restore the Command Center tablet layout test mock contract so hook refresh calls resolve cleanly.

- Export fetchConfig, fetchSettings, and updateSettings from the tablet test api mock.
- Document why the real useAppSettings hook requires the full api mock surface.
- Preserve task fixture updates for populated productivity metrics.

Files changed:
 .../command-center/__tests__/CommandCenter.mobile-scroll.test.tsx | 2 +-
 .../command-center/__tests__/CommandCenter.tablet-layout.test.tsx | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6754

Fusion-Task-Lineage: 5c5955e3-7b23-4fb3-baf5-4ba9dcfeef2e
2026-06-19 23:06:44 -07:00
gsxdsm
28ba1bce85 FN-6784: keep Command Center numbers on one line
Command Center token totals now shrink to fit instead of wrapping digit groups.

- Add inline-size containers around stat cards and live metrics for container-query scaling.
- Replace digit wrapping with nowrap overflow clipping and clamp-based numeric font sizes.
- Strengthen Command Center tests for exact live metric values and CSS no-wrap shrink contracts.

Files changed:
 .../app/components/command-center/CommandCenter.css   | 17 ++++++++++++-----
 .../command-center/__tests__/CommandCenter.test.tsx   |  3 ++-
 .../CommandCenter.token-validity.css.test.ts          | 19 +++++++++++++++----
 3 files changed, 29 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-6784

Fusion-Task-Lineage: dfe165f4-7304-49eb-b46b-83c0a9e2c4a3
2026-06-19 22:31:57 -07:00
gsxdsm
a63cf1c911 FN-6750: harden task chat steering coverage
Verify task chat timestamps and immediate steering delivery across UI, route, and executor surfaces.

- Assert inline and expanded TaskChatTab timestamp parity for agent output and user steering comments.
- Cover steering route wake payloads so assigned agents receive the newest steering comment id immediately.
- Harden executor real-time steering tests for seen-before-inject ordering, queued prompt delivery, duplicate suppression, and empty-comment no-ops.

Files changed:
 .../app/components/__tests__/TaskChatTab.test.tsx  |  79 +++++++++++-
 .../src/__tests__/routes-tasks-ops.test.ts         | 136 +++++++++++++++++++++
 .../src/__tests__/executor-step-session.test.ts    | 116 ++++++++++++++++--
 3 files changed, 316 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-6750

Fusion-Task-Lineage: 48e1d57d-fd37-4d45-9b98-766c4a2f704d
2026-06-19 22:24:18 -07:00
gsxdsm
d4d7623ee0 FN-6749: rebaseline i18n lint guardrail
Rebaseline the i18n hardcoded-string lint guardrail for shipping dashboard surfaces.

- Add scoped i18n lint ignores for non-shipping tests, stories, and deferred source-copy files with follow-up rationale.
- Localize remaining plugin/view copy and replace technical glyph literals that should not be linted as prose.
- Refresh synced locale catalogs and generated resource types, and document the lint baseline policy.

Files changed:
 .changeset/fn-6749-i18n-lint-rebaseline.md         |    5 +
 docs/i18n-contributing.md                          |   14 +
 i18next.config.ts                                  |   96 ++
 .../dashboard/app/components/AgentDetailView.tsx   |    4 +-
 .../app/components/ConversationHistory.tsx         |    4 +-
 .../app/components/DockerNodeOnboardingModal.tsx   |    8 +-
 .../components/MilestoneSliceInterviewModal.tsx    |    4 +-
 .../app/components/MissionInterviewModal.tsx       |    4 +-
 .../app/components/ModelSelectionModal.tsx         |    4 +-
 .../dashboard/app/components/NodeDetailModal.tsx   |   15 +-
 .../dashboard/app/components/PlanningModeModal.tsx |    4 +-
 .../dashboard/app/components/SessionTerminal.tsx   |   15 +-
 .../app/components/SubtaskBreakdownModal.tsx       |    4 +-
 packages/dashboard/app/components/TaskForm.tsx     |    4 +-
 .../dashboard/app/components/TerminalModal.tsx     |   18 +-
 .../dashboard/app/plugins/pluginViewRegistry.tsx   |    7 +-
 packages/i18n/locales/en/app.json                  |  890 +++++++++---
 packages/i18n/locales/en/common.json               |   82 +-
 packages/i18n/locales/es/app.json                  |  986 ++++++++++---
 packages/i18n/locales/es/common.json               |   82 +-
 packages/i18n/locales/fr/app.json                  |  986 ++++++++++---
 packages/i18n/locales/fr/common.json               |   82 +-
 packages/i18n/locales/ko/app.json                  | 1482 ++++++++++++++------
 packages/i18n/locales/ko/cli.json                  |    8 +-
 packages/i18n/locales/ko/common.json               |   82 +-
 packages/i18n/locales/zh-CN/app.json               | 1482 ++++++++++++++------
 packages/i18n/locales/zh-CN/cli.json               |    8 +-
 packages/i18n/locales/zh-CN/common.json            |   82 +-
 packages/i18n/locales/zh-TW/app.json               | 1482 ++++++++++++++------
 packages/i18n/locales/zh-TW/cli.json               |    8 +-
 packages/i18n/locales/zh-TW/common.json            |   82 +-
 packages/i18n/src/resources.d.ts                   |  459 +++---
 32 files changed, 6055 insertions(+), 2438 deletions(-)

Fusion-Task-Id: FN-6749

Fusion-Task-Lineage: 789a7cbb-fdf8-4190-8cd2-6bf7d5e2d552
2026-06-19 22:14:57 -07:00
gsxdsm
dc98c18ef1 Merge pull request #1691 from Runfusion/fix/fast-changed-scoped-tests
Scope affected test runs to changed-related tests (Part 1: vitest --changed)
2026-06-19 22:14:36 -07:00
gsxdsm
6e2e5c6b62 WIP: scope affected test runs to changed-related tests (vitest --changed)
Affected packages with a vitest config now run `vitest run --changed <base>`
(only tests in the changed files' module graph) under the tight "changed"
watchdog, instead of each package's ENTIRE suite under a 60-min backstop.
Packages without a vitest config fall back to their full `test` script. The
curated gate suite still runs as the cross-cutting safety net.

Measured: a dashboard hub-component change drops from 822 files (5-8min) to
40 files (~98s wall incl. gate). Common/leaf changes scope to far fewer.
NOT yet <60s for hub-component changes — the fixed jsdom/setup floor still
dominates (needs the overhead-reduction follow-up), and one scoped-run test
failure needs isolation triage before this gates verification.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 22:05:09 -07:00
gsxdsm
1cc10f4a06 Merge pull request #1690 from Runfusion/fix/heartbeat-staleness-10min
Raise min agent heartbeat staleness floor 5m -> 10m
2026-06-20 12:48:08 +08:00
gsxdsm
e78853708a Raise min heartbeat staleness floor 5m -> 10m
Agents stop heartbeating during long legitimate work (e.g. a verification
step blocked on a multi-minute test command). The 5-minute floor could
misread a busy agent as dead and reclaim its in-progress task mid-run.
Raise MIN_HEARTBEAT_STALENESS_MS to 10 minutes and strengthen the floor
test (7-minute-silent fast-interval agent stays healthy — would have read
stale under the old 5-minute floor). Engine typecheck clean; heartbeat
suite 148/148 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 21:46:00 -07:00
gsxdsm
6c9e7554c1 Merge pull request #1689 from Runfusion/gsxdsm/fix-full-tests
Fix Full Suite test failures: productivity fixtures + delete teardown race
2026-06-20 12:19:11 +08:00
gsxdsm
a3be2351d1 Fix Full Suite test failures: productivity fixtures + delete teardown race
Three failures in the non-blocking Full Suite:

- CommandCenter mobile-scroll / tablet-layout regression tests rendered with
  productivity fixtures missing the `hoursSaved` field added in FN-6721. That
  made ProductivityArea throw on `data.hoursSaved.unavailable`, an uncaught
  exception that crashed the CommandCenter render (no `command-center` testid)
  and polluted the shared worker, causing collateral QuickEntryBox failures.
  Add `hoursSaved` to both fixtures.

- github-tracking-delete route test failed intermittently with
  `ENOTEMPTY: ... rmdir '.../.fusion'` because the fire-and-forget delete
  handler can write into `.fusion` while afterEach removes the temp dir. Make
  rm tolerant via maxRetries/retryDelay.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 21:09:12 -07:00
gsxdsm
0c0fda1d7d 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
2026-06-19 20:59:05 -07:00
gsxdsm
60557cfea6 Merge pull request #1687 from Runfusion/fix/pause-abort-worktree-leak-storm
Fix pause-abort worktree-slot leak + retry storm; add board auto-recovery
2026-06-20 11:57:31 +08:00
gsxdsm
7f0ad62731 Update executor-recovery test for benign todo pause-abort (FN-6782)
The gate test asserted the OLD behavior — a paused graph exit in the `todo`
column parked `status:"failed"` with "operator action required". FN-6782
made the todo case benign (no failed park; benign log + cleared marker), so
split the parameterized test: `todo` now asserts the benign path (never
parked failed), `done` keeps the operator-action surfacing (log only, no
park). Full engine-core gate suite passes (644/644).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:53:37 -07:00
gsxdsm
82fa5375dd Merge pull request #1688 from Runfusion/fix/compound-engineering-dist-freshness
Build Compound Engineering plugin dist before its tests (fix Full Suite)
2026-06-20 11:49:31 +08:00
gsxdsm
8b5b9a75ad Build Compound Engineering plugin dist before its tests
dist-freshness.test.ts reads the plugin's compiled dist/settings.js and
dist/session/orchestrator.js to guard against stale dist (FN-6596), but the
plugin had no pretest build and was missing from ensure-test-artifacts.mjs.
On a fresh CI checkout dist/ does not exist, so the guard threw "dist/ is
missing" — failing the non-blocking Full Suite on every main commit.

Register the plugin's required artifacts in ensure-test-artifacts.mjs and add
a `pretest` hook that builds them, matching the dependency-graph / hermes /
openclaw plugins. Verified locally: with dist/ absent, `pnpm --filter
@fusion-plugin-examples/compound-engineering test` now builds dist via the
pretest and all 192 plugin tests pass (incl. the two dist-freshness cases).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:47:32 -07:00
gsxdsm
8c93e2ad6b Re-check execution ownership before reaping a leaked slot (PR #1687)
coderabbit Major: reapLeakedConcurrencySlots captured executingIds once
before the loop, but each holder awaits getTask — a task could start
executing mid-sweep and have its worktree slot pulled. Refresh the
executing set immediately before clearPhantomExecutorBinding and skip if
the holder is now executing (same race the A1 recovery fix closed).
clearPhantomExecutorBinding's live-session refusal remains the last line
of defense; this avoids racing it. Added a mid-sweep race test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:34:53 -07:00
gsxdsm
a9b65ac83f Merge pull request #1686 from Runfusion/fix/quarantine-json-forces-gate-mode
Stop quarantine-list edits from forcing pnpm test into gate mode
2026-06-20 11:34:41 +08:00
gsxdsm
7eaf513944 Address PR #1687 review: harden pause-abort recovery + FNXC comments
Substantive (A1 recoverPausedAbortFailures):
- Self-guard on globalPause/enginePaused at method entry (greptile P1) — the
  public method must not requeue tasks an operator intentionally froze.
- Re-validate the FULL predicate with a FRESH executing set on the re-read
  before the backward move (coderabbit Major + greptile): add fresh.userPaused
  and column re-check so a task that became ineligible across awaits is skipped.
- Isolate audit emission in its own try/catch (coderabbit) so an audit throw
  after a successful mutation can't log a false "recovery failed".
- Decouple the recovery predicate from the literal error text via shared
  PAUSE_ABORT_PARK_ERROR_MARKER/OPERATOR_MARKER constants (greptile) — the
  executor builds the parked message from the same constants.
- Use the wired clearPhantomExecutorBinding (live-session-guarded) instead of
  the declared-but-never-wired releaseExecutorWorktreeOwnership, which no-op'd.

Nits:
- FNXC-prefix new comments in executor.ts, run-audit.ts, and the benign test
  per repo comment policy.
- Fix a test-only type error on the clearPhantomExecutorBinding mock.

Added a test asserting the globalPause self-guard. Engine typecheck clean;
pause-abort/reaper/benign + regression suites pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:10:50 -07:00
gsxdsm
8e4b9e4f0f Add leaked-slot reaper (A2) to self-healing
reapLeakedConcurrencySlots() reclaims in-memory worktree slots whose
holder is no longer in-progress (the FN-6756 "in todo yet still a
maxWorktrees holder" leak) without an engine restart — defense-in-depth
behind the source fix.

- executor: new listWorktreeHolders() read-only introspection over
  activeWorktrees; wired through in-process-runtime to SelfHealingManager.
- reaper releases ONLY when every guard agrees: not executing, task
  missing or in todo/triage, past a 60s grace, and clearPhantomExecutor
  Binding itself refuses (returns false) if a live session surface is
  registered — so it can never pull a worktree from a running agent.
- registered in maintenance batch 2 (respects globalPause/enginePaused
  skip + FN-4962 ordering).
- widened the clearPhantomExecutorBinding option type to surface its
  boolean refusal signal.

Engine typecheck clean; 19 tests pass (new reaper 7 cases + regression).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:03:24 -07:00
gsxdsm
9643563874 Fix pause-abort worktree leak + retry storm; add auto-recovery
A global pause/resume cycle parked tasks that had re-queued to todo as
status:"failed" ("operator action required") and leaked their in-memory
worktree slot. The scheduler kept re-dispatching the todo task, the
genuine-pause-abort branch re-fired on the still-set pausedAborted marker,
and it re-parked instantly with no backoff — a retry storm (75x/hr) that
pinned maxWorktrees=3/3 and concurrency-starved the whole queue.

- R1+R2 (executor.ts handleGraphFailure): treat a pause-abort that left a
  task in `todo` as benign (FN-6782) — don't park failed, clear the
  pausedAborted marker so the next dispatch is clean, and release the
  leaked activeWorktrees slot. Operator-action failure preserved for
  genuinely stranded non-todo columns (FN-6478).
- A1 (self-healing.ts recoverPausedAbortFailures): new maintenance sweep
  that auto-recovers any pause-abort park still on the board and requeues
  it (status:null = schedulable) so the board self-heals.
- run-audit.ts: new mutation types for the recovery telemetry.

Corrected the spec's null-vs-queued assumption: the scheduler dispatch set
is column==="todo" && !paused (scheduler.ts:1288); status:"queued" is the
*blocked* marker, status:null is runnable — so recovered tasks are left null.

Deferred (documented): A2 leaked-slot reaper needs a new executor
listWorktreeHolders introspection API to reap in-memory worktree slots
safely; R1 closes the observed leak at its source.

Tests: self-healing-paused-abort-recovery.test.ts (3),
executor-paused-abort-todo-benign.test.ts (2). Engine typecheck clean;
106 existing pause/graph-failure/limbo tests still pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:50:46 -07:00
gsxdsm
b9c5b4a2a6 docs: capture gate-mode-drops-coverage learning
Document the test-changed shared-infra catch-all trap (gate mode replaces
affected-package coverage instead of augmenting it) under docs/solutions/,
and add an "Affected-package test selection" concept to CONCEPTS.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:10:27 -07:00
gsxdsm
24ff12471f Stop quarantine-list edits from forcing pnpm test into gate mode
scripts/lib/test-quarantine.json is runtime data (which tests are
quarantined), not executable test infra, but it tripped the shared-infra
catch-all in isSharedInfraChange. That forced mode=gate, which runs only
the fixed engine-core + cli-shape gate suite and returns before the
affected packages -- so a dev's real changes (e.g. @fusion/core,
@fusion/dashboard) got zero coverage whenever they also touched the
quarantine list. Classify the file as test-irrelevant so the diff stays
in changed mode and the affected packages run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:05:49 -07:00
gsxdsm
1a565a368b FN-6744: rescue WorkflowNodeEditor merge seam guard
Rescue the WorkflowNodeEditor quarantine by making duplicate merge seam detection reliable during initial canvas load.

- Derive fragment seam conflicts from the loaded workflow IR until React Flow nodes materialize.
- Treat IR merge nodes as merge seams so duplicate merge fragments are rejected consistently.
- Cover desktop and mobile duplicate merge fragment insertion paths and remove the test from quarantine.
- Document the FN-6744 rescue evidence and deletion-ratchet update.

Files changed:
 docs/testing.md                                    |  6 +++-
 .../app/components/WorkflowNodeEditor.tsx          | 11 +++++--
 .../__tests__/WorkflowNodeEditor.test.tsx          | 34 ++++++++++++++++------
 .../app/components/workflow-flow-mapping.ts        | 10 +++++++
 packages/dashboard/vitest.config.ts                |  8 +++--
 scripts/lib/test-quarantine.json                   |  5 ----
 6 files changed, 54 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6744

Fusion-Task-Lineage: 0f5b167a-8efc-4458-ac9d-e719320b751f
2026-06-19 18:38:17 -07:00
gsxdsm
d06d1052db FN-6743: rescue QuickEntryBox focus restoration
Restore reliable QuickEntryBox post-submit focus and return its test to the dashboard suite.

- Replace the ref-gated focus effect with a state-driven post-submit focus request.
- Cover desktop Enter, Save, duplicate-confirmed submit, mobile non-focus, and failed-submit draft preservation.
- Remove QuickEntryBox from dashboard quarantine while keeping the remaining workflow editor quarantine.

Files changed:
 .../dashboard/app/components/QuickEntryBox.tsx     | 46 +++++++++++++++++-----
 .../components/__tests__/QuickEntryBox.test.tsx    | 29 +++++++++++++-
 packages/dashboard/vitest.config.ts                |  5 ++-
 scripts/lib/test-quarantine.json                   |  5 ---
 4 files changed, 69 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-6743

Fusion-Task-Lineage: 2d458631-3ff3-4d96-8d91-bc2a17538be2
2026-06-19 17:49:06 -07:00
gsxdsm
5117944371 FN-6720: add productivity task duration stats
Adds completed-task active-duration analytics to the Command Center Productivity surface.\n\n- Aggregate average, median, p90, total, and completed-task duration metrics from done tasks with recorded active time.\n- Render duration stat cards with unavailable dash sentinels and export matching CSV rows.\n- Cover analytics, dashboard, route, CSV, mobile/tablet layout, and documentation behavior.\n\nFiles changed:\n .changeset/soft-badgers-measure.md                 |   5 +\n docs/architecture.md                               |   4 +-\n docs/dashboard-guide.md                            |   2 +-\n docs/storage.md                                    |   2 +\n .../src/__tests__/productivity-analytics.test.ts   | 105 ++++++++++++++++++++-\n packages/core/src/productivity-analytics.ts        |  83 +++++++++++++++-\n .../__tests__/CommandCenter.mobile-scroll.test.tsx |  16 ++++\n .../__tests__/CommandCenter.tablet-layout.test.tsx |  19 ++++\n .../command-center/areas/ProductivityArea.tsx      |  65 ++++++++++++-\n .../command-center/areas/__tests__/areas.test.tsx  |  65 ++++++++++++-\n .../components/command-center/areas/areaShared.ts  |  12 +++\n .../src/__tests__/command-center-csv.test.ts       |   8 ++\n .../register-command-center-routes.test.ts         |  22 +++++\n packages/dashboard/src/command-center-csv.ts       |   5 +\n 14 files changed, 404 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6720

Fusion-Task-Lineage: aa0980eb-d156-4dca-b6b8-1788570c166b
2026-06-19 17:25:35 -07:00
gsxdsm
711bf3e1b8 FN-6746: attribute token analytics per runtime model
Persist and expand per-model token usage so Command Center reports every model used by a task.

- Add a nullable per-model token usage column and task model bucket types.
- Merge session token deltas into provider/model buckets while retaining task-level totals.
- Expand model/provider analytics from per-model buckets with legacy fallbacks for older rows.
- Cover persistence, migration, aggregation, and session accumulation behavior with tests.
- Document the per-model storage contract alongside existing token analytics tables.

Files changed:
 docs/storage.md                                    |   2 +
 packages/core/src/__tests__/db-migrate.test.ts     |  62 ++++++++++
 .../core/src/__tests__/store-persistence.test.ts   |  49 ++++++++
 .../core/src/__tests__/token-analytics.test.ts     | 127 ++++++++++++++++++++-
 packages/core/src/db.ts                            |  13 ++-
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/store.ts                         |   7 +-
 packages/core/src/token-analytics.ts               |  58 ++++++++--
 packages/core/src/types.ts                         |  32 ++++++
 .../src/__tests__/session-token-usage.test.ts      |  23 ++++
 packages/engine/src/executor.ts                    |  20 +++-
 packages/engine/src/session-token-usage.ts         |  50 +++++++-
 packages/engine/src/step-session-executor.ts       |   7 ++
 13 files changed, 429 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6746

Fusion-Task-Lineage: 1b1a3b31-b669-4e89-ac38-a871f3349015
2026-06-19 16:47:34 -07:00
gsxdsm
f01ede2523 FN-6742: rescue session cross-tab tests
Rescue the dashboard session cross-tab test before its deletion-ratchet deadline.

- Dispose the API router and session cleanup scheduler before closing test stores.
- Hide unused TaskStore EventEmitter hooks in the route-only harness to avoid background route subscribers reopening temp fixtures.
- Remove the session-cross-tab quarantine ledger entry and dashboard Vitest exclude in lockstep.
- Document the rescue evidence and teardown pattern for future dashboard session tests.

Files changed:
 docs/testing.md                                    |  6 ++++-
 .../src/__tests__/session-cross-tab.test.ts        | 30 +++++++++++++++++++---
 packages/dashboard/vitest.config.ts                |  5 +++-
 scripts/lib/test-quarantine.json                   |  5 ----
 4 files changed, 36 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-6742

Fusion-Task-Lineage: e26d70eb-f139-45f7-8ddd-bde2d172c291
2026-06-19 16:47:34 -07:00
gsxdsm
fc0636fe90 FN-6748: add Air dashboard theme
Adds a minimal, borderless Air color theme across dashboard theme selection and bootstrap validation.

- Register Air in the core theme union, dashboard theme options, and browser/desktop bootstrap validators.
- Add dark and light Air token blocks with flattened chrome styling and matching swatch samples.
- Cover Air registration and CSS invariants with a focused dashboard test.
- Document the Air theme alongside the existing Shadcn theme in dashboard theming guidance.

Files changed:
 docs/dashboard-guide.md                            |   2 +-
 packages/core/src/types.ts                         |   2 +
 packages/dashboard/app/__tests__/air-theme.test.ts |  58 ++++++++++++
 .../dashboard/app/components/ThemeSelector.css     |  14 +++
 packages/dashboard/app/components/themeOptions.ts  |   1 +
 packages/dashboard/app/index.html                  |   2 +-
 packages/dashboard/app/public/theme-data.css       | 101 +++++++++++++++++++++
 packages/desktop/src/renderer/index.html           |   1 +
 8 files changed, 179 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6748

Fusion-Task-Lineage: a0caf14f-673d-485c-8886-97e4b273b624
2026-06-19 16:47:34 -07:00
gsxdsm
e19f7c2008 FN-6747: add shadcn dashboard theme
Add a shadcn-inspired dashboard theme across the theme picker, persisted startup validation, and public theme tokens.

- Register the Shadcn color theme in core and dashboard theme option lists.
- Add zinc-neutral dark and light CSS tokens with Geist typography, 1px borders, subtle shadows, and neutralized glow effects.
- Add theme swatches, documentation, startup allow-list support, regression coverage, and a published package changeset.

Files changed:
 .changeset/shadcn-dashboard-theme.md               |   5 +
 docs/dashboard-guide.md                            |   2 +-
 packages/core/src/types.ts                         |   1 +
 .../dashboard/app/components/ThemeSelector.css     |  14 ++
 packages/dashboard/app/components/themeOptions.ts  |   1 +
 .../dashboard/app/hooks/__tests__/useTheme.test.ts |  28 ++++
 packages/dashboard/app/index.html                  |   2 +-
 packages/dashboard/app/public/theme-data.css       | 166 +++++++++++++++++++++
 8 files changed, 217 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6747

Fusion-Task-Lineage: cf0d6732-aa4f-457d-ae6c-e54fca0191b2
2026-06-19 16:47:34 -07:00
gsxdsm
59d3eee7f4 FN-6721: estimate productivity hours saved
Estimate human hours saved from productivity LOC analytics and expose it consistently.

- Add a shared human-lines-per-hour conversion and hoursSaved summary to productivity analytics.
- Show human hours saved in the Command Center productivity area with unavailable-state handling.
- Include hoursSaved in productivity CSV exports, docs, tests, and the release changeset.

Files changed:
 .changeset/fuzzy-productivity-hours.md             |  5 ++++
 docs/architecture.md                               |  4 +--
 docs/storage.md                                    |  4 +--
 .../src/__tests__/productivity-analytics.test.ts   | 29 ++++++++++++++++------
 packages/core/src/index.ts                         |  3 ++-
 packages/core/src/productivity-analytics.ts        | 28 +++++++++++++++++++--
 .../command-center/areas/ProductivityArea.tsx      | 24 ++++++++++++++++++
 .../command-center/areas/__tests__/areas.test.tsx  |  9 ++++++-
 .../src/__tests__/command-center-csv.test.ts       | 29 +++++++++++++++++++++-
 .../register-command-center-routes.test.ts         |  1 +
 packages/dashboard/src/command-center-csv.ts       |  1 +
 11 files changed, 120 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-6721

Fusion-Task-Lineage: 80114bfc-7d7f-4659-983a-9488660e5f0f
2026-06-19 16:47:34 -07:00
gsxdsm
c158dda8a6 FN-6745: add xhigh thinking level support
Adds the xhigh reasoning option across settings, task flows, APIs, and model adapter tests.

- Extend the shared thinking-level enum, validation paths, generated resource types, and settings documentation for `xhigh`.
- Surface `xhigh` in task, agent, and global model selectors with localized labels.
- Cover task route handling, task form rendering, and Pi adapter mapping behavior with regression tests.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6745-xhigh-thinking-level.md         |   5 +
 docs/settings-reference.md                         |   2 +-
 .../core/src/__tests__/thinking-levels.test.ts     |   9 ++
 packages/core/src/types.ts                         |  10 +-
 packages/dashboard/app/api/legacy.ts               |   6 +-
 .../dashboard/app/components/AgentDetailView.tsx   |   2 +-
 .../dashboard/app/components/ModelSelectorTab.tsx  |   1 +
 .../dashboard/app/components/NewAgentDialog.tsx    |   3 +-
 packages/dashboard/app/components/NewTaskModal.tsx |   2 +-
 .../dashboard/app/components/TaskDetailModal.tsx   |   2 +-
 packages/dashboard/app/components/TaskForm.tsx     |   2 +
 .../app/components/__tests__/TaskForm.test.tsx     |  14 +++
 .../settings/sections/GlobalModelsSection.tsx      |   1 +
 .../src/__tests__/routes-tasks-ops.test.ts         |   8 +-
 .../dashboard/src/__tests__/routes-tasks.test.ts   |   8 +-
 packages/dashboard/src/agent-generation.ts         |   4 +-
 packages/dashboard/src/agent-onboarding.ts         |   4 +-
 .../src/routes/register-task-workflow-routes.ts    |   5 +-
 packages/engine/src/__tests__/pi.test.ts           |  25 ++++
 packages/i18n/locales/en/app.json                  |   3 +
 packages/i18n/locales/es/app.json                  |   3 +
 packages/i18n/locales/fr/app.json                  |   3 +
 packages/i18n/locales/ko/app.json                  |   3 +
 packages/i18n/locales/zh-CN/app.json               |   3 +
 packages/i18n/locales/zh-TW/app.json               |   3 +
 packages/i18n/src/resources.d.ts                   | 126 ++++++++++++++++++++-
 26 files changed, 229 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-6745

Fusion-Task-Lineage: 779e1517-607b-482b-83a1-0f2bb94ae736
2026-06-19 16:47:34 -07:00
gsxdsm
8d2b396e85 FN-6741: rescue core quarantine entries
Rescue the loaded @fusion/core quarantine batch while keeping the remaining lock flake quarantined.

- Remove rescued core test files from the quarantine ledger and Vitest exclude list.
- Close the settings-export TaskStore before fixture cleanup to release resources deterministically.
- Re-quarantine the store-concurrent-writes broad-lane SQLite lock flake observed during merge verification.
- Document the rescue evidence and remaining deletion-ratchet follow-up.

Files changed:
 docs/testing.md                                    |  8 ++++++-
 .../core/src/__tests__/settings-export.test.ts     |  5 ++++
 packages/core/vitest.config.ts                     | 11 +++++----
 scripts/lib/test-quarantine.json                   | 27 +---------------------
 4 files changed, 19 insertions(+), 32 deletions(-)

Fusion-Task-Id: FN-6741

Fusion-Task-Lineage: 064367a6-f1c4-4685-a766-37bf2204a42c
2026-06-19 16:47:34 -07:00
gsxdsm
60b69dd3eb FN-6739: document terminal shortcut focus preservation
Document the terminal shortcuts behavior that keeps active sessions focused during shortcut activation.

- Note that Shortcuts panel buttons preserve focus across pointer, mouse, and touch activation.
- Clarify that preserved focus keeps Ctrl combinations emitting control bytes to the shell.

Files changed:
 docs/dashboard-guide.md | 1 +
 1 file changed, 1 insertion(+)

Fusion-Task-Id: FN-6739

Fusion-Task-Lineage: f1f0ff89-e37e-4ed6-b16f-77014f5d2cc4
2026-06-19 16:47:34 -07:00
gsxdsm
4ad4f7faf0 FN-6738: document reliability charts
Document the new Reliability View chart coverage in the dashboard guide.

- Add the entered-vs-bounced trend chart to the In-review flow feature list.
- Add the merge-attempt distribution pie chart and empty-state behavior to the Merge attempts feature list.

Files changed:
 docs/dashboard-guide.md | 2 ++
 1 file changed, 2 insertions(+)

Fusion-Task-Id: FN-6738

Fusion-Task-Lineage: 37e5249c-ae5e-431a-8b93-1ee098b725e7
2026-06-19 16:47:33 -07:00
gsxdsm
5145e609cc FN-6727: add Command Center operator controls
Add operator controls to the Command Center overview and reuse a shared theme dropdown.

- Add Command Center controls for org chart status, pause toggles, heartbeat, concurrency settings, and theme selection.
- Extract theme option metadata and a reusable ThemeDropdown for app-level and Command Center theme controls.
- Update localization, documentation, and dashboard tests for the new controls and mobile layout behavior.

Files changed:
 docs/dashboard-guide.md                            |   1 +
 docs/settings-reference.md                         |   6 +-
 packages/dashboard/app/App.tsx                     |   8 +-
 .../dashboard/app/components/ThemeDropdown.css     |  96 +++++
 .../dashboard/app/components/ThemeDropdown.tsx     | 175 +++++++++
 .../dashboard/app/components/ThemeSelector.tsx     |  65 +---
 .../components/__tests__/ThemeDropdown.test.tsx    |  76 ++++
 .../components/__tests__/ThemeSelector.test.tsx    |  18 +
 .../components/command-center/CommandCenter.tsx    |  52 ++-
 .../command-center/CommandCenterControls.css       | 193 ++++++++++
 .../command-center/CommandCenterControls.tsx       | 424 +++++++++++++++++++++
 .../__tests__/CommandCenter.mobile-scroll.test.tsx |  17 +
 .../__tests__/CommandCenter.test.tsx               |  26 +-
 .../__tests__/CommandCenterControls.test.tsx       | 241 ++++++++++++
 packages/dashboard/app/components/themeOptions.ts  |  70 ++++
 packages/i18n/locales/en/app.json                  |  47 +++
 16 files changed, 1442 insertions(+), 73 deletions(-)

Fusion-Task-Id: FN-6727

Fusion-Task-Lineage: bd7752cf-9f6e-4359-a5bc-d2a4b68d086b
2026-06-19 16:47:33 -07:00
gsxdsm
2da55a8994 FN-6740: document quarantine ratchet follow-ups
Document the same-day flaky-test quarantine audit and ownership plan.\n\n- Record the 2026-06-19 quarantine batch expiration date and ledger/config lockstep status.\n- Split follow-up ownership across CLI, core, and dashboard quarantine rescue/delete work.\n- Add an FNXC comment explaining why the coordinated audit should stay scoped by subsystem.\n\nFiles changed:\n docs/testing.md | 4 ++++\n 1 file changed, 4 insertions(+)

Fusion-Task-Id: FN-6740

Fusion-Task-Lineage: eba08900-18d6-4768-ac8a-c673f89537ca
2026-06-19 16:47:33 -07:00