Commit Graph

1564 Commits

Author SHA1 Message Date
gsxdsm
34ada00f80 FN-6345: show user steering messages in task chat
Display user steering comments alongside agent output and wake immediate-response agents when new messages are sent.

- Render persisted and optimistic user messages in the task chat transcript with mobile styling.
- Propagate updated task detail data after sends and roll back optimistic messages on failures.
- Cover steering route validation, immediate heartbeat wakeups, chat rendering, and workflow alias round-trips.
- Add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-6345-task-chat-user-messages.md      |   5 +
 packages/dashboard/app/components/TaskChatTab.css  |  32 ++++
 packages/dashboard/app/components/TaskChatTab.tsx  | 170 ++++++++++++++++-----
 .../dashboard/app/components/TaskDetailModal.tsx   |   8 +-
 .../app/components/__tests__/TaskChatTab.test.tsx  | 150 +++++++++++++++++-
 .../app/components/__tests__/board-mobile.test.tsx |   2 +-
 .../__tests__/workflow-flow-mapping.test.ts        |   4 +-
 .../app/components/workflow-flow-mapping.ts        |   4 +-
 .../src/__tests__/routes-tasks-ops.test.ts         |  86 +++++++++++
 9 files changed, 414 insertions(+), 47 deletions(-)

Fusion-Task-Id: FN-6345

Fusion-Task-Lineage: 0355cc67-bd23-4e90-9034-bbaae277cfd6
2026-06-13 02:23:27 -07:00
gsxdsm
508551c593 FN-6299: allow archiving tasks from any column
Allow task archiving from every live board column while preserving a safe restore target.

- Record the pre-archive column and restore archived tasks to that column, downgrading active execution columns to todo.
- Expose archive actions and CLI/tooling documentation for all non-archived tasks.
- Expand store, dashboard, and route tests for archive/unarchive behavior across columns.
- Quarantine the flaky core db test observed during verification and add the published package changeset.

Files changed:
 .changeset/fn-6299-archive-any-column.md           |  5 ++
 docs/cli-reference.md                              |  4 ++
 docs/task-management.md                            |  9 +--
 .../cli/skill/fusion/references/extension-tools.md |  6 +-
 .../skill/fusion/references/fusion-capabilities.md |  4 +-
 packages/cli/src/bin.ts                            |  2 +-
 packages/cli/src/extension.ts                      | 18 ++---
 .../src/__tests__/store-archive-search.test.ts     | 76 +++++++++++++++++-----
 packages/core/src/store.ts                         | 61 ++++++++++++-----
 packages/core/src/types.ts                         |  4 ++
 packages/core/vitest.config.ts                     |  1 +
 packages/dashboard/app/components/TaskCard.tsx     |  2 +-
 .../dashboard/app/components/TaskDetailModal.tsx   |  2 +-
 .../app/components/__tests__/TaskCard.test.tsx     | 35 +++++++++-
 ...etailModal.responsive-and-dependencies.test.tsx | 26 ++++++++
 .../src/__tests__/routes-tasks-ops.test.ts         |  8 +--
 .../src/routes/register-task-workflow-routes.ts    |  9 +--
 scripts/lib/test-quarantine.json                   |  5 ++
 18 files changed, 215 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-6299

Fusion-Task-Lineage: fd5b5c12-35b8-4843-ab4e-14608d1ea395
2026-06-12 21:50:49 -07:00
gsxdsm
0457144111 Merge pull request #1665 from plarson/fix/insights-extract-response
fix(dashboard): repair insight extraction and research provider config
2026-06-12 21:36:20 -07:00
gsxdsm
1d190f37ed FN-6322: validate settings scopes workflow payload
Clarify and cover the settings scopes response shape including workflow settings.

- Document that GET /api/settings/scopes returns workflowSettings with global and project scopes.
- Assert workflowSettings is always a non-null object for default and project-scoped route tests.
- Preserve exact workflow setting payload coverage when workflow overrides are present.

Files changed:
 docs/settings-reference.md                               |  2 +-
 packages/dashboard/src/__tests__/routes-settings.test.ts | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6322

Fusion-Task-Lineage: 08796f9d-be99-46a1-8326-251a8d79dda4
2026-06-12 19:17:25 -07:00
gsxdsm
8f66a41c1c FN-6308: parallelize dashboard quality lanes
Reduce dashboard quality gate wall-clock by orchestrating existing Vitest lanes with bounded concurrency.

