Commit Graph

7611 Commits

Author SHA1 Message Date
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
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
gsxdsm
99661c17fd FN-6143: add fullscreen prompt editor toggle
Add a fullscreen expand/collapse control for workflow prompt editing.

- add inline maximize/minimize controls for workflow prompt and gate editors
- style the fullscreen prompt overlay with responsive spacing and textarea sizing
- cover expand/collapse behavior with prompt-editor tests and add the published package changeset
- keep the mobile send-back promote action visible in task cards

Files changed:
 .changeset/fn-6143-workflow-prompt-fullscreen.md   |   5 +
 packages/dashboard/app/components/TaskCard.css     |   1 +
 packages/dashboard/app/components/WorkflowNodeEditor.css          |  77 ++++++++++++++++
 packages/dashboard/app/components/WorkflowNodeEditor.tsx          |  58 ++++++++++--
 packages/dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx          | 102 +++++++++++++++++++++
 5 files changed, 234 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6143

Fusion-Task-Lineage: 787a33e3-a6fe-44c4-9cb8-c24b3e86e935
2026-06-09 16:49:59 -07:00
gsxdsm
d67f61d03e FN-6135: remove workflow toolbar collapse toggle
Simplify the workflow board toolbar by removing its collapse state and persistence.

- remove the workflow toolbar collapse toggle, handlers, and scoped localStorage persistence from Board
- drop collapse-specific workflow toolbar styling and mobile collapsed-layout rules
- replace collapse-focused board tests with assertions that the toolbar renders without a collapse affordance
- remove the unused workflow toolbar storage key and update project storage expectations

Files changed:
 packages/dashboard/app/components/Board.tsx        | 129 +++++---------
 packages/dashboard/app/components/Lane.css         |  36 ----
 .../app/components/__tests__/Board.test.tsx        | 187 +++------------------
 .../app/utils/__tests__/projectStorage.test.ts     |   3 +-
 packages/dashboard/app/utils/projectStorage.ts     |   1 -
 5 files changed, 60 insertions(+), 296 deletions(-)

Fusion-Task-Id: FN-6135

Fusion-Task-Lineage: 11c17edf-bbed-4ec5-a06e-00a2537ffac1
2026-06-09 16:02:08 -07:00
gsxdsm
cca7a61c4f FN-6142: fix mobile visibility restore scroll anchoring
Restore pinned mobile chat scroll position when visibility-driven refetch hooks fire.

- re-anchor mobile chat to the bottom during visibility/pageshow refetch capture when the user was pinned
- tighten ChatView visibility restore regression tests to assert the synchronous re-anchor path directly
- remove the ChatView rooms test quarantine and restore the dashboard include list entry

Files changed:
 packages/dashboard/app/components/ChatView.tsx          |  6 +++++-
 .../app/components/__tests__/ChatView.rooms.test.tsx    | 17 ++++++++---------
 .../app/components/__tests__/ChatView.test.tsx          |  7 ++++---
 packages/dashboard/vitest.config.ts                     |  2 +-
 scripts/lib/test-quarantine.json                        |  8 +-------
 5 files changed, 19 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-6142

Fusion-Task-Lineage: 2974cf0d-5512-4b24-ab0c-2d2fb63fd41a
2026-06-09 15:52:34 -07:00
gsxdsm
a57167e96a FN-6140: downgrade missing skill diagnostics to info
Reduce noise from missing requested skill messages in agent logs.

- change missing requested skill diagnostics from warning to info in the skill resolver
- update engine tests to expect info-level logging for unresolved requested skills
- preserve the built-in fusion fallback behavior without emitting not-found diagnostics

Files changed:
 packages/engine/src/__tests__/pi.test.ts           |  6 ++--
 packages/engine/src/__tests__/skill-resolver.test.ts    | 42 +++++++++++-----------
 packages/engine/src/skill-resolver.ts              |  2 +-
 3 files changed, 25 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-6140

Fusion-Task-Lineage: 3d2efdcd-8c6d-4fda-b5cb-b85421ac755e
2026-06-09 15:50:53 -07:00
gsxdsm
b7a56cc399 FN-6141: stop treating benign workflow-graph exits as failures
Treat already-finalized or paused workflow-graph exits as benign instead of failure-worthy.

- log info-level benign messages when workflow graph runs end after a task is paused or has already advanced out of in-progress
- keep true in-progress graph failures on the existing failed-and-handoff path with failure logging
- add executor recovery coverage for todo, in-review, done, paused, and genuine failure cases
- add a patch changeset for the published CLI package

