Commit Graph

9008 Commits

Author SHA1 Message Date
gsxdsm
eb83c81ffb fix(FN-7265): align per-step review workflow 2026-06-29 23:25:17 -07:00
gsxdsm
ea0707c573 FN-7264: add opt-in absolute file-browser paths
Add an opt-in project setting that lets the workspace file browser use slash-prefixed absolute paths while preserving existing confined defaults.

- Add the allowAbsoluteFileBrowserPaths project setting, docs, and changeset release note.
- Thread absolute-path validation through workspace file-browser listing, editing, file operations, and downloads without widening other path APIs.
- Add Settings UI controls and keep settings-specific file pickers project-relative.
- Cover absolute-path browsing, percent-literal paths, root navigation, and settings picker behavior with tests.

Files changed:
 .changeset/fn-7264-absolute-file-browser-paths.md  |   7 +
 docs/settings-reference.md                         |   3 +
 .../core/src/__tests__/settings-parity.test.ts     |   8 +
 packages/core/src/settings-schema.ts               |   5 +
 packages/core/src/types.ts                         |   5 +
 .../app/__tests__/settings-sections.test.tsx       |  41 +++++
 packages/dashboard/app/components/FileBrowser.tsx  |  26 ++-
 .../dashboard/app/components/FileBrowserModal.tsx  |   7 +
 .../dashboard/app/components/SettingsModal.tsx     |  34 +++-
 .../components/__tests__/FileBrowserModal.test.tsx |  18 ++
 .../__tests__/SettingsModal.general.test.tsx       |  17 ++
 .../settings/sections/GeneralSection.tsx           |   9 +
 .../__tests__/useWorkspaceFileBrowser.test.ts      |  18 ++
 .../dashboard/app/hooks/useWorkspaceFileBrowser.ts |  20 ++-
 .../dashboard/src/__tests__/file-service.test.ts   | 199 ++++++++++++++++++++-
 packages/dashboard/src/file-service.ts             | 129 ++++++++-----
 16 files changed, 489 insertions(+), 57 deletions(-)

Fusion-Task-Id: FN-7264

Fusion-Task-Lineage: ec71facd-0345-4490-a3df-244b98e24c2d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 23:17:49 -07:00
gsxdsm
17fce43205 FN-7259: add mobile task popup setting
Add an opt-in mobile board-card route that opens task details in the existing popup.

- Add the openMobileTasksInPopup project setting, defaults, types, docs, and changeset.
- Expose the Appearance setting and include it in dashboard settings persistence.
- Route mobile board-card clicks without deep tabs into the task FloatingWindow while preserving dock and main-panel behavior.
- Add coverage for settings defaults, Appearance controls, mobile routing, and task popup sizing.

Files changed:
 .changeset/fn-7259-mobile-task-popups.md           |  7 ++++
 docs/dashboard-guide.md                            |  5 ++-
 docs/settings-reference.md                         |  1 +
 .../core/src/__tests__/settings-defaults.test.ts   | 13 ++++++
 packages/core/src/settings-schema.ts               |  5 +++
 packages/core/src/types.ts                         |  7 ++++
 packages/dashboard/app/App.tsx                     | 45 ++++++++++++++++++--
 .../__tests__/App.openTasksInRightSidebar.test.ts  | 48 +++++++++++++++++++++-
 .../dashboard/app/components/FloatingWindow.css    | 28 +++++++++++++
 .../dashboard/app/components/SettingsModal.tsx     |  1 +
 .../components/__tests__/FloatingWindow.test.tsx   | 22 ++++++++++
 .../settings/sections/AppearanceSection.tsx        |  7 ++++
 .../sections/__tests__/AppearanceSection.test.tsx  | 19 +++++++++
 packages/dashboard/app/hooks/useAppSettings.ts     |  5 +++
 14 files changed, 206 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-7259

Fusion-Task-Lineage: 05f22978-ede7-4d13-940c-5108390959f7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 23:12:56 -07:00
gsxdsm
2a5a108123 FN-7265: preserve workflow on refinements
Preserve workflow context when creating refinement tasks from completed or reviewed work.

- Inherit explicit source workflow selections when creating refinement tasks and seed the new card into the workflow entry column.
- Write task rows and workflow-selection rows atomically so refinements cannot be stranded outside their intended board.
- Clear successful done-task chat refinement composer bubbles and document the dashboard behavior.
- Add core and dashboard regression coverage for refinement workflow preservation.

Files changed:
 .changeset/fuzzy-refinements-dance.md              |   7 +
 .changeset/preserve-refinement-workflow.md         |   7 +
 docs/dashboard-guide.md                            |   3 +-
 .../src/__tests__/workflow-selection-store.test.ts | 159 +++++++++++++++++++--
 packages/core/src/store.ts                         |  55 ++++++-
 .../workflow-selection-cross-surface.test.tsx      |  41 +++++-
 packages/dashboard/app/components/TaskChatTab.tsx  |   5 +
 .../app/components/__tests__/TaskChatTab.test.tsx  |  27 +++-
 .../TaskDetailModal.definition-actions.test.tsx    |  52 +++++++
 9 files changed, 335 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-7265