- Add a dashboard quality orchestrator that runs app/API lanes through the existing heap wrapper with safe concurrency and failure short-circuiting.
- Route dashboard quality scripts through the orchestrator while preserving compatibility lane scripts and shard boundaries.
- Export project glob metadata and strengthen guards for lane parity, heap usage, and settings route response expectations.
- Document the new dashboard quality orchestration model and measured FN-6308 timing results.

Files changed:
 docs/test-speed-audit-FN-5048.md                   |   8 +-
 docs/testing.md                                    |  35 +++-
 packages/dashboard/package.json                    |  14 +-
 .../scripts/__tests__/run-quality-tests.test.ts    | 110 ++++++++++
 packages/dashboard/scripts/run-quality-tests.mjs   | 221 +++++++++++++++++++++
 .../__tests__/dashboard-test-config-guard.test.ts  | 134 ++++++++++---
 .../src/__tests__/routes-settings.test.ts          |  14 +-
 packages/dashboard/vitest.config.ts                |  49 ++++-
 8 files changed, 540 insertions(+), 45 deletions(-)

Fusion-Task-Id: FN-6308

Fusion-Task-Lineage: 05a465fd-8eef-4c03-baa3-2b7cb024fef0
2026-06-12 18:18:24 -07:00
gsxdsm
bd87ce7d7e FN-6304: add optional workflow steps
Allow workflows to define default-on optional steps and expose browser verification as a togglable workflow option.

- Add core optional-step helpers, IR metadata, compiler support, exports, and regression coverage.
- Mark browser verification optional in the built-in coding workflow and document optional workflow-step behavior.
- Add dashboard/API support for optional step defaults and enabled-state presentation with localized label cleanup.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6304-optional-workflow-steps.md      |  5 ++
 docs/task-management.md                            |  2 +-
 docs/workflow-steps.md                             |  8 ++
 packages/core/src/__tests__/workflow-ir.test.ts    | 45 +++++++++++
 .../src/__tests__/workflow-optional-steps.test.ts  | 88 ++++++++++++++++++++++
 packages/core/src/builtin-coding-workflow-ir.ts    |  1 +
 packages/core/src/index.ts                         |  3 +
 packages/core/src/store.ts                         |  3 +
 packages/core/src/workflow-compiler.ts             | 30 +++++++-
 packages/core/src/workflow-ir-types.ts             | 11 +++
 packages/core/src/workflow-ir.ts                   | 32 +++++++-
 packages/core/src/workflow-optional-steps.ts       | 46 +++++++++++
 packages/dashboard/app/api/legacy.ts               | 10 +++
 .../dashboard/app/components/InlineCreateCard.css  | 20 +++++
 .../dashboard/app/components/InlineCreateCard.tsx  | 87 ++++++++++++++++-----
 .../app/components/WorkflowResultsTab.tsx          | 44 +++++++++--
 .../components/__tests__/InlineCreateCard.test.tsx | 41 +++++++++-
 .../__tests__/WorkflowResultsTab.test.tsx          | 58 +++++++++++++-
 .../src/__tests__/workflow-routes.test.ts          | 22 ++++++
 .../src/routes/register-workflow-routes.ts         | 16 +++-
 packages/i18n/locales/en/app.json                  |  6 +-
 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                   |  6 +-
 27 files changed, 543 insertions(+), 56 deletions(-)

Fusion-Task-Id: FN-6304

Fusion-Task-Lineage: 385f8ae1-494f-4e2b-a6e9-3a2d2bbe7f71
2026-06-12 17:57:19 -07:00
Phil Larson
e6eef1a925 fix(dashboard): harden insight extraction response handling 2026-06-12 15:58:20 -07:00
Phil Larson
151277ac4c fix(dashboard): read insight extraction response from session state 2026-06-12 15:57:05 -07:00
gsxdsm
2b5c4ae745 FN-6307: trim dashboard test waits
Trim heavyweight dashboard test paths while preserving coverage and recording the timing evidence.

- Seed the planning route rate limiter directly so boundary assertions avoid 999 duplicate HTTP session creations.
- Replace negative wait polling in NewTaskModal and heartbeat saturation assertions with direct checks after the triggering event settles.
- Document FN-6307 timing measurements and note the unrelated pre-existing settings-route failures observed during verification.

Files changed:
 docs/test-speed-audit-FN-5048.md                   | 20 +++++++++++++
 .../app/components/__tests__/NewTaskModal.test.tsx |  8 ++----
 .../src/__tests__/routes-planning.test.ts          | 33 +++++++++++++---------
 3 files changed, 41 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6307

