normalizeShellState rebuilds the object and its profiles array on every
call. useShellConnection was calling it during render, so consumers that
put state.profiles in a useEffect dep array (AppInner does, for the
shell-connection status effect) re-ran the effect on every render. The
async getShellConnectionNativeResult resolution then triggered another
render, feeding the loop. On desktop it stabilized; on iOS Safari it
could pin the main thread.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merges centralized plugin installation (FN-3722): TaskStore plugin store is now routed to a configured global directory with legacy migration hardening, and CLI plugin commands are aligned accordingly, backed by comprehensive integration and regression tests. Also includes a dashboard fix to return
Fusion-Task-Id: FN-3722
The catch-all served index.html for every unmatched URL, so a request
for a stale /assets/<oldhash>.js (after a rebuild changed the chunk
hash) got HTML back. Strict module MIME checking then failed the
script load and the page rendered as a blank shell. Exclude
/assets/, /icons/, /fonts/, /brands/, and any path with a file
extension so those return a real 404 — versionCheck.handleChunkLoadError
already knows how to recover from that.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merges agent onboarding test coverage (FN-3559: lock contract for modal/dialog flows, launch flow, summary handoff), adds heartbeat readonly gating with action-gate reload endpoints (FN-3734/FN-3730), fixes a service worker blank-page issue on first install, and documents dependency graph behaviors.
Fusion-Task-Id: FN-3559
Merges reloadable exempt-tools action-gate reload endpoint into the engine alongside a new heartbeat readonly-tools gating mechanism, plus a service worker first-install blank page fix. The engine gains a reload endpoint for action gates, permanent-agent gating exports, and comprehensive test covera
Fusion-Task-Id: FN-3734
Adds a reload endpoint for action-gate exempt tools in the engine, wiring it into the dashboard routing system and documenting the behavior in the agents guide, with a changeset for the published CLI package.
Fusion-Task-Id: FN-3730
Adds a reload endpoint for exempt agent tools (FN-3731), enabling runtime refresh of action-gate configuration without restart, with corresponding dashboard routes and tests. Also fixes mobile nav colors to properly respect design tokens (FN-3558).
Fusion-Task-Id: FN-3558
Adds a reload endpoint for action-gate exempt tools, exposing `POST /api/system/reload-exempt-tools` on the dashboard to hot-reload the engine's mutable EXEMPT_TOOLS registry without a restart. The endpoint is wired through `agent-action-gate.ts` with test coverage for reloadable behavior.
Fusion-Task-Id: FN-3731
Tasks were getting stuck in In Review with "verification fix succeeded but no
merge commit could be created" even though the merge commit was already on
main. Verification failures on attempt 1 were being swallowed by the smart-
conflict-resolution retry path, triggering attempt 2 with a stale baseline,
and the in-merge-fix finalizer would then fail its phantom-merge check.
- Propagate VerificationError out of executeMergeAttempt so the in-merge fix
runs once on attempt 1 with the correct preAttemptHeadSha baseline.
- In commitOrAmendMergeWithFixes, recognize "task already on HEAD" via the
Fusion-Task-Id trailer (line-anchored match) and treat the no-progress
finalize as success instead of tripping the guard.
- Add real-git regression test plus update merger.test.ts call counts to
reflect the (now correctly absent) attempt-2 AI agent.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Document global install vs project-scoped enablement semantics for plugins
- Add explicit scope notes for dashboard and CLI plugin install/uninstall/enable/disable flows
- Link plugin scope guidance to multi-project documentation
- Update dashboard guide Git Manager feature list with pull split-button rebase option
Fusion-Task-Id: FN-3727
This merge adds two policy features (executor role enforcement in core and internal coordination tool exemptions in the engine), introduces a shell regression matrix covering mobile, desktop, and dashboard with corresponding readme entries, and fixes a broad suite of tests across the dashboard, engi
Fusion-Task-Id: FN-3725
- Add shared agent role policy helpers for implementation task detection and executor-role enforcement
- Provide a standardized role-mismatch error formatter for delegation and assignment paths
- Update test isolation leak detection to ignore ephemeral fusion-test-home-root temp directories while preserving baseline checks
Fusion-Task-Id: FN-3716
The merge completes a multi-step shell regression hardening effort spanning desktop, mobile, and dashboard entry points, adding 12 test files or test expansions to lock down the shell preload and native contracts. A companion fix exempts internal coordination tools (`list_agents`, `delegate_task`, e
Fusion-Task-Id: FN-3409
- Harden test isolation cleanup retries and allow-list behavior in scripts/test-changed.mjs
- Expand test coverage for cleanup retry logic and allow-list handling in scripts/__tests__/test-changed.test.mjs
- Add shell-native connection status plumbing and UI coverage across dashboard, desktop preload/types, and mobile typings
- Add ShellConnectionStatus and mobile nav wiring plus related app/component test coverage
- Document shell connection contracts and add FN-3568 diagnosis/recovery notes
Fusion-Task-Id: FN-3723
Merged branch adds native shell connection support with a new `ShellConnectionStatus` component and contracts documentation, introduces `--accent-text` theme token for chat message readability, adds a split-button for git pull with rebase in `GitManagerModal`, highlights fast-mode bolt icons in task
Fusion-Task-Id: FN-3568
Adds a `--accent-text` CSS token defined per theme for consistent chat text readability, and highlights the fast mode bolt icon in the task detail modal, with corresponding theme-color and rendering tests.
Fusion-Task-Id: FN-3725
- Add --accent-text token definitions in global and per-theme CSS blocks for consistent readable foreground contrast
- Extend theme coverage tests to assert accent text token presence across generated theme variants
- Add a changeset for @runfusion/fusion documenting the theme token fix
- Update agent guidance reference to include the new token requirement
Fusion-Task-Id: FN-3725
- Add TaskDetailModal CSS rules to visually emphasize the fast mode bolt icon
- Cover fast mode icon highlighting in TaskDetailModal rendering tests
- Preserve existing modal rendering behavior while adding the new fast mode visual cue
Fusion-Task-Id: FN-3726
The merge adds a pull split-button in the GitManager modal that lets users choose between a regular `git pull` and a `git pull --rebase`, with styling and test coverage for the menu interactions and API payload. It also fixes plugin toggle rendering (FN-3723) and adds a release note for plugin insta
Fusion-Task-Id: FN-3724
- Add a changeset for FN-3721 covering plugin install entry resolution fixes
- Mark @runfusion/fusion for a patch release
- Preserve workspace gate restoration changes in the squash merge metadata
Fusion-Task-Id: FN-3721
The merge completes the plugin toggle rendering fix (FN-3723) by verifying the quality gates and adding the required changeset for the patch release.
Fusion-Task-Id: FN-3723
The merge extracts the roadmap domain into a standalone plugin package (`plugins/fusion-plugin-roadmap`), wiring it into the CLI bundle and dashboard scaffold, with new modules for roadmap types, store, ordering, and handoff logic. A secondary change normalizes shell host bootstrap, introducing `She
Fusion-Task-Id: FN-3158
Introduces a canonical shell host context and normalized bootstrap flow for the dashboard, extracting the host initialization logic into a dedicated `shell-host.ts` module with a `ShellHostContext` provider; updates `App.tsx` and `Header` to use the new context, stabilizes related tests, and documen
Fusion-Task-Id: FN-3407
Vitest creates .tmp-fn-vitest-workspace-resolution-* directories
containing built JS files that ESLint scans as source, producing
~9500 false-positive no-undef errors that mask real lint issues.
Added .tmp-fn-*/** to global ignores. These dirs are already in
.gitignore but ESLint doesn't read .gitignore by default.
docs/evals.md was not listed in the docs/README.md index despite being
referenced from architecture.md and dashboard-guide.md. Added it to the
Task & Project Management section.
- Store plugin installation metadata in central DB while preserving per-project enable/disable state
- Update plugin CLI and dashboard Plugin Manager copy/behavior to distinguish global install from project enablement
- Expand plugin store and loader test coverage, including legacy migration and scoped install assertions
- Update runtime plugin e2e tests to use isolated central DB directories and document the new semantics
- Add a changeset for @runfusion/fusion describing the plugin scope behavior change
Fusion-Task-Id: FN-3182
The merge splits the large monolithic `executor.test.ts` into seven focused test suites covering core logic, pause behavior, prompt handling, recovery, review verdicts, step sessions, and worktree operations, and adds shell context hook plumbing across the dashboard, desktop, and mobile packages to
Fusion-Task-Id: FN-3720
Adds a new `useShellContext` hook with tests to the dashboard, integrated into `App.tsx` and `Header.tsx` to provide shell context plumbing throughout the UI.
Fusion-Task-Id: FN-3406
This merge lands three major features and a significant dashboard enhancement. FN-3276 adds a full Review tab to the task detail modal with multi-step lifecycle: review metadata persistence in the task store, new task workflow routes for refresh and same-task revision, and the review tab UI surface
Fusion-Task-Id: FN-3276
Adds validation to block task dispatch when no project-node mapping exists (FN-3507), including a read helper in CentralCore and a new `node-dispatch-validation` module integrated into the scheduler and in-process runtime, with test coverage across routing and validation scenarios.
Fusion-Task-Id: FN-3507
Merges five features: **Launch mode persistence** (FN-3405) — desktop now remembers and restores the user's preferred window mode across restarts via an IPC bridge; **Mailbox detail pane** (FN-3719/3720) — clicking messages in the Mail tab and Mailbox opens the detail pane and reply panel; **Remote
Fusion-Task-Id: FN-3405
The merge adds two Mailbox UX improvements: messages in the Mail tab now open the task detail pane (FN-3719), and reply context rows in the mailbox modal are expanded for better readability (FN-3720), with corresponding CSS and test coverage for both AgentDetailView and MailboxModal.
Fusion-Task-Id: FN-3720
Merges a substantial batch of agent and desktop improvements: the Mail tab now opens messages in a detail pane with styled selectable rows (FN-3719, four steps), remote node discovery contracts are integrated into the dashboard (FN-3506), permanent-agent approval context is wired through executor an
Fusion-Task-Id: FN-3719
Merges node discovery onboarding (FN-3506) with two steps: a pre-registration discovery contract wired into the AddNodeModal UI, and full remote discovery integration with documentation. Also adds a local embedded runtime manager to the desktop app (FN-3404) and wires permanent-agent approval contex
Fusion-Task-Id: FN-3506
Wired permanent-agent approval context into runtime paths for FN-3561, updating the agents documentation and adding test coverage for the heartbeat executor to validate the runtime behavior.
Fusion-Task-Id: FN-3561
Adds a local runtime manager to the desktop app (FN-3404) — an embedded engine process managed via IPC with packaging for bundled dependencies and lifecycle documentation. Also includes project mapping onboarding UI with persistence and rollback (FN-3505), plus related dashboard API and hook updates
Fusion-Task-Id: FN-3404
- Add onboarding project-mapping API contracts and dashboard UI wiring in AddNodeModal/NodesView
- Persist node-to-project mappings with rollback-safe failure handling and expanded hook/API test coverage
- Document node onboarding mapping behavior in architecture and multi-project docs
- Add tsup bundle asset gates for openclaw bridge and droid runtime, with changesets and bundle output tests
Fusion-Task-Id: FN-3505
Stages the droid runtime as a bundled plugin in the CLI's tsup configuration, gates the bundle bootstrap on droid asset availability, and adds tests asserting correct staging behavior in bundle output.
Fusion-Task-Id: FN-3718
Stabilizes the OpenClaw bundle by hardening the asset copy logic and gating the bootstrap flow on the openclaw bridge asset being present, with regression tests covering the new bundle-output helpers and a patch changeset for `@runfusion/fusion`.
Fusion-Task-Id: FN-3717
This merge introduces three major features: a full path-mapping API layer across core, dashboard, and desktop (FN-3504, four commits), shell multi-profile support with a new NativeShellConnectionManager component and connection manager onboarding flow (FN-3403), and migration of the WhatsApp plugin
Fusion-Task-Id: FN-3504
Merges shell multi-profile support for desktop (FN-3403) — spanning new connection-manager flows, shell onboarding interoperability, mobile connection profiles, desktop IPC/shell-settings plumbing, and tokenized titlebar styles — with a secondary migration of the WhatsApp plugin to the Baileys pairi
Fusion-Task-Id: FN-3403
Cleans up legacy webhook key references from the schema test file, removing outdated assertions that referenced deprecated fields.
Fusion-Task-Id: FN-3713