Files changed:
 .changeset/fn-6141-benign-graph-exit.md            |   5 +
 .../engine/src/__tests__/executor-recovery.test.ts | 137 ++++++++++++++++++++-
 packages/engine/src/executor.ts                    |  23 ++--
 3 files changed, 150 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-6141

Fusion-Task-Lineage: 8d29159a-8d7a-4e84-b05a-fe83f6ccbb78
2026-06-09 15:27:57 -07:00
gsxdsm
2fe12ad261 FN-6139: remove unused _baseSha parameter
Remove the unused _baseSha parameter from branch authority checks.

- delete the unused optional _baseSha parameter from isBranchAuthoritativeForTask
- keep branch authority behavior unchanged while simplifying the function signature

Files changed:
 packages/engine/src/branch-conflicts.ts | 1 -
 1 file changed, 1 deletion(-)

Fusion-Task-Id: FN-6139

Fusion-Task-Lineage: 349144fd-2f4a-4a19-a13f-14b2786e97ef
2026-06-09 15:21:39 -07:00
gsxdsm
fbc2c37d40 FN-6137: convert PR lifecycle built-in to fragment
Convert the built-in PR lifecycle into a reusable fragment instead of a selectable task workflow.

- mark builtin:pr-workflow as a fragment and exclude fragments from default-enabled built-ins
- hide built-in fragments from the General settings workflow toggles
- update core and dashboard tests to assert fragment behavior and reject task selection of the PR lifecycle fragment
- add a changeset for the published CLI package

Files changed:
 .changeset/pr-lifecycle-fragment.md                |  5 +++++
 .../core/src/__tests__/builtin-workflows.test.ts   | 24 ++++++++++++++++------
 packages/core/src/builtin-workflows.ts             |  7 ++++---
 packages/core/src/store.ts                         |  2 +-
 .../__tests__/WorkflowNodeEditor.test.tsx          |  3 ++-
 .../settings/sections/GeneralSection.tsx           |  4 +++-
 6 files changed, 33 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-6137

Fusion-Task-Lineage: d959ba3b-2e50-4c9b-a1fa-161776939403
2026-06-09 15:19:26 -07:00
gsxdsm
ceec6fa1e4 FN-6138: log missing skill patterns at info level
Downgrade configured-skill pattern misses from warnings to informational diagnostics.

- change missing allowed-skill pattern diagnostics from warning to info in the skill resolver
- update skill resolver tests to expect informational diagnostics and piLog.log output

Files changed:
 packages/engine/src/__tests__/skill-resolver.test.ts | 21 ++++++++++-----------
 packages/engine/src/skill-resolver.ts               |  2 +-
 2 files changed, 11 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-6138

Fusion-Task-Lineage: 4bb7ddf8-5ae8-46c6-8fec-b4940a1bb39f
2026-06-09 15:17:02 -07:00
gsxdsm
b5d19bd480 FN-6134: extend surface-enumeration gates to UI affordance changes
Apply the surface-enumeration review gate to UI affordance add/remove work across triage, review, tests, and docs.

- require triage prompts to add Surface Enumeration guidance for UI affordance add/remove tasks in standard and fast modes
- tighten reviewer guidance to block single-surface UI affordance coverage and leftover shell cleanup gaps
- expand engine prompt tests to cover the new UI affordance gate wording
- document the shared checklist and motivating incidents in AGENTS.md and docs/testing.md

Files changed:
 AGENTS.md                                      |  3 +++
 docs/testing.md                                |  6 +++++-
 packages/engine/src/__tests__/reviewer.test.ts | 26 ++++++++++++++++++++++++--
 packages/engine/src/__tests__/triage.test.ts   | 19 ++++++++++++++++++-
 packages/engine/src/reviewer.ts                |  5 +++--
 packages/engine/src/triage.ts                  | 24 ++++++++++++++----------
 6 files changed, 67 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-6134

Fusion-Task-Lineage: 0bc733eb-d160-48cc-817d-69138290faec
2026-06-09 15:12:26 -07:00
gsxdsm
dfb037edd8 FN-6133: fix workflow toolbar toggle accessibility
Replace the empty workflow toolbar icon toggle with an accessible text control.

- move workflow toolbar collapse/expand handling into shared click and keyboard callbacks
- make the expanded toolbar itself clickable while rendering a focusable "Workflow" label in collapsed mode
- update toolbar styling and Board tests to cover keyboard toggling, single-workflow cases, and the absence of empty icon buttons

Files changed:
 packages/dashboard/app/components/Board.tsx        |  51 ++++++++---
 packages/dashboard/app/components/Lane.css         |  19 +++-
 .../app/components/__tests__/Board.test.tsx        | 100 +++++++++++++++++++--
 3 files changed, 147 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6133

