Commit Graph

8662 Commits

Author SHA1 Message Date
gsxdsm
6359a67aab FN-6200: document plugin-gated built-in workflows
Explain how bundled workflows stay hidden until their required plugin is installed.

- document the plugin-gated built-in workflow model in the plugin authoring guide
- show the core gating map and workflow visibility rules for listing and lookup
- note that the Compound Engineering built-in workflow appears only while its plugin is installed

Files changed:
 docs/PLUGIN_AUTHORING.md             | 48 ++++++++++++++++++++++++++++++++++++
 docs/plugins/compound-engineering.md |  6 +++++
 2 files changed, 54 insertions(+)

Fusion-Task-Id: FN-6200

Fusion-Task-Lineage: 72c64220-aef9-4f6b-92c3-5f53e67292fc
2026-06-10 10:31:46 -07:00
gsxdsm
5c42ff1314 FN-6198: unquarantine self-healing db corruption test
Restore the self-healing DB corruption test to the default engine suite.

- remove the engine vitest exclude for self-healing-db-corruption.test.ts
- clear the quarantine ledger entry for the restored test

Files changed:
 packages/engine/vitest.config.ts | 1 -
 scripts/lib/test-quarantine.json | 8 +-------
 2 files changed, 1 insertion(+), 8 deletions(-)

Fusion-Task-Id: FN-6198

Fusion-Task-Lineage: 2466b040-956d-4138-89d5-137d1721081c
2026-06-10 10:00:21 -07:00
gsxdsm
b6243d68fe FN-6197: suppress tab-resume fetch errors in dashboard
Keep cached dashboard data visible while reconnecting after transient tab-resume fetch failures.

- detect likely tab suspension and visibility-resume fetch errors across dashboard data hooks
- suppress transient "Failed to fetch" errors when cached project and node data already exist
- show a "Connecting…" executor status state instead of surfacing raw resume-time fetch errors
- add dashboard tests covering visibility suspension handling and executor reconnect rendering
- add a patch changeset for the published CLI package

Files changed:
 .changeset/tame-tab-resume-fetch.md                |   5 +
 packages/dashboard/app/App.tsx                     |  16 ++-
 .../dashboard/app/components/ExecutorStatusBar.css |  19 ++-
 .../dashboard/app/components/ExecutorStatusBar.tsx |  12 ++
 .../__tests__/ExecutorStatusBar.test.tsx           |  20 ++-
 .../dashboard/app/hooks/__tests__/useNodes.test.ts | 149 ++++++++++++++++++++-
 .../app/hooks/__tests__/useProjects.test.ts        |  72 +++++++++-
 .../hooks/__tests__/visibilitySuspension.test.ts   |  13 ++
 packages/dashboard/app/hooks/useExecutorStats.ts   |  15 ++-
 .../dashboard/app/hooks/useManagedDockerNodes.ts   |  25 +++-
 packages/dashboard/app/hooks/useMeshState.ts       |  25 +++-
 packages/dashboard/app/hooks/useNodes.ts           |  25 +++-
 packages/dashboard/app/hooks/useProjectHealth.ts   |  18 ++-
 packages/dashboard/app/hooks/useProjects.ts        |  27 +++-
 packages/dashboard/app/hooks/useUsageData.ts       |  24 +++-
 .../dashboard/app/hooks/visibilitySuspension.ts    |   4 +
 16 files changed, 435 insertions(+), 34 deletions(-)

Fusion-Task-Id: FN-6197

Fusion-Task-Lineage: 834f56d8-8391-414f-8cbd-7e626c5724d0
2026-06-10 09:21:48 -07:00
gsxdsm
d9d67fb7ff FN-6196: gate compound engineering built-in workflow on plugin install
Hide the compound engineering built-in workflow unless its plugin is installed.

- mark builtin:compound-engineering as plugin-gated and exclude it from default enabled built-ins
- filter workflow listing and lookup through plugin installation state, clearing cached definitions on plugin register/unregister
- add coverage for plugin-gated workflow helpers, workflow visibility, and task workflow selection behavior

Files changed:
 .../fn-6196-compound-workflow-plugin-gate.md       |  5 ++
 .../core/src/__tests__/builtin-workflows.test.ts   | 53 +++++++++++++++++++---
 packages/core/src/builtin-workflows.ts             | 16 ++++++-
 packages/core/src/index.ts                         |  2 +
 packages/core/src/store.ts                         | 45 ++++++++++++++++--
 5 files changed, 108 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6196

Fusion-Task-Lineage: aa8fec55-941c-47b8-a203-13799e547d8e
2026-06-10 09:00:24 -07:00
gsxdsm
f7ae18a49f fix: make mobile workflow node details full height 2026-06-10 08:37:01 -07:00
gsxdsm
ae63cd9008 FN-6195: isolate and quarantine flaky db-corruption test
Stop the self-healing DB corruption test from leaking into unrelated tmpdir state while quarantining the known flake.

- mock node:os tmpdir usage so the test runs inside a per-test sandbox and cleans it up after each case
- add the flaky self-healing DB corruption test to the engine default exclude list
- record the quarantine entry and failure context in scripts/lib/test-quarantine.json

Files changed:
 .../__tests__/self-healing-db-corruption.test.ts   | 22 ++++++++++++++++++++++
 packages/engine/vitest.config.ts                   |  1 +
 scripts/lib/test-quarantine.json                   |  8 +++++++-
 3 files changed, 30 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6195

Fusion-Task-Lineage: 60f7f6ca-d14d-42b4-b47e-0644a25e64ae
2026-06-10 08:25:31 -07:00
gsxdsm
bbf3de97a0 FN-6193: guard merger settings lookup for deleted tasks
Keep AI merge commit finalization running when the task disappears during settings resolution.

- fall back to a synthetic task stub before merging effective settings in runAiAgentForCommit
- add an engine regression test covering deleted-task settings degradation
- add a patch changeset for the published CLI package