Fusion-Task-Lineage: b32b22e7-6729-4bd0-bc3a-ad053178bb1c
2026-06-12 14:58:59 -07:00
gsxdsm
72661faf96 FN-6305: allow title summarization for long descriptions
Title summarization now accepts oversized task descriptions while bounding the model prompt.

- Remove the 2000-character validation ceiling for summarize-title requests.
- Truncate long descriptions only at model-input time with a dedicated exported cap.
- Update route/API docs and tests for long-description behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6305-title-summarize-any-length.md   |  5 +++
 packages/core/src/__tests__/ai-summarize.test.ts   | 43 ++++++++++++++++++----
 packages/core/src/ai-summarize.ts                  | 34 +++++++++++------
 packages/core/src/index.ts                         |  1 +
 packages/dashboard/app/api/legacy.ts               |  2 +-
 .../src/__tests__/routes-planning.test.ts          | 25 +++++++++++++
 packages/dashboard/src/routes.ts                   |  2 +-
 7 files changed, 92 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6305
Fusion-Task-Lineage: 69a83173-ac85-489f-b4cc-d1a70b6d25eb
2026-06-12 13:12:55 -07:00
gsxdsm
f0d2415c20 Fix custom provider sends failing on masked API key
The settings UI displays saved API keys masked with '•' (U+2022). Saving
a provider without retyping the key echoed that mask back, and the PUT
handler persisted it as the real credential. The masked key then flowed
into an Authorization/x-api-key header, throwing "Cannot convert argument
to a ByteString ... value 8226" at request time.

Treat masked values echoed back on update as "unchanged" so the stored
key is preserved, and reject masked values on create/probe. Add tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 00:10:38 -07:00
gsxdsm
a83c2d89fe Fix custom provider models missing from model dropdowns
The /models endpoint restricted results to providers configured in
Fusion's auth.json/models.json stores, but custom providers live in
global settings and register under customProviderRegistryKey(). Their
keys were never added to the allowlist, so their models were filtered
out before reaching the dropdowns. Add the custom provider registry
keys to the configured-providers set.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 00:05:10 -07:00
gsxdsm
65251d2e6b FN-6252: stop agent pauses from pausing tasks
Agent pause and sleep flows now leave task pause state under explicit task controls.\n\n- Remove automatic task pausing from heartbeat pauseAgent and dashboard fallback state changes.\n- Default resume task cascade to off while retaining legacy opt-in unpause cleanup.\n- Cover agent sleep, heartbeat execution, and dashboard fallback pause behavior with regression tests.\n- Document task pause ownership and add a patch changeset.\n\nFiles changed:\n .changeset/fn-6252-no-agent-task-autopause.md      |  5 ++\n docs/agents.md                                     |  2 +-\n docs/architecture.md                               |  4 ++\n .../src/__tests__/routes-agent-runs.test.ts        | 32 +++++++++\n .../src/routes/register-agent-runtime-routes.ts    | 17 -----\n .../src/__tests__/heartbeat-executor.test.ts       | 75 ++++++++++++++++++++--\n packages/engine/src/agent-heartbeat.ts             | 29 +++------\n 7 files changed, 121 insertions(+), 43 deletions(-)

Fusion-Task-Id: FN-6252

Fusion-Task-Lineage: f7a0ef30-0c99-4f9c-b0c1-43217d613187
2026-06-11 22:03:29 -07:00
gsxdsm
07d5262a83 FN-6208: sync workflow settings across nodes
Synchronize workflow setting values through node settings sync.

- Include workflow settings in settings payloads, diffs, status responses, and API types.
- Apply inbound and pulled workflow settings through the TaskStore while ignoring rejected setting ids.
- Add core, route, hook, API, and Nodes view coverage for workflow settings sync behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/loud-nodes-sync.md                      |   5 +
 packages/core/src/__tests__/central-core.test.ts   |  37 ++++
 packages/core/src/central-core.ts                  |  13 +-
 packages/core/src/types.ts                         |   4 +
 packages/dashboard/app/__tests__/api-node.test.ts  |   4 +-
 packages/dashboard/app/api-node.ts                 |   3 +
 .../app/components/__tests__/NodesView.test.tsx    |   8 +-
 .../hooks/__tests__/useNodeSettingsSync.test.ts    |  33 +++-
 .../dashboard/app/hooks/useNodeSettingsSync.ts     |   4 +-
 .../__tests__/routes-nodes-sync-contract.test.ts   |  18 +-
 .../src/__tests__/routes-nodes-sync.test.ts        | 191 ++++++++++++++++++++-
 .../src/routes/register-settings-memory-routes.ts  |   7 +-
 .../register-settings-sync-inbound-routes.ts       |  73 +++++++-
 .../src/routes/register-settings-sync-routes.ts    | 128 ++++++++++++--
 14 files changed, 488 insertions(+), 40 deletions(-)