Fusion-Task-Lineage: 6dd217a0-ede0-424a-8ab7-cdde39d2b6ce
2026-06-09 15:05:25 -07:00
gsxdsm
0b589e1f2b FN-6131: move quick entry save and toggles to top
Reorder the Quick Entry action row so the primary create controls appear first.

- move Save, Fast, GitHub, and Priority controls to the start of the Quick Entry actions row
- preserve the existing priority picker behavior while relocating its trigger and portal markup
- update QuickEntryBox tests to assert the new DOM order and keep focus-coverage stable after the reorder

Files changed:
 packages/dashboard/app/components/QuickEntryBox.tsx     | 225 +++++++++++----------
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx    |  47 +++--
 2 files changed, 145 insertions(+), 127 deletions(-)

Fusion-Task-Id: FN-6131

Fusion-Task-Lineage: d95401b9-4440-4c55-ad32-94df7d0c33fe
2026-06-09 15:02:53 -07:00
gsxdsm
7f08845ed5 FN-6130: make compound engineering theme colors dark-mode aware
Align compound engineering dashboard colors with the active theme tokens.

- replace hardcoded and legacy compound engineering CSS colors with dashboard theme tokens
- switch dimmed text treatments from opacity to explicit theme-aware text tokens for light and dark mode
- add regression coverage for token usage in compound engineering styles
- keep branch authority checks compatible with the optional base SHA argument

Files changed:
 packages/engine/src/branch-conflicts.ts            |   1 +
 .../src/dashboard/CompoundEngineeringView.css      | 106 +++++++++++----------
 .../src/dashboard/__tests__/theme-tokens.test.ts   |  97 +++++++++++++++++++
 3 files changed, 153 insertions(+), 51 deletions(-)

Fusion-Task-Id: FN-6130

Fusion-Task-Lineage: 00adc217-0649-4b4f-9b9b-92c551f02926
2026-06-09 14:56:26 -07:00
gsxdsm
e78203e7fb FN-6128: preserve textarea focus on mobile quick-entry buttons
Prevent mobile quick-entry touches from stealing focus from the task textarea.

- intercept touch interactions on quick-entry action buttons before the browser refocuses them
- restore textarea focus after touch-triggered quick-entry actions complete
- avoid autofocus in the deps search input when the textarea is already focused
- add mobile regression coverage across the full quick-entry action button surface, including disabled buttons

Files changed:
 packages/dashboard/app/components/QuickEntryBox.tsx     |  32 +++++-
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx    | 123 +++++++++++++++++++++
 2 files changed, 153 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6128

Fusion-Task-Lineage: 598e6ba5-6e83-426c-9bf2-dd2ac4215092
2026-06-09 14:51:22 -07:00
gsxdsm
5f1fe3f57b FN-6132: remove unused base SHA from branch authority check
Fix the branch authority helper and caller so the squash merge stays lint-clean.

- drop the unused `baseSha` parameter from `isBranchAuthoritativeForTask`
- update the merger authority probe to call the helper with the remaining arguments

Files changed:
 packages/engine/src/branch-conflicts.ts | 1 -
 packages/engine/src/merger.ts           | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

Fusion-Task-Id: FN-6132
Fusion-Task-Lineage: c8d8352d-67f7-498b-8b6d-254375d42417
2026-06-09 14:45:15 -07:00
gsxdsm
6aa17b0444 FN-6129: right-align promote action on task cards
Keep the promote action pinned to the right edge of task card action rows.

- add `margin-left: auto` to the promote action send-back button styling
- preserve right alignment for the mobile action row breakpoint
- add TaskCard coverage for solo and multi-action mobile layouts

Files changed:
 packages/dashboard/app/components/TaskCard.css     |  5 +++
 packages/dashboard/app/components/__tests__/TaskCard.test.tsx     | 40 ++++++++++++++++++++++
 2 files changed, 45 insertions(+)

Fusion-Task-Id: FN-6129
Fusion-Task-Lineage: 70aed0c1-b007-4a71-9755-04535b630888
2026-06-09 14:40:44 -07:00
gsxdsm
576ff7768a fix(FN-6131): stop failing on foreign branch attribution
Treat foreign task-attributed commits in branch ranges as informational instead of blocking worktree acquisition or branch authority checks.

Fusion-Task-Id: FN-6131
2026-06-09 14:32:13 -07:00
gsxdsm
6ec0e2bfb8 fix(FN-6117): correct stacked branch diff counts
Filter active task diff displays to commits attributed to the current task when a branch range includes foreign task commits. This keeps task cards and Changes tabs from showing inherited branch stacks as task-owned file changes.

