diff --git a/.changeset/FN-7994-planning-sidebar-fast-load.md b/.changeset/FN-7994-planning-sidebar-fast-load.md deleted file mode 100644 index 7b0aff579c..0000000000 --- a/.changeset/FN-7994-planning-sidebar-fast-load.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Keep Planning session history visible while its latest data loads. -category: performance -dev: Planning fetches request only planning-type session summaries. diff --git a/.changeset/FN-8002-planning-reconnecting-hint.md b/.changeset/FN-8002-planning-reconnecting-hint.md deleted file mode 100644 index eb76503d69..0000000000 --- a/.changeset/FN-8002-planning-reconnecting-hint.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Suppress the Planning Mode reconnecting hint on persisted question screens. -category: fix -dev: Gate the `planning.reconnecting` indicator in `PlanningModeModal` to `view.type === "loading"` so idle `awaiting_input`/DB-backed views render purely from persisted state. diff --git a/.changeset/FN-8026-interview-reconnecting-hint.md b/.changeset/FN-8026-interview-reconnecting-hint.md deleted file mode 100644 index aec2ae746b..0000000000 --- a/.changeset/FN-8026-interview-reconnecting-hint.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Hide the interview reconnecting hint on persisted question and review screens. -category: fix -dev: Gate the shared reconnecting indicator in MissionInterviewModal/MilestoneSliceInterviewModal to view.type === "loading" and in SubtaskBreakdownModal to view.type === "generating", mirroring FN-8002 so idle awaiting-input screens render purely from persisted state. diff --git a/.changeset/FN-8124-settings-theme-dropdown.md b/.changeset/FN-8124-settings-theme-dropdown.md deleted file mode 100644 index 834d3f722e..0000000000 --- a/.changeset/FN-8124-settings-theme-dropdown.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Settings now uses the same compact color-theme dropdown as the dashboard. -category: fix -dev: AppearanceSection/ThemeSelector reuse ThemeDropdown; the old .theme-grid affordance and orphaned CSS were removed. Shared swatch classes retained. diff --git a/.changeset/FN-8146-theme-dropdown-current-row.md b/.changeset/FN-8146-theme-dropdown-current-row.md deleted file mode 100644 index b8e0770541..0000000000 --- a/.changeset/FN-8146-theme-dropdown-current-row.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Settings theme selector is merged into the current-theme row and lists every color theme. -category: feature -dev: ThemeDropdown gains a current-row trigger variant used by ThemeSelector; the static preview markup/CSS was removed. Tests assert the explicit historical theme set on Settings and Command Center, including restored Shadcn Mono. diff --git a/.changeset/FN-8226-full-rebuild-install.md b/.changeset/FN-8226-full-rebuild-install.md deleted file mode 100644 index 3ee2dfa1ec..0000000000 --- a/.changeset/FN-8226-full-rebuild-install.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Refresh workspace dependencies before a full System panel rebuild. -category: feature -dev: Full rebuilds run pnpm install before building and restarting. diff --git a/.changeset/assigned-heartbeats-reliability.md b/.changeset/assigned-heartbeats-reliability.md deleted file mode 100644 index 293c0f02b1..0000000000 --- a/.changeset/assigned-heartbeats-reliability.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Restore agent models, workflow lanes, Skills, goals, and Reliability after PostgreSQL migration. -category: fix -dev: Moves backend workflow, plugin, goal, and audit reads to PostgreSQL and recovers false heartbeat model parks. diff --git a/.changeset/blocked-park-survives-graph-teardown.md b/.changeset/blocked-park-survives-graph-teardown.md deleted file mode 100644 index caad0cd046..0000000000 --- a/.changeset/blocked-park-survives-graph-teardown.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: A task honestly parked as blocked now stays parked through engine pause/abort and workflow-graph teardown. -category: fix -dev: handleGraphFailure honors a live blocked park (status "failed", error "BLOCKED:") before every pause-abort/graph-failure classifier — no requeue-to-todo, no auto-continue, no BLOCKED: error overwrite — and releases its worktree/maxWorktrees slot. FN-8141 follow-up 1. diff --git a/.changeset/bright-agent-interviews.md b/.changeset/bright-agent-interviews.md deleted file mode 100644 index 10d03badf9..0000000000 --- a/.changeset/bright-agent-interviews.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix agent AI interviews to use the configured planning model and preserve runtime suggestions. -category: fix -dev: Resolves onboarding model settings before session creation and aligns the prompt with supported runtime draft fields. diff --git a/.changeset/bright-migrations-report.md b/.changeset/bright-migrations-report.md deleted file mode 100644 index 55417ed5c1..0000000000 --- a/.changeset/bright-migrations-report.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Show live phase, table, row-copy, verification, and failure progress during SQLite migration. -category: fix -dev: Adds structured migration progress events to first-boot startup and `fn db migrate` terminal output. diff --git a/.changeset/calm-interview-recovery.md b/.changeset/calm-interview-recovery.md deleted file mode 100644 index 6139c9de97..0000000000 --- a/.changeset/calm-interview-recovery.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Recover agent interviews when models return thinking-only or malformed JSON responses. -category: fix -dev: Preserves structured thinking output and retries one JSON-only reformat turn before surfacing an error. diff --git a/.changeset/calm-migration-inbox.md b/.changeset/calm-migration-inbox.md deleted file mode 100644 index 62229a96b3..0000000000 --- a/.changeset/calm-migration-inbox.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Show migration details once in the dashboard and system inbox after SQLite cutover. -category: feature -dev: Persists banner dismissal and inbox-delivery markers with a Discord support link. diff --git a/.changeset/calm-skills-postgres.md b/.changeset/calm-skills-postgres.md deleted file mode 100644 index a7aefe3abf..0000000000 --- a/.changeset/calm-skills-postgres.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@runfusion/fusion": patch -"@fusion/core": patch ---- - -summary: Fix dashboard skill discovery lifecycle in PostgreSQL mode. -category: fix -dev: Reuse and close backend-aware project stores, keep request-scoped discovery loaders from mutating persistent plugin runtime state, and make cluster-wide PostgreSQL runtime-role creation race-safe. diff --git a/.changeset/calm-tables-migrate.md b/.changeset/calm-tables-migrate.md deleted file mode 100644 index 04bd3f17a7..0000000000 --- a/.changeset/calm-tables-migrate.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Preserve late task, workflow, and mission fields during SQLite-to-PostgreSQL migration. -category: fix -dev: Adds PostgreSQL schema migration 0007 and restores runtime persistence for active late-added fields. diff --git a/.changeset/calm-taxis-requeue.md b/.changeset/calm-taxis-requeue.md deleted file mode 100644 index 42fd439ad6..0000000000 --- a/.changeset/calm-taxis-requeue.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Recover stale executor sessions with bounded fresh-session retries while preserving task progress. -category: fix -dev: Clears the persisted assistant-last transcript, defers requeue until lock release, and exhausts through the shared recovery budget. diff --git a/.changeset/default-settings-appearance.md b/.changeset/default-settings-appearance.md deleted file mode 100644 index 433053af52..0000000000 --- a/.changeset/default-settings-appearance.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Settings now opens on the Appearance section by default. -category: fix -dev: Sets SettingsModal DEFAULT_SETTINGS_SECTION to appearance. diff --git a/.changeset/embedded-postgres-join-database-race.md b/.changeset/embedded-postgres-join-database-race.md deleted file mode 100644 index 4d070d7cf1..0000000000 --- a/.changeset/embedded-postgres-join-database-race.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix startup failures and a leaked server when two Fusion processes start embedded Postgres at the same time. -category: fix -dev: A lifecycle joining an already-running instance returned a URL before the owner's `ensureDatabase()` had created the database, so the joiner's first connect failed. Both join paths now verify the database on the joined instance's port (never `getPort()`, which prefers this instance's requested port) and create it if absent. Verification is best-effort so an unreachable/stale-pid join still resolves optimistically as before. `CREATE DATABASE` races tolerate both `42P04` and `23505` on `pg_database_datname_index`. The startup-race join now fires only on a lock-collision error — joining on any failure let a start that took the lock and then failed later join its own postmaster with `ownsProcess=false`, orphaning it — and reaps its own losing wrapper via the new `NonAdminServerHandle.stopWrapperOnly()`, since `stop()`/`pg.stop()` resolve through the shared data dir and would kill the winner. diff --git a/.changeset/embedded-postgres-lifecycle.md b/.changeset/embedded-postgres-lifecycle.md deleted file mode 100644 index fe024e0481..0000000000 --- a/.changeset/embedded-postgres-lifecycle.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Bundle embedded PostgreSQL for zero-system-install local storage when DATABASE_URL is unset. -category: feature -dev: Adds `embedded-postgres` lifecycle manager (initdb/pg_ctl start/stop, graceful SIGTERM/SIGINT shutdown, data persistence across restarts). Platform binaries bundled for macOS/Linux/Windows arm64/x64. Used by `createTaskStoreForBackend` when DATABASE_URL is unset. - diff --git a/.changeset/embedded-postgres-macos-dylib-links.md b/.changeset/embedded-postgres-macos-dylib-links.md deleted file mode 100644 index 411d3033ba..0000000000 --- a/.changeset/embedded-postgres-macos-dylib-links.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Repair macOS embedded PostgreSQL dylib compatibility links before startup. -category: fix -dev: Adds an idempotent embedded-postgres macOS preflight that creates missing ABI-name symlinks such as `libpq.5.dylib` and `libzstd.1.dylib` from bundled versioned dylibs before `initdb`/`postgres` spawn, fixing zero-config startup when package symlink hydration is absent or incomplete. diff --git a/.changeset/embedded-postgres-startup-race.md b/.changeset/embedded-postgres-startup-race.md deleted file mode 100644 index 78c3ab7f1e..0000000000 --- a/.changeset/embedded-postgres-startup-race.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Starting a second Fusion process no longer fails with a Postgres lock-file error. -category: fix -dev: `EmbeddedPostgresLifecycle.start()` wraps the start path in a try/catch; on failure it re-reads `postmaster.pid` via `isAlreadyRunning()` and, when a live instance exists, joins it (`ownsProcess=false`) instead of surfacing the expected lock collision. Closes the window between the preflight singleton check and `pg.start()` where a competing process can create the lock. Non-`isAlreadyRunning` failures still rethrow unchanged. diff --git a/.changeset/empty-finalize-skipped-step-guard.md b/.changeset/empty-finalize-skipped-step-guard.md deleted file mode 100644 index 01c512d955..0000000000 --- a/.changeset/empty-finalize-skipped-step-guard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Block empty-diff task finalizes that skipped verification steps so reverted work can't reach done. -category: fix -dev: Generalizes evaluateNoCommitsNoOpFinalize (packages/core) to block any zero-diff finalize when a step is skipped — verification/QA/review-named skips block unconditionally, other skips block unless every non-skipped step is done AND the task is noCommitsExpected. Applies at all finalize lanes (merger-ai empty lane, merger.ts, self-healing stranded-todo promoter + no-op review finalize). Closes the FN-8141 laundering path. diff --git a/.changeset/empty-merge-landed-proof.md b/.changeset/empty-merge-landed-proof.md deleted file mode 100644 index 158cd84fea..0000000000 --- a/.changeset/empty-merge-landed-proof.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Reverted-work tasks no longer merge to done as empty no-ops; they park for review. -category: fix -dev: merger-ai.ts empty-outcome lane now requires positive already-landed proof (recorded merge, prior no-op proof, branch tip ancestor of main, or a strong already-on-main classifier match) before finalizing a commit-expected task; otherwise it sets task.error, emits `task:empty-merge-finalize-blocked-no-landed-proof`, and moves the task back to todo. Same guard mirrored in the workspace all-empty finalize (blocks the reverted/net-zero shape). noCommitsExpected tasks keep their existing path (FN-8141). diff --git a/.changeset/executor-blocked-exit.md b/.changeset/executor-blocked-exit.md deleted file mode 100644 index 05153c7763..0000000000 --- a/.changeset/executor-blocked-exit.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Executors can end a genuinely-impossible task as "blocked" instead of laundering it into done. -category: fix -dev: fn_task_done gains outcome="blocked" (plus reason + optional blockedBy). Blocked parks the task failed (error "BLOCKED: "), bypasses the completion/bulk-completion gates, keeps steps in their true statuses, records blockedBy as task.dependencies, and emits run-audit task:execution-blocked-parked. Prompt guidance now names the blocked exit as the correct escape hatch, replacing skip-then-complete. Motivating incident: FN-8141. diff --git a/.changeset/explicit-project-id-routes.md b/.changeset/explicit-project-id-routes.md deleted file mode 100644 index 326034111a..0000000000 --- a/.changeset/explicit-project-id-routes.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Dashboard API requests now resolve an explicit registered project instead of silently using the launch directory. -category: fix -dev: routes/context.ts gains a shared resolveRequestProjectId/getScopedStore/getProjectContext seam (request projectId → options.engine.getProjectId() → raw launch-dir store with a one-time warn, for unregistered dirs only). A resolved id always binds through the engine store or getOrCreateProjectStore; the launch project reuses the injected registry-bound store to avoid a duplicate pool. server.ts resolveScopedStore threads the launch project id, and the todo/goals/mission/insights/research/evals routers route their request middleware through the same seam. diff --git a/.changeset/failure-provenance-promoter-marker.md b/.changeset/failure-provenance-promoter-marker.md deleted file mode 100644 index 199587bc71..0000000000 --- a/.changeset/failure-provenance-promoter-marker.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Failed tasks with pre-fix promotion history can no longer auto-promote past the failure-provenance guard. -category: fix -dev: Removed the promoter's own recovery line ("Auto-recovered: task work was complete but stranded") from CLEAN_COMPLETION_MARKERS in completed-promotion-failure-provenance.ts; clean-completion evidence is now execution outcomes only (accepted/implicit fn_task_done). FN-8141 follow-up 2. diff --git a/.changeset/fast-local-workspace-build.md b/.changeset/fast-local-workspace-build.md deleted file mode 100644 index f34aa72cf7..0000000000 --- a/.changeset/fast-local-workspace-build.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Make local `pnpm build` skip unchanged packages and use fast CLI packaging by default. -category: performance -dev: Content-hash skip cache now covers non-plugin packages; CLI packaging stages desktop/plugins/DTS only with FUSION_CLI_FULL_PACKAGE=1 or CI (`pnpm build:full`). Added maxConcurrentVerifications (default 1) and tsc incremental builds. diff --git a/.changeset/faster-startup-p0.md b/.changeset/faster-startup-p0.md deleted file mode 100644 index 294df7c1a7..0000000000 --- a/.changeset/faster-startup-p0.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Speed up dashboard and serve startup by sharing the PostgreSQL store and deferring non-route work. -category: performance -dev: Dashboard injects externalTaskStore for cwd engine (serve parity); multi-project engines only share when working directories match. ProjectEngine defers notifiers/OAuth (refresh-before-monitor), automation syncs, and merge sweep. Serve no longer awaits startAll before listen. Phase timing logs on both surfaces. diff --git a/.changeset/finish-postgres-runtime-cutover.md b/.changeset/finish-postgres-runtime-cutover.md deleted file mode 100644 index 25677c69de..0000000000 --- a/.changeset/finish-postgres-runtime-cutover.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Require PostgreSQL storage and complete runtime parity across projects, archives, missions, plugins, and maintenance. -category: breaking -dev: Remove FUSION_NO_EMBEDDED_PG and sync runtime fallbacks; legacy SQLite files remain one-time migration inputs only. diff --git a/.changeset/fix-agent-runs-route-backend-agentstore.md b/.changeset/fix-agent-runs-route-backend-agentstore.md deleted file mode 100644 index bc05819c3a..0000000000 --- a/.changeset/fix-agent-runs-route-backend-agentstore.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix manual agent-run creation failing on PostgreSQL when a heartbeat executor is attached. -category: fix -dev: POST /api/agents/:id/runs built its AgentStore without the scoped store's AsyncDataLayer on the heartbeat-executor branch, hitting the removed SQLite runtime in backend mode; it now borrows the layer like the record-only branch. diff --git a/.changeset/fix-anthropic-oauth-refresh.md b/.changeset/fix-anthropic-oauth-refresh.md deleted file mode 100644 index 0302f4e7ff..0000000000 --- a/.changeset/fix-anthropic-oauth-refresh.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Keep Anthropic subscription sessions connected by refreshing OAuth credentials with the correct client identity. -category: fix -dev: Corrects the Claude OAuth client ID used by the engine refresh request and adds request-contract coverage. diff --git a/.changeset/fix-anthropic-subscription-provider-not-configured.md b/.changeset/fix-anthropic-subscription-provider-not-configured.md deleted file mode 100644 index 27b6e5b3fd..0000000000 --- a/.changeset/fix-anthropic-subscription-provider-not-configured.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix Anthropic subscription logins failing tasks with "Provider is not configured: anthropic". -category: fix -dev: pi >=0.80.8 moved session auth from `ModelRegistry.getApiKeyAndHeaders` (fusion's `getApiKey`) to `ModelRuntime.getAuth` -> pi-ai `resolveProviderAuth`, which reads `credentials.read("anthropic")` and refreshes OAuth via `credentials.modify("anthropic")`. Fusion stores the subscription login under `anthropic-subscription` (no raw `anthropic` row), so the refresh saw `current === undefined` and auth resolved to undefined. Fix: `createFusionCredentialStore.read("anthropic")` now resolves through `getApiKey("anthropic")` (handles refresh + raw/legacy/subscription/fallback precedence) and returns a ready `api_key` credential; pi-ai routes it as OAuth by the `sk-ant-oat` token prefix. Also add "not configured" to `isRetryableModelSelectionError` so an unresolved provider triggers the configured fallback model instead of hard-failing. diff --git a/.changeset/fix-artifact-media-auth.md b/.changeset/fix-artifact-media-auth.md deleted file mode 100644 index a129a3a072..0000000000 --- a/.changeset/fix-artifact-media-auth.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix protected image artifacts so previews and links load in authenticated dashboards. -category: fix -dev: Artifact media URLs now use the existing same-origin query-token fallback required by browser image and link navigation. diff --git a/.changeset/fix-bulk-completion-refusal-migration.md b/.changeset/fix-bulk-completion-refusal-migration.md deleted file mode 100644 index 6651a62101..0000000000 --- a/.changeset/fix-bulk-completion-refusal-migration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix a dashboard/app boot crash on databases created before the bulk-completion-refusal change. -category: fix -dev: PR #2260 added project.tasks.bulk_completion_refusal_at to the Drizzle model and the 0000 baseline but shipped no forward migration, so any pre-existing PostgreSQL database (already carrying the 0000 marker) never gained the column and crashed on the first TaskStore SELECT. Adds forward migration 0018 (wired via BULK_COMPLETION_REFUSAL_AT_VERSION, SCHEMA_BASELINE_VERSION → "0018"), a per-column upgrade regression test, and a migration-wiring-integrity guard (baseline marker must equal the highest migration file; every .sql must be registered). diff --git a/.changeset/fix-concurrent-project-ownership-migration.md b/.changeset/fix-concurrent-project-ownership-migration.md deleted file mode 100644 index 80df334455..0000000000 --- a/.changeset/fix-concurrent-project-ownership-migration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix startup failures when several projects migrate against one PostgreSQL cluster at the same time. -category: fix -dev: Migration 0006's `fusion_runtime` setup used a check-then-CREATE ROLE that cannot be atomic — roles live in cluster-wide `pg_authid`, but the applier's `pg_advisory_xact_lock('fusion:schema-applier')` is per-database, so concurrent appliers on different databases of one cluster all saw the role as absent and raced, and the losers failed with 23505 on `pg_authid_rolname_index`. The create now tolerates losing the race (`EXCEPTION WHEN duplicate_object OR unique_violation`), catching the index-level violation the race actually raises as well as the plain duplicate. diff --git a/.changeset/fix-global-concurrency-over-cap.md b/.changeset/fix-global-concurrency-over-cap.md deleted file mode 100644 index 5419ec7826..0000000000 --- a/.changeset/fix-global-concurrency-over-cap.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Stop more agents from running than the global concurrency cap allows. -category: fix -dev: Scheduler tryAcquires a shared slot before todo→in-progress and hands it to the executor/graph; triage admits planners against live running-agent claim (planning + in-progress + active in-review), not only semaphore.availableCount. diff --git a/.changeset/fix-mobile-save-button-clipped.md b/.changeset/fix-mobile-save-button-clipped.md deleted file mode 100644 index 5046ba3fe7..0000000000 --- a/.changeset/fix-mobile-save-button-clipped.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: The task composer's Save button no longer has its label cut off on mobile. -category: fix -dev: At narrow widths `.quick-entry-primary-group` needed ~275px in a 260px column. Its five icon controls are floored by `min-width: 36px`, while Save's automatic minimum size was zeroed by the `overflow: hidden` that FN-7680/FN-7683 added for height equalization (per spec, automatic minimum size applies only when overflow is `visible`), making Save the sole shrinkable item — it absorbed the whole deficit and clipped its own label. Save is now pinned with `flex: 0 0 auto; min-width: max-content`, and the group may `flex-wrap: wrap` with `justify-content: flex-end` so a deficit reflows instead of clipping. Not breakpoint-scoped (FN-5751); inert where the row already fits. Verified in-browser at 412px and 1400px. diff --git a/.changeset/fix-null-project-id-migration.md b/.changeset/fix-null-project-id-migration.md deleted file mode 100644 index 276989a024..0000000000 --- a/.changeset/fix-null-project-id-migration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix first-boot SQLite migration failures while preserving all legacy project data. -category: fix -dev: Handles stale partitions, retired tables, derived FTS indexes, seeded singletons, and cross-database checksum collation. diff --git a/.changeset/fix-pg-store-sqlite-residue.md b/.changeset/fix-pg-store-sqlite-residue.md deleted file mode 100644 index c91d129843..0000000000 --- a/.changeset/fix-pg-store-sqlite-residue.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix data stores that silently failed against PostgreSQL by hitting removed SQLite paths. -category: fix -dev: Residual SQLite-stub sites reachable in backend mode are now routed through the AsyncDataLayer: the executor's authoritative assigned-agent fallback (executor.ts) now inherits the TaskStore asyncLayer (was silently returning null → model drift); `pruneAgentLogFilesAsync` replaces the sync self-healing prune call (was throwing every maintenance sweep); `cleanupOrphanedMaterializedSteps` deletes PG workflow_steps rows on failed create (was leaking); PG hard-delete now runs the async mission feature/task-link unlink (deleteTaskBackendImpl); `getWorkflowSettingsProjectId` no longer touches the SQLite stub for unscoped backend stores; the `fn plugin` unregistered-project fallback bootstraps a CentralCore AsyncDataLayer. Formerly-unported paths are now real backend implementations: `cleanupArchivedTasks` and `deleteWorkflowStep` delete via the async layer; `AgentStore.importLegacyFileRuns` cleanly no-ops in backend mode (no legacy SQLite run-files exist there); the dead zero-caller `applyTaskPatch` SQLite primitive was removed. diff --git a/.changeset/fix-plan-review-replan-loop.md b/.changeset/fix-plan-review-replan-loop.md deleted file mode 100644 index 005a92c2fe..0000000000 --- a/.changeset/fix-plan-review-replan-loop.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Plan Review revisions no longer loop forever; tasks escalate to approval after repeated revises. -category: fix -dev: The triage pre-execution plan-review gate now seeds replan feedback from the plan-review REVISE output in workflowStepResults and caps consecutive REVISE replans at 3 (new planReviewReplanCount counter — a plan_review_replan_count integer column on the PostgreSQL tasks table, self-healing on existing embedded-PG databases via postgres-health), routing the task to awaiting-approval instead of looping. diff --git a/.changeset/fix-planning-history-multitask.md b/.changeset/fix-planning-history-multitask.md deleted file mode 100644 index 5bb2f58e90..0000000000 --- a/.changeset/fix-planning-history-multitask.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Completed Planning Mode sessions that create multiple tasks now stay in planning history. -category: fix -dev: The multi-task create-tasks route now uses releaseSession instead of cleanupSession, retaining the persisted ai_sessions row like the single-task path. diff --git a/.changeset/fix-plugin-migration-startup.md b/.changeset/fix-plugin-migration-startup.md deleted file mode 100644 index 89118b525a..0000000000 --- a/.changeset/fix-plugin-migration-startup.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Prevent startup crashes while recovering plugins from retained SQLite data. -category: fix -dev: Runs the plugin bridge before switching PostgreSQL connections to the restricted runtime role. diff --git a/.changeset/fix-refinement-backend-mode.md b/.changeset/fix-refinement-backend-mode.md deleted file mode 100644 index 4117427cd3..0000000000 --- a/.changeset/fix-refinement-backend-mode.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix task refinement/duplication, merge verification, and workflow checkpoint persistence on PostgreSQL. -category: fix -dev: atomicCreateTaskJson now routes to the AsyncDataLayer in backend mode (fixing the refineTask/duplicateTask createTaskWithId paths that bypassed _createTaskInternal's backend routing), and the merger verification-cache ops (getVerificationCacheHit/recordVerificationCachePass) are now async with a PostgreSQL branch; the upsert targets verification_cache_pkey by constraint name since migration 0006 rebuilds project-schema PKs to lead with project_id. The full sync-SQLite residue sweep also ports workflow run-branch/step-instance persistence, branch progress, plugin column-transition hooks, getTaskColumns, getWorkflowStep/listWorkflowSteps stored-row reads, readRawProjectSettings, and listWorkflowPromptOverridesForProject to the async layer (several store methods became async: saveWorkflowRunBranch, loadWorkflowRunBranches, clearWorkflowRunBranches, saveWorkflowRunStepInstance, loadWorkflowRunStepInstances, clearWorkflowRunStepInstances, getBranchProgressByTask, readRawProjectSettings, listWorkflowPromptOverridesForProject). Also bumps @earendil-works/pi-ai and pi-coding-agent to ^0.80.10 — the FN-8142 pi SDK migration targeted APIs (ModelRuntime et al.) absent from the previously pinned 0.80.6, which broke the engine build. diff --git a/.changeset/fix-session-routing-getauth-guard.md b/.changeset/fix-session-routing-getauth-guard.md deleted file mode 100644 index 9822357cd4..0000000000 --- a/.changeset/fix-session-routing-getauth-guard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Harden session-routing header wiring so a missing model-auth method can't break agent startup. -category: fix -dev: attachSessionRoutingHeaders now no-ops (warns) when ModelRuntime.getAuth is absent instead of throwing on getAuth.bind, restoring the pre-FN-8142 defensive invariant. Also realigns the pi-create-fn-agent and pi-session-routing-headers engine tests to the ModelRuntime.getAuth routing seam (mocks add the ModelRuntime export) so both suites pass against the 0.80.10 SDK landed by FN-8179. diff --git a/.changeset/fix-triage-replan-steps-wedge.md b/.changeset/fix-triage-replan-steps-wedge.md deleted file mode 100644 index 858e313500..0000000000 --- a/.changeset/fix-triage-replan-steps-wedge.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix tasks getting stuck in Planning forever after a plan review asks for revisions. -category: fix -dev: `hasAdvancedPastPlanning` (replan-target.ts) counted `steps.length > 0` as proof a task had advanced past planning. Replan cards legitimately retain the steps their previous planning pass materialized, so the guard at triage's `specifyTask` claim silently skipped its `status:"planning"` write, re-claimed the card every poll, and starved healthy cards out of `maxTriageConcurrent`. Steps are no longer advancement evidence in a planner lane ("triage", or "todo" for plan-in-place workflows carrying a planning status); worktrees and execution/terminal columns still are, preserving FN-7977. The primary claim path now warns instead of skipping silently. diff --git a/.changeset/flip-embedded-pg-default.md b/.changeset/flip-embedded-pg-default.md deleted file mode 100644 index cbb4e70c27..0000000000 --- a/.changeset/flip-embedded-pg-default.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Default local backend is now embedded PostgreSQL; set FUSION_NO_EMBEDDED_PG=1 for legacy SQLite. -category: feature -dev: `createTaskStoreForBackend` now boots embedded PostgreSQL by default when DATABASE_URL is unset (previously required FUSION_EMBEDDED_PG=1). FUSION_EMBEDDED_PG=1 is now a no-op alias; FUSION_NO_EMBEDDED_PG=1 is the opt-out back to legacy SQLite. `embedded-postgres` is now a direct dependency of @runfusion/fusion so the bundled CLI can resolve the platform binary at runtime. Boot smoke exercises the embedded path by default (initdb-aware 180s health timeout). Also hardens three backend-mode gaps the flip exposed: ResearchStore/insights router/watch() now degrade gracefully instead of crashing `fn serve` when the sync SQLite satellite stores are unavailable in PG backend mode. diff --git a/.changeset/fn-001-multi-project-branch-groups.md b/.changeset/fn-001-multi-project-branch-groups.md deleted file mode 100644 index b486e56a0d..0000000000 --- a/.changeset/fn-001-multi-project-branch-groups.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix branch-group controls for tasks in non-default dashboard projects. -category: fix -dev: Resolves branch-group route stores from each request's projectId. diff --git a/.changeset/fn-1165-noop-merge-truthfulness.md b/.changeset/fn-1165-noop-merge-truthfulness.md deleted file mode 100644 index f4adbdb736..0000000000 --- a/.changeset/fn-1165-noop-merge-truthfulness.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Prevent implementation-incomplete workflow merge failures from false-completing as no-op done. -category: fix -dev: Merge graph failures with missing implementation proof now fail closed or requeue resumable parsed steps before any no-branch no-op merge requester path can run. diff --git a/.changeset/fn-7575-dedupe-done-comments.md b/.changeset/fn-7575-dedupe-done-comments.md deleted file mode 100644 index e7661f5bf2..0000000000 --- a/.changeset/fn-7575-dedupe-done-comments.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Stop posting two completion comments on a linked issue when a task is both imported and tracked. -category: fix -dev: A task can carry both linkages at once (GitHub adopts a sourceIssue as githubTracking.issue via `source_issue_linked`; GitLab's buildGitLabTaskProvenance always emits both), so with githubCommentOnDone/gitlabCommentOnDone on, the issue-comment and tracking-comment services both commented on the same issue. The issue-comment services now suppress themselves when the tracking service provably posts to the same target — matched on issue identity for GitHub (case-insensitive owner/repo + number) and by construction for GitLab (resolveGitLabTarget prefers the tracked item). The tracking comment wins because it carries commit/branch/PR/files plus the release lines. Tracking pointed at a different issue, tracking disabled/unlinked, and same-column re-emits (where the tracking service no-ops) all still post as before; the custom comment template no longer renders on tracked issues. diff --git a/.changeset/fn-7575-tracking-comment-release-version.md b/.changeset/fn-7575-tracking-comment-release-version.md deleted file mode 100644 index a2c3faf8e2..0000000000 --- a/.changeset/fn-7575-tracking-comment-release-version.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fusion self-repo issues now actually show the target release version when a task closes. -category: fix -dev: FN-7575 added the release lines to `GitHubIssueCommentService`, which is gated on the `githubCommentOnDone` setting (default false, no Settings UI) and so never fired. `GitHubTrackingCommentService` is the surface that posts the "✅ Done —" comments. The version logic moved to a shared `fusion-release-version.ts` and now applies to all four done-comment surfaces (GitHub/GitLab × tracking/issue). Lines join `optionalLines` so they count against `DONE_COMMENT_MAX_LENGTH`; GitLab self-repo matching uses `item.projectPath`, since the resolved target prefers the numeric `projectId`. diff --git a/.changeset/fn-7779-grok-empty-message-root-cause.md b/.changeset/fn-7779-grok-empty-message-root-cause.md deleted file mode 100644 index ff31936f0a..0000000000 --- a/.changeset/fn-7779-grok-empty-message-root-cause.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Grok CLI failures now show the actual error instead of an empty chat message. -category: fix -dev: `GrokRuntimeAdapter` surfaces every silent-failure path as visible `onText` text plus an assistant message and `state.errorMessage`, instead of resolving into a blank bubble. Covers session-create failure (`describeCreateFailure`, which returns a dead session), prompt failure (`describePromptFailure`), a dead/disposed session with no ACP connection on a follow-up turn, and a turn ending with a non-`end_turn` stopReason and no assistant text. A turn with genuinely empty assistant text stays silent. Resolve-never-reject is preserved so chat/executor always receive a well-formed turn. Fixes the root cause behind the FN-7779 "No message" placeholder. diff --git a/.changeset/fn-7949-ai-session-delete-tombstone.md b/.changeset/fn-7949-ai-session-delete-tombstone.md deleted file mode 100644 index 4ccf1b80fd..0000000000 --- a/.changeset/fn-7949-ai-session-delete-tombstone.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix a deleted Planning Mode session silently reappearing after an in-flight generation finishes. -category: fix -dev: AiSessionStore now records a bounded-TTL delete tombstone (10 min) in `delete()`/`deleteByIdAndType()`/bulk cleanup paths; `upsert()` drops writes for tombstoned ids without emitting `ai_session:updated`. Fixes the root cause in the shared store rather than in `planning.ts`/`subtask-breakdown.ts`/`mission-interview.ts`/`milestone-slice-interview.ts`, so all AiSessionType producers are protected. diff --git a/.changeset/fn-7954-plugin-skill-toggle-key-fix.md b/.changeset/fn-7954-plugin-skill-toggle-key-fix.md deleted file mode 100644 index a503d1a325..0000000000 --- a/.changeset/fn-7954-plugin-skill-toggle-key-fix.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix plugin skill toggles for custom skillFiles paths so sessions honor them. -category: fix -dev: resolvePluginSkillEnabled now keys reads by the resolved plugin skillFiles path when available. diff --git a/.changeset/fn-7955-ce-skills-published.md b/.changeset/fn-7955-ce-skills-published.md deleted file mode 100644 index b05d8257b7..0000000000 --- a/.changeset/fn-7955-ce-skills-published.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix Compound Engineering plugin skills missing from the published package. -category: fix -dev: Stages bundled plugin src/skills into dist/plugins//skills during bundlePluginEntry() for #2094 / FN-7955. diff --git a/.changeset/fn-7956-bundle-three-plugins.md b/.changeset/fn-7956-bundle-three-plugins.md deleted file mode 100644 index 8ea5ef57ca..0000000000 --- a/.changeset/fn-7956-bundle-three-plugins.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Reports, CLI Printing Press, and WhatsApp Chat plugins now load from global installs. -category: fix -dev: Stages the three plugins through bundlePluginEntry with postgresSchema shim coverage and bundle-output regression assertions. diff --git a/.changeset/fn-7959-planning-new-session-focus.md b/.changeset/fn-7959-planning-new-session-focus.md deleted file mode 100644 index 6e5053f9f9..0000000000 --- a/.changeset/fn-7959-planning-new-session-focus.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Pressing "New session" in Planning now always focuses the compose input. -category: fix diff --git a/.changeset/fn-7961-blank-title-fallback.md b/.changeset/fn-7961-blank-title-fallback.md deleted file mode 100644 index 2bce85d03e..0000000000 --- a/.changeset/fn-7961-blank-title-fallback.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Give terminally failed planning tasks deterministic fallback titles. -category: fix -dev: Adds non-LLM title derivation for terminal triage/specification failure paths. diff --git a/.changeset/fn-7962-idle-heartbeat-patrol-backoff.md b/.changeset/fn-7962-idle-heartbeat-patrol-backoff.md deleted file mode 100644 index 00f07b4e49..0000000000 --- a/.changeset/fn-7962-idle-heartbeat-patrol-backoff.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Make idle triage patrol back off during model outages. -category: fix -dev: Updates built-in standard and concise triage heartbeat prompt guidance. diff --git a/.changeset/fn-7963-planner-heartbeat-patrol.md b/.changeset/fn-7963-planner-heartbeat-patrol.md deleted file mode 100644 index ea3aaa1386..0000000000 --- a/.changeset/fn-7963-planner-heartbeat-patrol.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Add a workflow setting to disable idle heartbeat task patrol. -category: feature -dev: Adds plannerHeartbeatPatrolEnabled for no-task heartbeat and triage prompt gating. diff --git a/.changeset/fn-7964-project-models-workflow-lanes.md b/.changeset/fn-7964-project-models-workflow-lanes.md deleted file mode 100644 index 3948bc4623..0000000000 --- a/.changeset/fn-7964-project-models-workflow-lanes.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix Project Models workflow model lane saves. -category: fix -dev: Keeps pending default-workflow model lane overrides registered for Settings Save after section navigation. diff --git a/.changeset/fn-7965-duplicate-feedback.md b/.changeset/fn-7965-duplicate-feedback.md deleted file mode 100644 index 0ba1d029f9..0000000000 --- a/.changeset/fn-7965-duplicate-feedback.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Surface duplicate-decision tasks on cards and in the operator mailbox. -category: fix -dev: Triage-marker duplicate decisions now use an idempotent task-linked system message. diff --git a/.changeset/fn-7965-honor-task-done-park.md b/.changeset/fn-7965-honor-task-done-park.md deleted file mode 100644 index 2e69c2a4bb..0000000000 --- a/.changeset/fn-7965-honor-task-done-park.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Tasks parked by a refused fn_task_done no longer resurrect and strand at code review. -category: fix -dev: FN-7965. `fn_task_done`'s in-session refusal handler parks the row terminally (status=failed, worktree/branch/sessionFile cleared) once `MAX_TASK_DONE_REQUEUE_RETRIES` is exhausted, but the executor's no-fn_task_done retry loop never observed that park and spawned a fresh session. That session completed and marked the task done against a worktree-less row, so the pre-merge graph failed on the first write-capable node (`no-worktree-for-write-node`) and surfaced as a misleading "Workflow graph terminated with failure at node 'code-review-remediation'". The loop now re-reads state and honors the park (`terminallyParked`), stopping without requeue or review handoff — deliberately not routed through the FN-4806 reclaim branch, whose silent todo requeue would clear the park and re-park on next pickup in a todo→execute→park loop. The pre-existing reclaim probes could not catch this: they test `worktree === null`, but the store maps a cleared column to `undefined` (`task-store/serialization.ts` — `row.worktree || undefined`); tightening that probe is left as separate work. diff --git a/.changeset/fn-7965-overseer-executor-failure-signal.md b/.changeset/fn-7965-overseer-executor-failure-signal.md deleted file mode 100644 index e24462aeef..0000000000 --- a/.changeset/fn-7965-overseer-executor-failure-signal.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: The planner overseer now notices a failed in-progress task immediately instead of after two hours. -category: fix -dev: FN-7965. `deriveSignalAndSources`'s `executor` branch never read `task.status`, so a row parked `status: "failed"` (e.g. the terminal fn_task_done refusal/invariant park) reported `signal: "progressing"` with reason "Task is actively executing in-progress work". `failed` was only ever derived for the merger/pull-request stages, leaving the FN-7743 2h stall proxy (`columnMovedAt ?? updatedAt`) as the sole backstop. The branch now reports `failed`, which routes into the pre-existing failed-signal policy — `retry_step` at executor stage (sources are `agent-log`, never an ERROR_SOURCE_KIND), bounded by `PLANNER_RECOVERY_MAX_ATTEMPTS` and escalated on exhaustion. `paused` keeps precedence (operator/user-paused stays `blocked`), the reason is held constant so the FN-7577 `stage|signal|reason` feed dedup still holds, and `status` was added to `OverseerTaskRef`. diff --git a/.changeset/fn-7967-triage-default-workflow.md b/.changeset/fn-7967-triage-default-workflow.md deleted file mode 100644 index dd2859e8f9..0000000000 --- a/.changeset/fn-7967-triage-default-workflow.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Honor custom project workflow defaults in triage guidance. -category: fix -dev: `triageDefaultWorkflowId` and `triageDecisionOnlyWorkflowId` now accept custom IDs; unset/default triage routing inherits `config.settings.defaultWorkflowId`. diff --git a/.changeset/fn-7968-task-delete-latency.md b/.changeset/fn-7968-task-delete-latency.md deleted file mode 100644 index 4fd20e625c..0000000000 --- a/.changeset/fn-7968-task-delete-latency.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Make task deletion return faster while cleanup continues in the background. -category: performance -dev: Defers branch cleanup and dashboard agent-binding release off the user-visible delete path. diff --git a/.changeset/fn-7969-deprecate-coding-ideas.md b/.changeset/fn-7969-deprecate-coding-ideas.md deleted file mode 100644 index 9518aef771..0000000000 --- a/.changeset/fn-7969-deprecate-coding-ideas.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Deprecate the built-in Coding (Ideas) workflow — it no longer appears for new task selection. -category: internal -dev: builtin:coding-ideas is excluded from defaultEnabledBuiltinWorkflowIds() and hidden from listWorkflowDefinitions via the shared DEPRECATED_BUILTIN_WORKFLOWS registry / isBuiltinWorkflowDeprecated helper; it remains resolvable by id for existing task selections. Applied only after a preflight verified no active task (including parked ideas in the `ideas` intake column) selects it. diff --git a/.changeset/fn-7970-deprecate-brainstorming.md b/.changeset/fn-7970-deprecate-brainstorming.md deleted file mode 100644 index edeea718f2..0000000000 --- a/.changeset/fn-7970-deprecate-brainstorming.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Deprecate the built-in Brainstorming workflow — it no longer appears for new task selection. -category: internal -dev: builtin:brainstorming is excluded from defaults and listWorkflowDefinitions through the deprecation registry/helper, but remains resolvable by id. Applied after a successful live-store query verified no active task selects it. diff --git a/.changeset/fn-7971-hide-gitlab-when-disabled.md b/.changeset/fn-7971-hide-gitlab-when-disabled.md deleted file mode 100644 index e6ac3de60b..0000000000 --- a/.changeset/fn-7971-hide-gitlab-when-disabled.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Hide the GitLab import tab when GitLab integration is disabled in settings. -category: fix -dev: Gates GitHubImportModal.tsx GitLab provider visibility on effective gitlabEnabled and coerces disabled persisted state to GitHub. diff --git a/.changeset/fn-7972-agents-controls-overlap.md b/.changeset/fn-7972-agents-controls-overlap.md deleted file mode 100644 index 066bdb81ce..0000000000 --- a/.changeset/fn-7972-agents-controls-overlap.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix Agents controls panel overlapping surrounding content on narrow viewports. -category: fix -dev: Elevated the .agent-controls-panel stacking context in AgentsView.css so the open controls popover sits above agent cards and token usage. diff --git a/.changeset/fn-7973-mobile-concurrency-sliders.md b/.changeset/fn-7973-mobile-concurrency-sliders.md deleted file mode 100644 index f08b5dfe6e..0000000000 --- a/.changeset/fn-7973-mobile-concurrency-sliders.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix concurrency sliders being undraggable on mobile touch devices. -category: fix -dev: The footer Engine Control menu and Command Center Concurrency card range inputs now use touch-action:none so the mobile pan-y ancestor lock no longer hijacks a horizontal thumb drag into page pan. diff --git a/.changeset/fn-7974-collapse-thinking.md b/.changeset/fn-7974-collapse-thinking.md deleted file mode 100644 index 010bdd577f..0000000000 --- a/.changeset/fn-7974-collapse-thinking.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Chat "Thinking" reasoning blocks now start collapsed for a cleaner transcript. -category: fix -dev: Removed the `open` attribute from TaskChatTab's task-chat-thinking
; StandardChatSurface already collapses thinking. Regression tests assert collapsed-by-default + expand-on-click across persisted, streaming, and Task Detail chat surfaces (FN-7974). diff --git a/.changeset/fn-7975-engine-pause-active-timing.md b/.changeset/fn-7975-engine-pause-active-timing.md deleted file mode 100644 index a08dea879f..0000000000 --- a/.changeset/fn-7975-engine-pause-active-timing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Exclude long engine pauses from in-progress task execution time. -category: fix -dev: Reuses FN-7011 active-timing reconciliation on full Global/Engine unpause. Engine-pause time is excluded even if in-flight agents continue, matching restart behavior. diff --git a/.changeset/fn-7976-mailbox-artifact-fixes.md b/.changeset/fn-7976-mailbox-artifact-fixes.md deleted file mode 100644 index 5f1e9af9c3..0000000000 --- a/.changeset/fn-7976-mailbox-artifact-fixes.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix Mailbox artifact messages — "Open artifact" now loads without an auth error and "View task" opens the task. -category: fix -dev: artifactMediaUrl now appends the fn_token query fallback for authenticated element/link loads (script-capable HTML artifact iframes stay token-free); isTaskPopupVisibleForView no longer gates non-board/list popup opens and usePoppedOutTasks.popOut upgrades same-id entries. diff --git a/.changeset/fn-7977-planning-failure-no-regression.md b/.changeset/fn-7977-planning-failure-no-regression.md deleted file mode 100644 index 8c76d4173a..0000000000 --- a/.changeset/fn-7977-planning-failure-no-regression.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Transient provider failures of the Plan Review gate no longer bounce tasks back to planning. -category: fix -dev: workflow-graph-executor shouldRequestPreMergeFix + executor requestPreMergeOptionalStepFix now classify plan-review hard failures via isTransientError/isOperatorActionableAgentError/model-fallback signatures and skip the needs-replan handoff for non-plan-defect failures; genuine REVISE still replans. Fixes issue #2124 / FN-7977. diff --git a/.changeset/fn-7978-github-import-dedup.md b/.changeset/fn-7978-github-import-dedup.md deleted file mode 100644 index 7626261f86..0000000000 --- a/.changeset/fn-7978-github-import-dedup.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: GitHub import skips prior issues after description edits or owner/repo casing changes. -category: fix -dev: Consolidated GitHub import dedup into shared isGitHubIssueAlreadyImported/buildGitHubIssueSource (sourceIssue-first, case-insensitive repository, source.sourceMetadata and description-URL fallbacks) used by both CLI import functions (runTaskImportGitHubInteractive and runTaskImportFromGitHub, now listing with slim:false), both extension tools, and dashboard single/batch routes; removed the description Source-URL-regex-only importedUrls dedup. diff --git a/.changeset/fn-7982-planner-chat-stale-message.md b/.changeset/fn-7982-planner-chat-stale-message.md deleted file mode 100644 index 80d53d3006..0000000000 --- a/.changeset/fn-7982-planner-chat-stale-message.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix task chat showing a stale agent message while generating a new reply. -category: fix -dev: TaskPlannerChatTab now clears streamingThinking and the streaming-assistant row on fresh generations while preserving attach-to-in-flight snapshots. diff --git a/.changeset/fn-7983-summarization-lane-colocation.md b/.changeset/fn-7983-summarization-lane-colocation.md deleted file mode 100644 index c21ad0262c..0000000000 --- a/.changeset/fn-7983-summarization-lane-colocation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Move project summarization model controls next to summarization settings. -category: fix -dev: Dashboard Project Models layout only; no settings key or persistence changes. diff --git a/.changeset/fn-7984-chat-branch-guardrail.md b/.changeset/fn-7984-chat-branch-guardrail.md deleted file mode 100644 index 25f454163b..0000000000 --- a/.changeset/fn-7984-chat-branch-guardrail.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Chat agents no longer switch your checked-out branch unless you ask. -category: fix -dev: Adds a branch-stickiness clause to CHAT_SYSTEM_PROMPT in packages/dashboard/src/chat.ts. diff --git a/.changeset/fn-7985-review-budget-approval.md b/.changeset/fn-7985-review-budget-approval.md deleted file mode 100644 index 448a488e32..0000000000 --- a/.changeset/fn-7985-review-budget-approval.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Show when Plan Review budget exhaustion needs approval and make the replan cap configurable. -category: feature -dev: Adds a number-typed workflow setting (unset → falls back to PLAN_REVIEW_GATE_REPLAN_CAP) read in triage blockAfterPlanReviewRevise; adds a distinct TaskCard/ListView badge + TaskDetailModal callout gated on awaitingApprovalReason === "plan-review-replan-cap". diff --git a/.changeset/fn-7986-plan-review-cap.md b/.changeset/fn-7986-plan-review-cap.md deleted file mode 100644 index e8759d5cf6..0000000000 --- a/.changeset/fn-7986-plan-review-cap.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Plan Review now allows more automatic replan attempts (default 8) before asking a human. -category: internal -dev: Raised triage PLAN_REVIEW_GATE_REPLAN_CAP from 3 to 8 in packages/engine/src/triage.ts; escalation to awaiting-approval (awaitingApprovalReason "plan-review-replan-cap") now fires at 8 consecutive REVISE replans. diff --git a/.changeset/fn-7987-chat-fusion-toolset.md b/.changeset/fn-7987-chat-fusion-toolset.md deleted file mode 100644 index 2dd348fb8b..0000000000 --- a/.changeset/fn-7987-chat-fusion-toolset.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Chat agents and Grok CLI sessions now have board, delegation, web, and knowledge retrieval tools. -category: feature -dev: Dashboard chat and room responders share a safe coordination toolset; destructive agent lifecycle tools remain excluded. diff --git a/.changeset/fn-7990-code-review-worktree.md b/.changeset/fn-7990-code-review-worktree.md deleted file mode 100644 index 62e953dc3d..0000000000 --- a/.changeset/fn-7990-code-review-worktree.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Prevent inline Code Review steps from failing before they can run. -category: fix -dev: Shares workflow write-capability classification between graph preparation and runtime. diff --git a/.changeset/fn-7991-import-screen-optimistic-imported.md b/.changeset/fn-7991-import-screen-optimistic-imported.md deleted file mode 100644 index 2ffe4e155b..0000000000 --- a/.changeset/fn-7991-import-screen-optimistic-imported.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: The GitHub/GitLab Import Tasks screen now marks an issue, PR, or item as "Imported" immediately after importing it. -category: fix -dev: GitHubImportModal unions a local optimistic imported-URL set (populated in handleImport/handleImportGitLab success handlers, cleared on modal reset and on provider/owner/repo/GitLab-resource change) with the tasks-derived importedUrls at every consumer (rows, count labels, top/bottom/GitLab Import buttons), so a just-imported row shows the badge and disables re-import without waiting for the tasks prop round-trip. diff --git a/.changeset/fn-7995-tool-error-detail.md b/.changeset/fn-7995-tool-error-detail.md deleted file mode 100644 index 69f8dfe3c2..0000000000 --- a/.changeset/fn-7995-tool-error-detail.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Show the underlying error message for failed tool calls in the task Activity feed. -category: fix -dev: tool_error agent-log entries now always persist bounded `detail` regardless of `persistAgentToolOutput`; TaskChatTab renders it in an expandable "Error" block. diff --git a/.changeset/fn-7996-executor-tool-failure-retry.md b/.changeset/fn-7996-executor-tool-failure-retry.md deleted file mode 100644 index 414c2e3c89..0000000000 --- a/.changeset/fn-7996-executor-tool-failure-retry.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Auto-retry executor tool-call failures before parking tasks. -category: feature -dev: Adds project-scoped bounded retry settings, durable PostgreSQL claim state, and same-model retry auditing. diff --git a/.changeset/fn-7998-executor-escalation.md b/.changeset/fn-7998-executor-escalation.md deleted file mode 100644 index fe4a0d0a48..0000000000 --- a/.changeset/fn-7998-executor-escalation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Optionally escalate an executor run to a stronger model or configured node after same-model retries are exhausted. -category: feature -dev: New opt-in project settings provide one model/node escalation attempt with durable task state and audit events. diff --git a/.changeset/fn-7999-failed-banner-retry.md b/.changeset/fn-7999-failed-banner-retry.md deleted file mode 100644 index 8acf5f2ffa..0000000000 --- a/.changeset/fn-7999-failed-banner-retry.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Add a diagnostic summary and one-click "Retry with a different model/node" to the Task Failed banner. -category: feature -dev: TaskDetailModal now renders the banner for all failed tasks (including errorless), surfaces the latest tool_error detail (FN-7995), and applies model/node overrides via updateTask before re-running the existing retry path. diff --git a/.changeset/fn-8004-acp-transient-merge-classification.md b/.changeset/fn-8004-acp-transient-merge-classification.md deleted file mode 100644 index 6d36968398..0000000000 --- a/.changeset/fn-8004-acp-transient-merge-classification.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Auto-merge now retries AI provider blips instead of permanently failing the task. -category: fix -dev: ACP provider faults (`promptAcpSession` now preserves the JSON-RPC code as `acp rpc code -32603`) classify as transient via a new `ai-provider-turn-failure` class. `classifyTransientMergeError` also delegates to `isTransientError`, so the self-healing sweep and the inline retry gate share one definition — previously network errors got inline retries but were invisible to the sweep once parked `failed`. Pure predicates moved to the import-free leaf `transient-error-patterns.ts` (re-exported from `transient-error-detector.ts`) to keep the logger chain out of the classifier per FN-5627. Transient budgets raised: `MAX_AUTO_MERGE_TRANSIENT_RETRIES` 3→5, `MAX_TRANSIENT_MERGE_RECOVERIES` 2→5. diff --git a/.changeset/fn-8004-merge-review-reasons-and-landing-retry.md b/.changeset/fn-8004-merge-review-reasons-and-landing-retry.md deleted file mode 100644 index 247067f88a..0000000000 --- a/.changeset/fn-8004-merge-review-reasons-and-landing-retry.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: AI merge rejections now say why, and a stranded merge can be retried without waiting. -category: fix -dev: Two FN-8004 follow-ups. (1) The review prompt said both "End with a single decision line" and "Then list each concrete reason as a bullet"; reviewers obeyed the former, so reasons landed above the verdict where `extractRejectReasons` never looked, degrading every rejection to "rejected the merge without a stated reason" — which was then fed to the corrective re-merge as its instruction. The parser now recovers reasons from either side of the verdict (inline → after → before, capped at 8) and the prompt ordering is unambiguous. (2) `isStaleMergeActiveStatus` moves to the leaf `merge-active-status.ts`, shared by `SelfHealingManager.recoverStaleMergingStatus` and the dashboard Retry gate, which previously refused every merge-active status; an orphaned `landing` stamp is now retryable by hand while a live merge (holding the lease or refreshing `updatedAt`) is still protected. diff --git a/.changeset/fn-8004-soft-delete-heartbeat-race.md b/.changeset/fn-8004-soft-delete-heartbeat-race.md deleted file mode 100644 index d8d5584eb7..0000000000 --- a/.changeset/fn-8004-soft-delete-heartbeat-race.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Concurrent soft-delete during a heartbeat move no longer strands an agent in error. -category: fix -dev: New engine classifier isConcurrentSoftDeleteRaceError short-circuits the agent-heartbeat failed-run handler for TaskDeletedError races (agent stays active, budget untouched) and emits run-audit agent:heartbeat-move-skipped-soft-delete. diff --git a/.changeset/fn-8005-quick-add-icon-size-parity.md b/.changeset/fn-8005-quick-add-icon-size-parity.md deleted file mode 100644 index 4fce446d39..0000000000 --- a/.changeset/fn-8005-quick-add-icon-size-parity.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Quick Add overseer, priority, fast, GitHub, and attach icons now render at one uniform size. -category: fix -dev: QuickEntryBox primary-group icon-only buttons (Eye/EyeOff, PriorityIcon, Zap, GitHub ProviderIcon, Paperclip) all use the icon-only btn-icon treatment (--icon-size-sm) for a uniform 14px cluster; ProviderIcon sizeMap unchanged. diff --git a/.changeset/fn-8006-plan-review-provider-backoff.md b/.changeset/fn-8006-plan-review-provider-backoff.md deleted file mode 100644 index 97c9325cf0..0000000000 --- a/.changeset/fn-8006-plan-review-provider-backoff.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Plan Review now backs off and pauses on provider rate limits instead of retrying every 30s for hours. -category: fix -dev: runPlanReviewBeforeExecution fires usageLimitPauser.onUsageLimitHit for usage-limit reviewer failures (the inline reviewStep catch hid them from triage's own handler) and re-parks via computeRecoveryDecision (60s/120s/240s, terminalizing at MAX_RECOVERY_RETRIES) instead of a fixed 30s nextRecoveryAt. The borrowed recoveryRetryCount budget is cleared on any real verdict. RetryStormError gains an optional cause, surfaced as underlyingError in serializeRetryStormError, so the cap no longer masks the real error. diff --git a/.changeset/fn-8006-plan-review-retry-storm.md b/.changeset/fn-8006-plan-review-retry-storm.md deleted file mode 100644 index 4f190c9cad..0000000000 --- a/.changeset/fn-8006-plan-review-retry-storm.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Plan Review no longer loops forever on reviewer retry storms — it fails the task with a clear error. -category: fix -dev: runPlanReviewBeforeExecution now terminalizes RetryStormError (status "failed", serialized error, nextRecoveryAt cleared) instead of re-queuing plan-review-unavailable, which had let reviewerFallbackRetryCount climb unbounded past maxReviewerFallbackRetries. diff --git a/.changeset/fn-8007-concurrency-dot-alignment.md b/.changeset/fn-8007-concurrency-dot-alignment.md deleted file mode 100644 index 29e8368db5..0000000000 --- a/.changeset/fn-8007-concurrency-dot-alignment.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Concurrency slider current-use dots now line up with the running-count value on the dashboard and footer. -category: fix -dev: Match the current-use marker's native range coordinate mapping and thumb-size edge inset in CommandCenterControls and EngineControlMenu. diff --git a/.changeset/fn-8008-plan-approval-fingerprint.md b/.changeset/fn-8008-plan-approval-fingerprint.md deleted file mode 100644 index c0c664358a..0000000000 --- a/.changeset/fn-8008-plan-approval-fingerprint.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Fix already-approved plans being re-asked for approval after recovery. -category: fix -dev: Plan-approval fingerprint now ignores auto-injected ## Original Description / Frontend UX hygiene sections so finalizeApprovedTask idempotency survives on-disk PROMPT.md injection (FN-8008). Keeps approve-plan producer and manual-gate consumer hashing identical normalized content. diff --git a/.changeset/fn-8016-task-popup-view-scoping.md b/.changeset/fn-8016-task-popup-view-scoping.md deleted file mode 100644 index 7e24596e8f..0000000000 --- a/.changeset/fn-8016-task-popup-view-scoping.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Task-detail popups now open in — and stay scoped to — the view where you opened them. -category: fix -dev: isTaskPopupVisibleForView now scopes by origin view for all views (not just Board/List); taskPopupsBoardListOnly defaults on and popups dedupe per (task id, origin view) so the same task can open independently in multiple views. Escape/keyboard close carries (taskId, originView) identity. FN-8016. diff --git a/.changeset/fn-8017-hide-imported-toggle.md b/.changeset/fn-8017-hide-imported-toggle.md deleted file mode 100644 index 107f8e47b9..0000000000 --- a/.changeset/fn-8017-hide-imported-toggle.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Add a Hide imported toggle that filters imported issues, PRs, and GitLab items from Import Tasks. -category: feature -dev: GitHubImportModal renders a persisted per-project hideImported toggle in the list-pane header (and the GitLab toolbar/header); when on, imported rows (importedUrls predicate) are excluded from the issues/pulls/GitLab render sets while the "{n} imported" count still reflects the full fetched set, with a dedicated all-imported empty state. Toggle persists via GitHubImportPersistedState.hideImported. diff --git a/.changeset/fn-8030-room-thinking-composer.md b/.changeset/fn-8030-room-thinking-composer.md deleted file mode 100644 index ac8aa28ae2..0000000000 --- a/.changeset/fn-8030-room-thinking-composer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Move the room thinking-effort control from the room header into the composer Brain icon next to attach. -category: fix -dev: Rooms now reuse ChatThinkingLevelControl in level-only mode (showTargetSection={false}); header dropdown when tabs don't fit, distinct from the viewport-based isMobileTerminal/isTabletTerminal flags. +- 4fb3606: summary: Show task Artifacts-tab documents expanded with Markdown by default. + category: feature + dev: TaskDocumentsTab now uses multi-expand document state and persists the Markdown/Plain preference. +- 06bf0b8: summary: Artifacts view — Task Documents sidebar now shows clearer task grouping and more space between tasks. + category: fix + dev: DocumentsView Task Documents sidebar restyles .documents-task-sidebar-group-header vs .documents-task-document-item hierarchy and increases inter-group separation, scoped under .documents-task-documents-sidebar so Project Files and Artifacts tabs are unaffected. +- 391ff0d: summary: Agents now auto-clear error state and retry on their next heartbeat instead of getting stuck. + category: fix + dev: Heartbeat scheduler keeps transient, non-operator-actionable error-state durable agents timer-eligible; executeHeartbeat clears error (error→active, clears lastError) at run entry, bounded by MAX_HEARTBEAT_ERROR_RECOVERY_ATTEMPTS (settings-overridable). Operator-actionable errors stay parked; exhaustion pauses the agent with pauseReason "error-retry-exhausted"; a successful run resets the counter. Emits agent:auto-recover-error-state / agent:error-retry-exhausted run-audit events. +- b3ed63d: summary: Fix the Artifacts Task Documents list rendering as blank rows when documents are loaded. + category: fix + dev: Root cause was flex-shrinking task cards in DocumentsView.css; cards now opt out of shrink and DocumentsView.test.tsx covers loaded 50+ group rendering. +- 3da3f37: summary: Done task cards group Archive and Revert into one dropdown. + category: feature + dev: Reuses the in-progress "Send back" .card-send-back\* dropdown pattern in TaskCard; new i18n key tasks.doneActions. +- 14b7244: summary: Stop recording advisory "merger awaiting-confirmation" planner interventions that never block auto-merge. + category: fix + dev: decidePlannerRecovery now returns action "none" for merger/pull-request stages when autoMergeWillProceed === true; the genuine human-approval (false) and neutral (undefined) confirmation paths are unchanged (FN-7840). +- 0b5c551: summary: Fix the mobile Todo view so the list panel fills full height on selection. + category: fix + dev: TodoView.css — the single-panel narrow-container stack no longer inherits the @media (max-width:768px) sidebar max-height cap. +- c7c6c5a: summary: Priority selection in quick add and task cards is now color-coded by urgency (blue low, amber high, red urgent). + category: feature + dev: priorityIndicator gains a getPriorityColorVar single source consumed by QuickEntryBox, TaskForm inline row, and TaskCard's .card-priority-badge; semantic tokens only, no test-id/payload changes. +- c9d0211: summary: Coordinate durable-agent error recovery across heartbeat and self-healing. + category: fix + dev: Reconciles heartbeatErrorRecovery with recoverOrphanedAgents so timer and self-healing paths share one retry budget, use consistent transient/operator-actionable eligibility, and emit a source-discriminated audit surface (FN-7844). +- 4397caf: summary: Fix push to remote after merge never running; pick the push remote and target branch from dropdowns in settings. + category: fix + dev: The `pushAfterMerge` setting only existed in the soft-deprecated legacy `aiMergeTask` pipeline; `runAiMerge` (the sole merge path since master-plan U0) now runs a post-finalize push step — ref-to-ref fast path, clean-room detached rebase with AI conflict resolution on remote divergence (non-FF local ref CAS advance + merge-advance auto-sync), `push:origin` run-audit events, non-fatal failures. New `GET /api/git/remotes/:name/branches` endpoint backs the settings dropdowns; the `pushRemote` setting string ("origin" / "origin main") is unchanged. +- d116018: summary: Make stranded AI merge recovery bind to the reviewed clean-room commit. + category: fix + dev: Avoids ambiguous same-task clean-room recovery and honors cancellation before pre-prune landing. +- d80cdd2: summary: Honor assigned agent models in execution and warn on default-model fallbacks. + category: fix + dev: Executor assigned-agent lookup now falls back to the root AgentStore; session audit adds noModelResolved/runtimeBuiltInFallbackModel when resolution is empty. +- 41998a6: summary: Fix cramped padding on the Notifications "Failure notification mode" settings card. + category: fix + dev: Wrap the failure-notification card fields in `.notification-provider-body` in NotificationsSection so it matches sibling provider-card padding on desktop and mobile. +- a9d5c0f: summary: Fix Grok CLI chat returning errors or empty replies in the dashboard. + category: fix + dev: Two independent defects. (1) The default (no-project) ChatManager received a bare PluginLoader as its runner; Grok CLI routing (deriveGrokRuntimeHintForNoVisibleKey → resolveRuntime) calls getRuntimeById/createRuntimeContext, which only exist on PluginRunner, so a grok-cli/\* chat with no Fusion-visible GROK_API_KEY threw "getRuntimeById is not a function" and surfaced the misleading "requires the bundled Grok CLI runtime" error. New resolveChatManagerPluginRunner(options) prefers the engine's PluginRunner (the runner the project-scoped chat path already uses), falling back to the loader only in UI-only mode. (2) In a source checkout the running dashboard resolved the staged CLI tsup bundle (packages/cli/dist/plugins/fusion-plugin-grok-runtime/bundled.js), which resolvePluginEntryPath prefers verbatim with no freshness check; that bundle was stale vs the FN-7796 single-JSON adapter source (the FN-7779 dev prebuild rebuilds each plugin's own dist but never the staged bundle), so project-scoped grok chat produced empty replies. Fixed durably: getCandidatePluginDirs now probes the live workspace source dir (/plugins/) before the staged bundle, so dev loads the freshness-checked live plugin (self-healing even when the prebuild is skipped). Published installs are unaffected (no workspace dir). A one-time `pnpm build` refreshes any already-stale staged bundle. +- 5dc3837: summary: Fix header connection pill showing "Desktop Desktop" and mixed font sizes. + category: fix + dev: ShellConnectionStatus now folds the host kind into one summary string; removed the separate \_\_kind span and its CSS. +- 1d2d73b: summary: Fix Memory insights parsing and modernize the Memory, Insights, Todos, and agent Memory views. + category: fix + dev: parseInsightsContent filtered bullets after stripping their prefix, collapsing every category into one blob; useMemoryData drops the dead GET /memory and /memory/stats mount fetches and no longer refetches the file list on selection; Engines tab is a 2-column card grid; Todo items are single-row with a quiet inline action cluster; the agent Memory tab uses the shared FileEditor with per-section save actions and fixes the agents.memoryFileMeta {{date}} interpolation. +- c73094e: summary: Polish the Memory view: centered layout, labeled editor toolbar, aligned toggle rows. + category: fix + dev: MemoryView tabs get a 960px centered column; FileEditor instances pass forceToolbarActionsVisible; new i18n key memory.dreamsEnabledTooltip. +- c68b053: summary: Reconcile completed and stale generated-fix mission invariants. + category: fix + dev: Completed missions now normalize autopilot/auto-advance to inactive during autopilot completion, polling, and restart recovery. Mission reconciliation also supersedes generated fix features whose own validator state is already passed, and the scheduler startup sweep runs stale generated-fix reconciliation before trying to relink or retriage active slice features. This prevents complete missions from remaining watched and prevents stale generated fix rows from keeping otherwise-drained missions administratively active. +- b613a87: summary: Settings on mobile now keeps showing the GitHub star count. + category: fix + dev: Removed the ≤768px `display:none` on `.settings-github-star-btn__count` in SettingsModal.css (FN-7848). +- be1950b: summary: Keep task detail per-model cost tables horizontally scrollable on mobile. + category: fix + dev: Removes the Task Detail stacked-card mobile override and guards the shared token table scroll contract. +- dbb29d4: summary: Document the planner-overseer eye badge on task cards. + category: internal + dev: Clarifies that the eye icon reflects non-idle plannerOverseerState, not a human view marker. +- e4a59f7: summary: Tasks are no longer stuck "awaiting release authorization" — the over-firing release gate was removed. + category: fix + dev: Removed the triage release-authorization gate (packages/engine/src/triage-release-authorization.ts + finalizeApprovedTask block) and its dashboard approve/reject-plan guards. It false-flagged specs that merely mentioned release tooling and stranded tasks in awaiting-approval with no in-band exit. Legacy `awaitingApprovalReason: "release-authorization"` rows now render as ordinary manual plan-approval holds. Releases are kept out of Fusion by agent instruction (AGENTS.md → Releasing) instead. +- e4d404e: summary: Fix Settings GitLab row overflowing its panel and the footer Save button clipping. + category: fix + dev: settings-gitlab-disclosure now carries the form-group gutter; .settings-modal .modal-actions wraps on desktop instead of clipping (mobile nowrap rail preserved). +- 2cfeb74: summary: Polish first-run setup: connected providers first, state-driven GitHub step, fixed radios, deduped node picker. + category: fix + dev: New setupWizardNodes.ts (getSelectableRuntimeNodes/shouldShowRuntimeNodeSelector) shared by SetupWizardModal and SetupProjectForm; GitHub status revalidates on window focus and OAUTH_RELOGIN_SUCCESS_EVENT; 4 new i18n keys. +- e90a9c4: summary: Auto-heal wedged SQLite connections in place instead of failing every request until restart. + category: fix + dev: The sqlite adapter now classifies connection-corruption errors (SQLITE_NOTADB "file is not a database" / "database disk image is malformed"), reopens the connection on the same path, replays assignment-style PRAGMAs, verifies with PRAGMA quick_check, and retries the failed operation once when outside an explicit transaction. Statements are generation-tracked so ones prepared before the reopen re-prepare transparently; mid-transaction unwind (ROLLBACK/RELEASE) after a reopen is absorbed as no-ops. Covers fusion.db, fusion-central.db, and archive.db. On-disk corruption (quick_check failure) still defers to the open-time recovery machinery. +- 23e36b8: summary: Task API operations no longer fail with 500 when a task's PROMPT.md can't be read; server also logs 500 causes. + category: fix + dev: getTask (the shared load for GET/DELETE/PATCH/retry/reset/archive) and the mutation helpers updateTaskUnlocked, updateStep, readPromptForArchive, and resetPromptCheckboxes (packages/core/src/store.ts) read PROMPT.md unguarded, so an unreadable file (root-owned from a prior `sudo` run → EACCES, PROMPT.md being a directory → EISDIR, transient FS error) 500'd every per-task op while the PROMPT.md-free board list/create kept working. These reads are now best-effort (degrade + log). Diagnosability: rethrowAsApiError preserves the original error as Error `cause` and the /api boundary logs stack + cause for 5xx (packages/dashboard/src/api-error.ts, server.ts); client body stays generic in production. +- 23e36b8: summary: "Update now" now explains permission (EACCES) failures and how to fix them instead of showing raw npm errors. + category: fix + dev: `performUpdateInstall` (packages/dashboard/src/update-check.ts) detects EACCES/EPERM install failures (by error code or stderr text) and returns actionable remediation — run `sudo fn update`, reinstall without sudo, or `brew upgrade fusion` for Homebrew installs — rather than the raw `npm error EACCES … rename '/usr/lib/node_modules/@runfusion/fusion'`. Occurs when Fusion was installed via `sudo npm i -g` (root-owned global dir); `--force` is not retried for this class since it cannot grant write permission. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [6317fcd] +- Updated dependencies [79264d4] +- Updated dependencies [17d7bd1] +- Updated dependencies [49faf0a] +- Updated dependencies [66e91f9] +- Updated dependencies [9ac4da0] +- Updated dependencies [f10c39f] +- Updated dependencies [409de31] +- Updated dependencies [9024f3a] +- Updated dependencies [f628095] +- Updated dependencies [05d30ff] +- Updated dependencies [93b0801] +- Updated dependencies [ec1a2ea] +- Updated dependencies [fbea66d] +- Updated dependencies [19055c6] +- Updated dependencies [f66bfae] +- Updated dependencies [23e36b8] +- Updated dependencies [84fb513] +- Updated dependencies [53427cd] +- Updated dependencies [c565ceb] +- Updated dependencies [d585edb] +- Updated dependencies [7fe18df] +- Updated dependencies [bccb552] +- Updated dependencies [639a706] +- Updated dependencies [3e7e4a8] +- Updated dependencies [22e7d75] +- Updated dependencies [55dae49] +- Updated dependencies [081dae0] +- Updated dependencies [4fb2bf5] +- Updated dependencies [dcfbee9] +- Updated dependencies [6606902] +- Updated dependencies [6cff782] +- Updated dependencies [7dc2710] +- Updated dependencies [2580524] +- Updated dependencies [21d1201] +- Updated dependencies [b2613b7] +- Updated dependencies [71e9f48] +- Updated dependencies [c8fcbec] +- Updated dependencies [cda9532] +- Updated dependencies [a4931a4] +- Updated dependencies [626e002] +- Updated dependencies [a24b0fa] +- Updated dependencies [171aaa2] +- Updated dependencies [e657d3b] +- Updated dependencies [1fc615d] +- Updated dependencies [e5c3ffb] +- Updated dependencies [927741a] +- Updated dependencies [d44dbaa] +- Updated dependencies [5a9f354] +- Updated dependencies [7420abe] +- Updated dependencies [6a13ad1] +- Updated dependencies [1e79a23] +- Updated dependencies [bab42b4] +- Updated dependencies [0e90578] +- Updated dependencies [86bd434] +- Updated dependencies [5304af8] +- Updated dependencies [4726af6] +- Updated dependencies [9d7b087] +- Updated dependencies [2ff8e2e] +- Updated dependencies [f930790] +- Updated dependencies [1fa4a69] +- Updated dependencies [786a274] +- Updated dependencies [eb377ba] +- Updated dependencies [547740b] +- Updated dependencies [9ce0b49] +- Updated dependencies [f7c6f56] +- Updated dependencies [d2c2a4c] +- Updated dependencies [28c8233] +- Updated dependencies [b4b183f] +- Updated dependencies [2be6040] +- Updated dependencies [fed5d3d] +- Updated dependencies [150227f] +- Updated dependencies [18841d7] +- Updated dependencies [f6fd6ac] +- Updated dependencies [059016e] +- Updated dependencies [167067c] +- Updated dependencies [3cda9d8] +- Updated dependencies [5f14a58] +- Updated dependencies [235ff4c] +- Updated dependencies [df8ad46] +- Updated dependencies [1ba588d] +- Updated dependencies [f9641ec] +- Updated dependencies [035caca] +- Updated dependencies [57c3d7c] +- Updated dependencies [2758dde] +- Updated dependencies [a32307f] +- Updated dependencies [70330bc] +- Updated dependencies [ee796ee] +- Updated dependencies [f5fd8b8] +- Updated dependencies [5729fe2] +- Updated dependencies [2e97395] +- Updated dependencies [03073af] +- Updated dependencies [59a798b] +- Updated dependencies [4d4e9ad] +- Updated dependencies [cc8b1b6] +- Updated dependencies [30bd779] +- Updated dependencies [dd82a60] +- Updated dependencies [db9b9d2] +- Updated dependencies [de67b57] +- Updated dependencies [fc4acd4] +- Updated dependencies [3d5cc0a] +- Updated dependencies [c258fc1] +- Updated dependencies [7846c96] +- Updated dependencies [725ce45] +- Updated dependencies [915c1e0] +- Updated dependencies [21fb8f6] +- Updated dependencies [367f591] +- Updated dependencies [60b8b4e] +- Updated dependencies [c1b14c2] +- Updated dependencies [281d1a3] +- Updated dependencies [595d323] +- Updated dependencies [56b20a7] +- Updated dependencies [bd0e99b] +- Updated dependencies [d40f24d] +- Updated dependencies [a2c9b0f] +- Updated dependencies [3da9da2] +- Updated dependencies [9376504] +- Updated dependencies [0a90dc4] +- Updated dependencies [ee5c2a8] +- Updated dependencies [26f0c5a] +- Updated dependencies [6b506f2] +- Updated dependencies [4fb3606] +- Updated dependencies [06bf0b8] +- Updated dependencies [391ff0d] +- Updated dependencies [b3ed63d] +- Updated dependencies [cc743ee] +- Updated dependencies [3da3f37] +- Updated dependencies [14b7244] +- Updated dependencies [0b5c551] +- Updated dependencies [c7c6c5a] +- Updated dependencies [c9d0211] +- Updated dependencies [dd95634] +- Updated dependencies [d99c04c] +- Updated dependencies [4397caf] +- Updated dependencies [d116018] +- Updated dependencies [d80cdd2] +- Updated dependencies [41998a6] +- Updated dependencies [6267a76] +- Updated dependencies [a9d5c0f] +- Updated dependencies [5dc3837] +- Updated dependencies [1d2d73b] +- Updated dependencies [c73094e] +- Updated dependencies [c68b053] +- Updated dependencies [b613a87] +- Updated dependencies [be1950b] +- Updated dependencies [dbb29d4] +- Updated dependencies [e4a59f7] +- Updated dependencies [e4d404e] +- Updated dependencies [2cfeb74] +- Updated dependencies [bcbd97c] +- Updated dependencies [e90a9c4] +- Updated dependencies [23e36b8] +- Updated dependencies [fc07bdf] +- Updated dependencies [23e36b8] +- Updated dependencies [4edd8cc] + - @runfusion/fusion@0.58.0 ## 0.57.0 -### Highlights +### @fusion/dashboard -- fn_task_attach now refuses to read files outside the task worktree boundary. -- Archived tasks now load newest-first in pages of 100 with a Show more button. -- Planning Mode's "go deeper" prompt now suggests plan-specific topics instead of generic buckets. -- Edit a chat message and resume the conversation from that point. -- Built-in runtime plugins (Hermes, Paperclip, OpenClaw, Droid) can now be disabled and stay disabled across restarts. +#### Patch Changes -### New +- @fusion/core@0.57.0 +- @fusion/engine@0.57.0 +- @fusion/i18n@0.39.22 +- @fusion-plugin-examples/cli-printing-press@0.1.39 +- @fusion-plugin-examples/compound-engineering@0.1.22 +- @fusion-plugin-examples/dependency-graph@0.1.53 +- @fusion-plugin-examples/roadmap@0.1.41 +- @fusion-plugin-examples/cursor-runtime@0.1.41 +- @fusion-plugin-examples/droid-runtime@0.1.48 +- @fusion-plugin-examples/hermes-runtime@0.2.72 +- @fusion-plugin-examples/openclaw-runtime@0.2.72 +- @fusion-plugin-examples/paperclip-runtime@0.2.72 -- Archived tasks now load newest-first in pages of 100 with a Show more button. -- Planning Mode's "go deeper" prompt now suggests plan-specific topics instead of generic buckets. -- Edit a chat message and resume the conversation from that point. -- Built-in runtime plugins (Hermes, Paperclip, OpenClaw, Droid) can now be disabled and stay disabled across restarts. -- Chat search now matches message content, with a "Search in title only" toggle. -- Hermes-configured models now appear in Fusion's model picker when the Hermes runtime is available. -- Edit and resend a message in task-detail Planner Chat. -- Duplicate tasks are no longer auto-archived on creation by default — they are flagged for review instead. +### @fusion/desktop -### Fixed +#### Patch Changes -- fn_task_archive and fn_task_delete now accept removeLineageReferences to clear a lineage-parent block. -- Agents now know they run inside Fusion and won't plan actions across a platform shutdown. -- Custom providers can now enable Anthropic-style prompt caching to stop re-billing the full context each turn. -- Approval cards now show the gated command/arguments and dedupe repeated pending requests. -- Fix Planning Mode Back button showing a generation screen instead of the previous question. -- Auto-approve plan toggle now appears only on the planning column, not Todo. -- Fix Quick Add action-row buttons (Save, Attach, Fast, workflow trigger) rendering at mismatched heights. -- Quick Add action-row controls now resolve one identical box height, not just a min-height floor. -- Warn when changing a workflow's model surfaces tasks still pinned to the old model, including default-workflow tasks. -- Retry transient OAuth token-rotation errors so in-flight agent calls survive rotation without failing the task. -- Executors now block on pending approvals instead of probing for ungated workarounds. -- Fix workspace-mode tasks failing auto-merge under the pull-request merge strategy. -- New tasks now land in the selected workflow's intake column instead of always jumping to Planning/triage. -- Yes/No chat question buttons now show a clear selected state after clicking. -- Planning Mode "needs input" now shows a yellow nav badge instead of a top banner. -- Task-detail Oversight button now matches Priority/Execution-mode height on desktop. -- Fix mobile dashboard terminal sometimes rendering completely blank on open. -- Fix the mobile terminal shortcut bar so it truly scrolls horizontally to reach every key. -- Fix desktop app showing a truncated provider/model list vs. the web build. -- Fix desktop app plugin install and Browse registry (plugin subsystem now wired into the embedded server). -- Fix onboarding GitHub sign-in button erroring instead of starting GitHub auth. -- Authentication settings always lists all supported providers, regardless of connected runtime plugins. -- Add a close button to the Settings screen on mobile. -- Hermes Runtime is now additive — connecting it no longer hides your custom providers, models, or auth options. -- Align Priority and Execution-mode control heights with the Oversight dropdown in task detail. -- Fix the task-detail Planner Chat stop button rendering narrower than its send button. -- Fix cards stranded after workspace/out-of-band merges land; node-override end no longer silently no-ops. -- Code Review/Plan Review/CE gate failures now record a diagnostic instead of "(no feedback captured)". -- Fix agents on long heartbeat intervals silently going stale for hours. -- Fix provider API keys being wiped when the desktop and CLI apps share credentials on one machine. -- Route node settings-sync and mesh credential writes through the coordinated auth store to prevent concurrent clobbers. -- Fix tasks in planning/intake columns starting execution before they were specified. -- Switching projects now lands on the Board instead of Settings when the last-visited view was Settings. -- Removed the chat "Search in title only" toggle; chat search always matches message content and title. -- Automation live output no longer shows "Run failed" for runs that actually succeed. -- Planner chat stop button now shows just the stop icon, not a text label. -- Restore the chat "Working…" indicator immediately when returning to a session with an active generation. -- Retain GitHub issue import state when leaving and returning to Import Tasks. -- Built-in workflow boards and Automations editors now label the intake column "Planning", not "Triage". -- The Command Center SDLC funnel now labels the intake stage "Planning", matching the renamed board column. -- Auto-recover durable agents stuck in transient error state even when their manager is active. -- Task cards no longer show the steps breakdown while in the Planning column. -- Align the quick-add workflow dropdown button height with Save/Fast/Subtask buttons. -- On tablet widths, move terminal shortcuts/zoom controls into the bottom footer so they no longer overlap header icons. -- Keep the mobile top header on a single line after a foldable phone is unfolded and refolded. -- Fix Anthropic-compatible custom providers registering under an unregistered API key. -- Fix merger awaiting-confirmation copy that implied a hard block when auto-merge proceeds automatically. -- Fix the terminal rendering blank on mobile even though the shell prompt already loaded. -- Fix workspace partial-land recovery losing the already-landed sub-repo sha. -- Fix workspace sub-repo worktree creation failing on absent shared branch. -- Prevent redundant polling and a re-render loop in agent-card runtime-fallback badges. -- Clear stale generated mission fix features after their source feature passes validation. -- Stop the false "OAuth token expired" push notification on startup. -- Preserve Hermes chat session state and project runtime routing more reliably. -- Stop the usage telemetry log from growing without bound and bloating the Fusion database. +- @fusion/core@0.57.0 +- @fusion/dashboard@0.57.0 +- @fusion/engine@0.57.0 -### Security +### @fusion/engine -- fn_task_attach now refuses to read files outside the task worktree boundary. +#### Patch Changes -### Performance +- @fusion/core@0.57.0 +- @fusion/pi-claude-cli@0.57.0 -- Fix dashboard terminal showing a blank screen for seconds before the first prompt appears on open. -- Add a one-time server log hint pointing to shell-profile-hygiene docs when a login shell is slow to prompt. +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.57.0 + +### @runfusion/fusion + +#### Minor Changes + +- 03161ad: summary: Archived tasks now load newest-first in pages of 100 with a Show more button. + category: feature + dev: Adds ArchiveDatabase.listPage / TaskStore.listArchivedTasks and GET /tasks/archived for a bounded SQL LIMIT/OFFSET read ordered archivedAt DESC. useTasks.loadArchivedTasks fetches page 1 on first Archived-column expand; loadMoreArchivedTasks fetches subsequent pages. No schema change; the legacy merged listTasks({includeArchived}) path is unchanged. +- e444581: summary: Planning Mode's "go deeper" prompt now suggests plan-specific topics instead of generic buckets. + category: feature + dev: AI completion payload gains optional `deepeningThemes`; the deepening checkpoint prefers them (via buildDeepeningCheckpointOptions) and falls back to the existing regex-derived themes when absent. +- 42009cf: summary: Edit a chat message and resume the conversation from that point. + category: feature + dev: Adds ChatStore.deleteMessagesFrom + PATCH /api/chat/sessions/:id/messages/:messageId; rewinds the pi SessionManager (createBranchedSession) so the model forgets discarded turns. Direct model-loop chats only. +- 0f2bfa5: summary: Built-in runtime plugins (Hermes, Paperclip, OpenClaw, Droid) can now be disabled and stay disabled across restarts. + category: feature + dev: renderBuiltinPluginSection now renders a durable enable/disable toggle for runtime built-ins independent of installed status, replacing the dead-end "Built-in metadata only" CTA for the not-installed / activated-without-record case. Chosen persistence path: on disable, a not-yet-installed built-in runtime is first registered via the existing installPlugin path (mirroring the CLI's ensureBundledPluginInstalled lazy-install), then disablePlugin is called immediately so a plugin_installs row + project state exists with enabled=false — no new persistence primitive needed since loadAllPlugins/loadPlugin already skip disabled plugins and recordActivationEvent only fires on actual load, so a disabled runtime is never re-activated on restart. HermesRuntimeCard/OpenClawRuntimeCard/PaperclipRuntimeCard now reflect the Plugin Manager disabled state ("Disabled in Plugin Manager") instead of showing a stale detected/connected status. +- 6777eea: summary: Chat search now matches message content, with a "Search in title only" toggle. + category: feature + dev: ChatStore.searchSessionsByMessageContent (parameterized LIKE ... ESCAPE); GET /chat/sessions gains q/titleOnly params; useChat exposes searchInTitleOnly. +- 5b243f1: summary: Hermes-configured models now appear in Fusion's model picker when the Hermes runtime is available. + category: feature + dev: /api/models additively merges `hermes profile list` results under the `hermes` provider via a short-TTL, single-flight cache (no per-request CLI spawn); rows are deduped by provider/id and never displace existing entries. Deferred item 1 of FN-7630. +- 1b7bb1f: summary: Edit and resend a message in task-detail Planner Chat. + category: feature + dev: Wires FN-7628's edit affordance (editChatMessage + rewindSessionForEdit) into TaskPlannerChatTab for synthetic task-planner: sessions; already-applied steering comments and refinement tasks are not reverted when a turn is discarded. +- f7d9509: summary: Duplicate tasks are no longer auto-archived on creation by default — they are flagged for review instead. + category: feature + dev: Adds project setting `autoArchiveDuplicateTasksEnabled` (default false) gating the FN-4892 same-agent duplicate intake path in store `_maybeAutoArchiveSameAgentDuplicate`; disabled path uses new `flagSameAgentDuplicate` and sets `nearDuplicateOf` metadata. Tombstone-resurrection blocking is unchanged. +- dd9fa2d: summary: fn_task_archive and fn_task_delete now accept removeLineageReferences to clear a lineage-parent block. + category: fix + dev: Forwards the boolean to store.archiveTask/deleteTask (FN-7661); resolves the tools referencing a parameter their schema never exposed. +- 8ee8f15: summary: Agents now know they run inside Fusion and won't plan actions across a platform shutdown. + category: fix + dev: Adds a shared runtime self-awareness + capability-grounding preamble (packages/core/src/agent-prompts.ts, FUSION_RUNTIME_SELF_AWARENESS) prepended to the chat, heartbeat, and executor base prompts' stable layer. +- 461a4a2: summary: Custom providers can now enable Anthropic-style prompt caching to stop re-billing the full context each turn. + category: fix + dev: Sets pi-ai `compat.cacheControlFormat="anthropic"` on opted-in custom-provider models across both registration paths (custom-provider-registry `toProviderConfig` and `pi.ts` createFnAgent). Opt-in via new `CustomProvider.anthropicPromptCaching` flag (FN-7689). + +#### Patch Changes + +- 4444262: summary: Approval cards now show the gated command/arguments and dedupe repeated pending requests. + category: fix + dev: Permanent-agent gate persists approvalDedupeKey in targetAction.context and a payload-bearing summary (buildAgentGatedActionSummary); MailboxView renders GatedActionApprovalDetails for source="agent-gating". +- 1b1e1f1: summary: Fix Planning Mode Back button showing a generation screen instead of the previous question. + category: fix + dev: handleBack in PlanningModeModal no longer transitions to the loading view during the deterministic rewindPlanningSession; Back returns directly to the previous question form (success and error paths) and never renders .planning-loading. +- ebe9b9f: summary: Auto-approve plan toggle now appears only on the planning column, not Todo. + category: fix + dev: Board.tsx gated the plan auto-approve prop pair on intake||hold; the built-in Coding workflow's Todo is a hold column, leaking the control. Gate is now intake-only (legacy triage path unchanged). +- 13570e8: summary: Fix Quick Add action-row buttons (Save, Attach, Fast, workflow trigger) rendering at mismatched heights. + category: fix + dev: Adds a scoped `min-height` on `.quick-entry-actions .btn` and `.wf-optional-steps-dropdown-trigger` in `QuickEntryBox.css` (desktop base rule, alongside the existing mobile touch-target block) so every action-row control resolves one uniform box height regardless of icon-only vs text content or `.dep-trigger` padding differences. No shared `.btn`/`.btn-sm`/`.btn-icon`/`.btn-task-create`/`.dep-trigger` rules in `styles.css` were touched. +- 9a5a8d2: summary: Quick Add action-row controls now resolve one identical box height, not just a min-height floor. + category: fix + dev: Upgraded `.quick-entry-actions .btn, .quick-entry-actions .wf-optional-steps-dropdown-trigger` in QuickEntryBox.css from a bare min-height floor to a fixed box height (min-height paired with an equal max-height) plus tokenized line-height and centered alignment, at both the desktop base rule and the <=768px touch-target media block. Follow-up: a mobile-only Save-specific override (no vertical padding, line-height:1) further corrects Save's mobile sizing to match siblings without affecting desktop/tablet. +- 1762229: summary: Warn when changing a workflow's model surfaces tasks still pinned to the old model, including default-workflow tasks. + category: fix + dev: PATCH /workflows/:id/setting-values now returns `modelDrift` for execution/planning/validator lanes. Drift baseline is captured inside the settings write transaction (no stale-read race), and default-workflow patches pass `includeNullSelection` so no-workflow-selection tasks are counted. New `TaskStore.updateWorkflowSettingValuesWithPrevious` and `getModelLaneDrift(..., { includeNullSelection })`. +- a486e0b: summary: Retry transient OAuth token-rotation errors so in-flight agent calls survive rotation without failing the task. + category: fix + dev: withRateLimitRetry now retries transient auth errors (authentication_error, invalid credentials, token_expired) on a separate ~5s flat-delay budget that does not consume rate-limit attempts. OAuth scope/permission failures are explicitly excluded (operator must re-authorize) so they surface immediately instead of retrying pointlessly. +- 9e5c025: summary: Executors now block on pending approvals instead of probing for ungated workarounds. + category: fix + dev: wait-for-approval now suspends the in-flight executor session via awaitAbortInFlightTaskWork and dedupes identical pending approvals; executor prompts carve out awaiting-approval as a legitimate turn end. +- 60081fb: summary: Fix workspace-mode tasks failing auto-merge under the pull-request merge strategy. + category: fix + dev: Engine merge dispatch now checks isWorkspaceTask before the mergeStrategy branch, routing workspace tasks to landWorkspaceTask instead of processPullRequestMerge (which threw "could not determine repository" against the non-git workspace root). processPullRequestMergeTask/syncGroupPrCallback now throw the named WorkspaceTaskMergeError for workspace tasks as defense-in-depth. +- 203f879: summary: New tasks now land in the selected workflow's intake column instead of always jumping to Planning/triage. + category: fix + dev: Removed hardcoded `column: "triage"` overrides in `fn_task_create` (engine `createTaskCreateTool` and pi extension) and in signal/GitHub-import/planning create surfaces that had no `workflowId` or (for planning subtask routes) accepted one but still forced `column`. `TaskStore.createTask` already resolves `input.column || resolvedEntryColumn || "triage"`; callers no longer defeat that resolution. A custom workflow's non-triage `intake`-trait column (e.g. `Inbox`) now correctly captures new cards inert until released, while the default builtin:coding workflow still lands cards in `triage` byte-identically. The pi-extension `fn_task_create` response text now echoes the actual landing column instead of a fixed `"Column: triage"` string. +- 81fbb65: summary: Yes/No chat question buttons now show a clear selected state after clicking. + category: fix + dev: Strengthened `.chat-question-response__confirm--selected` CSS specificity (compound selector + dedicated hover/focus-visible rules) so the CTA-token selected fill/border beats the global `.btn`/`.btn:hover` rules; added `aria-pressed` and a regression test asserting the selected class toggles correctly between Yes/No. +- 5631c88: summary: Planning Mode "needs input" now shows a yellow nav badge instead of a top banner. + category: fix + dev: Excludes planning `awaiting_input` sessions from SessionNotificationBanner and adds a `status-dot--pending` dot to the Planning nav destination (LeftSidebarNav + MobileNavBar More item/tab), driven by a new `planningNeedsInput` flag. +- 1ea3c86: summary: Task-detail Oversight button now matches Priority/Execution-mode height on desktop. + category: fix + dev: `.detail-oversight-menu-dropdown` (the popover-positioning wrapper) is now `inline-flex; align-items: stretch` so it participates in `.detail-meta-inline-controls`'s stretch, and `.detail-oversight-menu-trigger` gets `align-self: stretch` to fill it — matching Priority/Execution-mode's direct-child stretch behavior without any new hardcoded height. +- ca84473: summary: fn_task_attach now refuses to read files outside the task worktree boundary. + category: security + dev: Adds a path-containment guard (confine to ctx.cwd) before readFile in the fn_task_attach tool; rejects traversal/absolute/@-prefixed escaping paths. Regression tests in packages/cli/src/**tests**/extension.test.ts. Fixes FN-7619 (flagged out-of-scope during FN-7608). +- 8d73b18: summary: Fix mobile dashboard terminal sometimes rendering completely blank on open. + category: fix + dev: TerminalModal now attaches a persistent ResizeObserver directly on the xterm container (mirroring SessionTerminal's existing pattern), so a container that reports a zero/collapsed box at the first post-open fit recovers as soon as its real box settles, instead of staying at FitAddon's degenerate 2x1-cell floor forever. +- ca7c987: summary: Fix the mobile terminal shortcut bar so it truly scrolls horizontally to reach every key. + category: fix + dev: FN-7550's leaf `min-width:0`/`overflow-x:auto`/`touch-action:pan-x` on `.terminal-shortcut-panel` were already correct, but styles.css's mobile `@media(max-width:768px)` lockdown resets `touch-action` to `pan-y` on `*` and re-locks it explicitly on `.modal-overlay:not(.confirm-dialog-overlay)`/`#root`/`html`/`body` — the terminal's own overlay/modal ancestors were never carved back into `pan-x`, so the panel's own correct touch-action was defeated by ancestor-chain intersection on real mobile devices. Added `touch-action: pan-x pan-y` to `.modal-overlay.terminal-modal-overlay`, `.modal.terminal-modal(.terminal-modal--mobile)` (both mobile paths), and `.terminal-status-bar` (FN-7560 footer, same gap). Locked in with a real-CSS `getComputedStyle` layout test (`loadAllAppCss()`) that resolves the panel + full ancestor chain, replacing reliance on a leaf-rule string match that stayed green through this recurrence. +- fe5a595: summary: Fix desktop app showing a truncated provider/model list vs. the web build. + category: fix + dev: The Electron desktop app's in-process dashboard server (local-runtime.ts, local-server.ts) now routes through a shared `@fusion/engine` `seedDashboardProviders()` helper that mirrors the CLI serve/dashboard/daemon startup sequence (built-in Zai/API-key provider seeding, `wrapAuthStorageWithApiKeyProviders`, `registerCustomProviders`). `provider-auth.ts` and `custom-provider-registry.ts` moved from `@fusion/cli` into `@fusion/engine`; the CLI files are now re-export shims with unchanged observable behavior. +- d54ab80: summary: Fix desktop app plugin install and Browse registry (plugin subsystem now wired into the embedded server). + category: fix + dev: local-runtime.ts / local-server.ts now build a PluginStore + PluginLoader and pass pluginStore/pluginLoader/pluginRunner into createServer, mirroring the CLI dashboard command (FN-7623, issue #1937). Plugin subsystem init is fail-soft — a broken plugin (e.g. corrupt manifest) logs/traces via strace(...) but no longer blocks embedded dashboard startup. +- a4f5fbc: summary: Fix onboarding GitHub sign-in button erroring instead of starting GitHub auth. + category: fix + dev: The onboarding/settings GitHub step no longer offers dashboard-managed OAuth login when no `github` OAuth provider is registered (pi ships only anthropic/github-copilot/openai-codex); it now presents gh CLI (`gh auth login`) guidance. `/api/auth/login` returns a clear unknown-provider error for `github` instead of a misleading "model not found". +- a6c60e1: summary: Authentication settings always lists all supported providers, regardless of connected runtime plugins. + category: fix + dev: GET /api/auth/status now enumerates a static supported-provider catalog (union with storage-reported providers) and uses runtime/auth state only to annotate per-provider status; connecting a runtime plugin (e.g. Hermes Runtime) no longer collapses the provider list. +- ebf8f87: summary: Add a close button to the Settings screen on mobile. + category: fix + dev: The embedded Settings header now renders a mobile-only `modal-close` control gated on `isEmbedded && viewportMode === "mobile"`, wired to the existing `onClose` prop (navigates back to the board and refreshes app settings). Desktop/tablet embedded and the standalone modal presentation are unchanged. +- 6bf0090: summary: Hermes Runtime is now additive — connecting it no longer hides your custom providers, models, or auth options. + category: fix + dev: Audited the Hermes Runtime plugin (onLoad/onUnload, CLI-spawn/probe seams) and register-model-routes.ts/register-auth-routes.ts against GitHub #1931. Confirmed the reported customProviders suppression was already fixed generically (unrelated to Hermes) and that Hermes's PluginContext has no reference to AuthStorage/ModelRegistry, so it cannot mutate either store. Added FNXC documentation comments locking in the additive-runtime invariant and regression coverage across the model-picker (/api/models), custom-provider CRUD, and auth-status surfaces proving a connected Hermes runtime never narrows them. Item 3 (static auth catalog) remains owned by FN-7625; item 1 (additive Hermes-model surfacing in the picker) is deferred to a follow-up task (FN-7636) pending a non-blocking CLI-spawn caching strategy. +- 413ef1d: summary: Align Priority and Execution-mode control heights with the Oversight dropdown in task detail. + category: fix + dev: `.detail-priority-chip`, `.detail-execution-mode-toggle`, and `.detail-oversight-menu-trigger` in TaskDetailModal.css now all pin an explicit `height` (not just `min-height`) from the shared `--detail-priority-control-min-height` token, so none can outgrow or undershoot the others regardless of flex stretch behavior; extends the FN-7585/FN-7618 shared-token pattern. +- 51e3891: summary: Fix the task-detail Planner Chat stop button rendering narrower than its send button. + category: fix + dev: `TaskPlannerChatTab.css` now declares a locally-scoped `--chat-input-control-size` on `.task-planner-chat-composer` (same formula as `ChatView.css`'s `.chat-input-row`) and applies it as a `min-inline-size` floor on `.task-planner-chat-send`, so the shared `.chat-input-send`/`.chat-input-stop` classes (which previously read an undefined custom property inside the Planner composer and fell back to `width: auto`) never render the streaming Stop button narrower than the idle Send button on desktop or mobile. +- 4e8c621: summary: Fix cards stranded after workspace/out-of-band merges land; node-override end no longer silently no-ops. + category: fix + dev: store.moveTask now allows proven-merge recoveryRehome from legacy columns (e.g. todo→done); nodeId='end' finalizes on durable merge proof or returns an explicit error across the dashboard route, CLI task-update tool, and store.updateTask. +- f1db313: summary: Code Review/Plan Review/CE gate failures now record a diagnostic instead of "(no feedback captured)". + category: fix + dev: When an enabled optional-group (`code-review`, `plan-review`, `browser-verification`) or CE `source:"node"` skill-gate template node fails via a dispatch/infra exception rather than a reviewer verdict, `WorkflowGraphExecutor` now synthesizes a non-blank `WorkflowStepResult.output` from the underlying `node::error` context-patch key (falling back to the failure `value`, then a stable sentinel) instead of leaving `output`/`notes` field-absent. Fixes Runfusion/Fusion#1946. `status`, verdict extraction, edge routing, and self-healing's `latestFailedPreMergeStep` selection are unchanged. +- 923bba7: summary: Fix agents on long heartbeat intervals silently going stale for hours. + category: fix + dev: HeartbeatTriggerScheduler timer audit now re-arms non-advancing long-interval registrations (stale lastHeartbeatAt with a live timer entry), not just missing ones (FN-7645). +- 009ce26: summary: Fix provider API keys being wiped when the desktop and CLI apps share credentials on one machine. + category: fix + dev: createFusionAuthStorage() now reloads before persisting a refreshed OAuth credential so a concurrent Fusion process's newer login is not overwritten; adds cross-process regression coverage over ~/.fusion/agent/auth.json. Relies on the pi-coding-agent FileAuthStorageBackend locked per-provider merge (floor >=0.80.x). +- 563a8c6: summary: Route node settings-sync and mesh credential writes through the coordinated auth store to prevent concurrent clobbers. + category: fix + dev: register-settings-sync-routes.ts, register-settings-sync-inbound-routes.ts, and register-mesh-routes.ts now persist received credentials via @fusion/engine createFusionAuthStorage() instead of raw AuthStorage.create(getFusionAuthPath()), sharing FN-7646's reload-before-persist + per-provider locked-merge path over ~/.fusion/agent/auth.json. Adds route-level regression coverage. +- bec8987: summary: Fix tasks in planning/intake columns starting execution before they were specified. + category: fix + dev: The hold-release entry guard (reserveSlot in scheduler.ts, issueRelease in hold-release.ts) is now trait-based (isUnplannedForExecution resolves the `intake` trait plus `status:"planning"`/bootstrap-stub PROMPT.md) instead of keyed on the literal `todo` column id, so renamed custom intake columns (e.g. `ideas`, `Inbox`) are covered too. promoteHeldTask/releaseHeldTaskByEvent also route through the same guard (FN-7648). +- ce4f173: summary: Switching projects now lands on the Board instead of Settings when the last-visited view was Settings. + category: fix + dev: Extended resolveLandingTaskView in useViewState.ts to resolve "settings" (in addition to "command-center") to "board" for the auto-restored/hydrated landing view only; deep links (?view=settings) and explicit navigation still open Settings. +- efabdd6: summary: Removed the chat "Search in title only" toggle; chat search always matches message content and title. + category: fix + dev: Dropped searchInTitleOnly/setSearchInTitleOnly from useChat and the ChatView toggle button; content-search path (q param, matchedMessagePreview) is now always-on. Server GET /chat/sessions titleOnly param retained but unused by the client. +- 7c7b22e: summary: Automation live output no longer shows "Run failed" for runs that actually succeed. + category: fix + dev: Reconciles the live-run panel terminal status (ScheduledTasksModal/RoutineCard) to the authoritative POST/registry result and gates benign SSE teardown (post-terminal close, reconnect exhaustion) from being surfaced as a failure across both `/routines/:id/run/stream` and `/automations/:id/run/stream`. +- dfb084c: summary: Planner chat stop button now shows just the stop icon, not a text label. + category: fix + dev: StandardChatActionButton gains showStopText (defaults to showSendText); TaskPlannerChatTab sets showStopText={false}. aria-label "Stop generation" retained. +- e29fea3: summary: Restore the chat "Working…" indicator immediately when returning to a session with an active generation. + category: fix + dev: `useChat.ts` `selectSession` now reattaches on the authoritative `fetchChatSession` refresh whenever `isGenerating===true`, instead of requiring a populated `inFlightGeneration` snapshot that is null pre-first-delta. Guards against races (stale active session, already-open stream) and reuses `attachIfGenerating` (FN-7656). +- 511bcaf: summary: Retain GitHub issue import state when leaving and returning to Import Tasks. + category: fix + dev: Persists GitHubImportModal provider/tab/label filter/remote/selection per project via projectStorage (`kb-dashboard-github-import-state`) and hydrates on remount; falls back to the existing default-remote auto-detect when nothing is persisted. +- 97e4667: summary: Built-in workflow boards and Automations editors now label the intake column "Planning", not "Triage". + category: fix + dev: board-workflows canonical label map BUILTIN_WORKFLOW_COLUMN_LABELS.triage was still "Triage", overriding FN-7599's IR rename; set to "Planning". English schedule.columnTriage/taskColumnTriage/triageColumn set to "Planning" and dashboard locale copy re-synced. Also fixed board.triage (AgentDetailView task-column badge) and docs/dashboard-guide.md references. Column id "triage" unchanged. +- 7cf70b3: summary: The Command Center SDLC funnel now labels the intake stage "Planning", matching the renamed board column. + category: fix + dev: commandCenter.funnel.stage.triage, enteredInRange, and completionRateAria English strings (and SdlcFunnel.tsx t() fallbacks) changed to "Planning"/"Entered planning"/"in-range planning entrants"; dashboard locale copy re-synced. Aggregator stage key "triage" and the i18n key names are unchanged. +- aa534c1: summary: Auto-recover durable agents stuck in transient error state even when their manager is active. + category: fix + dev: SelfHealingManager durable-error recovery no longer requires a missing manager; manager-present durable non-ephemeral agents with a transient lastError and no active run are recovered under the existing cooldown/backoff/retry-budget guards (FN-7672). +- 297c744: summary: Task cards no longer show the steps breakdown while in the Planning column. + category: fix + dev: TaskCard `showProgressSection` now excludes the `triage` column, matching ListView; the breakdown appears once a task leaves Planning. +- a4fce60: summary: Align the quick-add workflow dropdown button height with Save/Fast/Subtask buttons. + category: fix + dev: `.quick-entry-workflow-trigger` in QuickEntryBox.css now re-asserts `.btn-sm`'s `padding: 4px 10px` locally so the shared global `.dep-trigger` `padding: 3px 8px` no longer shortens it by ~2px; other `.dep-trigger` surfaces (InlineCreateCard, NewTaskModal, TaskDetailModal, TaskForm) are unaffected (FN-7677). +- 83e7743: summary: On tablet widths, move terminal shortcuts/zoom controls into the bottom footer so they no longer overlap header icons. + category: fix + dev: Adds an isTabletTerminal flag (769–1024px, non-mobile) that renders the shared terminalActionControls fragment in the .terminal-status-bar footer (as FN-7560 did for mobile) instead of the header; true desktop (>1024px) keeps the header layout. Tablet footer keeps the desktop pin/pop-out toggles. +- a832b79: summary: Fix dashboard terminal showing a blank screen for seconds before the first prompt appears on open. + category: performance + dev: `useTerminalSessions` no longer awaits a discardable `listTerminalSessions()` round trip before auto-creating the first session when there are no persisted `kb-terminal-tabs`; the round trip only produced a no-op filter result in that case. Reload-with-persisted-tabs is unaffected — it still awaits session-list validation. +- fd541bb: summary: Keep the mobile top header on a single line after a foldable phone is unfolded and refolded. + category: fix + dev: `.header` now pins `flex-wrap: nowrap` explicitly and `.header-left`/`.header-actions` get an explicit `flex`/`min-width: 0` shrink-and-truncate contract promoted to the base rule (not gated to the `@media (max-width: 768px)` block), so the row cannot wrap even while a foldable's CSS layout viewport lags its `visualViewport` pane mid fold/unfold/refold. `useViewportMode` was audited and already recomputes correctly on that resize sequence (regression test added; no hook change needed). +- 07507f5: summary: Add a one-time server log hint pointing to shell-profile-hygiene docs when a login shell is slow to prompt. + category: performance + dev: FN-7688 investigated whether `--login` in `TerminalService.detectShell()`/`createSession()` is a meaningful first-prompt latency contributor. Finding: negligible on lean profiles, additive (~800ms+) when `.zprofile`/`.bash_profile` eagerly sources something slow (e.g. version manager init). `--login` is preserved unconditionally per FN-7686; added `SLOW_LOGIN_PROFILE_HINT_MS` (2000ms) threshold and a one-time, non-blocking `console.info` hint in `createSession()`'s PTY `onData` handler — never alters spawn args, timeouts, or the `retry-without-login` fallback. See `docs/solutions/developer-experience/login-shell-profile-latency.md`. +- 64d4bb7: summary: Fix Anthropic-compatible custom providers registering under an unregistered API key. + category: fix + dev: Aligns custom-provider-registry `resolveApiType("anthropic-compatible")` on "anthropic-messages" (the registered pi-ai api key), matching pi.ts `resolveCustomProviderApiType` and removing the latent "No API provider registered for api: anthropic" drift (FN-7690). +- 67cc027: summary: Fix merger awaiting-confirmation copy that implied a hard block when auto-merge proceeds automatically. + category: fix + dev: `decidePlannerRecovery` now accepts an additive `autoMergeWillProceed` flag (threaded from `allowsAutoMergeProcessing` in `PlannerRecoveryController.tick`) that only shapes the confirmation `reason` string; no gating/behavior change to `action`/`requiresConfirmation`/`sideEffectClass`. +- 0755fc5: summary: Fix the terminal rendering blank on mobile even though the shell prompt already loaded. + category: fix + dev: The global mobile `@media (max-width: 768px) { * { max-width: 100% } }` reset in styles.css also matched xterm's hidden character-measurement subtree (`.xterm-helpers` / `.xterm-char-measure-element`). That subtree's containing block is a 0x0 box, so `max-width: 100%` resolved to 0 and hard-capped xterm's character-cell measurement at 0 — FitAddon.fit() then proposed 0 columns and `.xterm-screen` (plus the WebGL canvas) collapsed to 0x0, so the prompt painted into a zero-size box. Exempt xterm's measurement subtree from that reset (`max-width: none`). Mobile-only; desktop was unaffected. Recurrence of FN-7620/FN-7686. +- 0c1a20b: summary: Fix workspace partial-land recovery losing the already-landed sub-repo sha. + category: fix + dev: merger-ai.ts landWorkspaceTask now recovers the EXACT proven landed commit (the task's own Fusion-Task-Id trailer commit, or the recorded landedSha when it is still an ancestor) via findProvenLandedCommit, instead of dropping it when the A1 trailer-fallback proved a sub-repo landed but its sha was never persisted. This avoids attributing a later unrelated integration tip to the repo after an intervening sub-repo land, so finalizeWorkspaceTask builds durable merge proof and the partial-land retry completes to done. +- 0c1a20b: summary: Fix workspace sub-repo worktree creation failing on absent shared branch. + category: fix + dev: worktree-acquisition.ts acquireWorkspaceRepoWorktree now strips the shared project integrationBranch/baseBranch overrides before forwarding to acquireTaskWorktree, so FN-7360's freshStartPoint resolution no longer tries to git-worktree-add a branch absent from the sub-repo. +- d8ce3f4: summary: Prevent redundant polling and a re-render loop in agent-card runtime-fallback badges. + category: fix + dev: AgentsView now caches one stable ref callback per viewport key (avoids an infinite re-render loop when IntersectionObserver is unavailable) and evicts it on unmount; the test-only toast-dedupe reset is guarded to a no-op in production builds. +- 3744fbc: summary: Clear stale generated mission fix features after their source feature passes validation. + category: fix + dev: Reconciles obsolete generated Fix Feature chains during validator pass handling and active mission recovery. +- a8c018f: summary: Stop the false "OAuth token expired" push notification on startup. + category: fix + dev: In ProjectEngine.start, OAuthRefreshScheduler.start() now runs before OAuthExpiryMonitor.start() so the proactive refresh renews a stale-but-refreshable access token before the refresh-blind monitor's first awaited check() reads `expires`. Ordering locked by an invocationCallOrder assertion in project-engine.test.ts. +- a734d9f: summary: Preserve Hermes chat session state and project runtime routing more reliably. + category: fix + dev: Refreshes cached project chat plugin runners and hardens Hermes CLI session/error handling. +- ac719d1: summary: Stop the usage telemetry log from growing without bound and bloating the Fusion database. + category: fix + dev: usage_events was absent from operational-log retention, so it grew unbounded (observed ~187k rows / ~28MB with nothing ever aged out). pruneOperationalLogs now prunes usage_events on the same operationalLogRetentionDays cadence, keyed off its `ts` column (not `timestamp`). Existing rows still require a one-time VACUUM to reclaim on-disk space. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [4444262] +- Updated dependencies [1b1e1f1] +- Updated dependencies [ebe9b9f] +- Updated dependencies [03161ad] +- Updated dependencies [13570e8] +- Updated dependencies [9a5a8d2] +- Updated dependencies [1762229] +- Updated dependencies [a486e0b] +- Updated dependencies [9e5c025] +- Updated dependencies [60081fb] +- Updated dependencies [203f879] +- Updated dependencies [81fbb65] +- Updated dependencies [5631c88] +- Updated dependencies [e444581] +- Updated dependencies [1ea3c86] +- Updated dependencies [ca84473] +- Updated dependencies [8d73b18] +- Updated dependencies [ca7c987] +- Updated dependencies [fe5a595] +- Updated dependencies [d54ab80] +- Updated dependencies [a4f5fbc] +- Updated dependencies [a6c60e1] +- Updated dependencies [ebf8f87] +- Updated dependencies [42009cf] +- Updated dependencies [0f2bfa5] +- Updated dependencies [6bf0090] +- Updated dependencies [6777eea] +- Updated dependencies [413ef1d] +- Updated dependencies [51e3891] +- Updated dependencies [5b243f1] +- Updated dependencies [1b7bb1f] +- Updated dependencies [4e8c621] +- Updated dependencies [f1db313] +- Updated dependencies [923bba7] +- Updated dependencies [009ce26] +- Updated dependencies [563a8c6] +- Updated dependencies [bec8987] +- Updated dependencies [ce4f173] +- Updated dependencies [efabdd6] +- Updated dependencies [7c7b22e] +- Updated dependencies [dfb084c] +- Updated dependencies [e29fea3] +- Updated dependencies [511bcaf] +- Updated dependencies [f7d9509] +- Updated dependencies [97e4667] +- Updated dependencies [dd9fa2d] +- Updated dependencies [7cf70b3] +- Updated dependencies [aa534c1] +- Updated dependencies [8ee8f15] +- Updated dependencies [297c744] +- Updated dependencies [a4fce60] +- Updated dependencies [83e7743] +- Updated dependencies [a832b79] +- Updated dependencies [fd541bb] +- Updated dependencies [07507f5] +- Updated dependencies [461a4a2] +- Updated dependencies [64d4bb7] +- Updated dependencies [67cc027] +- Updated dependencies [0755fc5] +- Updated dependencies [0c1a20b] +- Updated dependencies [0c1a20b] +- Updated dependencies [d8ce3f4] +- Updated dependencies [3744fbc] +- Updated dependencies [a8c018f] +- Updated dependencies [a734d9f] +- Updated dependencies [ac719d1] + - @runfusion/fusion@0.57.0 ## 0.56.1 -### Highlights +### @fusion/dashboard -- Fix Anthropic subscription showing "logged in" while all model calls fail. -- Fix "Invalid transition" error when moving cards out of a custom workflow column like Coding (Ideas) → Ideas. -- Fix overlapping Record and Clear buttons in the Keyboard Shortcuts settings rows on desktop and mobile. -- Fix persistent mobile terminal inter-character spacing (5th recurrence root cause). -- Fix manual PR actions hidden when a task auto-merge override was on but global auto-merge was off. +#### Patch Changes -### Fixed +- @fusion/core@0.56.1 +- @fusion/engine@0.56.1 +- @fusion/i18n@0.39.21 +- @fusion-plugin-examples/cli-printing-press@0.1.38 +- @fusion-plugin-examples/compound-engineering@0.1.21 +- @fusion-plugin-examples/dependency-graph@0.1.52 +- @fusion-plugin-examples/roadmap@0.1.40 +- @fusion-plugin-examples/cursor-runtime@0.1.40 +- @fusion-plugin-examples/droid-runtime@0.1.47 +- @fusion-plugin-examples/hermes-runtime@0.2.71 +- @fusion-plugin-examples/openclaw-runtime@0.2.71 +- @fusion-plugin-examples/paperclip-runtime@0.2.71 -- Fix Anthropic subscription showing "logged in" while all model calls fail. -- Fix "Invalid transition" error when moving cards out of a custom workflow column like Coding (Ideas) → Ideas. -- Fix overlapping Record and Clear buttons in the Keyboard Shortcuts settings rows on desktop and mobile. -- Fix persistent mobile terminal inter-character spacing (5th recurrence root cause). -- Fix manual PR actions hidden when a task auto-merge override was on but global auto-merge was off. +### @fusion/desktop + +#### Patch Changes + +- @fusion/core@0.56.1 +- @fusion/dashboard@0.56.1 +- @fusion/engine@0.56.1 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.56.1 +- @fusion/pi-claude-cli@0.56.1 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.56.1 + +### @runfusion/fusion + +#### Patch Changes + +- ed823c7: summary: Fix Anthropic subscription showing "logged in" while all model calls fail. + category: fix + dev: Two-part fix. (1) OAuth token refresh in `packages/engine/src/auth-storage.ts` sent a `scope` param (defaulting to `user:profile`), which per RFC 6749 §6 re-issued the access token narrowed to that scope and stripped `user:inference` — so refreshed tokens 403'd on every model call. Refresh now omits `scope` (preserving the originally-granted scopes, matching pi-ai's own refresh), and `ANTHROPIC_DEFAULT_SCOPES` mirrors the full Claude Code scope set. (2) `/auth/status` now reports an unexpired Anthropic OAuth token that lacks an inference scope as not-connected (authenticated:false, expired:true so the re-login banner fires) with a scope-specific loginError, instead of falsely claiming a live session. Existing narrowed tokens need one re-login to obtain a fresh broad grant. +- dc44730: summary: Fix "Invalid transition" error when moving cards out of a custom workflow column like Coding (Ideas) → Ideas. + category: fix + dev: moveTaskInternal's compat-flag legacy path validated moves against the legacy VALID_TRANSITIONS table, which is keyed only by the built-in column ids; a task in a non-legacy workflow column (e.g. "ideas") had no key and every move was rejected. The legacy branch now resolves a non-legacy source column's targets from the task's own workflow adjacency (resolveAllowedColumns) while preserving the legacy bare-Error contract for legacy columns. +- b9d60b3: summary: Fix overlapping Record and Clear buttons in the Keyboard Shortcuts settings rows on desktop and mobile. + category: fix + dev: The shortcut-capture Record/Clear buttons no longer use the icon-only `btn-icon` class (which set `line-height:0` and a mobile 36px square, clipping/overlapping the text labels); they use a text-button class and the `.shortcut-capture` row locks buttons with `flex-shrink:0` so the input and controls never overlap, stacking cleanly on mobile. +- e347062: summary: Fix persistent mobile terminal inter-character spacing (5th recurrence root cause). + category: fix + dev: xterm's CharSizeService picks a Canvas-based (OffscreenCanvas) or DOM-based character-measurement strategy at terminal.open() time; DomRenderer's letter-spacing bake always measures via a separate DOM-based WidthCache, so a Canvas-vs-DOM measurement mismatch survived FN-7561/FN-7567's remeasure-ordering fixes. `withDomBasedTerminalCharacterMeasurement` in terminalPreferences.ts forces CharSizeService onto the same DOM strategy for both TerminalModal and SessionTerminal. +- f4f1656: summary: Fix manual PR actions hidden when a task auto-merge override was on but global auto-merge was off. + category: fix + dev: TaskDetailModal isManualPrFlow now keys off live global autoMergeEnabled, not the per-task effective override (regression from FN-7255). + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [ed823c7] +- Updated dependencies [dc44730] +- Updated dependencies [b9d60b3] +- Updated dependencies [e347062] +- Updated dependencies [f4f1656] + - @runfusion/fusion@0.56.1 ## 0.56.0 -### Highlights +### @fusion/dashboard -- Remove the eye icon markdown/plain toggle from chat; messages always render as Markdown. -- Expand first-run AI provider quick-start choices beyond Anthropic. -- Show Git prerequisite guidance during first-run GitHub onboarding. -- Add GitHub OAuth and CLI setup actions to first-run onboarding. -- Add configurable dashboard keyboard shortcuts for Quick Chat and Terminal. +#### Patch Changes -### New +- @fusion/core@0.56.0 +- @fusion/engine@0.56.0 +- @fusion/i18n@0.39.20 +- @fusion-plugin-examples/cli-printing-press@0.1.37 +- @fusion-plugin-examples/compound-engineering@0.1.20 +- @fusion-plugin-examples/dependency-graph@0.1.51 +- @fusion-plugin-examples/roadmap@0.1.39 +- @fusion-plugin-examples/cursor-runtime@0.1.39 +- @fusion-plugin-examples/droid-runtime@0.1.46 +- @fusion-plugin-examples/hermes-runtime@0.2.70 +- @fusion-plugin-examples/openclaw-runtime@0.2.70 +- @fusion-plugin-examples/paperclip-runtime@0.2.70 -- Expand first-run AI provider quick-start choices beyond Anthropic. -- Show Git prerequisite guidance during first-run GitHub onboarding. -- Add GitHub OAuth and CLI setup actions to first-run onboarding. -- Add configurable dashboard keyboard shortcuts for Quick Chat and Terminal. -- Add search in Settings so operators can find settings faster. -- Add a pinned below-application layout option for the dashboard terminal. -- Add a Reset Settings button to restore a menu's or all project settings to defaults. -- Add a per-workflow planner oversight level setting (Off, Observe, Steer, Autonomous recovery). -- Tasks can override the workflow planner oversight level (Off, Observe, Steer, Autonomous recovery). -- Planner oversight now defaults to full steering/control for every workflow unless explicitly changed. -- Planner oversight now monitors tasks across executor, reviewer, merger, pull-request, and workflow-gate stages. -- Planner oversight can autonomously inject guidance, retry stuck/failed steps, and request fixes within bounded limits. -- Planner oversight now requires confirmation before merge/PR actions and destructive/external side effects. -- Planner overseer now stays fully hands-off for paused tasks and auto-merge-off / human-review tasks. -- Configure planner oversight level per task and per project in the workflow editor and task create/detail. -- Add a configurable planner-overseer notification verbosity level (Silent/Errors/Important/All). -- Add a task-detail planner-overseer intervention timeline (stage, reason, action, outcome, attempts, links). -- Emit planner-overseer run-audit events for observations, steering, retries, recovery, confirmations, and escalations. -- Add an AI-undo fallback task when reverting a done task via git conflicts or is unsupported. -- Add a Revert action to Done/Archived task cards to undo landed changes. -- Capture a structured performance snapshot when an agent task completes. -- Task cards can now show the planner overseer's active state (idle/watching/steering/recovering/awaiting-confirmation). -- Support reverting multi-repo workspace tasks via git, all-or-nothing across sub-repos. -- Add per-sha revert commit granularity to the task revert API and service. -- Add a dedicated Keyboard Shortcuts settings section with click-to-record capture and more configurable actions. -- Open a revert PR for done/archived tasks when autoMerge is disabled instead of refusing. -- AI-undo tasks now default to a configurable, stricter review workflow. -- Plan auto-approval is now the default; specified tasks skip manual approval unless you opt into workflow/require-all. -- Fusion self-repo issue-close comments now show current and target release versions. -- Open one revert PR per sub-repo for workspace tasks when autoMerge is disabled. -- Add a Settings → General picker to choose the workflow used for AI-undo (revert) tasks. -- Add "Ask user question" and "Exit gate" workflow nodes for mid-flow chat reach-out and early exit. -- Add a built-in "Brainstorming" workflow that talks to you before planning. -- Add a "Coding (Ideas)" workflow with a manual Ideas intake and a merged Todo planner column. -- Add a workflow setting to disable automatic large-task triage splitting. -- Add before-to-after transformation summaries to generated task definitions. -- Show first-token and tool processing durations in task agent logs. -- Settings descriptions now show each setting's default value. -- Add an intelligent git-revert engine service and POST /api/tasks/:id/revert route. -- Original task prompt now renders as Markdown and is collapsed by default in the task Plan tab. -- Move the planner intervention timeline into the task Activity view dropdown. +### @fusion/desktop -### Fixed +#### Patch Changes -- Show active Plan Review progress on triage task cards. -- Clarify task-detail oversight Nudge/Explain controls: visible label, disabled reason, always-openable Explain panel. -- Unify border, radius, and height of the task-detail Priority/Execution/Oversight controls. -- Keep the task-detail Activity view menu open during mobile iOS taps. -- Fix Anthropic subscription login when pasted callback URLs contain fragment OAuth parameters. -- Fix Claude/Anthropic subscription re-login showing "Login did not complete" after logging out. -- Stop self-healing from killing actively-running tasks after ~30 minutes. -- Stop Windows Terminal version dialogs from popping up when opening the dashboard or Settings on Windows. -- Select newly created folders automatically during project setup. -- Prevent Desktop update banners from using 0.0.0 as the current version. -- Quit Fusion Desktop on Windows when the window is closed. -- Open desktop Anthropic Subscription OAuth logins in the system browser. -- Delay GitHub setup warnings for one day and add a dashboard connect action. -- Fix a false AI engine not running banner in desktop mode. -- Clarify the desktop Connection Manager add-remote flow. -- Restore Local Server in the desktop Switch server list. -- Make right-dock task list clicks respect the task popup setting. -- Auto-retry retryable Code Review remediation failures. -- Fix no-op task branch recovery after a previously landed task. -- Allow documented source-free task-artifact deliveries to finish without commits. -- Fix direct merges so Push to remote after merge honors the configured remote and branch. -- Keep task popups on the board layer with Activity menus above them. -- Keep accepted chat requests waiting instead of showing false first-event timeout failures. -- Show each task's original prompt in the Plan tab alongside the generated plan. -- Restore terminal Ctrl/Cmd copy and paste shortcuts. -- Fix mobile Chat composer being hidden behind the keyboard accessory bar. -- Auto-approve now reliably sends specified plans to the board without a manual approval stop. -- Fix the in-dashboard Switch server menu not switching desktop local/remote. -- Fix branch group completion checklists to show accurate landed/finished counts. -- Branch groups no longer report complete (or become promotable) when an unlanded member is archived. -- Fix the global GitLab integration setting not persisting when saved. -- Fix task-detail Activity view dropdown not opening reliably on mobile. -- Manual "Run now" for the Database Backup automation now runs in-process like the scheduler, matching cron behavior. -- Task cards no longer show the "Auto-recovery" oversight badge unless oversight is explicitly configured. -- Remove the per-card overseer-state ("Executor") badge from task cards. -- Fix agent-created artifacts not appearing live in the dashboard artifacts view. -- Fix the mobile terminal shortcut bar so it scrolls horizontally to reach every key. -- Planner-oversight intervention timeline now populates from real engine activity. -- Show the "Global" prefix on the Authentication entry in the mobile Settings picker. -- Tasks held for release authorization or Plan Review are now shown distinctly, so auto-approve no longer looks broken. -- Move mobile terminal controls into a bottom footer so they no longer crowd the header, with a scrollable shortcut bar. -- Stop the release-authorization gate from holding tasks that merely disclaim releasing. -- Fix mobile terminal text still rendering with excess inter-character gaps after font-load settle. -- Stop Plan Review from looping tasks forever and fix its "can't find the plan" reviews. -- Planner-overseer task badge now shows a readable label and explains what it is waiting on. -- Plan approve/reject API now blocks release-authorization holds, requiring the authorization marker first. -- Pin the mobile terminal close (X) button to the top-right corner so it is easy to find and tap. -- Fix mobile terminal excess character spacing that survived earlier font-remeasure fixes. -- Manual plan approval no longer re-asks you to approve a plan you already approved when it hasn't changed. -- Expired Claude subscription logins now show disconnected with a re-login prompt; tokens auto-refresh before expiry. -- Anthropic subscription reads now refresh the OAuth token automatically instead of silently failing when expired. -- Stop GitHub tracking-issue creation from linking new tasks to old/closed issues. -- Clarify the oversight "Nudge unavailable" guideline so it no longer reads as an overseer fault. -- New tasks created under the Coding (Ideas) workflow now land in the Ideas column and wait for you to promote them. -- Fix tasks vanishing from the board after being added to a workflow like Coding (Ideas). -- Move the Before → After transformation summary to the top of generated task definitions. -- Task-detail Priority dropdown now matches the Oversight dropdown's size, border, and typography. -- Default workflow boards now label the intake column "Planning" instead of "Triage". -- Fix the task-detail Nudge control staying disabled when the overseer is actively watching. -- Honor mission branchStrategy when triage omits branchAssignment; skip validation for inactive missions. -- Planner overseer no longer marks healthy in-progress tasks as "recovering" or steers them. +- @fusion/core@0.56.0 +- @fusion/dashboard@0.56.0 +- @fusion/engine@0.56.0 -### Breaking +### @fusion/engine -- Remove the eye icon markdown/plain toggle from chat; messages always render as Markdown. +#### Patch Changes -### Internal +- @fusion/core@0.56.0 +- @fusion/pi-claude-cli@0.56.0 -- Rename downloadable CLI release binaries to the fn-cli- base name. +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.56.0 + +### @runfusion/fusion + +#### Minor Changes + +- d16c8b4: summary: Expand first-run AI provider quick-start choices beyond Anthropic. + category: feature + dev: Moves advanced/all-provider onboarding controls under the quick-start provider section. +- 315f3bc: summary: Show Git prerequisite guidance during first-run GitHub onboarding. + category: feature + dev: Adds bounded server-host git availability to auth status and onboarding. +- 50cdab1: summary: Add GitHub OAuth and CLI setup actions to first-run onboarding. + category: feature + dev: GitHub onboarding now shows in-flow OAuth connect, gh auth login, and gh install guidance. +- 2f23d22: summary: Add configurable dashboard keyboard shortcuts for Quick Chat and Terminal. + category: feature + dev: Global dashboardKeyboardShortcuts settings, guarded document-level key handling, and Escape topmost-popup dismissal. +- efa8105: summary: Add search in Settings so operators can find settings faster. + category: feature + dev: Dashboard Settings filters visible sections by setting labels and keywords. +- 7d8a1b8: summary: Add a pinned below-application layout option for the dashboard terminal. + category: feature + dev: Terminal display mode now supports persisted docked, floating, and below layouts, with header controls replacing the footer shell. +- 87a700c: summary: Add a Reset Settings button to restore a menu's or all project settings to defaults. + category: feature + dev: New tested section→keys (scope-aware) registry (packages/dashboard/app/components/settings/section-keys.ts) drives per-menu reset via updateSettings/updateGlobalSettings with null-as-delete; non-blob sections (secrets, MCP, plugins, memory, auth, prompts, CLI agents, runtimes) are excluded with a documented reason. +- 68f5153: summary: Add a per-workflow planner oversight level setting (Off, Observe, Steer, Autonomous recovery). + category: feature + dev: New workflow setting `plannerOversightLevel` declared in BUILTIN_OVERSIGHT_SETTINGS; default `autonomous`. Per-task override and engine behavior land in follow-up tasks. +- aa757bc: summary: Tasks can override the workflow planner oversight level (Off, Observe, Steer, Autonomous recovery). + category: feature + dev: New nullable Task.plannerOversightLevel field (migration 137, SCHEMA_VERSION 137) mirroring executionMode; NULL inherits the workflow setting. Adds resolveEffectivePlannerOversightLevel precedence helper. Dashboard UI/API threading and engine behavior land in follow-up tasks. +- 0689250: summary: Planner oversight now defaults to full steering/control for every workflow unless explicitly changed. + category: feature + dev: Confirms the `plannerOversightLevel` workflow-setting default is the highest (autonomous) level; unset workflow value and unset per-task override both resolve to full steering via `resolveEffectivePlannerOversightLevel` (task override → workflow effective value → autonomous), adding dedicated regression coverage for the "unless explicitly disabled" precedence. +- 12a6d1b: summary: Planner oversight now monitors tasks across executor, reviewer, merger, pull-request, and workflow-gate stages. + category: feature + dev: Adds records-only PlannerOverseerMonitor + resolveWatchedStage + OverseerStageObservation in @fusion/engine, gated by resolveEffectivePlannerOversightLevel (off = no observation) and wired into ProjectEngine via a bounded poll. Steering/recovery and UI land in FN-7512/FN-7515+. +- 81f2053: summary: Planner oversight can autonomously inject guidance, retry stuck/failed steps, and request fixes within bounded limits. + category: feature + dev: Adds pure `decidePlannerRecovery` + recovery types (core) and `PlannerRecoveryController` with injected guidance/retry/targeted-fix handlers (engine), consuming the FN-7511 observation. Acts only at effective level `autonomous`, caps attempts per (task, stage) via `PLANNER_RECOVERY_MAX_ATTEMPTS`, skips user-paused tasks, and excludes merge/PR/destructive actions (deferred to FN-7513) and comprehensive human-control safeguards (FN-7514). +- 2cc84b5: summary: Planner oversight now requires confirmation before merge/PR actions and destructive/external side effects. + category: feature + dev: Adds `PlannerActionSideEffectClass` + `PlannerConfirmationRequest` and `classifyPlannerActionSideEffect`/`requiresPlannerConfirmation` (core), extends `decidePlannerRecovery` with an `await_confirmation` action, and adds `requestConfirmation`/`resolveConfirmation` gating to `PlannerRecoveryController` (engine). Merge/PR and destructive/external actions never execute without a recorded approval; bounded recovery (guidance/retry/targeted-fix) is unchanged. UX rendering, human-control safeguards, timeline, and run-audit land in follow-up tasks. +- 79ab367: summary: Planner overseer now stays fully hands-off for paused tasks and auto-merge-off / human-review tasks. + category: feature + dev: Adds the pure `evaluateOverseerHumanControl` policy (packages/engine/src/overseer-human-control-policy.ts), consulted at the top of `PlannerRecoveryController.tick()` before any action classification, confirmation gating, steering, retry, or dispatch — so a user-paused or `autoMerge:false`/human-review task never even records a pending confirmation. Reuses `allowsAutoMergeProcessing` from `@fusion/core` verbatim (never re-derives the auto-merge/human-review predicate). Distinguishes explicit user pause (`task.userPaused===true`, or `task.paused===true` with no `pausedReason`) from engine/self-healing parks (which always stamp a `pausedReason`). Emits a bounded `overseer:oversight-withheld-human-control` run-audit no-action event (metadata: `{ taskId, reason, stage, oversightLevel }`), deduped per (taskId, reason) so it does not spam every poll. +- c16cc9e: summary: Configure planner oversight level per task and per project in the workflow editor and task create/detail. + category: feature + dev: Per-task `plannerOversightLevel` override exposed via TaskForm (Inherit/off/observe/steer/autonomous), threaded through createTask/updateTask; workflow-editor Values tab gets a first-class display entry. Workflow-native setting; not a project setting. +- aae603b: summary: Add a configurable planner-overseer notification verbosity level (Silent/Errors/Important/All). + category: feature + dev: New workflow-native enum setting `plannerOversightNotificationLevel` in BUILTIN_OVERSIGHT_SETTINGS; default `important`. Resolves via resolveEffectiveSettings; emission gating that reads it lands in FN-7519/FN-7520. +- d10ea9a: summary: Add a task-detail planner-overseer intervention timeline (stage, reason, action, outcome, attempts, links). + category: feature + dev: New core `PlannerInterventionEntry` model + `recordPlannerIntervention`/`getPlannerInterventionTimeline` helpers persisting via the run-audit store under the `overseer:intervention` mutation, plus a `PlannerInterventionTimeline` component rendered in the task-detail Planner Oversight cluster. Emission call-sites land in FN-7520. +- bf68839: summary: Emit planner-overseer run-audit events for observations, steering, retries, recovery, confirmations, and escalations. + category: feature + dev: New core emitters (emitOverseerObservation/Steering/RecoveryAttempt/Retry/Confirmation/Escalation) in planner-overseer-events.ts, each mapping its decision-point to the correct intervention action/outcome and delegating to FN-7519's recordPlannerIntervention under the overseer:intervention mutation. Producer call-sites land in FN-7511/FN-7512/FN-7513. +- c4d81fe: summary: Add an AI-undo fallback task when reverting a done task via git conflicts or is unsupported. + category: feature + dev: `POST /api/tasks/:id/revert` now accepts `{ mode?: "git" | "ai" | "auto" }` (default `"auto"`). `"auto"` tries the FN-7523 git-revert path first and falls back to creating an AI-undo board task (`{ mode: "ai", createdTaskId, alreadyOpen? }`) on a conflicting or unsupported (e.g. workspace) git result; `needsHuman` (autoMerge-off) never triggers the fallback. `"ai"` always creates the AI-undo task; `"git"` keeps the FN-7523 git-only contract, which is otherwise unchanged. New engine exports: `createAiUndoTask`, `buildAiUndoTaskDescription`, `REVERT_OF_METADATA_KEY`. New core store method `TaskStore.findOpenRevertTaskForSource` backs the idempotency guard (an open undo task suppresses a duplicate; a closed one does not). +- e7cb2f1: summary: Add a Revert action to Done/Archived task cards to undo landed changes. + category: feature + dev: Wires onRevertTask through Board/List/Detail surfaces; calls POST /tasks/:id/revert in "auto" mode with a conflict-confirm AI-undo fallback (mode: "ai"). +- 5ad8ec8: summary: Capture a structured performance snapshot when an agent task completes. + category: feature + dev: New AgentReflectionService.captureTaskPerformance persists a non-LLM post-task ReflectionMetrics record (duration, packages/files touched, verification command + scope, retry/rework count) and emits ids/counts-only `reflection:captured` run-audit telemetry; populates performanceSummary/latestReflection. +- 726cbf8: summary: Task cards can now show the planner overseer's active state (idle/watching/steering/recovering/awaiting-confirmation). + category: feature + dev: Adds a serializable `PlannerOverseerRuntimeSnapshot` + pure `derivePlannerOverseerState` (core), a read-only `ProjectEngine.getPlannerOverseerRuntimeSnapshot(taskId)` accessor assembling it from the FN-7511 monitor + FN-7512/7513 recovery controller, and a best-effort additive `plannerOverseerState` enrichment on `GET /api/tasks` (mirrors the `branchProgress` pattern; never persisted, never fails the board load). Consumed by FN-7516's TaskCard. +- 2ed06f9: summary: Support reverting multi-repo workspace tasks via git, all-or-nothing across sub-repos. + category: feature + dev: Extends `packages/engine/src/task-revert.ts` with `resolveWorkspaceTaskRevertCommits`/`revertWorkspaceTask` and wires `POST /api/tasks/:id/revert` to dispatch workspace tasks (`isWorkspaceTask`) to the new path; returns `{ mode: "git", clean, workspace: { repos: [...] }, conflicts? }`. Single-repo `performTaskRevert` path is unchanged. +- 8c6f76c: summary: Add per-sha revert commit granularity to the task revert API and service. + category: feature + dev: `performTaskRevert` and `POST /api/tasks/:id/revert` accept an optional `granularity: "squash" | "per-sha"` (default `"squash"`, unchanged FN-7523 behavior). `"per-sha"` creates one attributed `revert(FN-xxxx)` commit per original sha (each with its own `Fusion-Task-Id` trailer and audit line), skipping no-op shas without empty commits. A mid-batch conflict in either mode rolls back the whole batch to the pre-call HEAD — no partially-landed per-sha commits. The clean result now reports `revertCommitShas: string[]` (all created commits) alongside the existing `revertCommitSha` (kept for backward compatibility). +- f992e6a: summary: Add a dedicated Keyboard Shortcuts settings section with click-to-record capture and more configurable actions. + category: feature + dev: Relocates dashboardKeyboardShortcuts into its own settings section, adds a ShortcutCaptureInput recorder, and extends DashboardShortcutAction with openFiles/openSettings/openCommandCenter/newTask actions wired into existing App nav handlers. +- 2df6c35: summary: Open a revert PR for done/archived tasks when autoMerge is disabled instead of refusing. + category: feature + dev: `POST /api/tasks/:id/revert` gains an additive `{ mode: "pr", clean: true, prUrl, prNumber, revertBranch, existingPr? }` result for clean single-repo reverts under `autoMerge:false`, reusing `GitHubClient.createPr`, `findPrForBranch` idempotency, and the `manual:true` PR handoff. New engine export `prepareRevertPrBranch` (packages/engine/src/task-revert.ts) prepares the dedicated `fusion/revert-` branch without ever mutating the base branch. Existing `{ mode: "git" | "ai", ... }` shapes and the `autoMerge:true` path are unchanged. +- 94e9d15: summary: AI-undo tasks now default to a configurable, stricter review workflow. + category: feature + dev: New project setting `aiUndoTaskWorkflowId` (default `builtin:review-heavy`) selects the workflow for AI-undo board tasks created by `POST /api/tasks/:id/revert` (`mode: "ai"`, the `auto` conflict fallback, and the workspace conflict fallback all share the `createAiUndoResult()` closure, so all three inherit this default). A blank/unset value means the created task inherits the project default workflow (pre-FN-7556 behavior). The route validates the configured id via `getWorkflowDefinition`/`isBuiltinWorkflowId` and falls back to inherit (with a logged warning) on a blank or unknown value, so a misconfigured id never breaks AI-undo task creation. The engine's `createAiUndoTask` helper stays pure — it only forwards a `workflowId` it is given, never resolves the setting itself. The Settings Modal UI field for this setting is a deliberate follow-up task; the value is settable today only via the settings API. +- 3dd227b: summary: Plan auto-approval is now the default; specified tasks skip manual approval unless you opt into workflow/require-all. + category: feature + dev: `DEFAULT_PROJECT_SETTINGS.planApprovalMode` flips `workflow` → `auto-approve-all`; existing projects with an explicit stored value are unchanged; consumed by `resolvePlanApprovalRequired` at the triage gating sites. +- 78d4db9: summary: Fusion self-repo issue-close comments now show current and target release versions. + category: feature + dev: GitHubIssueCommentService appends "Current version: v{current}" and "Target release: v{next-minor}" lines when the linked source issue is runfusion/fusion; other repos unchanged. Version resolved via getCliPackageVersion. +- 7435849: summary: Open one revert PR per sub-repo for workspace tasks when autoMerge is disabled. + category: feature + dev: `POST /api/tasks/:id/revert` gains an additive workspace `{ mode: "pr", clean: true, workspace: { repos: [{ repo, revertBranch, prUrl, prNumber, existingPr? }] } }` result for clean multi-repo reverts under `autoMerge:false`, extending FN-7554's single-repo `mode:"pr"` path. New engine export `prepareWorkspaceRevertPrBranches` (packages/engine/src/task-revert.ts) classifies every sub-repo first and only prepares a dedicated `fusion/revert-` branch per sub-repo when all are clean/already-reverted (all-or-nothing at the branch-prep phase), never force-writing any sub-repo integration branch. The route resolves owner/repo and checks the rate limiter for every sub-repo before pushing/creating any PR, so GitHub-unconfigured/rate-limited cases degrade the whole task to `needsHuman` rather than opening a partial subset of PRs. Existing `{ mode: "git" | "ai" | "pr", ... }` shapes, the `autoMerge:true` workspace path, and FN-7554's single-repo path are unchanged. +- 73b38ba: summary: Add a Settings → General picker to choose the workflow used for AI-undo (revert) tasks. + category: feature + dev: Surfaces `aiUndoTaskWorkflowId` (default `builtin:review-heavy`) in GeneralSection; empty selection means "inherit project default workflow", matching the revert route's blank-is-inherit behavior from FN-7556. +- 42bbe58: summary: Add "Ask user question" and "Exit gate" workflow nodes for mid-flow chat reach-out and early exit. + category: feature + dev: New IR node kinds `ask-user` (reuses await-input park/resume; surfaces the question in the task chat) and `exit-gate` (terminates the workflow early, optional condition). Editor palette + summaries + help updated; `prompt`+`awaitInput` remains a back-compat alias. +- 53fe0d7: summary: Add a built-in "Brainstorming" workflow that talks to you before planning. + category: feature + dev: Registers `builtin:brainstorming` (non-default, default-enabled) composing FN-7579's `ask-user` → refine → `exit-gate`-on-approval phase ahead of the normal coding plan/execute/review/merge spine. Parity suite (`builtin-workflows.test.ts`) extended for the new entry. +- ecbbb29: summary: Add a "Coding (Ideas)" workflow with a manual Ideas intake and a merged Todo planner column. + category: feature + dev: New `builtin:coding-ideas` clones the default stepwise pipeline with an `ideas` intake (autoTriage:false) in front of a merged `todo` planner+capacity column. createTask lands cards in the workflow's intake column; the triage service plans unplanned todo tasks in place; the scheduler skips bootstrap-prompt todo tasks; TaskCard gains a Start button and a Ready badge. + +#### Patch Changes + +- 8668a05: summary: Add a workflow setting to disable automatic large-task triage splitting. + category: feature + dev: Adds triageProactiveSubtaskSplittingEnabled while preserving explicit breakIntoSubtasks requests. +- 978cdda: summary: Show active Plan Review progress on triage task cards. + category: fix + dev: TaskCard now renders the existing progress affordance for Triage only when unified progress has active workflow work. +- 635fca2: summary: Remove the eye icon markdown/plain toggle from chat; messages always render as Markdown. + category: breaking + dev: Removed ChatView `chat-thread-header-render-toggle` (desktop + mobile), `showAllAsPlain` state, and `chat.showRenderedMarkdown`/`chat.showPlainText` i18n keys (FN-7541). +- 3d55102: summary: Clarify task-detail oversight Nudge/Explain controls: visible label, disabled reason, always-openable Explain panel. + category: fix + dev: TaskDetailModal now renders a `detail-oversight-controls-label` group label and `detail-overseer-nudge-disabled-reason` helper text (both gated by the existing oversight-cluster visibility condition); Explain no longer disables on `!canExplainOverseer` since it is read-only. Nudge's `canNudgeOverseer` gate and Stop's confirm dialog are unchanged. +- 0f1cd0a: summary: Unify border, radius, and height of the task-detail Priority/Execution/Oversight controls. + category: fix + dev: Adds a shared --detail-control-border-radius token alongside --detail-priority-control-min-height so .detail-priority-chip, .detail-execution-mode-toggle, .detail-oversight-chip, and .detail-oversight-menu-trigger all resolve the same border-width/color/radius/height. +- b42ba9f: summary: Keep the task-detail Activity view menu open during mobile iOS taps. + category: fix + dev: Guards the Activity views dropdown against iOS visualViewport resize/scroll echoes during menu opening. +- a7559b0: summary: Fix Anthropic subscription login when pasted callback URLs contain fragment OAuth parameters. + category: fix + dev: Normalizes pasted OAuth callback fragments before resolving dashboard manual-code login prompts. +- 4b530a6: summary: Fix Claude/Anthropic subscription re-login showing "Login did not complete" after logging out. + category: fix + dev: Anthropic subscription OAuth is aliased across the legacy `anthropic` row (where interactive login persists the credential) and the `anthropic-subscription` id (where the settings card's in-memory logged-out suppression and status read are keyed). Re-login wrote only `anthropic`, so `loggedOutProviders` kept suppressing `anthropic-subscription` and the card reported failure despite a valid stored credential until process restart. auth-storage's proxy now clears the logged-out state on both aliases when either is re-authenticated (new `login` trap + hardened `set` trap via `clearReauthenticatedLogoutState`; raw api_key writes stay scoped to their own card). Also surfaces background OAuth login failures on `GET /auth/status` (`loginError`) + server logs so future paste-callback failures are diagnosable instead of a generic error. +- a5ac3c3: summary: Stop self-healing from killing actively-running tasks after ~30 minutes. + category: fix + dev: FN-7566. isPhantomExecutorBinding's liveness gate (heartbeat/checkout/runAudit) was blind to ephemeral executor agents, leaving only the age>graceMs\*3 threshold, so any ephemeral-executor task running longer than ~30 min was reclaimed to `todo` mid-flight. Adds the in-process live-session veto (activeSessionRegistry path / executingTaskLock / isTaskActive), mirroring the isWorkspaceTaskLive/sessionDead predicate, and honors clearPhantomExecutorBinding's live-session refusal in reclaimSelfOwnedBranchConflicts. +- 8912399: summary: Stop Windows Terminal version dialogs from popping up when opening the dashboard or Settings on Windows. + category: fix + dev: Root cause was the worktrunk integration, not the embedded terminal: worktrunk's CLI is named `wt`, which collides with Windows Terminal (`wt.exe`) on PATH, so probing it with `wt --version` launched Windows Terminal. Fixed by (1) `useWorktrunkInstallStatus` only auto-fetching `/api/worktrunk/status` when the integration is enabled (user opt-in) instead of on every Settings/dashboard mount, and (2) an engine-level guard in `probeWorktrunk` that refuses to exec a resolved `wt` that is the Windows Terminal alias (under `WindowsApps` / a `WindowsTerminal` package dir), covering all resolution surfaces. +- b800f7d: summary: Select newly created folders automatically during project setup. + category: fix + dev: Adds DirectoryPicker opt-in selection for project-registration surfaces while preserving default picker behavior. +- 9dc248e: summary: Prevent Desktop update banners from using 0.0.0 as the current version. + category: fix + dev: Dashboard update checks now resolve packaged @fusion/desktop metadata and fail closed for unresolved versions. +- 52dbc0e: summary: Quit Fusion Desktop on Windows when the window is closed. + category: fix + dev: Updates Electron close lifecycle so Windows shutdown reaches embedded runtime cleanup. +- ced783e: summary: Open desktop Anthropic Subscription OAuth logins in the system browser. + category: fix + dev: Adds Electron window-open policy coverage and preserves Settings auth polling completion paths. +- 50786f2: summary: Delay GitHub setup warnings for one day and add a dashboard connect action. + category: fix + dev: Dashboard setup warnings now gate GitHub prompts per project and route the CTA to Settings → Authentication. +- b4b1f6d: summary: Fix a false AI engine not running banner in desktop mode. + category: fix + dev: Distinguishes transient embedded desktop engine startup from true dashboard-only mode. +- e8b7362: summary: Clarify the desktop Connection Manager add-remote flow. + category: fix + dev: Desktop Connection Manager now separates Local Server context from saved remote profiles and collapses the remote editor until add/edit. +- 0900a38: summary: Restore Local Server in the desktop Switch server list. + category: fix + dev: Desktop Connection Manager now lists local and saved remote destinations together. +- a2b09f2: summary: Make right-dock task list clicks respect the task popup setting. + category: fix + dev: Threads openMobileTasksInPopup through the right-dock Tasks list route while preserving embedded dock detail when disabled. +- 0f05156: summary: Auto-retry retryable Code Review remediation failures. + category: fix + dev: Prevents retryable code-review-remediation graph failures from stranding tasks in in-review. +- 20184ac: summary: Fix no-op task branch recovery after a previously landed task. + category: fix + dev: Merge/recovery ownership classification now checks no-diff branches before foreign trailer rejection. +- 82493e0: summary: Allow documented source-free task-artifact deliveries to finish without commits. + category: fix + dev: fn_task_done now recognizes explicit gitignored .fusion/tasks artifact contracts while preserving source-change no-commit guards. +- 5689346: summary: Fix direct merges so Push to remote after merge honors the configured remote and branch. + category: fix + dev: Resolves remote-only push targets from the merge integration branch and preserves non-fatal push errors on done tasks. +- b42be87: summary: Keep task popups on the board layer with Activity menus above them. + category: fix + dev: Task-detail FloatingWindow callers use a lower layer band, and Activity view menus reposition after popup geometry changes. +- 61c8bdc: summary: Keep accepted chat requests waiting instead of showing false first-event timeout failures. + category: fix + dev: Dashboard chat POST streams no longer abort accepted-but-silent responses on the client first-event timer. +- e8dc2ae: summary: Show each task's original prompt in the Plan tab alongside the generated plan. + category: fix + dev: Adds a read-only Task Detail original-prompt section backed by task.description. +- d2e3134: summary: Add before-to-after transformation summaries to generated task definitions. + category: feature + dev: Built-in standard and fast triage prompts now require a `## Before → After Transformation` section. +- b0208c1: summary: Restore terminal Ctrl/Cmd copy and paste shortcuts. + category: fix + dev: Integrated and embedded terminals now own physical clipboard paste to avoid swallowed or duplicate input. +- 2797803: summary: Show first-token and tool processing durations in task agent logs. + category: feature + dev: Adds optional agent-log timing fields `timeToFirstTokenMs` and `durationMs`. +- a2d6349: summary: Fix mobile Chat composer being hidden behind the keyboard accessory bar. + category: fix + dev: Adds keyboard-open bottom clearance in ChatView so the composer clears the iOS input-assistant/autofill bar without a persistent .chat-thread transform or Android reserved-gap. +- 4baa4c4: summary: Settings descriptions now show each setting's default value. + category: feature + dev: Appended default-value copy to settings.\* i18n descriptions across Global, Runtimes, and Project Settings sections, sourced from DEFAULT_GLOBAL_SETTINGS/DEFAULT_PROJECT_SETTINGS in settings-schema.ts; added settings-default-descriptions.test.tsx guarding that every surfaced setting states a default (or explicit "inherits"/"no default \u2014 unset") and that every DEFAULT_SETTINGS key is documented or allowlisted as not surfaced. +- 53d7b7e: summary: Add an intelligent git-revert engine service and POST /api/tasks/:id/revert route. + category: feature + dev: New `packages/engine/src/task-revert.ts` exports `resolveTaskRevertCommits`, `classifyTaskRevert`, and `performTaskRevert` (squash/rebase/lineage attribution precedence, dry-run classification, guaranteed-clean rollback). Route enforces done/archived-only and autoMerge-off guard rails; conflicting results are returned unresolved for sibling FN-7524 (AI-undo) to act on. Workspace tasks return `unsupported`. +- 4707eb5: summary: Auto-approve now reliably sends specified plans to the board without a manual approval stop. + category: fix + dev: FN-7526 — investigated the reported "plans still park at awaiting-approval when auto-approve is on" symptom; resolvePlanApprovalRequired, mergeEffectiveSettings/applyWorkflowSettingsOverlay, and every finalizeApprovedTask call site (specifyTask, recoverApprovedTask, retryUnavailablePlanReview, tryFinalizeExplicitDuplicateMarker) already honored project planApprovalMode: "auto-approve-all" over a stored workflow requirePlanApproval value — no production defect reproduced. Added end-to-end regression coverage across every enumerated surface (Plan Review reviewer-outage retry, refinement routing, self-healing starved-refinement recovery) using the real mergeEffectiveSettings pipeline instead of isolated bare-settings unit calls, plus explicit assertions that the independent release-authorization and Workflow Plan Review gates remain intact under auto-approve-all, so a future bare-settings call site is caught immediately instead of silently reintroducing the reported behavior. +- 3b52a4d: summary: Fix the in-dashboard Switch server menu not switching desktop local/remote. + category: fix + dev: The desktop shell's redirect effects in App.tsx read a dead `localServer` field that the preload never populates; extracted `resolveDesktopShellRedirectTarget` in appLifecycle.ts now derives the navigation target from the live `localRuntime`/`activeProfileId` state for both directions, and the unused `localServer` field was removed from `ShellConnectionState`. +- 36bd74e: summary: Fix branch group completion checklists to show accurate landed/finished counts. + category: fix + dev: runAiMerge (the sole merge path since master-plan U0) never resolved branch-group routing or stamped mergeDetails.mergeTargetBranch/mergeTargetSource, so isBranchGroupMemberLanded permanently reported shared-group members as not landed. Routes through resolveBranchGroupMergeRouting (matching the legacy merger.ts pattern) and stamps the target fields on both the landed and no-op finalize paths; preserves merge-target-safety in isBranchGroupMemberLanded (a sibling/mismatched-branch member still never counts as landed). +- df0be88: summary: Branch groups no longer report complete (or become promotable) when an unlanded member is archived. + category: fix + dev: listTasksByBranchGroup membership now scans with includeArchived:true so an archived-but-unlanded member stays counted in total instead of silently dropping out; mergeDetails is now persisted on ArchivedTaskEntry so an archived member that had already landed keeps counting as landed. evaluateBranchGroupCompletion / promoteBranchGroup gate correctly; merge-target-safety in isBranchGroupMemberLanded is unchanged. +- ec9ac61: summary: Fix the global GitLab integration setting not persisting when saved. + category: fix + dev: splitSettingsSave now diffs the five global GitLab keys (gitlabEnabled, gitlabInstanceUrl, gitlabApiBaseUrl, gitlabAuthToken, gitlabAuthTokenType) against scoped global initials only, never the project-effective merged initialValues, so a project override no longer suppresses a real global save. +- 8d36b99: summary: Fix task-detail Activity view dropdown not opening reliably on mobile. + category: fix + dev: Guards the Activity menu's window resize/orientationchange/scroll close-listener with the same opening-tap timing guard already used for visualViewport, and exempts scroll events originating in the `.detail-tabs` scroller, so a same-gesture mobile tap echo (Android/iOS, fixed modal or `.floating-window--task-detail` popup) no longer closes the menu the instant it opens. +- ad744aa: summary: Manual "Run now" for the Database Backup automation now runs in-process like the scheduler, matching cron behavior. + category: fix + dev: The legacy single-command and command-step manual automation run path (`executeSingleCommand` in packages/dashboard/src/routes.ts) now intercepts `isInProcessBackupCommand`/`isInProcessMemoryBackupCommand` via the scoped TaskStore, mirroring `RoutineRunner.executeCommand`/`CronRunner`, instead of always shelling out via `exec()`. `formatInProcessBackupError`, `isInProcessBackupCommand`, and `isInProcessMemoryBackupCommand` are now exported from `@fusion/engine` for reuse. Existing onStep/onText live-run callbacks already stream incremental output for command/backup runs; added regression coverage confirming this holds for the new interception branch. +- 5c3d58a: summary: Task cards no longer show the "Auto-recovery" oversight badge unless oversight is explicitly configured. + category: fix + dev: `TaskCard.tsx`'s `showOversightBadge` gate now also suppresses the badge when the effective level equals `DEFAULT_PLANNER_OVERSIGHT_LEVEL` ("autonomous") and there is no explicit per-task `plannerOversightLevel` override; an explicit per-task override of "autonomous" still renders the badge. +- b4be515: summary: Remove the per-card overseer-state ("Executor") badge from task cards. + category: fix + dev: Deleted the FN-7516 `card-overseer-state-badge` render, its card-local `deriveOverseerCardWatchedStage` helper/label maps, and its CSS; the sibling oversight-level badge (`card-oversight-badge`) is unaffected. +- 62ddb19: summary: Original task prompt now renders as Markdown and is collapsed by default in the task Plan tab. + category: feature + dev: Task Detail Plan/Definition tab original-prompt section reuses the existing `.detail-source-toggle`/`.detail-source-chevron--expanded` collapse pattern and the shared `ReactMarkdown` pipeline (`remarkGfm`, `sharedRehypePlugins`, `markdownLinkifyComponents`); backed by read-only `task.description`, no change to the generated `PROMPT.md` editor/revision flow. +- 883c73e: summary: Fix agent-created artifacts not appearing live in the dashboard artifacts view. + category: fix + dev: Root cause was cross-instance artifact-registration replication, not the route/hook/render path (all already correct). `TaskStore.registerArtifact()` never bumped `lastModified`, and `checkForChanges()` (the polling replicator that lets a second TaskStore instance on the same project — e.g. the dashboard's cached store vs. the engine's own store — mirror events it did not write itself) only ever diffed the `tasks` table, never `artifacts`. A store instance that did not perform the write could therefore never observe or re-emit `artifact:registered`, leaving an already-open Documents/task Artifacts gallery stale until a full reload. Fixed by bumping `lastModified` on artifact writes and adding a strictly-increasing `rowid`-cursor poll over the `artifacts` table in `checkForChanges()`. See `packages/core/src/__tests__/artifacts.test.ts` and `packages/dashboard/src/routes/__tests__/artifacts-route-integration.test.ts` for regression coverage. +- d09b57f: summary: Fix the mobile terminal shortcut bar so it scrolls horizontally to reach every key. + category: fix + dev: Added `min-width: 0` to `.terminal-shortcut-panel` to defeat the flex min-width:auto trap that clipped overflow instead of engaging `overflow-x: auto`. +- 3d58260: summary: Planner-oversight intervention timeline now populates from real engine activity. + category: fix + dev: Wires PlannerOverseerMonitor/PlannerRecoveryController decision points to the FN-7520 emitOverseer\* façade with the real TaskStore; observation/escalation emission deduped per (task, stage[, signal]). +- 052a277: summary: Show the "Global" prefix on the Authentication entry in the mobile Settings picker. + category: fix + dev: resolveSettingsSectionOptionLabel now derives the Global-group prefix for storage-less (scope: undefined) sections in SettingsModal.tsx (FN-7552). +- 6e4c207: summary: Tasks held for release authorization or Plan Review are now shown distinctly, so auto-approve no longer looks broken. + category: fix + dev: FN-7559 — auto-approve-all bypasses only the manual plan-approval gate (unchanged, FN-7526). Release-authorization holds are surfaced with a new distinct status reason (`Task.awaitingApprovalReason: "release-authorization"`) and no longer render the generic manual Approve/Reject affordance in TaskCard/TaskDetailModal; Workflow Plan Review already used distinct statuses (`needs-replan`/`plan-review-unavailable`) and is unaffected. Both gates remain independent and intact — this is UI/data disambiguation only. +- 6d364fc: summary: Move mobile terminal controls into a bottom footer so they no longer crowd the header, with a scrollable shortcut bar. + category: fix + dev: On the ≤768px terminal, the `.terminal-actions` cluster now renders in a `terminal-footer-actions` bar (with `min-width:0; overflow-x:auto`) instead of the header; desktop/floating/pinned-below keep the FN-7502 header layout. Preserves the FN-7550 shortcut-panel scroll fix. +- b471aec: summary: Stop the release-authorization gate from holding tasks that merely disclaim releasing. + category: fix + dev: classifyReleaseTask now strips negated release-disclaimer clauses (e.g. "this task performs no release/publish; releases are owned by scripts/release.mjs") before signal matching in packages/engine/src/triage-release-authorization.ts, so revert/undo/UI specs are no longer false-flagged as release-class. Genuine "run pnpm release"/"publish @runfusion/fusion" intent still trips the gate. +- 9d4a45b: summary: Fix mobile terminal text still rendering with excess inter-character gaps after font-load settle. + category: fix + dev: Root cause: xterm's OptionsService setter is a no-op when reassigning an already-current fontFamily/fontSize, so post-settle reapply never forced CharSizeService/DomRenderer to remeasure. Added `forceTerminalFontRemeasure()` in `terminalPreferences.ts`, used by both `TerminalModal.tsx` and `SessionTerminal.tsx` at every post-`waitForTerminalFontMetrics()` settle site. +- 72b77bf: summary: Stop Plan Review from looping tasks forever and fix its "can't find the plan" reviews. + category: fix + dev: FN-7561 — Plan Review pre-merge gate hardening in packages/engine/src/executor.ts. (1) The reviewer ran readonly with cwd=worktree but the spec lives at project-root .fusion/tasks//PROMPT.md, so "Read PROMPT.md" produced "no PROMPT.md found / data is in a DB" non-verdicts; the spec text is now injected into the reviewer prompt via readTaskArtifact. (2) A malformed reviewer response now self-retries once on the primary model when no fallback is configured. (3) A malformed (advisory_failure, no verdict) plan-review result can never trigger a triage replan. (4) The unbounded plan-review replan default is capped at 15 attempts with a loud halting log entry, so a persistently-disagreeing planner/reviewer no longer burns LLM calls indefinitely (FN-7525 ran 13+ attempts overnight). +- c08498e: summary: Planner-overseer task badge now shows a readable label and explains what it is waiting on. + category: fix + dev: TaskCard badge renders plannerOverseerStateLabel + plannerOverseerBadgeTooltip built from the existing PlannerOverseerRuntimeSnapshot (reason/watchedStage/signal/pendingConfirmation); presentation-only, no engine changes. +- 24b27e8: summary: Plan approve/reject API now blocks release-authorization holds, requiring the authorization marker first. + category: fix + dev: FN-7564 — POST /tasks/:id/approve-plan and /reject-plan now return 400 when task.awaitingApprovalReason === "release-authorization" (FN-7559 discriminator), enforcing the FN-6481 release-authorization gate at the API layer regardless of client. Manual-approval holds are unaffected. +- fb45157: summary: Pin the mobile terminal close (X) button to the top-right corner so it is easy to find and tap. + category: fix + dev: On the ≤768px terminal, the `terminal-close` button now carries a `terminal-close--corner` class (order:3 + margin-inline-start:auto) so it renders last in flex order and hugs the right edge next to the tab dropdown, instead of falling back to order:0 (far left). Desktop/floating/pinned-below placement inside `.terminal-actions` is unchanged. +- 7c0be53: summary: Fix mobile terminal excess character spacing that survived earlier font-remeasure fixes. + category: fix + dev: `TerminalModal`/`SessionTerminal` re-bake xterm's `DomRenderer` letter-spacing compensation AFTER `fitAddon.fit()` settles the post-fit column count (not just before it), since `handleResize()` never re-bakes spacing itself. See `docs/solutions/ui-bugs/xterm-options-noop-remeasure-after-font-settle.md` recurrence #4. +- 71dfd3a: summary: Rename downloadable CLI release binaries to the fn-cli- base name. + category: internal + dev: `binaryNameForTarget` in `packages/cli/build.ts` and the `release.yml` / `test-release.yml` matrices now emit `fn-cli-`; the local dev binary stays `fn`/`fn.exe`. +- 9592e3a: summary: Manual plan approval no longer re-asks you to approve a plan you already approved when it hasn't changed. + category: fix + dev: FN-7569 — approving a plan records a fingerprint of the approved PROMPT.md (new nullable Task.approvedPlanFingerprint, migration 139). The manual plan-approval gate skips re-parking at awaiting-approval when a re-specification (replan, plan-review retry, self-healing rebound) produces the same plan; a changed plan or reject-plan still requires fresh approval. Release authorization, Workflow Plan Review, and auto-approve-all are unchanged. +- c31f9ef: summary: Move the planner intervention timeline into the task Activity view dropdown. + category: feature + dev: Removes the inline `PlannerInterventionTimeline` mount from the FN-7517 oversight cluster in `TaskDetailModal.tsx` and adds a fourth `interventions` `ActivitySegment`, shown in the Activity dropdown only when planner oversight is active for the task; falls back to Live if oversight turns off while Interventions is selected. +- ce9df29: summary: Expired Claude subscription logins now show disconnected with a re-login prompt; tokens auto-refresh before expiry. + category: fix + dev: Unifies OAuth expiry detection between OAuthExpiryMonitor and /api/auth/status, and adds an engine-side proactive OAuth refresh scheduler wired in project-engine (guarded by skipNotifier). No token material logged. +- 196abb5: summary: Anthropic subscription reads now refresh the OAuth token automatically instead of silently failing when expired. + category: fix + dev: mergeAuthStorageReads getApiKey("anthropic-subscription") now delegates to the underlying engine authStorage.getApiKey (the only refresh-token HTTP round trip) instead of a local static expiry check; regression tests drive the wrapper directly. No token material logged. +- 45e5a26: summary: Stop GitHub tracking-issue creation from linking new tasks to old/closed issues. + category: fix + dev: github-tracking dedup now only reuses OPEN issues and requires a File-Scope path overlap (keyword-only matches no longer link). Prevents mis-linking a fresh task to a stale/resolved tracking issue (FN-7579). Setting `githubTrackingDedupEnabled` unchanged. +- a1a6b09: summary: Clarify the oversight "Nudge unavailable" guideline so it no longer reads as an overseer fault. + category: fix + dev: TaskDetailModal oversight controls — reworded taskDetail.oversight.nudgeDisabledTitle and added taskDetail.oversight.nudgeSuppressedTitle to differentiate periodic-observation vs. manual-control states. No enablement/engine logic changed. +- cf3fe8b: summary: New tasks created under the Coding (Ideas) workflow now land in the Ideas column and wait for you to promote them. + category: fix + dev: Dashboard create surfaces (InlineCreateCard, QuickEntryBox, NewTaskModal, insight/todo → task) no longer hard-code column:"triage"; the store now resolves the selected/default workflow's intake column. InlineCreateCard forwards workflowId at create time instead of applying it post-create. Also fixed a glue-layer regression in `useTaskHandlers.ts` (`handleBoardQuickCreate`/`handleModalCreate`) that re-forced column:"triage" even after the UI surfaces stopped sending it. +- 8b4e522: summary: Fix tasks vanishing from the board after being added to a workflow like Coding (Ideas). + category: fix + dev: Board.tsx forces a board-workflows refetch (deferred one tick, signature-guarded) whenever a rendered task is missing from the taskWorkflowIds map, so its real workflow and intake column resolve regardless of which create surface added it; the single-workflow grouping also re-homes a task whose column its workflow no longer declares into the intake lane instead of dropping it. Fixes the FN-7591 regression where intake-column cards (column "ideas") fell back to the default workflow, which has no such column, and were filtered out until a manual reload. +- f30d55f: summary: Move the Before → After transformation summary to the top of generated task definitions. + category: fix + dev: Reorders the standard and fast triage `PROMPT.md` templates in packages/core/src/agent-prompts.ts so `## Before → After Transformation` is the first content section, ahead of `## Review Level` and `## Mission`, matching FN-7499's glance-verification intent. +- 20379e8: summary: Task-detail Priority dropdown now matches the Oversight dropdown's size, border, and typography. + category: fix + dev: Removed the Priority-only forced select/option uppercase, added a neutral chip background scoped to `.detail-priority-chip.card-priority-badge--normal` for the untinted `normal` level, and reused the FN-7585 shared `--btn-border-width`/`--border`/`--detail-control-border-radius`/`--detail-priority-control-min-height` tokens so both dropdowns render as one control style across desktop and the mobile oversight-overflow surface. +- e0f3d3d: summary: Default workflow boards now label the intake column "Planning" instead of "Triage". + category: fix + dev: Renamed the `name` of the `id: "triage"` intake column to "Planning" in builtin-coding, builtin-stepwise-coding, and builtin-pr workflow IRs (column id unchanged; linear built-ins inherit via canonicalBuiltinWorkflowColumns). COLUMN_LABELS.triage was already "Planning". +- 5b193d2: summary: Fix the task-detail Nudge control staying disabled when the overseer is actively watching. + category: fix + dev: GET /api/tasks/:id now attaches the transient plannerOverseerState snapshot (mirrors the list route); TaskDetailModal reads the snapshot from workingTask so detail refetches no longer drop it. +- 546ef16: summary: Honor mission branchStrategy when triage omits branchAssignment; skip validation for inactive missions. + category: fix + dev: resolveBranchAssignmentContext returns undefined for absent mode so triage falls back to mission.branchStrategy; processTaskOutcome gates on mission.status === "active" like recoverActiveMissions. +- b173f76: summary: Planner overseer no longer marks healthy in-progress tasks as "recovering" or steers them. + category: fix + dev: `decidePlannerRecovery` now returns `none` for healthy (`progressing`/`complete`) and `awaiting-human` executor/workflow-gate signals instead of falling through to `inject_guidance`; only `stuck`/`blocked`/`failed` trigger autonomous steering. Also dedupes the `PlannerOverseerMonitor` activity-feed heartbeat so an unchanged `(stage, signal, reason)` observation is logged once per change, not every poll tick. Fixes the "overseer recovering" badge appearing on every autonomous card and the needless AI-consuming guidance injections (FN-7577). + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [8668a05] +- Updated dependencies [978cdda] +- Updated dependencies [635fca2] +- Updated dependencies [3d55102] +- Updated dependencies [0f1cd0a] +- Updated dependencies [b42ba9f] +- Updated dependencies [a7559b0] +- Updated dependencies [4b530a6] +- Updated dependencies [a5ac3c3] +- Updated dependencies [8912399] +- Updated dependencies [d16c8b4] +- Updated dependencies [b800f7d] +- Updated dependencies [315f3bc] +- Updated dependencies [9dc248e] +- Updated dependencies [52dbc0e] +- Updated dependencies [ced783e] +- Updated dependencies [50cdab1] +- Updated dependencies [50786f2] +- Updated dependencies [b4b1f6d] +- Updated dependencies [e8b7362] +- Updated dependencies [0900a38] +- Updated dependencies [a2b09f2] +- Updated dependencies [0f05156] +- Updated dependencies [20184ac] +- Updated dependencies [82493e0] +- Updated dependencies [5689346] +- Updated dependencies [b42be87] +- Updated dependencies [2f23d22] +- Updated dependencies [efa8105] +- Updated dependencies [61c8bdc] +- Updated dependencies [e8dc2ae] +- Updated dependencies [d2e3134] +- Updated dependencies [b0208c1] +- Updated dependencies [7d8a1b8] +- Updated dependencies [2797803] +- Updated dependencies [a2d6349] +- Updated dependencies [4baa4c4] +- Updated dependencies [87a700c] +- Updated dependencies [68f5153] +- Updated dependencies [aa757bc] +- Updated dependencies [0689250] +- Updated dependencies [12a6d1b] +- Updated dependencies [81f2053] +- Updated dependencies [2cc84b5] +- Updated dependencies [79ab367] +- Updated dependencies [c16cc9e] +- Updated dependencies [aae603b] +- Updated dependencies [d10ea9a] +- Updated dependencies [bf68839] +- Updated dependencies [53d7b7e] +- Updated dependencies [c4d81fe] +- Updated dependencies [e7cb2f1] +- Updated dependencies [4707eb5] +- Updated dependencies [3b52a4d] +- Updated dependencies [5ad8ec8] +- Updated dependencies [726cbf8] +- Updated dependencies [36bd74e] +- Updated dependencies [df0be88] +- Updated dependencies [ec9ac61] +- Updated dependencies [8d36b99] +- Updated dependencies [ad744aa] +- Updated dependencies [5c3d58a] +- Updated dependencies [b4be515] +- Updated dependencies [62ddb19] +- Updated dependencies [883c73e] +- Updated dependencies [2ed06f9] +- Updated dependencies [8c6f76c] +- Updated dependencies [d09b57f] +- Updated dependencies [3d58260] +- Updated dependencies [052a277] +- Updated dependencies [f992e6a] +- Updated dependencies [2df6c35] +- Updated dependencies [94e9d15] +- Updated dependencies [3dd227b] +- Updated dependencies [6e4c207] +- Updated dependencies [6d364fc] +- Updated dependencies [b471aec] +- Updated dependencies [9d4a45b] +- Updated dependencies [72b77bf] +- Updated dependencies [c08498e] +- Updated dependencies [24b27e8] +- Updated dependencies [fb45157] +- Updated dependencies [7c0be53] +- Updated dependencies [71dfd3a] +- Updated dependencies [9592e3a] +- Updated dependencies [c31f9ef] +- Updated dependencies [ce9df29] +- Updated dependencies [78d4db9] +- Updated dependencies [196abb5] +- Updated dependencies [7435849] +- Updated dependencies [73b38ba] +- Updated dependencies [42bbe58] +- Updated dependencies [45e5a26] +- Updated dependencies [a1a6b09] +- Updated dependencies [53fe0d7] +- Updated dependencies [cf3fe8b] +- Updated dependencies [8b4e522] +- Updated dependencies [f30d55f] +- Updated dependencies [20379e8] +- Updated dependencies [e0f3d3d] +- Updated dependencies [5b193d2] +- Updated dependencies [ecbbb29] +- Updated dependencies [546ef16] +- Updated dependencies [b173f76] + - @runfusion/fusion@0.56.0 ## 0.55.0 -### Highlights +### @fusion/dashboard -- Allow configuring permissions for ephemeral and permanent agents. -- Add GitLab instance URL settings for GitLab.com and self-managed servers. -- Add GitLab access-token settings for personal, project, and group tokens. -- Add GitLab project issue, group issue, and merge request imports. -- Add GitLab comment and auto-close lifecycle actions for linked work items. +#### Patch Changes -### New +- @fusion/core@0.55.0 +- @fusion/engine@0.55.0 +- @fusion/i18n@0.39.19 +- @fusion-plugin-examples/cli-printing-press@0.1.36 +- @fusion-plugin-examples/compound-engineering@0.1.19 +- @fusion-plugin-examples/dependency-graph@0.1.50 +- @fusion-plugin-examples/roadmap@0.1.38 +- @fusion-plugin-examples/cursor-runtime@0.1.38 +- @fusion-plugin-examples/droid-runtime@0.1.45 +- @fusion-plugin-examples/hermes-runtime@0.2.69 +- @fusion-plugin-examples/openclaw-runtime@0.2.69 +- @fusion-plugin-examples/paperclip-runtime@0.2.69 -- Allow configuring permissions for ephemeral and permanent agents. -- Add GitLab instance URL settings for GitLab.com and self-managed servers. -- Add GitLab access-token settings for personal, project, and group tokens. -- Add GitLab project issue, group issue, and merge request imports. -- Add GitLab comment and auto-close lifecycle actions for linked work items. -- Add GitLab as a Command Center Signals connector. -- Add explicit onboarding choices to use, initialize, or clone a git repository. -- Let chat update existing agents without delete/recreate. -- Add a bundled Linear import plugin for creating tasks from Linear issues. -- Add a mandatory Planning Mode deepening checkpoint before final summaries. -- Add visible create buttons and recursive search to Project Files. -- Add a GitLab enable toggle and collapsible Settings controls. -- Add a Settings override for the local Cursor CLI binary path. -- Display linked GitLab tracking metadata and stale badges on tasks. -- Add sidebar rename buttons to direct Chat conversations. -- Collapse mobile Chat thread controls into one compact header row. +### @fusion/desktop -### Fixed +#### Patch Changes -- Stop recurring Windows Terminal warning popups during terminal startup. -- Fix dashboard localStorage quota exhaustion from stale SWR caches and add a Clear local data escape hatch. -- Fix `fusion desktop` on Windows and published npm installs (Electron dependency, GPU/sandbox flags, dashboard reuse). -- First-run agent setup no longer errors on a duplicate CEO; desktop Switch-server button now opens the connection menu. -- Allow operators to delete archived tasks. -- Show workflow template block boundary connectors in the graph editor. -- Preserve the selected dashboard project across browser refreshes. -- Detect Cursor CLI installations that expose Windows cmd or bat shims. -- Preserve GitLab tracking metadata for CLI and extension imports. -- Keep Planning Mode Refine Further from getting stuck on duplicate generation. -- Show task status badges on Documents task groups. -- Suppress misleading Anthropic Subscription re-login banners when another Anthropic auth method is active. -- Keep Anthropic authentication cards grouped near the top in Settings. -- Stop planner model fallback loops with a clear terminal triage error. -- Recover stale task branch-group references from Task Detail after server restarts. -- Return GitHub issue import actions to the main issue list. -- Prevent Planning Mode sessions from failing when MCP resolution returns no shaped result. -- Fix Android mobile terminal spacing while the keyboard is open. -- Fix Last 30 days token usage to include every model in Command Center. -- Include supported chat interactions in Command Center token usage totals. -- Preserve workflow setting edits made while a values save is still in flight. -- Preserve migrated workflow settings when project identity is assigned later. -- Show the bundled Linear Import plugin in Plugin Manager and dashboard plugin surfaces. -- Fix the mobile Chat header so back navigation and session selection stay on one row. -- Fix iOS mobile terminal spacing when opening terminals with the keyboard already visible. -- Default fresh startup and theme reset to System mode. -- Remember task popup size and position when switching between tasks. -- Fix iPhone Safari terminal text spacing with the keyboard open. -- Count planning tasks correctly in the dashboard footer queue metric. -- Show conversation titles in the mobile Chat dropdown. -- Merges no longer fail when a task adds a dependency without updating the lockfile. +- @fusion/core@0.55.0 +- @fusion/dashboard@0.55.0 +- @fusion/engine@0.55.0 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.55.0 +- @fusion/pi-claude-cli@0.55.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.55.0 + +### @runfusion/fusion + +#### Minor Changes + +- 8580910: summary: Allow configuring permissions for ephemeral and permanent agents. + category: feature + dev: Applies capability grants and runtime permission policies consistently across agent lifetimes. +- 5738766: summary: Add GitLab instance URL settings for GitLab.com and self-managed servers. + category: feature + dev: Adds typed GitLab web/API URL configuration and dashboard controls for later GitLab integration subtasks. +- fafe4c9: summary: Add GitLab access-token settings for personal, project, and group tokens. + category: feature + dev: Documents required GitLab API scopes and adds token auth resolution for later GitLab integration tasks. +- 865dec2: summary: Add GitLab project issue, group issue, and merge request imports. + category: feature + dev: Adds HTTP API GitLab import routes, dashboard affordances, CLI commands, and extension tools. +- 34be333: summary: Add GitLab comment and auto-close lifecycle actions for linked work items. + category: feature + dev: Uses GitLab REST notes and state-event APIs with configured self-managed instance URLs. +- 1f6befc: summary: Add GitLab as a Command Center Signals connector. + category: feature + dev: Adds GitLab webhook token verification and issue/MR signal normalization for Command Center incidents. +- 91737b1: summary: Add explicit onboarding choices to use, initialize, or clone a git repository. + category: feature + dev: Setup wizard now sends gitSetupMode while preserving cloneUrl-only project registration clients. +- 91fb53f: summary: Let chat update existing agents without delete/recreate. + category: feature + dev: Adds the fn_agent_update Pi extension tool for scoped AgentStore.updateAgent config edits. +- dfb6e52: summary: Add a bundled Linear import plugin for creating tasks from Linear issues. + category: feature + dev: Ships fusion-plugin-linear-import with plugin settings, routes, tools, dashboard view, and bundled-plugin packaging. +- ec0256f: summary: Add a mandatory Planning Mode deepening checkpoint before final summaries. + category: feature + dev: Planning sessions now persist pending summaries behind a "Would you like to go deeper?" checkpoint. +- 5984f32: summary: Add visible create buttons and recursive search to Project Files. + category: feature + dev: Files — Project uses the existing workspace-safe create and /files/search APIs with settings pickers left compact. +- f973334: summary: Add a GitLab enable toggle and collapsible Settings controls. + category: feature + dev: Adds gitlabEnabled gating for GitLab API operations while preserving saved configuration. + +#### Patch Changes + +- 306e516: summary: Stop recurring Windows Terminal warning popups during terminal startup. + category: fix + dev: Keeps embedded terminal bootstrap on supported shells and surfaces actionable inline errors. +- 9df13c7: summary: Fix dashboard localStorage quota exhaustion from stale SWR caches and add a Clear local data escape hatch. + category: fix + dev: Stale SWR hydration entries (per-chat-session/per-room message caches) were never garbage-collected; readCache now lazily deletes stale entries, a boot sweep prunes anything older than 24h, and Settings → General exposes a user-facing "Clear local data" button that preserves the auth token. +- c7641f9: summary: Fix `fusion desktop` on Windows and published npm installs (Electron dependency, GPU/sandbox flags, dashboard reuse). + category: fix + dev: `packages/cli/package.json` now depends on `electron` at runtime; previously the desktop launcher called `require("electron")`, which is only available inside the source checkout (via `pnpm-workspace.yaml` `onlyBuiltDependencies`) and is missing for npm consumers, causing `fusion desktop` to hang or fail silently. The launcher now applies GPU/sandbox-disabling Electron flags only on Windows (`os.platform() === "win32"`), keeps hardware acceleration and the Chromium sandbox on macOS/Linux, exports `FUSION_SERVER_PORT` so the desktop reuses the CLI-started dashboard instead of double-binding ports, and isolates desktop user-data under `~/.fusion/desktop-user-data`. Relocating the profile performs a one-time copy of the previous default Electron profile (`user-data-migration.ts`) so upgrading operators keep window geometry/session. `packages/desktop/scripts/build.ts` now fails the build if `main.js`/`preload.js`/`client/index.html` are missing from `dist/` or the staged `deploy/dist/`, preventing shipping an incomplete `app.asar`. +- da662c4: summary: First-run agent setup no longer errors on a duplicate CEO; desktop Switch-server button now opens the connection menu. + category: fix + dev: Onboarding agent creation (ModelOnboardingModal + SetupWizardModal) treats a 409 "Agent with this name already exists" as success and advances, since the default CEO can be created from more than one first-run surface. The desktop preload now bridges the `shell:open-connection-manager` IPC (sent by main when the header Switch-server button is clicked) into the `window` DOM event ShellContext listens for, so NativeShellConnectionManager (Local/Remote toggle + remote profiles) actually opens. +- 377eee6: summary: Allow operators to delete archived tasks. + category: fix + dev: Extends task deletion to archive-db snapshots while preserving soft-delete tombstones and ID reservation. +- 9ee33f9: summary: Show workflow template block boundary connectors in the graph editor. + category: fix + dev: Adds visual-only foreach/loop/optional-group template boundary edges that are filtered from persisted IR. +- 3453d16: summary: Preserve the selected dashboard project across browser refreshes. + category: fix + dev: Project selection now updates and hydrates from the existing `?project=` dashboard URL contract. +- 777f647: summary: Detect Cursor CLI installations that expose Windows cmd or bat shims. + category: fix + dev: Cursor runtime probes and model discovery now shell-spawn only on Windows and preserve spawn diagnostics. +- abb1917: summary: Add a Settings override for the local Cursor CLI binary path. + category: feature + dev: Adds global `cursorCliBinaryPath` and threads it through Cursor CLI probes, auth status, enable validation, and model discovery. +- b8e126e: summary: Display linked GitLab tracking metadata and stale badges on tasks. + category: feature + dev: Persists GitLab tracking metadata separately from GitHub tracking fields. +- c49a933: summary: Preserve GitLab tracking metadata for CLI and extension imports. + category: fix + dev: GitLab project, group, and merge-request imports now carry gitlabTracking metadata alongside sourceIssue provenance. +- 53d5bb1: summary: Keep Planning Mode Refine Further from getting stuck on duplicate generation. + category: fix + dev: Guards completed-summary refinement as a single-flight UI turn and preserves the active planning stream on same-refine in-progress responses. +- b493a1e: summary: Show task status badges on Documents task groups. + category: fix + dev: DocumentsView now renders taskColumn metadata in task document group headers and covers collapsed done/non-done states. +- e5be924: summary: Suppress misleading Anthropic Subscription re-login banners when another Anthropic auth method is active. + category: fix + dev: Keeps subscription OAuth expired in Settings while hiding only the global urgent banner entry when API key or Claude CLI auth is active. +- 326c72b: summary: Keep Anthropic authentication cards grouped near the top in Settings. + category: fix + dev: Sorts Claude CLI, Anthropic Subscription, and Anthropic API Key before other auth cards within each auth group. +- 1d6bb08: summary: Stop planner model fallback loops with a clear terminal triage error. + category: fix + dev: Bounds prompt-time/session-creation model fallback exhaustion and persists failed triage state. +- aa8f1f3: summary: Recover stale task branch-group references from Task Detail after server restarts. + category: fix + dev: Adds branch_group restart regression coverage and non-origin integration-branch diagnostics. +- 72adb52: summary: Add sidebar rename buttons to direct Chat conversations. + category: feature + dev: Reuses ChatView's existing rename dialog and useChat renameSession path. +- 25fecd7: summary: Return GitHub issue import actions to the main issue list. + category: fix + dev: Updates Import Tasks issue import/close navigation and regression coverage. +- ffcb54b: summary: Prevent Planning Mode sessions from failing when MCP resolution returns no shaped result. + category: fix + dev: Dashboard planning lanes now default malformed MCP resolver output to an empty server set while preserving MCP forwarding. +- 8d7abb8: summary: Fix Android mobile terminal spacing while the keyboard is open. + category: fix + dev: Terminal mobile sizing now tracks visualViewport width for keyboard-open xterm fits. +- 22fd0da: summary: Fix Last 30 days token usage to include every model in Command Center. + category: fix + dev: Corrects Command Center token analytics range attribution for durable multi-model task usage. +- 765218f: summary: Include supported chat interactions in Command Center token usage totals. + category: fix + dev: Records chat-session and room-responder token usage separately from task execution tokens and aggregates both sources in token analytics. +- 1d6011c: summary: Collapse mobile Chat thread controls into one compact header row. + category: feature + dev: Mobile direct-chat moves back/session controls into ViewHeader and floats the Markdown/plain toggle. +- 2050323: summary: Preserve workflow setting edits made while a values save is still in flight. + category: fix + dev: WorkflowSettingsPanel and Project Models workflow lane saves now clear only snapshot-matching pending keys. +- 3fac409: summary: Preserve migrated workflow settings when project identity is assigned later. + category: fix + dev: Backfills rootDir-keyed workflow_settings rows into the durable project identity row, keeping identity values on conflicts. +- 78ebeaf: summary: Show the bundled Linear Import plugin in Plugin Manager and dashboard plugin surfaces. + category: fix + dev: Keeps fusion-plugin-linear-import registered across the built-in Plugin Manager catalog while reusing existing registry, dashboard view, and bundled packaging paths. +- 1430a42: summary: Fix the mobile Chat header so back navigation and session selection stay on one row. + category: fix + dev: Keeps the direct-chat mobile header collapsed while preserving desktop and room-chat layouts. +- 7a4b0bf: summary: Fix iOS mobile terminal spacing when opening terminals with the keyboard already visible. + category: fix + dev: Seeds iOS keyboard-open viewport baselines for TerminalModal and SessionTerminal before xterm fit/resize. +- 00afb22: summary: Default fresh startup and theme reset to System mode. + category: fix + dev: Fresh global settings, pre-hydration scripts, and Appearance reset now keep Shadcn Ember while following OS light/dark preference. +- 9532520: summary: Remember task popup size and position when switching between tasks. + category: fix + dev: Task-detail FloatingWindow instances share the `floating-window:task-detail` geometry key. +- 7300bf5: summary: Fix iPhone Safari terminal text spacing with the keyboard open. + category: fix + dev: Disables WebKit text-size adjustment inside dashboard xterm measurement subtrees. +- 30a11ac: summary: Count planning tasks correctly in the dashboard footer queue metric. + category: fix + dev: Footer counter tests now cover queued, running, stuck, blocked, review, overlap, background AI, and Done absence. +- d9ef514: summary: Show conversation titles in the mobile Chat dropdown. + category: fix + dev: Keeps the provider logo while removing model-name text from the mobile direct-chat trigger. +- e4349ee: summary: Merges no longer fail when a task adds a dependency without updating the lockfile. + category: fix + dev: In merge-dependency-sync.ts, an inferred frozen install (pnpm/yarn/bun) that fails with an outdated-lockfile error now retries once non-frozen (pnpm gets explicit --no-frozen-lockfile) to regenerate the lockfile in the clean-room worktree, recomputing the install marker. Configured worktreeInitCommand keeps its authoritative frozen intent and still hard-fails. Surfaced via the merge:ai-deps-sync run-audit event (healed/healedCommand). + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [306e516] +- Updated dependencies [9df13c7] +- Updated dependencies [c7641f9] +- Updated dependencies [da662c4] +- Updated dependencies [377eee6] +- Updated dependencies [9ee33f9] +- Updated dependencies [8580910] +- Updated dependencies [3453d16] +- Updated dependencies [777f647] +- Updated dependencies [abb1917] +- Updated dependencies [5738766] +- Updated dependencies [fafe4c9] +- Updated dependencies [865dec2] +- Updated dependencies [b8e126e] +- Updated dependencies [34be333] +- Updated dependencies [1f6befc] +- Updated dependencies [c49a933] +- Updated dependencies [53d5bb1] +- Updated dependencies [91737b1] +- Updated dependencies [b493a1e] +- Updated dependencies [e5be924] +- Updated dependencies [326c72b] +- Updated dependencies [1d6bb08] +- Updated dependencies [aa8f1f3] +- Updated dependencies [91fb53f] +- Updated dependencies [72adb52] +- Updated dependencies [25fecd7] +- Updated dependencies [dfb6e52] +- Updated dependencies [ec0256f] +- Updated dependencies [5984f32] +- Updated dependencies [ffcb54b] +- Updated dependencies [8d7abb8] +- Updated dependencies [22fd0da] +- Updated dependencies [765218f] +- Updated dependencies [1d6011c] +- Updated dependencies [2050323] +- Updated dependencies [3fac409] +- Updated dependencies [f973334] +- Updated dependencies [78ebeaf] +- Updated dependencies [1430a42] +- Updated dependencies [7a4b0bf] +- Updated dependencies [00afb22] +- Updated dependencies [9532520] +- Updated dependencies [7300bf5] +- Updated dependencies [30a11ac] +- Updated dependencies [d9ef514] +- Updated dependencies [e4349ee] + - @runfusion/fusion@0.55.0 ## 0.54.0 -### Highlights +### @fusion/dashboard -- Add a project setting to allow or block ephemeral agents from creating tasks (default on). -- Allow completed task planner Chat to answer and create refinements. -- Disabling ephemeral agents now also stops the workflow engine from running unassigned tasks. -- Align the task Activity view dropdown under its tab instead of drifting to the left of the modal. -- Fix the Windows CLI binary failing to build in release. +#### Patch Changes -### New +- @fusion/core@0.54.0 +- @fusion/engine@0.54.0 +- @fusion/i18n@0.39.18 +- @fusion-plugin-examples/cli-printing-press@0.1.35 +- @fusion-plugin-examples/compound-engineering@0.1.18 +- @fusion-plugin-examples/dependency-graph@0.1.49 +- @fusion-plugin-examples/roadmap@0.1.37 +- @fusion-plugin-examples/cursor-runtime@0.1.37 +- @fusion-plugin-examples/droid-runtime@0.1.44 +- @fusion-plugin-examples/hermes-runtime@0.2.68 +- @fusion-plugin-examples/openclaw-runtime@0.2.68 +- @fusion-plugin-examples/paperclip-runtime@0.2.68 -- Add a project setting to allow or block ephemeral agents from creating tasks (default on). -- Allow completed task planner Chat to answer and create refinements. +### @fusion/desktop -### Fixed +#### Patch Changes -- Disabling ephemeral agents now also stops the workflow engine from running unassigned tasks. -- Align the task Activity view dropdown under its tab instead of drifting to the left of the modal. -- Fix the Windows CLI binary failing to build in release. -- Fix the desktop app crashing on "Local" mode with missing-module errors. -- Planning mode no longer creates a new draft for every character you type. -- Preserve project scope when saving task-detail model overrides. -- Fix the All workflows dropdown counter so it no longer double-counts tasks. -- Normalize task-detail tab padding across Activity, Chat, and Plan views. -- Prevent task-bound agents from deleting the task they are currently executing. -- Reviews stop failing on formatting: approvals pass, trailing-JSON verdicts parse, retries clear stale gate failures. -- Stop showing "Task Failed" on a task whose code-review remediation is still running. -- Restore the board search button after closing the search panel. +- @fusion/core@0.54.0 +- @fusion/dashboard@0.54.0 +- @fusion/engine@0.54.0 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.54.0 +- @fusion/pi-claude-cli@0.54.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.54.0 + +### @runfusion/fusion + +#### Minor Changes + +- 40b44e4: summary: Add a project setting to allow or block ephemeral agents from creating tasks (default on). + category: feature + dev: New project setting `ephemeralAgentsCanCreateTasks` (default true) in DEFAULT_PROJECT_SETTINGS; gated in both fn_task_create surfaces (pi extension caller-agent check and the engine executor's ephemeral task-worker tool via `AgentTaskCreationOptions.callerIsEphemeral`). Toggle lives in Settings → General. + +#### Patch Changes + +- 40b44e4: summary: Disabling ephemeral agents now also stops the workflow engine from running unassigned tasks. + category: fix + dev: Added `TaskExecutor.blockOuterDispatchWhenEphemeralDisabled` gate at the top of `execute()`, ahead of all three workflow dispatch paths (maybeExecuteWorkflowGraph, workflowAuthoritativeDispatch, maybeDispatchWorkflowWorkEngine). Previously `ephemeralAgentsEnabled=false` was enforced only on the legacy scheduler/EphemeralWorkerManager path; the workflow-engine paths ran unassigned tasks anyway because the spawn refusal is a post-execution fire-and-forget callback. Unassigned tasks are now re-queued for permanent-agent assignment; tasks bound to a permanent agent still run. +- 69f754f: summary: Align the task Activity view dropdown under its tab instead of drifting to the left of the modal. + category: fix + dev: TaskDetailModal's position:fixed Activity menu now clamps to the layout viewport (document.documentElement.clientWidth/clientHeight) and no longer mixes in window.visualViewport width/offset, which shoved the popup off-anchor under pinch-zoom or an open mobile keyboard. +- abd596b: summary: Fix the Windows CLI binary failing to build in release. + category: fix + dev: The bun `--compile --conditions=source` build could not resolve @fusion-plugin-examples/paperclip-runtime (statically imported by dashboard runtime-provider-probes.ts) because it lacked a `source` export condition and fell through to `import`→`dist/index.js`, absent on the Windows runner. Added `"source": "./src/index.ts"` to paperclip and the remaining example plugins that export `import`→dist (agent-browser, even-cards, even-realities-glasses, whatsapp-chat), matching hermes/openclaw. Verified by cross-compiling bun-windows-x64 with all plugin dist removed. +- abd596b: summary: Fix the desktop app crashing on "Local" mode with missing-module errors. + category: fix + dev: electron-builder's pnpm support runs `pnpm list --prod` and drops `deduped` subtrees, so the embedded runtime's `import("@fusion/engine")` closure (@modelcontextprotocol/sdk, the pi-ai provider SDKs, etc.) was never packed into app.asar. The desktop build now stages the complete flat production closure with `pnpm deploy --legacy --config.node-linker=hoisted` and points electron-builder at it via `--projectDir deploy`, so packaging no longer depends on the lossy collector. Also fixes cursor/droid/roadmap plugin exports to expose compiled `dist` on the `import` condition (with `source`→src kept for the bun CLI) so the dashboard server loads them under plain Node, and builds those plugins in the desktop build. Validated by importing @fusion/core|engine|dashboard from the staged deploy and packing a complete 705-package asar. +- 074462e: summary: Planning mode no longer creates a new draft for every character you type. + category: fix + dev: PlanningModeModal's initial-plan textarea gated duplicate createPlanningDraft calls only on draftSessionIdRef, which is set after the create round-trip resolves; keystrokes during an in-flight create each spawned a fresh draft. A synchronous draftCreateInFlightRef sentinel now suppresses concurrent creates and is cleared on failure so a later keystroke can retry. +- eedf526: summary: Preserve project scope when saving task-detail model overrides. + category: fix + dev: Threads task-detail Model tab updates through projectId for executor, reviewer, planning, and thinking lanes. +- 9464f31: summary: Fix the All workflows dropdown counter so it no longer double-counts tasks. + category: fix + dev: Board now uses the shared workflow status count aggregate directly, with regression coverage for Board/List and header/graph selector count behavior. +- 1a523e7: summary: Allow completed task planner Chat to answer and create refinements. + category: feature + dev: Adds done-task task-planner session creation and `fn_task_planner_create_refinement`. +- b6da7fa: summary: Normalize task-detail tab padding across Activity, Chat, and Plan views. + category: fix + dev: Keeps chat-like task-detail tabs on canonical body padding while preserving internal scroll behavior. +- 22261b6: summary: Prevent task-bound agents from deleting the task they are currently executing. + category: fix + dev: TaskStore.deleteTask now rejects audit contexts whose caller task matches the delete target. +- 3167dbc: summary: Reviews stop failing on formatting: approvals pass, trailing-JSON verdicts parse, retries clear stale gate failures. + category: fix + dev: reviewer.ts adds shared `proseSignalsClearApproval` (approval prose with a revise/negated-approval guard), `extractJsonObjectCandidates` (string-aware balanced-brace scan, last-object preferred for prose→trailing-JSON), and `classifyReviewVerdictToken` (any APPROVE\*/APPROVAL token → APPROVE). `extractVerdict` now prefers an explicit heading/line verdict over an incidental/example JSON object. Gate parser (`parseWorkflowStepVerdict`/`inferWorkflowStepVerdictFromProse`) shares the same logic. `executeWorkflowStep` retries the fallback model on malformed (not just timeout) and malformed gate output is a non-blocking advisory (relaxes FN-6582; genuine parsed REVISE still blocks). Retry paths clear prior terminal step failures (`clearTerminalWorkflowStepFailures`) only after the task leaves the mergeable in-review column (`clearTerminalStepFailuresForRetry` in the rerun bounce / resume path) to avoid an auto-merge race. Fail-closed merge/PR/mission-verification gates are unchanged. +- ca88a6c: summary: Stop showing "Task Failed" on a task whose code-review remediation is still running. + category: fix + dev: handleGraphFailure now skips the terminal `status:"failed"` park when the failed graph node is a `pre-merge-remediation`/`plan-replan` node (e.g. `code-review-remediation`) AND a live agent session surface is still registered for the task. These nodes are fire-and-forget async schedulers with no `failure` out-edge, so a failed re-arm (missing rehydrated failureContext after restart, remediation-not-scheduled, or exhausted rework budget) bubbled out as the terminal graph outcome and stamped a spurious failure over live work. Scoped via `isRemediationGraphNode` (IR `workflowAction` with built-in node-id fallback) + `hasLiveTaskSessionSurface`; genuine execute/merge failures and remediation failures with no live session still park failed unchanged. +- 9870428: summary: Restore the board search button after closing the search panel. + category: fix + dev: Keeps the desktop/tablet Header search reopen affordance visible after empty-query dismissal and parent clear. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [40b44e4] +- Updated dependencies [40b44e4] +- Updated dependencies [69f754f] +- Updated dependencies [abd596b] +- Updated dependencies [abd596b] +- Updated dependencies [074462e] +- Updated dependencies [eedf526] +- Updated dependencies [9464f31] +- Updated dependencies [1a523e7] +- Updated dependencies [b6da7fa] +- Updated dependencies [22261b6] +- Updated dependencies [3167dbc] +- Updated dependencies [ca88a6c] +- Updated dependencies [9870428] + - @runfusion/fusion@0.54.0 ## 0.53.1 -### Highlights +### @fusion/dashboard -- Fix the Windows CLI binary failing to build in release. -- Fix desktop app crashing on "Local" mode startup with a missing-module error. +#### Patch Changes -### Fixed +- @fusion/core@0.53.1 +- @fusion/engine@0.53.1 +- @fusion/i18n@0.39.17 +- @fusion-plugin-examples/cli-printing-press@0.1.34 +- @fusion-plugin-examples/compound-engineering@0.1.17 +- @fusion-plugin-examples/dependency-graph@0.1.48 +- @fusion-plugin-examples/roadmap@0.1.36 +- @fusion-plugin-examples/cursor-runtime@0.1.36 +- @fusion-plugin-examples/droid-runtime@0.1.43 +- @fusion-plugin-examples/hermes-runtime@0.2.67 +- @fusion-plugin-examples/openclaw-runtime@0.2.67 +- @fusion-plugin-examples/paperclip-runtime@0.2.67 -- Fix the Windows CLI binary failing to build in release. -- Fix desktop app crashing on "Local" mode startup with a missing-module error. +### @fusion/desktop + +#### Patch Changes + +- @fusion/core@0.53.1 +- @fusion/dashboard@0.53.1 +- @fusion/engine@0.53.1 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.53.1 +- @fusion/pi-claude-cli@0.53.1 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.53.1 + +### @runfusion/fusion + +#### Patch Changes + +- bb1de8a: summary: Fix the Windows CLI binary failing to build in release. + category: fix + dev: The bun `--conditions=source` compile of the CLI could not resolve @fusion-plugin-examples/hermes-runtime and openclaw-runtime (statically imported by dashboard routes.ts) because those plugin packages lacked a `source` export condition and fell through to `import`→`dist/index.js`, which is absent on the Windows runner. Added `"source": "./src/index.ts"` to both plugins' exports (matching @fusion/core|dashboard|engine|plugin-sdk) so bun bundles their TS source directly, independent of dist. Verified locally by cross-compiling bun-windows-x64 with plugin dist removed; a negative control reproduced the exact "Could not resolve" error. +- 3aef6dd: summary: Fix desktop app crashing on "Local" mode startup with a missing-module error. + category: fix + dev: The desktop build now compiles @fusion/core and @fusion/engine tsc dist (both gitignored) so the packaged embedded Local runtime's `import("@fusion/engine")` resolves. Previously only release.yml's root `pnpm build` produced these; desktop-windows.yml packaged an empty engine/dist and crashed with ERR_MODULE_NOT_FOUND for app.asar/node_modules/@fusion/engine. `@fusion/desktop build` is now self-contained (build.ts → ensureEmbeddedRuntimeBuild), and desktop-windows.yml gained the `pnpm build` parity step. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [bb1de8a] +- Updated dependencies [3aef6dd] + - @runfusion/fusion@0.53.1 ## 0.53.0 -### Highlights +### @fusion/dashboard -- Add exact tool overrides for permanent-agent permission policies. -- Add a project option to link imported GitHub issues to GitHub tracking. -- Add Enable GitHub tracking to Board and List task context menus. -- Let task-detail planner Chat answer current-task token, cost, and timing questions. -- Add a Glass Silver dashboard theme. +#### Patch Changes -### New +- @fusion/core@0.53.0 +- @fusion/engine@0.53.0 +- @fusion/i18n@0.39.16 +- @fusion-plugin-examples/cli-printing-press@0.1.33 +- @fusion-plugin-examples/compound-engineering@0.1.16 +- @fusion-plugin-examples/dependency-graph@0.1.47 +- @fusion-plugin-examples/roadmap@0.1.35 +- @fusion-plugin-examples/cursor-runtime@0.1.35 +- @fusion-plugin-examples/droid-runtime@0.1.42 +- @fusion-plugin-examples/hermes-runtime@0.2.66 +- @fusion-plugin-examples/openclaw-runtime@0.2.66 +- @fusion-plugin-examples/paperclip-runtime@0.2.66 -- Add exact tool overrides for permanent-agent permission policies. -- Add a project option to link imported GitHub issues to GitHub tracking. -- Add Enable GitHub tracking to Board and List task context menus. -- Let task-detail planner Chat answer current-task token, cost, and timing questions. -- Add a Glass Silver dashboard theme. -- Add a mobile terminal tab dropdown for switching and closing terminal sessions. -- Branching workflows now run on the graph interpreter; the legacy step-compiler and its interpreter-only banner are gone. -- Add All workflows to top-level dashboard workflow selectors. -- Add a Triage column shortcut for plan auto-approval. +### @fusion/desktop -### Fixed +#### Patch Changes -- Allow Compound Engineering recovered sessions to answer persisted questions after dashboard restarts. -- Contain planning parse failures as retryable session errors and add `--supervise` dashboard restart mode. -- Fix Anthropic Claude subscription chats failing (404/502/429) by restoring direct OAuth execution. -- Fix tasks looping through triage at the completion-summary node, plus Stats/Routing/Node labels crashing. -- Prevent task branches from inheriting unrelated checked-out task commits. -- Fix arrow-key editing for Settings in the terminal dashboard. -- Make the task Activity tab switch Live, Feed, and Raw views directly. -- Show Refine in completed task card and list context menus. -- Fix mobile task action menus so tapped actions run once and close. -- Reuse the standard Chat surface for task-detail planner chat. -- Make mobile task-detail chat Send buttons submit on the first tap. -- Recover explicit Sonnet 5 chat selections with configured model fallbacks. -- Fix Windows desktop startup failures in packaged builds. -- Fix Board task context menus so they are not clipped by columns. -- Prevent mobile Board task long-press menus from selecting card text. -- Hide task planner chats from the common Chat feed unless enabled in Settings. -- Let the task popup setting open board tasks as popups on desktop too. -- Preserve task-detail planner Chat working state after leaving and returning. -- Keep sent chat messages visible when a provider error interrupts the reply. -- Let Planning Mode Yes/No questions accept a custom Other answer. -- Show thinking effort on task log model rows when it is configured. -- Enforce maxWorktrees as a hard cap on active execution worktrees. -- Stop force-advertising Anthropic Claude Sonnet 5 when account availability is unknown. -- Fix the mobile task Activity view dropdown so it opens above the tab strip without clipping. -- Keep the Planner Chat stop-generation icon visible on mobile while thinking. -- Hide failed-task banners while task planner chat is maximized. -- Make Planner Chat clarification questions answerable in task details. -- Close task details immediately after confirming task deletion. -- Honor project auto plan approval across task finalization paths. -- Make chat-created workflows appear immediately across workflow selectors. -- Recover live worktree conflicts by retrying with a fresh task worktree. -- Fix Activity expand controls so Live and Feed overlay content and Raw has one fullscreen button. -- Move destructive task context-menu actions to the bottom. -- Fix folded Android mobile terminal spacing on initial open. -- Show eligible Claude Sonnet 5 model rows once in model pickers. -- Restore Claude Sonnet 5 and latest Anthropic models in the Claude CLI model picker. -- Fix Anthropic subscription chat failing with 429/502 by routing it through the Claude CLI. -- Keep hidden task-planner Chat replies from lighting the global Chat unread badge. -- Fix desktop launch from npm installs in directories with invalid JSON. -- Keep Anthropic subscription OAuth, Claude CLI, and direct API-key auth separated. -- Ensure task lifecycle plugins receive runtime context during completion hooks. -- Show Claude CLI models when Anthropic subscription OAuth and Claude CLI are connected. -- Fix Compound Engineering Debug stage launches that could fail with a JSON parse error. -- Include graph-owned workflow step execution in Command Center activity analytics. -- Restore Claude Sonnet 5 in the model picker (it had disappeared from every surface). -- Enforce explicit external checkout metadata for review routing. -- Let proven task merges finalize even when old branch history remains. -- Widen Project Models dropdown menus so long provider and model names are easier to read. -- Give workflow review steps a longer default timeout. +- @fusion/core@0.53.0 +- @fusion/dashboard@0.53.0 +- @fusion/engine@0.53.0 -### Internal +### @fusion/engine -- Upgrade Fusion's bundled pi SDK dependencies to 0.80.3. +#### Patch Changes + +- @fusion/core@0.53.0 +- @fusion/pi-claude-cli@0.53.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.53.0 + +### @runfusion/fusion + +#### Minor Changes + +- 12ee9a9: summary: Add exact tool overrides for permanent-agent permission policies. + category: feature + dev: Adds per-tool permission policy overrides on top of category rules. +- a9e2baa: summary: Add a project option to link imported GitHub issues to GitHub tracking. + category: feature + dev: GitHub issue import paths honor githubLinkImportedIssuesToTracking while ordinary task creation remains unchanged. +- 1750523: summary: Add Enable GitHub tracking to Board and List task context menus. + category: feature + dev: Reuses the existing task PATCH GitHub tracking flow from shared card/list context menu actions. +- 1ccef81: summary: Let task-detail planner Chat answer current-task token, cost, and timing questions. + category: feature + dev: Adds read-only task-scoped planner chat tool `fn_task_planner_get_task_metrics` with derived pricing semantics. +- a404997: summary: Add a Glass Silver dashboard theme. + category: feature + dev: Registers glass-silver across core theme metadata, dashboard/desktop startup validators, CSS tokens, swatches, and tests. +- 03160eb: summary: Add a mobile terminal tab dropdown for switching and closing terminal sessions. + category: feature + dev: Mobile terminal headers now use a native tab selector while desktop keeps the tab strip. +- 14bb7a3: summary: Branching workflows now run on the graph interpreter; the legacy step-compiler and its interpreter-only banner are gone. + category: feature + dev: Removed the linear WorkflowStep compiler (compileWorkflowToSteps/validateLinearity/WorkflowCompileError) from @fusion/core; parseWorkflowIr is now the sole workflow validity gate at save/select/refine and in the graph task runner. Deleted the POST /api/workflows/:id/compile preview route and its client wrapper, and dropped the interpreterOnly response field and editor banner. MERGE_REGION_NODE_KINDS moved into workflow-lifecycle-validation. + +#### Patch Changes + +- ad8db59: summary: Allow Compound Engineering recovered sessions to answer persisted questions after dashboard restarts. + category: fix + dev: Keeps strict question-id validation by default while letting CE trust its persisted session row as the recovery anchor. +- 9432339: summary: Contain planning parse failures as retryable session errors and add `--supervise` dashboard restart mode. + category: fix + dev: Planning sessions that receive non-JSON AI output now persist as retryable error state instead of unpersisting the session. The `/api/health` endpoint remains available during session errors. A new `--supervise` flag on `fn dashboard` runs the dashboard under foreground process supervision with bounded restart attempts and exponential backoff, preventing Tailscale Serve 502s from unexpected dashboard exits. +- a1af5de: summary: Fix Anthropic Claude subscription chats failing (404/502/429) by restoring direct OAuth execution. + category: fix + dev: Reverts the FN-7391/FN-7396 runtime rerouting that sent subscription OAuth to a `/v1`-based `anthropic-subscription` provider (reintroducing issue #1857). `getApiKey("anthropic")` again resolves subscription/legacy OAuth (raw API key still wins), so `anthropic/*` selections run on pi-ai's built-in provider with Claude Code OAuth headers; the model picker advertises `anthropic` for OAuth users; explicit `pi-claude-cli` and raw `ANTHROPIC_API_KEY` remain separate surfaces. +- 3884169: summary: Fix tasks looping through triage at the completion-summary node, plus Stats/Routing/Node labels crashing. + category: fix + dev: Issue #1863 (v0.52.0 regression). (1) The best-effort completion-summary graph node is wired with a success-only edge, so a thrown handler exception or a failed summary projection write terminated the graph and the in-review→todo resume router bounced the task forever. The graph executor now degrades a completion-summary node failure to success (ensureWorkflowCompletionSummary still backfills task.summary), with a routeGraphFailureToExecutionResume backstop. (2) Three views called t() with keys that resolve to nested objects (taskDetail.executionMode, routing.source, nodes.dockerHost); added leaf label keys across all locales and a dashboard invariant test that scans t("literal") callers against the real en/app.json. +- 88bcbce: summary: Prevent task branches from inheriting unrelated checked-out task commits. + category: fix + dev: Fresh worktree acquisition now pins the integration branch as the default start point, and merge finalization validates task-owned branch diffs from baseCommitSha when available. +- c93f2d4: summary: Fix arrow-key editing for Settings in the terminal dashboard. + category: fix + dev: Settings detail-pane arrows now edit enum values instead of switching panes. +- 72eb9af: summary: Make the task Activity tab switch Live, Feed, and Raw views directly. + category: fix + dev: Removes the duplicate in-panel Activity view select from TaskDetailModal. +- d448603: summary: Show Refine in completed task card and list context menus. + category: fix + dev: Routes done/custom-complete Board and List context-menu Refine actions into the existing Task Detail refinement composer. +- 98ca9ac: summary: Fix mobile task action menus so tapped actions run once and close. + category: fix + dev: Shared TaskContextMenu now commits touch/pen selections on pointer release and guards synthesized clicks. +- 7457f04: summary: Reuse the standard Chat surface for task-detail planner chat. + category: fix + dev: Extracts StandardChatSurface for shared message, thinking, tool-call, and mobile send rendering without importing the lazy ChatView chunk from task detail. +- d8f3cc6: summary: Make mobile task-detail chat Send buttons submit on the first tap. + category: fix + dev: Adds touch-first send handling for Activity steering, done-task refinement, and planner Chat composers. +- b3b01bc: summary: Add All workflows to top-level dashboard workflow selectors. + category: feature + dev: Extends the dashboard aggregate workflow sentinel to List, Planning, Missions, and Graph without backend handoff. +- 62c4aae: summary: Recover explicit Sonnet 5 chat selections with configured model fallbacks. + category: fix + dev: Routes Anthropic Sonnet 5 provider/model failures through chat/runtime fallback and preserves actionable no-fallback errors. +- 1f3a15e: summary: Fix Windows desktop startup failures in packaged builds. + category: fix + dev: Externalizes Electron updater CJS dependencies, loads the dashboard registry manifest through Node-safe file IO, and separates NSIS/portable Windows artifacts. +- f04f01d: summary: Fix Board task context menus so they are not clipped by columns. + category: fix + dev: Board TaskCard menus are portaled to document.body and clamped in viewport coordinates. +- e4eb8b6: summary: Prevent mobile Board task long-press menus from selecting card text. + category: fix + dev: Suppresses WebKit/native selection for non-editing TaskCard surfaces while preserving edit textareas. +- fed60ec: summary: Hide task planner chats from the common Chat feed unless enabled in Settings. + category: fix + dev: Adds project setting `showTaskChatsInCommonFeed` and filters task-planner sessions in chat list APIs/client refresh. +- d93fac0: summary: Let the task popup setting open board tasks as popups on desktop too. + category: fix + dev: Keeps the existing `openMobileTasksInPopup` setting key while broadening ordinary board-card routing across viewports. +- c194248: summary: Preserve task-detail planner Chat working state after leaving and returning. + category: fix + dev: Rehydrates task-planner chat generation snapshots and reattaches streams across tab switches and modal remounts. +- a65633d: summary: Keep sent chat messages visible when a provider error interrupts the reply. + category: fix + dev: Reconciles accepted optimistic chat sends with persisted transcripts across global, planner, and room chats. +- 4805182: summary: Let Planning Mode Yes/No questions accept a custom Other answer. + category: fix + dev: Extends confirm-question handling to preserve user-authored alternatives via `_other`. +- 67f93ce: summary: Show thinking effort on task log model rows when it is configured. + category: fix + dev: Runtime using-model markers append `(thinking effort: )` while dashboard parsers strip suffix annotations for provider icons and effective-model displays. +- 919420e: summary: Enforce maxWorktrees as a hard cap on active execution worktrees. + category: fix + dev: TaskStore rejects allocated in-progress moves once active holders reach maxWorktrees, independent of maxConcurrent. +- 427ce04: summary: Stop force-advertising Anthropic Claude Sonnet 5 when account availability is unknown. + category: fix + dev: Removes static Sonnet 5 supplemental catalog/pricing metadata while preserving fallback handling for saved selections. +- 7e5d908: summary: Fix the mobile task Activity view dropdown so it opens above the tab strip without clipping. + category: fix + dev: Root-portals and viewport-clamps the task-detail Activity Live/Feed/Raw menu with regression coverage. +- a4ef439: summary: Keep the Planner Chat stop-generation icon visible on mobile while thinking. + category: fix + dev: Narrows the mobile Planner Chat text-hiding selector so the shared chat stop icon span remains visible. +- 914c7c1: summary: Hide failed-task banners while task planner chat is maximized. + category: fix + dev: TaskDetailModal no longer mounts failed-banner chrome during expanded planner Chat; Activity and collapsed detail still show failures. +- 3702763: summary: Upgrade Fusion's bundled pi SDK dependencies to 0.80.3. + category: internal + dev: Upgrades @earendil-works/pi-ai and @earendil-works/pi-coding-agent to ^0.80.3. +- e341c06: summary: Make Planner Chat clarification questions answerable in task details. + category: fix + dev: Extracts fn_ask_question cards from grouped tool-call details in shared chat rendering. +- 6d1507a: summary: Close task details immediately after confirming task deletion. + category: fix + dev: Updates shared task-detail delete close behavior and split-detail host wiring so detail shells close before delete requests settle. +- d94c359: summary: Honor project auto plan approval across task finalization paths. + category: fix + dev: Ensures planApprovalMode=auto-approve-all wins over workflow requirePlanApproval for ordinary plan approval. +- ec0fa96: summary: Add a Triage column shortcut for plan auto-approval. + category: feature + dev: Adds a Board column switch that mirrors project planApprovalMode=auto-approve-all. +- 869974c: summary: Make chat-created workflows appear immediately across workflow selectors. + category: fix + dev: Chat workflow tools now emit workflow lifecycle SSE and workflow lists force-refresh per project. +- af6e671: summary: Recover live worktree conflicts by retrying with a fresh task worktree. + category: fix + dev: Executor worktree acquisition now preserves active-session conflict owners and retries bounded sibling branches instead of surfacing automatic cleanup failure. +- 4378053: summary: Fix Activity expand controls so Live and Feed overlay content and Raw has one fullscreen button. + category: fix + dev: Updates task-detail Activity Live/Feed overlay controls and keeps Raw on AgentLogViewer fullscreen. +- 4694b4a: summary: Move destructive task context-menu actions to the bottom. + category: fix + dev: Reorders shared TaskContextMenu descriptors so Reset precedes Delete at the end across Board, List, and Detail menus. +- 18b07b5: summary: Fix folded Android mobile terminal spacing on initial open. + category: fix + dev: Terminal mobile detection now honors touch visualViewport width for TerminalModal and SessionTerminal. +- bfe5ced: summary: Show eligible Claude Sonnet 5 model rows once in model pickers. + category: fix + dev: Dedupes /api/models rows by provider/model while preserving direct Anthropic Sonnet 5 guardrails. +- 3219ced: summary: Restore Claude Sonnet 5 and latest Anthropic models in the Claude CLI model picker. + category: fix + dev: pi-claude-cli supplemental extraModels now advertises claude-sonnet-5 for the subscription-authenticated CLI surface; direct-Anthropic supplemental registration and static pricing remain withheld per FN-7374's 404 not_found_error handling. Local evidence used claude 2.1.197 with --model accepting aliases/full names; checksum remains upstream-pending-verification. +- 775ff5f: summary: Fix Anthropic subscription chat failing with 429/502 by routing it through the Claude CLI. + category: fix + dev: Anthropic routing now keeps three surfaces distinct: raw API keys authenticate direct api.anthropic.com/v1, subscription/OAuth remains `anthropic-subscription`, and CLI execution uses `pi-claude-cli`; OAuth-only selections never authenticate direct `/v1` and are routed to the CLI provider when available. +- 4beae71: summary: Keep hidden task-planner Chat replies from lighting the global Chat unread badge. + category: fix + dev: Enriches direct chat SSE payloads with session agent metadata plus common-feed visibility, then suppresses `task-planner:` unread badges only while hidden. +- e85d25e: summary: Fix desktop launch from npm installs in directories with invalid JSON. + category: fix + dev: Keeps installed desktop launch independent of source workspace builds and host JSON files. +- 19e59ec: summary: Keep Anthropic subscription OAuth, Claude CLI, and direct API-key auth separated. + category: fix + dev: Restores anthropic-subscription status/usage/banner behavior and direct subscription-backed execution while keeping raw anthropic API-key auth and explicit pi-claude-cli execution separate. +- f998fe3: summary: Ensure task lifecycle plugins receive runtime context during completion hooks. + category: fix + dev: PluginLoader now appends PluginContext to task lifecycle hook invocations when callers provide only task event args. +- 9c2a264: summary: Show Claude CLI models when Anthropic subscription OAuth and Claude CLI are connected. + category: fix + dev: Keeps subscription OAuth on anthropic-subscription while direct anthropic remains raw API-key-only. +- 20e42c6: summary: Fix Compound Engineering Debug stage launches that could fail with a JSON parse error. + category: fix + dev: Strengthens CE stage prompts and debug skill guidance so dashboard sessions emit the interactive JSON protocol. +- dbe637f: summary: Include graph-owned workflow step execution in Command Center activity analytics. + category: fix + dev: StepSessionExecutor now publishes best-effort agentRuns lifecycle rows for workflow step sessions. +- b7c6443: summary: Restore Claude Sonnet 5 in the model picker (it had disappeared from every surface). + category: fix + dev: Re-adds `claude-sonnet-5` to SUPPLEMENTAL_ANTHROPIC_PROVIDER_REGISTRATION and its static pricing (removed by FN-7374). Live-verified: Sonnet 5 returns 200 on api.anthropic.com/v1 with a raw ANTHROPIC_API_KEY and runs via the Claude CLI; it 403s (scope) on subscription-OAuth /v1, where the runtime actionable-failure/fallback path applies. +- b58d9b5: summary: Enforce explicit external checkout metadata for review routing. + category: fix + dev: Reviews now use sourceMetadata.externalReviewCheckout only when it points at a valid git checkout, otherwise they fail closed to the task worktree and log the selected review target. +- 24279c9: summary: Let proven task merges finalize even when old branch history remains. + category: fix + dev: Auto-merge finalization now trusts durable task merge proof instead of blocking on stale branch-only residue. +- 07aa1a0: summary: Widen Project Models dropdown menus so long provider and model names are easier to read. + category: fix + dev: Adds an opt-in readable menu width to the shared dashboard model dropdown and applies it only in Project Models. +- 62c5840: summary: Give workflow review steps a longer default timeout. + category: fix + dev: Raises the built-in `workflowStepTimeoutMs` default and engine fallback from 6 minutes to 15 minutes. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [ad8db59] +- Updated dependencies [9432339] +- Updated dependencies [a1af5de] +- Updated dependencies [3884169] +- Updated dependencies [88bcbce] +- Updated dependencies [c93f2d4] +- Updated dependencies [72eb9af] +- Updated dependencies [d448603] +- Updated dependencies [98ca9ac] +- Updated dependencies [7457f04] +- Updated dependencies [d8f3cc6] +- Updated dependencies [b3b01bc] +- Updated dependencies [62c4aae] +- Updated dependencies [1f3a15e] +- Updated dependencies [12ee9a9] +- Updated dependencies [f04f01d] +- Updated dependencies [e4eb8b6] +- Updated dependencies [fed60ec] +- Updated dependencies [d93fac0] +- Updated dependencies [c194248] +- Updated dependencies [a9e2baa] +- Updated dependencies [a65633d] +- Updated dependencies [4805182] +- Updated dependencies [67f93ce] +- Updated dependencies [1750523] +- Updated dependencies [919420e] +- Updated dependencies [427ce04] +- Updated dependencies [7e5d908] +- Updated dependencies [a4ef439] +- Updated dependencies [914c7c1] +- Updated dependencies [3702763] +- Updated dependencies [e341c06] +- Updated dependencies [6d1507a] +- Updated dependencies [d94c359] +- Updated dependencies [ec0fa96] +- Updated dependencies [869974c] +- Updated dependencies [af6e671] +- Updated dependencies [4378053] +- Updated dependencies [4694b4a] +- Updated dependencies [18b07b5] +- Updated dependencies [bfe5ced] +- Updated dependencies [3219ced] +- Updated dependencies [775ff5f] +- Updated dependencies [4beae71] +- Updated dependencies [1ccef81] +- Updated dependencies [e85d25e] +- Updated dependencies [19e59ec] +- Updated dependencies [f998fe3] +- Updated dependencies [9c2a264] +- Updated dependencies [20e42c6] +- Updated dependencies [a404997] +- Updated dependencies [dbe637f] +- Updated dependencies [03160eb] +- Updated dependencies [14bb7a3] +- Updated dependencies [b7c6443] +- Updated dependencies [b58d9b5] +- Updated dependencies [24279c9] +- Updated dependencies [07aa1a0] +- Updated dependencies [62c5840] + - @runfusion/fusion@0.53.0 ## 0.52.0 -### Highlights +### @fusion/dashboard -- Expose workflow authoring tools through the published agent extension API. -- Allow task image artifacts to be created from agent tools and viewed in task details. -- Add a setting to control whether clicking outside the Quick Chat window closes it. -- Add Anthropic API-key authentication under Authentication. -- Add a Tasks tab to the right sidebar that shows the last-viewed task or a clickable task list. +#### Patch Changes -### New +- @fusion/core@0.52.0 +- @fusion/engine@0.52.0 +- @fusion/i18n@0.39.15 +- @fusion-plugin-examples/cli-printing-press@0.1.32 +- @fusion-plugin-examples/compound-engineering@0.1.15 +- @fusion-plugin-examples/dependency-graph@0.1.46 +- @fusion-plugin-examples/roadmap@0.1.34 +- @fusion-plugin-examples/cursor-runtime@0.1.34 +- @fusion-plugin-examples/droid-runtime@0.1.41 +- @fusion-plugin-examples/hermes-runtime@0.2.65 +- @fusion-plugin-examples/openclaw-runtime@0.2.65 +- @fusion-plugin-examples/paperclip-runtime@0.2.65 -- Expose workflow authoring tools through the published agent extension API. -- Allow task image artifacts to be created from agent tools and viewed in task details. -- Add a setting to control whether clicking outside the Quick Chat window closes it. -- Add Anthropic API-key authentication under Authentication. -- Add a Tasks tab to the right sidebar that shows the last-viewed task or a clickable task list. -- Let operators sort the board Done column by completion date or task ID. -- Add a Board dropdown option that shows tasks across all workflows. -- Show workflow-name badges on Board cards in the All workflows view. -- Add a terminal worktree picker for opening shells in task worktrees. -- Let Git Manager jump from worktrees to their read-only commit history. -- Let Git Manager inspect commit history from known git worktrees. -- Add task context menus on board and list cards. -- Add a mobile setting to open board tasks in the existing popup. -- Add a global setting to control modal backdrop dismissal. -- Add a project setting for absolute workspace file-browser paths. -- Add a quick-add workflow selector for Board and List task creation. -- Show workflow identity with icons instead of built-in text suffixes. -- Add Command Center task-duration trend lines for average and median completed active time. -- Add Claude Sonnet 5 across Anthropic model selection and execution paths. -- Add Activity segments for current task activity, Feed, and Raw Logs. -- Add a task-detail Chat tab for planner-model conversations. -- Add starter prompts to the task-detail Chat empty state. -- Convert clear task chat change requests into steering comments. -- Make task details open with a focused planner Chat experience. -- Let workflow review nodes fix issues in the same reviewer session by default. -- Make Coding use stepwise execution with default-on Plan Review and final Code Review gates. -- Rename the task Definition tab to Plan and add a PROMPT.md editor action. -- Make task details open Activity first by default with an opt-in Chat-first setting. -- Show timestamps on each task-detail chat block. -- Show workflow names on aggregate board cards and task detail headers when available. -- Let Git Manager inspect commit history from known worktrees. -- Refresh custom provider model lists at startup and from Settings. -- Make Shadcn Ember the default dashboard theme. -- Show workflow icons in the full New Task workflow picker. -- Add icon-only Quick Add image attachments with drag-and-drop support. -- Rename the task-detail Chat tab to Activity and make it first. -- Add a steering entry affordance to task Activity. -- Make task-detail Chat answer status and progress questions from bounded task context. -- Rename task Activity Current to Live and allow expanding all Activity segments. +### @fusion/desktop -### Fixed +#### Patch Changes -- Plugin sidebar icons now refresh after a plugin rebuild instead of showing stale glyphs. -- Restore required safety guidance in fast-mode task planning prompts. -- Fast-mode tasks now clear optional steps by default while honoring manual selections. -- Review gates now include user comments and steering context consistently. -- Show focused auth-token recovery when daemon authorization expires. -- Prevent workflow task cards from showing later sequential steps active too early. -- Prevent fast Coding tasks from merging before implementation runs. -- Keep workflow completion summaries running for fast-mode tasks. -- Prevent Compound Engineering artifacts from showing stale project files after project switches. -- Keep the Goals dashboard view scoped to the selected project. -- Fix mobile Planning Mode description editing so spaces can be entered. -- Show Compound Engineering workflow stage progress on task cards and details. -- Chat messages now use the full width in narrow popup and sidebar chats. -- Concurrency panels now prefer live engine counts so running-agent totals stay accurate. -- Task-detail chat messages now use the full width in the right sidebar and narrow detail views. -- Import Tasks view now fills the full height of the screen for Issues and Pull Requests. -- Fix review tasks stuck when merge retries starve the executor's code-review revision pass. -- Fix planning/chat failures when image attachment bytes do not match the file extension. -- Apply task reviewer model overrides consistently to reviewer and code-review lanes. -- Workflow graph nodes now resume cleanly after engine pause-aborts. -- Compact collapsed tool-call summaries in task-detail chat. -- Show Z.ai icons for GLM model rows in Command Center token analytics. -- Show active tasks by default in the right sidebar and fix its task-detail back button. -- Keep Compound Engineering tasks running through checkout recovery, PR review policy, and merge handoff. -- Harden workflow graph recovery against stale plan replays and foreign landed tips. -- Prevent rebuilt stepwise workflow tasks from failing at parse on stale step pins. -- Add consistent Plan Review, Code Review, and Browser Verification toggles to engineering workflows. -- Make dashboard retry clear stale workflow step pins before re-execution. -- Separate Anthropic API-key auth from Claude subscription login cards. -- Let workflow graphs prepare task worktrees before coding-mode nodes run. -- Send ntfy notifications from workflow graph lifecycle and notify-node flows. -- Auto-retry stale parse pause-resume workflow failures instead of requiring operator action. -- Prevent Plan Review approvals from looping back into triage as failures. -- Route failed Plan Review workflow steps back through triage for automatic replanning. -- Prevent stale pause state from mislabeling workflow retries as engine pauses. -- Let workflow-owned steps finish out of order without false step-progress failures. -- Preserve files changed by workflow-owned parallel step sessions on task branches. -- Make built-in Code Review block merge when it requests revisions. -- Recover workflow retries that restart after step execution has already begun. -- Retry unavailable Plan Review without rewriting an accepted task plan. -- Keep Plan Review status visible while tasks execute after restart. -- Keep verification steps from starting before earlier workflow steps finish. -- Keep Plan Review status visible when execution resumes after stale merge cleanup. -- Stop routing failed workflow execution into the review column. -- Prevent workflow tasks from reaching Done without durable merge confirmation. -- Add inner padding to Task Detail chat message blocks. -- Prevent workflow tasks from completing with stale or partial merge proof. -- Swiping back on mobile now dismisses the open task detail view. -- Keep workflow merge nodes moving even when a workflow skips a review handoff. -- Show post-merge verification as a post-merge optional workflow step. -- Preserve dashboard workflow selections per project across Board, List, Header, and Graph. -- Prevent scoped workflow tasks from getting stranded by unrelated branch residue. -- Footer concurrency markers now line up with the running-agent counts. -- Keep Workflow simple-editor tabs reachable on mobile. -- Prevent executor prompt setup from failing when a recovered task has no saved prompt. -- Make task-detail Chat tool-call text easier to read without expanding collapsed rows. -- Keep built-in Code Review remediation recovering until review passes. -- Hide engine remediation banners while daemon auth token recovery is open. -- Retry unavailable Plan Review without rewriting existing task specs. -- Preserve explicit empty workflow step dependencies for parallel roots. -- Footer concurrency controls now ask before saving capacity changes. -- Show optional workflow block children as connected in the workflow editor. -- Remove deleted tasks from the board and right sidebar immediately after deletion. -- Stop logging non-actionable missing configured skill-pattern info messages. -- Reload the selected file when switching Files modal worktrees. -- Reuse fresh task data when returning to Board or List views. -- Dismiss mobile task details when Android Back is pressed before falling back to app exit. -- Preserve mobile board scroll after returning from task detail. -- Group Done column sort and archive actions in one accessible actions menu. -- Prevent fast workflow merges from completing before implementation steps run. -- Restore reliable terminal keyboard shortcuts in embedded CLI session terminals. -- Open Workflow simple-editor step details when rows are clicked. -- Make configured MCP tools available in planning and mission interviews. -- Preserve workflow setting values and prompt overrides during workflow export/import. -- Move the mobile task-detail workflow badge beside the updated timestamp. -- Fix the mobile Engine Controls menu placement. -- Document workflow-authoring tools in the packaged Fusion skill. -- Mobile back now reliably dismisses the open task detail, including right after closing and reopening it. -- Move All workflows Board task-card workflow badges to the bottom-left. -- Move task-detail workflow badges into the Updated timestamp metadata row. -- Restore the Board All workflows view after refresh. -- Fix mobile terminal spacing after folded viewport changes. -- Fix the mobile terminal workspace picker so its menu stays visible and reachable. -- Collapse custom shadcn color controls by default in dashboard theme surfaces. -- Remove the board quick-add Plan button while keeping New Task planning available. -- Fix mobile terminal spacing when folded phones open with the keyboard already visible. -- Let Anthropic subscription login power Anthropic model requests without a raw API key. -- Make built-in Plan Review and Code Review revisions unbounded unless workflows set a cap. -- Refresh dashboard task state immediately after Retry succeeds. -- Show workflow icons and wider names in the Quick Add workflow selector. -- Count ephemeral task-worker runs in Command Center activity stats. -- Fix mobile terminal character spacing after small font-size changes. -- Hide Quick Add node pickers when only local execution is available. -- Make the Quick Add workflow selector compact while keeping long menu names readable. -- Preserve legacy task feed and raw log access under Activity. -- Reuse the shared question UI for task-detail planner Chat clarification prompts. -- Fix mobile Planning Mode summary description Expand and Collapse controls. -- Collapse task-detail branch groups by default with a more compact summary. -- Hide branch group chrome while the task Activity chat is maximized. -- Move the Quick Add attachment button next to Save in the expanded action row. -- Keep Planner Chat compact while preserving expanded task controls. -- Rename the task-detail title summarization button to Summarize. -- Remove the AI Refine action from Quick Add task creation. -- Make task planner chats appear only after user interaction and expire on archive. -- Make Shadcn Ember color tokens match Ember exactly. -- Align footer concurrency current-use dots with Command Center sliders. -- Replan active tasks after confirming execution-mode changes. -- Preserve board column scroll during dashboard refresh and viewport stabilization. -- Remove the extra steering guidance copy from task Activity chat. -- Replace task Activity subtabs with a compact Live, Feed, Raw dropdown. -- Persist Remote Access settings when saving from the dashboard on Windows. -- Keep the mobile Planning Mode New session button pinned at the bottom. -- Use workflow Plan Review as the single pre-execution plan gate. -- Keep Plan Review in triage and prevent duplicate execution-time plan reviews. -- Preserve Quick Add tasks with all workflow optional steps unchecked. -- Record completion summaries for workflow-driven tasks. -- Block workflow tasks from bypassing merge proof when finalizing to done. -- Show workflow review failures as explicit replan and remediation nodes. -- Stop showing stale in-review stall badges while agents are actively streaming logs. -- Keep dashboard workflow selection stable after creating refinement tasks. -- Prevent workflow tasks from duplicating plan review during implementation. -- Retry workflow merge-node pause aborts while merge review is active. -- Keep Planner Chat compact on mobile with an inline composer and provider-icon model badge. -- Add task activity breadcrumbs for workflow pause-abort recovery. -- Align per-step review coding with default coding gates and session settings. -- Stop repeat no-op phantom-reservation audit writes and preserve the worktree across phantom binding reclaim. -- Make the task Plan prompt editor span the full task-detail card width. -- Scope external-integration plan evidence checks to Coding (per-step review). -- Keep Planner Chat expanded context visible while removing repeated header guidance. -- Compact Planner Chat chrome and align Activity Live with the same plain composer row. -- Keep Planner Chat spacing stable when expanding task details. -- Keep refinement tasks on the source task workflow board. -- Refresh branch group task-detail completion live as member tasks change. -- Remove the icon from the Quick Add Plan action while preserving the text button behavior. -- Remove redundant workflow labels from expanded task-card step lists. -- Allow review steps to target a validated external checkout. -- Keep task-detail Activity segment tabs equal-height with smaller labels. -- Retry configured fallback models when a selected provider model returns a not-found error. -- Wait for task store secret database handles to close before cleanup. -- Add clearer spacing between workflow badge icons and labels. -- Keep Board and List workflow choices selected across refreshes and route returns. -- Prevent stale workflow recovery log entries from sending incorrect notifications. -- Harden workflow lifecycle recovery, post-merge gates, warnings, and notifications. +- @fusion/core@0.52.0 +- @fusion/dashboard@0.52.0 +- @fusion/engine@0.52.0 -### Performance +### @fusion/engine -- Skip unchanged plugin builds during workspace builds. +#### Patch Changes + +- @fusion/core@0.52.0 +- @fusion/pi-claude-cli@0.52.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.52.0 + +### @runfusion/fusion + +#### Minor Changes + +- 42226ed: summary: Expose workflow authoring tools through the published agent extension API. + category: feature + dev: Registers fn_workflow_create/update/delete/settings/get/select/list and fn_trait_list in the pi extension. +- 353aaf3: summary: Allow task image artifacts to be created from agent tools and viewed in task details. + category: feature + dev: Adds `dataBase64` support to `fn_artifact_register` and task-detail image preview expansion. +- 6cf6ad3: summary: Add a setting to control whether clicking outside the Quick Chat window closes it. + category: feature + dev: New project setting `quickChatCloseOnOutsideClick` (default true, preserving FN-7152 behavior). Wired through ProjectSettings/DEFAULT_PROJECT_SETTINGS, useAppSettings, the Settings → General toggle, and the Quick Chat FloatingWindow `closeOnOutsidePointerDown` prop. Project-scoped only. +- 013d50f: summary: Add Anthropic API-key authentication under Authentication. + category: feature + dev: Adds Anthropic built-in API-key provider auth and surfaces Anthropic dual OAuth/API-key cards in onboarding and Settings. +- f3d9bfb: summary: Add a Tasks tab to the right sidebar that shows the last-viewed task or a clickable task list. + category: feature + dev: New `tasks` overflow-view registry entry + `DockTaskList` empty state. The FN-7169 dock-task overlay is re-anchored to the Tasks tab; the task snapshot now persists across tab switches and clears on back/close or surface teardown. Default dock view stays `files`. +- 5b668d2: summary: Let operators sort the board Done column by completion date or task ID. + category: feature + dev: Adds Done-column-only descending sort modes while preserving existing completion-date default ordering. +- 797b30c: summary: Add a Board dropdown option that shows tasks across all workflows. + category: feature + dev: Uses a dashboard-only aggregate workflow sentinel that is not sent to workflow APIs or durable selection. +- 797b30c: summary: Show workflow-name badges on Board cards in the All workflows view. + category: feature + dev: Adds aggregate Board task-card workflow metadata threading through Column and WorktreeGroup. +- 4623211: summary: Add a terminal worktree picker for opening shells in task worktrees. + category: feature + dev: Dashboard terminal sessions now pass an authorized cwd for selected project worktrees. +- 480d4d0: summary: Let Git Manager jump from worktrees to their read-only commit history. + category: feature + dev: Adds Git Manager worktree commit-target UI and responsive styling. +- 480d4d0: summary: Let Git Manager inspect commit history from known git worktrees. + category: feature + dev: Adds read-only worktreePath targeting for commit list and diff endpoints. +- 924bcb9: summary: Add task context menus on board and list cards. + category: feature + dev: Board TaskCard and ListView row/card surfaces now support right-click, keyboard, and touch long-press action menus. +- 17fce43: summary: Add a mobile setting to open board tasks in the existing popup. + category: feature + dev: Adds project setting `openMobileTasksInPopup` and mobile-only board-card routing to task FloatingWindow. +- ebb805d: summary: Add a global setting to control modal backdrop dismissal. + category: feature + dev: Adds dismissModalsOnOutsideClick as a global-only dashboard preference, defaulting false. +- ea0707c: summary: Add a project setting for absolute workspace file-browser paths. + category: feature + dev: Adds allowAbsoluteFileBrowserPaths for workspace file-browser routes while keeping the default confined. +- 6c8884e: summary: Add a quick-add workflow selector for Board and List task creation. + category: feature + dev: The selector drives save, planning, subtask handoff, and workflow-step loading without submitting the aggregate workflow sentinel. +- 5f67c85: summary: Show workflow identity with icons instead of built-in text suffixes. + category: feature + dev: Adds optional custom workflow icon metadata and renders Fusion icons for built-in workflows. +- f0a15db: summary: Add Command Center task-duration trend lines for average and median completed active time. + category: feature + dev: Extends productivity analytics with taskDurationTrend buckets sourced from completed task cumulativeActiveMs. +- 2335a07: summary: Add Claude Sonnet 5 across Anthropic model selection and execution paths. + category: feature + dev: Adds supplemental direct Anthropic and pi-claude-cli model metadata plus pricing for `claude-sonnet-5`. +- e6be1f7: summary: Add Activity segments for current task activity, Feed, and Raw Logs. + category: feature + dev: Task detail keeps legacy initialTab="logs" compatibility by routing to Activity → Feed. +- db7b46f: summary: Add a task-detail Chat tab for planner-model conversations. + category: feature + dev: Adds task-scoped planner chat session routing and a dedicated TaskPlannerChatTab separate from Activity steering. +- 4550970: summary: Add starter prompts to the task-detail Chat empty state. + category: feature + dev: Planner Chat now renders guided empty-state prompt buttons that send ordinary chat messages. +- cb0d38a: summary: Convert clear task chat change requests into steering comments. + category: feature + dev: Task-detail planner Chat now asks for clarification before ambiguous or risky steering. +- 2f5e15a: summary: Make task details open with a focused planner Chat experience. + category: feature + dev: Reorders task-detail Chat before Activity, keeps legacy Activity tab ids, and pins the planner Chat composer. +- e2702ba: summary: Let workflow review nodes fix issues in the same reviewer session by default. + category: feature + dev: Adds reviewerInlineFixes workflow setting; off restores REVISE-to-remediation behavior. +- 6ce0b44: summary: Make Coding use stepwise execution with default-on Plan Review and final Code Review gates. + category: feature + dev: `builtin:coding` now uses the stepwise graph with `plan-review` before execution and no per-step or mandatory final review; the old graph is `builtin:legacy-coding`. +- da15c1c: summary: Rename the task Definition tab to Plan and add a PROMPT.md editor action. + category: feature + dev: Dashboard task details now open the current task's PROMPT.md via FileBrowserProvider. + +#### Patch Changes + +- b2e1c3e: summary: Plugin sidebar icons now refresh after a plugin rebuild instead of showing stale glyphs. + category: fix + dev: Dashboard-view metadata is re-derived from the authoritative on-disk manifest so rebuilt plugins do not serve stale dashboardViews icon, label, or placement values to navigation while the in-view bundle is current. +- 368f18c: summary: Restore required safety guidance in fast-mode task planning prompts. + category: fix + dev: Keeps `FAST_TRIAGE_PROMPT_TEXT` lean while restoring FN-5893, workflow-routing, artifact-location, and no-commit guidance asserted by engine prompt tests. +- 7eca99c: summary: Fast-mode tasks now clear optional steps by default while honoring manual selections. + category: fix + dev: Fast create surfaces submit explicit optional-step selections, and graph execution runs explicitly enabled optional groups even in fast mode. +- 01e0433: summary: Review gates now include user comments and steering context consistently. + category: fix + dev: Mandatory Plan Review, reviewStep callers, and prompt/custom workflow-step agents pass canonical user comment context. +- c54b231: summary: Make task details open Activity first by default with an opt-in Chat-first setting. + category: feature + dev: Adds project setting `taskDetailChatFirst` and exposes it in Settings → Appearance. +- 0ff60a7: summary: Show focused auth-token recovery when daemon authorization expires. + category: fix + dev: Handles exact daemon 401 recovery, focuses the replacement-token input, and suppresses engine remediation while recovery is open. +- 4441b72: summary: Prevent workflow task cards from showing later sequential steps active too early. + category: fix + dev: TaskStore now applies step dependency/order guards to in-progress updates as well as done updates. +- 5ec04ec: summary: Prevent fast Coding tasks from merging before implementation runs. + category: fix + dev: Fast mode now requires implementation proof at the workflow merge boundary. +- a3ad0c8: summary: Keep workflow completion summaries running for fast-mode tasks. + category: fix + dev: Excludes completion-summary/summaryTarget task nodes from the fast-mode custom review/gate skip path. +- 228554d: summary: Prevent Compound Engineering artifacts from showing stale project files after project switches. + category: fix + dev: Clears cached artifact discovery on project changes and opens CE artifacts through the project workspace. +- 7ea9aee: summary: Keep the Goals dashboard view scoped to the selected project. + category: fix + dev: Threads projectId through Goals view reads, mutations, mission links, and AI description drafting. +- 151800f: summary: Fix mobile Planning Mode description editing so spaces can be entered. + category: fix + dev: Guards Planning Mode summary normalization so editable fields keep normal text input. +- 3886e58: summary: Show Compound Engineering workflow stage progress on task cards and details. + category: fix + dev: Skill-backed workflow nodes now record graph-node progress separately from optional workflow toggles. +- befb49b: summary: Chat messages now use the full width in narrow popup and sidebar chats. + category: fix + dev: ChatView.css adds a `@container chat-view (max-width: 30rem)` rule setting `.chat-message` to max-width:100%, plus the mobile viewport rule bumped from 90% to 100%. +- 2051516: summary: Concurrency panels now prefer live engine counts so running-agent totals stay accurate. + category: fix + dev: Prefer engine-manager task stores over stale registered/default fallback stores in the dashboard live-count source; add regressions for count normalization and scoped semaphore live-limit behavior. +- a583446: summary: Task-detail chat messages now use the full width in the right sidebar and narrow detail views. + category: fix + dev: TaskChatTab.css makes .task-chat-tab a `container-type: inline-size` query container and adds `@container task-chat-tab (max-width: 34rem)` collapsing the agent-header grid column and widening `.task-chat-entry--user` to 100%. +- 969d03b: summary: Import Tasks view now fills the full height of the screen for Issues and Pull Requests. + category: fix + dev: Embedded GitHubImportModal `.github-import-modal__body` gets `flex: 1` outside the <=640px block so the flex/height chain fills `.project-content`. +- fac7556: summary: Fix review tasks stuck when merge retries starve the executor's code-review revision pass. + category: fix + dev: recoverCompletedTask now refuses workflow-graph re-entry when the live task has incomplete steps or a remediation bounce (sendTaskBackForFix → scheduleWorkflowRerun) is already scheduled, so a pre-merge optional/advisory REVISE that reopens plan steps lets the executor finish them instead of re-passing the advisory step (budget exhausted) and looping on the "task has incomplete steps" merge gate. Regression: restart.integration.test.ts. +- 8eed09c: summary: Fix planning/chat failures when image attachment bytes do not match the file extension. + category: fix + dev: Adds detectImageMimeFromBytes in core and applies it in triage and dashboard chat attachment read paths. +- 3a83868: summary: Apply task reviewer model overrides consistently to reviewer and code-review lanes. + category: fix + dev: Reviewer sessions now resolve primary models through the validator-lane resolver, including test-mode forcing. +- 58a0c1f: summary: Workflow graph nodes now resume cleanly after engine pause-aborts. + category: fix + dev: Distinguishes engine-internal in-flight node aborts from genuine workflow node failures, re-enters the node through a bounded graph resume path, and emits a run-audit event for the recovery. +- d87db14: summary: Compact collapsed tool-call summaries in task-detail chat. + category: fix + dev: Updates TaskChatTab tool-call summary styling, responsive behavior, tests, and docs. +- 0a8a86c: summary: Show Z.ai icons for GLM model rows in Command Center token analytics. + category: fix + dev: Maps standalone glm-\* model labels through the shared provider-icon inference helper. +- d0a369e: summary: Show active tasks by default in the right sidebar and fix its task-detail back button. + category: fix + dev: Filters the right-dock Tasks list to active tasks by default, adds a Show Done toggle, keeps archived tasks hidden, and wires the header back arrow to the existing dock task close path. +- d7f26bb: summary: Keep Compound Engineering tasks running through checkout recovery, PR review policy, and merge handoff. + category: fix + dev: Graph-native workflow nodes reacquire missing worktrees, gate manual PR review on auto-merge off, link PRs to tasks, and project successful node progress at merge. +- e963be4: summary: Harden workflow graph recovery against stale plan replays and foreign landed tips. + category: fix + dev: Classifies stale in-review plan pause/resume replays and verifies task ownership before already-merged recovery finalization. +- c7cbd1d: summary: Prevent rebuilt stepwise workflow tasks from failing at parse on stale step pins. + category: fix + dev: Spec rebuild and AI replan handoff now clear persisted workflow foreach instances before reparsing PROMPT.md. +- 6451828: summary: Add consistent Plan Review, Code Review, and Browser Verification toggles to engineering workflows. + category: fix + dev: Quick Fix seeds all three optional groups off; other engineering built-ins seed plan/code review on and browser verification off. +- 7cd5552: summary: Make dashboard retry clear stale workflow step pins before re-execution. + category: fix + dev: Clears persisted workflow step instances on manual execution retry so parse-steps can repin the current plan. +- 03d4f95: summary: Separate Anthropic API-key auth from Claude subscription login cards. + category: fix + dev: Adds anthropic-subscription OAuth and anthropic-api-key UI ids mapped to upstream Anthropic credential storage. +- 57d8065: summary: Let workflow graphs prepare task worktrees before coding-mode nodes run. + category: fix + dev: Adds graph-owned node preparation so executor adapters only fulfill declared worktree requirements. +- 4184062: summary: Send ntfy notifications from workflow graph lifecycle and notify-node flows. + category: fix + dev: Workflow column transitions now use moveTask events; workflow-notify is enabled in default ntfy events. +- 1d21241: summary: Auto-retry stale parse pause-resume workflow failures instead of requiring operator action. + category: fix + dev: Re-enters safe in-review parse pause-abort replays with the shared graph resume retry budget. +- c93217d: summary: Prevent Plan Review approvals from looping back into triage as failures. + category: fix + dev: Parses explicit reviewer prose verdicts and applies default-on optional workflow steps when no explicit selection exists. +- b86ddf4: summary: Route failed Plan Review workflow steps back through triage for automatic replanning. + category: fix + dev: Orders Plan Review before execution steps and sends failed Plan Review results to needs-replan instead of executor fixes. +- 1f36516: summary: Prevent stale pause state from mislabeling workflow retries as engine pauses. + category: fix + dev: Clears executor pause-abort provenance on fresh dispatch, Plan Review replan, and manual retry. +- 399a4a2: summary: Let workflow-owned steps finish out of order without false step-progress failures. + category: fix + dev: Graph-owned step sessions now project step status with graph semantics and prompt agents not to call lifecycle update tools. +- 50ccd79: summary: Preserve files changed by workflow-owned parallel step sessions on task branches. + category: fix + dev: Step-session cherry-pick now uses merge-base ranges and skips empty cherry-picks instead of dropping real step commits. +- 6239b2a: summary: Make built-in Code Review block merge when it requests revisions. + category: fix + dev: Generic built-in code-review optional groups now use gateMode: gate; Browser Verification remains advisory. +- cb94fc8: summary: Recover workflow retries that restart after step execution has already begun. + category: fix + dev: Treat persisted foreach step pins as a parse resume signal instead of a graph failure. +- 2b73a0a: summary: Retry unavailable Plan Review without rewriting an accepted task plan. + category: fix + dev: Adds a triage retry path for plan-review-unavailable tasks that reuses PROMPT.md. +- c088f8a: summary: Keep Plan Review status visible while tasks execute after restart. + category: fix + dev: Preserves and repairs plan-review workflowStepResults when merge-state cleanup or old rows erased them. +- f430f5d: summary: Keep verification steps from starting before earlier workflow steps finish. + category: fix + dev: Step-session wave planning now respects graph step dependencies; unannotated steps remain sequential by default. +- 05c54fb: summary: Keep Plan Review status visible when execution resumes after stale merge cleanup. + category: fix + dev: Reconstructs passed Plan Review rows from task logs and makes mock test-mode sessions emit workflow-step parser events. +- 984e362: summary: Stop routing failed workflow execution into the review column. + category: fix + dev: Graph and execution failures now stay executable or failed in-place instead of handing errored tasks to in-review. +- 875cfad: summary: Prevent workflow tasks from reaching Done without durable merge confirmation. + category: fix + dev: Workflow graph merge finalization now requires mergeConfirmed proof before accepting done/no-op states. +- 6ce61af: summary: Add inner padding to Task Detail chat message blocks. + category: fix + dev: Keeps text, user, tool, and thinking block padding tokenized and border-boxed with responsive regression coverage. +- 123639c: summary: Prevent workflow tasks from completing with stale or partial merge proof. + category: fix + dev: Workflow finalization now validates incomplete steps, no-op proof, and branch file coverage before done. +- d22b8cc: summary: Swiping back on mobile now dismisses the open task detail view. + category: fix + dev: Routes mobile task-detail opens through useNavigationHistory pushNav/removeNav so the native back gesture (popstate) reverts to the originating board/list/dock surface across all detail surfaces. +- 6fc50d8: summary: Keep workflow merge nodes moving even when a workflow skips a review handoff. + category: fix + dev: Workflow merge primitives now establish the in-review merge boundary before requesting merge; non-gate skill output no longer requires a verdict. +- a84afc1: summary: Show post-merge verification as a post-merge optional workflow step. + category: fix + dev: Preserves optional-group `config.phase` when resolving workflow optional steps. +- b363270: summary: Preserve dashboard workflow selections per project across Board, List, Header, and Graph. + category: fix + dev: Board/List/Header/Graph workflow selection uses project-scoped localStorage and repairs stale ids. +- 41c0cf3: summary: Prevent scoped workflow tasks from getting stranded by unrelated branch residue. + category: fix + dev: Built-in optional workflow gates now default to three remediation attempts and review fixes carry File Scope guardrails. +- 7b43f73: summary: Footer concurrency markers now line up with the running-agent counts. + category: fix + dev: Align EngineControlMenu current-use marker math with CommandCenterControls by mapping utilization as current / cap instead of slider min/max coordinates. +- 167d242: summary: Keep Workflow simple-editor tabs reachable on mobile. + category: fix + dev: Makes the simple editor tab strip horizontally pannable on narrow touch viewports. +- a766813: summary: Prevent executor prompt setup from failing when a recovered task has no saved prompt. + category: fix + dev: Guards worktree prompt scoping against undefined task prompts while quarantining stale post-cutover engine tests. +- e80d85b: summary: Make task-detail Chat tool-call text easier to read without expanding collapsed rows. + category: fix + dev: TaskChatTab tool-call summary, kicker, label, and detail typography now use the readable base spacing token. +- c6c4a00: summary: Show timestamps on each task-detail chat block. + category: feature + dev: Adds per-block TaskChatTab timestamp rendering and regression coverage for text, tool, thinking, and user blocks. +- 9fd286b: summary: Keep built-in Code Review remediation recovering until review passes. + category: fix + dev: Built-in Code Review now defaults maxRevisions to unbounded while preserving workflow-authored numeric caps. +- 797b30c: summary: Show workflow names on aggregate board cards and task detail headers when available. + category: feature + dev: Reuses the board-workflows payload for detail custom fields and workflow-name badges. +- 0ff60a7: summary: Hide engine remediation banners while daemon auth token recovery is open. + category: fix + dev: Threads authTokenRecoveryOpen through DashboardBanners to suppress EngineStatusBanner and EngineUnavailableBanner. +- 6f2b8ab: summary: Retry unavailable Plan Review without rewriting existing task specs. + category: fix + dev: plan-review-unavailable triage tasks now rerun Plan Review/finalization from the existing PROMPT.md under global agent concurrency instead of launching the planner. +- 90b62b7: summary: Preserve explicit empty workflow step dependencies for parallel roots. + category: fix + dev: Keeps omitted dependsOn as previous-step fallback while treating [] as no dependencies. +- ffe2092: summary: Footer concurrency controls now ask before saving capacity changes. + category: fix + dev: Mirrors Command Center confirmation semantics in EngineControlMenu so global and per-project concurrency edits persist only after explicit confirmation. +- 7427fa3: summary: Show optional workflow block children as connected in the workflow editor. + category: fix + dev: Adds non-editable visual-only optional-group boundary connectors that are filtered from workflow IR saves. +- e4a9dc6: summary: Remove deleted tasks from the board and right sidebar immediately after deletion. + category: fix + dev: Updates the dashboard `useTasks` delete path to remove successfully deleted task ids from shared state and project task cache without waiting for SSE/refetch. +- ed21597: summary: Stop logging non-actionable missing configured skill-pattern info messages. + category: fix + dev: Missing configured skill patterns remain resolver diagnostics but are no longer emitted as runtime info logs. +- 224e8b4: summary: Reload the selected file when switching Files modal worktrees. + category: fix + dev: Keeps Files modal selected-path state while changing workspace/worktree. +- 480d4d0: summary: Let Git Manager inspect commit history from known worktrees. + category: feature + dev: Adds read-only Commits history targeting for Git-listed worktrees; mutating actions remain scoped to the current repository target. +- 45dd808: summary: Reuse fresh task data when returning to Board or List views. + category: fix + dev: Skips the useTasks false-to-true SSE catch-up fetch while the in-memory snapshot is within SWR_TASKS_MAX_AGE_MS. +- 9fb7069: summary: Dismiss mobile task details when Android Back is pressed before falling back to app exit. + category: fix + dev: Routes Capacitor Android Back through the dashboard navigation-history stack via a cancelable native event. +- d05ca21: summary: Preserve mobile board scroll after returning from task detail. + category: fix + dev: Restores the mobile board/card scroll snapshot after Back to board remounts the board. +- a039c93: summary: Group Done column sort and archive actions in one accessible actions menu. + category: fix + dev: Updates dashboard Done/complete column headers to use the shared column actions dropdown. +- 41ff08a: summary: Prevent fast workflow merges from completing before implementation steps run. + category: fix + dev: Blocks stale no-op merge proof from trapping unfinished workflow tasks and requeues premature merge-node failures. +- 2735534: summary: Restore reliable terminal keyboard shortcuts in embedded CLI session terminals. + category: fix + dev: SessionTerminal now mirrors TerminalModal copy/paste filtering, suppresses prop/read-only-ticket replay input, and keeps mobile composer submit on one path. +- b5da5d3: summary: Refresh custom provider model lists at startup and from Settings. + category: feature + dev: Adds persisted custom-provider model refresh routes and startup best-effort refresh for dashboard, serve, and daemon. +- a0b35c1: summary: Open Workflow simple-editor step details when rows are clicked. + category: fix + dev: Restores the simple graph row/pencil selection path for compact and mobile workflow editing. +- 3e0391e: summary: Make configured MCP tools available in planning and mission interviews. + category: fix + dev: Adds an explicit read-only MCP opt-in for planning and mission session factories with regression coverage. +- 04f06e6: summary: Preserve workflow setting values and prompt overrides during workflow export/import. + category: fix + dev: Workflow export envelopes now include settingValues and promptOverrides; imports restore them onto the new workflow id with store validation. +- d04ee5b: summary: Move the mobile task-detail workflow badge beside the updated timestamp. + category: fix + dev: Keeps the desktop task-detail header badge while showing a mobile-only timestamp-group badge. +- c848ce1: summary: Fix the mobile Engine Controls menu placement. + category: fix + dev: Keeps the footer EngineControlMenu as a viewport-safe mobile/tablet bottom panel while preserving the desktop anchored popover. +- 94ddfe1: summary: Document workflow-authoring tools in the packaged Fusion skill. + category: fix + dev: Syncs workflow extension registrations into generated skill references and capability tables. +- 8f0fde8: summary: Mobile back now reliably dismisses the open task detail, including right after closing and reopening it. + category: fix + dev: Hardens useNavigationHistory against close-reopen races and history/stack desync so popstate (and the fusion:native-back event) deterministically dismisses every task-detail surface. +- 52e4a26: summary: Move All workflows Board task-card workflow badges to the bottom-left. + category: fix + dev: Updates TaskCard workflowBadge placement and dashboard layout coverage. +- 85e925a: summary: Move task-detail workflow badges into the Updated timestamp metadata row. + category: fix + dev: Uses one canonical task-detail workflow badge across desktop and mobile detail surfaces. +- 082dd55: summary: Restore the Board All workflows view after refresh. + category: fix + dev: Persists the Board-only aggregate workflow sentinel while filtering it out of real-workflow selectors. +- ac87b1e: summary: Fix mobile terminal spacing after folded viewport changes. + category: fix + dev: Re-baselines terminal keyboard viewport metrics when foldable devices settle to a narrower posture. +- b450dd4: summary: Fix the mobile terminal workspace picker so its menu stays visible and reachable. + category: fix + dev: Portals and viewport-constrains the TerminalModal worktree listbox while preserving tab cwd semantics. +- 6b3eec0: summary: Collapse custom shadcn color controls by default in dashboard theme surfaces. + category: fix + dev: Adds an accessible shared show/collapse affordance for the custom shadcn color picker. +- 3cd5695: summary: Remove the board quick-add Plan button while keeping New Task planning available. + category: fix + dev: QuickEntryBox and InlineCreateCard no longer render data-testid="plan-button" or Plan click targets. +- 8f65186: summary: Fix mobile terminal spacing when folded phones open with the keyboard already visible. + category: fix + dev: TerminalModal now uses layout-viewport height for the initial focused keyboard-open folded posture and tests cover TerminalModal plus SessionTerminal. +- 70d7dca: summary: Skip unchanged plugin builds during workspace builds. + category: performance + dev: Root pnpm build now uses a git content-hash plugin build cache that includes local workspace dependency and root build config/tooling inputs. +- 9460497: summary: Let Anthropic subscription login power Anthropic model requests without a raw API key. + category: fix + dev: Bridges runtime provider `anthropic` to OAuth credentials stored under `anthropic-subscription` while preserving raw API-key precedence. +- 7e74fe3: summary: Make built-in Plan Review and Code Review revisions unbounded unless workflows set a cap. + category: fix + dev: Adds workflow values planReviewMaxRevisions and codeReviewMaxRevisions for per-workflow caps, including read-only built-ins. +- c5dd8c5: summary: Refresh dashboard task state immediately after Retry succeeds. + category: fix + dev: useTasks now replaces matching retry rows, updates project SWR task cache, and invalidates older fetches. +- 7beb64e: summary: Show workflow icons and wider names in the Quick Add workflow selector. + category: fix + dev: Reuses WorkflowIcon in QuickEntryBox and widens the tokenized selector/menu styles. +- 7f3bd80: summary: Count ephemeral task-worker runs in Command Center activity stats. + category: fix + dev: Activity analytics now unions usage_events and agentRuns by agent id for active-agent range/day counts. +- 2132a1c: summary: Fix mobile terminal character spacing after small font-size changes. + category: fix + dev: Reapplies settled xterm font metrics for TerminalModal and SessionTerminal at 10px keyboard-open states. +- 211b18b: summary: Make Shadcn Ember the default dashboard theme. + category: feature + dev: Adds the shadcn-ember color theme and updates default theme fallbacks. +- 3dd02dd: summary: Hide Quick Add node pickers when only local execution is available. + category: fix + dev: QuickEntryBox and InlineCreateCard now clear hidden stale node overrides before create submission. +- ea93f68: summary: Show workflow icons in the full New Task workflow picker. + category: feature + dev: Replaces the create-time TaskForm workflow native select with an icon-capable styled dropdown while preserving workflowId payload semantics. +- 7ca6c78: summary: Make the Quick Add workflow selector compact while keeping long menu names readable. + category: fix + dev: Narrows only the closed QuickEntryBox workflow trigger; menu width and workflow routing remain unchanged. +- 21fc286: summary: Add icon-only Quick Add image attachments with drag-and-drop support. + category: feature + dev: QuickEntryBox now shares image selection, paste, and drop intake with accessible pending-count labels. +- 254e97d: summary: Rename the task-detail Chat tab to Activity and make it first. + category: feature + dev: Keeps the internal `chat` tab id compatible for existing deep links and plugin callers. +- bba415f: summary: Preserve legacy task feed and raw log access under Activity. + category: fix + dev: Keeps legacy task-detail logs callers routed to Activity → Feed while Raw Logs remains the only raw-log-fetching segment. +- f677ab4: summary: Add a steering entry affordance to task Activity. + category: feature + dev: Labels the Activity Current composer as steering/refinement and covers Feed/Raw Logs placement. +- ddfd841: summary: Make task-detail Chat answer status and progress questions from bounded task context. + category: feature + dev: Adds server-built task planner chat context and task-scoped send validation. +- 0915377: summary: Reuse the shared question UI for task-detail planner Chat clarification prompts. + category: fix + dev: Task planner Chat now renders fn_ask_question prompts through ChatQuestionResponse and marks submitted answers read-only. +- 9f72158: summary: Fix mobile Planning Mode summary description Expand and Collapse controls. + category: fix + dev: Splits the summary description label from adjacent Markdown and Expand controls and adds mobile regression coverage. +- 2284d66: summary: Collapse task-detail branch groups by default with a more compact summary. + category: fix + dev: Keeps branch-group member and PR actions available after expanding the task-detail card. +- 5e0c567: summary: Hide branch group chrome while the task Activity chat is maximized. + category: fix + dev: TaskDetailModal skips mounting BranchGroupCard during expanded Activity chat so branch controls are not focusable. +- 863c5ce: summary: Rename task Activity Current to Live and allow expanding all Activity segments. + category: feature + dev: Keeps legacy Activity `current`, `chat`, and `logs` routing compatibility while sharing the expand control across Live, Feed, and Raw Logs. +- d58ba26: summary: Move the Quick Add attachment button next to Save in the expanded action row. + category: fix + dev: Preserves FN-7304 icon-only attachment behavior while updating QuickEntryBox action order coverage. +- b52f92c: summary: Keep Planner Chat compact while preserving expanded task controls. + category: fix + dev: Aligns Planner Chat composer height with Activity chat and keeps Priority, Execution Mode, and tabs visible in expanded mobile task details. +- 4ae0456: summary: Rename the task-detail title summarization button to Summarize. + category: fix + dev: Updates task detail UI copy and focused dashboard tests. +- aa4c2c1: summary: Remove the AI Refine action from Quick Add task creation. + category: fix + dev: QuickEntryBox no longer renders or calls the refine-text path; TaskForm refine remains available. +- 7d2bd97: summary: Make task planner chats appear only after user interaction and expire on archive. + category: fix + dev: Planner-chat tabs now load history without pre-creating sessions; archive cleanup deletes task-planner sessions. +- ae1ca5c: summary: Make Shadcn Ember color tokens match Ember exactly. + category: fix + dev: Aligns Shadcn Ember inherited Ember-owned CSS tokens and adds regression coverage. +- d786e7b: summary: Align footer concurrency current-use dots with Command Center sliders. + category: fix + dev: Mirrors Command Center range geometry in the footer Engine Controls popup while preserving current/cap utilization math. +- 45b1ee6: summary: Replan active tasks after confirming execution-mode changes. + category: fix + dev: Dashboard inline execution-mode changes on todo/in-progress tasks now confirm and call the spec rebuild path. +- f840cbc: summary: Preserve board column scroll during dashboard refresh and viewport stabilization. + category: fix + dev: Narrows mobile board stabilization so task/workflow refresh and resize events pin document drift without resetting #board.scrollLeft. +- 5ff81cb: summary: Remove the extra steering guidance copy from task Activity chat. + category: fix + dev: Keeps the Activity composer APIs intact while removing the visible TaskChatTab label/hint shell. +- 4ab4aae: summary: Replace task Activity subtabs with a compact Live, Feed, Raw dropdown. + category: fix + dev: Keeps legacy Activity segment ids and initial-tab routing while removing the old segmented-control shell. +- 519f158: summary: Persist Remote Access settings when saving from the dashboard on Windows. + category: fix + dev: Main Settings Save now writes the canonical remoteAccess settings payload. +- 058a041: summary: Keep the mobile Planning Mode New session button pinned at the bottom. + category: fix + dev: Bounds the mobile Planning sessions list so only saved sessions scroll above the footer CTA. +- 998a7f2: summary: Use workflow Plan Review as the single pre-execution plan gate. + category: fix + dev: Triage no longer injects fn_review_spec or requires a separate spec-review approval before workflow execution. +- 36d090c: summary: Keep Plan Review in triage and prevent duplicate execution-time plan reviews. + category: fix + dev: Triage now runs enabled Plan Review before releasing tasks to execution; execution graph skips an already-passed Plan Review. +- 998a7f2: summary: Preserve Quick Add tasks with all workflow optional steps unchecked. + category: fix + dev: Sends empty enabledWorkflowSteps from Quick Add and honors explicit empty workflow selections in task details. +- 2135bd6: summary: Record completion summaries for workflow-driven tasks. + category: fix + dev: Workflow graph completions and resumed workflow merge work items now backfill task.summary when no agent summary exists. +- b169072: summary: Block workflow tasks from bypassing merge proof when finalizing to done. + category: fix + dev: Adds a workflow done-bypass guard for selected workflow tasks using skipMergeBlocker. +- 24d7881: summary: Show workflow review failures as explicit replan and remediation nodes. + category: fix + dev: Built-in review gate failures now route to graph-owned remediation nodes before executor scheduling fallback. +- 4a1a043: summary: Stop showing stale in-review stall badges while agents are actively streaming logs. + category: fix + dev: TaskStore stall hydration now treats fresh buffered or persisted agent-log activity as active ownership. +- 2a5a108: summary: Keep dashboard workflow selection stable after creating refinement tasks. + category: fix + dev: Done-task chat refinement now clears its temporary composer bubble after successful creation. +- 9e23d6c: summary: Prevent workflow tasks from duplicating plan review during implementation. + category: fix + dev: Graph-owned execution sessions no longer receive or prompt for legacy per-step review tools. +- 234248a: summary: Retry workflow merge-node pause aborts while merge review is active. + category: fix + dev: Treats transient in-review statuses such as reviewing/merging as safe for bounded merge retry. +- 6005f89: summary: Keep Planner Chat compact on mobile with an inline composer and provider-icon model badge. + category: fix + dev: Adjusts TaskPlannerChatTab mobile CSS and replaces the text model badge with a ProviderIcon tooltip. +- 3327953: summary: Add task activity breadcrumbs for workflow pause-abort recovery. + category: fix + dev: Logs pause-abort marker source, aborted surfaces, and graph classification details. +- eb83c81: summary: Align per-step review coding with default coding gates and session settings. + category: fix + dev: Removes the extra generic review seam from Coding (per-step review) and makes StepSessionExecutor honor runStepsInNewSessions=false by reusing the primary sequential session while keeping graph step-review boundaries. +- cfd9d5b: summary: Stop repeat no-op phantom-reservation audit writes and preserve the worktree across phantom binding reclaim. + category: fix + dev: reconcilePhantomCommittedReservations now emits the task:reconcile-phantom-committed-reservation audit row only when orphaned child rows were actually pruned, instead of every maintenance tick (~19k wasted writes/day); the committed reservation stays committed so the ID is never reused. clearPhantomExecutorBinding gains a preserveWorktrees option the self-healing phantom reclaim uses so moveTask(preserveWorktree:true) re-dispatch reattaches to the same worktree instead of orphaning it and acquiring a new one (FN-7249). Regression: store-phantom-reservation-reconcile.test.ts, executor-workspace.test.ts. +- d96eb3c: summary: Make the task Plan prompt editor span the full task-detail card width. + category: fix + dev: Adds scoped TaskDetailModal Plan prompt width guards for modal, embedded, and mobile surfaces. +- 658b351: summary: Scope external-integration plan evidence checks to Coding (per-step review). + category: fix + dev: Triage no longer blocks generated plans for missing external evidence; the per-step review Plan Review gate does. +- e37260b: summary: Keep Planner Chat expanded context visible while removing repeated header guidance. + category: fix + dev: Planner Chat hides the header subtext, keeps that guidance in the empty state, and preserves title/workflow context when expanded on mobile. +- 7c53c97: summary: Compact Planner Chat chrome and align Activity Live with the same plain composer row. + category: fix + dev: Planner Chat removes its redundant header, moves the provider icon to the empty state, and Activity Live drops its card-wrapped composer shell. +- 65822a0: summary: Keep Planner Chat spacing stable when expanding task details. + category: fix + dev: Stabilizes task-detail Planner Chat CSS so expanded mode changes height allocation without padding jumps. +- 2a5a108: summary: Keep refinement tasks on the source task workflow board. + category: fix + dev: TaskStore.refineTask now inherits explicit workflow selections atomically during creation. +- c1d7da3: summary: Refresh branch group task-detail completion live as member tasks change. + category: fix + dev: Refetches branch group summaries on task lifecycle SSE events and reconnect. +- a92f15e: summary: Remove the icon from the Quick Add Plan action while preserving the text button behavior. + category: fix + dev: Updates QuickEntryBox and regression coverage for the text-only Plan action. +- 5ee1964: summary: Remove redundant workflow labels from expanded task-card step lists. + category: fix + dev: Workflow step rows still show names, status dots, and active badges; the aggregate card workflow badge is unchanged. +- b829821: summary: Allow review steps to target a validated external checkout. + category: fix + dev: Resolves explicit review checkout metadata before spawning read-only step reviewers. +- a48ff30: summary: Keep task-detail Activity segment tabs equal-height with smaller labels. + category: fix + dev: Normalizes Live/Feed/Raw Logs segmented-control sizing in the dashboard task detail panel. +- 8079722: summary: Retry configured fallback models when a selected provider model returns a not-found error. + category: fix + dev: Classifies structured provider model 404 payloads, including Anthropic not_found_error, as model-selection failures. +- 90756f9: summary: Wait for task store secret database handles to close before cleanup. + category: fix + dev: Awaits the async secrets store close path during TaskStore shutdown to avoid teardown races. +- 1bf86d1: summary: Add clearer spacing between workflow badge icons and labels. + category: fix + dev: Applies token-based column gaps to dashboard task-card and task-detail workflow badges. +- b363270: summary: Keep Board and List workflow choices selected across refreshes and route returns. + category: fix + dev: Uses project-scoped localStorage workflow-selection helpers shared with header and graph selectors. +- 50f8807: summary: Prevent stale workflow recovery log entries from sending incorrect notifications. + category: fix + dev: Adds workflowTransitionNotification task markers for pause-abort recovery requeues and avoids log-text notification heuristics. +- e09d450: summary: Harden workflow lifecycle recovery, post-merge gates, warnings, and notifications. + category: fix + dev: Adds post-merge gate blocking, lifecycle warning analysis, recovery-route audit metadata, and workflow transition notification classification. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [b2e1c3e] +- Updated dependencies [368f18c] +- Updated dependencies [42226ed] +- Updated dependencies [7eca99c] +- Updated dependencies [01e0433] +- Updated dependencies [c54b231] +- Updated dependencies [0ff60a7] +- Updated dependencies [4441b72] +- Updated dependencies [5ec04ec] +- Updated dependencies [a3ad0c8] +- Updated dependencies [228554d] +- Updated dependencies [7ea9aee] +- Updated dependencies [151800f] +- Updated dependencies [3886e58] +- Updated dependencies [353aaf3] +- Updated dependencies [6cf6ad3] +- Updated dependencies [befb49b] +- Updated dependencies [2051516] +- Updated dependencies [013d50f] +- Updated dependencies [a583446] +- Updated dependencies [969d03b] +- Updated dependencies [fac7556] +- Updated dependencies [f3d9bfb] +- Updated dependencies [8eed09c] +- Updated dependencies [3a83868] +- Updated dependencies [58a0c1f] +- Updated dependencies [d87db14] +- Updated dependencies [0a8a86c] +- Updated dependencies [d0a369e] +- Updated dependencies [d7f26bb] +- Updated dependencies [e963be4] +- Updated dependencies [c7cbd1d] +- Updated dependencies [6451828] +- Updated dependencies [7cd5552] +- Updated dependencies [03d4f95] +- Updated dependencies [57d8065] +- Updated dependencies [4184062] +- Updated dependencies [1d21241] +- Updated dependencies [c93217d] +- Updated dependencies [b86ddf4] +- Updated dependencies [1f36516] +- Updated dependencies [399a4a2] +- Updated dependencies [50ccd79] +- Updated dependencies [6239b2a] +- Updated dependencies [cb94fc8] +- Updated dependencies [2b73a0a] +- Updated dependencies [c088f8a] +- Updated dependencies [f430f5d] +- Updated dependencies [05c54fb] +- Updated dependencies [984e362] +- Updated dependencies [875cfad] +- Updated dependencies [6ce61af] +- Updated dependencies [123639c] +- Updated dependencies [d22b8cc] +- Updated dependencies [6fc50d8] +- Updated dependencies [a84afc1] +- Updated dependencies [b363270] +- Updated dependencies [41c0cf3] +- Updated dependencies [7b43f73] +- Updated dependencies [167d242] +- Updated dependencies [5b668d2] +- Updated dependencies [a766813] +- Updated dependencies [e80d85b] +- Updated dependencies [c6c4a00] +- Updated dependencies [797b30c] +- Updated dependencies [9fd286b] +- Updated dependencies [797b30c] +- Updated dependencies [797b30c] +- Updated dependencies [0ff60a7] +- Updated dependencies [6f2b8ab] +- Updated dependencies [90b62b7] +- Updated dependencies [ffe2092] +- Updated dependencies [7427fa3] +- Updated dependencies [e4a9dc6] +- Updated dependencies [ed21597] +- Updated dependencies [224e8b4] +- Updated dependencies [4623211] +- Updated dependencies [480d4d0] +- Updated dependencies [480d4d0] +- Updated dependencies [480d4d0] +- Updated dependencies [924bcb9] +- Updated dependencies [45dd808] +- Updated dependencies [9fb7069] +- Updated dependencies [d05ca21] +- Updated dependencies [17fce43] +- Updated dependencies [a039c93] +- Updated dependencies [41ff08a] +- Updated dependencies [ebb805d] +- Updated dependencies [2735534] +- Updated dependencies [b5da5d3] +- Updated dependencies [ea0707c] +- Updated dependencies [a0b35c1] +- Updated dependencies [3e0391e] +- Updated dependencies [04f06e6] +- Updated dependencies [d04ee5b] +- Updated dependencies [c848ce1] +- Updated dependencies [94ddfe1] +- Updated dependencies [8f0fde8] +- Updated dependencies [6c8884e] +- Updated dependencies [52e4a26] +- Updated dependencies [85e925a] +- Updated dependencies [082dd55] +- Updated dependencies [ac87b1e] +- Updated dependencies [b450dd4] +- Updated dependencies [5f67c85] +- Updated dependencies [f0a15db] +- Updated dependencies [6b3eec0] +- Updated dependencies [3cd5695] +- Updated dependencies [8f65186] +- Updated dependencies [70d7dca] +- Updated dependencies [2335a07] +- Updated dependencies [9460497] +- Updated dependencies [7e74fe3] +- Updated dependencies [c5dd8c5] +- Updated dependencies [7beb64e] +- Updated dependencies [7f3bd80] +- Updated dependencies [2132a1c] +- Updated dependencies [211b18b] +- Updated dependencies [3dd02dd] +- Updated dependencies [ea93f68] +- Updated dependencies [7ca6c78] +- Updated dependencies [21fc286] +- Updated dependencies [254e97d] +- Updated dependencies [e6be1f7] +- Updated dependencies [bba415f] +- Updated dependencies [f677ab4] +- Updated dependencies [db7b46f] +- Updated dependencies [4550970] +- Updated dependencies [ddfd841] +- Updated dependencies [cb0d38a] +- Updated dependencies [0915377] +- Updated dependencies [9f72158] +- Updated dependencies [2284d66] +- Updated dependencies [5e0c567] +- Updated dependencies [2f5e15a] +- Updated dependencies [863c5ce] +- Updated dependencies [d58ba26] +- Updated dependencies [b52f92c] +- Updated dependencies [4ae0456] +- Updated dependencies [aa4c2c1] +- Updated dependencies [7d2bd97] +- Updated dependencies [ae1ca5c] +- Updated dependencies [d786e7b] +- Updated dependencies [45b1ee6] +- Updated dependencies [f840cbc] +- Updated dependencies [5ff81cb] +- Updated dependencies [4ab4aae] +- Updated dependencies [519f158] +- Updated dependencies [058a041] +- Updated dependencies [998a7f2] +- Updated dependencies [36d090c] +- Updated dependencies [998a7f2] +- Updated dependencies [2135bd6] +- Updated dependencies [b169072] +- Updated dependencies [24d7881] +- Updated dependencies [4a1a043] +- Updated dependencies [2a5a108] +- Updated dependencies [9e23d6c] +- Updated dependencies [234248a] +- Updated dependencies [6005f89] +- Updated dependencies [3327953] +- Updated dependencies [eb83c81] +- Updated dependencies [cfd9d5b] +- Updated dependencies [d96eb3c] +- Updated dependencies [658b351] +- Updated dependencies [e37260b] +- Updated dependencies [7c53c97] +- Updated dependencies [65822a0] +- Updated dependencies [2a5a108] +- Updated dependencies [c1d7da3] +- Updated dependencies [a92f15e] +- Updated dependencies [5ee1964] +- Updated dependencies [e2702ba] +- Updated dependencies [b829821] +- Updated dependencies [a48ff30] +- Updated dependencies [8079722] +- Updated dependencies [6ce0b44] +- Updated dependencies [90756f9] +- Updated dependencies [da15c1c] +- Updated dependencies [1bf86d1] +- Updated dependencies [b363270] +- Updated dependencies [50f8807] +- Updated dependencies [e09d450] + - @runfusion/fusion@0.52.0 ## 0.51.0 -### Highlights +### @fusion/dashboard -- Add a Chat tab to the right sidebar so you can chat inline and pop it out. -- Tasks with a manually-created open Pull Request are no longer auto-merged. -- Fast-mode tasks now plan with a lean, speed-first prompt routed through the workflow. -- CE HTML plans and brainstorm docs now get report-only ce-doc-review instead of being skipped. -- CE HTML docs now support DOM-validated in-place ce-doc-review fixes with report-only fallback. +#### Patch Changes -### New +- @fusion/core@0.51.0 +- @fusion/engine@0.51.0 +- @fusion/i18n@0.39.14 +- @fusion-plugin-examples/cli-printing-press@0.1.31 +- @fusion-plugin-examples/compound-engineering@0.1.14 +- @fusion-plugin-examples/dependency-graph@0.1.45 +- @fusion-plugin-examples/roadmap@0.1.33 +- @fusion-plugin-examples/cursor-runtime@0.1.33 +- @fusion-plugin-examples/droid-runtime@0.1.40 +- @fusion-plugin-examples/hermes-runtime@0.2.64 +- @fusion-plugin-examples/openclaw-runtime@0.2.64 +- @fusion-plugin-examples/paperclip-runtime@0.2.64 -- Add a Chat tab to the right sidebar so you can chat inline and pop it out. -- Tasks with a manually-created open Pull Request are no longer auto-merged. -- Fast-mode tasks now plan with a lean, speed-first prompt routed through the workflow. -- CE HTML plans and brainstorm docs now get report-only ce-doc-review instead of being skipped. -- CE HTML docs now support DOM-validated in-place ce-doc-review fixes with report-only fallback. -- Close the Quick Chat window by clicking outside it. -- Emit run-audit telemetry for agent performance reflections. -- CE HTML docs can define and safely repair malformed checklists in ce-doc-review. -- Add a project setting to show or hide worktree names and grouping on the board. -- Refinement tasks are now titled with the source task ID followed by the entered comment. -- Add a project setting to open task details in the right sidebar instead of the full panel. -- The Create PR dialog is now movable and resizable like other Fusion pop-outs. -- Add a pin toggle to the right sidebar to push content aside instead of overlaying it. -- Task detail Review tab now hides HTML comments and shows comment avatars, human/bot badges, and author-type filtering. -- Add project settings to customize the AI prompts for PR title and description generation. -- Improve AI-generated PR titles and descriptions, and show a clear loading state while the description generates. -- Add an "Address PR feedback" button that starts an AI session to resolve PR review comments. -- Re-engage an executor when users chat on in-review tasks. -- Project Dashboard cards now say "Stop engine"/"Start engine" instead of "Pause"/"Resume". -- The PR number in a task's Pull Request tab now links to the pull request on GitHub. +### @fusion/desktop -### Fixed +#### Patch Changes -- Artifact lists now refresh live when new artifacts are registered. -- Agents no longer pause tasks on failure — pausing is reserved for explicit user requests. -- Permanent agents can ask the user a question directly without an approval gate. -- Compound Engineering now uses a distinct sidebar icon instead of duplicating Insights. -- Compound Engineering sidebar navigation now matches its Boxes header icon. -- Ephemeral/task-worker agents now show their token usage on the dashboard. -- Stopping the engine or pausing a project now frees its global agent slots for other projects. -- Missions tab now always opens the mission overview instead of a specific mission. -- Theme the quick-entry steps drop-down with canonical dashboard menu tokens. -- Running-agent counts include active in-review agents, and the concurrency use-marker is no longer off by one. -- Tasks sent back by Code Review or Browser Verification verdicts now re-run and complete their steps before re-checking. -- Footer no longer blinks and the concurrency panel stays open across status refreshes. -- Keep Create PR preview commit SHAs readable on one line. -- Stuck triage re-queues now resume from the drafted plan instead of restarting planning from scratch. -- Stuck re-queue no longer loses uncommitted work while keeping steps marked complete. -- Fix the Create PR dialog spinner, diff preview default, and stray-click dismissal behavior. -- PR badge color now follows GitHub status: green/gray/purple/red plus a conflict color. -- Show active project pull requests in the Pull Requests sidebar and main view. -- Fix "Request revision" error on reviewer-agent task reviews. -- Fix Compound Engineering, Quick fix, and Review-heavy workflow tasks getting stuck in Todo. -- Theme quick-add optional-step checkboxes and phase badges consistently. -- Keep Summary token table model names readable in narrow task detail panels. -- Pressing q (or Ctrl+C) in the TUI now quits cleanly without engine logs bleeding onto your shell. +- @fusion/core@0.51.0 +- @fusion/dashboard@0.51.0 +- @fusion/engine@0.51.0 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.51.0 +- @fusion/pi-claude-cli@0.51.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.51.0 + +### @runfusion/fusion + +#### Minor Changes + +- f7e20ab: summary: Add a Chat tab to the right sidebar so you can chat inline and pop it out. + category: feature + dev: Registers ChatView as the always-visible `chat` overflow-view entry in the right dock. +- dc54b61: summary: Tasks with a manually-created open Pull Request are no longer auto-merged. + category: feature + dev: New PrInfo.manual flag set by POST /tasks/:id/pr/create; allowsAutoMergeProcessing now returns false when a task has an open manual PR (status === "open"), excluding it from the engine merge queue and self-healing sweeps until the human merges the PR. Pipeline (PR-merge-strategy) PRs are unaffected. FN-7182. +- d9a518c: summary: Fast-mode tasks now plan with a lean, speed-first prompt routed through the workflow. + category: feature + dev: Replaces the verbose built-in `planning-fast` seam prompt (FAST_TRIAGE_PROMPT_TEXT) with a concise variant; resolution still prefers a workflow's `planning-fast` seam and falls back to the built-in. +- 7ebf58e: summary: CE HTML plans and brainstorm docs now get report-only ce-doc-review instead of being skipped. + category: feature + dev: Updates bundled Compound Engineering ce-doc-review handoffs so HTML runs review without autofix/write-back. +- fecb27e: summary: CE HTML docs now support DOM-validated in-place ce-doc-review fixes with report-only fallback. + category: feature + dev: Adds a direct parse5 CE HTML mutation helper with atomic writes, rollback, and allowlisted operations. +- 6ca5118: summary: Close the Quick Chat window by clicking outside it. + category: feature + dev: New opt-in `closeOnOutsidePointerDown` prop on FloatingWindow; enabled only for the Quick Chat (windowKey="chat-modal"). Uses a capture-phase document pointerdown listener that excludes in-flight drag/resize and nested dialog/floating surfaces. Task pop-outs are unaffected. +- 605e4d7: summary: Emit run-audit telemetry for agent performance reflections. + category: feature + dev: Adds reflection:generated/skipped/failed DatabaseMutationType events emitted from AgentReflectionService.generateReflection; metadata carries ids/counts/outcomes only. +- 631e8fc: summary: CE HTML docs can define and safely repair malformed checklists in ce-doc-review. + category: feature + dev: Adds parse5-backed canonical checklist repair with validation, atomic writes, and report-only fallback. +- 2448447: summary: Add a project setting to show or hide worktree names and grouping on the board. + category: feature + dev: New project setting `showWorktreeGrouping` (default false). When true, Column groups WIP tasks by worktree in both legacy and workflow modes; when false, WIP columns render plain task cards. +- 34efa8b: summary: Refinement tasks are now titled with the source task ID followed by the entered comment. + category: feature + dev: TaskStore.refineTask now sets title = "{sourceId}: {feedback}"; normalization is skipped to preserve the source-id prefix; FN-7165. +- a0602d0: summary: Add a project setting to open task details in the right sidebar instead of the full panel. + category: feature + dev: New project setting `openTasksInRightSidebar` (default false). When true and the right dock is available, board card clicks render the task in the right dock; falls back to the full-panel view on mobile / when the dock is inactive. +- 4118061: summary: The Create PR dialog is now movable and resizable like other Fusion pop-outs. + category: feature + dev: PrCreateModal now renders inside the shared FloatingWindow (windowKey "pr-create", persistGeometryKey "floating-window:pr-create") instead of a fixed .modal-overlay; geometry persists, mobile stays full-screen via CSS, and overlay click-to-dismiss was dropped (close via X / Cancel / Escape). +- 5d9184d: summary: Add a pin toggle to the right sidebar to push content aside instead of overlaying it. + category: feature + dev: New persisted localStorage flag `fusion:right-dock-pinned` (default false). When pinned, `.right-dock` switches from absolute overlay to in-flow (`right-dock--pinned`, position: relative) so the shell flex layout reflows `.project-content`; unpinned restores overlay. Toggle lives in the right-dock toolbar. +- fc958bc: summary: Task detail Review tab now hides HTML comments and shows comment avatars, human/bot badges, and author-type filtering. + category: feature + dev: TaskReviewTab renders bodies via the shared sanitized MailboxMessageContent and a new app/utils/githubCommentAuthor helper for bot/avatar derivation. +- 9c207fd: summary: Add project settings to customize the AI prompts for PR title and description generation. + category: feature + dev: New project settings `prTitlePromptInstructions` / `prDescriptionPromptInstructions` (default undefined) are appended to the Create PR dialog's metadata-generation system prompt in generatePrMetadata. +- 65abae2: summary: Improve AI-generated PR titles and descriptions, and show a clear loading state while the description generates. + category: feature + dev: Rewrote the pr-metadata-generator system/context prompt (exported as a named default constant) for grounded, conventional-commit-style output while preserving the strict {title,summary,changes,testing,linkedTask} JSON schema; PrCreateModal now renders a skeleton + aria-busy loading affordance with disabled inputs during generation that clears into content or the existing error/manual-fallback path. +- 9050ee1: summary: Add an "Address PR feedback" button that starts an AI session to resolve PR review comments. + category: feature + dev: New POST /tasks/:id/pr/address-feedback route seeds a ce-resolve-pr-feedback steering prompt and wakes the assigned agent; button gates on linked-PR actionable feedback (commentCount or CHANGES_REQUESTED). +- 4405dec: summary: Re-engage an executor when users chat on in-review tasks. + category: feature + dev: Shares the review-address re-engagement helper for Chat steering and Comments-tab task comments while preserving PR-await guards. + +#### Patch Changes + +- e5a0273: summary: Artifact lists now refresh live when new artifacts are registered. + category: fix + dev: TaskStore emits artifact:registered SSE; useArtifacts also accepts message:sent/message:received and coalesces scoped refreshes. +- 524c15c: summary: Agents no longer pause tasks on failure — pausing is reserved for explicit user requests. + category: fix + dev: Adds a no-pause-on-failure standing rule to HEARTBEAT_SYSTEM_PROMPT / HEARTBEAT_NO_TASK_SYSTEM_PROMPT, clarifies the fn_task_pause tool description, and regenerates the fusion skill docs (sync:fusion-skill). +- 7a2137c: summary: Permanent agents can ask the user a question directly without an approval gate. + category: fix + dev: Classify fn_ask_question in COORDINATION_EXEMPT_TOOLS and READONLY_FN_TOOLS (gating-classifications.ts) so both the permanent-agent gate and action gate auto-allow it, mirroring fn_send_message. +- c48dcae: summary: Compound Engineering now uses a distinct sidebar icon instead of duplicating Insights. + category: fix + dev: Plugin dashboard view icon changed Sparkles → Boxes; registered `boxes` in dashboard PLUGIN_NAV_ICON_MAP so desktop + mobile nav resolve it. +- 581f850: summary: Compound Engineering sidebar navigation now matches its Boxes header icon. + category: fix + dev: Pins Compound Engineering plugin nav entries to Boxes by plugin id so stale dashboard view metadata cannot render Sparkles/Grid3X3 in desktop or mobile navigation. +- 100164d: summary: Ephemeral/task-worker agents now show their token usage on the dashboard. + category: fix + dev: Derives zero/absent per-agent dashboard totals from task token usage and allows ephemeral Agent Detail token windows. +- d7a02c4: summary: Stopping the engine or pausing a project now frees its global agent slots for other projects. + category: fix + dev: InProcessRuntime now returns the project's held slots back to the shared cross-project AgentSemaphore after abort+drain on stop, and ProjectEngineManager.pauseProject/stopAll return residual slots per project without clobbering slots held by other projects. +- bb89e1e: summary: Project Dashboard cards now say "Stop engine"/"Start engine" instead of "Pause"/"Resume". + category: feature + dev: Relabels ProjectCard pause/resume controls; pauseProject already stops the engine, so behavior is unchanged. i18n projectCard.\* keys updated (en) with empty-string fallback for other locales. +- b570a83: summary: Missions tab now always opens the mission overview instead of a specific mission. + category: fix + dev: Removed MissionManager cache-restore and default-select effects; targetMissionId deep-links and interview resume still open a specific mission. +- 8ef9750: summary: Theme the quick-entry steps drop-down with canonical dashboard menu tokens. + category: fix + dev: Aligns WorkflowOptionalStepsDropdown panel CSS with shared dropdown surface, border, radius, shadow, and hover tokens. +- a95cfa7: summary: Running-agent counts include active in-review agents, and the concurrency use-marker is no longer off by one. + category: fix + dev: Adds shared isRunningAgentTask/countRunningAgentTasks in @fusion/core; engine concurrency.persistedTopLevelAgentSlots and the dashboard/CLI count surfaces delegate to it. CommandCenterControls use-marker ratio is now 0-based. +- 987abc7: summary: Tasks sent back by Code Review or Browser Verification verdicts now re-run and complete their steps before re-checking. + category: fix + dev: Fixes the post-verdict remediation bounce (requestPreMergeOptionalStepFix → sendTaskBackForFix → reopenLastStepForRevision → scheduleWorkflowRerun → graph re-run) so resumed execution re-launches the executor and drives reopened implementation/verification/delivery steps and the verdict-demanded fix to done across both in-progress and in-review bounce sources, bounded by the existing maxRevisions/maxPostReviewFixes budget. +- bee93c3: summary: Footer no longer blinks and the concurrency panel stays open across status refreshes. + category: fix + dev: Keeps executor stats loading initial-only and guards the footer loading branch after populated render. +- 7923977: summary: Keep Create PR preview commit SHAs readable on one line. + category: fix + dev: Corrects the dashboard Create Pull Request commit-row grid and guards the DOM contract in tests. +- e42679d: summary: Stuck triage re-queues now resume from the drafted plan instead of restarting planning from scratch. + category: fix + dev: triage.ts stuck-abort paths seed buildSpecificationPrompt with the on-disk PROMPT.md draft, or a non-empty plan task document when PROMPT.md is absent, and bound consecutive triage stuck-retries by settings.maxStuckKills before escalating to failed/paused. +- 9f45f10: summary: Stuck re-queue no longer loses uncommitted work while keeping steps marked complete. + category: fix + dev: Reconciles lost-work steps before worktree removal across all three executor stuck-requeue paths; corrects the preserveProgressOnStuckRequeue docstring. +- 01fe47d: summary: Fix the Create PR dialog spinner, diff preview default, and stray-click dismissal behavior. + category: fix + dev: PrCreateModal keeps the FloatingWindow no-backdrop-dismiss path, defaults the diff/commit
closed, and time-bounds generatePrMetadata with PR_METADATA_TIMEOUT_MS so hangs use the existing error/manual-body fallback. +- 5b71bdb: summary: PR badge color now follows GitHub status: green/gray/purple/red plus a conflict color. + category: fix + dev: Adds getPrBadgeModifierClass and a token-backed --color-merged badge modifier. +- 11e5dde: summary: Show active project pull requests in the Pull Requests sidebar and main view. + category: fix + dev: Adds PullRequestView list mode for no-id hosts with selectable detail and back navigation. +- 27b0cbb: summary: The PR number in a task's Pull Request tab now links to the pull request on GitHub. + category: feature + dev: PrCard (PrPanel.tsx) wraps the pr-number in an anchor to prInfo.url (new tab, rel=noopener); plain-span fallback when no URL. +- b60a743: summary: Fix "Request revision" error on reviewer-agent task reviews. + category: fix + dev: review/address now validates selected items against the same canonical review source the UI renders (buildDirectTaskReviewData / getPrReviewDetails) instead of the persisted reviewState.items. +- fb509b1: summary: Fix Compound Engineering, Quick fix, and Review-heavy workflow tasks getting stuck in Todo. + category: fix + dev: linear() built-in workflows now synthesize the canonical default column traits (hold(capacity) on todo, wip on in-progress, merge on in-review) matching BUILTIN_CODING_WORKFLOW_IR, so the hold/release sweep dispatches their todo cards. Fixes FN-7190. +- 8d3c15e: summary: Theme quick-add optional-step checkboxes and phase badges consistently. + category: fix + dev: Co-locates workflow phase badge CSS with the shared helper and applies the dashboard checkbox accent token. +- f0b3003: summary: Keep Summary token table model names readable in narrow task detail panels. + category: fix + dev: Adds token-table CSS min-width and wrap-contract regression coverage for right-dock layouts. +- b5ed4e0: summary: Pressing q (or Ctrl+C) in the TUI now quits cleanly without engine logs bleeding onto your shell. + category: fix + dev: Two-part fix. (1) dashboard.ts shutdown/devShutdown arm an unref'd 3s hard-exit watchdog on the first signal and force an immediate process.exit(0) on a second signal, so a hung stopAllDevServers/engine/central-core teardown can no longer leave the process alive. (2) Root cause of the "TUI keeps rendering after q" symptom: dispose() called logSink.releaseConsole() (re-pointing console._ at the terminal) before tui.stop() restored the shell, so slow engine/mesh/dev-server teardown logs painted over the recovered prompt. dispose() now calls the new logSink.silence() instead, dropping all sink + console._ output from quit to exit. Shutdown step diagnostics (timeShutdownStep + the watchdog stall line) are gated behind FUSION_DEBUG_SHUTDOWN=1 so a normal quit is pristine. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [e5a0273] +- Updated dependencies [f7e20ab] +- Updated dependencies [dc54b61] +- Updated dependencies [524c15c] +- Updated dependencies [7a2137c] +- Updated dependencies [c48dcae] +- Updated dependencies [581f850] +- Updated dependencies [d9a518c] +- Updated dependencies [7ebf58e] +- Updated dependencies [fecb27e] +- Updated dependencies [100164d] +- Updated dependencies [d7a02c4] +- Updated dependencies [6ca5118] +- Updated dependencies [bb89e1e] +- Updated dependencies [b570a83] +- Updated dependencies [8ef9750] +- Updated dependencies [605e4d7] +- Updated dependencies [631e8fc] +- Updated dependencies [a95cfa7] +- Updated dependencies [2448447] +- Updated dependencies [987abc7] +- Updated dependencies [bee93c3] +- Updated dependencies [34efa8b] +- Updated dependencies [a0602d0] +- Updated dependencies [4118061] +- Updated dependencies [7923977] +- Updated dependencies [5d9184d] +- Updated dependencies [e42679d] +- Updated dependencies [9f45f10] +- Updated dependencies [01fe47d] +- Updated dependencies [5b71bdb] +- Updated dependencies [fc958bc] +- Updated dependencies [11e5dde] +- Updated dependencies [9c207fd] +- Updated dependencies [65abae2] +- Updated dependencies [27b0cbb] +- Updated dependencies [9050ee1] +- Updated dependencies [b60a743] +- Updated dependencies [4405dec] +- Updated dependencies [fb509b1] +- Updated dependencies [8d3c15e] +- Updated dependencies [f0b3003] +- Updated dependencies [b5ed4e0] + - @runfusion/fusion@0.51.0 ## 0.50.0 -### Highlights +### @fusion/dashboard -- Mutating agent tools now obey each agent's permission policy instead of always being allowed. -- Add confirmation prompts before Command Center concurrency sliders save live capacity changes. -- Agents now receive more tools, with dangerous actions governed by each agent's permission policy. -- Reject malformed workflow graphs before they can be saved or launched. -- Permanent/custom agents can use governed workflow and task-promotion tools. +#### Patch Changes -### New +- @fusion/core@0.50.0 +- @fusion/engine@0.50.0 +- @fusion/i18n@0.39.13 +- @fusion-plugin-examples/cli-printing-press@0.1.30 +- @fusion-plugin-examples/compound-engineering@0.1.13 +- @fusion-plugin-examples/dependency-graph@0.1.44 +- @fusion-plugin-examples/roadmap@0.1.32 +- @fusion-plugin-examples/cursor-runtime@0.1.32 +- @fusion-plugin-examples/droid-runtime@0.1.39 +- @fusion-plugin-examples/hermes-runtime@0.2.63 +- @fusion-plugin-examples/openclaw-runtime@0.2.63 +- @fusion-plugin-examples/paperclip-runtime@0.2.63 -- Add confirmation prompts before Command Center concurrency sliders save live capacity changes. -- Agents now receive more tools, with dangerous actions governed by each agent's permission policy. -- Reject malformed workflow graphs before they can be saved or launched. -- Permanent/custom agents can use governed workflow and task-promotion tools. -- Permanent and custom agents can list, show, and search tasks during heartbeat runs. -- Failed optional workflow steps now send tasks back for a bounded executor fix pass. -- Footer concurrency panel shows running-agent counts and current-use markers on global and project sliders. -- Command Center Concurrency now shows running agents and current-use markers on global/project sliders. -- Configured MCP servers now reach every agent surface, including heartbeat runs. -- Configured MCP servers now reach dashboard planning helpers like subtask breakdown, text refine, and insights. -- New projects now default AI merge to sync a dirty checked-out integration branch. -- Add an "Other" free-text answer to planning and mission interview questions. -- Imported GitHub issues are now linked as tracked tasks when GitHub tracking is on. -- Add a per-project plan-approval mode to auto-approve or require approval for all tasks. -- Add external notifications for CLI agent tool-permission prompts. -- Add a New Chat button to the mobile chat quick-switch dropdown. -- Configured MCP servers now connect to chat and agent sessions and expose their tools. -- Code Review and Browser Verification now cycle fixes until they pass, defaulting to up to 3 fix passes. -- Workflow steps like Code Review and Browser Verification can set their own max fix revisions. -- The Browser Verification workflow step now uses the agent-browser tool, checks availability, and logs its actions. -- Done tasks now open on a new Summary tab showing what changed and what the agents did. -- Stack multiple queued chat messages above the composer and send them in order. -- Show an estimated token count against the model's context window in the chat thread header. -- Done-task Summary tab now shows token usage by model with estimated cost per model and a task total. -- Add optional Compound Engineering document review to the built-in CE workflow. -- Add a per-workflow analytics tab to the Command Center dashboard. -- Settings → Prompts now links to Workflow Editor prompts and clarifies prompt ownership. +### @fusion/desktop -### Fixed +#### Patch Changes -- Fix PR-mode auto-merge failing with "error connecting to ". -- Fix tasks getting stuck in review forever after a pre-merge code-review revision. -- Fix legacy databases missing newer task columns (e.g. checkout-lease, column dwell) after upgrade. -- Fusion co-author attribution now lands reliably on every commit it makes. -- Phantom duplicate tasks no longer break archive with an ENOENT error. -- Make skill detail metadata render more compactly in the right Skills panel. -- Fix Files viewer previews for images, video, audio, and PDFs. -- Task creation no longer leaves orphaned reserved-ID records when a create fails partway. -- Concurrency panels now show the real number of running agents instead of 0 when tasks are in progress. -- fn project list/info now show live running-agent counts from in-progress tasks. -- Recover corrupt messaging indexes during send or report the exact repair command. -- Database backup automation failures now report which database and the underlying cause. -- Stop plan-approval tasks from showing an empty-mailbox approval banner. -- The running-agents count now includes agents actively triaging tasks, not just executors. -- Project health In-Flight Agents now counts agents actively triaging tasks. -- Suppress brief footer Connecting flashes after one transient executor stats poll failure. -- Show every used model in Command Center token-by-model detail charts. -- Preserve override column-agent models during task execution. -- Show queued Chat messages above the input box with a divider. -- The task Workflow tab now shows the configured project Executor/Reviewer/Planning model instead of "Default". -- Add a visible close button to the footer engine-controls popover. -- Govern task creation and delegation with the task_agent_mutation permission policy. -- Permanent agents now obey approval/block policy when creating tasks. -- Include triage/planning model usage in Command Center Tokens by model. -- Fix workflow view so the Code Review and Browser Verification blocks show connected edges. -- Show linked task columns in agent Current Task output. -- Show linked task columns on dashboard agent task badges. -- Show every token-consuming model in Command Center token breakdowns. -- Pressing q (or Ctrl+C) in the TUI now always quits, even if a teardown step stalls. +- @fusion/core@0.50.0 +- @fusion/dashboard@0.50.0 +- @fusion/engine@0.50.0 -### Security +### @fusion/engine -- Mutating agent tools now obey each agent's permission policy instead of always being allowed. +#### Patch Changes -### Internal +- @fusion/core@0.50.0 +- @fusion/pi-claude-cli@0.50.0 -- The task detail tool is now named fn_task_show consistently across triage, planning, chat, and CLI surfaces. -- Concurrency panels now read running-agent counts from a single live source shared across the app. -- Align Compound Engineering brainstorm artifacts with unified plan discovery. +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.50.0 + +### @runfusion/fusion + +#### Minor Changes + +- 0ddfe9a: summary: Add confirmation prompts before Command Center concurrency sliders save live capacity changes. + category: feature + dev: Command Center global and project concurrency sliders now confirm changed settled values before persisting. +- 1a30ddd: summary: Agents now receive more tools, with dangerous actions governed by each agent's permission policy. + category: feature + dev: Heartbeat agent-work lane (packages/engine/src/agent-heartbeat.ts) assembles the broadened toolset; access remains gated by AgentPermissionPolicy via wrapToolsWithActionGate. Hermetic readonly lanes and automation allowedTools are unchanged. +- e1dba3f: summary: Reject malformed workflow graphs before they can be saved or launched. + category: feature + dev: Hardens the central parseWorkflowIr/validateV2 gate (duplicate-node-id and required top-level reachability rejection) and fail-closed re-validation at the WorkflowGraphTaskRunner run boundary before any side effects (FN-7113). +- c15d129: summary: Permanent/custom agents can use governed workflow and task-promotion tools. + category: feature + dev: Injects the FN-7111-classified mutating tools (fn_workflow_create/update/delete/settings/select, fn_task_promote) into the heartbeat agent-work lane (packages/engine/src/agent-heartbeat.ts), governed by AgentPermissionPolicy via wrapToolsWithActionGate. Executor-only tools requiring worktree/workspace context (fn_run_verification, fn_acquire_repo_worktree) remain intentionally excluded from the ambient lane. Hermetic readonly lanes and automation allowedTools are unchanged. +- 8f0f020: summary: Permanent and custom agents can list, show, and search tasks during heartbeat runs. + category: feature + dev: Adds shared read-only task tool factories (createTaskListTool/createTaskShowTool/createTaskSearchTool/createTaskReadTools), wires them into createSharedHeartbeatWorkTools, classifies fn_task_search and the legacy task-get alias read-only, and adds cross-surface drift tests. +- e89a58f: summary: Failed optional workflow steps now send tasks back for a bounded executor fix pass. + category: feature + dev: New `requestPreMergeOptionalStepFix` graph-executor seam wired to `sendTaskBackForFix`; bounded by `maxPostReviewFixes`/`postReviewFixCount`; falls through to prior advisory/gate behavior once the budget is exhausted. Pre-merge phase only; post-merge optional groups stay non-blocking. +- 2db8ead: summary: Footer concurrency panel shows running-agent counts and current-use markers on global and project sliders. + category: feature + dev: useGlobalConcurrency now exposes currentlyActive and projectsActive from /api/global-concurrency; EngineControlMenu renders count readouts and a clamped slider-track dot. +- 93b01c8: summary: Command Center Concurrency now shows running agents and current-use markers on global/project sliders. + category: feature + dev: CommandCenterControls reuses useGlobalConcurrency's currentlyActive/projectsActive (FN-7071) to render count readouts and clamped slider-track dots; no new backend routes. +- ad31490: summary: Configured MCP servers now reach every agent surface, including heartbeat runs. + category: feature + dev: Heartbeat and other un-wired session seams now resolve MCP via resolveMcpServersForStore; see FN-7077 audit. +- 4c48ccf: summary: Configured MCP servers now reach dashboard planning helpers like subtask breakdown, text refine, and insights. + category: feature + dev: Thread TaskStore/secrets into dashboard readonly createFnAgent helpers and forward resolveMcpServersForStore; see FN-7078. +- d9b17de: summary: New projects now default AI merge to sync a dirty checked-out integration branch. + category: feature + dev: Flips DEFAULT_PROJECT_SETTINGS merger.allowDirtyLocalCheckoutSync from false to true; explicit persisted values still win, with no existing-project migration. +- ae0679b: summary: Add an "Other" free-text answer to planning and mission interview questions. + category: feature + dev: single_select/multi_select questions now render a synthetic Other option backed by a reserved `_other` response key, threaded through formatResponseForAgent/history formatters in planning.ts, mission-interview.ts, and milestone-slice-interview.ts. +- 8b22dd2: summary: Imported GitHub issues are now linked as tracked tasks when GitHub tracking is on. + category: feature + dev: At import (CLI tools, `fn task import`, dashboard routes) the created task is set `githubTracking.enabled` when `resolveTaskGithubTracking` resolves enabled; the post-create hook adopts the source issue (source_issue_linked) so no duplicate tracking issue is opened. +- 28cdd1c: summary: Add a per-project plan-approval mode to auto-approve or require approval for all tasks. + category: feature + dev: New project setting `planApprovalMode` ("workflow" | "auto-approve-all" | "require-all"); overrides the per-workflow `requirePlanApproval` via `resolvePlanApprovalRequired` at the triage gating sites. +- c17d745: summary: Add external notifications for CLI agent tool-permission prompts. + category: feature + dev: Adds cli-agent-awaiting-input notification delivery from CLI waiting-on-input telemetry through ntfy/webhook providers. +- 92436d0: summary: Add a New Chat button to the mobile chat quick-switch dropdown. + category: feature + dev: New `chat-mobile-session-new` menuitem in ChatView's mobile session switcher reuses the existing setShowNewDialog/NewChatDialog path; Direct-scope only. +- c1613ad: summary: Configured MCP servers now connect to chat and agent sessions and expose their tools. + category: feature + dev: Adds the engine mcp-session-tools module and mcp**** tool namespacing. +- 6828276: summary: Code Review and Browser Verification now cycle fixes until they pass, defaulting to up to 3 fix passes. + category: feature + dev: Raises the `maxPostReviewFixes` default from 1 to 3 — the budget governing the FN-7066 pre-merge optional-step fix loop and the self-healing in-review recovery loop. The optional step re-runs each pass and the task only proceeds once it passes (APPROVE/APPROVE_WITH_NOTES) or the budget is exhausted. Per-step configurable/unbounded budgets are tracked separately (FN-7129). +- 39d20be: summary: Workflow steps like Code Review and Browser Verification can set their own max fix revisions. + category: feature + dev: Adds optional `maxRevisions` (number | "unbounded") to optional-group workflow nodes, resolved by `resolveOptionalStepRevisionBudget` and threaded through `requestPreMergeOptionalStepFix` plus `recoverReviewTasksWithFailedPreMergeSteps`. Overrides global `maxPostReviewFixes`; absent preserves prior behavior. The Workflow Node Editor authors it with a number input and Unbounded toggle. +- a593cc7: summary: The Browser Verification workflow step now uses the agent-browser tool, checks availability, and logs its actions. + category: feature + dev: Adds a `requiresBrowser` flag to `WorkflowStep`, set on the built-in browser-verification inner node and threaded through `runGraphCustomNode` into `executeWorkflowStep`, which merges the `agent-browser-navigation` skill, runs a bounded non-fatal `agent-browser --version` availability preflight (async exec), and emits start/availability agent-log entries. Absent the flag, prompt-step execution is unchanged. +- a19df33: summary: Done tasks now open on a new Summary tab showing what changed and what the agents did. + category: feature + dev: Adds the "summary" TabId + TaskSummaryTab to TaskDetailModal; done tasks resolve the implicit Chat default to Summary while explicit tab entrypoints are honored. +- 5066f90: summary: Stack multiple queued chat messages above the composer and send them in order. + category: feature + dev: Direct and Quick Chat queued sends now persist as FIFO arrays with legacy single-string restore fallback. +- c468c16: summary: Show an estimated token count against the model's context window in the chat thread header. + category: feature + dev: Client-side estimate via app/utils/estimateChatTokens.ts; context window from ModelInfo.contextWindow. Desktop Direct-chat header only; hidden on mobile, in rooms, and when the model context window is unknown. +- 63d1079: summary: Done-task Summary tab now shows token usage by model with estimated cost per model and a task total. + category: feature + dev: TaskSummaryTab derives per-model USD cost client-side via costFor + global modelPricingOverrides from task.tokenUsage.perModel; unpriced models render "—" (never $0). +- d4137f1: summary: Add optional Compound Engineering document review to the built-in CE workflow. + category: feature + dev: Bundles ce-doc-review and documents autoMerge-off CE PR routing before Fusion's merge seam. +- e8163ab: summary: Add a per-workflow analytics tab to the Command Center dashboard. + category: feature + dev: New `aggregateWorkflowAnalytics` core aggregator + `/api/command-center/workflows` route + WorkflowArea tab; reads tasks ⨝ task_workflow_selection, no new schema. + +#### Patch Changes + +- 2b9e383: summary: Mutating agent tools now obey each agent's permission policy instead of always being allowed. + category: security + dev: Classifies fn*workflow*\*, fn_task_update/promote/refine, fn_run_verification, fn_acquire_repo_worktree, and fn_research_cancel in shared gating classifications so both the action gate and permanent-agent gating govern them; closes the unrecognized-tool exempt→allow fall-through. Parity tests lock the decisions. +- 3d26d4e: summary: The task detail tool is now named fn_task_show consistently across triage, planning, chat, and CLI surfaces. + category: internal + dev: Renames the legacy fn_task_get registration to canonical fn_task_show in createTriageTools (engine) and createPlanningBoardTools (dashboard), updates all prompt references and the FN-7118 cross-surface drift test, and retains fn_task_get in BOTH READONLY_FN_TOOLS and COORDINATION_EXEMPT_TOOLS as a deprecated recognition alias for backward-compatible action-gate classification and analytics. +- 63b44b8: summary: Fix PR-mode auto-merge failing with "error connecting to ". + category: fix + dev: processPullRequestMergeTask now resolves owner/repo via getCurrentRepo(cwd) and passes (owner, repo, number) to getPrMergeStatus at all three call sites (shared-group, per-task, retry); the local GitHubOperations interface param names corrected from base/head to owner/repo. FN-7133. +- b1066c6: summary: Fix tasks getting stuck in review forever after a pre-merge code-review revision. + category: fix + dev: performWorkflowRerunBounce now bounces an `in-review` task back to in-progress like `in-progress`/`todo`, instead of throwing "cannot bounce to in-progress". A pre-merge optional-step REVISE reopens the last plan step and schedules the bounce, but a completion race could land the task in-review first, stranding it with a pending step that the merge gate blocks on while self-healing only re-ran the graph. Regression covered in executor-step-session.test.ts (FN-7122). +- 525953b: summary: Fix legacy databases missing newer task columns (e.g. checkout-lease, column dwell) after upgrade. + category: fix + dev: parseCreateTableSchemasFromSql now strips `--` comments before the non-greedy CREATE TABLE body regex, so a `);` inside a schema comment can no longer truncate a parsed table body and silently drop columns from ensureSchemaCompatibility()'s backfill set. +- 31d3f21: summary: Fusion co-author attribution now lands reliably on every commit it makes. + category: fix + dev: Inject the `Co-authored-by` trailer deterministically via the worktree commit-msg hook and the merger-ai `ensureCommitTaskMetadata` backfill (gated by `commitAuthorEnabled`), instead of relying on the agent appending it from the prompt. +- 74d3778: summary: Phantom duplicate tasks no longer break archive with an ENOENT error. + category: fix + dev: readTaskJson reports clean not-found when no DB row and no task.json exist; reconcilePhantomCommittedReservations prunes orphaned activityLog and agents/agentRuns for committed-reservation phantoms while preserving runAuditEvents and the committed reservation. +- 3c09008: summary: Make skill detail metadata render more compactly in the right Skills panel. + category: fix + dev: Scoped reduced font-size to `.skills-view-detail-markdown` / `.skills-view-detail-content` in SkillsView.css; shared `.mailbox-markdown` typography unchanged. +- 7137e36: summary: Fix Files viewer previews for images, video, audio, and PDFs. + category: fix + dev: Preview URLs request inline file responses with safe MIME, nosniff, and sandbox CSP headers while downloads remain attachments. +- 0440ae4: summary: Task creation no longer leaves orphaned reserved-ID records when a create fails partway. + category: fix + dev: createTaskWithDistributedReservation now commits the distributed_task_id_reservations row in the same SQLite transaction as the tasks-row insert, and a rollback guard reverts both the row and the reservation if post-insert task.json/PROMPT.md materialization or create validation fails, preventing committed-reservation-without-task phantoms. Adds transaction-participating allocator helpers for commit and failed-create rollback. +- 42d9c65: summary: Concurrency panels now show the real number of running agents instead of 0 when tasks are in progress. + category: fix + dev: global-concurrency running counts (currentlyActive/projectsActive) are now derived live from in-progress task columns, mirroring the /projects/:id/health computation, instead of slot/health bookkeeping that the default in-process runtime never updates. +- 8bcda73: summary: Concurrency panels now read running-agent counts from a single live source shared across the app. + category: internal + dev: Adds a side-effect-safe CentralCore.getLiveRunningAgentCounts() seam (DI source via setRunningAgentCountSource) that derives counts from in-progress task columns of already-open project stores without starting engines/watchers or mutating slot/health bookkeeping; GET /api/global-concurrency is rewired onto it, preserving globalMaxConcurrent/queuedCount and acquireGlobalSlot/releaseGlobalSlot semantics. +- 5608bf5: summary: fn project list/info now show live running-agent counts from in-progress tasks. + category: fix + dev: CLI In-Flight Agents derives from `column === "in-progress"` task counts, mirroring FN-7080's dashboard route; persisted `projectHealth.inFlightAgentCount` and slot semantics are unchanged. +- c2f8026: summary: Recover corrupt messaging indexes during send or report the exact repair command. + category: fix + dev: MessageStore now runs a scoped REINDEX messages retry on SQLite corruption during send. +- ee3a06e: summary: Database backup automation failures now report which database and the underlying cause. + category: fix + dev: Hardens runBackupCommand + routine/cron in-process backup branches so AutomationRunResult.error is always actionable. +- f4b25dd: summary: Stop plan-approval tasks from showing an empty-mailbox approval banner. + category: fix + dev: Fixes useApprovalBanner so the Open Mailbox banner only follows real ApprovalRequest events. +- f34b62c: summary: The running-agents count now includes agents actively triaging tasks, not just executors. + category: fix + dev: countRunningAgentsInStore now adds triage-column tasks with status "planning" (not paused) to the live running-agent count alongside in-progress tasks, matching the maxTriageConcurrent liveness predicate; feeds getLiveRunningAgentCounts and the global-concurrency readouts. +- a8f51e9: summary: Settings → Prompts now links to Workflow Editor prompts and clarifies prompt ownership. + category: feature + dev: PromptsSection threads onOpenWorkflowSettings and reuses MovedSettingsStub; AgentPromptsManager tabs stay in Settings. +- 9e2fb5d: summary: Project health In-Flight Agents now counts agents actively triaging tasks. + category: fix + dev: The dashboard /projects/:id/health route and the CLI fn project list/info in-flight count now add triage-column tasks with status "planning" (not paused) to the live in-progress count, matching FN-7097's countRunningAgentsInStore predicate; persisted projectHealth.inFlightAgentCount and slot semantics are unchanged. +- b69dd8e: summary: Align Compound Engineering brainstorm artifacts with unified plan discovery. + category: internal + dev: Private Compound Engineering plugin keeps separate brainstorm/plan stages while sharing docs/plans artifacts and legacy discovery. +- e909d41: summary: Suppress brief footer Connecting flashes after one transient executor stats poll failure. + category: fix + dev: Debounces post-success suspension-like /api/executor/stats failures in useExecutorStats. +- 368f1e0: summary: Show every used model in Command Center token-by-model detail charts. + category: fix + dev: Removes the Tokens detail chart cap while keeping Overview explicitly top-N. +- 5ab4a59: summary: Preserve override column-agent models during task execution. + category: fix + dev: Engine override column-agent sessions now ignore task-level model fields during initial session creation and mid-flight re-resolution when the column agent governs. +- c61217e: summary: Show queued Chat messages above the input box with a divider. + category: fix + dev: Moves the existing single pending-message indicator out of the textarea wrapper and covers placement with ChatView tests. +- 59803c2: summary: The task Workflow tab now shows the configured project Executor/Reviewer/Planning model instead of "Default". + category: fix + dev: Task-detail model display now overlays the task's effective workflow setting values (where the moved per-phase model lanes live) onto getSettingsFast() via a shared core applyWorkflowSettingsOverlay helper and a new GET /api/tasks/:id/effective-settings endpoint. Engine mergeEffectiveSettings reuses the same helper unchanged. FN-7123. +- b5378d2: summary: Add a visible close button to the footer engine-controls popover. + category: fix +- 45e27f8: summary: Govern task creation and delegation with the task_agent_mutation permission policy. + category: fix + dev: fn_task_create and fn_delegate_task were action-gate exempt despite being task-board mutations; now classified task_agent_mutation in the action gate (permanent-agent gate none classification preserved). +- c3c4216: summary: Permanent agents now obey approval/block policy when creating tasks. + category: fix + dev: Removed fn_task_create from READONLY_FN_TOOLS and classified it as task_agent_mutation in the permanent-agent gate (packages/engine/src/gating-classifications.ts); action-gate classification unchanged. fn_delegate_task and GitHub import tools intentionally left permanent-readonly. +- 6713c99: summary: Include triage/planning model usage in Command Center Tokens by model. + category: fix + dev: Records token usage for triage primary, fallback, and spec-review subagent sessions. +- ba599a4: summary: Fix workflow view so the Code Review and Browser Verification blocks show connected edges. + category: fix + dev: Auto-layout/fallback spacing now advances by every consecutive container node's rendered width so back-to-back optional-group/foreach/loop nodes no longer overlap adjacent handles; covered by a consecutive-container connectivity regression test. +- 6f46fa1: summary: Show linked task columns in agent Current Task output. + category: fix + dev: Adds shared Current Task formatting for agent list/show tools across engine and CLI surfaces. +- 9e7c57d: summary: Show linked task columns on dashboard agent task badges. + category: fix + dev: Adds transient agent taskColumn enrichment for dashboard agent list, detail, and live-agent surfaces. +- 4f01c4d: summary: Show every token-consuming model in Command Center token breakdowns. + category: fix + dev: Backfills resolved pi session models so per-model token buckets do not fall back to unknown. +- 661b6b8: summary: Pressing q (or Ctrl+C) in the TUI now always quits, even if a teardown step stalls. + category: fix + dev: dashboard.ts shutdown/devShutdown arm an unref'd 3s hard-exit watchdog on the first signal and force an immediate process.exit(0) on a second signal, so a hung stopAllDevServers/engine/central-core teardown can no longer leave the process alive repainting the restored shell. Each teardown step now runs through timeShutdownStep, which tracks the in-flight step so the watchdog names the exact stalling step on stderr; set FUSION_DEBUG_SHUTDOWN=1 for per-step timings (slow steps >1s are always surfaced). + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [0ddfe9a] +- Updated dependencies [1a30ddd] +- Updated dependencies [2b9e383] +- Updated dependencies [e1dba3f] +- Updated dependencies [c15d129] +- Updated dependencies [8f0f020] +- Updated dependencies [3d26d4e] +- Updated dependencies [63b44b8] +- Updated dependencies [b1066c6] +- Updated dependencies [525953b] +- Updated dependencies [31d3f21] +- Updated dependencies [e89a58f] +- Updated dependencies [74d3778] +- Updated dependencies [2db8ead] +- Updated dependencies [3c09008] +- Updated dependencies [7137e36] +- Updated dependencies [0440ae4] +- Updated dependencies [93b01c8] +- Updated dependencies [ad31490] +- Updated dependencies [4c48ccf] +- Updated dependencies [42d9c65] +- Updated dependencies [8bcda73] +- Updated dependencies [5608bf5] +- Updated dependencies [d9b17de] +- Updated dependencies [ae0679b] +- Updated dependencies [8b22dd2] +- Updated dependencies [c2f8026] +- Updated dependencies [ee3a06e] +- Updated dependencies [f4b25dd] +- Updated dependencies [f34b62c] +- Updated dependencies [a8f51e9] +- Updated dependencies [28cdd1c] +- Updated dependencies [9e2fb5d] +- Updated dependencies [b69dd8e] +- Updated dependencies [c17d745] +- Updated dependencies [e909d41] +- Updated dependencies [368f1e0] +- Updated dependencies [5ab4a59] +- Updated dependencies [92436d0] +- Updated dependencies [c61217e] +- Updated dependencies [c1613ad] +- Updated dependencies [59803c2] +- Updated dependencies [b5378d2] +- Updated dependencies [45e27f8] +- Updated dependencies [6828276] +- Updated dependencies [39d20be] +- Updated dependencies [a593cc7] +- Updated dependencies [a19df33] +- Updated dependencies [c3c4216] +- Updated dependencies [6713c99] +- Updated dependencies [ba599a4] +- Updated dependencies [5066f90] +- Updated dependencies [6f46fa1] +- Updated dependencies [9e7c57d] +- Updated dependencies [c468c16] +- Updated dependencies [63d1079] +- Updated dependencies [d4137f1] +- Updated dependencies [e8163ab] +- Updated dependencies [4f01c4d] +- Updated dependencies [661b6b8] + - @runfusion/fusion@0.50.0 ## 0.49.0 -### Highlights +### @fusion/dashboard -- Add a default-on, toggleable pre-merge Code Review step to the built-in coding workflows. -- Verification now runs only the tests affected by a task's changed files, so merge/step checks finish in seconds. -- Record signed signal connectors in Command Center incident metrics. -- Add an engine-disconnected dashboard banner with one-click Start engine. -- Show provider icons next to Command Center model names. +#### Patch Changes -### New +- @fusion/core@0.49.0 +- @fusion/engine@0.49.0 +- @fusion/i18n@0.39.12 +- @fusion-plugin-examples/cli-printing-press@0.1.29 +- @fusion-plugin-examples/compound-engineering@0.1.12 +- @fusion-plugin-examples/dependency-graph@0.1.43 +- @fusion-plugin-examples/roadmap@0.1.31 +- @fusion-plugin-examples/cursor-runtime@0.1.31 +- @fusion-plugin-examples/droid-runtime@0.1.38 +- @fusion-plugin-examples/hermes-runtime@0.2.62 +- @fusion-plugin-examples/openclaw-runtime@0.2.62 +- @fusion-plugin-examples/paperclip-runtime@0.2.62 -- Add a default-on, toggleable pre-merge Code Review step to the built-in coding workflows. -- Verification now runs only the tests affected by a task's changed files, so merge/step checks finish in seconds. -- Record signed signal connectors in Command Center incident metrics. -- Add an engine-disconnected dashboard banner with one-click Start engine. -- Show provider icons next to Command Center model names. -- Preview images, videos, audio, and PDFs directly in the Files modal. -- Add optional workflow-step quick dropdowns to task creation surfaces. -- Add core MCP server settings model with project/global precedence and secret references. -- Forward configured MCP servers to all AI lanes and add reachability validation. -- Add `fn mcp` CLI to manage MCP servers, import Claude Desktop config, and export Fusion MCP JSON. -- Add MCP server management UI in Settings with global/project scopes, validation, and import/export. -- Automations popup is now movable and resizable like other Fusion pop-outs. -- Automation AI steps now run with all tools by default, with a per-step tool selector and live run output. -- Enabled optional workflow steps now run and show in task progress reliably. -- Make Remote Access settings visible without enabling an experimental flag. -- Auto-discover MCP servers from Claude/Cursor/Windsurf/VS Code and opt-in to enable them in Settings. -- Adjust the global concurrency cap from the footer and dashboard; settings grouped by global vs project scope. -- Add a Worktrees setting for copying repository files into new task worktrees. +### @fusion/desktop -### Fixed +#### Patch Changes -- Keep task-detail Chat and Workflow tabs aligned on displayed model names. -- Fix random fusion crashes when multiple dashboards/CLIs run on one host. -- Fix unreadable info-toast contrast and dashboard CSS token regressions. -- Fix global settings (including the global concurrency cap) intermittently resetting to defaults. -- Restore dashboard Settings helper copy and TaskChat tool-call labels. -- Preserve the selected workflow when Missions creates tasks. -- Restore animated loading spinners across the Fusion dashboard. -- Ignore hidden dot paths in overlap scheduling by default with a Settings toggle. -- Make browser and Android Back close dashboard task detail before leaving the current view. -- Fix Command Center token usage updating live without manual refresh. -- Prevent Planning Mode summary buttons from overlapping on tablet screens. -- Make Plan Mission with AI desktop modal movable and recover cleanly from stream failures. -- Prevent Planning Mode from crashing on malformed AI summary arrays. -- Allow Planning Mode generations to continue while meaningful AI output is progressing. -- Recover mission AI planning from transient stream interruptions. -- Stop showing branch reattachment warnings in Task Detail. -- Fix discarding mission interview drafts from the Missions view. -- Fix excessive spacing in the embedded Automations pane. -- Fix mobile Missions back navigation from mission detail tabs. -- Keep New Task mobile dialog controls tappable while the keyboard is open. -- Exclude engine-down time from task duration badge and stats. -- Restore horizontal scrolling for mobile task detail tabs. -- Fix workflow editor so the Browser Verification block shows connected edges. -- Retry transient ntfy publish failures so one-shot task notifications are less likely to be lost. -- Command Center date-range presets now correctly filter charts. -- Make the AI session needs-input banner compact and hide it on Missions or Planning. -- Prevent long Skills list rows from overflowing the left pane. -- Open dependency Graph tasks in the shared movable task pop-out. -- Preview image, video, audio, and PDF files natively in the right-dock Files viewer. -- Match the optional steps dropdown trigger to shared task creation buttons. -- Workflow and automation steps now use the configured project Execution model instead of the default. -- Fix task Workflow tab showing "Step definition not found." for Code Review and other optional steps. -- Quick task input no longer refocuses itself after you add a task. -- Capitalize the built-in Code Review step name consistently. -- Restore mobile swipe scrolling when touching task-detail tab buttons. -- Restore horizontal swiping on Agent Detail tabs on mobile touch devices. -- Fix slash/namespaced skill commands not loading in chat and agent sessions. -- Fix task-detail Workflow tabs so inherited workflow graphs and step details populate. -- Keep Graph tasks visible when cached workflow assignments reference deleted workflows. -- Fix npm install failure caused by bundled plugins referencing private @fusion packages. -- Rename the Remote Access settings section (drops the stale "& Node Sync" suffix). -- Mobile: hide the executor footer and remove the empty gap above the keyboard while typing. -- Fix Planning Mode not scrolling on mobile so action buttons stay reachable. -- Verification (merge/step gate) timeout now scales with command scope instead of a flat 10 minutes. -- Fix stale overlap-blocker repair edge cases and dashboard display synchronization. +- @fusion/core@0.49.0 +- @fusion/dashboard@0.49.0 +- @fusion/engine@0.49.0 -### Internal +### @fusion/engine -- Remove the quick-entry keyboard hint from the task creation surface. -- Post-merge workflow steps now run once via the workflow graph instead of the merger. -- Retire the legacy workflow-steps store; workflow steps now run entirely graph-native. +#### Patch Changes + +- @fusion/core@0.49.0 +- @fusion/pi-claude-cli@0.49.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.49.0 + +### @runfusion/fusion + +#### Minor Changes + +- 7772ab3: summary: Add a default-on, toggleable pre-merge Code Review step to the built-in coding workflows. + category: feature + dev: New `code-review` optional-group node (defaultOn:true, toolMode readonly, gateMode advisory, phase pre-merge) on the pre-merge success path (execute → browser-verification → code-review → review) of both the built-in coding and stepwise coding workflows. Runs for every coding task by default (seeded into enabledWorkflowSteps via resolveDefaultOnOptionalGroupIds) but is toggleable off per task; advisory so it does not change merge outcomes (operators can promote it to a blocking gate). Also fixes default-workflow task creation to seed default-on optional groups for interpreter-deferred built-ins (previously dropped). Reuses the shared prompt-gate verdict machinery (no engine verification code). The `code-review` WORKFLOW_STEP_TEMPLATE is also available in the editor palette. +- 744aa2c: summary: Verification now runs only the tests affected by a task's changed files, so merge/step checks finish in seconds. + category: feature + dev: New deriveFileScopedPnpmTestCommand maps changed test files (and co-located tests of changed source) to a per-package `pnpm --filter exec vitest run ` command; inferDefaultTestCommand uses it (overriding even an explicit testCommand) when the new project setting scopeVerificationToChangedFiles (default true) is on and git context is available, falling back to the configured command when no tests resolve. The thin merge-gate suite remains the cross-cutting safety net. +- 98a5052: summary: Record signed signal connectors in Command Center incident metrics. + category: feature + dev: Adds connector incident ingestion and /api/command-center/signals/connectors configuration status. +- e46ea00: summary: Add an engine-disconnected dashboard banner with one-click Start engine. + category: feature + dev: Adds project-scoped engine status/start API routes and dashboard-only guidance for UI-only launches. +- 9a2709d: summary: Show provider icons next to Command Center model names. + category: feature + dev: Infers provider icons from model ids for Command Center model tables and bar charts; pie charts remain text-only. +- 4cc9c2f: summary: Preview images, videos, audio, and PDFs directly in the Files modal. + category: feature + dev: Adds browser-native previews backed by workspace-safe file download URLs. +- 541f1f6: summary: Add optional workflow-step quick dropdowns to task creation surfaces. + category: feature + dev: Surfaces active workflow optional steps in QuickEntryBox and NewTaskModal create payloads. +- 79c602d: summary: Add core MCP server settings model with project/global precedence and secret references. + category: feature + dev: New @fusion/core MCP config types, validators, resolveEffectiveMcpServers, secret-resolver seam, and Claude Desktop import/export. Secret material stored only as Fusion-managed secret references. +- 6c94ee0: summary: Forward configured MCP servers to all AI lanes and add reachability validation. + category: feature + dev: Adds runtime MCP support gating, materialized MCP forwarding, and POST /api/mcp/validate. +- 429143e: summary: Add `fn mcp` CLI to manage MCP servers, import Claude Desktop config, and export Fusion MCP JSON. + category: feature + dev: New `packages/cli/src/commands/mcp.ts`; reuses @fusion/core resolveEffectiveMcpServers, validation, and import/export; sensitive fields stored as secret references via SecretsStore, never plaintext. +- 301f25d: summary: Add MCP server management UI in Settings with global/project scopes, validation, and import/export. + category: feature + dev: New SettingsModal sections global-mcp/mcp + McpServersCard; consumes @fusion/core MCP foundation and POST /api/mcp/validate; sensitive fields bind to secret references only. +- 2ce208e: summary: Automations popup is now movable and resizable like other Fusion pop-outs. + category: feature + dev: ScheduledTasksModal modal presentation now renders inside the shared FloatingWindow (windowKey "automation", persistGeometryKey "floating-window:automation"); embedded presentation unchanged. Mobile stays full-screen by CSS. +- 8131d54: summary: Automation AI steps now run with all tools by default, with a per-step tool selector and live run output. + category: feature + dev: Adds AutomationStep.allowedTools + AUTOMATION_SELECTABLE_TOOLS (core); toolsAllowlist on createFnAgent (engine); SSE GET /automations/:id/run/stream and /routines/:id/run/stream (dashboard). +- dd1b960: summary: Enabled optional workflow steps now run and show in task progress reliably. + category: feature + dev: Fixes FN-7039. `Store.optionalGroupIdSet` falls back to `builtin:coding` (matching the executor's unselected-task resolution) so a toggled built-in group id (e.g. `browser-verification`) is no longer materialized into a legacy `WS-xxx` step row the graph never matches. Create-time optional-step controls (QuickEntryBox, TaskForm) resolve `builtin:coding` when no project default workflow is set, so the toggles appear. First unit of the broader graph-native workflow-step refactor. +- 2442032: summary: Make Remote Access settings visible without enabling an experimental flag. + category: feature + dev: Graduates the Settings UI section while leaving remoteAccess provider/token gating unchanged. +- f685518: summary: Auto-discover MCP servers from Claude/Cursor/Windsurf/VS Code and opt-in to enable them in Settings. + category: feature + dev: New @fusion/core mcp-discovery source resolution + parser, @fusion/engine discoverMcpServers fs reader, GET /api/mcp/discovered route, and a discovered region in McpServersCard. Read-only/opt-in; discovered secrets become Fusion secret references, never plaintext. +- 1d860ec: summary: Adjust the global concurrency cap from the footer and dashboard; settings grouped by global vs project scope. + category: feature + dev: Added a Global Max Concurrent slider (wired to fetch/updateGlobalConcurrency) to EngineControlMenu (footer) and the dashboard CommandCenterControls Concurrency card, with debounced saves matching the existing project sliders. SchedulingSection now groups fields under labeled "Global — all projects" and "This project" subheadings with scope badges so the global cap is not mistaken for a per-project setting (clearer on mobile). + +#### Patch Changes + +- c7cbae1: summary: Keep task-detail Chat and Workflow tabs aligned on displayed model names. + category: fix + dev: Extracts dashboard effective model display resolution for shared Chat, Agent Log, and Workflow tab use. +- 50a9471: summary: Fix random fusion crashes when multiple dashboards/CLIs run on one host. + category: fix + dev: Central DB (~/.fusion/fusion-central.db) now uses journal_mode=DELETE instead of WAL. WAL coordinates concurrent processes via a memory-mapped `-shm` wal-index that SIGBUSes a reader (walIndexReadHdr / `cluster_pagein past EOF`) on macOS/APFS when another process resizes it mid-checkpoint, killing the node process with no JS stack. DELETE mode removes the `-shm` mmap surface and coordinates via POSIX locks (busy_timeout absorbs the added writer serialization). Per-project DBs (db.ts) are unchanged. See central-db.ts open() and central-db.test.ts regression. +- b293525: summary: Fix unreadable info-toast contrast and dashboard CSS token regressions. + category: fix + dev: Tokenized raw rgba/undefined CSS vars across ~15 dashboard component stylesheets, defined missing --border-strong / right-dock width tokens, enrolled the shadcn-custom light theme in the dark-text toast correction (WCAG AA). Also repairs ~19 stale dashboard tests that trailed intentional product changes (workflowColumns graduation, onboarding flow, theme relabels, header divider removal). +- c20c4b7: summary: Fix global settings (including the global concurrency cap) intermittently resetting to defaults. + category: fix + dev: Several production call sites built `new CentralCore(store.getFusionDir())`, pointing the central/global DB at the project's `.fusion/` instead of `~/.fusion/` and spawning stray per-project central DBs seeded with default global settings that shadowed real global state. Added `TaskStore.getGlobalSettingsDir()`, routed the secrets store plus the secrets/proxy/node/secrets-sync/settings-sync dashboard routes through it, and added a `resolveGlobalDir()` guard that throws on a project-local `.fusion/` dir (parent is a git repo) so the regression can't silently recur. Existing stray DBs were operator-quarantined. +- d08e8db: summary: Restore dashboard Settings helper copy and TaskChat tool-call labels. + category: fix + dev: Repairs changed-only dashboard assertions for navigation, pause routes, TaskChat, and theme selector parity. +- 6df4043: summary: Preserve the selected workflow when Missions creates tasks. + category: fix + dev: Missions now shares the header workflow selector with Planning and passes workflowId through mission triage APIs. +- f5e1b96: summary: Add a Worktrees setting for copying repository files into new task worktrees. + category: feature + dev: Adds project setting `worktreeCopyFiles`; release with the standard changeset workflow, not manual versioning. +- 0744ab3: summary: Restore animated loading spinners across the Fusion dashboard. + category: fix + dev: Dashboard spinner utilities now use a collision-proof keyframe and tests guard component CSS chunks. +- 9fabc9d: summary: Ignore hidden dot paths in overlap scheduling by default with a Settings toggle. + category: fix + dev: Adds project setting `ignoreHiddenOverlapPaths` and keeps `overlapIgnorePaths` as an additional explicit filter. +- 0049fb9: summary: Make browser and Android Back close dashboard task detail before leaving the current view. + category: fix + dev: Updates dashboard task-detail history entries for full-panel and modal detail flows. +- 4880a0f: summary: Fix Command Center token usage updating live without manual refresh. + category: fix + dev: Analytics polling now revalidates in the background when prior data exists so token cards, charts, and model rows stay mounted during live refresh. +- 419d58f: summary: Prevent Planning Mode summary buttons from overlapping on tablet screens. + category: fix + dev: Adds a tablet responsive CSS contract for Planning Mode summary action wrapping. +- a0954c7: summary: Make Plan Mission with AI desktop modal movable and recover cleanly from stream failures. + category: fix + dev: Dashboard mission interview now uses floating desktop geometry and normalizes terminal SSE errors into one retry state. +- 575e211: summary: Prevent Planning Mode from crashing on malformed AI summary arrays. + category: fix + dev: Normalizes planning summaries, question options, subtasks, and dependency arrays at UI/API boundaries. +- f1b3bd8: summary: Allow Planning Mode generations to continue while meaningful AI output is progressing. + category: fix + dev: Replaces the fixed Planning Mode generation cap with inactivity and repeated-output detection. +- 7e7b0c6: summary: Recover mission AI planning from transient stream interruptions. + category: fix + dev: MissionInterviewModal refetches active session state before showing permanent stream errors. +- 0c53f46: summary: Stop showing branch reattachment warnings in Task Detail. + category: fix + dev: Removes stale TaskDetailModal rebind-banner CSS/mocks and covers missing-branch workspace shapes. +- d984fce: summary: Fix discarding mission interview drafts from the Missions view. + category: fix + dev: Preserves project and owning-tab scope for mission interview draft discard requests. +- ef6e459: summary: Fix excessive spacing in the embedded Automations pane. + category: fix + dev: Top-pack embedded Automations grid rows and add regression coverage for the list/detail layout. +- 2d2dd50: summary: Fix mobile Missions back navigation from mission detail tabs. + category: fix + dev: Tracks mission detail visibility for mobile history entries instead of selected mission IDs. +- 3513d5f: summary: Keep New Task mobile dialog controls tappable while the keyboard is open. + category: fix + dev: Restores hit testing for the NewTaskModal sheet and bounds mobile picker dropdowns. +- 4dab2b6: summary: Exclude engine-down time from task duration badge and stats. + category: fix + dev: Adds engineLastActiveAt heartbeat and startup reconcile-engine-downtime-active-timing recovery. +- 977000c: summary: Restore horizontal scrolling for mobile task detail tabs. + category: fix + dev: Keeps the task-detail tab strip scrollable across Board modal and List embedded surfaces. +- 3f66e55: summary: Fix workflow editor so the Browser Verification block shows connected edges. + category: fix + dev: optional-group/foreach/loop container nodes now render connectable handles without adjacent layer overlap in WorkflowNodeEditor. +- f5b588c: summary: Retry transient ntfy publish failures so one-shot task notifications are less likely to be lost. + category: fix + dev: Adds bounded ntfy fetch retries for network, timeout, 5xx, and 429 failures with a per-attempt timeout. +- 45727f1: summary: Command Center date-range presets now correctly filter charts. + category: fix + dev: Honors open-ended Command Center analytics bounds and serializes All time explicitly. +- 775a1f8: summary: Make the AI session needs-input banner compact and hide it on Missions or Planning. + category: fix + dev: Shrinks SessionNotificationBanner CSS and tests the DashboardBanners visibility guard. +- ea3cfee: summary: Prevent long Skills list rows from overflowing the left pane. + category: fix + dev: Constrains SkillsView discovered-skill name, path, and source rows with ellipsis truncation. +- 0ae4499: summary: Open dependency Graph tasks in the shared movable task pop-out. + category: fix + dev: Routes graph plugin task-open callbacks through MainContent popOutTaskDetail while preserving non-graph plugin modal behavior. +- f3f20ac: summary: Preview image, video, audio, and PDF files natively in the right-dock Files viewer. + category: fix + dev: Reuses the shared file-preview classification and download route in DockFilesView. +- 6415eed: summary: Match the optional steps dropdown trigger to shared task creation buttons. + category: fix + dev: Reuses the dashboard `.btn .btn-sm` trigger styling for WorkflowOptionalStepsDropdown. +- b6b5583: summary: Workflow and automation steps now use the configured project Execution model instead of the default. + category: fix + dev: Workflow/AI-prompt step model resolution now consults the execution lane (resolveExecutorSessionModel / resolveExecutionSettingsModel) instead of resolveProjectDefaultModel, fixing executeWorkflowStep (executor.ts), cron-runner.ts, and dashboard routes.ts. FN-7039. +- 2c46cdc: summary: Fix task Workflow tab showing "Step definition not found." for Code Review and other optional steps. + category: fix + dev: WorkflowResultsTab configuredSteps now shows the not-found message only when a step id is absent from the step lookup, not when a found optional-group step has an empty description. +- ea5e12e: summary: Quick task input no longer refocuses itself after you add a task. + category: fix + dev: Removed QuickEntryBox post-submit focus restoration (FNXC:QuickEntryFocus); supersedes FN-6217/FN-6219. +- 07209a4: summary: Capitalize the built-in Code Review step name consistently. + category: fix + dev: Updates the compound-engineering built-in workflow node display name and regression coverage. +- da69e03: summary: Remove the quick-entry keyboard hint from the task creation surface. + category: internal + dev: Removes the retired quickEntryHint locale key and QuickEntryBox hint shell/CSS. +- 93da87d: summary: Restore mobile swipe scrolling when touching task-detail tab buttons. + category: fix + dev: Adds detail-tab touch-action pan-x coverage to override the global mobile pan-y lock. +- c0d5353: summary: Restore horizontal swiping on Agent Detail tabs on mobile touch devices. + category: fix + dev: Adds `.agent-detail-tab` touch-action pan-x coverage because the global mobile pan-y lock is non-inherited. +- 59fc94b: summary: Fix slash/namespaced skill commands not loading in chat and agent sessions. + category: fix + dev: skill-resolver requested-name matching now reduces a/b, a/b/SKILL.md, and source::a/b forms to the bare token like the dashboard bareSkillName, scoped to requested-name matching (allow/exclude path matching unchanged). +- afa33b7: summary: Fix task-detail Workflow tabs so inherited workflow graphs and step details populate. + category: fix + dev: Resets stale task workflow selection/results on task switches and aliases optional step template IDs. +- d03d6c2: summary: Keep Graph tasks visible when cached workflow assignments reference deleted workflows. + category: fix + dev: Treat stale Graph `taskWorkflowIds` entries as default-workflow assignments during workflow filtering. +- 42f46a1: summary: Fix npm install failure caused by bundled plugins referencing private @fusion packages. + category: fix + dev: Sanitizes copied plugin and vendored extension manifests in tsup.config.ts before publishing. +- 7a3a9a9: summary: Rename the Remote Access settings section (drops the stale "& Node Sync" suffix). + category: fix + dev: The standalone Node Sync settings section is unchanged. +- e48c75c: summary: Mobile: hide the executor footer and remove the empty gap above the keyboard while typing. + category: fix + dev: computeMobileBarKeyboardFlags no longer iOS-gates footerHidden, so Android keyboard-open now hides ExecutorStatusBar and drops the reserved footer+nav padding-bottom (composer sits flush above the keyboard). footerKeyboardOpen stays iOS-only. Supersedes FN-5707's Android gate. +- c202053: summary: Fix Planning Mode not scrolling on mobile so action buttons stay reachable. + category: fix + dev: The global mobile `.modal-lg`/`.modal:not(.confirm-dialog)` 100dvh rule was matching the embedded Planning shell (`.planning-modal--embedded`) and stretching it past its bounded `.planning-view` pane, clipping the footer under `overflow:hidden`. Mobile rule now qualifies as `.planning-view.open .planning-modal--embedded` (specificity 0,3,0) and re-pins `max-height:100%` so the inner flex scroll chain works. +- efa5d9b: summary: Verification (merge/step gate) timeout now scales with command scope instead of a flat 10 minutes. + category: fix + dev: verification-utils runVerificationCommand derives its default from the command — package-scoped (pnpm --filter/-F) gets 300s, workspace-scoped gets 900s — matching fn_run_verification (DEFAULT_TIMEOUT_PACKAGE_SEC/WORKSPACE_SEC). Project verificationCommandTimeoutMs still overrides; the 1800s hard cap still applies. Fixes workspace-scoped suites being killed as a 10-min infra timeout during merge/step verification. +- 7cd660f: summary: Fix stale overlap-blocker repair edge cases and dashboard display synchronization. + category: fix + dev: Adds effective write-scope repair handling for scheduler/file-scope lease consistency. +- 9a2e8a7: summary: Post-merge workflow steps now run once via the workflow graph instead of the merger. + category: internal + dev: Flips `experimentalFeatures.graphNativePostMerge` DEFAULT-ON so the graph is the sole post-merge owner; the legacy merger post-merge path (`runPostMergeWorkflowSteps`/`hasEnabledPostMergeWorkflowSteps`) is inert under the flag (kept until U7c). DB migration 130 rewrites legacy compiled `workflow_steps` enable ids (templateId ∈ built-in optional-group ids: browser-verification, code-review) to the graph node ids in tasks' `enabledWorkflowSteps` (idempotent, de-duped). `workflow_steps` table is retained. +- 347842f: summary: Retire the legacy workflow-steps store; workflow steps now run entirely graph-native. + category: internal + dev: U7c removes the last readers/writers of the legacy `workflow_steps` table and drops it via migration 131 (SCHEMA_VERSION 130→131, idempotent DROP). Removed: store CRUD (`create`/`update`/`delete`/`getWorkflowStep`), the workflow-compilation materializer (`materializeWorkflowSteps`), `migrateLegacyWorkflowSteps` + its `POST /api/workflows/migrate-legacy-steps` route and the editor's on-open migration notice, and the merger legacy post-merge execution path (worktree + prompt/script step run). Pre/post-merge steps record into `task.workflowStepResults`; `selectTaskWorkflow` now seeds `enabledWorkflowSteps` with default-on optional-group node ids only (the graph runs the workflow IR directly). `listWorkflowSteps()` returns only the in-memory plugin palette. Executor revive sources gate-ness from the recorded result status, not the table. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [c7cbae1] +- Updated dependencies [50a9471] +- Updated dependencies [7772ab3] +- Updated dependencies [744aa2c] +- Updated dependencies [b293525] +- Updated dependencies [c20c4b7] +- Updated dependencies [98a5052] +- Updated dependencies [e46ea00] +- Updated dependencies [d08e8db] +- Updated dependencies [6df4043] +- Updated dependencies [f5e1b96] +- Updated dependencies [0744ab3] +- Updated dependencies [9fabc9d] +- Updated dependencies [0049fb9] +- Updated dependencies [9a2709d] +- Updated dependencies [4880a0f] +- Updated dependencies [4cc9c2f] +- Updated dependencies [419d58f] +- Updated dependencies [a0954c7] +- Updated dependencies [575e211] +- Updated dependencies [f1b3bd8] +- Updated dependencies [7e7b0c6] +- Updated dependencies [0c53f46] +- Updated dependencies [d984fce] +- Updated dependencies [ef6e459] +- Updated dependencies [2d2dd50] +- Updated dependencies [3513d5f] +- Updated dependencies [4dab2b6] +- Updated dependencies [977000c] +- Updated dependencies [3f66e55] +- Updated dependencies [541f1f6] +- Updated dependencies [f5b588c] +- Updated dependencies [45727f1] +- Updated dependencies [775a1f8] +- Updated dependencies [79c602d] +- Updated dependencies [6c94ee0] +- Updated dependencies [429143e] +- Updated dependencies [301f25d] +- Updated dependencies [ea3cfee] +- Updated dependencies [0ae4499] +- Updated dependencies [f3f20ac] +- Updated dependencies [6415eed] +- Updated dependencies [2ce208e] +- Updated dependencies [8131d54] +- Updated dependencies [b6b5583] +- Updated dependencies [dd1b960] +- Updated dependencies [2c46cdc] +- Updated dependencies [ea5e12e] +- Updated dependencies [07209a4] +- Updated dependencies [da69e03] +- Updated dependencies [93da87d] +- Updated dependencies [c0d5353] +- Updated dependencies [59fc94b] +- Updated dependencies [afa33b7] +- Updated dependencies [d03d6c2] +- Updated dependencies [42f46a1] +- Updated dependencies [2442032] +- Updated dependencies [7a3a9a9] +- Updated dependencies [f685518] +- Updated dependencies [1d860ec] +- Updated dependencies [e48c75c] +- Updated dependencies [c202053] +- Updated dependencies [efa5d9b] +- Updated dependencies [7cd660f] +- Updated dependencies [9a2e8a7] +- Updated dependencies [347842f] + - @runfusion/fusion@0.49.0 ## 0.48.0 -### Highlights +### @fusion/dashboard -- Add a workflow dropdown to filter tasks in the dependency Graph view. -- Add a New Task dialog picker that seeds prompts from current-remote GitHub issues and PRs. -- Fix release pipeline so binaries and desktop installers publish again. -- Let quick-entry text use the full entry box width instead of wrapping early. -- Match Quick Chat and Terminal typography in the dashboard footer. +#### Patch Changes -### New +- @fusion/core@0.48.0 +- @fusion/engine@0.48.0 +- @fusion/i18n@0.39.11 +- @fusion-plugin-examples/cli-printing-press@0.1.28 +- @fusion-plugin-examples/compound-engineering@0.1.11 +- @fusion-plugin-examples/dependency-graph@0.1.42 +- @fusion-plugin-examples/roadmap@0.1.30 +- @fusion-plugin-examples/cursor-runtime@0.1.30 +- @fusion-plugin-examples/droid-runtime@0.1.37 +- @fusion-plugin-examples/hermes-runtime@0.2.61 +- @fusion-plugin-examples/openclaw-runtime@0.2.61 +- @fusion-plugin-examples/paperclip-runtime@0.2.61 -- Add a workflow dropdown to filter tasks in the dependency Graph view. -- Add a New Task dialog picker that seeds prompts from current-remote GitHub issues and PRs. +### @fusion/desktop -### Fixed +#### Patch Changes -- Fix release pipeline so binaries and desktop installers publish again. -- Let quick-entry text use the full entry box width instead of wrapping early. -- Match Quick Chat and Terminal typography in the dashboard footer. -- Prevent Create PR metadata generation from hanging and provide editable fallback content. -- Widen tablet Chat View agent response bubbles for easier reading. -- Retire dual-observe as a workflow-authoritative cutover prerequisite. -- Keep Planning Mode malformed AI responses retryable instead of stranding sessions. -- Keep Git Manager tabs reachable in mobile and docked layouts. -- Remove helper guidance above the task chat composer. -- Open Mission Manager mission-delete confirmations in the standard modal dialog. -- Make the task Changes tab inline diff panel wider on narrow screens. -- Equalize mobile bottom navigation side spacing. +- @fusion/core@0.48.0 +- @fusion/dashboard@0.48.0 +- @fusion/engine@0.48.0 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.48.0 +- @fusion/pi-claude-cli@0.48.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.48.0 + +### @runfusion/fusion + +#### Minor Changes + +- d7f3c70: summary: Add a workflow dropdown to filter tasks in the dependency Graph view. + category: feature + dev: Scopes plugin-hosted graph tasks through the dashboard workflow assignment payload. + +#### Patch Changes + +- a20235b: summary: Fix release pipeline so binaries and desktop installers publish again. + category: fix + dev: github-release job sparse-checks-out CHANGELOG.md (was missing a checkout, so the release-notes step threw ENOENT and published 0 assets on v0.47.0); desktop esbuild build externalizes @fusion/engine so it no longer tries to bundle node-pty's native .node binaries. +- 214a60c: summary: Let quick-entry text use the full entry box width instead of wrapping early. + category: fix + dev: Adds a QuickEntryBox-specific textarea padding override and CSS cascade regression coverage. +- 5a192ec: summary: Add a New Task dialog picker that seeds prompts from current-remote GitHub issues and PRs. + category: feature + dev: Reuses existing GitHub remote, issue, and pull list endpoints; PR prompts direct agents to address review comments. +- a554ceb: summary: Match Quick Chat and Terminal typography in the dashboard footer. + category: fix + dev: Footer launcher CSS now shares inherited font and color contracts between Quick Chat and Terminal. +- d359306: summary: Prevent Create PR metadata generation from hanging and provide editable fallback content. + category: fix + dev: Bounds PR metadata generation and validates non-empty PR bodies before GitHub PR creation. +- 29530b5: summary: Widen tablet Chat View agent response bubbles for easier reading. + category: fix + dev: Uses ChatView container queries to target assistant, streaming, and failure bubbles without widening user or Quick Chat bubbles. +- eb3833a: summary: Retire dual-observe as a workflow-authoritative cutover prerequisite. + category: fix + dev: Cutover readiness now uses the authoritative flag plus clean populated parity summaries; stale dual-observe settings remain inert. +- 3ae053e: summary: Keep Planning Mode malformed AI responses retryable instead of stranding sessions. + category: fix + dev: Hardens planning JSON candidate selection and persists bounded parse failures as retryable AI-session errors. +- f918896: summary: Keep Git Manager tabs reachable in mobile and docked layouts. + category: fix + dev: Makes the shared Git Manager tablist a non-wrapping horizontal touch scroller in mobile and embedded narrow containers. +- bd5a779: summary: Remove helper guidance above the task chat composer. + category: fix + dev: Task chat placeholders now carry active/idle/done composer guidance without an extra status shell. +- 7a00811: summary: Open Mission Manager mission-delete confirmations in the standard modal dialog. + category: fix + dev: Routes mission list and detail delete affordances through ConfirmDialogProvider with regression coverage. +- e473ba6: summary: Make the task Changes tab inline diff panel wider on narrow screens. + category: fix + dev: Reclaims task-detail body padding for compact inline diff lists with mobile CSS contract coverage. +- e702185: summary: Equalize mobile bottom navigation side spacing. + category: fix + dev: Adds tokenized MobileNavBar horizontal padding while preserving ICB and safe-area behavior. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [a20235b] +- Updated dependencies [d7f3c70] +- Updated dependencies [214a60c] +- Updated dependencies [5a192ec] +- Updated dependencies [a554ceb] +- Updated dependencies [d359306] +- Updated dependencies [29530b5] +- Updated dependencies [eb3833a] +- Updated dependencies [3ae053e] +- Updated dependencies [f918896] +- Updated dependencies [bd5a779] +- Updated dependencies [7a00811] +- Updated dependencies [e473ba6] +- Updated dependencies [e702185] + - @runfusion/fusion@0.48.0 ## 0.47.0 -### Highlights +### @fusion/dashboard -- Breaking: the WorkflowOptionalStep type, previously exported from @runfusion/fusion, is removed — any consumer importing it must migrate to optional-group nodes / ResolvedWorkflowOptionalStep. -- Merger unification (master-plan U0): runAiMerge (the FN-5633 clean-room AI merge path) is now the sole merge path. The engine dispatch, the fn task merge CLI command, -- Add X-Session-Id and X-Session-Affinity request headers to all LLM chat completion requests. These let LLM gateways sticky-route consecutive requests from the same conversation to the same backend, -- Structured changeset format with AI-distilled release notes for cleaner, user-facing changelogs. -- Workflow editor: add a Help section to the node detail pane. Every node now documents what it does, how to configure it, +#### Patch Changes -### New +- @fusion/core@0.47.0 +- @fusion/engine@0.47.0 +- @fusion/i18n@0.39.10 +- @fusion-plugin-examples/cli-printing-press@0.1.27 +- @fusion-plugin-examples/compound-engineering@0.1.10 +- @fusion-plugin-examples/dependency-graph@0.1.41 +- @fusion-plugin-examples/roadmap@0.1.29 +- @fusion-plugin-examples/cursor-runtime@0.1.29 +- @fusion-plugin-examples/droid-runtime@0.1.36 +- @fusion-plugin-examples/hermes-runtime@0.2.60 +- @fusion-plugin-examples/openclaw-runtime@0.2.60 +- @fusion-plugin-examples/paperclip-runtime@0.2.60 -- Merger unification (master-plan U0): runAiMerge (the FN-5633 clean-room AI merge path) is now the sole merge path. The engine dispatch, the fn task merge CLI command, -- Add X-Session-Id and X-Session-Affinity request headers to all LLM chat completion requests. These let LLM gateways sticky-route consecutive requests from the same conversation to the same backend, -- Structured changeset format with AI-distilled release notes for cleaner, user-facing changelogs. -- Workflow editor: add a Help section to the node detail pane. Every node now documents what it does, how to configure it, -- Workflow editor: optional steps are now graph-native. A new optional-group container node (foreach/loop-style) holds a subgraph the executor runs once when the group is enabled for a task (per-task enabledWorkflowSteps +… -- Workspace tasks no longer render blank in the dashboard. Task cards and the task detail view now surface a workspace task's acquired per-sub-repo worktrees as a read-only "N repos acquired" placeholder and flat repo → wo… -- Add workspace mode: open a folder of git repositories as a single Fusion project. The agent acquires per-repo worktrees on demand via fn_acquire_repo_worktree as it discovers it needs to work in each sub-repo. -- Workspace mode (Phase A / U2): harden per-repo worktree acquisition. Each sub-repo worktree now gets the task identity guard installed (single-repo parity), -- Workspace mode (Phase C U3): serialize concurrent same-sub-repo lands with a per-repo file-scope lease. When two workspace tasks try to land onto the SAME sub-repo's local integration ref at the same time, -- Workspace mode Phase A (U1): executor session scoping. In workspace mode the executor now skips the root worktree acquisition and every rootDir git preflight (base-commit capture, contamination, worktree-liveness), -- Workspace mode (Phase B, U1): per-repo post-session change capture, contamination detection, and worktree-invariant verification. In workspace mode the executor now loops task.workspaceWorktrees, -- Workspace mode (Phase B, U2): per-repo review at both review entry points plus per-repo fn_task_done completion + scope-leak verification. -- Workspace mode Phase C (U1): per-repo merge loop. Extract landOneRepo from the runAiMerge clean-room land closure (single-repo behavior unchanged) and add landWorkspaceTask, -- Workspace mode Phase C (U2): per-repo landed predicate, finalize-once, and idempotent auto-retry-then-park. -- Workspace mode Phase D (U1): workspace-aware self-healing. The existing merging-status reconcilers no longer mis-finalize a partial-landed workspace task (recoverInterruptedMergingTasks now clears the transient merging s… -- Saved agent tool-output details now default off to reduce persisted log payloads, while timeline rows remain logged and detailed tool arguments/results stay available via the global persistAgentToolOutput: true opt-in. -- Harden the workspace per-repo land loop against partial-failure races. A lost landedSha DB write after a sub-repo's integration ref already advanced no longer silently continues — it escalates to a retryable partial-land… -- Address Phase C workspace merge-loop review feedback. A sub-repo recognized as already-landed via the Fusion-Task-Id trailer fallback (when its landedSha persist was lost) now resolves and re-records a concrete landedSha… -- Close task detail dialogs and embedded task-detail hosts immediately after delete confirmations complete, while delete requests continue reporting success or error toasts asynchronously. -- Stack task-detail Chat agent headers above output blocks in the List View split-pane detail pane while preserving full-width desktop chat layout. +### @fusion/desktop -### Fixed +#### Patch Changes -- Fix narrow right-sidebar Dev Server preview overlap by replacing the inline preview with an accessible modal launcher when the dock is very narrow, while keeping inline preview for full-page, mobile viewport, -- Fix ntfy test notifications to honor unsaved Settings form config so users can enable ntfy, enter a valid topic/server/token, and send a test notification before saving. -- Fix multiworkspace tasks failing to complete. task.workspaceWorktrees is now durably persisted (it previously had no SQLite column, +- @fusion/core@0.47.0 +- @fusion/dashboard@0.47.0 +- @fusion/engine@0.47.0 -### Breaking +### @fusion/engine -- Breaking: the WorkflowOptionalStep type, previously exported from @runfusion/fusion, is removed — any consumer importing it must migrate to optional-group nodes / ResolvedWorkflowOptionalStep. +#### Patch Changes + +- @fusion/core@0.47.0 +- @fusion/pi-claude-cli@0.47.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.47.0 + +### @runfusion/fusion + +#### Minor Changes + +- a6252e5: Merger unification (master-plan U0): `runAiMerge` (the FN-5633 clean-room AI merge path) is now the **sole** merge path. The engine dispatch, the `fn task merge` CLI command, and the UI-only (`--no-engine`) dashboard merge all route through `runAiMerge`; the legacy `aiMergeTask` pipeline is soft-deprecated (body retained, `@deprecated`). The `merger.mode` setting is now **inert and deprecated** — the type and field are retained as published surface, but the `"deterministic"` value no longer selects a different pipeline; observing it logs a one-time deprecation warning and proceeds via the unified AI merge path. A new shared `assertNotWorkspaceTaskMerge` guard rejects workspace-mode tasks (populated `workspaceWorktrees`) at every merge entry point with a clear error until per-repo merge support (master-plan U6) lands. +- e5382f0: **Breaking:** the `WorkflowOptionalStep` type, previously exported from `@runfusion/fusion`, is removed — any consumer importing it must migrate to `optional-group` nodes / `ResolvedWorkflowOptionalStep`. + + Retire the legacy optional-step DECLARATION model now that optional steps are graph-native `optional-group` nodes. Remove the `WorkflowOptionalStep` type and the `WorkflowIrV2.optionalSteps` IR field, drop the workflow node editor's optional-step declaration authoring panel (sidebar section, mobile tab, and collapse state), and stop threading an `optionalSteps` array through `flowToIr`/`serializeGraph`. A legacy persisted `optionalSteps` key on an old v2 workflow row is now tolerated (ignored, not validated) at parse so old rows still load as v2, and the rollback-downgrade heuristic still treats such a row as v2. The per-task optional-step toggle surfaces are unchanged — they continue to list and toggle optional steps sourced from `optional-group` nodes via `resolveWorkflowOptionalSteps` (`ResolvedWorkflowOptionalStep`). + +- e17e9bc: Add `X-Session-Id` and `X-Session-Affinity` request headers to all LLM chat completion requests. These let LLM gateways sticky-route consecutive requests from the same conversation to the same backend, and let observability tools (Langfuse, Arize, etc.) group the otherwise-stateless API calls of a session into a single multi-turn trace. Both headers carry the same stable identifier — the task id when available (stable across pause/resume), otherwise the pi session id. (#1675) +- 2019e5a: summary: Structured changeset format with AI-distilled release notes for cleaner, user-facing changelogs. + category: feature + dev: Changeset bodies now use labeled fields (summary, category, dev). A linter enforces the format in the PR gate. Release notes are distilled into grouped, end-user-facing sections. See .changeset/README.md for the format guide. +- 9c6b4dd: Workflow editor: add a Help section to the node detail pane. Every node now documents what it does, how to configure it, and its inputs/outputs/edges — including the engine-managed merge-lifecycle nodes (auto-merge gate, branch-group member integration, branch-group promotion, PR and recovery nodes), which are surfaced read-only with an "Engine-managed" badge. +- 0c031b8: Workflow editor: optional steps are now graph-native. A new `optional-group` container node (foreach/loop-style) holds a subgraph the executor runs once when the group is enabled for a task (per-task `enabledWorkflowSteps` + workflow `defaultOn`) and bypasses when disabled. All seven built-in add-ons (documentation-review, qa-check, security-audit, performance-review, accessibility-check, browser-verification, frontend-ux-design) are insertable from the node-editor palette as a node or wrapped in an optional-group. The built-in coding and stepwise-coding workflows now express `browser-verification` as an optional-group. Optional-group enable resolution correctly handles id collisions with add-on template ids, so a group's enable state is not silently bypassed during task creation/update. (The legacy declaration-based optional-steps model is retired in a sibling changeset; only the `workflow-step` seam infrastructure removal remains a follow-up.) +- 023e4b0: Workspace tasks no longer render blank in the dashboard. Task cards and the task + detail view now surface a workspace task's acquired per-sub-repo worktrees as a + read-only "N repos acquired" placeholder and flat repo → worktree/branch list, + instead of an empty branch area (no `task.worktree`/`task.branch`). +- 8f4098e: Add workspace mode: open a folder of git repositories as a single Fusion + project. The agent acquires per-repo worktrees on demand via + `fn_acquire_repo_worktree` as it discovers it needs to work in each sub-repo. +- 12d33c5: Workspace mode (Phase A / U2): harden per-repo worktree acquisition. Each sub-repo worktree now gets the task identity guard installed (single-repo parity), a per-repo base commit SHA captured local-first against that sub-repo's resolved integration branch (shared `integrationBranch` override stripped so each repo falls through to its own `origin/HEAD`), and same-sub-repo acquisition exclusivity registered in the path-keyed active-session registry. Re-acquiring an already-acquired `(taskId, repo)` is idempotent, and acquisition failures surface an error plus an audit event instead of silently stalling. +- 64e87f9: Workspace mode (Phase C U3): serialize concurrent same-sub-repo lands with a per-repo file-scope lease. When two workspace tasks try to land onto the SAME sub-repo's local integration ref at the same time, the merge phase now registers the sub-repo's absolute path in the path-keyed active-session registry under a distinct `workspace-repo-land` kind before each land and releases it in a `finally` (on land success or failure — no stuck lock). A second task contending for the same sub-repo fast-fails with a retryable `WorkspaceRepoLandBusyError`, which the existing partial-land auto-retry-then-park dispatch handles (consume a `mergeRetry`, re-enqueue with backoff, then operator-park). Disjoint sub-repos lease different paths and never serialize against each other. The lease prevents clean-room ai-merge worktree collisions; ref correctness is already guaranteed by `advanceIntegrationBranchRef`'s CAS (concurrent-advance → rebuild). +- 09bd01b: Workspace mode Phase A (U1): executor session scoping. In workspace mode the executor now skips the root worktree acquisition and every rootDir git preflight (base-commit capture, contamination, worktree-liveness), runs the agent session rooted at the browse-only workspace root, and tracks acquired sub-repo worktrees as a per-task set. Single-repo tasks are unchanged (one-element set, byte-for-byte preflight parity). +- fc9423e: Workspace mode (Phase B, U1): per-repo post-session change capture, contamination detection, and worktree-invariant verification. In workspace mode the executor now loops `task.workspaceWorktrees`, reusing `captureModifiedFiles` per sub-repo (diffing each against its own `baseCommitSha`, with a merge-base fallback when undefined) to aggregate repo-prefixed `task.modifiedFiles` and surface per-repo contamination, and un-stubs `verifyWorktreeInvariants` to assert each acquired worktree's git toplevel and `fusion/` branch. Single-repo behavior is unchanged. +- 81edbee: Workspace mode (Phase B, U2): per-repo review at both review entry points plus per-repo `fn_task_done` completion + scope-leak verification. In workspace mode both review call sites (the in-session `fn_review_step` tool and the step-inversion review seam) now loop the single-cwd `reviewStep` once per acquired sub-repo (cwd = each repo's worktree) and aggregate the repo-tagged verdicts as a conjunction — the task is reviewed only when every sub-repo approves, and the first failing sub-repo's verdict (with repo-tagged findings) drives the existing verdict→edge mapping. `fn_task_done` now verifies worktree invariants per acquired repo and iterates the scope-leak guard per sub-repo (cwd = repo worktree, repo `baseCommitSha`), blocking completion on any sub-repo carrying off-scope changes and naming the repo. Adds a minimal shared repo-prefix-derivation helper (`workspace-paths.ts`). Single-repo behavior is unchanged. + + Phase-B hardening: the per-repo scope-leak guard now fails CLOSED — a thrown capture/diff error in any sub-repo refuses `fn_task_done` (naming the repo) instead of failing open, and a scoped task that acquired zero sub-repo worktrees is blocked rather than silently passing. A legitimate per-repo `.changeset/` file is no longer falsely flagged off-scope (the always-allowed carve-out now runs against the repo-local path). Per-repo review stops at the first non-APPROVE sub-repo so a later repo's reviewer error can't mask an already-determined REVISE/RETHINK. Per-repo capture failures are isolated (one repo's error no longer drops the whole modified-files write), and the reported offending/failing repo is now deterministic (sorted repo iteration). Single-repo behavior remains unchanged. + +- 744ed09: Workspace mode Phase C (U1): per-repo merge loop. Extract `landOneRepo` from the + `runAiMerge` clean-room land closure (single-repo behavior unchanged) and add + `landWorkspaceTask`, which lands each acquired sub-repo's `fusion/` branch onto + that repo's OWN local integration ref (re-resolved per repo with overrides stripped), + land-as-you-go with no remote push. The engine merge dispatch and the user-facing + CLI/dashboard merge doors now route workspace tasks through this loop instead of + throwing; `store.mergeTask`, `aiMergeTask`, and the `runAiMerge` chokepoint keep + throwing `WorkspaceTaskMergeError` as defense-in-depth. +- 7544346: Workspace mode Phase C (U2): per-repo landed predicate, finalize-once, and idempotent + auto-retry-then-park. `landWorkspaceTask` now records each sub-repo's `landedSha` after + its branch advances that repo's local integration ref, and on a re-run SKIPS any repo + whose recorded `landedSha` is an ancestor of (or equals) its current integration tip — so + an interrupted multi-repo land retries only the un-landed repos and never re-advances an + already-landed ref. When every acquired repo's landed predicate holds, the task moves to + `done` EXACTLY ONCE via the task-global finalize path with an aggregate `mergeDetails` + (representative `commitSha` + a `workspaceLandedShas` map). A partial land (some repos + unlanded) does not move the task done; the engine merge dispatch surfaces it as a + retryable failure that consumes a `mergeRetry` and auto-retries the merge (skipping landed + repos) up to the configured max, then operator-parks the task as failed. +- 7cd204e: Workspace mode Phase D (U1): workspace-aware self-healing. The existing merging-status reconcilers no longer mis-finalize a partial-landed workspace task (recoverInterruptedMergingTasks now clears the transient `merging` status and re-enqueues the idempotent per-repo land instead of running the single-commit finalize over the non-git workspace root), and recoverMergeableReviewTasks now admits workspace tasks (task.worktree is null). Adds three reconcilers: partial-land recovery (re-enqueue via enqueueMerge, FORK-A unrecoverable → park failed; guarded by autoMerge:false + user-pause + workspace-aware liveness), phantom `workspace-repo-land` lease reclaim (new `entriesByKind` registry seam), and per-repo worktree cleanup from stored paths (no temp walk). New run-audit events: `task:reconcile-workspace-partial-land`(`-no-action`), `task:reclaim-phantom-workspace-land-lease`, `task:reconcile-orphaned-workspace-worktree`. + + Phase D P1 TOCTOU fix (merge-queue dispatch blind spot): the workspace partial-land and phantom-land-lease reconcilers now consult a new `ProjectEngine.isMergePending(taskId)` seam (true if the task is in the engine's in-memory `mergeQueue` or `mergeActive`). This closes the dequeue→rawMerge window where a workspace task is being merged but no other liveness signal fires yet (the id is shifted out of `mergeQueue` while `activeMergeTaskId` / `merging` status / the `workspace-repo-land` lease are not yet set inside `landWorkspaceTask`). The partial-land reconciler skips a merge-pending candidate (emitting `task:reconcile-workspace-partial-land-no-action` with reason `merge-pending`) instead of launching a second concurrent `landWorkspaceTask` (double-squash risk, since a same-task land lease is not contention), and lease reclaim leaves a merge-pending owner's not-yet-registered lease alone. Wired via `InProcessRuntime.setMergePendingProvider`; undefined (unwired) is treated as not-pending so existing guards still apply. + + Phase D review hardening: every single-commit-finalize self-healing site is now workspace-gated so a partial-landed workspace task can never be marked fully merged on one repo's commit — `recoverStuckMergeDeadlocks` (the twin of recoverInterruptedMergingTasks), `recoverOrphanOnlyScopeViolations`, `recoverAlreadyMergedReviewTasks`, `recoverBranchMisboundInReviewTasks`, and `recoverDoneTaskMergeMetadata` all skip workspace tasks and defer recovery to the workspace partial-land reconciler. The partial-land reconciler now bounds its `enqueueMerge` re-enqueue (parks `failed` after repeated queue rejections instead of looping forever) and treats a branch-gone-and-not-landed sub-repo as unrecoverable even when a stale unreachable `landedSha` is present. Phantom land-lease reclaim now only reclaims a demonstrably TERMINAL owner (never an `in-progress` executing task that registered its lease early). Orphan per-repo worktree removal failures are now engine-logged and retry-bounded. The canonical `isRepoLanded` predicate moved to a new dependency-free `workspace-land-predicate` module, dissolving the self-healing ↔ merger-ai import cycle (public export preserved). + +#### Patch Changes + +- 038ac30: Saved agent tool-output details now default off to reduce persisted log payloads, while timeline rows remain logged and detailed tool arguments/results stay available via the global `persistAgentToolOutput: true` opt-in. +- 627bdcf: Harden the workspace per-repo land loop against partial-failure races. A lost `landedSha` DB write after a sub-repo's integration ref already advanced no longer silently continues — it escalates to a retryable partial-land error, and the landed predicate now recognizes an already-landed repo via its `Fusion-Task-Id` trailer on retry, so a re-run never produces a second squash commit. The land lease is now taskId-aware across registry kinds: a merging task can no longer clobber an executing task's acquire lease on a shared sub-repo (any foreign-task holder is treated as contention), and the active-session registry rejects foreign-task overwrites instead of silently clobbering. The transient `merging` status is always reset before any throw escapes the land loop (no stuck-`merging` leak), and finalize re-reads the latest task and no longer swallows the merge-details persist failure (no finalizing on a stale row). + + Harden the workspace merge dispatch and user-facing merge doors. The partial-land retry catch now fails closed when the task row can't be read (DB outage no longer triggers an indefinite retry storm). The merge-confirmed reachability fast-path skips workspace tasks (whose recorded commitSha lives in a sub-repo, not the workspace root) so a fully-landed workspace task is no longer demoted/parked. The dashboard and CLI merge doors now report `merged: true` (and `mergeConfirmed`/`commitSha`) when a workspace fully lands, mirroring the engine result. Transient sub-repo land-lease contention (`WorkspaceRepoLandBusyError`) is re-enqueued with capped backoff on a separate bounded counter instead of burning the merge-retry quota, so pure contention can't park a never-failed task. Retry backoff is capped at 60s. + +- 3a71237: Address Phase C workspace merge-loop review feedback. A sub-repo recognized as already-landed via the `Fusion-Task-Id` trailer fallback (when its `landedSha` persist was lost) now resolves and re-records a concrete `landedSha`, so finalize no longer drops it and mis-reports a fully-landed workspace task as a no-op (`mergeConfirmed:false`). A manual merge that hits sub-repo land-lease contention now surfaces the busy error to the user without consuming the persisted `mergeRetries` quota (matching the auto path's separate busy counter). The partial-land retry persists the incremented retry count before arming the backoff timer — a failed write now fails closed instead of looping without consuming budget — and clears the stale busy-contention counter when a real partial land supersedes transient busy failures. The CLI and dashboard merge doors use the shared `isWorkspaceTask` predicate instead of re-inlining the workspace check, and integration-branch shell interpolation in base-commit capture uses POSIX single-quote escaping. +- e9a6955: Fix narrow right-sidebar Dev Server preview overlap by replacing the inline preview with an accessible modal launcher when the dock is very narrow, while keeping inline preview for full-page, mobile viewport, and expanded pop-out hosts. +- 7b60539: Fix ntfy test notifications to honor unsaved Settings form config so users can enable ntfy, enter a valid topic/server/token, and send a test notification before saving. +- cf2f3ba: Close task detail dialogs and embedded task-detail hosts immediately after delete confirmations complete, while delete requests continue reporting success or error toasts asynchronously. +- b9821ee: Stack task-detail Chat agent headers above output blocks in the List View split-pane detail pane while preserving full-width desktop chat layout. +- f062819: Fix multiworkspace tasks failing to complete. `task.workspaceWorktrees` is now durably persisted (it previously had no SQLite column, so `fn_acquire_repo_worktree`'s write was dropped on every persist and `fn_task_done` always reported "acquired no sub-repo worktrees"). Concurrent workspace tasks no longer collide on the shared browse-root active-session path — each task gets a task-scoped session key, so a second workspace task no longer fails with "active-session path … is held by …". + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [038ac30] +- Updated dependencies [627bdcf] +- Updated dependencies [3a71237] +- Updated dependencies [e9a6955] +- Updated dependencies [7b60539] +- Updated dependencies [cf2f3ba] +- Updated dependencies [b9821ee] +- Updated dependencies [a6252e5] +- Updated dependencies [f062819] +- Updated dependencies [e5382f0] +- Updated dependencies [e17e9bc] +- Updated dependencies [2019e5a] +- Updated dependencies [9c6b4dd] +- Updated dependencies [0c031b8] +- Updated dependencies [023e4b0] +- Updated dependencies [8f4098e] +- Updated dependencies [12d33c5] +- Updated dependencies [64e87f9] +- Updated dependencies [09bd01b] +- Updated dependencies [fc9423e] +- Updated dependencies [81edbee] +- Updated dependencies [744ed09] +- Updated dependencies [7544346] +- Updated dependencies [7cd204e] + - @runfusion/fusion@0.47.0 ## 0.46.0 @@ -10904,6 +14134,15 @@ for reference. - Updated dependencies [a2ed6d0] - @runfusion/fusion@0.1.0 +## 0.39.26 + +### @fusion/i18n + +#### Patch Changes + +- Updated dependencies [be55d0a] + - @fusion/core@0.61.0 + ## 0.39.25 ### @fusion/i18n @@ -11106,6 +14345,14 @@ for reference. - @fusion/core@0.40.0 +## 0.11.52 + +### @fusion/droid-cli + +#### Patch Changes + +- @fusion-plugin-examples/droid-runtime@0.1.52 + ## 0.11.51 ### @fusion/droid-cli diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bf835f330..ea5acae6e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,24 +2,392 @@ User-facing release notes aggregated across all packages. This file is auto-synced from each `packages/*/CHANGELOG.md` by `scripts/release.mjs` — do not edit by hand. -## 0.60.0 +## 0.70.0 ### Highlights -- Fixed agents silently going stale for hours despite the heartbeat repair audit -- Bundled example plugins no longer fail to enable with a missing package error -- List view popups now match Board's movable task window -- Planning Mode auto-retries a stuck AI generation before erroring -- Merger AI model is now configurable under Global and Project Models + +- Require PostgreSQL storage and complete runtime parity across projects, archives, missions, plugins, and maintenance. +- Settings theme selector is merged into the current-theme row and lists every color theme. +- Refresh workspace dependencies before a full System panel rebuild. +- Show migration details once in the dashboard and system inbox after SQLite cutover. +- Bundle embedded PostgreSQL for zero-system-install local storage when DATABASE_URL is unset. ### New -- Open tasks as popups now applies to List clicks with the same movable task window as the Board -- Planning Mode now auto-retries a stuck AI generation up to 3 times before showing an error -- Add a Plan action to planning/ideas/hold task cards that opens Planning Mode from the card -- Make the merger AI model configurable under Global and Project Models + +- Settings theme selector is merged into the current-theme row and lists every color theme. +- Refresh workspace dependencies before a full System panel rebuild. +- Show migration details once in the dashboard and system inbox after SQLite cutover. +- Bundle embedded PostgreSQL for zero-system-install local storage when DATABASE_URL is unset. +- Default local backend is now embedded PostgreSQL; set FUSION_NO_EMBEDDED_PG=1 for legacy SQLite. +- Add a workflow setting to disable idle heartbeat task patrol. +- Show when Plan Review budget exhaustion needs approval and make the replan cap configurable. +- Chat agents and Grok CLI sessions now have board, delegation, web, and knowledge retrieval tools. +- Auto-retry executor tool-call failures before parking tasks. +- Optionally escalate an executor run to a stronger model or configured node after same-model retries are exhausted. +- Add a diagnostic summary and one-click "Retry with a different model/node" to the Task Failed banner. +- Add a Hide imported toggle that filters imported issues, PRs, and GitLab items from Import Tasks. +- Planning summary description now renders formatted markdown by default. +- Quick Add image attachments now show compact previews you can tap to open full-size in a resizable window. +- Add a dedicated fallback model lane for the AI merger, configurable under Project Models. +- Pin up to 3 chat conversations to keep important ones at the top. +- Add a read-only tool to review a task's full agent log from chat. +- Task-detail chat now proactively narrates step progress, failures, and review outcomes in real time. +- Planning Mode now previews the generated plan before you choose whether to refine it. +- Show a Reverted badge on completed tasks whose changes were rolled back. +- Add a setting to write generated task definitions in the operator's supported input language. +- Dashboard keyboard shortcuts now toggle — re-press a shortcut to close its interface. +- Add a global option to skip confirmation dialogs for critical actions. +- Add an executor fallback model and retry the primary model before blocking on fallback exhaustion. +- Triage-detected duplicate tasks are now blocked for a Keep/Delete decision instead of auto-deleted. +- Add a Create fix task button on failed PR checks in the GitHub import preview. +- Add planner clarification controls with ntfy and mailbox alerts. +- Add a per-task Merger model and thinking selection to the Quick Add model dropdown. +- Split backup settings into global Database Backups and project Memory Backups. +- Show a local codebase token estimate and on-disk size on the project Dashboard Overview. +- Add a one-click "Restart Fusion" button to the update banner after an in-app update. +- Add a Refresh checks button to GitHub import PR previews for fresh CI status. +- Add a one-click "Restart Fusion" button to the Settings modal after an in-app update. +- Add three new dashboard color themes: Cobalt, Clay, and Moss. +- Show active task reasoning by default in Activity Live logs. +- Add Kimi K3 model selection and token-cost support. +- Model dropdowns keep the provider header pinned while scrolling and let you collapse each provider list. +- Task detail action row now matches Quick Add — Eye icon for oversight, plus attach and GitHub-tracking buttons. +- Add tap-to-reveal names for mobile executor footer stats. +- Add Todo API read + create-task endpoints so scripts can turn a todo into a running task. +- Choose which quick-action tabs appear in the mobile footer nav. +- Let operators post GitHub issue comments directly from Import Tasks. +- Add a first-class Claude runtime that drives Claude Code over ACP. +- Remove the footer AI session pill; background progress now appears in the session notification banner. +- Reorder and add more mobile footer quick actions, applied in real time. +- The Import from GitHub screen now shows a status indicator while issues are being translated. +- GitHub import pages all open issues with Prev/Next; linked issues close when tasks reach Done. +- Auto-translate foreign-language GitHub issues in the Import Tasks panel, with a target language and model you choose. +- The GitHub import screen shows far more issues at once, and Import now sits under the issue you are reading. +- Imported GitHub and GitLab issues now carry their screenshots as task attachments, so agents can see them. +- Offer AI translation in Import Tasks when issue/PR content is not the dashboard language. +- Keep the operator's original task description at the top of generated PROMPT.md specs. +- Optional LLM session advisor for planner overseer (off by default; enable and set model to use). +- Command Center productivity, team, token, and tool analytics work on the PostgreSQL backend. +- Command Center workflow, GitHub-issue, signal, and live-snapshot analytics now work on the PostgreSQL backend. +- Goals work on the PostgreSQL backend — the Goals view and mission goal-links load instead of erroring. +- Generating insights works on the PostgreSQL backend — the insight run executor and stale-run sweeper run in PG mode. +- Insights work on the PostgreSQL backend — the Insights dashboard loads instead of erroring. +- Dashboard banner after SQLite auto-migration to PostgreSQL with backup location and help link. +- Mission autopilot runs on the PostgreSQL backend — missions advance automatically instead of autopilot being disabled. +- Missions work on the PostgreSQL backend — the Missions dashboard and goal→mission links load instead of erroring. +- Isolate projects sharing the embedded PostgreSQL cluster — tasks, config, and archived tasks are scoped per project. +- Remove node settings sync on the PostgreSQL backend — nodes share the database, so settings are already shared. +- Remove task mesh replication entirely — nodes replicate through the shared PostgreSQL database. +- Research runs actually execute on the PostgreSQL backend instead of staying queued forever. +- Research works on the PostgreSQL backend — the Research dashboard loads and runs CRUD instead of erroring. +- Live dashboard updates (SSE) work on the PostgreSQL backend for missions, research, and insights. +- Creating, editing, and deleting custom workflows works on the PostgreSQL backend. +- Plans that need approval now also post a task-linked message to your dashboard mailbox. +- AI planning, subtask, and mission interviews are now multi-tab — any tab can use the same session. +- Add Quality plugin with Task QA tab for preview servers, test runs, reports, and suggested cases. +- Control the overseer session advisor from project settings, per task, and Quick Add. +- Settings search now finds and jumps to individual settings, and settings screens share one type scale. +- Pin each task to one derivable worktree directory when worktree naming is "Task ID". +- Todo lists now work on the embedded-PostgreSQL backend instead of erroring. ### Fixed -- Fix bundled example plugins failing to enable with a missing @fusion/core package error -- Fix agents silently going stale for hours even though the heartbeat repair audit was running -- Settings search now surfaces Project Models Chat default settings when searching for chat + +- Suppress the Planning Mode reconnecting hint on persisted question screens. +- Hide the interview reconnecting hint on persisted question and review screens. +- Settings now uses the same compact color-theme dropdown as the dashboard. +- Restore agent models, workflow lanes, Skills, goals, and Reliability after PostgreSQL migration. +- A task honestly parked as blocked now stays parked through engine pause/abort and workflow-graph teardown. +- Fix agent AI interviews to use the configured planning model and preserve runtime suggestions. +- Show live phase, table, row-copy, verification, and failure progress during SQLite migration. +- Recover agent interviews when models return thinking-only or malformed JSON responses. +- Fix dashboard skill discovery lifecycle in PostgreSQL mode. +- Preserve late task, workflow, and mission fields during SQLite-to-PostgreSQL migration. +- Recover stale executor sessions with bounded fresh-session retries while preserving task progress. +- Settings now opens on the Appearance section by default. +- Fix startup failures and a leaked server when two Fusion processes start embedded Postgres at the same time. +- Repair macOS embedded PostgreSQL dylib compatibility links before startup. +- Starting a second Fusion process no longer fails with a Postgres lock-file error. +- Block empty-diff task finalizes that skipped verification steps so reverted work can't reach done. +- Reverted-work tasks no longer merge to done as empty no-ops; they park for review. +- Executors can end a genuinely-impossible task as "blocked" instead of laundering it into done. +- Dashboard API requests now resolve an explicit registered project instead of silently using the launch directory. +- Failed tasks with pre-fix promotion history can no longer auto-promote past the failure-provenance guard. +- Fix manual agent-run creation failing on PostgreSQL when a heartbeat executor is attached. +- Keep Anthropic subscription sessions connected by refreshing OAuth credentials with the correct client identity. +- Fix Anthropic subscription logins failing tasks with "Provider is not configured: anthropic". +- Fix protected image artifacts so previews and links load in authenticated dashboards. +- Fix a dashboard/app boot crash on databases created before the bulk-completion-refusal change. +- Fix startup failures when several projects migrate against one PostgreSQL cluster at the same time. +- Stop more agents from running than the global concurrency cap allows. +- The task composer's Save button no longer has its label cut off on mobile. +- Fix first-boot SQLite migration failures while preserving all legacy project data. +- Fix data stores that silently failed against PostgreSQL by hitting removed SQLite paths. +- Plan Review revisions no longer loop forever; tasks escalate to approval after repeated revises. +- Completed Planning Mode sessions that create multiple tasks now stay in planning history. +- Prevent startup crashes while recovering plugins from retained SQLite data. +- Fix task refinement/duplication, merge verification, and workflow checkpoint persistence on PostgreSQL. +- Harden session-routing header wiring so a missing model-auth method can't break agent startup. +- Fix tasks getting stuck in Planning forever after a plan review asks for revisions. +- Fix branch-group controls for tasks in non-default dashboard projects. +- Prevent implementation-incomplete workflow merge failures from false-completing as no-op done. +- Stop posting two completion comments on a linked issue when a task is both imported and tracked. +- Fusion self-repo issues now actually show the target release version when a task closes. +- Grok CLI failures now show the actual error instead of an empty chat message. +- Fix a deleted Planning Mode session silently reappearing after an in-flight generation finishes. +- Fix plugin skill toggles for custom skillFiles paths so sessions honor them. +- Fix Compound Engineering plugin skills missing from the published package. +- Reports, CLI Printing Press, and WhatsApp Chat plugins now load from global installs. +- Pressing "New session" in Planning now always focuses the compose input. +- Give terminally failed planning tasks deterministic fallback titles. +- Make idle triage patrol back off during model outages. +- Fix Project Models workflow model lane saves. +- Surface duplicate-decision tasks on cards and in the operator mailbox. +- Tasks parked by a refused fn_task_done no longer resurrect and strand at code review. +- The planner overseer now notices a failed in-progress task immediately instead of after two hours. +- Honor custom project workflow defaults in triage guidance. +- Hide the GitLab import tab when GitLab integration is disabled in settings. +- Fix Agents controls panel overlapping surrounding content on narrow viewports. +- Fix concurrency sliders being undraggable on mobile touch devices. +- Chat "Thinking" reasoning blocks now start collapsed for a cleaner transcript. +- Exclude long engine pauses from in-progress task execution time. +- Fix Mailbox artifact messages — "Open artifact" now loads without an auth error and "View task" opens the task. +- Transient provider failures of the Plan Review gate no longer bounce tasks back to planning. +- GitHub import skips prior issues after description edits or owner/repo casing changes. +- Fix task chat showing a stale agent message while generating a new reply. +- Move project summarization model controls next to summarization settings. +- Chat agents no longer switch your checked-out branch unless you ask. +- Prevent inline Code Review steps from failing before they can run. +- The GitHub/GitLab Import Tasks screen now marks an issue, PR, or item as "Imported" immediately after importing it. +- Show the underlying error message for failed tool calls in the task Activity feed. +- Auto-merge now retries AI provider blips instead of permanently failing the task. +- AI merge rejections now say why, and a stranded merge can be retried without waiting. +- Concurrent soft-delete during a heartbeat move no longer strands an agent in error. +- Quick Add overseer, priority, fast, GitHub, and attach icons now render at one uniform size. +- Plan Review now backs off and pauses on provider rate limits instead of retrying every 30s for hours. +- Plan Review no longer loops forever on reviewer retry storms — it fails the task with a clear error. +- Concurrency slider current-use dots now line up with the running-count value on the dashboard and footer. +- Fix already-approved plans being re-asked for approval after recovery. +- Task-detail popups now open in — and stay scoped to — the view where you opened them. +- Move the room thinking-effort control from the room header into the composer Brain icon next to attach. +- Fix dashboard secondary text labels rendering an unintended color from an undefined CSS token. +- Ensure required database schemas always initialize before plugin tables on boot. +- Per-task token budgets now enforce — soft caps alert once and hard caps pause the task. +- Planning Mode and interview questions now render markdown formatting correctly. +- Fix chat room messages rendering out of chronological order. +- Auto-summarized task titles now match the language of the task description. +- Keep task deletion confirmations visible until users explicitly choose an action. +- Preserve GitLab import tracking metadata when tasks are read or restored. +- Embedded PostgreSQL now boots on hosts with a 64MB /dev/shm. +- Preserve GitLab import tracking metadata in normal task reads. +- Keep the Settings GitHub star counter up to date with a lightweight, in-view refresh. +- Archiving a task now deletes its git worktree so pinned worktrees no longer leak. +- Mobile "More" navigation drawer now closes with a swipe-down gesture. +- GitHub import "Close issue" button is now red and asks for confirmation before closing. +- Align mobile Settings provider cards with the section header's left edge. +- Fix fn backup and scheduled database backups in the default embedded PostgreSQL setup. +- Show the CLI Binary panel in default Settings instead of behind the Advanced switch. +- Keep Quality hub actions visible beneath the title on mobile. +- Fix tasks stalling when a leftover git branch collided with a new worktree. +- Keep agent reads responsive by reusing the host TaskStore across extension loads. +- Archiving a workspace task now removes its per-sub-repo worktrees. +- Quick Add action buttons are no longer shrunk in shadcn themes. +- Make Respecify replan tasks across workflow board layouts. +- Fix excessive right padding in the task detail Feed on mobile. +- Quick Add action buttons read at a proper size on mobile. +- Fix lopsided right padding in the task detail view on mobile. +- Don't show tasks as failed with Retry while an automatic transient retry is pending. +- Group each workflow model fallback lane directly under its primary lane in Settings. +- Stop tasks that are still being planned from being moved to Todo prematurely. +- Keep task-card action menus open and usable after they receive keyboard focus. +- Align the bundled pi coding-agent SDK to the ModelRuntime API so the engine builds. +- Fix heartbeat multiplier so long-cadence agents stop false-flagging as stale or zombie. +- Quick Add action buttons read at a proper size on mobile. +- Refinement tasks now inherit the default workflow's optional review steps. +- Fix lopsided right gutter in the task detail view on mobile. +- Keep mobile task delete confirmations open through synthesized ghost clicks. +- Task status badge now reads "Replan" instead of the raw "needs-replan" token. +- Move task Merge Details from Plan to the done-only Summary tab. +- Add spacing below the Settings theme selector before the Font Size section. +- Make global npm installs reliable by pinning the @earendil-works/pi-* version set. +- Stop fn dashboard from making macOS rename its own local hostname over mDNS. +- Prevent transient credential-file lock contention from terminating provider runs. +- Mission feature validator now inspects the merged commit and defers instead of false-failing on branch divergence. +- Correct duplicate delegation ownership and add engine task reassignment. +- Reject messages addressed to nonexistent agent recipients. +- Task detail toolbar is now icon-only and matches Quick Add — fixes the mis-sized oversight icon on mobile. +- Quick Add Deps/Models/Agent icons no longer render oversized on mobile. +- Remove the gap above the pinned provider header in model dropdowns so list rows no longer show through while scrolling. +- The overseer eye badge no longer appears on in-progress/in-review tasks when oversight is off. +- Closed GitHub tracked issues now reliably link the landing commit. +- GitHub-import auto-translate now translates issues on every page, not just the first 50. +- Fix the task-detail attach-file icon when the Definition tab is not open. +- Mobile Kanban board now magnetically snaps to a single column when you swipe between columns. +- The board card overseer eye icon now hides when a task's oversight is off, matching the task detail. +- Stop now disables the session advisor, and its on/off state correctly updates the task-detail oversight icon. +- Mobile "More" menu now pins Settings to the bottom below the divider. +- Hide the task-card overseer eye when the selected workflow has oversight turned off. +- fn db migrate now stamps migrated rows so tasks, config, and workflow settings stay visible after a cutover. +- Fix the mobile task detail panel being shifted left with a dead gutter on the right. +- Restore provider usage, workflow routing, and failed-task stability after PostgreSQL migration. +- Fix clean-CI packaging for bundled Quality and PostgreSQL plugins. +- Fix cramped GitHub/GitLab import detail header and show translated titles in its title bar. +- GitHub/GitLab import translations now persist across app restarts. +- Auto-recover tasks whose workflow step hits a missing or recycled worktree instead of parking them failed forever. +- Stop abandoned AI-session prompts when planning and interview generations are aborted. +- Preserve and isolate bundled plugin state during the PostgreSQL cutover. +- Stop re-asking approval for plans approved before the Original Description update. +- Keep Global and Project MCP settings bound to their own scopes in the Settings UI. +- Cancelling a merging task now stops it immediately instead of stalling for 30 minutes. +- Block a zero-change task from completing when its executor last failed with work unfinished. +- Fix cross-project data mixups by separating a record's owning project from PostgreSQL isolation. +- Stop logging a false "operator action required" pause-abort failure on tasks that already merged and completed. +- Fix Artifacts, Documents, and Evals dashboard views returning 500 in PostgreSQL mode. +- Stop PostgreSQL-mode boots from opening and checkpointing the legacy SQLite files. +- Fix startup failure where the SQLite → PostgreSQL migration aborted on CE session timestamps. +- Fix engine failing to connect after the PostgreSQL migration with "Project not found". +- Bind dashboard/serve stores to the central project registry instead of relying on cwd identity. +- CLI agent tools now boot PostgreSQL instead of the removed SQLite runtime. +- Standalone CLI, GitLab analytics, and plugin stores now run on PostgreSQL. +- Root project-scoped PostgreSQL stores and merges at the project directory, and fix backend-mode agent watching. +- Fix post-insert task rollback and add GitLab tracking reconcile. +- Mailbox — sending a message to an agent works in PG mode instead of erroring. +- Fix empty task board after the PostgreSQL migration when booting via fn dashboard. +- Fix SQLite → PostgreSQL migration silently skipping legacy camelCase tables. +- Preserve PostgreSQL jsonb defaults when legacy SQLite rows contain NULL. +- Preserve legacy empty JSON text during PostgreSQL cutover. +- Not-yet-ported features (missions, insights, research, goals) degrade cleanly in PG mode instead of erroring. +- Regression storm-guard and agent wake-on-message work on the PostgreSQL backend. +- Fix PostgreSQL-mode merge recovery, lost task-field writes, first-boot SQLite auto-migration, and backup tool discovery. +- Incident-signal ingestion records incidents on the PostgreSQL backend instead of being skipped. +- Workflow definitions load in PG mode — /api/workflows no longer errors. +- Fix Planning Mode getting stuck retrying and re-asking a question that was already answered. +- Fix PostgreSQL-mode crashes — agent-log flush no longer kills the server, and Command Center activity loads. +- Ensure PostgreSQL-backed CLI commands release project resources before exiting. +- Fix task creation dropping the workflow selection when a workflow and step toggles are submitted together. +- Fix custom workflow columns on PostgreSQL: tasks land in their workflow's intake column and can move out of it. +- Fix residual SQLite store constructions so chat, messages, backups, MCP secrets, and project setup work on PostgreSQL. +- Make PostgreSQL cutover fail safely and preserve project-scoped core data. +- Restore PostgreSQL persistence across bundled workflows and integrations. +- Keep multi-node management connected to the active PostgreSQL registry. +- Restore stalled-review badges, timed-execution totals, and fresh-agent-log stall suppression on board listings. +- Keep the quick-add Save button inline with its icon controls and center the control rows on mobile. +- Make SQLite cutover converge when multiple registered projects share embedded PostgreSQL. +- Quiet repetitive scheduler hold-release and task-routing lines that flooded the engine log pane. +- Merge autostashes no longer pile up in `git stash list`, and untracked work in them is never dropped. +- Stop reviewer rate limits and network blips from looping and spamming the task log. +- Safely classify and resolve whitespace-only merge conflicts. +- Prevent bundled plugin commands from delaying or crashing the Fusion CLI on spawn failures. +- Settings: consistent checkbox theming, inline help moved behind "?" icons, mobile ntfy help bubble fix. +- Block tasks that skip unreviewed steps after a completion refusal from auto-promoting to review. +- Self-healing no longer promotes a failed/refused task into review after its work was reverted. +- Preserve legacy migration data and isolate PostgreSQL records, task IDs, and merge queues by project. +- Stop triage Plan Review from looping to the replan cap by converging the spec reviewer. +- A task actively re-executing can no longer launder an empty reverted branch into done. +- Fix WhatsApp Chat plugin failing to connect (405 rejection) and its bundled build failing to load. +- Embedded Postgres now boots on Windows when Fusion runs elevated, fixing the Windows installer build. +- Fix workflow settings and prompt overrides appearing reset after the PostgreSQL migration. + +### Breaking + +- Require PostgreSQL storage and complete runtime parity across projects, archives, missions, plugins, and maintenance. + +### Performance + +- Keep Planning session history visible while its latest data loads. +- Make local `pnpm build` skip unchanged packages and use fast CLI packaging by default. +- Speed up dashboard and serve startup by sharing the PostgreSQL store and deferring non-route work. +- Make task deletion return faster while cleanup continues in the background. +- Speed up board listing and agent chat on PostgreSQL with SQL-side pagination and a conversation history cap. +- Fix PostgreSQL performance and credential-redaction gaps surfaced by the migration review. + +### Internal + +- Deprecate the built-in Coding (Ideas) workflow — it no longer appears for new task selection. +- Deprecate the built-in Brainstorming workflow — it no longer appears for new task selection. +- Plan Review now allows more automatic replan attempts (default 8) before asking a human. +- Multi-node fleets on shared Postgres no longer replicate tasks or settings over mesh HTTP. + +## 0.60.0 + +### @fusion/dashboard + +#### Patch Changes + +- @fusion/core@0.60.0 +- @fusion/engine@0.60.0 +- @fusion/i18n@0.39.25 +- @fusion-plugin-examples/cli-printing-press@0.1.42 +- @fusion-plugin-examples/compound-engineering@0.1.25 +- @fusion-plugin-examples/dependency-graph@0.1.56 +- @fusion-plugin-examples/grok-runtime@0.2.3 +- @fusion-plugin-examples/roadmap@0.1.44 +- @fusion-plugin-examples/cursor-runtime@0.1.44 +- @fusion-plugin-examples/droid-runtime@0.1.51 +- @fusion-plugin-examples/hermes-runtime@0.2.75 +- @fusion-plugin-examples/openclaw-runtime@0.2.75 +- @fusion-plugin-examples/paperclip-runtime@0.2.75 + +### @fusion/desktop + +#### Patch Changes + +- @fusion/core@0.60.0 +- @fusion/dashboard@0.60.0 +- @fusion/engine@0.60.0 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.60.0 +- @fusion/pi-claude-cli@0.60.0 + +### @fusion/plugin-sdk + +#### Patch Changes + +- @fusion/core@0.60.0 + +### @runfusion/fusion + +#### Minor Changes + +- f0888d4: summary: Open tasks as popups now applies to List clicks with the same movable task window as the Board. + category: feature + dev: Threads openMobileTasksInPopup App -> MainContent -> ListView; ListView.handleRowClick routes to onPopOut/popOutTaskDetail (floating-window--task-detail) when enabled, on both desktop split-pane and mobile/tablet single-pane, preserving docked behavior when off. +- 7cc622b: summary: Planning Mode now auto-retries a stuck AI generation up to 3 times before showing an error. + category: feature + dev: Bounded client-side auto-retry in PlanningModeModal reusing the existing /planning/:id/retry endpoint; counter resets on successful progress and is single-flighted across SSE onError, reopen, and the stuck poll. +- 4e7e013: summary: Add a Plan action to planning/ideas/hold task cards that opens Planning Mode from the card. + category: feature + dev: Board and List task context menus now gate Plan on pre-execution hold/intake columns and wired planning handlers. +- d4001ab: summary: Make the merger AI model configurable under Global and Project Models. + category: feature + dev: Adds project `mergerProvider`/`mergerModelId`/`mergerThinkingLevel` and global `mergerGlobalProvider`/`mergerGlobalModelId`/`mergerGlobalThinkingLevel`. Resolution is project merger → global merger → project/global default; does not inherit executor/planner/reviewer lanes. + +#### Patch Changes + +- 281bb05: summary: Fix bundled example plugins failing to enable with a missing @fusion/core package error. + category: fix + dev: Aliases bundlePluginEntry @fusion/core imports to pluginSdkCoreRuntimeShim for self-contained bundled.js outputs. +- e35620c: summary: Fix agents silently going stale for hours even though the heartbeat repair audit was running. + category: fix + dev: HeartbeatTriggerScheduler now supervises its own audit setInterval (a stalled/dropped audit driver is re-armed within a bounded window) and bounds/escalates non-advancing zombie-timer re-arms instead of churning silently, closing the ~62,348s silent-heartbeat window that survived the FN-7645/FN-7718 fixes (FN-7939). +- cf1b33b: summary: Settings search now surfaces Project Models Chat default settings when searching for chat. + category: fix + dev: Adds chat-default searchableText/searchableKeys to the project-models entry in SETTINGS_SECTIONS (SettingsModal.tsx); fixes FN-7907 search-index drift. + +### runfusion.ai + +#### Patch Changes + +- Updated dependencies [281bb05] +- Updated dependencies [e35620c] +- Updated dependencies [cf1b33b] +- Updated dependencies [f0888d4] +- Updated dependencies [7cc622b] +- Updated dependencies [4e7e013] +- Updated dependencies [d4001ab] + - @runfusion/fusion@0.60.0 > Older releases (before 0.60.0) are archived in [`CHANGELOG-archive.md`](./CHANGELOG-archive.md). diff --git a/package.json b/package.json index 4fa96c7877..0277df3df2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fusion-workspace", - "version": "0.60.0", + "version": "0.70.0", "private": true, "license": "MIT", "homepage": "https://github.com/Runfusion/Fusion#readme", diff --git a/packages/cli-alias/CHANGELOG.md b/packages/cli-alias/CHANGELOG.md index 669e73df54..6ddeb8a2f4 100644 --- a/packages/cli-alias/CHANGELOG.md +++ b/packages/cli-alias/CHANGELOG.md @@ -1,5 +1,291 @@ # runfusion.ai +## 0.70.0 + +### Patch Changes + +- Updated dependencies [80f2028] +- Updated dependencies [7daa16f] +- Updated dependencies [db05a77] +- Updated dependencies [47f9aa7] +- Updated dependencies [6206af8] +- Updated dependencies [9b9d6a2] +- Updated dependencies [2d61976] +- Updated dependencies [f116d05] +- Updated dependencies [883f38d] +- Updated dependencies [678265a] +- Updated dependencies [514ccd3] +- Updated dependencies [945d629] +- Updated dependencies [be55d0a] +- Updated dependencies [0312d2e] +- Updated dependencies [30a83f2] +- Updated dependencies [f111a40] +- Updated dependencies [130c702] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [e33039a] +- Updated dependencies [19eb179] +- Updated dependencies [1c4fdb7] +- Updated dependencies [9a37415] +- Updated dependencies [9aa2852] +- Updated dependencies [46866a5] +- Updated dependencies [e9f14bf] +- Updated dependencies [05151a2] +- Updated dependencies [a242f1b] +- Updated dependencies [c15c78f] +- Updated dependencies [703488f] +- Updated dependencies [4b150e2] +- Updated dependencies [329fc1f] +- Updated dependencies [d1e9b56] +- Updated dependencies [4f03767] +- Updated dependencies [e97081f] +- Updated dependencies [7aeefe2] +- Updated dependencies [99870ba] +- Updated dependencies [5acea6c] +- Updated dependencies [bc34834] +- Updated dependencies [3fce536] +- Updated dependencies [78ef307] +- Updated dependencies [daa34fb] +- Updated dependencies [f079245] +- Updated dependencies [1d6a044] +- Updated dependencies [c15c78f] +- Updated dependencies [03966ec] +- Updated dependencies [5185914] +- Updated dependencies [1b9c7a7] +- Updated dependencies [71275ab] +- Updated dependencies [d48537b] +- Updated dependencies [6e0fde8] +- Updated dependencies [49a459a] +- Updated dependencies [9bdbdc5] +- Updated dependencies [d956abc] +- Updated dependencies [16b0109] +- Updated dependencies [ddc8e6d] +- Updated dependencies [ec78981] +- Updated dependencies [de25e32] +- Updated dependencies [a8b6387] +- Updated dependencies [6ca7e48] +- Updated dependencies [f1b528f] +- Updated dependencies [0e84731] +- Updated dependencies [f9c19f9] +- Updated dependencies [6e3a338] +- Updated dependencies [c0bef0b] +- Updated dependencies [1c02e68] +- Updated dependencies [d893a02] +- Updated dependencies [aa0d863] +- Updated dependencies [2179a61] +- Updated dependencies [d74018f] +- Updated dependencies [836e53c] +- Updated dependencies [5ff7a20] +- Updated dependencies [214af98] +- Updated dependencies [10b8045] +- Updated dependencies [b2977d1] +- Updated dependencies [d9843f7] +- Updated dependencies [a167272] +- Updated dependencies [e46ffeb] +- Updated dependencies [0b33281] +- Updated dependencies [667f4c8] +- Updated dependencies [dc7bb40] +- Updated dependencies [e83116a] +- Updated dependencies [3639169] +- Updated dependencies [60b6e3e] +- Updated dependencies [d870878] +- Updated dependencies [96b1f21] +- Updated dependencies [cae7847] +- Updated dependencies [7b31d54] +- Updated dependencies [402b3a9] +- Updated dependencies [a646ae3] +- Updated dependencies [08a10bf] +- Updated dependencies [71dd191] +- Updated dependencies [66ae82a] +- Updated dependencies [3dcb62f] +- Updated dependencies [7cec078] +- Updated dependencies [adcba0e] +- Updated dependencies [a821bce] +- Updated dependencies [471835d] +- Updated dependencies [72378cb] +- Updated dependencies [5b4ec4c] +- Updated dependencies [b885aff] +- Updated dependencies [375368e] +- Updated dependencies [e87b51b] +- Updated dependencies [274318a] +- Updated dependencies [e40f76f] +- Updated dependencies [3f133e0] +- Updated dependencies [39d76fd] +- Updated dependencies [c2475b0] +- Updated dependencies [f3b68c9] +- Updated dependencies [99b79e4] +- Updated dependencies [19ab7a9] +- Updated dependencies [5661582] +- Updated dependencies [90ce57f] +- Updated dependencies [f63818a] +- Updated dependencies [297edd9] +- Updated dependencies [291fabc] +- Updated dependencies [de1638e] +- Updated dependencies [6675cdf] +- Updated dependencies [1a337df] +- Updated dependencies [0e7b86e] +- Updated dependencies [f57dfc0] +- Updated dependencies [504c702] +- Updated dependencies [5f70447] +- Updated dependencies [68583b5] +- Updated dependencies [038ec04] +- Updated dependencies [fd03666] +- Updated dependencies [f58b564] +- Updated dependencies [e72629c] +- Updated dependencies [d4914eb] +- Updated dependencies [3e55492] +- Updated dependencies [c6be0b1] +- Updated dependencies [9b7f282] +- Updated dependencies [2c3a777] +- Updated dependencies [4df5c62] +- Updated dependencies [255e9c1] +- Updated dependencies [6f99fdb] +- Updated dependencies [e7c5de0] +- Updated dependencies [d306ab6] +- Updated dependencies [ca7a5a7] +- Updated dependencies [4d73232] +- Updated dependencies [aaa9530] +- Updated dependencies [07e1ceb] +- Updated dependencies [bd8a6ae] +- Updated dependencies [76ec933] +- Updated dependencies [c9aa3b4] +- Updated dependencies [50179ed] +- Updated dependencies [5006e55] +- Updated dependencies [25df9bf] +- Updated dependencies [b687cc9] +- Updated dependencies [bc7dfe4] +- Updated dependencies [fd43a57] +- Updated dependencies [26cb0cc] +- Updated dependencies [ced0e84] +- Updated dependencies [39887f5] +- Updated dependencies [c3e98d1] +- Updated dependencies [0d2dcb3] +- Updated dependencies [ac52438] +- Updated dependencies [3fdc2c1] +- Updated dependencies [87ffb24] +- Updated dependencies [7f175b0] +- Updated dependencies [6183621] +- Updated dependencies [a51cba0] +- Updated dependencies [7b54095] +- Updated dependencies [f27965d] +- Updated dependencies [e445b3e] +- Updated dependencies [67fac31] +- Updated dependencies [d6860b5] +- Updated dependencies [7fc4b43] +- Updated dependencies [28878d8] +- Updated dependencies [eb7d223] +- Updated dependencies [7a50232] +- Updated dependencies [611e51d] +- Updated dependencies [26807c8] +- Updated dependencies [4293826] +- Updated dependencies [86c281b] +- Updated dependencies [5d2c3be] +- Updated dependencies [adb3eb3] +- Updated dependencies [f3ef60b] +- Updated dependencies [9152d8f] +- Updated dependencies [2f7da57] +- Updated dependencies [cdcdc32] +- Updated dependencies [595c27c] +- Updated dependencies [44c7842] +- Updated dependencies [7517f2e] +- Updated dependencies [62f121e] +- Updated dependencies [d8735b3] +- Updated dependencies [669cb7c] +- Updated dependencies [b065403] +- Updated dependencies [8e4514e] +- Updated dependencies [c6adac6] +- Updated dependencies [79d4299] +- Updated dependencies [85f8b1f] +- Updated dependencies [1d0feb2] +- Updated dependencies [0863c0f] +- Updated dependencies [5ab46a6] +- Updated dependencies [551a2a3] +- Updated dependencies [203557e] +- Updated dependencies [bc2d22d] +- Updated dependencies [c449379] +- Updated dependencies [aa07a78] +- Updated dependencies [9a43aa1] +- Updated dependencies [a242f1b] +- Updated dependencies [5e5fa9a] +- Updated dependencies [7261083] +- Updated dependencies [753b1bb] +- Updated dependencies [85f8b1f] +- Updated dependencies [8fe122d] +- Updated dependencies [aa1e250] +- Updated dependencies [4f03767] +- Updated dependencies [2619013] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [fbcd002] +- Updated dependencies [eb5c81c] +- Updated dependencies [8596035] +- Updated dependencies [3ccc9f9] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [0f3a3d3] +- Updated dependencies [fbcd002] +- Updated dependencies [b5c76af] +- Updated dependencies [379d450] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [4e4b6be] +- Updated dependencies [cdf67c1] +- Updated dependencies [cdf67c1] +- Updated dependencies [c15c78f] +- Updated dependencies [97172fd] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [c25f8b7] +- Updated dependencies [d8f0b1a] +- Updated dependencies [ab22855] +- Updated dependencies [c15c78f] +- Updated dependencies [c15c78f] +- Updated dependencies [e3f9825] +- Updated dependencies [c5aa5ec] +- Updated dependencies [7c8a84f] +- Updated dependencies [3e978e1] +- Updated dependencies [f6e43d7] +- Updated dependencies [2b8df56] +- Updated dependencies [9a34862] +- Updated dependencies [e3f9825] +- Updated dependencies [4f03767] +- Updated dependencies [4b7f0d2] +- Updated dependencies [55745af] +- Updated dependencies [a136535] +- Updated dependencies [136958f] +- Updated dependencies [945d629] +- Updated dependencies [edc6413] +- Updated dependencies [c15c78f] +- Updated dependencies [4e4b6be] +- Updated dependencies [0753476] +- Updated dependencies [c0d610d] +- Updated dependencies [6c00841] +- Updated dependencies [8e4514e] + - @runfusion/fusion@0.61.0 + ## 0.60.0 ### Patch Changes diff --git a/packages/cli-alias/package.json b/packages/cli-alias/package.json index 46013ba5d5..446f79ef0e 100644 --- a/packages/cli-alias/package.json +++ b/packages/cli-alias/package.json @@ -1,6 +1,6 @@ { "name": "runfusion.ai", - "version": "0.60.0", + "version": "0.70.0", "license": "MIT", "description": "Launch Fusion with `npx runfusion.ai` — tiny alias for @runfusion/fusion.", "homepage": "https://runfusion.ai", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 7a3a9b46c2..27cc1ed3ee 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,851 @@ # @runfusion/fusion +## 0.70.0 + +### Minor Changes + +- 945d629: summary: Show migration details once in the dashboard and system inbox after SQLite cutover. + category: feature + dev: Persists banner dismissal and inbox-delivery markers with a Discord support link. +- c15c78f: summary: Bundle embedded PostgreSQL for zero-system-install local storage when DATABASE_URL is unset. + category: feature + dev: Adds `embedded-postgres` lifecycle manager (initdb/pg_ctl start/stop, graceful SIGTERM/SIGINT shutdown, data persistence across restarts). Platform binaries bundled for macOS/Linux/Windows arm64/x64. Used by `createTaskStoreForBackend` when DATABASE_URL is unset. +- a242f1b: summary: Require PostgreSQL storage and complete runtime parity across projects, archives, missions, plugins, and maintenance. + category: breaking + dev: Remove FUSION_NO_EMBEDDED_PG and sync runtime fallbacks; legacy SQLite files remain one-time migration inputs only. +- c15c78f: summary: Default local backend is now embedded PostgreSQL; set FUSION_NO_EMBEDDED_PG=1 for legacy SQLite. + category: feature + dev: `createTaskStoreForBackend` now boots embedded PostgreSQL by default when DATABASE_URL is unset (previously required FUSION_EMBEDDED_PG=1). FUSION_EMBEDDED_PG=1 is now a no-op alias; FUSION_NO_EMBEDDED_PG=1 is the opt-out back to legacy SQLite. `embedded-postgres` is now a direct dependency of @runfusion/fusion so the bundled CLI can resolve the platform binary at runtime. Boot smoke exercises the embedded path by default (initdb-aware 180s health timeout). Also hardens three backend-mode gaps the flip exposed: ResearchStore/insights router/watch() now degrade gracefully instead of crashing `fn serve` when the sync SQLite satellite stores are unavailable in PG backend mode. +- c0bef0b: summary: Deprecate the built-in Coding (Ideas) workflow — it no longer appears for new task selection. + category: internal + dev: builtin:coding-ideas is excluded from defaultEnabledBuiltinWorkflowIds() and hidden from listWorkflowDefinitions via the shared DEPRECATED_BUILTIN_WORKFLOWS registry / isBuiltinWorkflowDeprecated helper; it remains resolvable by id for existing task selections. Applied only after a preflight verified no active task (including parked ideas in the `ideas` intake column) selects it. +- 1c02e68: summary: Deprecate the built-in Brainstorming workflow — it no longer appears for new task selection. + category: internal + dev: builtin:brainstorming is excluded from defaults and listWorkflowDefinitions through the deprecation registry/helper, but remains resolvable by id. Applied after a successful live-store query verified no active task selects it. +- e46ffeb: summary: Show when Plan Review budget exhaustion needs approval and make the replan cap configurable. + category: feature + dev: Adds a number-typed workflow setting (unset → falls back to PLAN_REVIEW_GATE_REPLAN_CAP) read in triage blockAfterPlanReviewRevise; adds a distinct TaskCard/ListView badge + TaskDetailModal callout gated on awaitingApprovalReason === "plan-review-replan-cap". +- 667f4c8: summary: Chat agents and Grok CLI sessions now have board, delegation, web, and knowledge retrieval tools. + category: feature + dev: Dashboard chat and room responders share a safe coordination toolset; destructive agent lifecycle tools remain excluded. +- 60b6e3e: summary: Auto-retry executor tool-call failures before parking tasks. + category: feature + dev: Adds project-scoped bounded retry settings, durable PostgreSQL claim state, and same-model retry auditing. +- d870878: summary: Optionally escalate an executor run to a stronger model or configured node after same-model retries are exhausted. + category: feature + dev: New opt-in project settings provide one model/node escalation attempt with durable task state and audit events. +- 96b1f21: summary: Add a diagnostic summary and one-click "Retry with a different model/node" to the Task Failed banner. + category: feature + dev: TaskDetailModal now renders the banner for all failed tasks (including errorless), surfaces the latest tool_error detail (FN-7995), and applies model/node overrides via updateTask before re-running the existing retry path. +- adcba0e: summary: Add a Hide imported toggle that filters imported issues, PRs, and GitLab items from Import Tasks. + category: feature + dev: GitHubImportModal renders a persisted per-project hideImported toggle in the list-pane header (and the GitLab toolbar/header); when on, imported rows (importedUrls predicate) are excluded from the issues/pulls/GitLab render sets while the "{n} imported" count still reflects the full fetched set, with a dedicated all-imported empty state. Toggle persists via GitHubImportPersistedState.hideImported. +- 72378cb: summary: Quick Add image attachments now show compact previews you can tap to open full-size in a resizable window. + category: feature + dev: QuickEntryBox/TaskForm/InlineCreateCard pending-image previews shrink via InlineCreateCard.css and open in the shared FloatingWindow (dedicated floating-window--image-preview class, full-screen on mobile); remove button stays a separate click target. +- 5b4ec4c: summary: Add a dedicated fallback model lane for the AI merger, configurable under Project Models. + category: feature + dev: New project settings mergerFallbackProvider/mergerFallbackModelId/mergerFallbackThinkingLevel; resolveMergerFallbackModel resolves project merger-fallback → global fallbackProvider/fallbackModelId. Every merger session builder consumes the resolved merger fallback pair and lane-specific fallback thinking; unset keys preserve existing behavior. +- e87b51b: summary: Pin up to 3 chat conversations to keep important ones at the top. + category: feature + dev: Adds nullable chat_sessions.pinned_at (self-heals on boot); PATCH /chat/sessions/:id accepts `pinned`; ChatStore.setSessionPinned enforces the max-3 per-project-scope limit (null projectId scoped as "default" via isNull predicate + non-null advisory-lock key) with a per-scope advisory lock; archiving clears pinnedAt on both archive paths and archived sessions cannot be pinned. +- 274318a: summary: Per-task token budgets now enforce — soft caps alert once and hard caps pause the task. + category: fix + dev: Wires persist-time enforcement and token-budget notifications; budgets exclude cache-read tokens. +- 3f133e0: summary: Add a read-only tool to review a task's full agent log from chat. + category: feature + dev: New `fn_task_logs_read` tool reads TaskStore logs with type filtering and runtime-normalized pagination across agent lanes and the pi extension. +- c2475b0: summary: Task-detail chat now proactively narrates step progress, failures, and review outcomes in real time. + category: feature + dev: Adds bounded, secret-redacted engine status narration across step-session, default execution, graph review, and legacy review paths. +- f3b68c9: summary: Planning Mode now previews the generated plan before you choose whether to refine it. + category: feature + dev: The deepening checkpoint PlanningQuestion carries an optional planPreview payload. +- 99b79e4: summary: Show a Reverted badge on completed tasks whose changes were rolled back. + category: feature + dev: Persists clean and already-reverted git outcomes in source metadata for task-card rendering. +- 19ab7a9: summary: Add a setting to write generated task definitions in the operator's supported input language. + category: feature + dev: `taskDefinitionInInputLanguage` localizes prose only; headings, markers, and code stay English. Supports es/fr/ko/zh-CN, normalizes Chinese to zh-CN, and falls back to English for unsupported or uncertain input. +- 5661582: summary: Dashboard keyboard shortcuts now toggle — re-press a shortcut to close its interface. + category: feature + dev: Shortcut handlers in useDashboardKeyboardShortcuts + App.tsx now dispatch toggle callbacks (open on first press, close/revert on re-press). Modal-backed shortcuts use existing nav-aware closers; view-backed shortcuts (Settings/Command Center) retain the exact revert callback pushed by handleTaskViewChange, removeNav it, and restore the captured prior view (not board), so both shortcut-opened and UI-opened views close without leaking a browser-back entry. +- f63818a: summary: Add a global option to skip confirmation dialogs for critical actions. + category: feature + dev: New global setting `skipConfirmationDialogs` (default false); when on, `ConfirmDialogProvider` resolves confirm/confirmWithChoice/confirmWithCheckbox to the primary/default choice without rendering the dialog. Toggle in Settings → Global → General. Reset-task guards in TaskCard/TaskDetailModal/ListView migrated to the useConfirm seam. +- 1a337df: summary: Add an executor fallback model and retry the primary model before blocking on fallback exhaustion. + category: feature + dev: Adds executionFallbackProvider, executionFallbackModelId, and executionFallbackThinkingLevel workflow settings. +- 5f70447: summary: Triage-detected duplicate tasks are now blocked for a Keep/Delete decision instead of auto-deleted. + category: feature + dev: New project setting `triageDuplicateResolution` (`prompt` default | `keep` | `delete`) gates triage explicit-duplicate-marker handling and links the existing decision banner to the duplicate. +- 68583b5: summary: Add a Create fix task button on failed PR checks in the GitHub import preview. + category: feature + dev: Reuses createTask with an auto-composed PR and check context prompt (FN-8110). +- fd03666: summary: Add planner clarification controls with ntfy and mailbox alerts. + category: feature + dev: Adds the disabled-by-default agentClarificationEnabled setting and session override. +- e72629c: summary: Add a per-task Merger model and thinking selection to the Quick Add model dropdown. + category: feature + dev: Per-task merger model and thinking overrides are persisted and honored by merger sessions. +- c6be0b1: summary: Split backup settings into global Database Backups and project Memory Backups. + category: feature + dev: Moves autoBackup settings to global scope and routes in-process backup commands through the canonical global backup root. +- 4df5c62: summary: Show a local codebase token estimate and on-disk size on the project Dashboard Overview. + category: feature + dev: New GET /api/projects/:id/codebase-metrics; calibrated cl100k_base pre-tokenization estimator with separate bounded source/disk domains, symlink-safe local traversal, two-minute caching, and granular shared B/KB/MB/GB formatting. +- 255e9c1: summary: Add a one-click "Restart Fusion" button to the update banner after an in-app update. + category: feature + dev: Reuses POST /api/system/restart via requestSystemRestart and the SystemInfoResponse.restartSupported capability flag; button degrades to a disabled state with a manual-restart note when unsupervised. +- 6f99fdb: summary: Add a Refresh checks button to GitHub import PR previews for fresh CI status. + category: feature + dev: Refresh evicts the selected pull-detail cache entry and guards stale cache writes (FN-8137). +- e7c5de0: summary: Add a one-click "Restart Fusion" button to the Settings modal after an in-app update. + category: feature + dev: Adds a capability-aware restart affordance to SettingsModal's footer update-success state; reuses POST /api/system/restart via requestSystemRestart and restartSupported, with a disabled manual-restart fallback when unsupervised. +- 07e1ceb: summary: Add three new dashboard color themes: Cobalt, Clay, and Moss. + category: feature + dev: Extends ColorTheme with synchronized dark/light token blocks and selector swatches. +- 26cb0cc: summary: Add Kimi K3 model selection and token-cost support. + category: feature + dev: Aligns pi SDK consumers to 0.80.10 and verifies native `kimi-coding:k3` catalog availability. +- 3fdc2c1: summary: Model dropdowns keep the provider header pinned while scrolling and let you collapse each provider list. + category: feature + dev: CustomModelDropdown gains CSS sticky provider headers and a per-provider collapse chevron persisted to localStorage (key fusion-dashboard-model-dropdown-collapsed-providers). +- 7b54095: summary: Add Todo API read + create-task endpoints so scripts can turn a todo into a running task. + category: feature + dev: New `/api/todos/:id`, `/api/todos/:id/items`, `/api/todos/items/:id`, and `POST /api/todos/items/:id/create-task` routes in todo-routes.ts; AsyncTodoStore gains getList/getItem/listItems; create-task validates title/priority/workflowId/assignedAgentId, honors body projectId scoping, and delegates to TaskStore.createTask with source.sourceType="api". +- d6860b5: summary: Choose which quick-action tabs appear in the mobile footer nav. + category: feature + dev: Adds project setting `mobileNavPrimaryItems` (ordered list of the seven selectable canonical nav-item ids: command-center, tasks, agents, missions, chat, mailbox, planning); MobileNavBar renders primary tabs from it and routes omitted selectable destinations to the More sheet. Default reproduces the prior order. +- 86c281b: summary: Let operators post GitHub issue comments directly from Import Tasks. + category: feature + dev: Adds gh-first and token REST fallback comment posting with optimistic preview updates. +- adb3eb3: summary: Add a first-class Claude runtime that drives Claude Code over ACP. + category: feature + dev: New bundled `fusion-plugin-claude-runtime` (provider `claude-cli`, runtime `claude`) composes the pinned `claude-code-cli-acp` bridge and is additive to experimental `pi-claude-cli` Route A. +- 9152d8f: summary: Remove the footer AI session pill; background progress now appears in the session notification banner. + category: feature + dev: Deletes BackgroundTasksIndicator and its footer wiring. The banner now shows non-planning generating and retained error sessions; planning remains in its docked view and nav badge, while cli-agent progress is observational to avoid a dead Resume action. +- 44c7842: summary: Reorder and add more mobile footer quick actions, applied in real time. + category: feature + dev: Refines mobileNavPrimaryItems with an expanded destination registry, ordered settings controls, and immediate preview state. +- 1d0feb2: summary: GitHub import pages all open issues with Prev/Next; linked issues close when tasks reach Done. + category: feature + dev: The import picker (GitHubImportModal) fetches up to 300 open issues in one request and pages the result client-side at 30/page with Prev/Next controls and a page indicator; a truncation notice appears past the cap. NewTaskModal's reference picker limit rose 30→100. GitHubClient.listIssues now pages the REST path (per_page loop until limit/exhaustion, PR-filtering no longer stops paging early) and lifts the gh path's 100 cap (gh --limit paginates internally); gh-CLI label filtering fetches the full cap before client-side OR filtering. Separately, the GitHub-tracking reconcile sweep now isolates its three passes in runSweep so a throw in one pass no longer silently starves the others — previously a failure in the first pass disabled the entire close-on-Done backstop, leaving linked/imported issues open; failures are now logged instead of swallowed. +- 0863c0f: summary: Auto-translate foreign-language GitHub issues in the Import Tasks panel, with a target language and model you choose. + category: feature + dev: New project settings `githubImportAutoTranslate` (default false) and `importTranslateTargetLocale`, plus an `import-translate` model lane (project `importTranslateProvider`/`importTranslateModelId`, global `importTranslateGlobalProvider`/`importTranslateGlobalModelId`) resolved by `resolveImportTranslateSettingsModel`. Translations persist in the new `project.import_translation_cache` table (migration 0010) keyed by project+repo+issue+locale+source hash, and are pruned when an issue closes. `POST /api/github/issues/auto-translate` translates the 50 most recent open foreign issues per load on its own rate-limit budget; both single and batch import read the cache so imported tasks carry the translated title/body. Language detection moved from the dashboard app to `@fusion/core` so the panel and server share one heuristic. Auto-translation runs in the background and streams in chunks of 8 (`AUTO_TRANSLATE_CHUNK_SIZE`), so list titles fill in progressively and one failed chunk cannot discard the page; nothing in the panel awaits it. The two controls live in Settings -> Project General using that section's native checkbox/select markup, and Settings search advertises translation terms for General plus the Project/Global Models lane. +- 5ab46a6: summary: The GitHub import screen shows far more issues at once, and Import now sits under the issue you are reading. + category: feature + dev: Provider, type tabs, origin, filter and Load collapse into one wrapping control row (chrome 93px -> 70px at 412px; ~9 -> ~13 issues visible). Load is icon-only (label kept as aria-label/title). The labels filter is a popover whose trigger doubles as its readout, so collapsing never hides applied state; dismisses on outside pointerdown or Escape (stopPropagation so the modal survives). Origin stays visible as an inline chip. Import moves out of the preview header into a bottom action bar alongside Close issue, and the list footer's duplicate Import is removed — the footer keeps only Cancel, so an issue can no longer be imported without opening it. Obsolete `flex: 1 1 100%` mobile stacking on the toolbar zones removed. +- 203557e: summary: Imported GitHub and GitLab issues now carry their screenshots as task attachments, so agents can see them. + category: feature + dev: `importIssueImageAttachments` (packages/dashboard/src/issue-image-attachments.ts) downloads images embedded in an issue's body and comments and stores them via `addAttachment`, wired into `POST /github/issues/import`, `POST /github/issues/batch-import`, and every GitLab import route via `importItem`. Provider differences sit behind an `ImageImportPolicy`: GitHub images are absolute URLs on a fixed host allowlist; GitLab `/uploads/...` are project-relative and restricted to the configured instance origin. GitLab note bodies come from the new read-only `GitLabClient.listNotes`. Extraction runs on the original (untranslated) body; downloads are capped at 10 images / 5MB each with a 15s timeout, authenticated per provider (gh CLI token / PRIVATE-TOKEN), and best-effort so a failed image or comment fetch never fails the import. +- bc2d22d: summary: Offer AI translation in Import Tasks when issue/PR content is not the dashboard language. + category: feature + dev: Adds POST /api/ai/translate-text and opt-in Translate/Show original controls in the GitHub/GitLab import preview; translation is display-only and does not change imported task text. +- 8fe122d: summary: Keep the operator's original task description at the top of generated PROMPT.md specs. + category: feature + dev: Deterministic `## Original Description` injection on AI-planned finalize and non-AI generateSpecifiedPrompt; planning templates instruct verbatim copy. +- 4f03767: summary: Optional LLM session advisor for planner overseer (off by default; enable and set model to use). + category: feature + dev: OMP-advisor parity — OverseerEmissionGuard, delta runtime, OVERSEER.md/WATCHDOG.md. Gate: plannerOverseerAdvisorEnabled (default false) plus provider/model ids. Lifecycle supervisor unchanged. +- c15c78f: summary: Command Center productivity, team, token, and tool analytics work on the PostgreSQL backend. + category: feature + dev: Ports aggregateProductivityAnalytics/aggregateTeamAnalytics/aggregateTokenAnalytics/aggregateToolAnalytics to accept Database | AsyncDataLayer, adding a PG branch ("ping" in dbOrLayer) that runs schema-qualified raw SQL over project.tasks/task_commit_associations/pull_requests/agents/usage_events/approval_request_audit_events with snake_case columns and the same aggregation semantics as the SQLite path. The command-center tokens/tools/productivity/team routes pass getAsyncLayer() ?? getDatabase() and await; the interim 503 guards are removed. GitHub-issue, signal, and live-snapshot analytics remain 503 in PG mode (follow-up). Adds command-center-analytics.pg.test.ts to test:pg-gate. +- c15c78f: summary: Command Center workflow, GitHub-issue, signal, and live-snapshot analytics now work on the PostgreSQL backend. + category: feature + dev: Ports aggregateWorkflowAnalytics/aggregateGithubIssueAnalytics/aggregateSignalsAnalytics/composeLiveSnapshot to accept Database | AsyncDataLayer, adding a PG branch ("ping" in dbOrLayer) that runs schema-qualified raw SQL over project.tasks/task_workflow_selection/workflows/incidents/cli_sessions/agent_runs with snake_case columns and the same aggregation semantics as the SQLite path. The command-center workflows/github/signals/live routes pass getAsyncLayer() ?? getDatabase() and await; the interim 503 guards are removed. Every /api/command-center/\* route now functions in backend mode. Adds command-center-remaining-analytics.pg.test.ts to test:pg-gate. +- c15c78f: summary: Goals work on the PostgreSQL backend — the Goals view and mission goal-links load instead of erroring. + category: feature + dev: Ports GoalStore to the AsyncDataLayer. Adds AsyncGoalStore (over the existing async-goal-store.ts helpers; ACTIVE_GOAL_LIMIT enforced atomically in the helpers' transactionImmediate, same as sync). getGoalStoreImpl returns it in backend mode; the dashboard /api/goals routes await it and the interim 503 is removed. Reverts the PG-mode goal-resolution degradations added earlier — mission routes and `fn mission` now resolve/validate real linked goals on both backends. CLI goals/mission/extension and engine agent-tools converted to await; goal-injection-diagnostics stays on its instanceof-guarded sync fallback. Adds goal-store.pg.test.ts to test:pg-gate. +- c15c78f: summary: Generating insights works on the PostgreSQL backend — the insight run executor and stale-run sweeper run in PG mode. + category: feature + dev: Await-converts the insight run executor (insight-run-executor.ts) and the stale-run sweeper (insight-run-sweeper.ts) and widens their store type to InsightStore | AsyncInsightStore, so POST /api/insights/run and /runs/:id/retry drive the async store instead of throwing 503 (getSyncInsightStore removed). The startup/background/drive-by sweeper is now enabled for both backends. The AI extraction step still needs a configured provider at runtime; a run without one records a clean failed run rather than 503. Adds insight-run-execution.pg.test.ts (create→complete, create→fail, retry-with-lineage against embedded PG) to test:pg-gate. +- c15c78f: summary: Insights work on the PostgreSQL backend — the Insights dashboard loads instead of erroring. + category: feature + dev: Ports InsightStore to the AsyncDataLayer. Adds AsyncInsightStore (wrapping async-insight-store.ts helpers, incl. 6 new helpers — updateInsight, updateInsightRun [faithful run-lifecycle state machine: terminal-immutable, transition validation, auto completed/cancelled timestamps], listInsightRunEvents, countInsights, countInsightRuns, listStalePendingRuns); getInsightStoreImpl returns it in backend mode; dashboard insights routes await it and the interim 503 is removed for the read/write/cancel surface. The 3 engine reporters stay on graceful fallback (instanceof-gated). Known partial: AI insight-run generation/retry (POST /run, /runs/:id/retry) and the stale-run sweeper remain sync-only and still 503 in PG mode until the run executor is ported. Adds insight-store.pg.test.ts to test:pg-gate. +- c15c78f: summary: Dashboard banner after SQLite auto-migration to PostgreSQL with backup location and help link. + category: feature + dev: startup-factory persists settings.sqliteMigrationNotice (migratedAt/rows/tables/sqliteBackups) after a successful first-boot auto-migration; SqliteMigrationBanner renders it once, dismiss persists dismissed:true via PUT /settings. Auto-migration now also stamps archive.archived_tasks.project_id. +- c15c78f: summary: Mission autopilot runs on the PostgreSQL backend — missions advance automatically instead of autopilot being disabled. + category: feature + dev: Await-converts MissionAutopilot to drive MissionStore | AsyncMissionStore (every this.missionStore.\* call awaited; watchMission/unwatchMission/getAutopilotStatus and helpers async) and removes the instanceof MissionStore gates in InProcessRuntime (construction + recover paths) so the autopilot loop watches/recomputes/recovers in both backends. Slice execution + validator-loop methods stay scheduler-gated (degrade gracefully in PG). getAutopilotStatus async ripples through mission-routes/server. Adds mission-autopilot.pg.test.ts to test:pg-gate. +- c15c78f: summary: Missions work on the PostgreSQL backend — the Missions dashboard and goal→mission links load instead of erroring. + category: feature + dev: Ports MissionStore (dashboard surface) to the AsyncDataLayer. Adds AsyncMissionStore (63 methods over the 71 existing async helpers + 8 new primitives), assembling the composites (getMissionWithHierarchy, listMissionsWithSummaries, mission/milestone health rollups, computeMissionStatus + the feature→slice→milestone→mission recompute cascade, triageFeature, getFeatureLoopSnapshot) by mirroring the sync store. getMissionStoreImpl returns it in backend mode; mission-routes + goal→mission routes await it and the interim 503 is removed (the GoalStore 503 stays — GoalStore is still deferred). Mission AUTOPILOT, live SSE mission events, mesh hierarchy snapshot apply/collect, and engine validator-loop methods stay degraded in PG mode behind instanceof guards. Also fixes the mission-create path which resolved linked goals via the unported sync GoalStore: goal resolution now degrades to empty in backend mode (links live in MissionStore; full Goal objects return once GoalStore is ported). Adds mission-store.pg.test.ts to test:pg-gate. +- c15c78f: summary: Isolate projects sharing the embedded PostgreSQL cluster — tasks, config, and archived tasks are scoped per project. + category: feature + dev: PR #2007 (Approach A) — project_id partition key on project.tasks/project.archived_tasks/archive.archived_tasks with taskProjectScope threaded through every scan/claim/count; per-project config rows; startup factory binds the AsyncDataLayer to options.projectId; drift self-heal generalized to schema-qualified entries; archived-board reads scoped (review P1 fix). +- c15c78f: summary: Remove node settings sync on the PostgreSQL backend — nodes share the database, so settings are already shared. + category: feature + dev: In backend mode the mesh sync route ignores inbound settings payloads and returns none; PeerExchangeService force-disables settings gossip; /nodes/:id/settings (fetch/push/pull/sync-status) and /settings/sync-receive answer 409 code settings-sync-disabled-postgres; the NodesView sync hook treats that 409 as a quiet steady state (no chips, no polling). Provider auth sync (/nodes/:id/auth/sync, auth-receive/auth-export) is intentionally kept — auth material is per-machine file state, not database state. +- c15c78f: summary: Remove task mesh replication entirely — nodes replicate through the shared PostgreSQL database. + category: feature + dev: POST /mesh/tasks/create is deleted (with applyReplicatedTaskCreate and the replicated-create payload helpers); /mesh/sync shared-state is reduced to projectSettings (legacy sqlite settings sync only) + authMaterial in both directions, and the task-metadata/mission/agent/agent-run/activity-log/run-audit snapshot machinery is removed from the stores; /mesh/task-ids/\* never forwards to a remote coordinator in backend mode (the shared distributed_task_id_state rows are the coordinator). Peer topology exchange unchanged. +- c15c78f: summary: Research runs actually execute on the PostgreSQL backend instead of staying queued forever. + category: feature + dev: Await-converts the engine ResearchOrchestrator + ResearchRunDispatcher to drive InsightStore | AsyncResearchStore (every this.store.\* call awaited; addEvent→appendEvent for union compatibility) and removes the instanceof ResearchStore gate in ProjectEngine.start that disabled the orchestrator/dispatcher in PG mode. Exports AsyncResearchStore from @fusion/core. A queued run now advances queued→running→completed/failed in PG; the AI/web step still needs runtime providers (a run with none fails cleanly). Adds research-execution.pg.test.ts to test:pg-gate. +- c15c78f: summary: Research works on the PostgreSQL backend — the Research dashboard loads and runs CRUD instead of erroring. + category: feature + dev: Ports ResearchStore to the AsyncDataLayer. Adds AsyncResearchStore (12 new helpers incl. faithful replicas of the run-lifecycle state machine — updateResearchStatus per-status auto-lifecycle fields, terminal-immutability, transition validation — and the retry gate/lineage in createResearchRetryRun); getResearchStoreImpl returns it in backend mode; dashboard research routes await it and the interim 503 is removed. AI research EXECUTION (engine ResearchOrchestrator/dispatcher, agent-tools research tools, CLI research run) stays degraded in PG mode behind instanceof guards — same boundary as the insight run executor. Adds research-store.pg.test.ts (13 tests incl. lifecycle machine + retry gate) to test:pg-gate. +- c15c78f: summary: Live dashboard updates (SSE) work on the PostgreSQL backend for missions, research, and insights. + category: feature + dev: The async store wrappers (AsyncMissionStore/AsyncResearchStore/AsyncInsightStore) now extend EventEmitter and emit the same events as their sync counterparts at the same mutation points (after the persistence await), so the SSE handler's subscriptions fire in PG mode instead of no-op'ing. sse.ts/server.ts drop the instanceof-sync narrowing and subscribe to the union store in both backends. Live push for mission/milestone/slice/feature/assertion/validator-start, research run lifecycle, and insight create/update events. Validator-loop-completed and fix-feature emits remain sync-only (those methods aren't in AsyncMissionStore yet). +- c15c78f: summary: Creating, editing, and deleting custom workflows works on the PostgreSQL backend. + category: feature + dev: Completes the workflow-definition write path in PG. Adds a next_workflow_definition_id counter to project.config (schema + 0000_initial.sql baseline) with an async counter (nextWorkflowDefinitionIdAsyncImpl) that preserves project settings on bump; createWorkflowDefinitionImpl gains a backend branch that INSERTs into project.workflows via Drizzle (ir/layout as jsonb objects). Complements the update/delete/select backend branches in workflow-ops.ts. Adds workflow-create.pg.test.ts to test:pg-gate. +- 4e4b6be: summary: Plans that need approval now also post a task-linked message to your dashboard mailbox. + category: feature + dev: NotificationService.handleTaskUpdated writes a `system`-typed mailbox message via `MessageStore.sendMessageOnce` (idempotency key `plan-approval:`) on the awaiting-approval transition, alongside the existing ntfy push. Content links to the task using `buildNtfyClickUrl(ntfyDashboardHost, projectId, taskId)`; `system` type avoids re-triggering the `message:agent-to-user` ntfy pipeline. Covers both the manual plan gate and the plan-review-replan-cap escalation. +- cdf67c1: summary: AI planning, subtask, and mission interviews are now multi-tab — any tab can use the same session. + category: feature + dev: Removed the per-tab session lock end to end: the `/ai-sessions/:id/lock{,/force,/beacon}` routes, `checkSessionLock` on every planning/subtask/mission/milestone route, the store's acquire/release/force/holder/stale-release methods and their `@fusion/core` async helpers, the `useSessionLock` hook, the `getSessionTabId` util, the Take Control overlay + "active in another tab" banners, and the `useAiSessionSync` tab-ownership half (activeTabMap, broadcastLock/Unlock/Heartbeat, owningTabId). `tabId` params are gone from the session API client; routes ignore any tabId older clients still send. The persisted session row is the single source of truth, with per-session SSE plus global `ai_session:updated` events keeping tabs current and each producer's generation-in-progress guard resolving concurrent writes. The `ai_sessions.locked_by_tab`/`locked_at` columns are retained as dead, always-NULL columns — dropping them is an irreversible migration that would break older installed binaries whose upsert names those columns. +- e3f9825: summary: Add Quality plugin with Task QA tab for preview servers, test runs, reports, and suggested cases. + category: feature + dev: Bundled fusion-plugin-quality; host slot task context; superviseSpawn re-exported from plugin-sdk-core-runtime-shim. +- 4f03767: summary: Control the overseer session advisor from project settings, per task, and Quick Add. + category: feature + dev: Adds `sessionAdvisorEnabledByDefault` project setting, `task.sessionAdvisorEnabled` override, Quick Add eye toggle, and `resolveTaskSessionAdvisorEnabled` (task override → project default; workflow `plannerOverseerAdvisorEnabled` is a legacy/master gate that can still enable when the project default is off — not the final inheritance fallback after project). +- 55745af: summary: Settings search now finds and jumps to individual settings, and settings screens share one type scale. + category: feature + dev: Sections render through the shared `settings/` row primitives (`SettingsToggleRow`/`SelectRow`/`NumberRow`/`TextRow`/`TextareaRow`) instead of hand-rolled `form-group`/`checkbox-label` markup; global `.form-group` is unchanged for the 35 non-settings files that use it. Search is indexed from per-section `Section.search.ts` entries aggregated in `settings/search/entries.ts`, replacing the hand-curated `searchableText` keyword arrays as the primary match path (keywords remain a fallback for unmigrated sections). `settings-search-index.test.ts` fails the build when a rendered descriptor `key` is missing from the index. Adds the missing `--font-size-sm`/`--font-size-md` tokens plus `2xs`/`lg`, which were referenced by 12 declarations but never defined. +- edc6413: summary: Pin each task to one derivable worktree directory when worktree naming is "Task ID". + category: feature + dev: `worktreeNaming: "task-id"` now enables task-pinned worktrees — a task always lives in `/` (derive → validate → reuse-or-recreate in `worktree-pinning.ts`/`worktree-acquisition.ts`), and stale/foreign `task.worktree` metadata self-corrects (audit `worktree:pin-rederived`) without consuming session retries. Task pinning and `recycleWorktrees` are mutually exclusive: enabling both is rejected at the settings-write boundary (`assertWorktreeNamingRecycleExclusive`, enforced in `store.updateSettings` + dashboard `PUT /settings`), the Settings → Worktrees UI enforces the exclusivity bidirectionally (disabling whichever control would create the conflict), and pinning applies only when recycling is off. `"random"`/`"task-title"` naming and the recycle pool are unchanged; worktrunk-managed layouts bypass pinning. +- c15c78f: summary: Todo lists now work on the embedded-PostgreSQL backend instead of erroring. + category: feature + dev: Ports TodoStore to the AsyncDataLayer. Adds an `AsyncTodoStore` class (in async-todo-store.ts) wrapping the already-tested async CRUD helpers over project.todo_lists/project.todo_items; `getTodoStoreImpl` returns it in backend mode instead of throwing "TodoStore is not available in PG backend mode" (which 500'd every /api/todos route). The dashboard todo routes now await the store methods so the same code path serves both the sync SQLite store and the async PG store. Adds todo-store.pg.test.ts to the blocking test:pg-gate lane. Known gap: the async store does not yet emit list/item events for SSE live-refresh (updates land on next read). + +### Patch Changes + +- 80f2028: summary: Keep Planning session history visible while its latest data loads. + category: performance + dev: Planning fetches request only planning-type session summaries. +- 7daa16f: summary: Suppress the Planning Mode reconnecting hint on persisted question screens. + category: fix + dev: Gate the `planning.reconnecting` indicator in `PlanningModeModal` to `view.type === "loading"` so idle `awaiting_input`/DB-backed views render purely from persisted state. +- db05a77: summary: Hide the interview reconnecting hint on persisted question and review screens. + category: fix + dev: Gate the shared reconnecting indicator in MissionInterviewModal/MilestoneSliceInterviewModal to view.type === "loading" and in SubtaskBreakdownModal to view.type === "generating", mirroring FN-8002 so idle awaiting-input screens render purely from persisted state. +- 47f9aa7: summary: Settings now uses the same compact color-theme dropdown as the dashboard. + category: fix + dev: AppearanceSection/ThemeSelector reuse ThemeDropdown; the old .theme-grid affordance and orphaned CSS were removed. Shared swatch classes retained. +- 6206af8: summary: Settings theme selector is merged into the current-theme row and lists every color theme. + category: feature + dev: ThemeDropdown gains a current-row trigger variant used by ThemeSelector; the static preview markup/CSS was removed. Tests assert the explicit historical theme set on Settings and Command Center, including restored Shadcn Mono. +- 9b9d6a2: summary: Refresh workspace dependencies before a full System panel rebuild. + category: feature + dev: Full rebuilds run pnpm install before building and restarting. +- 2d61976: summary: Restore agent models, workflow lanes, Skills, goals, and Reliability after PostgreSQL migration. + category: fix + dev: Moves backend workflow, plugin, goal, and audit reads to PostgreSQL and recovers false heartbeat model parks. +- f116d05: summary: A task honestly parked as blocked now stays parked through engine pause/abort and workflow-graph teardown. + category: fix + dev: handleGraphFailure honors a live blocked park (status "failed", error "BLOCKED:") before every pause-abort/graph-failure classifier — no requeue-to-todo, no auto-continue, no BLOCKED: error overwrite — and releases its worktree/maxWorktrees slot. FN-8141 follow-up 1. +- 883f38d: summary: Fix agent AI interviews to use the configured planning model and preserve runtime suggestions. + category: fix + dev: Resolves onboarding model settings before session creation and aligns the prompt with supported runtime draft fields. +- 678265a: summary: Show live phase, table, row-copy, verification, and failure progress during SQLite migration. + category: fix + dev: Adds structured migration progress events to first-boot startup and `fn db migrate` terminal output. +- 514ccd3: summary: Recover agent interviews when models return thinking-only or malformed JSON responses. + category: fix + dev: Preserves structured thinking output and retries one JSON-only reformat turn before surfacing an error. +- be55d0a: summary: Fix dashboard skill discovery lifecycle in PostgreSQL mode. + category: fix + dev: Reuse and close backend-aware project stores, keep request-scoped discovery loaders from mutating persistent plugin runtime state, and make cluster-wide PostgreSQL runtime-role creation race-safe. +- 0312d2e: summary: Preserve late task, workflow, and mission fields during SQLite-to-PostgreSQL migration. + category: fix + dev: Adds PostgreSQL schema migration 0007 and restores runtime persistence for active late-added fields. +- 30a83f2: summary: Recover stale executor sessions with bounded fresh-session retries while preserving task progress. + category: fix + dev: Clears the persisted assistant-last transcript, defers requeue until lock release, and exhausts through the shared recovery budget. +- f111a40: summary: Settings now opens on the Appearance section by default. + category: fix + dev: Sets SettingsModal DEFAULT_SETTINGS_SECTION to appearance. +- 130c702: summary: Fix startup failures and a leaked server when two Fusion processes start embedded Postgres at the same time. + category: fix + dev: A lifecycle joining an already-running instance returned a URL before the owner's `ensureDatabase()` had created the database, so the joiner's first connect failed. Both join paths now verify the database on the joined instance's port (never `getPort()`, which prefers this instance's requested port) and create it if absent. Verification is best-effort so an unreachable/stale-pid join still resolves optimistically as before. `CREATE DATABASE` races tolerate both `42P04` and `23505` on `pg_database_datname_index`. The startup-race join now fires only on a lock-collision error — joining on any failure let a start that took the lock and then failed later join its own postmaster with `ownsProcess=false`, orphaning it — and reaps its own losing wrapper via the new `NonAdminServerHandle.stopWrapperOnly()`, since `stop()`/`pg.stop()` resolve through the shared data dir and would kill the winner. +- c15c78f: summary: Repair macOS embedded PostgreSQL dylib compatibility links before startup. + category: fix + dev: Adds an idempotent embedded-postgres macOS preflight that creates missing ABI-name symlinks such as `libpq.5.dylib` and `libzstd.1.dylib` from bundled versioned dylibs before `initdb`/`postgres` spawn, fixing zero-config startup when package symlink hydration is absent or incomplete. +- e33039a: summary: Starting a second Fusion process no longer fails with a Postgres lock-file error. + category: fix + dev: `EmbeddedPostgresLifecycle.start()` wraps the start path in a try/catch; on failure it re-reads `postmaster.pid` via `isAlreadyRunning()` and, when a live instance exists, joins it (`ownsProcess=false`) instead of surfacing the expected lock collision. Closes the window between the preflight singleton check and `pg.start()` where a competing process can create the lock. Non-`isAlreadyRunning` failures still rethrow unchanged. +- 19eb179: summary: Block empty-diff task finalizes that skipped verification steps so reverted work can't reach done. + category: fix + dev: Generalizes evaluateNoCommitsNoOpFinalize (packages/core) to block any zero-diff finalize when a step is skipped — verification/QA/review-named skips block unconditionally, other skips block unless every non-skipped step is done AND the task is noCommitsExpected. Applies at all finalize lanes (merger-ai empty lane, merger.ts, self-healing stranded-todo promoter + no-op review finalize). Closes the FN-8141 laundering path. +- 1c4fdb7: summary: Reverted-work tasks no longer merge to done as empty no-ops; they park for review. + category: fix + dev: merger-ai.ts empty-outcome lane now requires positive already-landed proof (recorded merge, prior no-op proof, branch tip ancestor of main, or a strong already-on-main classifier match) before finalizing a commit-expected task; otherwise it sets task.error, emits `task:empty-merge-finalize-blocked-no-landed-proof`, and moves the task back to todo. Same guard mirrored in the workspace all-empty finalize (blocks the reverted/net-zero shape). noCommitsExpected tasks keep their existing path (FN-8141). +- 9a37415: summary: Executors can end a genuinely-impossible task as "blocked" instead of laundering it into done. + category: fix + dev: fn_task_done gains outcome="blocked" (plus reason + optional blockedBy). Blocked parks the task failed (error "BLOCKED: "), bypasses the completion/bulk-completion gates, keeps steps in their true statuses, records blockedBy as task.dependencies, and emits run-audit task:execution-blocked-parked. Prompt guidance now names the blocked exit as the correct escape hatch, replacing skip-then-complete. Motivating incident: FN-8141. +- 9aa2852: summary: Dashboard API requests now resolve an explicit registered project instead of silently using the launch directory. + category: fix + dev: routes/context.ts gains a shared resolveRequestProjectId/getScopedStore/getProjectContext seam (request projectId → options.engine.getProjectId() → raw launch-dir store with a one-time warn, for unregistered dirs only). A resolved id always binds through the engine store or getOrCreateProjectStore; the launch project reuses the injected registry-bound store to avoid a duplicate pool. server.ts resolveScopedStore threads the launch project id, and the todo/goals/mission/insights/research/evals routers route their request middleware through the same seam. +- 46866a5: summary: Failed tasks with pre-fix promotion history can no longer auto-promote past the failure-provenance guard. + category: fix + dev: Removed the promoter's own recovery line ("Auto-recovered: task work was complete but stranded") from CLEAN_COMPLETION_MARKERS in completed-promotion-failure-provenance.ts; clean-completion evidence is now execution outcomes only (accepted/implicit fn_task_done). FN-8141 follow-up 2. +- e9f14bf: summary: Make local `pnpm build` skip unchanged packages and use fast CLI packaging by default. + category: performance + dev: Content-hash skip cache now covers non-plugin packages; CLI packaging stages desktop/plugins/DTS only with FUSION_CLI_FULL_PACKAGE=1 or CI (`pnpm build:full`). Added maxConcurrentVerifications (default 1) and tsc incremental builds. +- 05151a2: summary: Speed up dashboard and serve startup by sharing the PostgreSQL store and deferring non-route work. + category: performance + dev: Dashboard injects externalTaskStore for cwd engine (serve parity); multi-project engines only share when working directories match. ProjectEngine defers notifiers/OAuth (refresh-before-monitor), automation syncs, and merge sweep. Serve no longer awaits startAll before listen. Phase timing logs on both surfaces. +- c15c78f: summary: Fix manual agent-run creation failing on PostgreSQL when a heartbeat executor is attached. + category: fix + dev: POST /api/agents/:id/runs built its AgentStore without the scoped store's AsyncDataLayer on the heartbeat-executor branch, hitting the removed SQLite runtime in backend mode; it now borrows the layer like the record-only branch. +- 703488f: summary: Keep Anthropic subscription sessions connected by refreshing OAuth credentials with the correct client identity. + category: fix + dev: Corrects the Claude OAuth client ID used by the engine refresh request and adds request-contract coverage. +- 4b150e2: summary: Fix Anthropic subscription logins failing tasks with "Provider is not configured: anthropic". + category: fix + dev: pi >=0.80.8 moved session auth from `ModelRegistry.getApiKeyAndHeaders` (fusion's `getApiKey`) to `ModelRuntime.getAuth` -> pi-ai `resolveProviderAuth`, which reads `credentials.read("anthropic")` and refreshes OAuth via `credentials.modify("anthropic")`. Fusion stores the subscription login under `anthropic-subscription` (no raw `anthropic` row), so the refresh saw `current === undefined` and auth resolved to undefined. Fix: `createFusionCredentialStore.read("anthropic")` now resolves through `getApiKey("anthropic")` (handles refresh + raw/legacy/subscription/fallback precedence) and returns a ready `api_key` credential; pi-ai routes it as OAuth by the `sk-ant-oat` token prefix. Also add "not configured" to `isRetryableModelSelectionError` so an unresolved provider triggers the configured fallback model instead of hard-failing. +- 329fc1f: summary: Fix protected image artifacts so previews and links load in authenticated dashboards. + category: fix + dev: Artifact media URLs now use the existing same-origin query-token fallback required by browser image and link navigation. +- d1e9b56: summary: Fix a dashboard/app boot crash on databases created before the bulk-completion-refusal change. + category: fix + dev: PR #2260 added project.tasks.bulk_completion_refusal_at to the Drizzle model and the 0000 baseline but shipped no forward migration, so any pre-existing PostgreSQL database (already carrying the 0000 marker) never gained the column and crashed on the first TaskStore SELECT. Adds forward migration 0018 (wired via BULK_COMPLETION_REFUSAL_AT_VERSION, SCHEMA_BASELINE_VERSION → "0018"), a per-column upgrade regression test, and a migration-wiring-integrity guard (baseline marker must equal the highest migration file; every .sql must be registered). +- 4f03767: summary: Fix startup failures when several projects migrate against one PostgreSQL cluster at the same time. + category: fix + dev: Migration 0006's `fusion_runtime` setup used a check-then-CREATE ROLE that cannot be atomic — roles live in cluster-wide `pg_authid`, but the applier's `pg_advisory_xact_lock('fusion:schema-applier')` is per-database, so concurrent appliers on different databases of one cluster all saw the role as absent and raced, and the losers failed with 23505 on `pg_authid_rolname_index`. The create now tolerates losing the race (`EXCEPTION WHEN duplicate_object OR unique_violation`), catching the index-level violation the race actually raises as well as the plain duplicate. +- e97081f: summary: Stop more agents from running than the global concurrency cap allows. + category: fix + dev: Scheduler tryAcquires a shared slot before todo→in-progress and hands it to the executor/graph; triage admits planners against live running-agent claim (planning + in-progress + active in-review), not only semaphore.availableCount. +- 7aeefe2: summary: The task composer's Save button no longer has its label cut off on mobile. + category: fix + dev: At narrow widths `.quick-entry-primary-group` needed ~275px in a 260px column. Its five icon controls are floored by `min-width: 36px`, while Save's automatic minimum size was zeroed by the `overflow: hidden` that FN-7680/FN-7683 added for height equalization (per spec, automatic minimum size applies only when overflow is `visible`), making Save the sole shrinkable item — it absorbed the whole deficit and clipped its own label. Save is now pinned with `flex: 0 0 auto; min-width: max-content`, and the group may `flex-wrap: wrap` with `justify-content: flex-end` so a deficit reflows instead of clipping. Not breakpoint-scoped (FN-5751); inert where the row already fits. Verified in-browser at 412px and 1400px. +- 99870ba: summary: Fix first-boot SQLite migration failures while preserving all legacy project data. + category: fix + dev: Handles stale partitions, retired tables, derived FTS indexes, seeded singletons, and cross-database checksum collation. +- 5acea6c: summary: Fix data stores that silently failed against PostgreSQL by hitting removed SQLite paths. + category: fix + dev: Residual SQLite-stub sites reachable in backend mode are now routed through the AsyncDataLayer: the executor's authoritative assigned-agent fallback (executor.ts) now inherits the TaskStore asyncLayer (was silently returning null → model drift); `pruneAgentLogFilesAsync` replaces the sync self-healing prune call (was throwing every maintenance sweep); `cleanupOrphanedMaterializedSteps` deletes PG workflow_steps rows on failed create (was leaking); PG hard-delete now runs the async mission feature/task-link unlink (deleteTaskBackendImpl); `getWorkflowSettingsProjectId` no longer touches the SQLite stub for unscoped backend stores; the `fn plugin` unregistered-project fallback bootstraps a CentralCore AsyncDataLayer. Formerly-unported paths are now real backend implementations: `cleanupArchivedTasks` and `deleteWorkflowStep` delete via the async layer; `AgentStore.importLegacyFileRuns` cleanly no-ops in backend mode (no legacy SQLite run-files exist there); the dead zero-caller `applyTaskPatch` SQLite primitive was removed. +- bc34834: summary: Plan Review revisions no longer loop forever; tasks escalate to approval after repeated revises. + category: fix + dev: The triage pre-execution plan-review gate now seeds replan feedback from the plan-review REVISE output in workflowStepResults and caps consecutive REVISE replans at 3 (new planReviewReplanCount counter — a plan_review_replan_count integer column on the PostgreSQL tasks table, self-healing on existing embedded-PG databases via postgres-health), routing the task to awaiting-approval instead of looping. +- 3fce536: summary: Completed Planning Mode sessions that create multiple tasks now stay in planning history. + category: fix + dev: The multi-task create-tasks route now uses releaseSession instead of cleanupSession, retaining the persisted ai_sessions row like the single-task path. +- 78ef307: summary: Prevent startup crashes while recovering plugins from retained SQLite data. + category: fix + dev: Runs the plugin bridge before switching PostgreSQL connections to the restricted runtime role. +- daa34fb: summary: Fix task refinement/duplication, merge verification, and workflow checkpoint persistence on PostgreSQL. + category: fix + dev: atomicCreateTaskJson now routes to the AsyncDataLayer in backend mode (fixing the refineTask/duplicateTask createTaskWithId paths that bypassed \_createTaskInternal's backend routing), and the merger verification-cache ops (getVerificationCacheHit/recordVerificationCachePass) are now async with a PostgreSQL branch; the upsert targets verification_cache_pkey by constraint name since migration 0006 rebuilds project-schema PKs to lead with project_id. The full sync-SQLite residue sweep also ports workflow run-branch/step-instance persistence, branch progress, plugin column-transition hooks, getTaskColumns, getWorkflowStep/listWorkflowSteps stored-row reads, readRawProjectSettings, and listWorkflowPromptOverridesForProject to the async layer (several store methods became async: saveWorkflowRunBranch, loadWorkflowRunBranches, clearWorkflowRunBranches, saveWorkflowRunStepInstance, loadWorkflowRunStepInstances, clearWorkflowRunStepInstances, getBranchProgressByTask, readRawProjectSettings, listWorkflowPromptOverridesForProject). Also bumps @earendil-works/pi-ai and pi-coding-agent to ^0.80.10 — the FN-8142 pi SDK migration targeted APIs (ModelRuntime et al.) absent from the previously pinned 0.80.6, which broke the engine build. +- f079245: summary: Harden session-routing header wiring so a missing model-auth method can't break agent startup. + category: fix + dev: attachSessionRoutingHeaders now no-ops (warns) when ModelRuntime.getAuth is absent instead of throwing on getAuth.bind, restoring the pre-FN-8142 defensive invariant. Also realigns the pi-create-fn-agent and pi-session-routing-headers engine tests to the ModelRuntime.getAuth routing seam (mocks add the ModelRuntime export) so both suites pass against the 0.80.10 SDK landed by FN-8179. +- 1d6a044: summary: Fix tasks getting stuck in Planning forever after a plan review asks for revisions. + category: fix + dev: `hasAdvancedPastPlanning` (replan-target.ts) counted `steps.length > 0` as proof a task had advanced past planning. Replan cards legitimately retain the steps their previous planning pass materialized, so the guard at triage's `specifyTask` claim silently skipped its `status:"planning"` write, re-claimed the card every poll, and starved healthy cards out of `maxTriageConcurrent`. Steps are no longer advancement evidence in a planner lane ("triage", or "todo" for plan-in-place workflows carrying a planning status); worktrees and execution/terminal columns still are, preserving FN-7977. The primary claim path now warns instead of skipping silently. +- 03966ec: summary: Fix branch-group controls for tasks in non-default dashboard projects. + category: fix + dev: Resolves branch-group route stores from each request's projectId. +- 5185914: summary: Prevent implementation-incomplete workflow merge failures from false-completing as no-op done. + category: fix + dev: Merge graph failures with missing implementation proof now fail closed or requeue resumable parsed steps before any no-branch no-op merge requester path can run. +- 1b9c7a7: summary: Stop posting two completion comments on a linked issue when a task is both imported and tracked. + category: fix + dev: A task can carry both linkages at once (GitHub adopts a sourceIssue as githubTracking.issue via `source_issue_linked`; GitLab's buildGitLabTaskProvenance always emits both), so with githubCommentOnDone/gitlabCommentOnDone on, the issue-comment and tracking-comment services both commented on the same issue. The issue-comment services now suppress themselves when the tracking service provably posts to the same target — matched on issue identity for GitHub (case-insensitive owner/repo + number) and by construction for GitLab (resolveGitLabTarget prefers the tracked item). The tracking comment wins because it carries commit/branch/PR/files plus the release lines. Tracking pointed at a different issue, tracking disabled/unlinked, and same-column re-emits (where the tracking service no-ops) all still post as before; the custom comment template no longer renders on tracked issues. +- 71275ab: summary: Fusion self-repo issues now actually show the target release version when a task closes. + category: fix + dev: FN-7575 added the release lines to `GitHubIssueCommentService`, which is gated on the `githubCommentOnDone` setting (default false, no Settings UI) and so never fired. `GitHubTrackingCommentService` is the surface that posts the "✅ Done —" comments. The version logic moved to a shared `fusion-release-version.ts` and now applies to all four done-comment surfaces (GitHub/GitLab × tracking/issue). Lines join `optionalLines` so they count against `DONE_COMMENT_MAX_LENGTH`; GitLab self-repo matching uses `item.projectPath`, since the resolved target prefers the numeric `projectId`. +- d48537b: summary: Grok CLI failures now show the actual error instead of an empty chat message. + category: fix + dev: `GrokRuntimeAdapter` surfaces every silent-failure path as visible `onText` text plus an assistant message and `state.errorMessage`, instead of resolving into a blank bubble. Covers session-create failure (`describeCreateFailure`, which returns a dead session), prompt failure (`describePromptFailure`), a dead/disposed session with no ACP connection on a follow-up turn, and a turn ending with a non-`end_turn` stopReason and no assistant text. A turn with genuinely empty assistant text stays silent. Resolve-never-reject is preserved so chat/executor always receive a well-formed turn. Fixes the root cause behind the FN-7779 "No message" placeholder. +- 6e0fde8: summary: Fix a deleted Planning Mode session silently reappearing after an in-flight generation finishes. + category: fix + dev: AiSessionStore now records a bounded-TTL delete tombstone (10 min) in `delete()`/`deleteByIdAndType()`/bulk cleanup paths; `upsert()` drops writes for tombstoned ids without emitting `ai_session:updated`. Fixes the root cause in the shared store rather than in `planning.ts`/`subtask-breakdown.ts`/`mission-interview.ts`/`milestone-slice-interview.ts`, so all AiSessionType producers are protected. +- 49a459a: summary: Fix plugin skill toggles for custom skillFiles paths so sessions honor them. + category: fix + dev: resolvePluginSkillEnabled now keys reads by the resolved plugin skillFiles path when available. +- 9bdbdc5: summary: Fix Compound Engineering plugin skills missing from the published package. + category: fix + dev: Stages bundled plugin src/skills into dist/plugins//skills during bundlePluginEntry() for #2094 / FN-7955. +- d956abc: summary: Reports, CLI Printing Press, and WhatsApp Chat plugins now load from global installs. + category: fix + dev: Stages the three plugins through bundlePluginEntry with postgresSchema shim coverage and bundle-output regression assertions. +- 16b0109: summary: Pressing "New session" in Planning now always focuses the compose input. + category: fix +- ddc8e6d: summary: Give terminally failed planning tasks deterministic fallback titles. + category: fix + dev: Adds non-LLM title derivation for terminal triage/specification failure paths. +- ec78981: summary: Make idle triage patrol back off during model outages. + category: fix + dev: Updates built-in standard and concise triage heartbeat prompt guidance. +- de25e32: summary: Add a workflow setting to disable idle heartbeat task patrol. + category: feature + dev: Adds plannerHeartbeatPatrolEnabled for no-task heartbeat and triage prompt gating. +- a8b6387: summary: Fix Project Models workflow model lane saves. + category: fix + dev: Keeps pending default-workflow model lane overrides registered for Settings Save after section navigation. +- 6ca7e48: summary: Surface duplicate-decision tasks on cards and in the operator mailbox. + category: fix + dev: Triage-marker duplicate decisions now use an idempotent task-linked system message. +- f1b528f: summary: Tasks parked by a refused fn_task_done no longer resurrect and strand at code review. + category: fix + dev: FN-7965. `fn_task_done`'s in-session refusal handler parks the row terminally (status=failed, worktree/branch/sessionFile cleared) once `MAX_TASK_DONE_REQUEUE_RETRIES` is exhausted, but the executor's no-fn_task_done retry loop never observed that park and spawned a fresh session. That session completed and marked the task done against a worktree-less row, so the pre-merge graph failed on the first write-capable node (`no-worktree-for-write-node`) and surfaced as a misleading "Workflow graph terminated with failure at node 'code-review-remediation'". The loop now re-reads state and honors the park (`terminallyParked`), stopping without requeue or review handoff — deliberately not routed through the FN-4806 reclaim branch, whose silent todo requeue would clear the park and re-park on next pickup in a todo→execute→park loop. The pre-existing reclaim probes could not catch this: they test `worktree === null`, but the store maps a cleared column to `undefined` (`task-store/serialization.ts` — `row.worktree || undefined`); tightening that probe is left as separate work. +- 0e84731: summary: The planner overseer now notices a failed in-progress task immediately instead of after two hours. + category: fix + dev: FN-7965. `deriveSignalAndSources`'s `executor` branch never read `task.status`, so a row parked `status: "failed"` (e.g. the terminal fn_task_done refusal/invariant park) reported `signal: "progressing"` with reason "Task is actively executing in-progress work". `failed` was only ever derived for the merger/pull-request stages, leaving the FN-7743 2h stall proxy (`columnMovedAt ?? updatedAt`) as the sole backstop. The branch now reports `failed`, which routes into the pre-existing failed-signal policy — `retry_step` at executor stage (sources are `agent-log`, never an ERROR_SOURCE_KIND), bounded by `PLANNER_RECOVERY_MAX_ATTEMPTS` and escalated on exhaustion. `paused` keeps precedence (operator/user-paused stays `blocked`), the reason is held constant so the FN-7577 `stage|signal|reason` feed dedup still holds, and `status` was added to `OverseerTaskRef`. +- f9c19f9: summary: Honor custom project workflow defaults in triage guidance. + category: fix + dev: `triageDefaultWorkflowId` and `triageDecisionOnlyWorkflowId` now accept custom IDs; unset/default triage routing inherits `config.settings.defaultWorkflowId`. +- 6e3a338: summary: Make task deletion return faster while cleanup continues in the background. + category: performance + dev: Defers branch cleanup and dashboard agent-binding release off the user-visible delete path. +- d893a02: summary: Hide the GitLab import tab when GitLab integration is disabled in settings. + category: fix + dev: Gates GitHubImportModal.tsx GitLab provider visibility on effective gitlabEnabled and coerces disabled persisted state to GitHub. +- aa0d863: summary: Fix Agents controls panel overlapping surrounding content on narrow viewports. + category: fix + dev: Elevated the .agent-controls-panel stacking context in AgentsView.css so the open controls popover sits above agent cards and token usage. +- 2179a61: summary: Fix concurrency sliders being undraggable on mobile touch devices. + category: fix + dev: The footer Engine Control menu and Command Center Concurrency card range inputs now use touch-action:none so the mobile pan-y ancestor lock no longer hijacks a horizontal thumb drag into page pan. +- d74018f: summary: Chat "Thinking" reasoning blocks now start collapsed for a cleaner transcript. + category: fix + dev: Removed the `open` attribute from TaskChatTab's task-chat-thinking
; StandardChatSurface already collapses thinking. Regression tests assert collapsed-by-default + expand-on-click across persisted, streaming, and Task Detail chat surfaces (FN-7974). +- 836e53c: summary: Exclude long engine pauses from in-progress task execution time. + category: fix + dev: Reuses FN-7011 active-timing reconciliation on full Global/Engine unpause. Engine-pause time is excluded even if in-flight agents continue, matching restart behavior. +- 5ff7a20: summary: Fix Mailbox artifact messages — "Open artifact" now loads without an auth error and "View task" opens the task. + category: fix + dev: artifactMediaUrl now appends the fn_token query fallback for authenticated element/link loads (script-capable HTML artifact iframes stay token-free); isTaskPopupVisibleForView no longer gates non-board/list popup opens and usePoppedOutTasks.popOut upgrades same-id entries. +- 214af98: summary: Transient provider failures of the Plan Review gate no longer bounce tasks back to planning. + category: fix + dev: workflow-graph-executor shouldRequestPreMergeFix + executor requestPreMergeOptionalStepFix now classify plan-review hard failures via isTransientError/isOperatorActionableAgentError/model-fallback signatures and skip the needs-replan handoff for non-plan-defect failures; genuine REVISE still replans. Fixes issue #2124 / FN-7977. +- 10b8045: summary: GitHub import skips prior issues after description edits or owner/repo casing changes. + category: fix + dev: Consolidated GitHub import dedup into shared isGitHubIssueAlreadyImported/buildGitHubIssueSource (sourceIssue-first, case-insensitive repository, source.sourceMetadata and description-URL fallbacks) used by both CLI import functions (runTaskImportGitHubInteractive and runTaskImportFromGitHub, now listing with slim:false), both extension tools, and dashboard single/batch routes; removed the description Source-URL-regex-only importedUrls dedup. +- b2977d1: summary: Fix task chat showing a stale agent message while generating a new reply. + category: fix + dev: TaskPlannerChatTab now clears streamingThinking and the streaming-assistant row on fresh generations while preserving attach-to-in-flight snapshots. +- d9843f7: summary: Move project summarization model controls next to summarization settings. + category: fix + dev: Dashboard Project Models layout only; no settings key or persistence changes. +- a167272: summary: Chat agents no longer switch your checked-out branch unless you ask. + category: fix + dev: Adds a branch-stickiness clause to CHAT_SYSTEM_PROMPT in packages/dashboard/src/chat.ts. +- 0b33281: summary: Plan Review now allows more automatic replan attempts (default 8) before asking a human. + category: internal + dev: Raised triage PLAN_REVIEW_GATE_REPLAN_CAP from 3 to 8 in packages/engine/src/triage.ts; escalation to awaiting-approval (awaitingApprovalReason "plan-review-replan-cap") now fires at 8 consecutive REVISE replans. +- dc7bb40: summary: Prevent inline Code Review steps from failing before they can run. + category: fix + dev: Shares workflow write-capability classification between graph preparation and runtime. +- e83116a: summary: The GitHub/GitLab Import Tasks screen now marks an issue, PR, or item as "Imported" immediately after importing it. + category: fix + dev: GitHubImportModal unions a local optimistic imported-URL set (populated in handleImport/handleImportGitLab success handlers, cleared on modal reset and on provider/owner/repo/GitLab-resource change) with the tasks-derived importedUrls at every consumer (rows, count labels, top/bottom/GitLab Import buttons), so a just-imported row shows the badge and disables re-import without waiting for the tasks prop round-trip. +- 3639169: summary: Show the underlying error message for failed tool calls in the task Activity feed. + category: fix + dev: tool_error agent-log entries now always persist bounded `detail` regardless of `persistAgentToolOutput`; TaskChatTab renders it in an expandable "Error" block. +- cae7847: summary: Auto-merge now retries AI provider blips instead of permanently failing the task. + category: fix + dev: ACP provider faults (`promptAcpSession` now preserves the JSON-RPC code as `acp rpc code -32603`) classify as transient via a new `ai-provider-turn-failure` class. `classifyTransientMergeError` also delegates to `isTransientError`, so the self-healing sweep and the inline retry gate share one definition — previously network errors got inline retries but were invisible to the sweep once parked `failed`. Pure predicates moved to the import-free leaf `transient-error-patterns.ts` (re-exported from `transient-error-detector.ts`) to keep the logger chain out of the classifier per FN-5627. Transient budgets raised: `MAX_AUTO_MERGE_TRANSIENT_RETRIES` 3→5, `MAX_TRANSIENT_MERGE_RECOVERIES` 2→5. +- 7b31d54: summary: AI merge rejections now say why, and a stranded merge can be retried without waiting. + category: fix + dev: Two FN-8004 follow-ups. (1) The review prompt said both "End with a single decision line" and "Then list each concrete reason as a bullet"; reviewers obeyed the former, so reasons landed above the verdict where `extractRejectReasons` never looked, degrading every rejection to "rejected the merge without a stated reason" — which was then fed to the corrective re-merge as its instruction. The parser now recovers reasons from either side of the verdict (inline → after → before, capped at 8) and the prompt ordering is unambiguous. (2) `isStaleMergeActiveStatus` moves to the leaf `merge-active-status.ts`, shared by `SelfHealingManager.recoverStaleMergingStatus` and the dashboard Retry gate, which previously refused every merge-active status; an orphaned `landing` stamp is now retryable by hand while a live merge (holding the lease or refreshing `updatedAt`) is still protected. +- 402b3a9: summary: Concurrent soft-delete during a heartbeat move no longer strands an agent in error. + category: fix + dev: New engine classifier isConcurrentSoftDeleteRaceError short-circuits the agent-heartbeat failed-run handler for TaskDeletedError races (agent stays active, budget untouched) and emits run-audit agent:heartbeat-move-skipped-soft-delete. +- a646ae3: summary: Quick Add overseer, priority, fast, GitHub, and attach icons now render at one uniform size. + category: fix + dev: QuickEntryBox primary-group icon-only buttons (Eye/EyeOff, PriorityIcon, Zap, GitHub ProviderIcon, Paperclip) all use the icon-only btn-icon treatment (--icon-size-sm) for a uniform 14px cluster; ProviderIcon sizeMap unchanged. +- 08a10bf: summary: Plan Review now backs off and pauses on provider rate limits instead of retrying every 30s for hours. + category: fix + dev: runPlanReviewBeforeExecution fires usageLimitPauser.onUsageLimitHit for usage-limit reviewer failures (the inline reviewStep catch hid them from triage's own handler) and re-parks via computeRecoveryDecision (60s/120s/240s, terminalizing at MAX_RECOVERY_RETRIES) instead of a fixed 30s nextRecoveryAt. The borrowed recoveryRetryCount budget is cleared on any real verdict. RetryStormError gains an optional cause, surfaced as underlyingError in serializeRetryStormError, so the cap no longer masks the real error. +- 71dd191: summary: Plan Review no longer loops forever on reviewer retry storms — it fails the task with a clear error. + category: fix + dev: runPlanReviewBeforeExecution now terminalizes RetryStormError (status "failed", serialized error, nextRecoveryAt cleared) instead of re-queuing plan-review-unavailable, which had let reviewerFallbackRetryCount climb unbounded past maxReviewerFallbackRetries. +- 66ae82a: summary: Concurrency slider current-use dots now line up with the running-count value on the dashboard and footer. + category: fix + dev: Match the current-use marker's native range coordinate mapping and thumb-size edge inset in CommandCenterControls and EngineControlMenu. +- 3dcb62f: summary: Fix already-approved plans being re-asked for approval after recovery. + category: fix + dev: Plan-approval fingerprint now ignores auto-injected ## Original Description / Frontend UX hygiene sections so finalizeApprovedTask idempotency survives on-disk PROMPT.md injection (FN-8008). Keeps approve-plan producer and manual-gate consumer hashing identical normalized content. +- 7cec078: summary: Task-detail popups now open in — and stay scoped to — the view where you opened them. + category: fix + dev: isTaskPopupVisibleForView now scopes by origin view for all views (not just Board/List); taskPopupsBoardListOnly defaults on and popups dedupe per (task id, origin view) so the same task can open independently in multiple views. Escape/keyboard close carries (taskId, originView) identity. FN-8016. +- a821bce: summary: Move the room thinking-effort control from the room header into the composer Brain icon next to attach. + category: fix + dev: Rooms now reuse ChatThinkingLevelControl in level-only mode (showTargetSection={false}); header