Fusion-Task-Lineage: 48700e3e-9f3a-474e-806c-47db0b75fca1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 22:54:50 -07:00
gsxdsm
cfd9d5b32e test(FN-7249): cover phantom worktree recovery 2026-06-29 22:30:23 -07:00
gsxdsm
9e23d6c403 fix(FN-7265): stop duplicate graph plan reviews 2026-06-29 22:29:22 -07:00
gsxdsm
5a6d110483 fix(engine): stop phantom-reservation audit churn and preserve worktree on phantom reclaim
reconcilePhantomCommittedReservations emitted a task:reconcile-phantom-committed-reservation audit row every maintenance tick for the same orphaned committed reservations even when zero child rows were pruned (~19k no-op writes/day). Gate the audit emission on actual pruned work; the FN-7069 contract is unchanged (committed reservation stays committed so the ID is never reused).

clearPhantomExecutorBinding unconditionally unregistered held worktree paths from activeSessionRegistry, defeating the moveTask(preserveWorktree:true) the self-healing phantom reclaim pairs it with: re-dispatch then acquired a brand-new worktree instead of reattaching (FN-7249 lost its first worktree this way). Add a preserveWorktrees option that clears only the stale in-memory executor/lock bookkeeping and leaves the session-registry path entries intact; the self-healing caller opts in. Non-self-healing callers keep the default full-clear behavior.
2026-06-29 21:56:14 -07:00
gsxdsm
095007c640 fix(FN-7262): honor step session setting 2026-06-29 21:51:13 -07:00
gsxdsm
09687f723c fix(FN-7261): confirm AI no-op merge finalization 2026-06-29 21:38:57 -07:00
gsxdsm
d05ca2154f FN-7258: restore mobile board scroll on return
Preserve the board lane position when mobile users return from full-panel task detail.

- Capture and restore board, column, project-content, and document scroll offsets for board detail navigation.
- Retry board scroll restoration across bounded animation frames after remount and hydration.
- Cover mobile and desktop Back to board behavior with focused tests and document the mobile scroll contract.
- Add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7258-mobile-board-scroll.md          |   7 ++
 docs/dashboard-guide.md                            |   2 +
 .../__tests__/navigation-history.test.tsx          | 111 ++++++++++++++++++---
 .../hooks/__tests__/useBoardScrollRestore.test.ts  |  43 +++++++-
 .../dashboard/app/hooks/useBoardScrollRestore.ts   |  45 ++++++---
 .../utils/__tests__/boardScrollSnapshot.test.ts    |  91 +++++++++++++++--
 .../dashboard/app/utils/boardScrollSnapshot.ts     |  41 +++++++-
 7 files changed, 305 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-7258

Fusion-Task-Lineage: 97faf031-4244-4117-9948-45491c364134

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 21:02:34 -07:00
gsxdsm
9fb706944e FN-7257: dismiss task details on Android Back
Route Android Back through Fusion's mobile navigation stack before native fallback.

- Dispatch a cancelable native-back event from the Capacitor shell before browser-history or app-exit fallback.
- Handle the native-back event in dashboard navigation history so mobile task details dismiss like browser Back and swipe-back.
- Cover Android Back behavior across native shell and task-detail navigation tests.
- Add a patch changeset for the published CLI/mobile bundle.

Files changed:
 .changeset/fn-7257-android-back-task-detail.md     |   7 +
 .../__tests__/TaskDetail.swipe-back.test.tsx       | 214 +++++++++++++++++++++
 .../dashboard/app/hooks/useNavigationHistory.ts    |  15 ++
 packages/mobile/src/__tests__/native-shell.test.ts | 151 ++++++++++++++-
 packages/mobile/src/index.ts                       |   7 +-
 packages/mobile/src/plugins/native-shell.ts        | 103 +++++++++-
 6 files changed, 494 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-7257

Fusion-Task-Lineage: 90d0bc32-8968-4876-a5b4-51b34888d480

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 20:50:14 -07:00
gsxdsm
480d4d03fd FN-7254: add worktree commit history targets
Allow Git Manager users to inspect commits and diffs from registered worktrees without changing mutation targets.

- Add read-only worktreePath targeting to Git commit list and commit diff APIs with registered-worktree validation.
- Add a Commits history target selector and Worktrees "View commits" shortcuts that clear stale diff state when targets change.
- Document the read-only scope and cover API, UI, responsive layout, and mutation-target invariants with tests.

Files changed:
 .changeset/fn-7254-git-manager-worktree-commits.md |   7 +
 .changeset/fn-7254-worktree-commit-target-ui.md    |   7 +
 .changeset/fn-7254-worktree-commits.md             |   7 +
 docs/dashboard-guide.md                            |   6 +-
 packages/dashboard/app/api/legacy.ts               |  15 +-
 .../dashboard/app/components/GitManagerModal.tsx   | 133 ++++++++++++++--
 packages/dashboard/app/components/ScriptsModal.css | 113 ++++++++++++++
 .../components/__tests__/GitManagerModal.test.tsx  | 167 +++++++++++++++++++++
 .../dashboard/src/__tests__/routes-git.test.ts     |  34 +++++
 .../dashboard/src/routes/register-git-github.ts    |  31 +++-
 10 files changed, 497 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-7254

Fusion-Task-Lineage: 37314175-fef4-4f8d-8268-cf27fee09857

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 20:24:24 -07:00
gsxdsm
45dd8082b3 FN-7256: reuse fresh task snapshots on board return
Reuse fresh task data when users return to Board or List views.