Fusion-Task-Id: FN-6117
2026-06-09 14:32:13 -07:00
gsxdsm
0b7549a534 FN-6126: enable workflow experimental flags by default
Turn on the workflow rollout flags by default and update docs/tests for the new opt-out behavior.

- default workflowColumns, workflowGraphExecutor, workflowInterpreterDualObserve, and workflowInterpreterAuthoritative to enabled in global settings
- update workflow docs and concepts to describe explicit flag-off overrides instead of default-off rollout gating
- remove redundant demo/test setup that manually enabled workflow columns and keep characterization coverage for both enabled and disabled states
- add a changeset for the published CLI package documenting the default-on workflow rollout

Files changed:
 .changeset/fn-6126-workflow-flags-default-on.md                |  5 +++++
 CONCEPTS.md                                                    |  4 ++--
 demo/seed.ts                                                   |  1 -
 docs/workflow-steps.md                                         | 10 +++++-----
 packages/core/src/__tests__/move-task-characterization.test.ts |  4 +---
 packages/core/src/settings-schema.ts                           |  7 ++++++-
 packages/core/src/types.ts                                     |  4 +++-
 packages/core/src/workflow-columns-settings.ts                 |  4 ++--
 8 files changed, 24 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-6126

Fusion-Task-Lineage: 334283a6-e80a-42d0-bf66-68f88a12e287
2026-06-09 14:10:01 -07:00
gsxdsm
19f8d86152 FN-6124: add dashboard bundle version polling reload
Add periodic bundle version polling so open dashboard tabs refresh after new deployments.

- add a production polling interval to version checks for visible dashboard tabs
- clear installed polling when version-check state resets to avoid duplicate timers in tests/runtime
- expand versionCheck coverage for poll-triggered mismatch detection, cooldown behavior, and cleanup

Files changed:
 packages/dashboard/app/__tests__/versionCheck.test.ts | 115 +++++++++++++++++++++
 packages/dashboard/app/versionCheck.ts             |  27 ++++-
 2 files changed, 140 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6124

Fusion-Task-Lineage: a211fc03-06fd-4142-8878-98ac60b70c13
2026-06-09 14:07:27 -07:00
gsxdsm
c780470378 FN-6127: stabilize dashboard test mocks and isolation
Keep dashboard component tests isolated and aligned with current shared mocks.

- restore the original WebSocket after SessionTerminal tests and switch xterm addon mocks to constructor-shaped fakes
- add missing lucide-react Workflow and Check icon mocks for TaskDetailModal helper coverage
- add a dedicated TaskDetailModal mock coverage test to catch future transitive icon mock gaps

Files changed:
 packages/dashboard/app/components/__tests__/SessionTerminal.mobile.test.tsx       |  5 ++++-
 packages/dashboard/app/components/__tests__/SessionTerminal.test.tsx              | 13 ++++++++-----
 packages/dashboard/app/components/__tests__/TaskDetailModal.mock-coverage.test.ts | 21 +++++++++++++++++++++
 packages/dashboard/app/components/__tests__/TaskDetailModal.test-helpers.ts       |  2 ++
 4 files changed, 35 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-6127

Fusion-Task-Lineage: fde5d7d6-5211-40da-9437-a3219378ce68
2026-06-09 13:57:21 -07:00
gsxdsm
30ba1f005a FN-6119: open CE docs in built-in file viewer
Expose the dashboard file viewer to plugin views and wire Compound Engineering artifacts to it.

- add an openFile callback to the dashboard plugin view context and pass through the app host implementation
- switch Compound Engineering artifact Open actions to the built-in file viewer with matching styling and coverage
- document the new plugin context capability and add a published changeset for the CLI package

Files changed:
 .changeset/ce-docs-built-in-viewer.md              |  5 +++
 docs/PLUGIN_AUTHORING.md                           |  2 +-
 packages/dashboard/app/App.tsx                     |  1 +
 packages/dashboard/app/plugins/types.ts            |  2 ++
 .../src/dashboard-interop.d.ts                     |  1 +
 .../src/dashboard/CompoundEngineeringView.css      | 16 +++++++++
 .../src/dashboard/CompoundEngineeringView.tsx      | 24 +++++++-------
 .../__tests__/CompoundEngineeringView.test.tsx     | 38 ++++++++++++++++++++++
 8 files changed, 76 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6119

