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>
The merge adds the `fusion-plugin-even-cards` workspace plugin with board card endpoints and auth support, refactors agent action gating classifications into a unified `gating-classifications.ts` module, refreshes review state on manual triggers, repoints roadmap type imports to the plugin package,
Fusion-Task-Id: FN-3753
Merges two new plugin packages — `fusion-plugin-even-cards` (board/card endpoints with API key auth) and `fusion-plugin-even-realities-glasses` (notifier, quick-capture, settings, transport, Fusion API client, and agent actions) — plus a substantial engine refactor that unifies agent action gating c
Fusion-Task-Id: FN-3751
Repointed roadmap type imports to the plugin package across the dashboard (RoadmapsView, useRoadmaps hook, legacy API). Also replaced an invalid spinner token in the TaskDetailModal CSS.
Fusion-Task-Id: FN-3741
Fixed FN-3749 by repointing roadmap type imports from their original location to the plugin package across the legacy API, RoadmapsView component, and useRoadmaps hook.
Fusion-Task-Id: FN-3749
Adds a new `fusion-plugin-even-cards` plugin that exposes read-only board card endpoints via API key authentication, including board-cards, task-cards, and format utilities, along with comprehensive test coverage and updated plugin authoring documentation.
Fusion-Task-Id: FN-3739
Adds review tab refresh UX, metadata, and API (FN-3279) alongside permanent-agent action gating coordination tools (FN-3724), and introduces two new workspace plugin packages: `fusion-plugin-even-cards` (board/task cards with auth and board-routes) and `fusion-plugin-even-realities-glasses` (cards,
Fusion-Task-Id: FN-3279
- Add a new fusion-plugin-even-cards package with typed card formatting utilities and board/task card generation
- Implement authenticated plugin routes for board card endpoints and plugin registration wiring
- Add unit tests for auth handling, board routes, and card formatting behavior
- Document plugin in PLUGIN_AUTHORING guide and register it in pnpm workspace
Fusion-Task-Id: FN-3739
This merge introduces `fusion-plugin-even-realities-glasses`, a new plugin package providing tools for cards, notifications, quick capture, settings sync, Fusion API client, and agent actions, along with corresponding tests. It also adds eval feature flags and documentation, applies UI refinements t
Fusion-Task-Id: FN-3752
Implements a new Fusion plugin package (`fusion-plugin-even-realities-glasses`) providing settings schema, a Fusion HTTP API client, cards, quick capture actions, a notifier, and transport stub — plus plugin routes and lifecycle hooks wired into the pi extension. The branch concludes with a small fi
Fusion-Task-Id: FN-3738
Declares the `setTimeout` global in `roadmap-suggestions.js` to resolve a linting or runtime error in the roadmap plugin route handler.
Fusion-Task-Id: FN-3736
This merge adds a direct-mode review tab to the task detail modal (FN-3278), improves mobile mailbox keyboard handling and fixes request hangs during wake dispatch (FN-3750/FN-3751), and reclassifies coordination tools with lock exemptions in the agent gating system (FN-3724), alongside GitHub route
Fusion-Task-Id: FN-3724
Merges FN-3278 review tab direct-mode (data, rendering, regression tests, typing fixes, and docs across Steps 2/3/6), FN-3750 mobile keyboard stabilization for mailbox and reply composer, FN-3751 fire-and-forget wake dispatch to prevent request hangs, and FN-3748 workspace aliases for @fusion/* pack
Fusion-Task-Id: FN-3278
Merges mobile mailbox keyboard handling improvements (anchoring layout to the visual viewport, keeping the reply composer focused and visible when the keyboard opens) across MailboxModal, MailboxView, and MessageComposer, with corresponding tests; also makes the wake dispatch fire-and-forget to prev
Fusion-Task-Id: FN-3750
- Wire mobile keyboard viewport signals into mailbox view and modal containers for anchored mobile layout
- Keep reply composer focused and visible while keyboard is open, with updated component styles and regression tests
- Make messaging wake dispatch fire-and-forget to avoid request hangs and expand route tests for async behavior
- Add desktop vitest workspace aliases for @fusion/* imports and include FN-3750/FN-3751 changesets
Fusion-Task-Id: FN-3750
Merges FN-3751 mailbox wake dispatch (fire-and-forget fix, async coverage tests, and gate verification) with FN-3748 workspace aliases for `@fusion/*` packages in desktop vite config. The bulk of file changes are routing refactors and agent route tests supporting the wake mechanism, plus a minor ver
Fusion-Task-Id: FN-3751
Fixes a duplicate import in the roadmap plugin and adds `@fusion/*` workspace aliases to the desktop vitest configuration so tests can resolve internal packages correctly.
Fusion-Task-Id: FN-3748