- Track the confirmed task snapshot context and freshness window before deciding whether task-view re-entry needs a catch-up fetch.
- Preserve SSE reconnect, stale snapshot, query, archive, project-change, missing-data, and error recovery fetch paths.
- Cover fresh, stale, empty, failed, no-snapshot, project-scoped, and reconnect return behavior in useTasks tests.
- Document the Board/List return cache behavior and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7256-board-return-cache.md           |   7 +
 docs/dashboard-guide.md                            |   2 +
 .../dashboard/app/hooks/__tests__/useTasks.test.ts | 221 ++++++++++++++++++++-
 packages/dashboard/app/hooks/useTasks.ts           |  34 +++-
 4 files changed, 258 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-7256

Fusion-Task-Lineage: 14dd91c4-bf06-4dcf-8324-2572828fd2ee

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 20:16:41 -07:00
gsxdsm
224e8b4065 FN-7252: Preserve selected file across worktree switches
Keep the Files modal focused on the selected file when users switch worktrees.

- Preserve selected file state during workspace changes and restore the sidebar to the file parent directory.\n- Keep mobile users in the editor pane when switching worktrees with an active file.\n- Cover desktop and mobile worktree-switch reload behavior in FileBrowserModal tests.\n- Add a patch changeset for the Files modal fix.\n\nFiles changed:\n .changeset/fn-7252-file-browser-worktree-reload.md |   7 +\n .../dashboard/app/components/FileBrowserModal.tsx  |  21 ++-\n .../components/__tests__/FileBrowserModal.test.tsx | 153 +++++++++++++++++++++\n .../dashboard/app/hooks/useWorkspaceFileBrowser.ts |   4 +\n 4 files changed, 182 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-7252

Fusion-Task-Lineage: b791e3d7-6a68-48aa-aeb4-c826cec7f760

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 19:51:38 -07:00
gsxdsm
f01e5c9651 FN-7247: document current workflow behavior
Refresh workflow documentation to match the latest runtime, dashboard, and agent tool behavior.

- Add a current workflow behavior inventory covering built-ins, fail-closed runtime semantics, optional gates, settings, tools, routing, and create forwarding.
- Clarify dashboard All workflows aggregation, workflow badges, and workflow-aware task creation behavior.
- Expand editor, agent, CLI, and settings docs for governed workflow authoring, values, trait inspection, and selection boundaries.
- Add docs drift tests requiring workflow docs index coverage and current behavior markers.

Files changed:
 docs/agents.md                                     |  5 +-
 docs/cli-reference.md                              | 11 ++-
 docs/dashboard-guide.md                            | 10 ++-
 docs/settings-reference.md                         |  5 ++
 docs/workflow-editor.md                            | 15 +++-
 docs/workflow-steps.md                             | 48 ++++++++---
 .../cli/src/__tests__/docs-readme-index.test.ts    |  4 +
 .../src/__tests__/workflow-docs-current.test.ts    | 95 ++++++++++++++++++++++
 8 files changed, 172 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-7247
Fusion-Task-Lineage: 72bf0c89-80a3-440c-b6aa-1aea315279f5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 19:46:23 -07:00
gsxdsm
e4a9dc6df5 FN-7250: remove deleted tasks from shared task state
Keep board and right-dock task lists in sync immediately after a task delete succeeds.

- Remove deleted ids from useTasks state as soon as the delete API call resolves.
- Update or clear the project task SWR cache to avoid stale remount hydration.
- Invalidate older refreshes so late pre-delete snapshots cannot resurrect removed cards.
- Cover board columns, right-dock rows, cache updates, rejection handling, archived rows, and late refresh behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-7250-delete-refresh.md               |   7 +
 .../app/components/__tests__/Board.test.tsx        |  35 ++++
 .../app/components/__tests__/DockTaskList.test.tsx |  30 ++++
 .../dashboard/app/hooks/__tests__/useTasks.test.ts | 190 +++++++++++++++++++++
 packages/dashboard/app/hooks/useTasks.ts           |  33 +++-
 5 files changed, 294 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7250

Fusion-Task-Lineage: f2271366-7494-402c-9a8b-9927dbe4401c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 19:36:01 -07:00
gsxdsm
ffe2092109 FN-7248: require confirmation for footer concurrency edits
Footer concurrency controls now require explicit confirmation before persisting scheduler-capacity changes.

- Add local pending state for global and project footer concurrency slider edits so dismissals revert instead of saving.
- Reuse Command Center confirmation copy for single and grouped concurrency changes.
- Cover confirm, cancel, close, Escape, outside-click, loading, and error behaviors in EngineControlMenu tests.
- Document the footer confirmation and dismissal semantics and add a patch changeset.

Files changed:
 .../fn-7248-footer-concurrency-confirmation.md     |   7 +
 docs/dashboard-guide.md                            |   3 +-
 .../dashboard/app/components/EngineControlMenu.tsx | 235 ++++++++++++++---
 .../__tests__/EngineControlMenu.test.tsx           | 287 +++++++++++++++++++--
 4 files changed, 478 insertions(+), 54 deletions(-)

Fusion-Task-Id: FN-7248

Fusion-Task-Lineage: cbcd21fa-62c3-4c05-ac3d-67a641cf47c8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 19:29:36 -07:00
gsxdsm
be9e231004 fix(FN-7248): skip completed steps on resume 2026-06-29 19:23:38 -07:00
gsxdsm
ed21597690 FN-7251: suppress missing skill-pattern info logs
Suppress non-actionable missing configured skill-pattern messages while preserving resolver diagnostics.