Fusion-Task-Lineage: 8feb461c-b1d2-4059-9aa1-ffc756d15196
2026-06-09 13:54:59 -07:00
gsxdsm
9819000526 FN-6123: remove workflow row dropdown chevron
Remove the workflow toolbar chevron icon while preserving the collapse toggle behavior.

- remove the ChevronDown/ChevronRight icon rendering from the workflow toolbar collapse toggle
- keep the existing toggle button semantics, labels, and collapsed workflow text behavior intact
- add a dashboard regression test asserting the toggle renders without an svg chevron icon

Files changed:
 packages/dashboard/app/components/Board.tsx                | 6 ++----
 packages/dashboard/app/components/__tests__/Board.test.tsx | 7 +++++++
 2 files changed, 9 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6123

Fusion-Task-Lineage: 2929de56-a078-432a-95cf-8e0fab437414
2026-06-09 13:45:20 -07:00
gsxdsm
7c4e44d6a1 FN-6122: prevent quick-entry buttons from refocusing textarea
Keep quick-entry textarea focus stable while action buttons are clicked.

- prevent mousedown on refine, deps, attach, models, node, agent, and priority controls from stealing textarea focus
- add quick-entry focus regression coverage for individual controls and the full action row
- add a patch changeset for the quick-entry focus behavior fix

Files changed:
 .changeset/fn-6122-quick-entry-focus.md            |  5 ++
 .../dashboard/app/components/QuickEntryBox.tsx     |  7 ++
 .../components/__tests__/QuickEntryBox.test.tsx    | 87 ++++++++++++++++++++++
 3 files changed, 99 insertions(+)

Fusion-Task-Id: FN-6122

Fusion-Task-Lineage: 2a8f876d-f387-4b04-bd1e-0bf79938707e
2026-06-09 13:40:24 -07:00
gsxdsm
b872b37d72 FN-6117: expose task attachments in workflow step prompts
Make workflow-driven task execution keep attachment context available across step prompts and retries.

- add attachment guidance to full step prompts so agents can read project-root task attachments from worktrees
- include attachment availability in reduced retry prompts after context-limit failures
- cover attachment preservation through workflow runtime execution and step prompt generation with engine tests

Files changed:
 .../src/__tests__/step-session-executor.test.ts    | 272 +++++++++++++++++++++
 .../src/__tests__/workflow-task-runtime.test.ts    |  94 ++++++-
 packages/engine/src/step-session-executor.ts       |  13 +-
 3 files changed, 376 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6117

Fusion-Task-Lineage: 520eb1bc-e276-449a-acfe-ccbabefe69e3
2026-06-09 13:31:30 -07:00
gsxdsm
5c7b3a0e5e FN-6116: clear terminal event buffers after subscriber delivery
Prevent stale terminal connection metadata from replaying after it has already been delivered.

- only retain scrollback and connected payloads when no listeners are registered yet
- clear buffered terminal events after live subscribers receive them
- add regression coverage for scrollback and connected replay behavior

Files changed:
 .../app/hooks/__tests__/useTerminal.test.ts        | 50 ++++++++++++++++++++++
 packages/dashboard/app/hooks/useTerminal.ts        | 23 ++++++----
 2 files changed, 65 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-6116

Fusion-Task-Lineage: 5876fe24-2e90-4ef1-9e8b-5abce40555b4
2026-06-09 12:57:21 -07:00
gsxdsm
17312c9fae FN-6118: make workflow lane headers tappable
Replace the empty lane toggle button with an accessible tappable header for workflow rows on mobile.

- make the full workflow lane header act as the collapse toggle
- add keyboard support plus hover and focus-visible states for the header control
- update Lane tests to cover header click, keyboard toggles, and removal of the empty icon button

Files changed:
 packages/dashboard/app/components/Lane.css         | 11 +++++++
 packages/dashboard/app/components/Lane.tsx         | 30 +++++++++++--------
 packages/dashboard/app/components/__tests__/Lane.test.tsx | 35 +++++++++++++++++++---
 3 files changed, 60 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-6118

Fusion-Task-Lineage: 0cc1b632-1e59-4d1d-b274-f1da53a503f4
2026-06-09 12:51:20 -07:00
gsxdsm
34d889f046 FN-6115: remove workflow lane chevron icon
Remove the workflow lane chevron while preserving collapse behavior.

- remove the chevron icon import and button contents from the workflow lane toggle
- keep the existing lane toggle button and accessible label behavior intact
- add a regression test that asserts the lane toggle renders without an svg icon

Files changed:
 packages/dashboard/app/components/Lane.tsx                | 5 +----
 packages/dashboard/app/components/__tests__/Lane.test.tsx | 7 +++++--
 2 files changed, 6 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-6115

