The 15s `scheduleMergeRetry` sweep was silently re-skipping in-review
tasks whose `mergeActive` entry leaked from a wedged prior attempt
(uncaught error inside `drainMergeQueue`, restart between push and
finally, etc.). FN-002, FN-004, FN-3898, FN-3899 all sat in in-review
until the 15-min maintenance loop logged "Auto-recovered: eligible
in-review task re-enqueued for merge".
Two changes:
* `reconcileStaleMergeActive()` runs before each 15s sweep. Any
`mergeActive` taskId that isn't in `mergeQueue` and isn't the
`activeMergeTaskId` is treated as leaked and dropped, so the next
enqueue actually pushes through.
* The `task:moved → in-review` immediate handoff (`wireAutoMerge`) now
logs every skip reason instead of returning silently, clears its own
stale `mergeActive` entry before enqueueing, and identifies the task
in its catch-block warning. `internalEnqueueMerge` also warns when a
leaked entry causes a skip — the next regression won't be invisible.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This merge delivers chat rooms with room send routing and delete-room UI in the dashboard (FN-3899), including fixes for bundled plugin view imports and a release changeset. Supporting changes include a merger improvement that tightens scope-warning diff base when baseBranch is missing, companies.sh
Fusion-Task-Id: FN-3899
Mirrors dashboard `resolveDiffBase` display-recovery: when `baseBranch` is
absent, compute `merge-base(HEAD, main)` and prefer it over a stale
`baseCommitSha` only if it strictly descends that SHA. Pre-merge rebase
on legacy/imported tasks (no recorded baseBranch) was producing inflated
"N files changed outside declared File Scope" warnings — FN-3898 surfaced
17 ghost files for a 3-file change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add secure archive subPath handling to company package parsing, including traversal/absolute-path validation
- Parse GitHub website tree URLs from companies.sh metadata to derive preferred branch and nested subPath
- Wire dashboard company import flow to download the correct branch archive and parse nested manifests with clear API errors
- Add parser and route tests for subPath success/failure cases and include changeset for @runfusion/fusion
Fusion-Task-Id: FN-3896
Non-TTY children spawned by the verification runner hung until the hard
timeout when Corepack prompted before fetching a pinned packageManager
version. Set COREPACK_ENABLE_DOWNLOAD_PROMPT=0 in the spawn env so the
fetch proceeds (or fails fast) without waiting on stdin.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merges deadlock recovery for stuck merge tasks (FN-3856) — the engine now runs an already-merged sweep before pausing blocked tasks, and recovers metadata alignment with MergeDetails type. Also adds memory backup CLI commands with core support, a resizable split pane to the mailbox view, peer-agent
Fusion-Task-Id: FN-3856
Fixed the `@fusion-plugin/dependency-graph` plugin's exports and build entry points so it bundles correctly with the CLI, added test coverage for plugin enable success and error-state toasts, and included the plugin's dist in the CLI bundle via tsup config.
Fusion-Task-Id: FN-3883
- Resolve participant display names in AgentDetailView mail tab for peer agents
- Update MailboxModal labeling to use readable agent names instead of raw IDs
- Propagate resolved agent names through notification service, notifier, and provider payloads
- Add and update dashboard/engine tests plus a changeset for @runfusion/fusion
Fusion-Task-Id: FN-3886
Adds a resizable split-pane to the MailboxView component (FN-3885) and introduces a report archive feature to fusion-plugin-reports with a full store, schema, and types layer (FN-3784). Also adds tests for the notification dispatcher pipeline, updates the MemoryView test allowlist, and clarifies the
Fusion-Task-Id: FN-3885
Merges FN-3884 chat scroll anchoring — ChatView now re-scrolls to the latest message when reopened or when activation transitions occur, with a bounded bottom-anchor helper preventing layout-shift overshoots. QuickChatFAB was updated to wire the new anchoring behavior, and both components gained com
Fusion-Task-Id: FN-3884
Adds a new merge commitSha restoration script (`scripts/restore-merge-sha-fn-3878.mjs`) with test coverage to handle a specific FN-3878 merge case, along with a changeset for publishing and a minor plugin vitest config governance alignment across three plugins.
Fusion-Task-Id: FN-3878
- Add useChatRooms hook with room lifecycle state and API integration
- Wire ChatView UI for room selection/creation and update room-focused tests
- Tokenize ChatView and TaskCard color usage to align with dashboard design tokens
- Update architecture docs and include FN-3879 changesets for published CLI package
Fusion-Task-Id: FN-3879
The merge delivers the **Reports Review Panel** (FN-3783) as a multi-step plugin feature — defining review panel types, implementing orchestration logic, and wiring them through the fusion-plugin-reports entry point — alongside a collection of complementary improvements: section-aware prompt compact
Fusion-Task-Id: FN-3783
The merge adds section-aware prompt compaction for task triage (reducing spec payload size by intelligently trimming planning context), enriches the Settings modal with GitHub tracking configuration, and improves the engine's self-healing behavior.
Fusion-Task-Id: FN-3877
Adds a changeset for the GitHub tracking settings feature (FN-3868), preparing it for the next release. The feature itself was implemented in earlier steps; this changeset marks it for publication to npm.
Fusion-Task-Id: FN-3868
Completes Step 6 of FN-3862 with documentation and delivery, including a changeset for the `@runfusion/fusion` package. Also removes an unused line from the self-healing module.
Fusion-Task-Id: FN-3862
Completes Step 4 by adding a patch changeset for `@runfusion/fusion`, signaling that the FN-3864 scope-exclusion work is ready for the next release.
Fusion-Task-Id: FN-3867
- Remove hard dependency on sendMessage in pi agent wrappers so no-approval gates can run without chat bindings
- Add regression coverage for createFnAgent behavior when sendMessage is absent and when tool calls still execute
- Add changeset for @runfusion/fusion documenting the no-approval gate send-message fix
Fusion-Task-Id: FN-3855
- Persist per-provider notification test results and render inline success/error feedback blocks
- Add ntfy "Test message notification" action wired to message-event test payload
- Keep toast notifications while also showing provider-specific status text with aria-live feedback
- Update SettingsModal tests to verify ntfy message-event call path and inline webhook/ntfy feedback rendering
Fusion-Task-Id: FN-3825
- Isolate DocumentsView mobile styling while preserving dashboard UI behavior
- Add legacy chat stream reattach support across API routes and chat hooks with updated tests
- Remove tracked hermes runtime dist artifacts to prevent plugin autostash conflicts
- Rename the FN-3842 merge finalize changeset file and keep related changeset updates
Fusion-Task-Id: FN-3842
Hardens workflow gate execution to bypass the heartbeat terminal tool, preventing it from blocking terminal gates; adds regression tests covering approval request store and SSE relay behavior, with tightened typing on the test policy.
Fusion-Task-Id: FN-3852
- Switch pressed toggle foreground styling to use the --accent-text token
- Apply the contrast fix to AgentLogViewer and DocumentsView toggle styles
- Add regression coverage in AgentLogViewer tests for pressed-toggle contrast behavior
- Add a changeset for the @runfusion/fusion patch release
Fusion-Task-Id: FN-3847
Merges FN-3845 chat-first mailbox guidance and FN-3838 toast suppression for suspended tabs. Adds a new `visibilitySuspension` hook to suppress chat load failure toasts when browser tabs are hidden, rewrites the mailbox opt-in guidance to lead with chat-first messaging, and expands test coverage acr
Fusion-Task-Id: FN-3845
- Add visibility suspension hook to detect tab-hidden periods during chat loading
- Update useChat and useQuickChat to suppress load-failed toasts triggered by tab suspension resumes
- Expand hook test coverage for suspension timing and toast suppression behavior
- Add plugin authoring documentation updates and include FN-3838 changeset
Fusion-Task-Id: FN-3838
The merge normalizes mention filtering in the chat components to handle underscore-prefixed handles, introducing a new `mentionMatching.ts` utility consumed by `AgentMentionPopup`, `ChatView`, and `QuickChatFAB`, with matching tests. It also removes a redundant try/catch in the PI approval gate (`pi
Fusion-Task-Id: FN-3850
- Increase the member role text sizing in CreateRoomModal for better readability
- Update CreateRoomModal.css with the adjusted typography value
- Keep the change scoped to create-room role styling only
Fusion-Task-Id: FN-3808
Schema version assertions were updated across seven core test files, with the most changes in `db.test.ts` and `insight-store.test.ts`, along with minor adjustments in the mission store, run audit, task documents, and roadmap store tests; a corresponding schema version constant was updated in `db.ts
Fusion-Task-Id: FN-3807
- Add self-healing recovery for stale in-review merging statuses when no active merger owns the task
- Skip merge re-enqueue for tasks already marked with transient merging statuses and add regression coverage
- Wire active merge task ID provider through project runtime for safer stale-status detection
- Use chat-sidebar-search-container in ChatView with matching CSS padding
- Normalize fusion-plugin-reports test script to use local vitest and add changeset for @runfusion/fusion patch
Fusion-Task-Id: FN-3829
Adds plugin routes infrastructure including `listTasksModifiedSince` contract in the task store, plugin types definitions, and wiring tests, while deprecating the dashboard roadmap backend in favor of a reports plugin scaffold; also stabilizes favorites and scroll-to-bottom tests and documents the s
Fusion-Task-Id: FN-3835
Merged plugin infrastructure improvements: FN-3796 adds a complete plugin route wiring system with typed `pluginRunner`, `listTasksModifiedSince` store support, and comprehensive test coverage across core and dashboard packages. FN-3794 isolates WhatsApp sessions per project with unload context prop
Fusion-Task-Id: FN-3796
- Extend PluginOnUnload to receive runtime context and wire ctx through plugin-loader unload hooks
- Scope WhatsApp chat plugin connections by project root to avoid cross-project session leakage
- Update plugin authoring docs and add a patch changeset for @runfusion/fusion
- Align plugin test suites across WhatsApp and example/runtime plugins with the new onUnload context contract
Fusion-Task-Id: FN-3794
The merge introduces the universal web fetch tool across reviewer/merger/triage agents (FN-3803, 4 commits) with docs and regression test, extracts the roadmap as a plugin scaffold in `plugins/fusion-plugin-reports` (FN-3166, FN-3165) while removing dashboard roadmap backend and associated tests, ad
Fusion-Task-Id: FN-3803
Completes the FN-3166 multi-step removal of the legacy dashboard roadmap feature (backend routes, frontend API wrappers, nav state), along with FN-3792 deep-link URL support, and initial reports plugin scaffold with WhatsApp dedupe retention pruning.
Fusion-Task-Id: FN-3166
Merges the reports plugin scaffold (FN-3778, FN-3790) with notification service improvements across the engine, plus mailbox UI enhancements; adds WhatsApp message deduplication retention pruning (FN-3795) with tests and documentation; introduces /tasks deep-link routing with theme-data URL resoluti
Fusion-Task-Id: FN-3795
Adds a `/tasks` deep-link that rewrites legacy hash-style URLs on the client and redirects root-absolute paths on the server (FN-3792), along with a new `fusion-plugin-reports` scaffold including manifest, settings, and notification service improvements (FN-3778, FN-3790); also adds a session switch
Fusion-Task-Id: FN-3792
The merge introduces a new `fusion-plugin-reports` plugin scaffold with settings schema, manifest, entry point, and tests, alongside a mobile session switcher in the chat header. It also adds a mailbox notifications system with ntfy/webhook providers, cleans up roadmap types from core, and includes
Fusion-Task-Id: FN-3778
@fusion/desktop tests dynamically import('@fusion/dashboard') in
local-runtime.ts. When packages/dashboard/dist/index.js is absent
(fresh checkout, merger verification env, CI without an explicit
dashboard build) Vite fails with 'Failed to resolve entry for package
@fusion/dashboard' before the desktop vitest alias takes effect.
scripts/ensure-test-artifacts.mjs is the canonical bootstrap layer
that pnpm test calls before running suites; register @fusion/dashboard
there so the dist is built on demand. Extends node:test coverage
mirroring the hermes/openclaw patterns.
Unblocks: FN-3789, FN-3793, FN-3795, FN-3803 (and any future task
whose merger verification path runs desktop tests).