Fusion-Task-Id: FN-6208

Fusion-Task-Lineage: 9b5e7e56-6287-4bc5-966a-2bcc2ba292a7
2026-06-11 09:21:23 -07:00
gsxdsm
747bbf51f1 FN-6194: fix archived GitHub issue reconciliation
Handle archived task transitions consistently for linked GitHub issues.

- close tracked and source issues when archived tasks should land closed, including not_planned vs completed reasons
- reopen linked issues when archived tasks move back to done or active work resumes
- extend dashboard reconciler and state coverage to include archived tasks and source issue handling

Files changed:
 .../__tests__/github-source-issue-close.test.ts    | 70 +++++++++++++++++++++-
 .../__tests__/github-tracking-reconciler.test.ts   | 60 ++++++++++++++++++-
 .../src/__tests__/github-tracking-state.test.ts    | 10 +++-
 .../dashboard/src/github-source-issue-close.ts     | 32 ++++++----
 .../dashboard/src/github-tracking-reconciler.ts    | 14 +++--
 packages/dashboard/src/github-tracking-state.ts    |  4 ++
 6 files changed, 167 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6194

Fusion-Task-Lineage: 867527a0-6eb9-416e-b1eb-d690fa029d60
2026-06-10 10:34:36 -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
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
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
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
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
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
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
4f8bb31774 FN-6074: add plugin registry QA coverage
Expand post-merge QA coverage for plugin registry browsing and install flows.

- add PluginManager registry UI tests for metadata, action states, install failures, loading/error states, search debounce, and responsive rendering
- add API route tests for invalid manifest payloads, sanitized query/category handling, and project-scoped store failure paths
- include the new registry-focused UI and API suites in the dashboard quality vitest config

Files changed:
 .../components/__tests__/PluginManager.registry.test.tsx | 64 ++++++++++++++++++++
 .../src/__tests__/routes-plugin-registry.test.ts        | 68 ++++++++++++++++++++++
 packages/dashboard/vitest.config.ts                     |  3 +-
 3 files changed, 134 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6074

Fusion-Task-Lineage: 5cc00fb9-2ef4-4097-af7f-d8f49c536774
2026-06-09 06:43:13 -07:00
gsxdsm
f8200adb71 FN-6071: add plugin registry browsing and install actions
Add a curated plugin registry surface to the dashboard plugin manager.

- expose GET /api/plugins/registry with search, category filtering, and installed-state annotations from the dashboard registry manifest
- add registry fetch/install support to the dashboard plugin manager UI, including search, install/manage actions, and related tests
- document plugin registry entries and registry installability in plugin authoring docs and shared concepts

Files changed:
 CONCEPTS.md                                        |   6 +
 docs/PLUGIN_AUTHORING.md                           |  23 ++
 packages/dashboard/app/api/legacy.ts               |  36 +++
 .../dashboard/app/components/PluginManager.css     | 185 ++++++++++++++-
 .../dashboard/app/components/PluginManager.tsx     | 162 ++++++++++++-
 .../PluginManager.install-browse.test.tsx          |   5 +-
 .../__tests__/PluginManager.registry.test.tsx      | 260 +++++++++++++++++++++
 .../components/__tests__/PluginManager.test.tsx    |   3 +-
 .../__tests__/PluginManager.toggle.test.tsx        |   5 +-
 .../src/__tests__/routes-plugin-registry.test.ts   | 156 +++++++++++++
 packages/dashboard/src/plugin-routes.ts            | 115 +++++++++
 packages/dashboard/src/registry-manifest.json      | 143 ++++++++++++
 12 files changed, 1091 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-6071

Fusion-Task-Lineage: 72c7bdfd-5832-4323-b675-63d0680167d8
2026-06-09 04:27:53 -07:00
gsxdsm
02df5d1c62 FN-6069: restore chat manager test to dashboard quality gate
Restore the chat manager API suite to the dashboard curated quality gate.