Fusion-Task-Lineage: ce865f17-1e29-4345-b0cd-d5038ca56333
2026-06-09 12:51:20 -07:00
gsxdsm
320b153c45 FN-6113: fail fast on terminal provider errors
Fail fast on non-retryable provider failures in the in-review stall recovery flow.

- classify failed-task provider errors as non-retryable, retryable, or unknown in core stall detection
- surface terminal provider errors with dedicated dashboard copy and exported stall signal metadata
- pause in-review tasks immediately on non-retryable provider failures and record a dedicated run-audit mutation
- add regression coverage for provider error classification, self-healing disposition, and dashboard badge behavior

Files changed:
 .../core/src/__tests__/in-review-stall.test.ts     |  70 ++++++++++
 packages/core/src/in-review-stall.ts               |  53 ++++++-
 packages/core/src/index.ts                         |   4 +-
 .../app/utils/__tests__/inReviewStallCopy.test.ts  |   5 +-
 packages/dashboard/app/utils/inReviewStallCopy.ts  |   8 ++
 .../in-review-stall-deadlock-disposition.test.ts   | 153 +++++++++++++++++++++
 packages/engine/src/run-audit.ts                   |   1 +
 packages/engine/src/self-healing.ts                |  30 +++-
 8 files changed, 320 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6113

Fusion-Task-Lineage: 5e89adb4-6b59-4deb-8811-5c75d6fa19cc
2026-06-09 12:51:20 -07:00
gsxdsm
6a77217f94 FN-6112: fix reliability view flex sizing
Ensure the reliability view fills its flex container across loading, populated, and error states.

- add full-height styling for reliability loading and error states
- include reliability view in shared min-height reset for app content containers
- expand reliability view tests to assert width and height fill on desktop and mobile

Files changed:
 packages/dashboard/app/components/ReliabilityView.css      |  7 +++++++
 .../app/components/__tests__/ReliabilityView.test.tsx      | 14 ++++++++++----
 packages/dashboard/app/styles.css                          |  3 ++-
 3 files changed, 19 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6112

Fusion-Task-Lineage: c5b2bd85-4024-4f88-b64d-dbc90b3cf2ed
2026-06-09 12:51:20 -07:00
gsxdsm
7cfc2168a2 FN-6111: alias bundled plugin views to source entries
Keep bundled plugin dashboard views loading from source so Compound Engineering no longer falls back to the unavailable placeholder.

- switch bundled dependency graph, roadmap, and compound engineering dashboard view loaders to static literal imports
- add vitest aliases for dependency graph and compound engineering dashboard view source entrypoints and cover the alias contract with regression tests
- document the missing-alias failure mode and the static-import requirement for bundled dashboard views

Files changed:
 .../bundled-plugin-vite-alias-missing.md            | 20 +++++++++++---------
 .../__tests__/registerBundledPluginViews.test.tsx   | 10 +++++++--
 .../app/plugins/registerBundledPluginViews.ts       | 19 +++++-------------
 .../runtime-plugin-alias-regression.test.ts         | 21 ++++++++++++++------
 packages/dashboard/vitest.config.ts                 |  8 ++++++++
 5 files changed, 49 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-6111

Fusion-Task-Lineage: a41b893c-4c14-4a2d-b0c9-47e1dbd0e1ef
2026-06-09 12:51:20 -07:00
gsxdsm
d1996a9899 FN-6110: fix Reliability view flex sizing on mobile
Keep the Reliability view filling its flex parent across mobile and desktop states.

- add flex growth and min-width safeguards to the Reliability view, loading, and error containers
- add desktop and mobile regression coverage for loading, populated, and error rendering states

Files changed:
 packages/dashboard/app/components/ReliabilityView.css  |  6 +++
 packages/dashboard/app/components/__tests__/ReliabilityView.test.tsx | 59 ++++++++++++++++++++++
 2 files changed, 65 insertions(+)

Fusion-Task-Id: FN-6110

Fusion-Task-Lineage: 5fe1e5a7-f13a-4316-8c4e-b5c85a51ce86
2026-06-09 12:51:20 -07:00
gsxdsm
934071cc3c FN-6107: always summarize untitled agent-created tasks
Ensure agent-created untitled tasks still request AI-generated titles even when project auto-summarization is disabled.

- force summarize=true for agent-created tasks that do not provide an explicit title
- add engine tests covering untitled, titled, and title-generation behavior with autoSummarizeTitles disabled
- document the agent-task summarization behavior in settings docs
- add a patch changeset for the published CLI package

