@fusion/core
Patch Changes
-
26ebb92: Fix
reconcileOrphanedTaskDirssilently resurrecting long-deleted tasks onto the live board after a restart ("all task IDs reset / starting over").The sweep re-imports
.fusion/tasks/<id>/directories that have no DB row, to recover heartbeat-created dirs that race store init or rows lost to a recent DB corruption. But it didn't distinguish a genuinely-recent orphan from an ancient deleted-task dir that merely lingered on disk. Modern deletes leave a soft-delete tombstone (caught bytaskIdExistsAnywhere), but legacy hard-deletes left no tombstone — so a months-oldtask.jsonwith no DB row was re-imported as a live task, surfacing old low-numbered IDs (FN-001, FN-002, …) at the top of the board.Reconcile now gates recovery on a recency window (
task.jsonmodified within the last 7 days). Older orphan dirs are skipped with reasonstale-orphan-dir-beyond-recency-windowand left for explicit recovery (unarchive/restore) or directory cleanup, while heartbeat-race and recent-corruption recovery still work. -
7e7eb62: Harden the orphan-worktree and stale-task-dir cleanup fixes (code-review follow-up).
- executor.ts (P0): the stale-conflict recovery's
rm(worktreePath, { recursive, force })had no bounds check.worktreePathcan originate from a git worktree admin entry that resolves outside.worktrees/, so an out-of-bounds or symlinked path could be force-removed. The recovery now refuses unless the path is inside the configured worktrees dir, is not a symlink (checked viarealpathSync), is not a registered git worktree, and is not actively owned — and it re-verifies liveness inside the catch rather than trusting the error string. It also excludesspawnfailures (e.g.spawn git ENOENTwhen git is missing) so a missing-binary error is no longer misread as a successful stale-path cleanup. - worktree-pool.ts:
resolveGitdirPointeris replaced bydotGitPointerIsDangling, which reaps only when a.gitlink's gitdir target is confirmed missing. A real.gitdirectory, an unparseable pointer, or any read/stat failure now returns "not dangling" (conservative) so a transient read error on a live worktree's.gitcan't cause a force-remove. Removes thestring | "directory" | nullsentinel union. - core store.ts: the
reconcileOrphanedTaskDirsrecency window is now bypassed when the live task table is empty (the corruption/restore case — survivingtask.jsonfiles keep old mtimes), and when a corruptfusion.dbwas auto-recovered on startup, so.recoverrow loss is not stranded by the gate. Adds anignoreRecencyWindowoption for explicit callers. - Tests for all of the above: executor recovery + out-of-bounds refusal, unparseable
.gitskip, recency boundary, empty-DB/forced bypass.
- executor.ts (P0): the stale-conflict recovery's
@fusion/dashboard
Patch Changes
- Updated dependencies [26ebb92]
- Updated dependencies [7e7eb62]
- @fusion/core@0.45.0
- @fusion/engine@0.45.0
- @fusion/i18n@0.39.8
- @fusion-plugin-examples/cli-printing-press@0.1.25
- @fusion-plugin-examples/compound-engineering@0.1.8
- @fusion-plugin-examples/dependency-graph@0.1.39
- @fusion-plugin-examples/roadmap@0.1.27
- @fusion-plugin-examples/cursor-runtime@0.1.27
- @fusion-plugin-examples/droid-runtime@0.1.34
- @fusion-plugin-examples/hermes-runtime@0.2.58
- @fusion-plugin-examples/openclaw-runtime@0.2.58
- @fusion-plugin-examples/paperclip-runtime@0.2.58
@fusion/desktop
Patch Changes
- Updated dependencies [26ebb92]
- Updated dependencies [7e7eb62]
- @fusion/core@0.45.0
- @fusion/dashboard@0.45.0
- @fusion/engine@0.45.0
@fusion/engine
Patch Changes
- Updated dependencies [26ebb92]
- Updated dependencies [7e7eb62]
- @fusion/core@0.45.0
- @fusion/pi-claude-cli@0.45.0
@fusion/plugin-sdk
Patch Changes
@runfusion/fusion
Minor Changes
-
26e5514: Add the
factory-monodashboard color theme, a monochrome Factory variant with red accents and neutralized glow effects. -
130fea2: Ask first-run users whether to create an optional first persistent agent after project registration, with CEO as the default template, skip support, and no duplicate GitHub star prompt.
-
70cce18: Add the
fn_agent_set_instructionsextension tool so managing agents can update direct or indirect reports' inline or file-backed instructions with org-hierarchy authorization. -
8dd9697: Add an operator-triggered Command Center Productivity LOC backfill API and client for historical commit-association diff stats.
-
f13aaa1: Add a Command Center GitHub resolved-issues detail list and expose the resolved issue rows in the GitHub analytics endpoint payload and CSV export.
-
c158dda: Add the
xhighreasoning effort level to model settings and task/agent selectors. Claude CLI adapters pass the value through to runtime mapping, where non-Opus models usehigheffort and Opus models usemaxeffort. -
52924ba: Add a built-in lead-generation workflow with custom lead columns, fields, and stage prompts.
-
7f3e942: Add a built-in Design workflow that gates UI-heavy work with a design/UX review before standard review and merge.
-
281ce35: Add a built-in Marketing workflow with content-specific columns and prompts for brief, drafting, editorial review, and publishing.
-
fbce59b: Add a core artifact registry data model and store APIs for persisted artifact metadata with on-disk binary storage.
-
af06170: Add
fn_artifact_register,fn_artifact_list, andfn_artifact_viewagent tools for publishing and discovering multi-type artifacts, with best-effort dashboard user inbox notifications on registration. -
ef48895: Add dashboard artifact registry read APIs, client helpers, and a Documents-view Artifacts media gallery for images, videos, audio, documents, and generic artifacts.
-
58f7588: Add a Shadcn Custom dashboard theme with persisted, sanitized design-token color picker overrides across Settings and Command Center theme selectors.
-
f80a785: Add pricing entries for OpenAI Codex models used through the
openai-codexprovider, so Command Center token analytics can estimate costs for Codex runs instead of showing them as unavailable.This is marked minor because it expands the set of priced models surfaced by the published CLI/dashboard without changing existing pricing behavior.
-
09acfbb: Allow users to manually pause and unpause agent-assigned tasks from the dashboard task detail view and API.
-
4fec139: Move Stash Recovery into the Git Manager Recovery tab and remove the standalone top-level Stash Recovery view from dashboard navigation.
-
5b33da9: Move desktop toolbar tools into the right sidebar tools rail. The right dock now hosts Activity, Activity Log, Import from GitHub, Git Manager, Files, and Automation, and no longer duplicates left-sidebar content views.
-
7034b55: Move the dashboard terminal launcher to the footer executor status bar and add docked plus floating resizable terminal modes on desktop/tablet while preserving mobile fullscreen terminal behavior.
-
a913881: Make the dashboard right dock persistent by default with an in-dock collapse toggle, and remove duplicate Header right-dock toggle behavior.
-
7fd14eb: Rename the task detail Documents tab to Artifacts and add a task-scoped media artifact gallery alongside existing task documents.
-
496167c: Polish dashboard navigation, floating modal, file browser, chat footer, agent role, insights, and list-view action surfaces for a more consistent responsive UI.
-
eb3477a: Add a Command Center System node selector so local and registered remote node telemetry can be inspected from the dashboard.
-
59d3eee: Add estimated human hours saved to Command Center Productivity analytics, UI stats, and CSV exports.
-
2dc36d9: Import Tasks PR preview now shows the full comment thread and per-check status (with success/failure/pending indicators) for the selected pull request, fetched on selection and cached per PR. The body still renders immediately while checks and comments stream in.
-
7ef3817: Start the AI engine by default in
pnpm local, keep dashboard--devengine-on unless--no-engineis passed, start desktop local runtimes with engines, and show dashboard instructions when Fusion is launched without an engine. -
7ddf58d: Sync workflow setting values across nodes in settings push, pull, receive, and status flows.
-
8640a74: The shared markdown renderer (GitHub PR/issue bodies + comments, mailbox, chat) now renders embedded raw HTML and mermaid diagrams. Raw HTML (
<details>/<summary>,<kbd>,<sub>, tables) renders as real elements viarehype-raw, withrehype-sanitizestripping XSS (script/style/iframe, event handlers,javascript:URLs) since these bodies come from GitHub; HTML comments (<!-- -->) are dropped. Fenced ```mermaid blocks render as actual diagrams via a lazy-loadedmermaidimport (kept out of the main bundle, loaded only when a diagram is present), falling back to the raw code block on parse error and following the dashboard theme. -
4fd8d44: Polish dashboard navigation and app chrome, add responsive chat/file/modal behavior, refine roadmaps, missions, task details, workflow defaults, theme defaults, and sidebar/header styling.
-
91180fb: Close the validator reaper→slice deadlock and harden every validation re-drive site for the new behavioral-verification posture. A reaped, task-less "done" feature (left in
loopState="validating"/needs_fix+error) is now re-driven by recovery to a terminal pass/fail/inconclusive verdict instead of livelocking the slice, milestone, and mission. Adds an adversarial reliability suite enumerating every re-drive entry point (normalprocessTaskOutcome, eachrecoverActiveMissionsbranch, and the stale-run reaper) and asserting source-tree git-cleanliness, zero duplicate Fix Features, a terminal verdict, and noerror-state deadlock. Documents the non-mutating verification run, the first-classinconclusiveverdict, and the adversarial default-to-fail posture acrossdocs/missions.md,docs/missions-completion-contract.md, andCONCEPTS.md. -
da5fea6: Add Shadcn color-variant dashboard themes for blue, green, red, purple, pink, orange, yellow, mono, and black variants.
-
e19f7c2: Add a Shadcn dashboard color theme with zinc neutral tokens, sans-serif typography, 1px borders, subtle flat shadows, and solid primary buttons.
-
b20a25c: Add the
shadcn-gray-bluedashboard color theme with slate blue-gray surfaces and a muted slate-blue accent. -
4672203: Add a Shadcn Gray dashboard color theme with a fully neutral zinc-gray accent.
-
12aae94: Add Shadcn Mono Red/Blue/Green/Purple/Pink/Orange/Yellow dashboard color themes and migrate legacy
shadcn-monoselections toshadcn-mono-red. -
dc0064b: Dashboard navigation and panel redesign (desktop/tablet; mobile unchanged):
- Right sidebar: a single show/hide toggle now lives in the top header (replacing the tablet overflow menu); the dock is hidden when closed and no longer keeps a persistent icon rail or in-dock collapse button. Its tools (Files — now the default/first tab, Activity, Activity Log, Git Manager) render inline inside the dock instead of opening popup modals. Files opens inline with a pop-out to the resizable file modal. The embedded Git Manager adapts to its width (compact horizontal tab strip in the dock, full two-pane in the wide pop-out). The dependency graph no longer appears in the dock.
- Left sidebar: New Task button matches the item-highlight box; footer spacing between Collapse and Settings; divider before the secondary section removed with uniform row spacing. New main-content destinations — Workflows, Import Tasks (GitHub import, with the GitHub mark), and Automations (two-pane, Command Center styling) — render in the main panel instead of as modals.
- Embedded views: Planning Mode embeds without modal chrome (no header/close/shadow), fills the full content area, and renders correctly on mobile; the board WorkflowSwitcher is available in Planning. Dev Server header matches Command Center. Insights header wraps so actions don't overlap. List view's left pane can be dragged much narrower with two-line title wrapping.
- Other: the docked terminal no longer blurs or blocks the page behind it; the footer Terminal button renders as plain text like the running-state trigger; the workflow selector matches the project selector's styling, height, and font size; the Automations screen uses theme color tokens.
-
5697d2c: Skills view detail pane: render SKILL.md as Markdown (GFM + sanitized HTML + mermaid), compact the referenced-files area while showing all files, and make each file clickable to view its content with a "Back to SKILL.md" affordance. Adds a
GET /api/skills/:id/fileendpoint for per-file content. -
5117944: Add Command Center Productivity task-duration analytics, dashboard stat cards, and CSV export rows for completed-task active execution time.
-
d4e91d4: Add workflow optional steps: workflows can declare optional step templates that tasks toggle on/off per task, with a workflow-level default. The built-in coding and stepwise-coding workflows expose agent browser verification as an optional step (the stepwise workflow gains a pre-merge workflow-step seam so enabled steps actually run). Optional steps are authorable in the node editor, preserved across node-editor saves, and selectable from a steps dropdown in both the quick-add card and the full New Task modal.
Patch Changes
-
c8a82e7: Auto-continue the agent session after an engine-internal pause/resume abort instead of re-queueing the task to todo. When the engine tears down in-flight work (hard-cancel) and the workflow graph run ends with the task back in
todo, the executor now retries the agent session in place — bounded by the existing graph-resume retry budget with backoff, falling back to a benign re-queue only after retries are exhausted. Before re-dispatching, it re-checks the task at fire time and aborts the auto-continue if the task was paused, moved, or deleted during the backoff window, so genuine user/global/task pauses are never resumed against the operator's intent. The transient reclassification clears any stalefailedstatus and emits anAuto-recovered:log so no spurious failure notification fires. -
ee9c8ab: Align dashboard view chrome and inner-pane spacing across Chat, Mailbox, Workflows, Artifacts-adjacent controls, Goals, and Compound Engineering.
-
ce6c0fb: Polish dashboard view chrome: align Dashboard, Import Tasks, Automations, Chat, and docked Files editor controls with the shared view header and toolbar styling.
-
7635ba8: Fix a false "engine not running" banner when another fusion process on the same machine already owns the engine. The dashboard's health check only counted engines this process started, so a second launch (e.g.
pnpm dev dashboardalongside an already-runningfusion) that was correctly refused the per-machine engine singleton lock reported the engine as unavailable — even though one was running. TheProjectEngineManagernow tracks engines owned by another process (detected viaEngineAlreadyRunningErrorfrom the singleton lock) and exposeshasRunningEngine(), which the dashboard health endpoint uses so the banner reflects machine-level truth. Reconciliation still retries so this process takes over if the other exits, and the "refusing to start" log is emitted once per project instead of on every reconciliation tick. -
ce90cc9: Keep Fusion verification progress moving by making targeted script tests honor file arguments, reaping verification subprocess groups after clean exits, and preventing the line-count audit from blocking
pnpm test. The changed-test runner now caps reverse-dependent fan-out so a foundational-package edit no longer expands into a whole-workspace run, and the executor/verification guidance now directs agents to scope verification to changed files rather than running the full workspace test suite. -
5a422b0: Fix anthropic-compatible custom providers failing with "No API provider registered for api: anthropic".
resolveCustomProviderApiTypemapped theanthropic-compatibleprovider type to the api key"anthropic", but pi-ai registers the Anthropic Messages API under"anthropic-messages". Any custom provider configured asanthropic-compatible(self-hosted Claude proxy, gateway, etc.) therefore selected a model whoseapidid not match a registered provider and threw at stream time. Mapped it to"anthropic-messages"and added a regression assertion alongside the existing openai-compatible / openai-responses coverage. -
2d32760: Clear the stale
failedstatus when a pause/resume abort is reclassified as a benign todo re-queue, so the task no longer surfaces as failed on the board and the deferred failure notification is suppressed. Previously a pause-abort parkedstatus:"failed"on an earlier non-todo observation stayed dispatchable (the scheduler filters on column+paused, not status), re-entered the benign-todo branch, and was logged benign while the row stayed failed — firing a contradictory failure alert during global pause when self-healing recovery was suppressed. The clear path also emits anAuto-recovered:-prefixed log so the notification service proactively cancels the pending failure timer instead of relying only on the fire-time re-check. -
b564ee0: Make the compound-engineering built-in workflow actually load skills and run the full CE flow. Previously the workflow named CE skills at each node but the graph-node execution path (
runGraphCustomNode) never loaded them: the named skill was only injected as prompt text, the plugin-injectedFUSION_CE_*runtime env never reached the step session, andfn_spawn_agentwas never registered for workflow steps, so persona fan-out and skill loading silently no-op'd. Now skill-executor graph steps thread the injected env, load the named skill (discovery + selection viaadditionalSkillPaths), register the spawn tool in coding mode, and receive an engine-injected Fusion workflow-step conventions preamble (await-input for questions,FUSION_HEADLESSdegrade path, persona fan-out viasystemPromptOverride). Adds an explicitunattendedopt-in forFUSION_HEADLESS, reconciles the preamble with the gate verdict-JSON contract, and carriesskillNamethrough theWorkflowStepround-trip. -
8b5b9a7: Fix the persistent non-blocking Full Suite failure caused by the Compound Engineering plugin's
dist-freshness.test.ts. The test reads the plugin's compileddist/settings.jsanddist/session/orchestrator.js, but the plugin had nopretestbuild and was absent fromensure-test-artifacts.mjs, so on a fresh checkoutdist/did not exist and the freshness guard threw "dist/ is missing — run pnpm build first". Register the plugin's required artifacts inensure-test-artifacts.mjsand add apretesthook that builds them, matching the other bundled plugins. -
68c4053: Fix the Droid runtime model discovery spawning a runaway storm of leaked
droidprocesses.discoverDroidModelsinvokeddroid models --json/droid model list --json, but the droid CLI has no such commands — an unknown subcommand is parsed as a prompt, so each call launched a full agent session (a persistentdroid exec --stream-jsonrpcbackend) that never exited. The promise never settled and the process leaked; because the dashboard re-loads the droid extension on every chat-send, these piled up into dozens of orphaneddroidprocesses.Discovery now reads the catalog from
droid exec --help(which listsAvailable Models:+Custom Models:and exits cleanly), parsed via the newparseDroidModelsFromHelphelper. A SIGKILL-on-timeout guard (DROID_MODEL_DISCOVERY_TIMEOUT_MS) ensures any wedged spawn is killed and the promise always settles, so a single discovery call can never leak a process again. Verified end-to-end against the real binary (46 models incl. custom, 0 leaked processes). -
9101705: Show plugin-contributed skills (e.g. compound-engineering
ce-*) in the workflow editor. The dashboard's discovered-skills catalog was built only from the disk-scanning package manager, so plugin skills — which the engine materializes for executor sessions separately — never appeared, and built-in workflow nodes that reference them (likebuiltin:compound-engineering) showed "— select skill —" / unresolved. The skills adapter now merges plugin skill contributions into the discovered list (deduped by bare name), and the editor's node summary + skill dropdown match namespaced skillNames (compound-engineering:ce-work) against the catalog's two-segment names (ce-work/SKILL.md) via a shared bare-name normalizer. -
3b61ac3: Fix loading spinners that didn't spin across the dashboard. Many loading states (Settings, task tabs, agents, documents, plugins, model pickers, command center, and more) rendered bare "Loading…" text with no spinner — and a couple rendered an unstyled
loading-spinnerdiv that never showed anything. Added a shared<LoadingSpinner>component (self-contained animated SVG, nolucide-reactdependency so it survives partial test mocks) and adopted it across ~45 loading placeholders so every loading state now shows a consistent animated spinner. -
d99246c: Fix macOS system memory usage reporting by deriving host memory used from OS-available memory instead of raw
os.freemem()pages. -
438cd75: Fix worktree-creation failures (and the
Workflow graph terminated with failure at node 'execute'they surface as) caused by leaked orphan worktree directories.A directory under
.worktrees/that survives with a dangling.gitpointer — present on disk, but the.git/worktrees/<name>admin entry it references is gone — is invisible togit worktree listand untouched bygit worktree prune, yet collides with a freshly generated worktree name. When the executor then tries to clean up the "conflict",git worktree remove --forcefails withis not a working treeand the wholeexecutenode fails after 3 attempts.- On-demand recovery (
executor.ts): the FN-4813 stale-conflict recovery now also treatsis not a working treeandENOENT(not justvalidation failed, cannot remove working tree) as "no live worktree at this path" — it prunes any admin entry, force-removes the leftover directory, and proceeds with fresh worktree creation instead of failing. - Leak prevention (
worktree-pool.ts):reapOrphanWorktreespreviously skipped any dir on the mere presence of a.gitfile ("may be partially registered"), contradicting its own documented invariant. It now resolves the.gitpointer and only skips when the gitdir target actually exists; a dangling pointer is reaped like any other half-initialized orphan, so these directories no longer accumulate across runs.
- On-demand recovery (
-
9643563: Fix the global pause/resume failure mode that stalled the board: a pause-abort that left a task back in
todowas parkedstatus:"failed"("operator action required") and leaked its in-memory worktree slot, producing an instant re-fail retry storm and concurrency-starving the whole queue.- Root cause:
handleGraphFailurenow treats a pause-abort that has re-queued a task totodoas benign (FN-6782) — it no longer parks it failed, clears thepausedAbortedmarker so the next dispatch starts clean, and releases the leaked worktree slot. - Auto-recovery: a new
recoverPausedAbortFailuresself-healing sweep clears any pause-abort park (status:"failed"with "operator action required") still on the board and requeues it for normal scheduling, so the board self-heals without operator intervention. - Defense-in-depth: a new
reapLeakedConcurrencySlotsself-healing sweep reclaims any in-memory worktree slot whose holder is no longer in-progress (the "in todo yet still amaxWorktreesholder" leak), gated by the executor's live-session refusal so it can never pull a worktree out from under a running agent. This recovers a leaked slot from any future/unknown path without an engine restart.
- Root cause:
-
24ff124: Stop edits to
scripts/lib/test-quarantine.jsonfrom forcingpnpm testinto gate mode. The quarantine list is runtime data, not executable test infra; tripping the shared-infra catch-all dropped affected-package coverage, so a dev's real changes went untested whenever they also touched the quarantine list. Quarantine edits now stay in changed mode and run the affected packages. -
a2342ca: Fix the task detail chat always showing "No agent is working on this task" for in-progress tasks. The active-session check required a persistent
assignedAgentId/checkedOutBy, but in the default ephemeral-agents mode the scheduler never sets those fields, so an actively-executing task always read as idle. An assignment is now sufficient-but-not-necessary: a non-blocked, non-queuedin-progress task counts as a live agent session on its own (queuedstays assignment-gated, in-review is unchanged). -
7e7eb62: Harden the orphan-worktree and stale-task-dir cleanup fixes (code-review follow-up).
- executor.ts (P0): the stale-conflict recovery's
rm(worktreePath, { recursive, force })had no bounds check.worktreePathcan originate from a git worktree admin entry that resolves outside.worktrees/, so an out-of-bounds or symlinked path could be force-removed. The recovery now refuses unless the path is inside the configured worktrees dir, is not a symlink (checked viarealpathSync), is not a registered git worktree, and is not actively owned — and it re-verifies liveness inside the catch rather than trusting the error string. It also excludesspawnfailures (e.g.spawn git ENOENTwhen git is missing) so a missing-binary error is no longer misread as a successful stale-path cleanup. - worktree-pool.ts:
resolveGitdirPointeris replaced bydotGitPointerIsDangling, which reaps only when a.gitlink's gitdir target is confirmed missing. A real.gitdirectory, an unparseable pointer, or any read/stat failure now returns "not dangling" (conservative) so a transient read error on a live worktree's.gitcan't cause a force-remove. Removes thestring | "directory" | nullsentinel union. - core store.ts: the
reconcileOrphanedTaskDirsrecency window is now bypassed when the live task table is empty (the corruption/restore case — survivingtask.jsonfiles keep old mtimes), and when a corruptfusion.dbwas auto-recovered on startup, so.recoverrow loss is not stranded by the gate. Adds anignoreRecencyWindowoption for explicit callers. - Tests for all of the above: executor recovery + out-of-bounds refusal, unparseable
.gitskip, recency boundary, empty-DB/forced bypass.
- executor.ts (P0): the stale-conflict recovery's
-
87f18f8: Track real plugin activation events and surface project-scoped Command Center plugin activation analytics instead of placeholder ecosystem counts.
-
ee72c94: Move the Command Center Overview SDLC throughput funnel to the bottom of the tab and broaden hand-rolled chart primitive colors to cycle through existing semantic theme tokens.
-
8f052c6: Fix Command Center Activity trend charts so mixed-unit agent/activity series stay visually legible instead of being flattened by high-volume message counts.
-
df139ec: Recover in-progress tasks wedged behind stale in-memory executor bindings by clearing the phantom binding and requeueing with progress and worktree preserved.
-
e6f6111: Fix terminal shortcut focus preservation so on-screen Ctrl combinations emit control bytes reliably on touch and pointer devices while keeping physical Ctrl behavior intact.
-
d4d7623: Rebaseline the dashboard i18n lint guardrail by excluding non-shipping tests and stories, suppressing technical token categories, localizing plugin missing-view copy, and tracking remaining source-copy deferrals with narrow follow-up tasks.
-
98720f3: Fix mobile bottom tab navigation icon spacing so every tab uses an equal-width column across optional tabs, badges, and status dots.
-
c4f34ce: Make the Agents view sidebar wider by default on tablet and resizable with per-project persistence on non-mobile layouts.
-
b760fa0: Localize remaining plugin, agent, mission, node, research, document, activity, and miscellaneous dashboard strings and remove their i18n lint deferrals.
-
bdf95f8: Localized the dashboard workflow/task/setup/PR component cluster and removed the obsolete i18n lint deferrals for those files so the hardcoded-string guardrail scans them again.
-
eca96fb: Keep settings section dashboard copy covered by i18n lint by removing the settings/sections deferral and regenerating i18n resource types.
-
c808177: Eliminate the legacy board flash before workflow lanes load by caching per-project board workflow metadata and showing a neutral skeleton while metadata resolves.
-
0c0fda1: Keep Command Center inline next to Agents across desktop and tablet header widths instead of moving it into the More views overflow menu.
-
c32c925: Repair task-store startup and self-healing consistency by non-destructively re-importing orphaned live
.fusion/tasks/{ID}/task.jsonrecords into the SQLite task index while preserving soft-deleted, archived, and tombstoned IDs. -
d2fc70a: Fix dependency gating so workflow-graph and workflow-authoritative executor dispatches re-check unmet task dependencies before running, requeueing blocked work with
blockedByinstead of allowing it to advance to review.Add self-healing reconciliation for already-advanced
in-reviewtasks with unmet dependencies, including thetask:reconcile-in-review-unmet-dependenciesrun-audit event and guarded no-action companion. -
08d1f09: Recover benign in-review pause/resume abort parks without requiring operator intervention while preserving hard-cancel, pause, and terminal merge safeguards.
-
61ff17a: Harden in-review dependency drift reconciliation so guard-held or failed rebounds emit no-action audit evidence instead of silently wedging dependent tasks.
-
26bd85d: Fix mobile bottom navigation icon alignment so unread indicators use a centered token-sized icon slot without visually skewing tab spacing.
-
37c4cfa: Prevent bundled Droid and Claude CLI auth/presence probes from surfacing unhandled promise rejections when
spawnthrows synchronously, such as when test guards block real AI CLI auth commands. These probes now resolve as unavailable/unauthenticated instead of rejecting from fire-and-forget validation paths. -
185ff70: Fix the experimental left sidebar Settings button so it remains clear of the fixed executor status footer, and keep project-selector fallback labels readable when translations are incomplete.
-
c7b56a5: Stop triage and planning prompts from auto-selecting alternate workflows based on task type; agents now preserve the project default workflow unless the user explicitly requests a specific workflow.
-
c18e827: Await CLI extension cached TaskStore shutdown so deferred filesystem writes and SQLite handles drain before fixture or process cleanup.
-
8c478ad: Fix stale board entries after dependency-driven task re-specification moves by syncing the watched task cache after
updateTaskDependencieswrites and defensively deduplicatinglistTasksrows so active task rows win over archived snapshots. -
47ba99a: Bump the internal @earendil-works pi SDK family from ^0.79.1 to ^0.79.9 for the CLI, dashboard, and engine packages.
-
24c1c02: Fix dashboard toast text colors so Shadcn dark-mode success, info, and error notifications remain readable against their themed backgrounds.
-
1f23a2e: Ensure bundled Droid CLI provider startup registers without waiting for local
droidprobes and harden binary probes so missing, guarded, or hanging spawns resolve to unavailable sentinels instead of delaying engine boot. -
15d427b: Move Planning Mode into the dashboard sidebar as a first-class embedded view while removing the desktop toolbar affordance.
-
91971b6: Update the built-in compound-engineering workflow so its Review stage runs the
compound-engineering:ce-code-reviewskill directly. The redundant generic reviewer seam node was removed, leaving the CE code-review gate as the sole review stage. -
c4c8961: Tasks created from a selected non-default workflow lane now appear on that lane immediately instead of vanishing until the board-workflows metadata refetch catches up.
-
4342172: Built-in compound-engineering workflow prompts now explicitly call out the
/ce-skill slash command at each stage. -
bb663a4: Improve bundled non-coding workflow prompts so marketing, lead-generation, and design runs produce structured deliverables, with content and design preview artifacts persisted for review.
-
f4d2fa2: Hide the dashboard AI subtask-breakdown quick-add button behind the default-off
subtaskBreakdownexperimental feature flag. -
5191e1f: Prevent the bundled Droid CLI extension from starting local
droidprobes during server boot; validation now runs only when a Droid stream is actually used while existing probe paths remain non-interactive and timeout-bounded. -
4879996: Restyle the workflow switcher trigger and dropdown to visually match the project selector.
-
ec1d29e: Prevent task worktree acquisition from returning the project repository root by enforcing a non-root postcondition across resume, pooled, and fresh checkout paths.
-
c229a15: Tighten agent workflow-routing prompt policy so triage and executor agents must not move a task's workflow unless the user explicitly requested it or the agent created that task. Executor prompts now include an explicit
fn_workflow_selectguardrail while preserving workflow selection for tasks agents create. -
849b40d: Keep workflow IR and effective-settings resolution usable when project identity lookup fails, falling back to declaration defaults instead of propagating the identity error.
-
9218613: Fix auto-merge lifecycle finalization so successful squash commits reliably leave tasks done, clear transient auto-merge state, and preserve actionable failure state when lifecycle updates fail.
-
6e563b9: Revalidate dashboard service-worker assets before falling back to cache so rebuilt tabs cannot stay on stale bundles and render a blank page.
-
a1cac3a: Replace the compact Quick Chat implementation with the full Chat modal launcher and configurable footer/FAB/off setting, move the file browser into the shared floating-window shell with a compact New menu and consistent narrow editor toolbar, fit the dependency graph after layout settles, and align chat/mailbox/task-detail expansion plus header/theme polish.
-
67281fe: Fix Import from GitHub remote detection in multi-project dashboards by passing the active
projectIdto the/api/git/remoteslookup. The dialog now lists configured GitHub remotes instead of showing "No GitHub remotes detected" when the backend requires project scope. -
a147a98: Prevent global settings updates from overwriting an existing unreadable settings file with defaults, and use provider/CPU icons in task chat agent headers.
-
e788537: Raise the minimum agent heartbeat staleness floor from 5 to 10 minutes. Agents go silent during long-running but legitimate work (notably a verification step running a multi-minute test command, where the agent is blocked awaiting the command and cannot tick/heartbeat). The 5-minute floor could misread such a busy agent as dead and reclaim its in-progress task mid-run; 10 minutes gives long operations room before the liveness gate acts.
-
4ed84be: Polish mobile workflow header alignment, task chat provider icons, modal overlay chrome, and shadcn font consistency.
-
a6685b7: Check for duplicate tasks from the New Task dialog and show duplicate descriptions in the warning modal.
-
f0fbc59: Update first-run onboarding to include an optional first-agent step and clearer temporary-agent task guidance.
-
36b8950: Carry the selected workflow lane through Planning Mode and Subtask Breakdown task creation so saved tasks appear on the active workflow instead of falling back to the main board.
-
93017a3: Preserve task progress when a single-session run is hard-cancelled mid-execution. When the engine aborted in-flight work and bounced the task back to
todo, the single-session teardown cleared the taskbranchand re-queued withoutpreserveResumeState— resetting every step topendingand dropping the pointer to commits already on the task branch, so the next dispatch re-planned from Step 0 and the committed work was stranded (observed as a task that "lost all progress" and got stuck). The teardown now keeps the branch and moves withpreserveResumeStatewhenever the task has resumable step progress, matching the step-session and pause-park paths, so execution resumes onto the existing branch from the first incomplete step. The worktree is still removed to free its concurrency slot — only the durable pointers (branch + step state) are kept. -
192a2f2: Preserve unrelated global settings when saving Settings sections, and graduate Chat Rooms, Goals, Memory, Insights, Skills, and Todo to default-on dashboard surfaces.
-
2e3b965: Smooth the mobile Quick Chat fullscreen sheet during Android soft-keyboard viewport resizing while preserving synchronous iOS visualViewport alignment.
-
b9b9447: Reset a task's stuck-kill streak on genuine forward progress.
stuckKillCountwas a lifetime counter — incremented by self-healing on each stuck-kill and cleared only by a manual retry — so a long, genuinely-progressing task could be terminalized by accumulation toward the stuck-kill budget. It now resets when a step reaches a terminal forward status (done/skipped), so only consecutive no-progress stalls count toward the budget. -
192a2f2: Open task-card files changed actions in the inline task detail Changes tab instead of the task modal.
-
5e55d9c: Show provider icons in task detail chat for default-backed executor, reviewer, planner, and merger models.
-
19be91c: Floating modals (the reusable FloatingWindow, the right-dock pop-out, the floating terminal, and the floating New Task dialog) now share a single z-index stack, so tapping any of them brings it to the front above all the others regardless of type.
-
65c4dc5: Graduate workflow columns and the workflow graph executor to the default runtime path.
Upgrade notes: stale persisted
experimentalFeatures.workflowColumnsandexperimentalFeatures.workflowGraphExecutorvalues are ignored by the engine, so prior installs keep dispatching tasks through the workflow runtime after upgrade.workflowInterpreterDualObserveremains an internal diagnostic and defaults off.If an upgraded project appears stalled, treat
todotasks with unmet dependencies,paused/userPaused, active checkout leases, unavailable assigned nodes, or file-scope overlap as intentionally parked. Eligibletodotasks without those blockers should be picked up by the workflow scheduler; eligiblein-progressrows without a live executor are recovered through the normal orphan-resume/self-healing path. The old Experimental toggles are no longer a rollback switch; use a source rollback/downgrade to the previous release if the workflow runtime itself must be reverted.
runfusion.ai
Patch Changes
- Updated dependencies [c8a82e7]
- Updated dependencies [ee9c8ab]
- Updated dependencies [ce6c0fb]
- Updated dependencies [7635ba8]
- Updated dependencies [26e5514]
- Updated dependencies [ce90cc9]
- Updated dependencies [130fea2]
- Updated dependencies [5a422b0]
- Updated dependencies [2d32760]
- Updated dependencies [b564ee0]
- Updated dependencies [8b5b9a7]
- Updated dependencies [68c4053]
- Updated dependencies [9101705]
- Updated dependencies [3b61ac3]
- Updated dependencies [d99246c]
- Updated dependencies [438cd75]
- Updated dependencies [9643563]
- Updated dependencies [24ff124]
- Updated dependencies [a2342ca]
- Updated dependencies [7e7eb62]
- Updated dependencies [87f18f8]
- Updated dependencies [70cce18]
- Updated dependencies [8dd9697]
- Updated dependencies [ee72c94]
- Updated dependencies [f13aaa1]
- Updated dependencies [8f052c6]
- Updated dependencies [df139ec]
- Updated dependencies [e6f6111]
- Updated dependencies [c158dda]
- Updated dependencies [d4d7623]
- Updated dependencies [52924ba]
- Updated dependencies [7f3e942]
- Updated dependencies [281ce35]
- Updated dependencies [98720f3]
- Updated dependencies [c4f34ce]
- Updated dependencies [b760fa0]
- Updated dependencies [bdf95f8]
- Updated dependencies [eca96fb]
- Updated dependencies [c808177]
- Updated dependencies [fbce59b]
- Updated dependencies [af06170]
- Updated dependencies [ef48895]
- Updated dependencies [0c0fda1]
- Updated dependencies [c32c925]
- Updated dependencies [d2fc70a]
- Updated dependencies [08d1f09]
- Updated dependencies [61ff17a]
- Updated dependencies [26bd85d]
- Updated dependencies [37c4cfa]
- Updated dependencies [58f7588]
- Updated dependencies [185ff70]
- Updated dependencies [c7b56a5]
- Updated dependencies [c18e827]
- Updated dependencies [8c478ad]
- Updated dependencies [47ba99a]
- Updated dependencies [24c1c02]
- Updated dependencies [f80a785]
- Updated dependencies [09acfbb]
- Updated dependencies [1f23a2e]
- Updated dependencies [4fec139]
- Updated dependencies [5b33da9]
- Updated dependencies [15d427b]
- Updated dependencies [7034b55]
- Updated dependencies [91971b6]
- Updated dependencies [a913881]
- Updated dependencies [c4c8961]
- Updated dependencies [4342172]
- Updated dependencies [bb663a4]
- Updated dependencies [7fd14eb]
- Updated dependencies [f4d2fa2]
- Updated dependencies [5191e1f]
- Updated dependencies [4879996]
- Updated dependencies [ec1d29e]
- Updated dependencies [c229a15]
- Updated dependencies [849b40d]
- Updated dependencies [9218613]
- Updated dependencies [6e563b9]
- Updated dependencies [496167c]
- Updated dependencies [a1cac3a]
- Updated dependencies [eb3477a]
- Updated dependencies [59d3eee]
- Updated dependencies [2dc36d9]
- Updated dependencies [67281fe]
- Updated dependencies [a147a98]
- Updated dependencies [e788537]
- Updated dependencies [7ef3817]
- Updated dependencies [7ddf58d]
- Updated dependencies [8640a74]
- Updated dependencies [4ed84be]
- Updated dependencies [a6685b7]
- Updated dependencies [f0fbc59]
- Updated dependencies [36b8950]
- Updated dependencies [4fd8d44]
- Updated dependencies [93017a3]
- Updated dependencies [91180fb]
- Updated dependencies [192a2f2]
- Updated dependencies [da5fea6]
- Updated dependencies [e19f7c2]
- Updated dependencies [b20a25c]
- Updated dependencies [4672203]
- Updated dependencies [12aae94]
- Updated dependencies [dc0064b]
- Updated dependencies [5697d2c]
- Updated dependencies [2e3b965]
- Updated dependencies [5117944]
- Updated dependencies [b9b9447]
- Updated dependencies [192a2f2]
- Updated dependencies [5e55d9c]
- Updated dependencies [19be91c]
- Updated dependencies [d4e91d4]
- Updated dependencies [65c4dc5]
- @runfusion/fusion@0.45.0
What's Changed
- refactor(workflow): S08 workflow-owned merge queue processing by @gsxdsm in #1581
- fix(dashboard): guard task detail log rendering by @plarson in #1677
- fix(engine): retriage stale mission feature links by @plarson in #1678
- fix: repair two post-merge Full Suite failures by @gsxdsm in #1679
- feat: migrate Claude off
claude -pto ACP runtime + bridge (Route B + U10; Route A in progress) by @gsxdsm in #1680 - fix(test-infra): bound test invocations with a fail-fast watchdog + CI timeouts by @gsxdsm in #1669
- feat(acp): enable Claude CLI via ACP bridge by default (experimental switch) + status by @gsxdsm in #1681
- refactor(workflow): S06 git and merge capability extraction by @gsxdsm in #1579
- refactor(workflow): S07 completion handoff creates merge work by @gsxdsm in #1580
- feat(acp): Route A follow-ups — token usage, opt-in headless auth, status tests + bridge-auth learning by @gsxdsm in #1682
- feat: Command Center dashboard + SDLC gap-fill (16 units) by @gsxdsm in #1683
- FUS-7: keep activity modal on screen by @gsxdsm in #1649
- Stop quarantine-list edits from forcing pnpm test into gate mode by @gsxdsm in #1686
- Build Compound Engineering plugin dist before its tests (fix Full Suite) by @gsxdsm in #1688
- Fix pause-abort worktree-slot leak + retry storm; add board auto-recovery by @gsxdsm in #1687
- Fix Full Suite test failures: productivity fixtures + delete teardown race by @gsxdsm in #1689
- Raise min agent heartbeat staleness floor 5m -> 10m by @gsxdsm in #1690
- Scope affected test runs to changed-related tests (Part 1: vitest --changed) by @gsxdsm in #1691
- Reduce SQLite read contention: bound WAL, release vacuum lock, offload integrity check by @gsxdsm in #1692
- Offload background integrity_check off the main event loop by @gsxdsm in #1693
- Fix benign pause-abort failure notification + task-chat ephemeral agent detection by @gsxdsm in #1694
- fix(ci): raise shard watchdog floor to 15min to stop Full Suite false-kills by @gsxdsm in #1695
- fix: stop dashboard refresh loops by @gsxdsm in #1621
- feat: behavioral verification in the Validator by @gsxdsm in #1666
- fix: make the compound-engineering workflow actually load skills and run the full CE flow by @gsxdsm in #1696
- fix(engine): auto-continue agent session after engine-internal pause/resume abort by @gsxdsm in #1697
- perf(dashboard): de-duplicate overlapping vitest projects by @gsxdsm in #1700
- fix(engine): map anthropic-compatible custom providers to anthropic-messages api by @vamsi-ship-it in #1702
- chore(ci): add file line-count guardrail to pretest by @gsxdsm in #1698
- [codex] Start Fusion engines by default by @gsxdsm in #1699
- fix: show plugin-contributed skills in the workflow editor by @gsxdsm in #1701
- fix: report engine available when another fusion process owns it by @gsxdsm in #1704
- fix: make loading spinners actually spin across the dashboard by @gsxdsm in #1705
- chore: add CLAUDE.md importing AGENTS.md by @gsxdsm in #1706
- feat(dashboard): workflow optional steps — authoring, full-modal parity, stepwise seam by @gsxdsm in #1703
- fix(engine): preserve task progress when a single-session run is hard-cancelled (FN-6722) by @gsxdsm in #1707
- fix: keep Fusion test verification bounded by @gsxdsm in #1708
- fix(FN-5048): reset stuck-kill streak on forward progress by @gsxdsm in #1709
- docs: refresh README with feature showcase and media by @gsxdsm in #1716
- docs: add 'AI factory in your pocket' mobile showcase by @gsxdsm in #1719
- fix(FN-1721): scope GitHub import remotes to project by @gsxdsm in #1722
- Simplify first-run and new-project onboarding by @gsxdsm in #1720
- fix(engine): harden workflow runtime cutover by @gsxdsm in #1724
New Contributors
- @vamsi-ship-it made their first contribution in #1702
Full Changelog: v0.43.1...v0.45.0