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).
- Remove the legacy roadmap type re-exports from @fusion/core types
- Update core index exports to stop exposing roadmap plugin types
- Switch dashboard roadmap route test type import to the roadmap plugin package
Fusion-Task-Id: FN-3165
- Update architecture docs to reflect roadmap ownership in plugins/fusion-plugin-roadmap instead of @fusion/core
- Clarify storage table docs so roadmap tables are described as plugin-owned schema hooks
- Rewrite FN-1675 audit section to remove obsolete core-roadmap test references and point to current plugin/dashboard test commands
- Add a changeset for @runfusion/fusion documenting the roadmap extraction doc cleanup
Fusion-Task-Id: FN-3165
This merge delivers five features: a session switcher for the chat header with mobile-aware dropdown styling and proper ARIA state, mailbox notification events with deep-link highlighting to the unread task, a fix for org chart connector endpoints in wide subtrees, a correction to merge finalize so
Fusion-Task-Id: FN-3800
- Compute first/last child subtree leaf counts in AgentsView and expose them as CSS variables on org-chart child groups
- Update org chart connector offset math to anchor horizontal bars to first/last child subtree centers instead of fixed node half-widths
- Keep defaults tokenized for single-child cases and preserve vertical-layout connector behavior
- Extend dashboard CSS and component tests to assert the new connector offset variables and connector rule coverage
Fusion-Task-Id: FN-3797
Fixes the merger to re-squash instead of refusing when a no-op merge verification occurs mid-merge, with regression tests added to prevent recurrence. Also replaces hardcoded color/spacing values in ProjectCard and ProjectOverview CSS with design tokens for theme consistency.
Fusion-Task-Id: FN-3773
Adds a changeset for the new Even Realities glasses plugin integration (`@runfusion/fusion` minor bump), accompanied by a test stabilization for the research wait extension.
Fusion-Task-Id: FN-3747
Completes Step 6 of FN-3746 by adding `focus-visible` states to ProjectCard and ProjectOverview CSS components, and documenting the Even Realities plugin API coverage in the project docs.
Fusion-Task-Id: FN-3746
Adds GitHub-flavored markdown rendering to message bodies in both
MailboxView and MailboxModal via a shared MailboxMessageContent
component (ReactMarkdown + remark-gfm). Plain-text messages render
unchanged. Raw HTML is not executed.
- New MailboxMessageContent component with mailbox-scoped pre/table/link
overrides; links open in a new tab with noopener noreferrer.
- Wired into the full message body and conversation thread bodies in
both Mailbox surfaces (parity preserved).
- CSS for .mailbox-markdown, .mailbox-markdown-pre, .mailbox-markdown-table
with horizontal scroll for code blocks/tables; removed white-space:
pre-wrap on bodies since markdown owns its own whitespace.
- 10 new unit tests cover headings, lists, bold/italic, inline code,
fenced code blocks, link target/rel, GFM tables, plain-text passthrough,
raw-HTML safety, and testId forwarding. Existing 108 mailbox tests
continue to pass.
- Add a first-event watchdog in legacy chat SSE handling to prevent hangs before initial stream data
- Cover watchdog behavior with legacy chat stream API tests
- Add hook-level regression tests for useChat and useQuickChat first-send stream scenarios
- Include a changeset for @runfusion/fusion patch release
Fusion-Task-Id: FN-3760
Merges the FN-3548 approval pause/resume system: agents now stall at workflow gates pending approval, with a full lifecycle spanning gate context lookup, action-gate pause/retry, executor and heartbeat pause callbacks, and dedicated approval decision routes. Also lands FN-3744 agent action routes an
Fusion-Task-Id: FN-3548
Test coverage added for workspace resolution edge cases, specifically verifying that stale temporary directories are properly swept.
Fusion-Task-Id: FN-3772
Merges agent lifecycle tools (create_agent, delete_agent) with full API routes, web fetch tool implementation and tests, and full roadmap UI extraction into a bundled plugin — including schema hook, chat scroll fixes, and autostash orchestrator cleanup. Also adds mesh auth snapshot replication acros
Fusion-Task-Id: FN-3744
Added comprehensive test coverage for the merger module (124 lines in `merger.test.ts`), covering the in-merge fix from this branch with assertions that verify the corrected behavior.
Fusion-Task-Id: FN-3312
Adds agent creation and deletion tools to the pi extension, with engine-side implementation in `agent-tools.ts`, core store integration for agent lifecycle management, and corresponding tests and documentation updates across the workspace.
Fusion-Task-Id: FN-3777
Aligns web fetch tool test coverage across multiple test suites and updates the agents documentation, with a patch changeset for `@runfusion/fusion`.
Fusion-Task-Id: FN-3758
Adds an assertion for the suggestion route error contract in the roadmap routes test file, completing the test coverage for that endpoint.
Fusion-Task-Id: FN-3163
The merge delivers two major features: mesh auth snapshot synchronization across nodes (FN-3707 steps 2/4/5, including core types, central-core plumbing, peer-exchange updates, and settings/node sync route helpers) and a bundled roadmap plugin with chat UX improvements (FN-3162, FN-3756, FN-3771, FN
Fusion-Task-Id: FN-3707
This merge introduces a bundled roadmap plugin (extracting the roadmap UI into `plugins/fusion-plugin-roadmap`) with a new plugin-owned schema hook and store bootstrap, fixes chat scroll behavior by adding bottom-snap on open and correcting stale refs in queue flush handling for both `useChat` and `
Fusion-Task-Id: FN-3761
Chat UX improvements land first: bottom-snap scrolling behavior is wired into both `ChatView` and `QuickChatFAB`, with comprehensive test coverage added for the components and their underlying hooks; stale-closure bugs in the `useChat` and `useQuickChat` queue-flush handlers are also patched. Roadna
Fusion-Task-Id: FN-3771
Merged branch adds FN-3759 queue flush ref fixes for `useChat` and `useQuickChat` hooks (with expanded regression test coverage), extracts the roadmap UI into a standalone plugin with schema hook and store bootstrap, ships FN-3281 review revisions with dashboard/plugin integration updates, and resol
Fusion-Task-Id: FN-3759
Merges major roadmap plugin extraction (FN-3160/3161/3162), hardening the merger with autostash orphan cleanup and TOCTOU defenses (FN-3755/3756), adding shared state snapshots for mesh sync (FN-3451), shipping polling task notifications for the even realities plugin (FN-3743), defaulting non-epheme
Fusion-Task-Id: FN-3756
The merge introduces a plugin-owned roadmap schema system (FN-3162), allowing plugins to define their own schema initialization hook, with tests bootstrapped in the roadmap store and documentation added to the plugin authoring guide. The parallel FN-3281 work delivers review revisions, updates the l
Fusion-Task-Id: FN-3162
- Add canonical working-directory resolution with node mapping support in core and engine paths
- Update runtime/multi-project documentation and include published-package changesets for the merged work
- Migrate roadmap dashboard surface to the bundled plugin registry flow and adjust lazy-view integration/tests
- Default non-ephemeral agents to active state and extend related agent/route/executor test coverage
Fusion-Task-Id: FN-3508
Merges a major roadmap plugin migration (FN-3161) that extracts the built-in roadmaps UI into `fusion-plugin-roadmap` with bundled plugin view registration, alongside three smaller features: agent default state hardening (FN-3773), polling task notifications for the even realities plugin (FN-3743),
Fusion-Task-Id: FN-3161
Non-ephemeral agents now default to `active` state on creation (FN-3773), with aligned test coverage across the agent store and dashboard routes. The even-realities plugin gains a polling notification system including a notification store, card rendering, diff logic, and API routes. Review state per
Fusion-Task-Id: FN-3773
Merges reviewState hardening (FN-3280 steps 2-3: hardened persistence, API fixes, and PR feedback sync), stepIndex reconciliation for task updates (FN-3757), roadmap route context extraction into the fusion-plugin-roadmap plugin (FN-3160), and shared state snapshots for mesh sync with autostash hard
Fusion-Task-Id: FN-3280
Fixes a step-index normalization bug in the task executor where update map lookups were inconsistent with the zero-indexed keys used by verdicts and checkpoints, causing reconciliation failures on review/update step pairing.
Fusion-Task-Id: FN-3757
The merge completes FN-3160 by making the roadmap route context plugin-owned, moving `roadmap-routes` and `roadmap-suggestions` logic from the dashboard into `fusion-plugin-roadmap` with updated plugin-loader integration. It also includes FN-3755's shared state snapshot support for mesh sync hardeni
Fusion-Task-Id: FN-3160
Adds shared state snapshots for mesh sync (FN-3451) along with 143-line mesh route registration, unifies agent action gating classifications (FN-3742), and patches the merger engine with two autostash fixes (capture stderr with AI fallback and TOCTOU race defense). Also ships a new quick-capture fea
Fusion-Task-Id: FN-3755
When `git stash apply` exits non-zero without producing conflict markers
(typical causes: untracked-overwrite, path missing at HEAD, index-conflict
that git refuses to mark), the previous code logged the bare exception
message and abandoned the stash. Operators couldn't distinguish failure
shapes without grepping runtime logs, and the dev's uncommitted work was
left to manual recovery even when an automated path would have worked.
Three additions on top of the conflict-marker path that already exists:
1. Capture stderr from the failing `git stash apply` (execAsync attaches
stderr/stdout to the rejection) and surface it in the task feed and
any subsequent failure messages, so the operator sees `error: untracked
working tree files would be overwritten by merge:` directly instead of
hunting it in mergerLog.
2. Layer 1 fallback: extract the patch via `git stash show -p --binary`
and try `git apply --3way`. This is more permissive than `stash apply`
for several common shapes (notably untracked overwrites — `--3way`
produces conflict markers we can route to the existing AI resolver
where stash apply just refuses).
3. Layer 2 fallback: if `--3way` also hard-fails and smartConflictResolution
is enabled, spawn `runAiAgentForAutostashHardFail` with the patch text +
git stderr. The agent reconstructs the developer's edits on top of HEAD
by editing files directly, then the orchestrator scans for residual
conflict markers before declaring success and dropping the stash.
The existing conflict-marker path remains unchanged — only the previously-
abandoned hard-fail branch gains recovery. Stash is dropped on success at
every layer; on every failure path the stash is preserved for manual
recovery and the failure cause is surfaced to the task feed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
dropAutostashBySha resolved SHA→stash@{N} then ran git stash drop ${ref}
non-atomically. Any other process (interactive shell, parallel merger,
fix-agent) pushing a stash between resolve and drop shifted the index, so
we silently dropped the wrong entry while leaving ours behind. The task
log then claimed "Restored pre-merge autostash X cleanly" even though the
stash was still in the list — observed on FN-3558 (e81e922) and others.
Verify the ref still resolves to our SHA via git rev-parse before dropping;
on mismatch, re-resolve and retry up to 5x. Return success/failure so the
caller can record honest status to the task feed instead of unconditionally
logging "cleanly".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This merge completes the mesh sync shared-state pipeline (FN-3451 Steps 1–3) by adding agent run snapshot limits, applying inbound snapshots, and returning shared state snapshots, while hardening agent store cache initialization during sync. It also unifies agent action gating classifications across
Fusion-Task-Id: FN-3451
Merges a significant refactor of agent action gating into a unified `gating-classifications.ts` module shared across permanent agents and executor gating logic, plus new glasses quick-capture support with dedicated routes and parser, and a fix restoring step progress visibility during task execution
Fusion-Task-Id: FN-3742
The merge introduces the new `fusion-plugin-even-cards` workspace plugin providing board card endpoints and API key authentication, while also unifying agent action gating classifications across permanent agents with configurable display limits. The GitHub integration receives review state refresh i
Fusion-Task-Id: FN-3754
Revert an off-by-one regression in fn_task_update (introduced in 8e969bd72)
that translated 0-indexed step numbers to step-1, mis-targeting updates and
desyncing codeReviewVerdicts/stepCheckpoints keys with fn_review_step. Also
auto-advance step state from inside fn_review_step (in-progress on entry,
done on code-review APPROVE) so the dashboard reflects progress when an
agent runtime skips the follow-up fn_task_update call — observed with
permanent-agent CEO sessions on the openai-codex transport.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>