Files changed:
 .changeset/agent-task-title-summaries.md          |  5 ++
 docs/settings-reference.md                        |  2 +-
 packages/engine/src/__tests__/agent-tools.test.ts | 63 +++++++++++++++++++++++
 packages/engine/src/agent-tools.ts                |  1 +
 4 files changed, 70 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6107

Fusion-Task-Lineage: d0c25981-a5cb-48ca-b835-9267817b4edd
2026-06-09 12:51:20 -07:00
gsxdsm
94b7cf01bd FN-6102: guard spawnSync lookup in pi extensions
Avoid crashing when partial child_process mocks omit spawnSync.

- lazily load spawnSync from node:child_process via createRequire
- return null from Git linked worktree detection when spawnSync is unavailable
- add a regression test covering partial child_process mocks that only stub execSync

Files changed:
 packages/core/src/__tests__/pi-extensions.test.ts | 22 +++++++++++++++++++++-
 packages/core/src/pi-extensions.ts                | 18 +++++++++++++++++-
 2 files changed, 38 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6102

Fusion-Task-Lineage: 22f98a1c-d296-4aa4-ac3d-7beead127dac
2026-06-09 12:51:20 -07:00
gsxdsm
83e0603504 FN-6099: fix mobile workflow selector CSS contract
Update the WorkflowNodeEditor CSS contract test to match the standalone mobile panel override selector.

- narrow the mobile selector contract assertion to the select and manage controls
- stop expecting the collapsed button in the standalone override rule

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

Fusion-Task-Id: FN-6099

Fusion-Task-Lineage: 0e698ef2-c532-4a7d-9450-17b04f93be37
2026-06-09 12:51:20 -07:00
gsxdsm
2e48e8627a FN-6098: add workspace file creation actions
Add workspace file and folder creation to the dashboard file browser.

- add dashboard API helpers and backend route support for creating workspace directories and empty files
- add New File and New Folder header actions in FileBrowser with dialog handling and responsive header styling
- cover create flows with FileBrowser and route tests and document the new browser actions

Files changed:
 docs/dashboard-guide.md                            |  1 +
 packages/dashboard/app/api/legacy.ts               | 29 ++++++-
 packages/dashboard/app/components/FileBrowser.css  | 32 ++++++++
 packages/dashboard/app/components/FileBrowser.tsx  | 75 ++++++++++++++----
 packages/dashboard/app/components/__tests__/FileBrowser.test.tsx  | 92 ++++++++++++++++++++++
 packages/dashboard/src/__tests__/routes-git.test.ts     | 55 +++++++++++++
 packages/dashboard/src/file-service.ts             | 69 +++++++++++++++-
 packages/dashboard/src/routes/README.md            |  8 +-
 packages/dashboard/src/routes/register-file-workspace-routes.ts   | 34 +++++++-
 9 files changed, 372 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6098
Fusion-Task-Lineage: 9a2a1ca1-8b5d-4e95-ba76-e7166621c898
2026-06-09 12:51:20 -07:00
gsxdsm
6271778dde FN-6091: add workflow_id support to task tools
Add workflow selection support across task creation, delegation, and updates.

- add workflow_id parameters and response text for engine and CLI task-creation/delegation tools
- allow fn_task_update to select or clear task workflows with reconciliation and validation
- cover workflow selection behavior with engine and extension tests and document the new tool parameters
- add a changeset for the published CLI package

Files changed:
 .changeset/fn-6091-workflow-id-agent-tools.md      |   5 +
 .../cli/skill/fusion/references/engine-tools.md    |   4 +-
 .../cli/skill/fusion/references/extension-tools.md |   9 +-
 .../skill/fusion/references/fusion-capabilities.md |   6 +-
 packages/cli/src/__tests__/extension.test.ts       | 189 +++++++++++++++++++++
 packages/cli/src/extension.ts                      |  71 +++++++-
 packages/engine/src/__tests__/agent-tools.test.ts  |  78 +++++++++
 packages/engine/src/agent-tools.ts                 |  32 +++-
 8 files changed, 374 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6091

Fusion-Task-Lineage: 7ab2f36a-feeb-4888-9845-65294bacf1d0
2026-06-09 12:51:20 -07:00
gsxdsm
49bd88f4d0 FN-6104: preserve QuickEntryBox disclosure state after task creation
Keep QuickEntryBox expanded or collapsed after creating a task instead of forcing a reset.

- stop resetForm from collapsing the textarea and disclosure controls after successful task creation
- update QuickEntryBox tests to expect preserved visible controls after submit and preserved collapsed state when manually collapsed
- cover the submit flow where focus restoration keeps controls visible without changing user-selected disclosure state

