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
Keep GitHub import previews fully readable and scrollable on mobile while preserving desktop truncation.
- allow the active mobile preview pane to size and scroll correctly within the modal
- show full issue and pull request bodies on mobile while keeping desktop previews truncated
- add regression coverage for mobile scrolling, no-description fallbacks, and mobile/desktop body rendering
Files changed:
packages/dashboard/app/components/GitHubImportModal.css | 18 +++
packages/dashboard/app/components/GitHubImportModal.tsx | 18 ++-
packages/dashboard/app/components/__tests__/GitHubImportModal.test.tsx | 160 +++++++++++++++++++++
3 files changed, 190 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6044
Fusion-Task-Lineage: 43b6e686-a34f-4fec-9929-b4d28c12ac7a
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
Prefer the origin remote when preselecting GitHub imports in the dashboard modal.
- default the GitHub import modal to the origin remote when multiple remotes are available
- keep the remote picker unselected when multiple remotes exist without an origin entry
- expand dashboard tests to cover origin defaults for issues, pull requests, and mobile flows
Files changed:
.../dashboard/app/components/GitHubImportModal.tsx | 16 ++--
.../__tests__/GitHubImportModal.test.tsx | 95 ++++++++++++++++------
2 files changed, 77 insertions(+), 34 deletions(-)
Fusion-Task-Id: FN-6043
Fusion-Task-Lineage: b03b621d-757a-422c-b31c-ca0c34c3c168
- align triage prompt templates on impacted-first verification
- guard verification max lifetime when timeout is disabled
- share idle semaphore leak recovery across scheduler and triage
Fusion-Task-Id: FN-6043
Swap the workflow toolbar actions so editing appears before creation.
- move the workflow editor pencil button ahead of the new workflow plus button in the board toolbar
- add assertions covering the full toolbar order when both actions are present
- add coverage for cases where only one workflow toolbar action is available
Files changed:
packages/dashboard/app/components/Board.tsx | 22 +++++++--------
packages/dashboard/app/components/__tests__/Board.test.tsx | 33 ++++++++++++++++++++++
2 files changed, 44 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-6038
Fusion-Task-Lineage: 4fb28d7c-3261-4d45-9363-2b340e4aea35
Keep mobile dashboard content aligned with the visible bottom-bar stack.
- include ICB bottom-offset compensation in mobile project content padding
- publish nav height from measured tab boxes with a safe fallback for unresolved safe-area padding
- add a mobile bottom-space regression test and include it in the dashboard UI shard
Files changed:
.../__tests__/mobile-bottom-space-layout.test.ts | 118 +++++++++++++++++++++
packages/dashboard/app/components/MobileNavBar.css | 7 +-
packages/dashboard/app/components/MobileNavBar.tsx | 31 +++++-
packages/dashboard/vitest.config.ts | 1 +
4 files changed, 151 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6032
Fusion-Task-Lineage: bcbf54e2-c089-40c5-b33c-35c39d981443
Quarantine the flaky dashboard chat manager test and keep it out of active API lanes.
- record packages/dashboard/src/__tests__/chat-manager.test.ts in the quarantine ledger with the current failure context and quarantine date
- exclude the quarantined chat-manager test from dashboard API backfill coverage so existing missions surface an explicit no-backfill decision
- exclude the quarantined chat-manager test from the broad dashboard API project so its status stays visible without destabilizing the suite
Files changed:
packages/dashboard/vitest.config.ts | 3 ++-
scripts/lib/test-quarantine.json | 8 +++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6012
Fusion-Task-Lineage: 34014c45-486e-443d-ae47-a1d301a396e1
Add first-load loading states so task activity and agent log views do not flash empty states.
- show a loading status row in the task detail Activity tab while detail history is still loading
- keep agent logs in a loading state until the active task/project context has completed its initial fetch
- add accessible loading markup, regression tests, and dashboard guide documentation for the new behavior
Files changed:
docs/dashboard-guide.md | 1 +
.../dashboard/app/components/AgentLogViewer.css | 18 +++
.../dashboard/app/components/AgentLogViewer.tsx | 2 +-
.../dashboard/app/components/TaskDetailModal.css | 17 +++
.../dashboard/app/components/TaskDetailModal.tsx | 7 +-
.../components/__tests__/AgentLogViewer.test.tsx | 3 +-
.../components/__tests__/TaskDetailModal.test.tsx | 144 +++++++++++++++++++++
.../app/hooks/__tests__/useAgentLogs.test.ts | 74 +++++++++++
packages/dashboard/app/hooks/useAgentLogs.ts | 14 +-
9 files changed, 276 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6040
Fusion-Task-Lineage: cd4b8f7f-63cd-4d75-be00-d362e915f4e8
Expose default workflow model lane overrides directly in project settings.
- load and persist default workflow model lane overrides from the active project workflow
- add inline workflow lane status, reset, save, and advanced policy actions in project model settings
- add CSS contract and modal coverage for the workflow model action row spacing and placement
Files changed:
.../dashboard/app/components/SettingsModal.css | 20 ++
.../components/__tests__/SettingsModal.test.tsx | 20 +-
.../SettingsModal.workflow-model-lane-css.test.ts | 24 ++
.../settings/sections/ProjectModelsSection.tsx | 245 ++++++++++++++++++++-
4 files changed, 298 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-6027
Fusion-Task-Lineage: 981a5f01-f4b7-467e-9e2f-4ac8e4ed40fb
Open triage task details with long title or description text expanded by default.
- initialize and reset the task detail description expansion state from the task column
- keep manual Show more and Show less toggles working for the current task
- add rendering coverage for triage defaults, fallbacks, task switches, and icon mocks
Files changed:
packages/dashboard/app/components/TaskDetailModal.tsx | 6 +-
packages/dashboard/app/components/__tests__/TaskDetailModal.rendering.test.tsx | 154 +++++++++++++++++++++
packages/dashboard/app/components/__tests__/TaskDetailModal.test-helpers.ts | 11 ++
3 files changed, 168 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6039
Fusion-Task-Lineage: b3bd4911-58ae-4592-9dad-e9164081a4d9
Use the shared model picker for workflow lane settings instead of raw provider/model text entry.
- replace built-in workflow model provider/model string fields with combined dropdown controls in the Values tab
- fetch available models and save or clear paired provider/model workflow values together, including fallback lanes
- add regression coverage for dropdown rendering, selection, clearing, empty registries, and paired-key validation errors
- update dashboard and settings documentation to describe the shared workflow model picker behavior
Files changed:
docs/dashboard-guide.md | 4 +-
docs/settings-reference.md | 22 +-
packages/dashboard/app/components/WorkflowSettingsPanel.tsx | 241 +++++++++++++++++++--
packages/dashboard/app/components/__tests__/WorkflowSettingsPanel.test.tsx | 133 +++++++++++-
4 files changed, 369 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-6026
Fusion-Task-Lineage: 7f41120f-f764-4011-9aa5-a323e0aa64d6
Keep the workflow editor mobile-first selection flow usable and improve tap targets on phones.
- start the mobile workflow editor on the workflow list with no preselected workflow and show a select-a-workflow prompt
- keep mobile list/editor stage transitions in sync after create, duplicate, import, and delete actions
- increase workflow editor mobile touch targets and padding without changing desktop sizing
- add regression coverage for mobile viewport selection behavior and CSS touch-target scoping
- update the dashboard guide to document the mobile workflow editor behavior
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/WorkflowNodeEditor.css | 56 +++++++++++++++++-
packages/dashboard/app/components/WorkflowNodeEditor.tsx | 24 ++++++--
packages/dashboard/app/components/__tests__/WorkflowNodeEditor.css.test.ts | 36 ++++++++++++
packages/dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx | 68 ++++++++++++++++++++++
Fusion-Task-Id: FN-6033
Fusion-Task-Lineage: c9da29ef-c099-4e14-8671-24995106c78c
Align the chat stop button sizing with the send control and lock it with CSS coverage.
- set \.chat-input-stop width and height to 36px to match \.chat-input-send
- add a ChatView autosize test that asserts send and stop button dimension parity
Files changed:
packages/dashboard/app/components/ChatView.css | 4 ++--
.../__tests__/ChatView.chat-input-autosize.test.tsx | 12 ++++++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6020
Fusion-Task-Lineage: d429f847-c32a-4fab-b214-215d8854ed5c
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
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
Refresh the FTS migration guidance with fresh evidence and reconcile workflow interpreter naming.
- document post-FN-5943 production evidence showing the single-file tasks_fts index remains bounded and rebuild-free
- keep the storage guidance explicitly deferred until recurring corruption or sustained bloat is observed
- relax the foreach parser test to accept the current nested loop/foreach error wording
- align the authoritative workflow driver ID with the task branch change during conflict resolution
Files changed:
docs/storage.md | 7 ++++++-
packages/core/src/__tests__/workflow-ir-foreach.test.ts | 2 +-
packages/engine/src/workflow-authoritative-driver.ts | 2 +-
3 files changed, 8 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6008
Fusion-Task-Lineage: d8c7c05c-f003-453d-bbd1-d9f0dda62f7c
Let failed agents be stopped and deleted consistently across the dashboard and agent lifecycle.
- allow agents in the error state to transition to paused and cover the new lifecycle path in core tests
- expose delete controls for failed agents in the agents list and mobile detail view with dashboard regression coverage
- update CLI stop-tool guidance and add a patch changeset for the published package
Files changed:
.changeset/fn-6018-agent-error-stop-delete.md | 7 ++++
packages/cli/src/__tests__/extension.test.ts | 16 ++++++++
packages/cli/src/extension.ts | 4 +-
packages/core/src/__tests__/agent-store.test.ts | 16 ++++++++
packages/core/src/types.ts | 2 +-
.../dashboard/app/components/AgentDetailView.tsx | 4 ++
packages/dashboard/app/components/AgentsView.tsx | 2 +-
.../__tests__/AgentDetailView.core.test.tsx | 24 +++++++++++-
.../app/components/__tests__/AgentsView.test.tsx | 44 +++++++++++++++++++++-
9 files changed, 112 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6018
Fusion-Task-Lineage: 40159b9b-4d14-4f1e-9bd9-d018e54db7ee
Quarantine the flaky dashboard chat-manager generation-slot test until the underlying race is fixed.
- exclude packages/dashboard/src/__tests__/chat-manager.test.ts from dashboard API Vitest projects
- record the quarantine entry with failure context, rescue requirements, and the 2026-06-08 quarantine date
Files changed:
packages/dashboard/vitest.config.ts | 2 ++
scripts/lib/test-quarantine.json | 8 +++++++-
2 files changed, 9 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6016
Fusion-Task-Lineage: 2cd97f8e-db06-4e49-b437-66fee64fb3a9
Remove the extra mobile right margin from chat empty states while preserving other chat pane states.
- add mobile message-pane padding and remove card chrome from empty-state containers inside mobile chat messages
- expand the mobile chat rendering regression test to cover direct threads, room threads, loading, populated, streaming, and new-chat empty states
- rename the regression suite to FN-5997 and assert the empty state spans the full mobile message pane
Files changed:
packages/dashboard/app/components/ChatView.css | 9 +++++
.../__tests__/ChatView.mobile-render.test.tsx | 46 +++++++++++++++-------
2 files changed, 40 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-5997
Fusion-Task-Lineage: ea424660-e8c6-4691-9234-463866aacb2e
Normalize package file-filter verification to direct Vitest execution, kill timed-out process groups, and bound loop-recovery compaction so stuck tasks cannot spin indefinitely.
Fusion-Task-Id: FN-5994