Dashboard Back navigation now dismisses task detail surfaces before leaving the current context.
- Add full-panel task-detail history entries that restore board/list state or the previous nested detail.
- Route modal task-detail Back handling through the same close path as explicit dismissal so deep-link cleanup runs.
- Cover board-opened, nested, and modal popstate flows and document the Back behavior.
- Add a patch changeset for the published Fusion dashboard behavior.
Files changed:
.changeset/fn-6964-dashboard-back-navigation.md | 7 ++
docs/dashboard-guide.md | 3 +-
packages/dashboard/app/App.tsx | 50 ++++++++++--
packages/dashboard/app/components/AppModals.tsx | 31 ++++++--
.../app/components/__tests__/App.test.tsx | 90 ++++++++++++++++++++++
.../app/components/__tests__/AppModals.test.tsx | 5 +-
.../app/components/dashboard/MainContent.tsx | 6 +-
.../dashboard/app/components/dashboard/types.ts | 1 -
8 files changed, 173 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-6964
Fusion-Task-Lineage: 2308b603-a6ac-4978-9a6a-a6028b9bc38c
Expose the board quick-add planning handoffs from the New Task dialog.
- Wire New Task modal actions through AppModals to open Planning Mode and Subtask Breakdown.
- Reset and close the dialog without discard confirmation when handing off the typed description.
- Cover the dialog affordance parity, trimmed handoff payloads, and disabled empty-description state.
- Document the Plan and Subtask quick-add buttons in the dashboard guide.
Files changed:
docs/dashboard-guide.md | 2 +
packages/dashboard/app/App.tsx | 2 +
packages/dashboard/app/components/AppModals.tsx | 6 ++
packages/dashboard/app/components/NewTaskModal.tsx | 41 ++++++++----
.../app/components/__tests__/NewTaskModal.test.tsx | 77 +++++++++++++++++++++-
5 files changed, 113 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-6879
Fusion-Task-Lineage: 9e4b499d-8175-4172-afeb-fe70845241c0
Keep task detail PR and review affordances synchronized with the current project auto-merge setting.
- Thread the live auto-merge value into task detail modals and list split-pane detail views.
- Prefer the live auto-merge setting over the stale fetched modal snapshot while preserving task-level overrides.
- Cover PR and review tab behavior for auto-merge on/off and document the dashboard behavior.
- Evict flaky engine gate entries and add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6247-automerge-off-modal-stale.md | 5 +
docs/dashboard-guide.md | 1 +
packages/dashboard/app/App.tsx | 3 +-
packages/dashboard/app/components/AppModals.tsx | 2 +
packages/dashboard/app/components/ListView.tsx | 3 +
.../dashboard/app/components/TaskDetailModal.tsx | 4 +-
.../__tests__/TaskDetailModal.create-pr.test.tsx | 171 ++++++++++++++++++++-
packages/engine/vitest.config.ts | 2 -
8 files changed, 182 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6247
Fusion-Task-Lineage: 1321c03a-216d-4b15-bf4f-95621d68c9ae
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
Make the mobile workflow editor easier to use by collapsing competing panels and updating coverage.
- add a mobile inspector toggle that collapses node details and re-expands on node selection
- default the templates palette to collapsed on mobile and tighten mobile toolbar/layout styling to avoid overlap
- remove the stale workflow-id preselection path from the editor and align workflow edge/mobile regression coverage
- drop the unused modal prop wiring so the editor API matches the merged implementation
Files changed:
packages/dashboard/app/components/AppModals.tsx | 1 -
.../app/components/WorkflowNodeEditor.css | 61 +++++++++
.../app/components/WorkflowNodeEditor.tsx | 63 +++++++---
.../__tests__/WorkflowNodeEditor.css.test.ts | 21 ++++
.../__tests__/WorkflowNodeEditor.test.tsx | 139 +++++++++++----------
5 files changed, 200 insertions(+), 85 deletions(-)
Fusion-Task-Id: FN-6058
Fusion-Task-Lineage: d037832f-8bd8-4e3d-b31b-e30cd9752838
Open the board workflow editor directly to the selected workflow, including on mobile.
- pass the selected workflow id from the board toolbar through app modal state into the workflow editor
- preselect the requested workflow when loading workflows, while preserving settings/create entry points and mobile fallback behavior
- cover the new workflow targeting behavior in board, modal manager, and workflow editor tests and document the mobile editor flow
Files changed:
docs/dashboard-guide.md | 3 +-
packages/dashboard/app/App.tsx | 4 +-
packages/dashboard/app/components/AppModals.tsx | 1 +
packages/dashboard/app/components/Board.tsx | 6 +-
packages/dashboard/app/components/WorkflowNodeEditor.tsx | 13 ++++-
packages/dashboard/app/components/__tests__/Board.test.tsx | 4 ++
packages/dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx | 68 ++++++++++++++++++++++
packages/dashboard/app/hooks/__tests__/useModalManager.test.ts | 42 +++++++++++++
packages/dashboard/app/hooks/useModalManager.ts | 16 +++--
Fusion-Task-Id: FN-6037
Fusion-Task-Lineage: e983e699-5376-434f-af03-39ce5a300029
Add a React Flow (@xyflow/react) based WorkflowNodeEditor: a lazy-loaded modal
with a workflow list, a node palette (prompt/script/gate/merge-boundary),
drag-to-connect edges, a per-node inspector, and save with compile-validation
that surfaces non-linear graphs as a banner. Pure irToFlow/flowToIr mapping
round-trips the v1 IR plus editor layout. Reachable via a Graph editor button in
the Workflow Steps manager; mounted in AppModals behind a new modal-manager
flag. Adds a vendor-reactflow Vite chunk and a feature changeset.
Ensure task detail modal openings consistently register browser history so Android back swipe/button dismisses the modal from all entry paths.
- add a shared openDetailTaskWithNav callback in AppModals that opens task detail and pushes a modal close handler into navigation history
- route onboarding view-task, activity log open-task, and task-to-task detail navigation through the new history-aware opener
- extend AppModals tests with a navigation history wrapper and popstate assertions for onboarding/activity log/task-to-task flows
- document that these task detail entry points now participate in navigation history for consistent Android back behavior
Files changed:
docs/dashboard-guide.md | 1 +
packages/dashboard/app/components/AppModals.tsx | 21 ++++-
.../app/components/__tests__/AppModals.test.tsx | 101 ++++++++++++++++++++-
3 files changed, 115 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-5705
Fusion-Task-Lineage: fd0309ae-e0da-4489-95e4-c34699287e7c
Adds a dedicated Secrets section to the SettingsModal navigation, removes the now-unused secrets footer callback wiring from App and AppModals, updates the related tests, and documents the secrets location in the dashboard guide.
Fusion-Task-Id: FN-5588
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Fusion-Task-Id: FN-5588
Implements the allow-resurrection toggle for task deletion, letting users prevent deleted tasks from being automatically restored. Changes span the `ConfirmDialog` component, `TaskDetailModal`, and the `useConfirm` hook, with comprehensive test coverage across the dashboard API and UI layers.
Fusion-Task-Id: FN-5475
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Fusion-Task-Id: FN-5475
- Add reusable file path linkification utilities and FileBrowser context wiring across dashboard modals and log surfaces
- Linkify task detail, review, workflow, chat, activity, agent, dev server, and settings sync outputs so workspace paths open in the file browser
- Preserve inline code styling when wrapping detected paths and extend FileBrowserModal handling for linked navigation
- Cover the new linking behavior with dashboard tests and add a changeset plus AGENTS guidance for the reusable pattern
Fusion-Task-Id: FN-4227
useTasks.deleteTask had a single-arg signature and dropped the options
object, so the modal's "remove dependency references" confirmation
flag never reached the API and deletion still failed with
TASK_HAS_DEPENDENTS. Forward options through the hook and widen the
matching taskOperations.deleteTask type in AppModals.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixes a type compatibility issue with the list view detail callback in the dashboard App component, restoring proper typing for the callback.
Fusion-Task-Id: FN-3241
This merge implements a "preserve progress" option for task resets across the system. FN-3185 adds a `preserveProgress` flag to `moveTask` that keeps status/history when resetting tasks back to `todo`, with required explicit confirmation dialogs to prevent accidental resets. The feature is wired thr
Fusion-Task-Id: FN-3185
- Add TodoModal component and styling, and mount it through AppModals
- Remove dedicated Todos view routing and drive todos access through modal state/actions
- Update Header and MobileNavBar interactions plus modal manager/view-state hooks for modal flow
- Expand dashboard tests to cover modal rendering, open/close behavior, and updated app/header expectations
Fusion-Task-Id: FN-3104
This merge adds research settings to the settings modal and dashboard (FN-2839, FN-3029), implements a dashboard font scale setting with persistence and documentation (FN-3027), refactors AgentDetailView with a new AgentLogViewer CSS module (FN-2839), and improves NewAgentDialog with custom model dr
Fusion-Task-Id: FN-3027
Three coordinated fixes for the FN-2978 incident class — auto-requeues
that orphaned committed work and watchdog kills on long verification runs.
**Auto-requeue branch reuse** (executor.ts, worktree-pool.ts)
- executor.ts:1782 now uses `task.branch || fusion/<id>` so persisted
branches are honored on requeue. Previously the hardcoded fallback
always tried to re-create the original branch, hit a conflict with
the prior run's ref, and got suffix -2/-3. Other call sites already
honor task.branch — this aligns the worktree-acquisition path.
- worktree-pool.ts:181 prepareForTask now probes existing branches with
`git rev-parse --verify` and checks them out as-is. Falls through to
suffixed creation only when the branch is genuinely in use by another
live worktree. Previously force-reset with `checkout -B`, destroying
prior commits.
- New private reconcileStepsFromGitHistory walks `git log
baseCommitSha..HEAD` for `feat(FN-X): complete Step N` commits and
marks matching steps[] as done so resumes don't redo committed work.
**Manual reset endpoint + UI** (dashboard)
- POST /api/tasks/:id/reset (requires `confirm: true`) — clears worktree,
branch, all retry counters, resets steps[] to pending, moves to todo.
Distinct from /retry which is the soft-resume path.
- Reset button alongside Retry in TaskDetailModal with confirm dialog,
wired through useTasks → AppModals → API.
**fn_run_verification tool** (run-verification-tool.ts, executor.ts)
- New custom tool wrapping test/lint/build commands with a heartbeat
callback (per-line + 60s synthetic), 200KB head+tail output cap, hard
timeout with SIGTERM→SIGKILL escalation, and auto-bootstrap detection
for missing node_modules. Prevents the inactivity watchdog from
killing sessions during long compiles.
- Cross-platform via `shell: true` (Node picks /bin/sh on POSIX,
cmd.exe on Windows). Prompt section in EXECUTOR_SYSTEM_PROMPT and
EXECUTOR_PROMPT_TEXT instructs agents to prefer package-scoped
verification first and reserve workspace-scoped runs for final
integration.
**Tests** (64 passing)
- detect-pseudo-pause.test.ts (27 tests) — covers all 7 regex patterns,
structural fallback, FN-2978 regression text.
- reconcile-step-regex.test.ts (25 tests) — pins the commit-message
regex against a wide variant set.
- run-verification-command.test.ts (12 tests) — basic execution, output
capture, heartbeat callbacks, timeout, error handling. POSIX-specific
cases (multi-cmd `;`, `>&2`, `\$USER`) gated behind itPosix.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Track and thread usage trigger bounds from Header through modal management to UsageIndicator
- Render desktop usage details as an anchored popover while preserving existing modal wiring behavior
- Extract usage indicator styling into a dedicated UsageIndicator.css and remove planning-mode style duplication
- Expand header and usage indicator tests to cover anchor rect propagation and popover behavior
- Stabilize CLI bundle output sqlite assertion for workspace test reliability
Split app/styles.css from ~40k lines down to ~4.5k. Created 56 co-located
component CSS files in app/components/, each imported by its owning .tsx.
The remainder of styles.css holds genuinely global rules (design tokens,
.btn/.card/.modal/.form-input primitives, cross-component @media overrides).
- Lazy-load 13 heavy views (AgentsView, RoadmapsView, NodesView, etc.) via
React.lazy + Suspense; prefetch all chunks on idle so first navigation is
instant. Initial JS bundle: 1.58 MB → 1.16 MB (-26%). Initial CSS bundle:
635 kB → 471 kB (-26%); the rest splits into 13 per-view chunks.
- Add app/test/cssFixture.ts exposing loadAllAppCss() + loadAllAppCssBaseOnly()
so CSS regression tests load the full per-component bundle (mirroring Vite
source order). Migrate 30+ tests off direct readFileSync('../styles.css').
- Enable test.css: { include: [/.+/] } in vitest.config.ts so component CSS
imports actually inject styles in jsdom (fixes getComputedStyle assertions).
- Add ESLint rule (no-restricted-syntax) banning direct styles.css reads in
dashboard test files; points at loadAllAppCss() instead.
- Restore lost utility classes (.text-muted, .text-secondary, .text-dim,
.form-input) and rescue dropped chat tool-call rules into QuickChatFAB.css.
- Mobile fixes along the way: scroll containment for view containers
(min-height:0 + -webkit-overflow-scrolling), QuickChatFAB full-screen on
mobile (with safe-area-inset for iOS home bar), AgentsView single-row
header layout, ActivityLogModal close button on right, model-combobox
z-index above the mobile quick-chat panel.
- Bug fix: SkillsView toggle was display:none which hid the input from the
accessibility tree; replaced with the visually-hidden pattern so screen
readers + getByRole still find the checkbox.
- Bug fix: standalone Delete button in TaskDetailModal for triage-column
tasks (Actions dropdown is hidden in triage state, so previously no way
to delete a freshly-created task without status change first).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Replace the server-computed settings flag with prAuthAvailable and document it in shared Settings types
- Compute PR auth availability from gh CLI auth first, with GITHUB_TOKEN as fallback in GET /api/settings
- Rename dashboard settings state/props/hooks from githubTokenConfigured to prAuthAvailable and strip server-owned auth fields on save
- Update PR section messaging to guide users to run 'gh auth login' and refresh related route/component tests
- Track the first task created from onboarding in AppModals and pass it back into the onboarding modal
- Keep onboarding open after launching New Task, then switch to a task-created success state when a task is returned
- Add success actions to view the created task or return to the dashboard, while preserving the no-task completion path
- Style the task-created success panel and add comprehensive ModelOnboardingModal tests for transition, rendering, and button behavior
- Add scope selector controls to ScheduleForm and RoutineEditor components
- Add scope badges to RoutineCard and ScheduleCard for visual scope indication
- Add scope controls to ScheduledTasksModal with projectId propagation
- Add scheduling scope options to automation/routine API wrappers
- Add comprehensive regression tests for scope propagation and modal wiring
- Update README with dashboard UI scope selection documentation