Files changed:
 .../dashboard/app/components/QuickEntryBox.tsx     |  2 --
 .../components/__tests__/QuickEntryBox.test.tsx    | 38 +++++++++++++++++-----
 2 files changed, 29 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-6104

Fusion-Task-Lineage: fd77c491-cd37-4a57-8270-3eb5e7ba3c94
2026-06-09 12:51:20 -07:00
gsxdsm
d240fb8735 FN-6108: mock gh auth in github-tracking engine tests
Stabilize engine github-tracking tests by fully mocking gh auth-dependent modules.

- hoist github-tracking module paths and replace maybeCreateTrackingIssue with shared vi mocks
- mock @fusion/core gh availability/auth helpers so dashboard tracking hooks do not touch real gh-cli state
- switch per-test cleanup from restoreAllMocks to clearAllMocks and import mocked hook helpers directly

Files changed:
 ...gent-task-creation-github-tracking-flag.test.ts | 44 ++++++++++++++--------
 .../agent-tools-github-tracking-end-to-end.test.ts | 43 ++++++++++++++-------
 2 files changed, 58 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-6108

Fusion-Task-Lineage: c7e9aac2-9687-45d5-9b96-233421aa19eb
2026-06-09 12:51:20 -07:00
gsxdsm
21f7a47c29 FN-6103: align chat stop button sizing with composer height
Align the regular chat stop button with the composer control sizing while quarantining an unrelated flaky room test.

- define a shared chat input control size variable and apply it to send/stop buttons for consistent width and minimum height
- update the chat input autosize CSS test to assert the shared control size contract and textarea minimum height
- quarantine the unrelated flaky ChatView rooms test in the dashboard Vitest config and quarantine ledger per policy

Files changed:
 packages/dashboard/app/components/ChatView.css       | 20 +++++++++++++-------
 .../__tests__/ChatView.chat-input-autosize.test.tsx  | 16 +++++++++++-----
 packages/dashboard/vitest.config.ts                  |  3 ++-
 scripts/lib/test-quarantine.json                     |  8 +++++++-
 4 files changed, 33 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-6103

Fusion-Task-Lineage: 3efc95ba-9369-4022-aa6e-f1981485caea
2026-06-09 12:51:20 -07:00
gsxdsm
7a2864f411 FN-6101: pass planning model overrides to quick task workflows
Ensure quick task model overrides flow through planning and submission.

- add planning model selection state to inline task creation and include it in submit payloads only when explicitly overridden
- extend the model selection modal with an optional planning-model picker that clears preset mode consistently with other manual overrides
- cover planning, combined overrides, and default omission behavior in inline create card and quick entry tests

Files changed:
 packages/dashboard/app/components/InlineCreateCard.tsx  | 26 ++++++++-
 packages/dashboard/app/components/ModelSelectionModal.tsx         | 45 +++++++++++++++
 packages/dashboard/app/components/__tests__/InlineCreateCard.test.tsx | 67 +++++++++++++++++++++-
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx    | 49 ++++++++++++----
 4 files changed, 172 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-6101

Fusion-Task-Lineage: 7c1553d2-3edb-4b23-ad36-77756bbfe1dc
2026-06-09 12:51:20 -07:00
gsxdsm
fc33a425fc FN-6088: open workflow editor on selected workflow
Open workflow-mode edits on the workflow the user already selected.

- pass the workflow editor's initial workflow id through AppModals
- preselect the matching workflow in WorkflowNodeEditor before defaulting to the first workflow
- skip the mobile workflow list stage when a valid initial workflow is already selected
- add dashboard tests for desktop selection, missing-id fallback, and mobile deep-link behavior
- add a patch changeset for @runfusion/fusion

Files changed:
 .../fn-6088-workflow-editor-selected-workflow.md   |  5 +++
 packages/dashboard/app/components/AppModals.tsx    |  1 +
 .../app/components/WorkflowNodeEditor.tsx          | 37 ++++++++++++++++++++--
 .../__tests__/WorkflowNodeEditor.test.tsx          | 34 ++++++++++++++++++++
 4 files changed, 74 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6088

Fusion-Task-Lineage: 88a0cd03-2112-4706-b6b5-4cbebdcae234
2026-06-09 12:51:20 -07:00
gsxdsm
0b0186a22e fix(FN-6088): suppress queued merge stalled badges
Suppress legacy stalledReview hydration for tasks already owned by the merge queue and avoid repeated mergeable-review re-enqueue churn for queued tasks.

Fusion-Task-Id: FN-6088
2026-06-09 12:50:26 -07:00