Files changed:
 .changeset/fn-6193-merger-deleted-task.md          |  5 +++
 .../src/__tests__/merger-settings-degrade.test.ts  | 43 ++++++++++++++++++++++
 packages/engine/src/merger.ts                      |  3 +-
 3 files changed, 50 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6193

Fusion-Task-Lineage: 1d63d24e-1321-450c-95c9-ffc058fd8387
2026-06-10 08:07:25 -07:00
gsxdsm
529851a8fe FN-6191: unquarantine WorkflowNodeEditor inspector test
Rescue the WorkflowNodeEditor quarantine by waiting for inspector fields before asserting.

- make the foreach inspector Mode assertion wait for the panel to finish rendering
- wait for the code node Source and Timeout inputs before editing them to avoid the inspector race
- remove WorkflowNodeEditor.test.tsx from the dashboard quarantine config and ledger

Files changed:
 .../app/components/__tests__/WorkflowNodeEditor.test.tsx          | 6 +++---
 packages/dashboard/vitest.config.ts                               | 4 +---
 scripts/lib/test-quarantine.json                                  | 8 +-------
 3 files changed, 5 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6191

Fusion-Task-Lineage: 57fb1dcc-3e50-4ba1-8488-fcff204c1d76
2026-06-10 07:11:19 -07:00
gsxdsm
49fdd8f41f FN-6190: replace remaining raw rgba styles with color-mix tokens
Tokenize the last non-token dashboard rgba() styles and guard them with regression coverage.

- replace remaining modal, sidebar, tooltip, dependency dropdown, and refine menu raw rgba() usages in styles.css with color-mix() design tokens
- align overlay, background, and shadow treatments with existing semantic CSS variables instead of hard-coded rgba() values
- add a CSS fixture regression test that bans non-:root raw rgba() usage and verifies the converted selectors stay tokenized

Files changed:
 .../__tests__/styles-css-rgba-tokenization.test.ts | 122 +++++++++++++++++++++
 packages/dashboard/app/styles.css                  |  14 +--
 2 files changed, 129 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6190

Fusion-Task-Lineage: 478465a7-8ec4-4482-8e1c-478d86c1ac08
2026-06-10 06:48:56 -07:00
gsxdsm
f79adafcc1 FN-6189: add moved-task coverage to GitHub delete test
Extend the delete-flow regression test to cover tasks that pass through active workflow states before completion.

- move the tracked task through todo and in-progress before marking it done
- verify the delete-path close behavior still uses the linked GitHub issue after those state transitions

Files changed:
 packages/dashboard/src/__tests__/github-tracking-delete.test.ts | 2 ++
 1 file changed, 2 insertions(+)

Fusion-Task-Id: FN-6189

Fusion-Task-Lineage: 986497ff-c45c-4c0b-9d50-87d9f6570bf1
2026-06-10 06:21:51 -07:00
gsxdsm
7e903494ec FN-6186: tokenized dashboard accent text colors
Add a dashboard CSS hygiene scan and align accent text colors with the CTA text token.

- add a dashboard CSS hygiene regression scan for recent component styles
- assert tokenized focus styles, mobile breakpoints, and no raw hex or rgba colors in scanned CSS
- replace hardcoded white text with var(--cta-text) in background task, pull request, task card, and task field accent surfaces

Files changed:
 .../app/__tests__/css-hygiene-scan.test.ts         | 191 +++++++++++++++++++++
 .../app/components/BackgroundTasksIndicator.css    |   2 +-
 .../dashboard/app/components/PullRequestView.css   |   2 +-
 packages/dashboard/app/components/TaskCard.css     |   2 +-
 .../dashboard/app/components/TaskFieldsSection.css |   2 +-
 5 files changed, 195 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6186

Fusion-Task-Lineage: c579bcda-01f9-4495-bf59-78d1dfef816c
2026-06-10 06:02:12 -07:00
gsxdsm
4032a35a2f FN-6188: harden AI merge temp worktree cleanup
Improve AI merge temp worktree cleanup and add recovery coverage.

- audit AI merge clean-room cleanup success and failure paths, including stderr/code details
- sweep stale fusion-ai-merge temp directories from tmpdir() during self-healing with active-session safeguards
- document the native temp-dir sweep behavior and add merge cleanup/self-healing regression tests

Files changed:
 docs/architecture.md                               |   1 +
 .../engine/src/__tests__/merger-ai-cleanup.test.ts | 169 +++++++++++++++++
 .../__tests__/self-healing-tempdir-sweep.test.ts   | 200 +++++++++++++++++++++
 packages/engine/src/merger-ai.ts                   |  54 +++++-
 packages/engine/src/run-audit.ts                   |  26 +++
 packages/engine/src/self-healing.ts                | 105 +++++++++++
 6 files changed, 551 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6188

Fusion-Task-Lineage: eae9bcdc-9765-4104-85dc-81bb50445e99
2026-06-10 05:13:40 -07:00
gsxdsm
af0be9dd32 FN-6184: log forwarded vitest wrapper signals
Improve dashboard vitest wrapper diagnostics so transient SIGTERM handling is easier to trace.

- track the last signal and reason forwarded from the heap wrapper to the vitest process group
- log when the wrapper receives SIGINT or SIGTERM and when timeout shutdown escalates
- extend wrapper tests to assert process-group leadership and emitted diagnostic stderr

Files changed:
 .../scripts/__tests__/run-vitest-with-heap.test.ts | 25 +++++++++++++++++++---
 .../dashboard/scripts/run-vitest-with-heap.mjs     | 19 ++++++++++++----
 2 files changed, 37 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6184

Fusion-Task-Lineage: b276d88e-a22d-4fdf-a533-c4b0aa4e199d
2026-06-10 01:23:59 -07:00
gsxdsm
fc9f6fe271 FN-6185: replace dashboard rgba fallbacks with color-mix
Convert remaining dashboard component rgba() fallbacks to color-mix() and extend the audit to cover the touched stylesheets.