- Filter configured skill-pattern miss diagnostics out of pi runtime logging paths.
- Keep missing configured patterns available as resolver diagnostics for programmatic visibility.
- Cover direct skill resolution and fn-agent creation logging with regression tests.
- Add a patch changeset for the published Fusion CLI package.

Files changed:
 .../fn-7251-suppress-missing-skill-pattern-logs.md |  7 +++
 .../src/__tests__/pi-create-fn-agent.test.ts       | 21 ++++++---
 .../engine/src/__tests__/skill-resolver.test.ts    | 50 ++++++++++++++++++----
 packages/engine/src/pi.ts                          |  1 +
 packages/engine/src/skill-resolver.ts              | 13 ++++++
 5 files changed, 78 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-7251

Fusion-Task-Lineage: 3c61c349-f216-410b-9ead-24c310bb2415

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 19:17:37 -07:00
gsxdsm
797b30ce5d FN-7242: add all-workflows board view and workflow badges
Adds an aggregate workflow board mode with workflow-name context on mixed-workflow task surfaces.

- Add a dashboard-only All workflows switcher option that unions visible workflow columns without persisting the sentinel as a real workflow selection.
- Thread workflow metadata into board cards, worktree groups, and task detail headers so mixed workflow views show the task workflow name.
- Update workflow status counts, quick-create targeting, docs, changesets, and regression coverage for aggregate board and badge behavior.

Files changed:
 .changeset/fn-7242-all-workflows-board.md          |   7 +
 .changeset/fn-7242-task-detail-workflow-badge.md   |   7 +
 .changeset/fn-7242-workflow-badges.md              |   7 +
 docs/dashboard-guide.md                            |   8 +-
 .../workflow-selection-cross-surface.test.tsx      |   6 +-
 packages/dashboard/app/components/Board.tsx        | 295 +++++++++++++++++++--
 packages/dashboard/app/components/Column.tsx       |   6 +-
 packages/dashboard/app/components/TaskCard.css     |  16 +-
 packages/dashboard/app/components/TaskCard.tsx     |  23 +-
 .../dashboard/app/components/TaskDetailModal.css   |  14 +-
 .../dashboard/app/components/TaskDetailModal.tsx   |  43 ++-
 .../dashboard/app/components/WorkflowSwitcher.tsx  |  38 ++-
 .../dashboard/app/components/WorktreeGroup.tsx     |   5 +
 .../app/components/__tests__/Board.test.tsx        | 192 +++++++++++++-
 .../__tests__/TaskCard.badge-wrap.test.tsx         |   2 +
 .../app/components/__tests__/TaskCard.test.tsx     |  38 +++
 .../__tests__/TaskDetailModal.rendering.test.tsx   | 161 ++++++++++-
 .../components/__tests__/WorkflowSwitcher.test.tsx |  50 ++++
 .../__tests__/workflowStatusCounts.test.ts         |  26 +-
 .../app/components/workflowStatusCounts.ts         |  16 +-
 20 files changed, 887 insertions(+), 73 deletions(-)

Fusion-Task-Id: FN-7242
Fusion-Task-Lineage: 7ff9d35a-83ef-406c-88f4-a8846edad381
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 18:54:28 -07:00
gsxdsm
9fd286b1d3 fix(FN-7242): keep code review remediation recovering 2026-06-29 18:41:43 -07:00
gsxdsm
03d4f95e8a FN-7224: separate Anthropic subscription and API-key auth
Separate Claude subscription OAuth from raw Anthropic API-key authentication surfaces.

- Add synthetic Anthropic Subscription and Anthropic API Key provider IDs while preserving upstream credential storage compatibility.\n- Map dashboard auth routes, CLI auth storage, Settings, and onboarding flows so OAuth login/logout and API-key save/clear no longer share one user-facing card.\n- Extend auth tests, docs, icons, and the release changeset for the split Anthropic authentication behavior.\n\nFiles changed:\n .changeset/fn-7224-separate-anthropic-api-key.md   |   7 +\n docs/dashboard-guide.md                            |   2 +-\n docs/settings-reference.md                         |   2 +-\n .../src/commands/__tests__/provider-auth.test.ts   | 233 +++++++++++++++++++--\n packages/cli/src/commands/provider-auth.ts         | 202 +++++++++++++++---\n packages/dashboard/app/api/legacy.ts               |   2 -\n .../app/components/ModelOnboardingModal.tsx        | 146 ++++---------\n packages/dashboard/app/components/ProviderIcon.tsx |   7 +\n .../__tests__/AuthenticationSection.test.tsx       |  89 ++++----\n .../__tests__/SettingsModal.models-auth.test.tsx   |  77 ++++---\n .../components/__tests__/onboarding-flow.test.tsx  |  29 ++-\n .../components/__tests__/settings-mobile.test.tsx  |  17 +-\n .../settings/sections/AuthenticationSection.tsx    |  20 +-\n .../dashboard/src/__tests__/routes-auth.test.ts    | 111 ++++++----\n .../dashboard/src/routes/register-auth-routes.ts   |  93 +++++---\n 15 files changed, 713 insertions(+), 324 deletions(-)

Fusion-Task-Id: FN-7224

Fusion-Task-Lineage: a2db2cf6-3452-4516-81e5-41dcdf47e1d2

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 18:32:36 -07:00
gsxdsm
90b62b7884 FN-7246: preserve explicit empty step dependencies
Preserve authored empty workflow step dependencies so parallel roots remain independent.

