Align onboarding HELP text and CLI reference with current fn onboarding behavior.
- Document onboarding auto-launch conditions around missing central DB and interactive command flow.
- Add and clarify onboarding escape hatches: --skip-onboarding and FUSION_SKIP_ONBOARDING.
- Add an onboard docs parity test to keep HELP and docs aligned for key onboarding terms.
- Add a patch changeset for @runfusion/fusion describing the documentation/help update.
Files changed:
.changeset/fn-5813-onboard-docs.md | 5 ++++
docs/cli-reference.md | 21 +++++++++-----
packages/cli/src/bin.ts | 4 ++-
packages/cli/src/commands/__tests__/onboard-docs.test.ts | 33 ++++++++++++++++++++++
4 files changed, 55 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-5813
Fusion-Task-Lineage: 14a74ad9-5f09-471a-878d-aa120a28ef41
Improve dashboard mobile log usability and make branch group cards collapsible for cleaner review workflows.
- preserve/restore AgentLogViewer scroll position when toggling mobile drawer and lock body scroll while open
- add collapse/expand state to BranchGroupCard with a summary header and hidden details when collapsed
- add regression tests for AgentLogViewer mobile scroll behavior and BranchGroupCard collapse interactions
- add a changeset and dashboard guide note for the new branch group card behavior
Files changed:
.changeset/fn-5845-branch-group-collapse.md | 5 ++
docs/dashboard-guide.md | 1 +
.../dashboard/app/components/AgentLogViewer.tsx | 21 ++++++++
.../dashboard/app/components/BranchGroupCard.css | 23 ++++++++
.../dashboard/app/components/BranchGroupCard.tsx | 63 +++++++++++++++++-----
.../components/__tests__/AgentLogViewer.test.tsx | 48 +++++++++++++++++
.../components/__tests__/BranchGroupCard.test.tsx | 18 +++++++
7 files changed, 166 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-5845
Fusion-Task-Lineage: 6a0f2967-5df8-4761-ae6c-50991f01ab78
Expose the plugin SDK as a published CLI subpath while preserving existing workspace behavior.
- add a prepack transform helper that injects the ./plugin-sdk and ./package.json exports only in packed manifests
- split tsup config into dedicated CLI and plugin-sdk builds so dist/plugin-sdk JS and DTS are emitted with @fusion deps inlined
- add coverage for definePlugin/validatePluginManifest behavior and manifest/build export guarantees
- document the new published @runfusion/fusion/plugin-sdk surface for plugin authors
Files changed:
docs/agents.md | 2 +
packages/cli/scripts/prepare-publish-manifest.mjs | 61 +++++++++++++++-------
packages/cli/src/__tests__/plugin-sdk-export.test.ts| 50 ++++++++++++++++++
packages/cli/tsup.config.ts | 31 +++++++++--
4 files changed, 121 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-5842
Fusion-Task-Lineage: b6b481ae-aaac-46c0-a6f7-8cc1e9eed1ce
Tighten test fixture cleanup so temporary test directories are reliably removed.
- track created test project directories and install process exit/beforeExit backstop cleanup hooks
- make destroyTestProject resilient with async rm plus rmSync fallback and tracked-dir removal
- add regression tests for sqlite wal/shm sibling cleanup and tracked-directory drain behavior
- make db lock-child teardown remove children from tracking during iteration
Files changed:
packages/core/src/__tests__/db.test.ts | 10 +++--
packages/core/src/__tests__/test-project.test.ts | 34 ++++++++++++++-
packages/core/src/__tests__/test-project.ts | 54 +++++++++++++++++++++++-
3 files changed, 92 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-5840
Fusion-Task-Lineage: 0977be1d-8334-413d-a652-318584d7058b
Prevent onboarding autolaunch when invocation is non-interactive or an existing central+project setup is detected.
- Add a project initialization probe in onboard autolaunch flow and skip when both central DB and project DB already exist.
- Preserve skip behavior for serve/daemon and all non-TTY invocations so agent/headless runs never block.
- Expand CLI autolaunch coverage with backward-compat and seam tests, and add a changeset for the published package.
Files changed:
.changeset/fn-5808-onboard-backcompat-guard.md | 5 +
.../onboard-autolaunch-backcompat.test.ts | 135 +++++++++++++++++++++
.../commands/__tests__/onboard-autolaunch.test.ts | 9 ++
packages/cli/src/commands/onboard-autolaunch.ts | 16 ++-
4 files changed, 164 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5808
Fusion-Task-Lineage: b859aa93-44d5-4d93-bc07-8149b95b4042
Treat rewritten integration-branch advances as handled when the working tree is already aligned.
- Add a new `superseded` resolution for unreachable advance SHAs that remain after history rewrites while HEAD matches the local integration tip.
- Update Git status collection logic and route/API status typings to propagate the new resolution state.
- Update Git Manager modal messaging and dismiss behavior so handled `superseded` entries do not show a sync CTA.
- Extend dashboard route and modal tests, and refresh dashboard guide docs for the new classification behavior.
Files changed:
docs/dashboard-guide.md | 5 +--
packages/dashboard/app/api/legacy.ts | 2 +-
.../dashboard/app/components/GitManagerModal.tsx | 6 ++--
.../components/__tests__/GitManagerModal.test.tsx | 5 ++-
.../dashboard/src/__tests__/routes-git.test.ts | 36 ++++++++++++++++++++--
.../dashboard/src/routes/register-git-github.ts | 13 ++++++--
6 files changed, 55 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-5839
Fusion-Task-Lineage: 6b4afb73-587d-4319-8ad8-f1d5d54bc7bf
Refine merge-advance status handling so Git Manager only requests action when the checkout is truly behind.
- classify recent integration advances as reachable, orphaned, subsumed, or pending before marking them actionable
- detect subsumed advances by comparing commit patch fingerprints from recent HEAD history
- expose advance resolution metadata in API status payloads and route exports
- update Git Manager UI to count only pending actionable advances, gate Sync Working Tree visibility, and allow dismissing handled orphaned/subsumed rows
- expand dashboard tests and docs to cover stale false-positive scenarios and new resolution behavior
Files changed:
docs/dashboard-guide.md | 6 ++
packages/dashboard/app/api/legacy.ts | 1 +
.../dashboard/app/components/GitManagerModal.tsx | 45 ++++++----
.../components/__tests__/GitManagerModal.test.tsx | 63 ++++++++++++++
.../dashboard/src/__tests__/routes-git.test.ts | 97 +++++++++++++++++++++-
.../dashboard/src/routes/register-git-github.ts | 94 ++++++++++++++-------
6 files changed, 259 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-5838
Fusion-Task-Lineage: 65d1317a-7618-4fff-9875-c845474888ed
Ensure mailbox content can scroll to the latest agent-to-agent email on mobile layouts.
- Add `min-height: 0` to `.mailbox-view .mailbox-content` to keep the flex child bounded and scrollable.
- Strengthen mobile mailbox scrolling with `overflow-y: auto`, `overscroll-behavior: contain`, and `-webkit-overflow-scrolling: touch`.
- Extend MailboxView CSS tests to assert the new bounded flex and mobile scrolling rules.
Files changed:
packages/dashboard/app/components/MailboxModal.css | 4 ++++
.../app/components/__tests__/MailboxView.test.tsx | 15 +++++++++++++++
2 files changed, 19 insertions(+)
Fusion-Task-Id: FN-5836
Fusion-Task-Lineage: 41ce03bf-d788-4de9-9dc1-db8ad443048e
Ensure the message composer textarea scrolls into view during mobile keyboard interactions.
- extract a reusable textarea scroll helper guarded for missing scrollIntoView support
- subscribe to visualViewport resize for all compose modes (not only replies) and clean up listener with stable callback
- trigger textarea scrolling on focus to proactively keep the composer visible when soft keyboards open
- add tests covering visualViewport resize for new compose, existing reply flow, and focus-triggered scroll behavior
Files changed:
.../dashboard/app/components/MessageComposer.tsx | 20 ++++----
.../components/__tests__/MessageComposer.test.tsx | 56 ++++++++++++++++++++++
2 files changed, 68 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-5837
Fusion-Task-Lineage: c9fb76a2-6c5a-4d5c-b8ad-8250ed470825
Add a new interactive onboarding CLI flow that guides first-time setup end to end.
- add new `fn onboard` command wiring in CLI entrypoint and usage help
- implement `runOnboard()` with sequential prompts for central DB, provider auth, init, test mode, and project maxConcurrent
- persist `cliOnboardingCompletedAt` marker in global settings with `--force` rerun support
- add onboarding command tests and global settings regression coverage
- document `fn onboard` usage and options in CLI reference
- add a minor changeset for published `@runfusion/fusion`
Files changed:
.changeset/fn-5805-onboard-command.md | 5 +
docs/cli-reference.md | 20 ++
packages/cli/src/bin.ts | 10 +
packages/cli/src/commands/__tests__/onboard.test.ts| 193 ++++++++++++++++
packages/cli/src/commands/onboard.ts | 249 +++++++++++++++++++++
packages/core/src/__tests__/global-settings.test.ts| 11 +
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 1 +
packages/core/src/types.ts | 4 +
9 files changed, 494 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5805
Fusion-Task-Lineage: b1bcaf27-9bd7-4569-b685-225a97fa1200
Ensure planning resume routes keep project-scoped task store context after restart rehydration.
- add test helpers to seed and rehydrate planning AI sessions from a mock session store
- cover /api/planning respond, back, and retry resume flows to prevent missing task store/project context regressions
- update planning route expectations for new scoped-store arguments and align session lookup in auto-merge coverage
- include routes-planning in dashboard quality API vitest suite
Files changed:
packages/dashboard/src/__tests__/routes-planning.test.ts | 155 ++++++++++++++++++++-
packages/dashboard/vitest.config.ts | 2 +-
2 files changed, 149 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-5804
Fusion-Task-Lineage: 2a20aa0f-086b-41f8-b69b-f81a00414a96
submitResponse/rewindSession/retrySession all accept a trailing store
arg but the routes omitted it, so sessions rehydrated after a restart
(session.store not persisted) threw 'Planning session has no task store
and cannot be resumed without project context'. Pass scopedStore so
resume-after-restart works.
Fusion-Task-Id: FN-5804
Prevent unbound this crashes when shared-branch planning subtasks initialize branch groups.
- call ensureBranchGroupForSource through the store object so method context is preserved
- update the planning routes in both shared-branch creation flows to use the bound store call
- harden the planning routes test mock to rely on this.getBranchGroupBySource and keep branch-group creation behavior realistic
- add regression coverage for creating shared branch groups from subtask breakdown task creation
Files changed:
packages/dashboard/src/__tests__/routes-planning.test.ts | 61 ++++++++++++++++++++--
packages/dashboard/src/routes/register-planning-subtask-routes.ts | 8 +--
2 files changed, 61 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-5800
Fusion-Task-Lineage: c4ce9257-0bd2-4b46-b88a-672992ecd969
Add a markdown/plain toggle to the planning summary description so users can preview formatted content before creating a task.
- add a Description header toggle that switches between editable plain textarea and rendered markdown preview
- render description preview with react-markdown and remark-gfm while preserving expand/collapse layout behavior
- add preview container styles and spacing adjustments for summary form
- add UI interaction test coverage for markdown toggle behavior and rendered heading/bold content
- document the new markdown/plain description toggle in dashboard guide
Files changed:
docs/dashboard-guide.md | 1 +
packages/dashboard/app/components/PlanningModeModal.css | 18 +++++++-
packages/dashboard/app/components/PlanningModeModal.tsx | 32 ++++++++++---
packages/dashboard/app/components/__tests__/PlanningModeModal.ui-interactions.test.tsx | 54 ++++++++++++++++++++++
4 files changed, 98 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-5801
Fusion-Task-Lineage: 34972830-7d51-4fcd-bf00-3de8f5aff028
Swap the Settings modal Discord link icon to the official Discord mark and cover it with a focused regression test.
- add an inline Discord SVG icon component and use it in the Discord footer link
- remove the previous lucide MessageCircle icon import and usage
- extend SettingsModal tests to assert the Discord SVG renders and the old icon is absent
Files changed:
packages/dashboard/app/components/SettingsModal.tsx | 20 ++++++++++++++++++--
packages/dashboard/app/components/__tests__/SettingsModal.test.tsx | 3 +++
2 files changed, 21 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-5793
Fusion-Task-Lineage: eebbad06-311b-4770-b739-19b33fc29e6a