- replace rgba() fallback colors with color-mix() in language selector, pull request, workflow, and settings component CSS
- expand the dashboard color tokenization audit to include the newly cleaned component stylesheets
- make the audit resolve settings component CSS from nested paths so SettingsFieldRow coverage works

Files changed:
 .../dashboard-component-color-tokenization.test.ts | 31 ++++++++++++++++------
 .../dashboard/app/components/LanguageSelector.css  |  2 +-
 .../dashboard/app/components/PullRequestView.css   | 20 +++++++-------
 .../app/components/WorkflowFieldsPanel.css         |  2 +-
 .../app/components/WorkflowNodeEditor.css          |  4 +--
 .../app/components/WorkflowSettingsPanel.css       |  2 +-
 .../app/components/settings/SettingsFieldRow.css   |  2 +-
 7 files changed, 39 insertions(+), 24 deletions(-)

Fusion-Task-Id: FN-6185

Fusion-Task-Lineage: b1938669-5ebb-4569-864b-bd64543ec843
2026-06-10 01:10:11 -07:00
gsxdsm
1c69ea78be FN-6173: fix CLI stale constructor mocks and plugin SDK shims
Tighten CLI retry behavior and restore constructor-safe test/runtime wiring.

- move CLI merge retries back to todo before clearing retry metadata so resets persist
- add a plugin SDK runtime shim for @fusion/core board actions and alias it in the CLI bundle
- harden CLI daemon, serve, dashboard, research, and task tests against stale non-constructible mocks
- add a patch changeset for the published CLI package

Files changed:
 .changeset/fn-6173-cli-fixes.md                    |   5 +
 packages/cli/src/__tests__/task-retry.test.ts      |   4 +-
 packages/cli/src/commands/__tests__/daemon.test.ts | 182 ++++++++++--------
 .../cli/src/commands/__tests__/dashboard.test.ts   |  69 ++++---
 .../cli/src/commands/__tests__/research.test.ts    |  27 ++-
 packages/cli/src/commands/__tests__/serve.test.ts  | 204 ++++++++++++---------
 packages/cli/src/commands/__tests__/task.test.ts   |  61 +++---
 packages/cli/src/commands/task.ts                  |  15 +-
 packages/cli/src/plugin-sdk-core-runtime-shim.ts   |  33 ++++
 packages/cli/tsup.config.ts                        |   7 +
 10 files changed, 385 insertions(+), 222 deletions(-)

Fusion-Task-Id: FN-6173

Fusion-Task-Lineage: 50bdbadd-39f7-4b43-bcf8-3891271917db
2026-06-10 01:07:48 -07:00
gsxdsm
5b5cd77021 FN-6177: remove queued-concurrency scheduler audit
Remove the write-only queued-concurrency scheduler audit and its stale documentation.

- delete scheduler:dispatch-queued-concurrency audit emission and memo bookkeeping
- keep queued concurrency log dedupe coverage while removing audit-specific scheduler test assertions
- update architecture docs to describe queued concurrency diagnostics as log output only

Files changed:
 docs/architecture.md                            |  4 +-
 packages/engine/src/__tests__/scheduler.test.ts | 33 ----------------
 packages/engine/src/scheduler.ts                | 51 -------------------------
 3 files changed, 2 insertions(+), 86 deletions(-)

Fusion-Task-Id: FN-6177

Fusion-Task-Lineage: e4516b41-5525-4e26-9602-772302d63f3d
2026-06-10 00:39:22 -07:00
gsxdsm
5e35385594 FN-6183: preserve mobile mailbox scroll on refresh
Keep the mobile mailbox list anchored after refreshes and SSE updates.

- capture the mobile mailbox content scroll position before inbox, outbox, agent, and approval reloads
- restore the saved scroll position after refreshed mailbox data renders and wire the content container through a ref
- allow vertical scrolling in the mailbox view content area and cover the SSE refresh behavior with a mobile regression test

Files changed:
 packages/dashboard/app/components/MailboxModal.css |  3 +-
 packages/dashboard/app/components/MailboxView.tsx  | 58 +++++++++++++++++++---
 .../app/components/__tests__/MailboxView.test.tsx  | 35 +++++++++++++
 3 files changed, 89 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6183

Fusion-Task-Lineage: ea8be80b-4834-4b77-96cd-254e6b0b0795
2026-06-10 00:25:10 -07:00
gsxdsm
c9d48fb750 FN-6180: fix stale dashboard asset reload handling
Prevent rebuilt dashboard tabs from reusing stale cached assets after a deploy.

- revalidate service-worker asset requests against the network before falling back to cache and bump the cache version
- suppress repeated version-change reloads for the same remote build and cover the new behavior with dashboard tests
- update engine heartbeat test expectations for summarized task creation metadata and add the published package changeset

Files changed:
 .changeset/fn-blank-page-service-worker-assets.md  |  3 ++
 packages/dashboard/app/__tests__/pwa.test.ts       | 11 ++++++
 packages/dashboard/app/__tests__/versionCheck.test.ts   | 28 ++++++++++++++
 packages/dashboard/app/public/sw.js                | 37 +++++++++++++++++-
 packages/dashboard/app/versionCheck.ts             | 45 ++++++++++++++++++++++
 packages/engine/src/__tests__/heartbeat-executor.test.ts |  3 +-
 packages/engine/src/__tests__/heartbeat-session-prompt.test.ts |  7 +++-
 7 files changed, 131 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6180

Fusion-Task-Lineage: 4f07e5f0-56c7-4241-8719-f576dfd8613e
2026-06-10 00:20:35 -07:00
gsxdsm
17363928e9 FN-6178: hide chat sidebar when tablet keyboard opens
Keep the chat sidebar from crowding tablet chat while the software keyboard is open.