- Keep parser and TaskStep projections from dropping explicit empty dependsOn arrays.
- Treat missing dependsOn as the legacy previous-step fallback while allowing [] to mean no dependencies.
- Cover heading and JSON parsers plus parallel foreach scheduling with regression tests and docs.

Files changed:
 .changeset/fn-7246-workflow-depends-on-empty.md              |  7 +++++++
 docs/workflow-steps.md                                       |  4 ++--
 packages/core/src/__tests__/step-parsers.test.ts             |  8 ++++----
 packages/core/src/step-parsers.ts                            | 30 +++++++++++++++++++++---------
 packages/core/src/types.ts                                   | 13 +++++++++----
 packages/engine/src/__tests__/workflow-parse-steps.test.ts   | 12 ++++++++++++
 packages/engine/src/__tests__/workflow-step-parallel.test.ts | 30 +++++++++++++++++++++++++++++-
 packages/engine/src/workflow-graph-foreach.ts                |  9 +++++++--
 packages/engine/src/workflow-node-handlers.ts                |  6 +++++-
 9 files changed, 96 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-7246

Fusion-Task-Lineage: a75687fa-5711-4509-b60f-43669323a6c0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 18:05:44 -07:00
gsxdsm
6f2b8ab6e5 FN-7244: retry unavailable Plan Review without replanning
Preserve existing task specs when Plan Review retries after reviewer outages.

- Route plan-review-unavailable triage tasks through the Plan Review/finalization path instead of the planner.
- Validate existing PROMPT.md content and fail clearly when it is missing, empty, or invalid.
- Preserve retry status across interrupted triage work and cover retry behavior with engine tests.
- Document the retry lifecycle and add a patch changeset.

Files changed:
 .../fn-7244-plan-review-unavailable-retry.md       |   7 +
 docs/architecture.md                               |   2 +
 docs/workflow-steps.md                             |   2 +
 .../triage-plan-review-unavailable-retry.test.ts   | 251 +++++++++
 packages/engine/src/__tests__/triage.test.ts       | 604 +++++++++++++++++++++
 packages/engine/src/triage.ts                      | 108 +++-
 6 files changed, 945 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-7244