- move `chat-manager.test.ts` back into the curated dashboard API quality project
- remove the temporary chat-manager quarantine and broad vitest excludes that kept it out of coverage
- stabilize chat-manager timing/subscriber tests with fake timers and explicit unsubscribe cleanup
- align the agent import route mock so the rescued suite uses the expected CLI settings stub

Files changed:
 $(git diff --cached --stat)

Fusion-Task-Id: FN-6069

Fusion-Task-Lineage: e70e7817-9fe6-4e80-8b53-8f99c6214941
2026-06-09 02:30:30 -07:00
gsxdsm
615d744c8a FN-6066: fix dashboard curated inventory guard
Keep the dashboard curated inventory guard aligned with the current dashboard test surface.

- add the newly required @fusion/core exports to the agent import route test mock
- teach the test inventory script to request file-only vitest listings for dashboard curated checks
- extend the dashboard curated skiplist with the pre-existing chat manager exclusion

Files changed:
 packages/dashboard/src/__tests__/routes-agent-import.test.ts | 3 +++
 scripts/check-test-inventory.mjs                             | 5 +++--
 scripts/lib/dashboard-curated-skiplist.json                  | 4 ++++
 3 files changed, 10 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6066

Fusion-Task-Lineage: 51e3c42c-d642-4873-8201-636a420d0991
2026-06-09 02:23:35 -07:00
gsxdsm
f77aa073c1 FN-6025: fix builtin coding auto-merge review flags
Restore the built-in coding workflow's in-review auto-merge metadata.

- switch builtin:coding to the authored v2 workflow IR so in-review retains merge-blocker and human-review traits
- add core regression coverage for builtin workflow resolution and column flag propagation
- extend dashboard board workflow route/payload tests to assert the in-review flags and payload contents

Files changed:
 .changeset/fn-6025-auto-merge-toggle-flags.md       |  5 +++++
 packages/core/src/__tests__/builtin-workflows.test.ts    | 19 +++++++++++++++++++
 packages/core/src/__tests__/workflow-ir-resolver.test.ts | 14 ++++++++++++++
 packages/core/src/builtin-workflows.ts              | 21 ++++++++++++++-------
 packages/dashboard/src/routes/__tests__/board-workflows-route.test.ts  | 12 ++++++++++--
 packages/dashboard/src/routes/__tests__/board-workflows.test.ts    |  4 ++++
 6 files changed, 66 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6025

Fusion-Task-Lineage: 838ced1f-0fdf-413b-94a0-52ddb21d75c9
2026-06-08 13:32:58 -07:00
gsxdsm
e623340e71 FN-5994: restore project summarization model settings
Keep summarization and PR metadata model selection on project settings while leaving workflow lanes on the workflow.

- restore the project summarization model lane in Project Models and replace per-phase workflow lanes with a workflow-settings redirect stub
- remove moved workflow model keys from project settings defaults/save paths and update settings docs/tests for the restored project lane behavior
- make PR metadata generation resolve its model from the title summarizer settings lane instead of task planning settings

Files changed:
 docs/settings-reference.md                         |   4 +-
 .../core/src/__tests__/settings-migration.test.ts  |  18 +-
 .../core/src/__tests__/settings-parity.test.ts     |  17 +-
 packages/core/src/__tests__/store-settings.test.ts |  54 ++--
 .../core/src/__tests__/task-creation-hook.test.ts  |  10 +-
 packages/core/src/builtin-workflow-settings.ts     |  24 --
 packages/core/src/settings-schema.ts               |  13 +-
 .../components/__tests__/SettingsModal.test.tsx    |  11 +-
 .../app/components/settings/save-split.ts          |  11 +-
 .../settings/sections/ProjectModelsSection.tsx     | 330 +++------------------
 .../src/__tests__/pr-metadata-generator.test.ts    |  25 +-
 packages/dashboard/src/pr-metadata-generator.ts    |   4 +-
 12 files changed, 140 insertions(+), 381 deletions(-)

Fusion-Task-Id: FN-5994

Fusion-Task-Lineage: f7f6f1ff-5d06-4d16-b46d-644eb219e7c1
2026-06-08 13:32:58 -07:00
gsxdsm
53ab22449f FN-6017: fix chat generation-slot race and restore dashboard test
Fix the chat-manager race so the rescued dashboard test can run reliably again.

- wait for the first hanging prompt to be created before asserting generation-slot state in the chat-manager isolation test
- remove the dashboard chat-manager test from Vitest excludes so it runs in both backfill and default dashboard API projects
- clear the chat-manager entry from the flaky-test quarantine ledger after rescuing the test

