Two sync hot paths were stalling the dashboard event loop on a periodic
timer:
1. `pgrep -f vitest` ran via `execSync` in `getVitestProcessIds`
(`/api/system-stats`, `/api/kill-vitest`) and `killVitestProcesses`
(TUI memory-pressure check). On a busy machine pgrep walking the
process table can take 100ms+; execSync blocks the entire Node event
loop for that duration, so every concurrent dashboard request hangs
while pgrep runs. The TUI variant fired on every memory-pressure tick
(~2s when over threshold), the dashboard variant fired on every
system-stats poll (5s while the modal is open). Both now use execFile
with a callback wrapped in a Promise.
2. `discoverDashboardPiExtensions` (called from 3 /api/settings/pi-
extensions routes) did 6+ blocking existsSync/readFileSync calls per
invocation across legacy and fusion settings paths. Converted to
fs.promises.readFile/access and parallelized via Promise.all.
Behavior preserved:
- TUI memory-pressure detection still works (sync os.totalmem path
unchanged); auto-kill still fires on threshold breach.
- The `lastAutoKillAt` 30s re-fire gate is set before the async kill
starts, so concurrent ticks can't trigger duplicate kills.
- system-stats still polls every 5s while the modal is open and still
returns vitestProcessCount.
- All 7 system-stats / kill-vitest tests pass; all 6 settings/pi-
extensions tests pass. Test mocks updated for the (err, stdout, stderr)
callback signature.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Reduce default ListView columns to title, status, and column while keeping optional columns user-configurable
- Move task ID into the title cell and add supporting ListView styles for stacked ID/title presentation
- Add explicit Bulk Edit mode toggle so selection checkboxes and bulk toolbar only appear when enabled
- Update ListView tests for new defaults, sorting behavior, conditional bulk-edit controls, and column span expectations
Fusion-Task-Id: FN-3221
Three merger fallback commit paths (auto-resolve-all-conflicts,
-X theirs/ours side strategy, AI-agent-didn't-commit) hard-coded
`feat(FN-XXXX): merge fusion/fn-xxxx` as the subject and never used
the AI subject summarizer. Route them through buildDeterministicMergeMessage
so they pick up aiSubject when available.
When the AI subject summarizer returns null, derive the subject from
the branch's first step commit (with conventional-commit prefix
stripped, plus `(+N more)` for multi-commit branches) instead of the
bare `merge <branch>` template.
Bump DEFAULT_COMMIT_SUBJECT_TIMEOUT_MS 15s → 30s so slow-first-token
providers complete instead of silently falling back.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This merge delivers the full draft planning feature (FN-3106) — API routes for planning subtasks, the AiSessionStore backend for draft sessions, a draft planning API client, auto-creation of planning drafts from user input, and corresponding UI polish in PlanningModeModal with accessibility-focused
Fusion-Task-Id: FN-3106
This merge brings FN-3155's plugin `createAiSession` API (types, DI hooks, engine adapter, context wiring, docs, and tests), FN-3056's task title sanitization, and FN-3129's tokenized footer and mobile initialization for MissionManager. It also adds CentralCore Docker node management, a new AddNodeM
Fusion-Task-Id: FN-3155
Aligns updateSchedule validation with createSchedule so step-based
automations (auto-summarize, memory dreams) can sync at startup
without hitting "Command cannot be empty".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This merge ships several feature and infrastructure improvements across the codebase. Task title validation is strengthened in triage with stricter rejection of malformed titles and preference for prompt-declared titles (FN-3056), while task creation now preserves priority settings (FN-3210). The Mi
Fusion-Task-Id: FN-3056
On high-core dev machines (e.g. 28-core M-series), per-package vitest
defaulted to cpus().length - 1 workers (27), and `pnpm test` ran 4
workspace packages concurrently — easily 100+ vitest threads per sweep.
When the dashboard had agents running tests, 2+ concurrent sweeps would
saturate CPU and the UI became sluggish.
- Cap defaultMaxWorkers to min(6, cpus()-1) in cli/dashboard/desktop/
mobile/plugin-sdk vitest configs (engine and core were already capped)
- Lower root `pnpm test` workspace-concurrency 4 → 2
- VITEST_MAX_WORKERS override still respected for explicit fast runs
Worst-case fan-out drops from ~108 workers to ~12 per `pnpm test`.
CI runners with fewer cores are unaffected (cap doesn't bind).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The merge adds token-based CSS styling for the MissionManager footer and mobile initialization, with 17 lines of new CSS rules in `MissionManager.css` and 4 lines of adjustments in `MissionManager.tsx`. This improves theme consistency and mobile responsiveness for the mission management component.
Fusion-Task-Id: FN-3129
This merge lands the managed Docker nodes feature (FN-3107) end-to-end: core schema migration for nodes with types, CRUD operations in CentralCore, and dashboard UI (AddNodeModal, NodeDetailModal) with accessibility fixes and tokenized CSS. Also included are manual PR linking (FN-3202), plugin schem
Fusion-Task-Id: FN-3107
The nested action row kept "Create Single Task" and "Break into Tasks"
side-by-side on small screens, pushing the primary button offscreen.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add scheduler logic to create dependency-linked follow-up tasks when actionable PR feedback remains after a PR is merged or closed
- Update engine runtime/project wiring to support manual PR create flows and branch publish behavior for fusion/<task-id>
- Add dashboard route coverage for manual PR creation/linking behavior and corresponding engine/runtime tests
- Document manual PR branch conventions and follow-up behavior in task management and dashboard docs
Fusion-Task-Id: FN-3202
This merge introduces three major features: task reset now preserves existing progress with explicit user confirmation (FN-3185), the engine's soft-pause/unpause behavior is restored and documented (FN-3201), and the plugin system gains schema hook aggregation with new navigation placement and icons
Fusion-Task-Id: FN-3154
This merge implements a "preserve progress" option for task resets across the system. FN-3185 adds a `preserveProgress` flag to `moveTask` that keeps status/history when resetting tasks back to `todo`, with required explicit confirmation dialogs to prevent accidental resets. The feature is wired thr
Fusion-Task-Id: FN-3185
The merge restores the engine's unpause merge sweep logic in `project-engine.ts` and documents the soft-pause merge resume behavior across architecture and settings reference docs, with associated test coverage added.
Fusion-Task-Id: FN-3201
- Add TodoModal component and styling, and mount it through AppModals
- Remove dedicated Todos view routing and drive todos access through modal state/actions
- Update Header and MobileNavBar interactions plus modal manager/view-state hooks for modal flow
- Expand dashboard tests to cover modal rendering, open/close behavior, and updated app/header expectations
Fusion-Task-Id: FN-3104
Merges FN-3076 (automatic completion documentation mode for tasks) with new settings schema, SettingsModal UI integration, and comprehensive tests, plus fixes FN-3095 by using a supported button variant for plugin refresh.
Fusion-Task-Id: FN-3095
Merged FN-3076 introducing an auto completion-doc mode that automates task completion documentation. The feature adds a new setting to the settings schema and types, surfaces it in the dashboard Settings UI, provides triage-stage guidance to suggest completion documentation, and is documented in the
Fusion-Task-Id: FN-3076
Aligns the settings modal heading indentation and subsection heading underlines to a consistent CSS contract, adding tests to lock the alignment behavior across both desktop and mobile viewports.
Fusion-Task-Id: FN-3200
This merge lands six commits that overhaul ListView split-pane UX across the dashboard and add an agent runs tab to both the ListView and AgentDetailView, with auto-expand behavior when a run is selected. It also fixes overflow issues in the workspace selector (desktop) and clamps long labels in the
Fusion-Task-Id: FN-3198
This merge lands ListView UX improvements and fixes (split-pane behavior, visual refinements), adds a runs tab to the AgentDetailView, stabilizes extension integration tests, and updates contributing docs. Test coverage expanded significantly with new assertions for ListView and TaskDetailModal.
Fusion-Task-Id: FN-3204
Merges FN-3181, FN-3190, and FN-3203: adds an initial runs tab to the agent detail view with auto-expand for the selected run, fixes ListView split-pane UX issues, aligns agent run duration calculation with the `AgentHeartbeatRun.endedAt` field, and restores task detail PR spacing. Updates include n
Fusion-Task-Id: FN-3203
Fixes FN-3190 addresses follow-up UX feedback on the split-pane component in ListView, updating the layout styles and component logic with accompanying tests.
Fusion-Task-Id: FN-3190
Adds a "running control" to the agents dashboard that displays a live run entry and auto-expands to show active runs on load. The AgentsView and AgentDetailView components now support an initial runs tab with auto-expansion of the selected run, while the AgentDetailView gains an active-run context p
Fusion-Task-Id: FN-3181
Merges FN-3122's agents workspace redesign (split-pane layout, mobile responsiveness) and FN-3193's test infrastructure stabilization. The AgentsView and AgentDetailView components received major style and layout updates, with corresponding test coverage added. Several vitest config entries were con
Fusion-Task-Id: FN-3193
This merge delivers a major Agents workspace redesign (FN-3122) with split-pane layout, inline AgentDetailView, and mobile drill-in, along with a comprehensive design-system revision addressing token consistency and focus-visible states. Priority picker support was added to the quick-entry box (FN-3
Fusion-Task-Id: FN-3122
Merges FN-3183/FN-3186 (priority picker in quick-entry box) and FN-3189 (CLI slow-lane test gating and CI lane) into the codebase. The quick-entry box gains inline priority selection, while the test suite introduces explicit slow/pre-release lane classification and a corresponding CI gate in the wor
Fusion-Task-Id: FN-3189
Adds an inline priority picker to the Quick Entry Box and Task Detail Modal with shared badge styling and proper mobile tap targets (FN-3183, FN-3186), updates agent tools tests and documentation for layered memory access patterns (FN-3179), and fixes styling alignment between the modal and inline c
Fusion-Task-Id: FN-3183
This merge adds a quick-entry priority control to the QuickEntryBox component, polishes GitHub source issue summary styling in the TaskDetailModal, and documents layered agent memory access in the agents reference. The changes include both the component implementation with 186 lines of new logic and
Fusion-Task-Id: FN-3186
Documents the layered agent memory access system in the agents documentation, with a minor update to the engine tools reference guide to reflect the documented behavior.
Fusion-Task-Id: FN-3179
Polished the GitHub source issue summary in the TaskDetailModal with UI refinements to its CSS and component markup, along with updated tests covering the new behavior.
Fusion-Task-Id: FN-3176
Merged FN-3178: Added icon-based fast indicators to TaskCard and ListView components, replacing text badges with visual icons for quicker status scanning at a glance. Both the task card and list view layers were updated with matching CSS and component changes, along with corresponding test coverage.
Fusion-Task-Id: FN-3178
The merge adds GitHub provenance markers to task cards (FN-3174), finalizes planning CTA defaults in the summary view (FN-3172), and introduces drag-and-drop provider reordering with a Quick Chat FAB (FN-3153). It also updates `UsageIndicator` with substantial styling and logic improvements and adds
Fusion-Task-Id: FN-3174
- Swap summary action emphasis so "Break into Tasks" is the primary CTA and "Create Single Task" is secondary
- Update loading labels and button copy to match the revised action mapping
- Adjust PlanningModeModal tests to assert new labels, button styling roles, and click targets
- Stabilize onboarding test setup by making global settings mock responses reusable across calls
Fusion-Task-Id: FN-3172
Merged work adds a Quick Chat FAB with a slash-triggered menu and resizable chat panel (FN-3152), provider reorder drag-and-drop with persistent order storage (FN-3153, Steps 2/3/5/6), planning comment input to mission and milestone slice interview modals (FN-3139), and a regression test for descrip
Fusion-Task-Id: FN-3153
Merged branch consolidates the FN-3119 Quick Chat FAB with slash-triggered skill menu, the FN-3152 resizable chat sidebar, planning comment inputs for mission and milestone interview modals (FN-3139), and removes the legacy agent tree view (useAgentHierarchy hook and AgentsView tree styling). Also i
Fusion-Task-Id: FN-3152
Merges FN-3139 planning comment infrastructure (comment inputs in mission/milestone-slice/planning modals, comment display in conversation history), FN-3119 Quick Chat FAB with slash-triggered skill menu and plugin integration, FN-3117 plugin dashboard views and chat session icons, and FN-3066 plugi
Fusion-Task-Id: FN-3139
This merge lands v0.15.0, bringing a major plugin system overhaul including a new dependency graph plugin with SQLite-backed storage, Quick Chat FAB with slash-triggered skill menu, and expanded plugin dashboard views. The AgentsView tree mode was fully removed with its hook, styles, and expansion s
Fusion-Task-Id: FN-3121
This merge lands v0.15.0 with two major features: a slash-triggered quick chat skill menu (FN-3119, 8 steps covering skill discovery state, trigger matcher, input wiring, skill menu rendering, styles, local help assistant, and tests) and plugin dashboard views (FN-3079, FN-3066) with dependency grap
Fusion-Task-Id: FN-3119
- Attempt squash merge of fusion/fn-3095 onto current main and resolve SettingsModal.css conflict
- Preserve main-authoritative hover fallback value to avoid reintroducing stale branch content
- Confirm no net code changes remained after reconciliation against current main
- Verify repository passes required gates with pnpm test and pnpm build
This release (v0.15.0) brings significant plugin system enhancements including a new dependency graph plugin with dashboard view, plugin skills in session selection, and extended plugin UI slot metadata. Database improvements add SQLite WAL tuning, integrity checks, and batch writes for agent logs.
Fusion-Task-Id: FN-3117
This release (v0.15.0) introduces plugin dashboard views and a new dependency graph plugin, extends the plugin slot system with richer metadata surfaces and UX improvements, adds SQLite WAL tuning with integrity checks, and stabilizes agent run log streaming with enriched session labels. It also fix
Fusion-Task-Id: FN-3066
- Add plugin dashboard view registration and hosting across core, dashboard routes, and plugin SDK exports
- Integrate plugin-provided views into app navigation, mobile/header UI, and view state hooks with coverage
- Add fusion-plugin-dependency-graph example plugin with persisted storage, dashboard view UI, and manifest wiring
- Update plugin authoring and architecture docs for dashboard view extension points
- Add a changeset for @runfusion/fusion covering plugin dashboard view support
Fusion-Task-Id: FN-3079
This merge brings FN-3173's SQLite stability improvements: WAL tuning pragmas for better concurrency, periodic integrity checks with self-healing recovery, and batched agent log writes to reduce I/O overhead. It also includes a new cron-runner for scheduled maintenance tasks, TUI mouse wheel scrolli
Fusion-Task-Id: FN-3173