- extend mobile keyboard detection so tablet chat can react to visual viewport keyboard changes
- hide the chat sidebar and resize handle while the tablet keyboard is open, then restore prior visibility when it closes
- add regression coverage for tablet keyboard behavior plus desktop and mobile guardrails

Files changed:
 packages/dashboard/app/components/ChatView.tsx     |  39 +++++-
 packages/dashboard/app/components/__tests__/ChatView.mobile-render.test.tsx      | 139 ++++++++++++++++++++-
 packages/dashboard/app/hooks/useMobileKeyboard.ts  |   7 +-
 3 files changed, 171 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-6178

Fusion-Task-Lineage: 7acdb76a-135f-4b9c-ab50-708eec03b2c6
2026-06-10 00:16:35 -07:00
gsxdsm
de7b1109e2 FN-6179: fix tablet nodes overlay stacking
Prevent the NodesView tablet overlay from letting underlying content bleed through.

- make the tablet nodes management overlay fixed, fullscreen, and scrollable with the app background
- add a regression test that asserts the tablet overlay media query and rule properties
- add a patch changeset for the published CLI package bundle

Files changed:
 .changeset/fn-6179-tablet-nodes-overlay.md         |  5 +++++
 packages/dashboard/app/components/NodesView.css    | 12 ++++++++++-
 .../app/components/__tests__/NodesView.test.tsx    | 23 ++++++++++++++++++++--
 3 files changed, 37 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6179

Fusion-Task-Lineage: 9455b38e-c32f-4865-917a-a06c1cb38840
2026-06-09 23:52:37 -07:00
gsxdsm
9b88c0e307 FN-6176: update workflow-definition-store tests for builtin PR fragment
Adjust workflow-definition-store expectations to include the built-in PR fragment.

- expect builtin:pr-workflow in fragment-filtered workflow definition results
- allow built-in workflow entries to be either workflow or fragment kinds
- verify fragment filtering and cache regression coverage include the PR lifecycle built-in

Files changed:
 packages/core/src/__tests__/workflow-definition-store.test.ts | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6176

Fusion-Task-Lineage: fca73dec-060c-4935-9f03-67299d99983f
2026-06-09 23:43:24 -07:00
gsxdsm
e326c5e8db FN-6174: remove overlap priority inversion audit
Remove the unused scheduler overlap-priority inversion audit path.

- drop the scheduler memoization and audit emission for overlap-priority inversion blockers
- delete the reliability interaction test that only covered the removed audit behavior
- update architecture documentation to note the audit removal and keep the overlap deferral rule

Files changed:
 docs/architecture.md                               |   3 +-
 packages/engine/src/__tests__/reliability-interactions/scheduler-overlap-priority-inversion.test.ts   | 212 ---------------------
 packages/engine/src/scheduler.ts                   |  51 -----
 3 files changed, 1 insertion(+), 265 deletions(-)

Fusion-Task-Id: FN-6174

Fusion-Task-Lineage: 3062b405-1f1d-473d-a02f-09a1077376c0
2026-06-09 23:37:31 -07:00
gsxdsm
b84f416e07 FN-6175: stabilize TerminalModal mobile tab regression tests
Harden TerminalModal mobile keyboard regression coverage against async tab setup and xterm mock issues.

- add missing xterm terminal mock methods used by mobile tab interactions
- replace anonymous constructor mock implementations with named function mocks for Terminal and FitAddon
- wait for second-session callbacks before simulating viewport and keyboard transitions in mobile tab-switch tests

Files changed:
 packages/dashboard/app/components/__tests__/TerminalModal.test.tsx | 48 ++++++++++++++++++----
 1 file changed, 39 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6175

Fusion-Task-Lineage: fc95f3d6-586a-475c-a226-be1a57c88ff4
2026-06-09 23:32:57 -07:00
gsxdsm
1c875f1704 FN-6172: fix skill diagnostics logger assertion
Update the skill diagnostics test to assert against the structured logger surface that now emits the diagnostics output.

- spy on piLog.log instead of piLog.warn in the structured logger diagnostics test
- keep the existing [skills] and [executor] assertions while matching the current logging path

Files changed:
 packages/engine/src/__tests__/pi-create-fn-agent.test.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6172

Fusion-Task-Lineage: e52023f7-6c18-435d-b2c6-bd7f7024b75f
2026-06-09 23:26:13 -07:00
gsxdsm
827b7d934d FN-6171: move GitHub tracking below prompt details
Move the task detail modal's GitHub tracking section to render after the prompt/spec content.

- relocate the GitHub tracking section in TaskDetailModal so it appears beneath prompt details in read mode
- preserve the existing GitHub tracking controls, status, and expand/collapse behavior while changing only section order
- add a regression test that asserts the prompt content appears before the GitHub tracking section

Files changed:
 .../dashboard/app/components/TaskDetailModal.tsx   | 274 ++++++++++-----------
 ...lModal.inline-editing-and-integrations.test.tsx |  28 +++
 2 files changed, 165 insertions(+), 137 deletions(-)

Fusion-Task-Id: FN-6171

Fusion-Task-Lineage: dac8ac54-655d-4403-9e7d-6aad446da793
2026-06-09 23:21:46 -07:00
gsxdsm
d7e14542a9 FN-6170: make mobile nodes view fullscreen
Make the mobile Nodes screen open as a full-screen overlay above the header and nav.

- add a mobile-only fixed fullscreen overlay style for the nodes management panel
- preserve safe-area spacing and scroll behavior while keeping the overlay above mobile navigation
- add a NodesView regression test that asserts the mobile overlay CSS contract and close control rendering

Files changed:
 .changeset/fn-6170-mobile-nodes-fullscreen.md      |  5 +++
 packages/dashboard/app/components/NodesView.css    | 11 +++++
 .../app/components/__tests__/NodesView.test.tsx    | 52 ++++++++++++++++++++++
 3 files changed, 68 insertions(+)