Files changed:
 packages/dashboard/src/__tests__/chat-manager.test.ts | 16 +++++++++++-----
 packages/dashboard/vitest.config.ts                   |  3 +--
 scripts/lib/test-quarantine.json                      |  8 +-------
 3 files changed, 13 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-6017

Fusion-Task-Lineage: 5e3bd9ad-3502-4956-bab2-fa7b36f8bcab
2026-06-08 13:32:58 -07:00
gsxdsm
bd5315fd4d feat: allow disabling built-in workflows 2026-06-08 07:53:42 -07:00
gsxdsm
56b194383d fix: address workflow PR feedback 2026-06-07 23:30:16 -07:00
gsxdsm
e138971030 fix: stabilize workflow board and loop recovery 2026-06-07 23:30:16 -07:00
gsxdsm
cf80622875 FN-5993: prevent PR metadata generation hangs
Bound PR AI metadata generation so the PR dialog falls back cleanly instead of hanging indefinitely.

- add a 60s timeout and abort-aware fallback path to dashboard PR metadata generation
- forward request abort signals from the PR metadata route and avoid writing responses after disconnects
- cover timeout/abort behavior in PR metadata generator and route tests
- document the bounded fallback behavior in the dashboard guide

Files changed:
 docs/dashboard-guide.md                            |   1 +
 .../src/__tests__/pr-metadata-generator.test.ts    |  93 +++++++++-
 ...it-github.pr-options-preflight-metadata.test.ts |   8 +-
 packages/dashboard/src/pr-metadata-generator.ts    | 199 ++++++++++++++-------
 .../dashboard/src/routes/register-git-github.ts    |  10 ++
 5 files changed, 235 insertions(+), 76 deletions(-)

Fusion-Task-Id: FN-5993

Fusion-Task-Lineage: fc49c15a-2359-4d14-b0ae-fed4aecde2fb
2026-06-07 20:38:53 -07:00
gsxdsm
2d81a95ad9 FN-5985: align mission goal link errors
Align mission goal link write paths on the documented GOAL_NOT_FOUND contract.

- return 400 GOAL_NOT_FOUND from linkable goal validation instead of 404 when a goal is missing
- update mission goal route tests to assert the new error payload across create, patch, set, and add flows
- document the link-vs-unlink missing-goal behavior and add a patch changeset for the published CLI package

Files changed:
 .../FN-5985-mission-goal-not-found-contract.md     |  5 ++++
 docs/missions.md                                   |  2 +-
 .../__tests__/mission-goal-links-routes.test.ts    | 32 +++++++++++++++++-----
 packages/dashboard/src/mission-routes.ts           |  9 +++++-
 4 files changed, 39 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-5985

Fusion-Task-Lineage: 5649266e-5813-41b4-8a54-c7c46df61a35
2026-06-07 20:23:07 -07:00
gsxdsm
e84410e520 FN-6007: prevent duplicate GitHub issue imports and tracking issues
Prevent duplicate GitHub issue/task linkage from creating redundant imports and tracking issues.

- add shared duplicate-detection helpers that match imported GitHub issues by source metadata as well as source URLs
- switch CLI and dashboard GitHub import flows to inspect full task records and reuse the helper during single and batch imports
- remove redundant duplicate/refine tracking-issue creation calls from task workflow routes and add a patch changeset with regression coverage

Files changed:
 .changeset/fn-6007-fix-duplicate-github-issues.md  |  5 ++
 packages/cli/src/__tests__/extension.test.ts       | 68 ++++++++++++++++
 packages/cli/src/extension.ts                      | 24 ++++--
 .../src/__tests__/github-tracking-hook.test.ts     | 68 ++++++++++++++++
 .../dashboard/src/__tests__/routes-github.test.ts  | 73 ++++++++++++++++++
 .../src/__tests__/routes-tasks-ops.test.ts         | 90 +---------------------
 .../dashboard/src/routes/register-git-github.ts    | 24 ++++--
 .../src/routes/register-task-workflow-routes.ts    | 16 ----
 8 files changed, 254 insertions(+), 114 deletions(-)

Fusion-Task-Id: FN-6007

