chore(release): v0.70.0

Version bump via changesets.
This commit is contained in:
gsxdsm
2026-07-17 17:12:42 -07:00
parent dc4a8dfadf
commit f5538e6253
351 changed files with 6103 additions and 3035 deletions

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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).

View File

@@ -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: <reason>"), 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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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).

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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`.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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/<id>/skills during bundlePluginEntry() for #2094 / FN-7955.

View File

@@ -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.

View File

@@ -1,6 +0,0 @@
---
"@runfusion/fusion": patch
---
summary: Pressing "New session" in Planning now always focuses the compose input.
category: fix

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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`.

View File

@@ -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`.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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 <details>; StandardChatSurface already collapses thinking. Regression tests assert collapsed-by-default + expand-on-click across persisted, streaming, and Task Detail chat surfaces (FN-7974).

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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".

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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 <select> and its CSS/shell removed. Persistence via rooms.updateRoomSettings({ thinkingLevel }) unchanged.

View File

@@ -1,7 +0,0 @@
---
"@runfusion/fusion": patch
---
summary: Planning summary description now renders formatted markdown by default.
category: feature
dev: Initializes the Planning summary renderMarkdown state to true.

View File

@@ -1,7 +0,0 @@
---
"@runfusion/fusion": minor
---
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.

View File

@@ -1,7 +0,0 @@
---
"@runfusion/fusion": minor
---
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.

Some files were not shown because too many files have changed in this diff Show More