Fusion-Task-Id: FN-6170

Fusion-Task-Lineage: 16995d9f-6b5e-4f15-9367-7eccbd3153d0
2026-06-09 23:16:11 -07:00
gsxdsm
3f6e1c6e40 FN-6169: open script commands in a new terminal tab
Open fresh tabs for follow-up script launches instead of reusing the current terminal.

- track whether an initial command arrived with modal open versus after the terminal was already active
- create a new terminal tab for later script commands, wait for that tab to become active, then send the command there
- expand TerminalModal coverage for first-open versus follow-up script execution and clarify modal-manager script handoff expectations

Files changed:
 packages/dashboard/app/components/TerminalModal.tsx     |  80 ++++++++++-
 .../components/__tests__/TerminalModal.test.tsx    | 150 ++++++++++++++++++---
 .../app/hooks/__tests__/useModalManager.test.ts    |   4 +-
 3 files changed, 207 insertions(+), 27 deletions(-)

Fusion-Task-Id: FN-6169

Fusion-Task-Lineage: a7e57a9b-dc3a-432f-bff1-195b62555852
2026-06-09 23:03:51 -07:00
gsxdsm
49cfa7fe88 FN-6165: fix builtin workflow prompt expansion
Keep builtin workflow prompts expandable while preserving read-only behavior.

- move the builtin-disabled fieldset so the prompt expand control stays clickable
- mark inline and fullscreen builtin prompt textareas read-only instead of disabling them
- add coverage for desktop and mobile builtin prompt expansion behavior in WorkflowNodeEditor

Files changed:
 .../app/components/WorkflowNodeEditor.tsx          |  7 +++
 .../__tests__/WorkflowNodeEditor.test.tsx          | 61 ++++++++++++++++++++++
 2 files changed, 68 insertions(+)

Fusion-Task-Id: FN-6165

Fusion-Task-Lineage: 02b1dd9f-6034-46a4-8790-75f1170ddb84
2026-06-09 22:49:35 -07:00
gsxdsm
7960789d37 FN-6167: fix stale mobile modal navigation history
Keep modal history entries in sync so mobile swipe-back reliably closes reopened task detail views.

- add removeNav support to navigation history and ignore self-triggered popstate callbacks
- route modal and overlay programmatic close handlers through navigation-aware wrappers
- add regression coverage for close-and-reopen mobile detail flows and document the stale stack bug

Files changed:
 .../navigation-history-stale-modal-stack.md        |  85 +++++++++++++
 packages/dashboard/app/App.tsx                     |  35 ++++--
 packages/dashboard/app/components/AppModals.tsx    | 137 +++++++++++++++++----
 .../app/components/__tests__/AppModals.test.tsx    |   5 +-
 .../__tests__/navigation-history.test.tsx          | 113 ++++++++++++++++-
 .../hooks/__tests__/useNavigationHistory.test.ts   |  98 +++++++++++++++
 .../dashboard/app/hooks/useNavigationHistory.ts    |  55 ++++++++-
 7 files changed, 494 insertions(+), 34 deletions(-)

Fusion-Task-Id: FN-6167

Fusion-Task-Lineage: 086d60ba-7e3d-4e83-b9b4-37ec49b06393
2026-06-09 22:44:30 -07:00
gsxdsm
1b7e52ea99 FN-6168: expose workflow routing in triage
Add workflow discovery, selection, and investigation-task routing guidance to triage.

- document workflow routing guidance in standard and fast triage prompts
- add workflow list/select tools to triage sessions for task specification
- pass workflow_id and noCommitsExpected through fn_task_create for child tasks
- cover prompt/tool availability and child-task routing in triage tests
- add a changeset and workflow docs for triage workflow selection behavior

Files changed:
 .changeset/fn-6168-triage-workflow-routing.md |  5 ++
 docs/workflow-steps.md                        |  2 +
 packages/engine/src/__tests__/triage.test.ts  | 93 +++++++++++++++++++++++++++
 packages/engine/src/triage.ts                 | 27 ++++++++
 4 files changed, 127 insertions(+)

Fusion-Task-Id: FN-6168

Fusion-Task-Lineage: acfcebd5-bb9c-42ba-90a0-e9bcb90216b3
2026-06-09 22:34:34 -07:00
gsxdsm
4d7c51d526 FN-6164: route agent task title summarization through the store
Ensure agent-created tasks use store-managed title summarization before creation hooks fire.

- resolve a store-managed summarizer when task creation explicitly requests summarization
- defer the task-created hook until store summarization finishes and persists the generated title
- stop agent tools from wiring ad hoc summarizer callbacks and pass resolved settings through to createTask
- update core and engine tests to cover store-managed summarization, hook deferral, and inherited settings expectations

Files changed:
 packages/core/src/__tests__/store-create.test.ts  | 83 +++++++++++++++++++++++
 packages/core/src/store.ts                        |  7 +-
 packages/engine/src/__tests__/agent-tools.test.ts | 70 +++++++++----------
 packages/engine/src/__tests__/triage.test.ts      | 12 +++-
 packages/engine/src/agent-tools.ts                | 10 +--
 5 files changed, 136 insertions(+), 46 deletions(-)

Fusion-Task-Id: FN-6164

Fusion-Task-Lineage: f8da7bd7-b5d4-4505-98ed-60c19d82904c
2026-06-09 22:18:48 -07:00
gsxdsm
c27c321a8b FN-6160: fix mobile quick-entry touch handling
Let mobile Quick Entry actions rely on native tap-to-click behavior again.

- remove the manual quick-entry action button click dispatch on touchend
- switch mobile quick-entry action buttons to touch-action: manipulation
- update QuickEntryBox mobile touch tests and add a patch changeset for @runfusion/fusion

Files changed:
 .changeset/tiny-mobile-clicks.md                           |  5 +++++
 packages/dashboard/app/components/QuickEntryBox.css        |  4 ++--
 packages/dashboard/app/components/QuickEntryBox.tsx        |  9 ---------
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx        | 14 +++++++++++++-
 4 files changed, 20 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-6160