Fusion-Task-Lineage: 80e790e3-d2b9-4309-beec-3dbf6a03db39

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 17:40:00 -07:00
gsxdsm
72e50ac8c6 fix(artifacts): support task image artifact previews (#1821)
## Summary
Task image artifacts can now complete the full loop: agents and chat
flows can register base64 image bytes, and task details can display
those artifacts with an expandable preview instead of leaving them as
undiscoverable metadata.

This keeps binary payloads on the existing managed artifact storage
path, validates that base64 payloads are real non-empty image data, and
documents the new `dataBase64` field for engine-tool callers. The task
details artifacts gallery now treats image cards as expandable while
leaving document, audio, video, and generic artifact cards on their
existing behavior.

## Validation
- `pnpm --filter @fusion/dashboard exec vitest run
app/components/__tests__/TaskDocumentsTab.test.tsx
src/routes/__tests__/artifacts-route-integration.test.ts
--silent=passed-only --reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/agent-artifact-tools.test.ts --silent=passed-only
--reporter=dot`

---

[![Compound
Engineering](https://img.shields.io/badge/Built_with-Compound_Engineering-6366f1)](https://github.com/EveryInc/compound-engineering-plugin)
![AI_Assistant](https://img.shields.io/badge/AI_Assistant-000000)


<!-- stage-review-badge-begin -->

---

<a href="https://stagereview.app/Runfusion/Fusion/pull/1821">
  <picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://stagereview.app/assets/gh-open-in-stage-dark.svg">
<img src="https://stagereview.app/assets/gh-open-in-stage-light.svg"
alt="Open in Stage">
  </picture>
</a>

<!-- stage-review-badge-end -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added inline base64 (`dataBase64`) support for registering image
artifacts from agent tools, including task-scoped chat registration.
* Task details now allow expanding image media artifacts in a preview
lightbox with accessible keyboard interaction.
* **Bug Fixes**
* Improved verification for media streaming by validating raw binary
responses; added HTTP 200/404 coverage for image endpoints.
* **Documentation**
* Updated `fn_artifact_register` tool documentation to include the
optional `dataBase64` parameter.
* **Tests**
* Added coverage for base64 validation/error handling and lightbox
expand/close behavior (including Escape and Tab focus trapping).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-29 17:33:50 -07:00
gsxdsm
9440a00ced Merge branch 'main' into fix/external-review-checkout 2026-06-29 17:33:03 -07:00
gsxdsm
e975b7f1a8 test: stabilize dashboard PR repository fixtures (#1824)
## Summary
- Mocks `git remote get-url origin` for dashboard PR lifecycle tests via
`execFileSync`, matching the production repository resolver.
- Keeps the missing-repository error covered for cases where no project
remote is resolvable.
- Tightens dashboard PR lifecycle assertions so PR status checks use the
resolved owner/repo.

## Verification
- `corepack pnpm build` — pass
- `corepack pnpm --filter @runfusion/fusion exec vitest run
src/commands/__tests__/dashboard.test.ts --silent=passed-only
--reporter=dot --no-color` — pass, 86 tests
- `corepack pnpm --filter @runfusion/fusion exec vitest run
src/commands/__tests__/dashboard.test.ts -t
"processPullRequestMergeTask|PR-first auto-merge queue"
--silent=passed-only --reporter=dot --no-color` — pass, 7 tests
- Clean rebuilt stale bundled plugin dist, then `corepack pnpm --filter
@runfusion/fusion exec vitest run --changed
24d78816a0 --passWithNoTests
--silent=passed-only --reporter=dot --no-color` — pass, 75 files / 1186
tests
- `corepack pnpm check:changesets` — pass
- `corepack pnpm lint` — pass
- `corepack pnpm typecheck` — pass

No changeset: test-only fixture coverage; no package runtime behavior
changed.

## CI note
The current Gate failure is the pre-existing engine-core workflow
expectation drift fixed by PR #1822. Lint, Typecheck, Build, CodeRabbit,
and Greptile passed on this PR.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Tests**
* Expanded dashboard and pull request merge coverage to verify
repository detection and merge-status handling across merge lifecycle
paths.
* Added a failure-path assertion for when the app can’t determine the
current repository, ensuring the operation stops and surfaces the
expected error.
* Improved assertions for auto-merge and manual merge flows to confirm
the correct repository lookup occurs in each scenario.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Current Gate status

`Gate` is failing on current `origin/main` before these PR changes. I
reproduced the same engine-core failures directly on `origin/main`
(`task-pipeline-smoke.test.ts` and
`workflow-graph-executor-parity.test.ts`, caused by the new
`completion-summary` / `post-merge-verification` default workflow
nodes). The PR-local review feedback is addressed and focused validation
passes; the remaining Gate failure should be fixed in the upstream
workflow-test drift PR, not copied into this PR branch.
2026-06-29 17:32:46 -07:00
Phil Larson
4c31441f58 fix: reset PR fixture git remote mock consistently 2026-06-29 17:18:59 -07:00
copilot-swe-agent[bot]
8544b5b08b fix(FN-7143): simplify base64 validation and improve error messages 2026-06-30 00:18:04 +00:00
Phil Larson
06b863ed2f fix: address external review checkout review feedback 2026-06-29 17:17:59 -07:00
Phil Larson
b829821dd9 fix(engine): review explicit external checkouts 2026-06-29 17:17:59 -07:00
Phil Larson
6763584f64 fix: align dashboard PR fixture cwd mock 2026-06-29 17:17:35 -07:00
Phil Larson
bdd0a1cc2c test(cli): stabilize dashboard pr repository fixtures 2026-06-29 17:17:35 -07:00
copilot-swe-agent[bot]
1bf8d83bc1 Merge remote-tracking branch 'origin/main' into fusion/fn-7143 2026-06-30 00:14:37 +00:00
Phil Larson
af99a353f0 test(engine): align workflow gate expectations 2026-06-29 17:13:15 -07:00
Phil Larson
90756f92b0 fix(core): await secrets store close during TaskStore shutdown 2026-06-29 17:11:59 -07:00
gsxdsm
d7f26bb6cf fix(FN-7219): stabilize compound engineering workflow 2026-06-29 16:42:11 -07:00
gsxdsm
42226edde1 FN-7245: expose workflow authoring tools to agents
Expose workflow authoring and selection tools through agent-visible extension surfaces.

- Register workflow list/get/create/update/delete/settings/select and trait-list tools in the published pi extension.
- Export shared workflow tool schemas/factories and include workflow settings in centralized authoring tool sets.
- Update action-gate classifications, permission examples, docs, tests, and the changeset for the new agent workflow surface.

Files changed:
 .changeset/FN-7245-workflow-tools.md               |   7 +
 docs/agents.md                                     |   4 +-
 docs/cli-reference.md                              |  17 ++
 docs/workflow-steps.md                             |   9 +-
 .../src/__tests__/extension-workflow-tools.test.ts | 244 +++++++++++++++++++++
 packages/cli/src/__tests__/extension.test.ts       |   8 +
 packages/cli/src/extension.ts                      | 142 ++++++++++++
 packages/core/src/types.ts                         |   6 +-
 .../dashboard/src/__tests__/chat-manager.test.ts   |   9 +-
 .../planning-document-tools-exposure.test.ts       |  19 +-
 .../engine/src/__tests__/agent-action-gate.test.ts |   8 +
 .../agent-workflow-tools-exposure.test.ts          |  30 ++-
 .../src/__tests__/gating-classifications.test.ts   |  13 +-
 .../src/__tests__/permanent-agent-gating.test.ts   |   4 +-
 packages/engine/src/agent-tools.ts                 |  13 +-
 packages/engine/src/gating-classifications.ts      |   6 +-
 packages/engine/src/index.ts                       |   7 +
 17 files changed, 506 insertions(+), 40 deletions(-)

Fusion-Task-Id: FN-7245

Fusion-Task-Lineage: 82501602-7177-4ee8-a67b-32de35aa73de

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 16:35:51 -07:00
gsxdsm
5b668d297f FN-7238: add Done column sort modes
Add Done-column controls for choosing descending completion-date or task-ID order.

- Add a Done-only sort selector shared by legacy and workflow complete columns.
- Extend task display sorting with completion-date and task-ID descending modes.
- Cover board, column, and sorting behavior with regression tests and docs.
- Add a minor changeset for the published CLI package.

Files changed:
 .changeset/fn-7238-done-column-sort.md             |   7 +
 docs/dashboard-guide.md                            |   5 +-
 packages/dashboard/app/components/Board.tsx        |  28 +++-
 packages/dashboard/app/components/Column.tsx       |  33 ++++-
 .../app/components/__tests__/Board.test.tsx        | 133 ++++++++++++++++-
 .../app/components/__tests__/Column.test.tsx       | 158 +++++++++++++++++++++
 .../app/components/__tests__/taskSorting.test.ts   | 114 +++++++++++++++
 packages/dashboard/app/components/taskSorting.ts   |  39 ++++-
 packages/dashboard/app/styles.css                  |  35 +++++
 9 files changed, 538 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-7238

Fusion-Task-Lineage: 143722e9-0b59-41e5-954d-810263f18ba9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 15:46:35 -07:00
gsxdsm
0ff60a79d1 FN-7243: focus auth token recovery on unauthorized
Focus daemon authorization failures on auth-token recovery instead of engine remediation.

- Pass auth-token recovery state into dashboard banners so engine unavailable and status remediation banners stay hidden while recovery is open.
- Improve auth recovery dialog focus styling and tests for unauthorized daemon responses.
- Add release notes for focused auth-token recovery behavior.

Files changed:
 .changeset/auth-token-recovery-focus.md            |   7 ++
 .changeset/fn-7243-auth-recovery-banner.md         |   7 ++
 packages/dashboard/app/App.tsx                     |   1 +
 packages/dashboard/app/__tests__/auth.test.ts      |  31 ++++-
 .../app/components/AuthTokenRecoveryDialog.css     |   7 +-
 .../__tests__/AuthTokenRecoveryDialog.test.tsx     |  41 +++++-
 .../app/components/dashboard/DashboardBanners.tsx  |  14 ++-
 .../dashboard/__tests__/DashboardBanners.test.tsx  | 138 ++++++++++++++++++++-
 .../dashboard/app/components/dashboard/types.ts    |   1 +
 .../hooks/__tests__/useAuthTokenRecovery.test.ts   |   9 +-
 10 files changed, 238 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-7243

Fusion-Task-Lineage: 8292080d-a310-4fdc-9b5f-baa17a592bad

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 15:34:06 -07:00
gsxdsm
c6c4a003f9 FN-7241: add per-block task chat timestamps
Show relative timestamps throughout task-detail chat transcript blocks.

- Add reusable timestamp rendering for text, tool, thinking, and user message blocks.
- Align timestamp styling with quiet, responsive task chat metadata treatments.
- Cover empty, loading, invalid timestamp, block timestamp, and tool fallback cases.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-7241-task-chat-block-timestamps.md   |  7 ++
 packages/dashboard/app/components/TaskChatTab.css  | 44 +++++++++++-
 packages/dashboard/app/components/TaskChatTab.tsx  | 65 +++++++++++++++---
 .../app/components/__tests__/TaskChatTab.test.tsx  | 80 ++++++++++++++++++++--
 4 files changed, 179 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-7241

Fusion-Task-Lineage: 87470de1-4113-4c6a-832d-ced4b1675a76

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 15:28:46 -07:00
gsxdsm
3886e585dd fix(FN-7143): show compound workflow node progress
Record skill-backed workflow nodes into workflowStepResults and teach task progress surfaces to include those graph-node records without re-showing disabled optional workflow checks.
2026-06-29 14:59:16 -07:00
gsxdsm
b26d8a6772 fix(FN-7143): address image artifact review feedback
- classify image artifact support as a minor feature changeset
- reject non-image, empty, and signature-mismatched dataBase64 payloads
- trap keyboard focus in the task image lightbox
- assert media streaming with raw image bytes

Fusion-Task-Id: FN-7143
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 14:59:07 -07:00
gsxdsm
167d242ad5 FN-7236: make workflow tabs swipeable on mobile
Keep the Workflow simple-editor tab bar contained while preserving horizontal touch scrolling.

- Clamp the mobile tab strip to the editor width and make it the horizontal scroll owner.
- Preserve intrinsic tab button widths and pan gestures for narrow touch viewports.
- Add CSS, component, and shared overflow regression coverage for the full six-tab strip.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-7236-workflow-mobile-tab-scroll.md   |  7 +++
 .../dashboard-overflow-containment.test.tsx        | 32 ++++++++++++-
 .../app/components/WorkflowNodeEditor.css          | 32 ++++++++++++-
 .../__tests__/WorkflowNodeEditor.css.test.ts       | 29 ++++++++++++
 .../__tests__/WorkflowNodeEditor.test.tsx          | 55 +++++++++++++++++++++-
 5 files changed, 152 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-7236

Fusion-Task-Lineage: 1601d4c2-2039-4410-809c-7dcdfea04301

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 14:50:02 -07:00
gsxdsm
b36327059a FN-7234: preserve board workflow selections
Persist workflow choices across dashboard board surfaces so operators return to their selected lane reliably.

- Add project-scoped durable storage helpers for board workflow selection with stale-id validation and cleanup.
- Share the workflow selection hook across Board, List, Header, and Graph surfaces while preserving cached payloads on transient refresh failures.
- Update List quick-create/planning handoffs, cross-surface tests, and dashboard documentation for durable workflow selection behavior.
- Add patch changesets for the published Fusion package.

Files changed:
 .changeset/fn-7234-durable-board-workflow-selection.md    |   7 ++
 .changeset/workflow-selection-board-list.md               |   7 ++
 docs/dashboard-guide.md                                   |   5 +-
 .../workflow-selection-cross-surface.test.tsx             |  66 ++++++++--
 packages/dashboard/app/components/ListView.tsx            | 111 ++++-------------
 .../app/components/__tests__/Board.test.tsx               |  45 +++++++
 .../__tests__/GraphWorkflowSwitcherSlot.test.tsx          |  57 +++++++++
 .../__tests__/HeaderWorkflowSwitcherSlot.test.tsx         |  42 ++++++-
 .../app/components/__tests__/ListView.test.tsx            | 122 +++++++++++++++++++
 .../app/hooks/__tests__/useBoardWorkflows.test.ts         |  29 +++++
 packages/dashboard/app/hooks/useBoardWorkflows.ts         |  64 ++++++++-
 .../utils/__tests__/boardWorkflowSelection.test.ts        | 135 +++++++++++++++++++++
 .../app/utils/__tests__/projectStorage.test.ts            |   3 +-
 .../dashboard/app/utils/boardWorkflowSelection.ts         |  49 ++++++++
 packages/dashboard/app/utils/projectStorage.ts            |   1 +
 15 files changed, 633 insertions(+), 110 deletions(-)

Fusion-Task-Id: FN-7234
Fusion-Task-Lineage: 6ebc000c-19c3-4a8e-9303-4e18a59902ed
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 14:41:52 -07:00
gsxdsm
d22b8cc60a FN-7232: dismiss task detail on mobile swipe-back
Mobile task details now participate in history navigation so native swipe-back dismisses or unwinds the detail modal.

- Push a navigation entry whenever task detail opens through the app-level modal path.
- Restore the previous task detail snapshot when backing out of nested detail opens before closing the modal.
- Add mobile swipe-back coverage for board, list, dock, nested, and explicit close surfaces.
- Include a patch changeset for the published Fusion CLI package.

Files changed:
 .changeset/fn-7232-swipe-back-task-detail.md       |   7 +
 packages/dashboard/app/App.tsx                     |   5 +-
 packages/dashboard/app/components/AppModals.tsx    |  26 +-
 .../__tests__/TaskDetail.swipe-back.test.tsx       | 572 +++++++++++++++++++++
 packages/dashboard/vitest.config.ts                |   1 +
 5 files changed, 605 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-7232

Fusion-Task-Lineage: 0291d01c-2008-490c-b0d1-0f0641fbd18c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 14:34:44 -07:00
gsxdsm
e80d85b101 FN-7240: Make task-detail tool text readable
Raise task-detail chat tool-call typography while preserving compact collapsed rows.

- Increase task chat tool summary, kicker, label, and detail text to the base spacing font token.
- Add CSS regression coverage to prevent the smaller calc font size from returning across desktop, mobile, and narrow hosts.
- Include the TaskChatTab suite in the dashboard chat quality test lane and add a patch changeset.

Files changed:
 .changeset/fn-7240-task-chat-tool-font.md          |  7 ++++++
 packages/dashboard/app/components/TaskChatTab.css  | 11 ++++++----
 .../app/components/__tests__/TaskChatTab.test.tsx  | 25 +++++++++++++++++++---
 packages/dashboard/vitest.config.ts                |  2 ++
 4 files changed, 38 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-7240

Fusion-Task-Lineage: 4d3ed287-27b7-4107-bc42-0119d5a4f1e9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 14:29:17 -07:00
gsxdsm
a766813ed9 FN-7239: scope executor prompts and quarantine stale pause test
Scope missing executor prompts safely while keeping graph coverage aligned with the post-cutover workflow route.

- Treat absent executor prompts as empty before worktree path scoping.
- Update graph retry, parity, and smoke expectations for plan review, completion summary, and post-merge traversal.
- Quarantine only the stale executor-pause direct-dispatch suite with a ledger entry and engine-default exclude.

Files changed:
 .changeset/fn-7239-scope-prompt-guard.md           |  7 ++++
 .../engine/src/__tests__/executor-pause.test.ts    | 10 +++++
 .../src/__tests__/task-pipeline-smoke.test.ts      |  7 ++++
 .../workflow-graph-executor-parity.test.ts         | 15 ++++++-
 ...ow-graph-executor-retry-coding-workflow.test.ts | 48 +++++++++++++++++-----
 packages/engine/src/executor.ts                    | 15 ++++---
 packages/engine/vitest.config.ts                   |  5 +++
 scripts/lib/test-quarantine.json                   |  8 +++-
 8 files changed, 97 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-7239

Fusion-Task-Lineage: 9382e4e0-7cfc-416a-93e8-6ba1c7cd7879

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 14:17:29 -07:00
gsxdsm
41c0cf3603 fix(FN-7235): scope workflow remediation recovery
Keep merge finalization from stranding scoped workflow tasks on out-of-scope branch residue, move built-in optional gate remediation attempts into workflow config, and guard review remediation against out-of-scope fixes.

Also covers FN-7236 review-remediation scope drift.
2026-06-29 14:00:32 -07:00
gsxdsm
7b43f73327 FN-7235: align footer concurrency use markers
Align footer concurrency indicators with absolute running-agent utilization.

- Change footer use-marker ratio math to use current running count over configured cap.
- Cover zero, one-active, mid-track, over-cap, loading, and error marker states in EngineControlMenu tests.
- Document the footer marker behavior and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7235-footer-concurrency-marker.md    |  7 +++
 docs/dashboard-guide.md                            |  3 +-
 .../dashboard/app/components/EngineControlMenu.tsx | 14 +++--
 .../__tests__/EngineControlMenu.test.tsx           | 70 +++++++++++++++++++---
 4 files changed, 79 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-7235

Fusion-Task-Lineage: 0dda1277-2d89-4195-882c-6488dfc67288

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-29 13:44:09 -07:00