Fusion-Task-Lineage: a32ebb1d-efe4-4a52-be9a-fa3d3b5954bf
2026-06-07 18:54:24 -07:00
gsxdsm
ba16805ce6 Merge pull request #1466 from Runfusion/gsxdsm/issue-1454-manage-projet-bug
fix: empty folder selection reverts in DirectoryPicker + add create-folder button
2026-06-06 09:24:31 -07:00
gsxdsm
ee5f5e84ac Address PR review feedback (#1466)
- routes.ts: use isAbsolute() before resolve() for proper path validation
- routes.ts: wrap mkdir() in try/catch to map EEXIST/ENOENT/ENOTDIR to 4xx
- DirectoryPicker.tsx: use !browser.currentPath guard to prevent re-fetch loop
- DirectoryPicker.tsx: disable Create button during in-flight requests
- DirectoryPicker.tsx: add fetchEntries to useEffect dependency array
- DirectoryPicker.tsx: client-side validation for folder names
- Add changeset for the new create-folder feature
2026-06-06 06:31:44 -07:00
gsxdsm
d8e325b17e fix: empty folder selection reverts in DirectoryPicker + add create-folder button
Fix bug where navigating into an empty folder in the DirectoryPicker
would automatically revert to the previous folder. The useEffect that
auto-fetches on open was using the stale 'value' prop instead of
'browser.currentPath' after navigation.

Also adds a 'New folder' button to the DirectoryPicker toolbar so users
can create folders directly when setting up a project.

- DirectoryPicker.tsx: fix useEffect to use browser.currentPath || value
- DirectoryPicker.tsx: add create folder UI state and handlers
- DirectoryPicker.css: styles for create folder input and actions
- routes.ts: add POST /api/create-directory endpoint
- legacy.ts: add createDirectory API client
- DirectoryPicker.test.tsx: add tests for empty folder nav and create folder
2026-06-06 01:32:06 -07:00
gsxdsm
f49ab4946a Merge pull request #1463 from Runfusion/gsxdsm/issue-1455-initialize-git-repository
fix(FN-1455): initialize git during project registration
2026-06-06 01:08:31 -07:00
gsxdsm
db971a91ea fix(FN-1455): initialize git during project registration
Fusion-Task-Id: FN-1455
2026-06-06 00:38:28 -07:00
gsxdsm
854b6a30c9 fix(lint): empty-interface PrSourceDescriptor → type alias, drop unused eslint-disable directives
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:15:28 -07:00
gsxdsm
841ff9d838 Address PR review feedback (#1461)
- pr-nodes: forward post-increment entity to deps.respond (responseRounds off-by-one); branch-group entity fallback now keys on task.branchContext.groupId, not task.id
- core: hoist shared autoMergeGateReason into @fusion/core pr-entity.ts; CLI + dashboard import the single definition (R13)
- cli: fn pr create also writes the unified PR entity (ensure → open), keeping legacy prInfo; resolveBranchHeadOid uses argv-safe execFileAsync (injection fix)
- changeset: fn-pr-commands bumped minor → major (breaking CLI removal per AGENTS.md)
- tests: bin.test.ts daemon fixture off reserved port 4040; lazy-loaded-views title 19 → 20 views

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:09:53 -07:00
gsxdsm
1922b5efc2 merge: main (workflow editor 109 / cli_sessions 110-111 / workflow_settings 112) — renumber PR-entity migration to 113, union core exports, TaskCard prNode + cliSessionState badges, executor PrNodeDeps + CliAgentRuntime options 2026-06-05 23:06:46 -07:00
gsxdsm
8a6a67a305 feat(pr): dashboard PR view, routes, node-state UI + user controls (U7)
Adds /api/pull-requests routes (list, detail, merge/approve/retry/close/
automerge — all re-fetch authoritative state before acting), a
PullRequestView rendering every entity state distinctly (creating/failed/
unverified/responding/await-review/conflict) with the action bar, live
auto-merge gate reason, and conflict CTA; TaskCard PR node-state badge +
link; and the R16 column-move-backward guard. User actions route through
the existing releaseHeldTaskByEvent primitives. Maps the new PR node kinds
in the workflow editor's kind resolver. 13 route tests + lazy-view guard
green; component test runs in CI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 22:18:34 -07:00
gsxdsm
31d4b5335b feat(pr): security-hardened review-response run — pr-respond body (U5)
Implements the fix-or-disagree agent loop behind pr-respond: batched
one-run-per-cycle over actionable threads (filtering resolved/outdated/
self/bot), with prompt-injection delimiting of untrusted comment bodies,
viewer-authenticated anti-spoof markers, a pre-push secret scan, fast-
forward-only push (no force-push path) with non-ff abort+re-batch, reply+
resolve, commit-last thread-state persistence with marker+SHA crash
recovery (R15), and an iteration cap on responseRounds (R8). GitHub/git/
agent ops injected; engine stays dashboard-import-free. Adds GraphQL
getPrReviewThreadsDetailed + getViewerLogin to the client. 23 tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 20:20:25 -07:00
gsxdsm
b871046ad2 feat(pr): GitHub primitives — thread reply/resolve, ETag probe, expectedHeadOid merge (U2)
Adds the net-new GitHub primitives the PR nodes need: replyToReviewThread
and resolveReviewThread (GraphQL mutations, dual gh/API), an ETag-conditional
probePrChanged (304 is rate-limit-free, gates the reconcile deep-fetch), and
expectedHeadOid on mergePr (--match-head-commit / REST sha) raising a typed
PrStaleHeadError on a head-moved race so pr-merge can re-evaluate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 19:37:59 -07:00
gsxdsm
72e320aab4 Address PR review feedback (#1445)
- applyRemoteSettings now applies the stripped global payload (moved keys can't resurrect)
- resolver error path keeps effective workflowId so builtin fallback survives identity failure
- updateWorkflowSettingValues read-merge-upsert wrapped in transactionImmediate (lost-update race)
- MergeSection directMergeCommitStrategy UI fallback aligned to schema default (always-squash)
- save-split section-routing test asserts the positive case
- setting-values routes 404 on unknown workflow ids (+ tests)
2026-06-05 16:46:04 -07:00
gsxdsm
1f68348441 merge: main (CLI agent interface #1446) — renumber workflow_settings migration to 112 behind main's cli_sessions(110)/adapter(111), full-workspace literal sweep, i18n union 2026-06-05 16:18:39 -07:00
gsxdsm
693ed6290a Merge remote-tracking branch 'origin/main' into gsxdsm/cli-agent-interface
# Conflicts:
#	CONCEPTS.md
#	packages/core/src/__tests__/db-migrate.test.ts
#	packages/core/src/__tests__/db.test.ts
#	packages/core/src/__tests__/goals-schema.test.ts
#	packages/core/src/__tests__/insight-store.test.ts
#	packages/core/src/__tests__/merge-request-record.test.ts
#	packages/core/src/__tests__/mission-store.test.ts
#	packages/core/src/__tests__/run-audit.test.ts
#	packages/core/src/__tests__/store-merge-queue.test.ts
#	packages/core/src/__tests__/task-documents.test.ts
#	packages/core/src/db.ts
#	packages/dashboard/src/__tests__/agent-onboarding.test.ts
#	packages/dashboard/src/__tests__/ai-refine.test.ts
#	packages/dashboard/src/__tests__/chat-attachment-routes.test.ts
#	packages/dashboard/src/__tests__/experiment-routes.finalize.test.ts
#	packages/dashboard/src/__tests__/milestone-slice-interview.test.ts
#	packages/dashboard/src/__tests__/mission-interview.test.ts
#	packages/dashboard/src/__tests__/pr-metadata-generator.test.ts
#	packages/dashboard/src/__tests__/project-pause-resume-routes.test.ts
#	packages/dashboard/src/__tests__/routes-approval-sandbox-provisioning.test.ts
#	packages/dashboard/src/__tests__/routes-approval-secrets.test.ts
#	packages/dashboard/src/__tests__/routes-approval.test.ts
#	packages/dashboard/src/__tests__/routes-worktrunk.test.ts
#	packages/dashboard/src/__tests__/session-error-recovery.test.ts
#	packages/dashboard/src/__tests__/session-persistence-roundtrip.test.ts
#	packages/dashboard/src/__tests__/session-reconnect.test.ts
#	packages/dashboard/src/__tests__/session-resume-history.test.ts
#	packages/dashboard/src/__tests__/setup-routes.test.ts
#	packages/dashboard/src/__tests__/subtask-breakdown.test.ts
#	packages/dashboard/src/routes/__tests__/agent-avatar-routes.test.ts
#	packages/dashboard/src/routes/__tests__/custom-providers.test.ts
#	packages/dashboard/src/routes/__tests__/docker-node-routes.test.ts
#	packages/i18n/locales/en/app.json
#	plugins/fusion-plugin-roadmap/src/store/__tests__/roadmap-store.test.ts
2026-06-05 15:30:59 -07:00
gsxdsm
6d16c07197 merge: main (editor consolidation #1433, fast-tests, learnings) — renumber workflow_settings migration to 110, settings panel joins the sidebar disclosures, full-workspace literal sweep 2026-06-05 15:23:15 -07:00