Fusion-Task-Lineage: a8c13f7e-fb86-4087-a516-a6e16dac2092
2026-06-09 22:13:54 -07:00
gsxdsm
e883a8df01 FN-6166: allow retry for stranded in-review tasks
Handle in-review tasks with status none as retryable when execution or merge retry state is stranded.

- treat in-review tasks with status "none" plus incomplete execution or prior merge attempts as retryable across the CLI, extension, and dashboard routes
- send stranded execution retries back to todo with preserved progress and keep stranded merge retries in-review while clearing merge retry state
- add CLI, extension, and dashboard regression coverage and publish a patch changeset for @runfusion/fusion

Files changed:
 .changeset/fuzzy-ravens-retry.md                   |   5 +
 packages/cli/src/__tests__/extension.test.ts       | 147 +++++++++++++++++++++
 packages/cli/src/commands/__tests__/task.test.ts   | 147 +++++++++++++++++++--
 packages/cli/src/commands/task.ts                  |  59 ++++++++-
 packages/cli/src/extension.ts                      |  39 ++++--
 packages/dashboard/src/__tests__/routes-tasks-ops.test.ts         | 134 +++++++++++++++++++
 packages/dashboard/src/routes/register-task-workflow-routes.ts    |  30 +++--
 7 files changed, 528 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-6166

Fusion-Task-Lineage: cf78b180-ded4-4b6f-8e98-35e6f309e1d4
2026-06-09 22:11:21 -07:00
gsxdsm
5a353317c4 Readme update and settings cleanup 2026-06-09 21:43:45 -07:00
gsxdsm
a5393b1126 FN-6162: keep mobile workflow editor full screen
Keep the mobile workflow editor stage from stretching the canvas wrapper and shrinking the full-screen view.

- adjust the mobile editor-stage canvas wrapper flex rule to avoid consuming the full stage height
- extend the WorkflowNodeEditor mobile CSS contract test to lock the updated flex behavior

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

Fusion-Task-Id: FN-6162

Fusion-Task-Lineage: b09d3317-cf22-4fbf-a732-9f4829c1cfd8
2026-06-09 21:36:53 -07:00
gsxdsm
4435ca2c54 FN-6158: handle Codex auth-tier model incompatibility
Gracefully recover from unsupported Codex model selections on ChatGPT-account auth tiers.

- detect Codex and general model-auth-tier incompatibility errors as retryable model-selection failures
- trigger configured fallback models during session creation and prompt-time retries, with actionable operator guidance when no fallback works
- document the expanded fallback behavior and add engine regression coverage plus a CLI changeset

Files changed:
 .changeset/fn-6158-model-compatibility-fallback.md |   5 +
 docs/settings-reference.md                         |   2 +-
 .../pi-prompt-session-and-check-recursion.test.ts  |  25 ++++
 packages/engine/src/__tests__/pi.test.ts           | 136 ++++++++++++++++++++-
 .../src/__tests__/transient-error-detector.test.ts |  24 ++++
 packages/engine/src/pi.ts                          |  21 +++-
 packages/engine/src/transient-error-detector.ts    |  24 ++++
 7 files changed, 234 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6158
Fusion-Task-Lineage: 3e91f647-40f1-4296-afa4-40861310e1c1
2026-06-09 21:16:42 -07:00
gsxdsm
1c49ae6b7c FN-6153: fix mobile quick-entry toggle touch handling
Prevent mobile quick-entry action taps from being swallowed by browser touch gestures.

- apply a mobile touch-action override to quick-entry action containers and their descendants
- keep the existing mobile button sizing while removing the redundant per-button touch-action rule
- add a regression test that inspects the mobile CSS rule covering quick-entry action controls

Files changed:
 .changeset/quick-entry-mobile-touch.md                  |  5 +++++
 packages/dashboard/app/components/QuickEntryBox.css     |  8 ++++----
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 17 +++++++++++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6153

Fusion-Task-Lineage: e915bb06-2c45-4d96-b719-2b7efcf6f986
2026-06-09 21:12:37 -07:00
gsxdsm
235ad8f9ad FN-6156: rescue board workflow toolbar test
Rescue the dashboard board workflow toolbar coverage and rotate the active quarantine.

- wait for the workflow toolbar itself before asserting board workflow actions in Board.test.tsx
- remove Board.test.tsx from the dashboard vitest quarantine list
- quarantine WorkflowNodeEditor.test.tsx with an updated ledger entry for the newly observed flake

Files changed:
 packages/dashboard/app/components/__tests__/Board.test.tsx | 4 ++--
 packages/dashboard/vitest.config.ts                        | 4 +++-
 scripts/lib/test-quarantine.json                           | 4 ++--
 3 files changed, 7 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6156

Fusion-Task-Lineage: c91c3542-fdec-426a-8e63-3edb3f5d34e5
2026-06-09 20:55:22 -07:00
gsxdsm
dd27a633c5 FN-6157: stabilize WorkflowNodeEditor U8 authoring test
Guard the U8 authoring workflow test against editor hydration races.

- wait for the workflow column panel before opening the Code palette
- wait for the code node to render before reading the TypeScript source textarea
- document the flake class to align this test with the existing palette-add race fix

Files changed:
 .../dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6157

Fusion-Task-Lineage: 4009cbb5-8217-4eae-8889-e047ec31bee3
2026-06-09 20:52:46 -07:00
gsxdsm
59ee449ba1 FN-6155: render prompt fullscreen editor in a portal
Keep the workflow prompt expander usable in the fullscreen editor across desktop and mobile.

- render the expanded prompt and gate editor in a document-body portal instead of reusing the inline inspector container
- keep the inline prompt textarea compact while wiring fullscreen edits, focus, and collapse controls through the portal overlay
- extend workflow node editor coverage for desktop and mobile fullscreen expand, collapse, Escape, empty prompt, and edit persistence flows

Files changed:
 packages/dashboard/app/components/WorkflowNodeEditor.tsx          |  81 +++++++------
 packages/dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx          | 127 +++++++++++++++++++--
 2 files changed, 164 insertions(+), 44 deletions(-)

Fusion-Task-Id: FN-6155

Fusion-Task-Lineage: 5d0a6367-932a-4fbc-bded-ebad3073d1a6
2026-06-09 20:41:49 -07:00
gsxdsm
a2b1f73794 FN-6152: reset dashboard route test mocks between cases
Tighten dashboard route tests by resetting shared request and mock state between cases.

- add default request headers and per-test chat SSE mock cleanup to prevent state leakage
- restore mocked globals after GitHub review-refresh and settings route tests
- clear secrets sync remote-fetch mock history before each test run

Files changed:
 packages/dashboard/src/__tests__/chat-routes.test.ts         | 10 ++++++++++
 packages/dashboard/src/__tests__/routes-github.test.ts       |  4 ++++
 packages/dashboard/src/__tests__/routes-secrets-sync.test.ts |  1 +
 packages/dashboard/src/__tests__/routes-settings.test.ts     |  4 ++++
 4 files changed, 19 insertions(+)

Fusion-Task-Id: FN-6152

Fusion-Task-Lineage: c7db7cf2-ea2e-4c76-9fc5-5679cc708fe3
2026-06-09 20:29:11 -07:00
gsxdsm
7901607b68 FN-6154: let the mobile node editor fill the screen
Let the mobile workflow node editor inspector use the full available height.

- remove the mobile inspector max-height cap so the editor stage can expand full screen
- update the WorkflowNodeEditor mobile CSS contract test to assert the new max-height rule
- quarantine the unrelated flaky dashboard Board test and record it in the quarantine ledger

Files changed:
 packages/dashboard/app/components/WorkflowNodeEditor.css          | 1 +
 .../app/components/__tests__/WorkflowNodeEditor.css.test.ts       | 1 +
 packages/dashboard/vitest.config.ts                               | 2 +-
 scripts/lib/test-quarantine.json                                  | 8 +++++++-
 4 files changed, 10 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6154

Fusion-Task-Lineage: 14928ad1-dc84-461b-9adf-b5ee079e3b0d
2026-06-09 20:21:58 -07:00
gsxdsm
edde74d568 FN-6146: harden dashboard test mocks and request helper
Stabilize dashboard tests against constructor and request-harness edge cases.

- update dashboard route and service tests to use constructor-safe mock implementations and reset targeted spies between cases
- make the test request helper resume its mock socket, always report successful writes, and preserve end callbacks
- tighten board workflow route assertions around explicit workflow-column flag disabling and cache-bounded slim task snapshots

Files changed:
 .../__tests__/auth-middleware-integration.test.ts  |  4 ++--
 .../src/__tests__/browse-directory-routes.test.ts  |  4 ++--
 packages/dashboard/src/__tests__/chat.test.ts      |  3 ++-
 .../src/__tests__/discovery-routes.test.ts         |  4 ++--
 .../src/__tests__/docker-node-routes.test.ts       |  4 ++--
 .../__tests__/experiment-routes.finalize.test.ts   |  2 +-
 .../src/__tests__/github-issue-comment.test.ts     |  4 ++--
 .../dashboard/src/__tests__/github-poll.test.ts    |  4 ++--
 .../__tests__/github-source-issue-close.test.ts    |  4 ++--
 .../github-source-issue-reconciler.test.ts         |  4 ++--
 .../src/__tests__/github-tracking-comments.test.ts |  4 ++--
 .../src/__tests__/github-tracking-delete.test.ts   |  4 ++--
 .../src/__tests__/github-tracking-hook.test.ts     |  4 ++--
 ...ithub-tracking-periodic-reconcile-sweep.test.ts | 12 +++++-----
 .../__tests__/github-tracking-reconciler.test.ts   |  4 ++--
 .../src/__tests__/github-tracking-state.test.ts    |  4 ++--
 .../src/__tests__/github-tracking-unlink.test.ts   |  4 ++--
 .../src/__tests__/github-tracking.test.ts          |  4 ++--
 .../dashboard/src/__tests__/mesh-routes.test.ts    |  4 ++--
 .../dashboard/src/__tests__/node-routes.test.ts    |  4 ++--
 .../src/__tests__/pi-extensions-routes.test.ts     | 10 ++++-----
 .../src/__tests__/plugin-routes.routes.test.ts     |  4 ++--
 .../dashboard/src/__tests__/plugin-routes.test.ts  |  4 ++--
 .../__tests__/project-pause-resume-routes.test.ts  |  4 ++--
 .../dashboard/src/__tests__/project-routes.test.ts |  4 ++--
 .../dashboard/src/__tests__/routes-agents.test.ts  |  4 ++--
 .../dashboard/src/__tests__/routes-auth.test.ts    |  6 +++--
 .../src/__tests__/routes-automation.test.ts        |  4 ++--
 .../dashboard/src/__tests__/routes-git.test.ts     |  4 ++--
 .../dashboard/src/__tests__/routes-github.test.ts  |  4 ++--
 .../src/__tests__/routes-planning-tracking.test.ts |  1 +
 .../src/__tests__/routes-planning.test.ts          |  4 ++--
 .../dashboard/src/__tests__/routes-proxy.test.ts   |  8 +++----
 .../src/__tests__/routes-settings.test.ts          |  4 ++--
 .../dashboard/src/__tests__/routes-system.test.ts  |  7 ++++--
 .../src/__tests__/routes-tasks-ops.test.ts         |  4 ++--
 .../dashboard/src/__tests__/routes-tasks.test.ts   |  4 ++--
 .../src/__tests__/session-resume-history.test.ts   |  1 +
 .../dashboard/src/__tests__/setup-routes.test.ts   |  8 +++----
 .../shared-branch-group-entry-points.test.ts       |  4 ++--
 .../routes/__tests__/board-workflows-route.test.ts | 26 +++++++++++++---------
 .../src/routes/__tests__/custom-providers.test.ts  |  4 ++--
 .../routes/__tests__/docker-node-routes.test.ts    |  4 ++--
 .../__tests__/register-docker-node-routes.test.ts  |  6 ++---
 .../register-docker-provisioning-routes.test.ts    | 10 ++++-----
 packages/dashboard/src/test-request.ts             |  7 ++++--
 46 files changed, 126 insertions(+), 109 deletions(-)

Fusion-Task-Id: FN-6146

Fusion-Task-Lineage: 989e9da3-92ed-43bd-a505-6114de4f1120
2026-06-09 20:08:18 -07:00
gsxdsm
03f1701cdf FN-6150: deflake workflow editor save tests
Wait for workflow editor hydration before exercising save and rename flows.

- wait for the Save action and column inputs to render before editing workflow names
- switch the rename clicks to synchronous lookups after hydration to avoid async race flakiness
- keep the coverage focused on the existing save-and-close and dirty-switch scenarios

Files changed:
 .../app/components/__tests__/WorkflowNodeEditor.test.tsx          | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6150

Fusion-Task-Lineage: 98044a22-3f07-4a58-ad61-19ba6b372565
2026-06-09 19:36:50 -07:00
gsxdsm
477c8f1e03 FN-6149: tokenize bare hex colors in dashboard CSS
Replace hard-coded dashboard hex colors with semantic tokens and guard the cleanup with regression coverage.

- swap bare hex colors in ScriptsModal.css for semantic custom properties
- swap bare hex colors in SettingsSyncLog.css for semantic custom properties
- add regression coverage for bare hex literals outside var() fallbacks in audited dashboard CSS
- add a patch changeset for @runfusion/fusion

Files changed:
 .changeset/fn-6149-css-tokenization.md               |  5 +++++
 .../dashboard-component-color-tokenization.test.ts   | 20 ++++++++++++++++++++
 packages/dashboard/app/components/ScriptsModal.css   |  4 ++--
 .../dashboard/app/components/SettingsSyncLog.css     |  4 ++--
 4 files changed, 29 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6149

Fusion-Task-Lineage: 3a3ae466-7e53-484a-8785-c15a7f83aca7
2026-06-09 18:49:02 -07:00
gsxdsm
4c9d6839bc FN-6148: add mobile GitHub toggle touch coverage
Expand QuickEntryBox mobile touch coverage for the GitHub tracking toggle.

- preserve the mobile quick-entry render helper return value for create payload assertions
- add touch tests for GitHub toggle pressed state, SVG touch targets, submitted overrides, and primary styling
- verify mobile touch can disable GitHub tracking before quick task submission

Files changed:
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 63 +++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6148

Fusion-Task-Lineage: 4a577bc3-bf98-4821-aba2-0c66b99f1e1f
2026-06-09 18:38:40 -07:00
gsxdsm
784f3080a8 FN-6148: fix first click of GitHub tracking icon on mobile
The shared delegated touch handler on .quick-entry-actions already uses
closest("button") to resolve taps that land on child SVG elements — delivered
via FN-6145. This changeset documents the fix scoped to the GitHub tracking
toggle and adds explicit regression test coverage for that control.

Fusion-Task-Id: FN-6148

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 18:24:06 -07:00
gsxdsm
1b68107eea FN-6147: polish simple editor mobile button states
Polish simple workflow editor controls for clearer mobile interaction.

- add hover, focus, and active states to simple editor graph buttons and mobile tab/add controls
- replace hard-coded simple editor spacing with shared spacing tokens for node labels and edge chips
- add CSS contract tests covering the new button state and spacing rules

Files changed:
 .../app/components/MobileWorkflowGraphView.css     |  57 +++++++++++-
 .../app/components/WorkflowNodeEditor.css          |  37 ++++++++
 .../__tests__/MobileWorkflowGraphView.css.test.ts  | 100 +++++++++++++++++++++
 3 files changed, 191 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6147

Fusion-Task-Lineage: 5ef4baeb-ccad-4811-aada-a195ecf8d754
2026-06-09 17:56:24 -07:00
gsxdsm
f26cfe0cb0 FN-6145: fix mobile quick-entry touch targets
Preserve quick-entry mobile touch behavior for Fast and Priority controls.

- treat action touch targets as generic Elements so nested SVG taps still resolve to their parent buttons
- add mobile touch-action styling for quick-entry action buttons to improve tap handling
- extend QuickEntryBox mobile tests to cover Fast toggle, Priority picker, and SVG touch targets

Files changed:
 packages/dashboard/app/components/QuickEntryBox.css     |   5 +
 packages/dashboard/app/components/QuickEntryBox.tsx     |   2 +-
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx    | 117 +++++++++++++++++----
 3 files changed, 102 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-6145

Fusion-Task-Lineage: 2af1c142-25ba-41a8-ba4f-c58e38cc870a
2026-06-09 17:50:46 -07:00
gsxdsm
4f8097000c FN-6144: make mobile node editor inspector fill available height
Let the mobile workflow node editor use the full available screen height.

- replace the mobile inspector max-height cap with flex sizing so the editor stage can expand full screen
- preserve mobile inspector scrolling by setting a zero min-height in the stacked layout
- update the mobile CSS contract test to assert the new flex-based sizing rules

Files changed:
 packages/dashboard/app/components/WorkflowNodeEditor.css               | 3 ++-
 .../dashboard/app/components/__tests__/WorkflowNodeEditor.css.test.ts  | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6144

Fusion-Task-Lineage: 49d06acb-17c6-40fd-9c6d-3af98ddf8f6e
2026-06-09 17:24:49 -07:00