diff --git a/.changeset/FN-7491-triage-splitting-setting.md b/.changeset/FN-7491-triage-splitting-setting.md deleted file mode 100644 index a8a2494275..0000000000 --- a/.changeset/FN-7491-triage-splitting-setting.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Add a workflow setting to disable automatic large-task triage splitting. -category: feature -dev: Adds triageProactiveSubtaskSplittingEnabled while preserving explicit breakIntoSubtasks requests. diff --git a/.changeset/FN-7492-task-card-plan-review-progress.md b/.changeset/FN-7492-task-card-plan-review-progress.md deleted file mode 100644 index 9250f398c2..0000000000 --- a/.changeset/FN-7492-task-card-plan-review-progress.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/FN-7541-remove-chat-eye-icon.md b/.changeset/FN-7541-remove-chat-eye-icon.md deleted file mode 100644 index abf2336a76..0000000000 --- a/.changeset/FN-7541-remove-chat-eye-icon.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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). diff --git a/.changeset/FN-7546-oversight-controls-clarity.md b/.changeset/FN-7546-oversight-controls-clarity.md deleted file mode 100644 index 9c9f5ac826..0000000000 --- a/.changeset/FN-7546-oversight-controls-clarity.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Clarify the task-detail planner-oversight Nudge/Explain controls with a visible label, an in-DOM disabled reason, and an 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. diff --git a/.changeset/activity-menu-ios.md b/.changeset/activity-menu-ios.md deleted file mode 100644 index f4a8c962c7..0000000000 --- a/.changeset/activity-menu-ios.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fix-anthropic-subscription-fragment-login.md b/.changeset/fix-anthropic-subscription-fragment-login.md deleted file mode 100644 index 85d2c35fc6..0000000000 --- a/.changeset/fix-anthropic-subscription-fragment-login.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fix-windows-terminal-worktrunk-popup.md b/.changeset/fix-windows-terminal-worktrunk-popup.md deleted file mode 100644 index d44499dc33..0000000000 --- a/.changeset/fix-windows-terminal-worktrunk-popup.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7468-onboarding-quick-providers.md b/.changeset/fn-7468-onboarding-quick-providers.md deleted file mode 100644 index 5fec19580c..0000000000 --- a/.changeset/fn-7468-onboarding-quick-providers.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7469-select-created-project-directory.md b/.changeset/fn-7469-select-created-project-directory.md deleted file mode 100644 index 2572f60643..0000000000 --- a/.changeset/fn-7469-select-created-project-directory.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7470-git-onboarding.md b/.changeset/fn-7470-git-onboarding.md deleted file mode 100644 index f58fd6e383..0000000000 --- a/.changeset/fn-7470-git-onboarding.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Show Git prerequisite guidance during first-run GitHub onboarding. -category: feature -dev: Adds bounded server-host git availability to auth status and onboarding. diff --git a/.changeset/fn-7471-desktop-update-version.md b/.changeset/fn-7471-desktop-update-version.md deleted file mode 100644 index 127e445d57..0000000000 --- a/.changeset/fn-7471-desktop-update-version.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7472-windows-desktop-close-quits.md b/.changeset/fn-7472-windows-desktop-close-quits.md deleted file mode 100644 index 21f08bc954..0000000000 --- a/.changeset/fn-7472-windows-desktop-close-quits.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7473-desktop-anthropic-oauth-browser.md b/.changeset/fn-7473-desktop-anthropic-oauth-browser.md deleted file mode 100644 index 0ba9284e63..0000000000 --- a/.changeset/fn-7473-desktop-anthropic-oauth-browser.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7474-github-onboarding-actions.md b/.changeset/fn-7474-github-onboarding-actions.md deleted file mode 100644 index effca3756f..0000000000 --- a/.changeset/fn-7474-github-onboarding-actions.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7475-github-setup-warning.md b/.changeset/fn-7475-github-setup-warning.md deleted file mode 100644 index ddb9fae15a..0000000000 --- a/.changeset/fn-7475-github-setup-warning.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7476-desktop-engine-banner.md b/.changeset/fn-7476-desktop-engine-banner.md deleted file mode 100644 index 5b29ed00c6..0000000000 --- a/.changeset/fn-7476-desktop-engine-banner.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7477-connection-manager-clarity.md b/.changeset/fn-7477-connection-manager-clarity.md deleted file mode 100644 index bcb18981e7..0000000000 --- a/.changeset/fn-7477-connection-manager-clarity.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7478-local-server-switch-option.md b/.changeset/fn-7478-local-server-switch-option.md deleted file mode 100644 index 26378a00a4..0000000000 --- a/.changeset/fn-7478-local-server-switch-option.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Restore Local Server in the desktop Switch server list. -category: fix -dev: Desktop Connection Manager now lists local and saved remote destinations together. diff --git a/.changeset/fn-7479-right-dock-task-popup.md b/.changeset/fn-7479-right-dock-task-popup.md deleted file mode 100644 index fc5cbabe00..0000000000 --- a/.changeset/fn-7479-right-dock-task-popup.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7482-code-review-remediation.md b/.changeset/fn-7482-code-review-remediation.md deleted file mode 100644 index 0b9d79d018..0000000000 --- a/.changeset/fn-7482-code-review-remediation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Auto-retry retryable Code Review remediation failures. -category: fix -dev: Prevents retryable code-review-remediation graph failures from stranding tasks in in-review. diff --git a/.changeset/fn-7486-merge-recovery-noop-ownership.md b/.changeset/fn-7486-merge-recovery-noop-ownership.md deleted file mode 100644 index eff2f7557e..0000000000 --- a/.changeset/fn-7486-merge-recovery-noop-ownership.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7488-source-free-completion.md b/.changeset/fn-7488-source-free-completion.md deleted file mode 100644 index 7a47fa068c..0000000000 --- a/.changeset/fn-7488-source-free-completion.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7490-push-to-remote-setting.md b/.changeset/fn-7490-push-to-remote-setting.md deleted file mode 100644 index fcbcd51212..0000000000 --- a/.changeset/fn-7490-push-to-remote-setting.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7493-task-popup-layer.md b/.changeset/fn-7493-task-popup-layer.md deleted file mode 100644 index 8447417427..0000000000 --- a/.changeset/fn-7493-task-popup-layer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7494-keyboard-shortcuts.md b/.changeset/fn-7494-keyboard-shortcuts.md deleted file mode 100644 index 48eefcefe7..0000000000 --- a/.changeset/fn-7494-keyboard-shortcuts.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7495-settings-search.md b/.changeset/fn-7495-settings-search.md deleted file mode 100644 index e5ff54d07d..0000000000 --- a/.changeset/fn-7495-settings-search.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -summary: Add search in Settings so operators can find settings faster. -category: feature -dev: Dashboard Settings filters visible sections by setting labels and keywords. diff --git a/.changeset/fn-7497-chat-first-event-timeout.md b/.changeset/fn-7497-chat-first-event-timeout.md deleted file mode 100644 index d32b0d45cc..0000000000 --- a/.changeset/fn-7497-chat-first-event-timeout.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7498-original-task-prompt.md b/.changeset/fn-7498-original-task-prompt.md deleted file mode 100644 index e4a1a1b17d..0000000000 --- a/.changeset/fn-7498-original-task-prompt.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7499-before-after-transformation.md b/.changeset/fn-7499-before-after-transformation.md deleted file mode 100644 index aa45ca63f9..0000000000 --- a/.changeset/fn-7499-before-after-transformation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7500-terminal-shortcuts.md b/.changeset/fn-7500-terminal-shortcuts.md deleted file mode 100644 index e296300ad5..0000000000 --- a/.changeset/fn-7500-terminal-shortcuts.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7502-terminal-below-layout.md b/.changeset/fn-7502-terminal-below-layout.md deleted file mode 100644 index 6c7aa6e95f..0000000000 --- a/.changeset/fn-7502-terminal-below-layout.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7503-agent-log-timing.md b/.changeset/fn-7503-agent-log-timing.md deleted file mode 100644 index 2b3c5ff780..0000000000 --- a/.changeset/fn-7503-agent-log-timing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -summary: Show first-token and tool processing durations in task agent logs. -category: feature -dev: Adds optional agent-log timing fields `timeToFirstTokenMs` and `durationMs`. diff --git a/.changeset/fn-7504-mobile-chat-composer-keyboard.md b/.changeset/fn-7504-mobile-chat-composer-keyboard.md deleted file mode 100644 index 2bb827bed9..0000000000 --- a/.changeset/fn-7504-mobile-chat-composer-keyboard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7505-settings-default-descriptions.md b/.changeset/fn-7505-settings-default-descriptions.md deleted file mode 100644 index 23bf9f718c..0000000000 --- a/.changeset/fn-7505-settings-default-descriptions.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7506-settings-reset.md b/.changeset/fn-7506-settings-reset.md deleted file mode 100644 index 8731353926..0000000000 --- a/.changeset/fn-7506-settings-reset.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7508-planner-oversight-level-setting.md b/.changeset/fn-7508-planner-oversight-level-setting.md deleted file mode 100644 index 8fb77762f5..0000000000 --- a/.changeset/fn-7508-planner-oversight-level-setting.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7509-per-task-planner-oversight-override.md b/.changeset/fn-7509-per-task-planner-oversight-override.md deleted file mode 100644 index 4ccbe4ee99..0000000000 --- a/.changeset/fn-7509-per-task-planner-oversight-override.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7510-oversight-default.md b/.changeset/fn-7510-oversight-default.md deleted file mode 100644 index 94cce48169..0000000000 --- a/.changeset/fn-7510-oversight-default.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7511-planner-overseer-monitoring.md b/.changeset/fn-7511-planner-overseer-monitoring.md deleted file mode 100644 index 7037d140bb..0000000000 --- a/.changeset/fn-7511-planner-overseer-monitoring.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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+. diff --git a/.changeset/fn-7512-planner-bounded-recovery.md b/.changeset/fn-7512-planner-bounded-recovery.md deleted file mode 100644 index 76586f23d0..0000000000 --- a/.changeset/fn-7512-planner-bounded-recovery.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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). diff --git a/.changeset/fn-7513-planner-confirmation-gate.md b/.changeset/fn-7513-planner-confirmation-gate.md deleted file mode 100644 index 69b79446a0..0000000000 --- a/.changeset/fn-7513-planner-confirmation-gate.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7514-overseer-human-control-guard.md b/.changeset/fn-7514-overseer-human-control-guard.md deleted file mode 100644 index 469d0ffb18..0000000000 --- a/.changeset/fn-7514-overseer-human-control-guard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7515-planner-oversight-config-exposure.md b/.changeset/fn-7515-planner-oversight-config-exposure.md deleted file mode 100644 index 8fa1d7229b..0000000000 --- a/.changeset/fn-7515-planner-oversight-config-exposure.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7518-oversight-notification-verbosity.md b/.changeset/fn-7518-oversight-notification-verbosity.md deleted file mode 100644 index 18b3979702..0000000000 --- a/.changeset/fn-7518-oversight-notification-verbosity.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7519-planner-intervention-timeline.md b/.changeset/fn-7519-planner-intervention-timeline.md deleted file mode 100644 index 1118363906..0000000000 --- a/.changeset/fn-7519-planner-intervention-timeline.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7520-planner-overseer-events.md b/.changeset/fn-7520-planner-overseer-events.md deleted file mode 100644 index b7850edd77..0000000000 --- a/.changeset/fn-7520-planner-overseer-events.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7523-task-revert.md b/.changeset/fn-7523-task-revert.md deleted file mode 100644 index 4912dce4c3..0000000000 --- a/.changeset/fn-7523-task-revert.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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`. diff --git a/.changeset/fn-7526-plan-auto-approve.md b/.changeset/fn-7526-plan-auto-approve.md deleted file mode 100644 index 7dce0c5a0b..0000000000 --- a/.changeset/fn-7526-plan-auto-approve.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7527-desktop-switch-server-navigation.md b/.changeset/fn-7527-desktop-switch-server-navigation.md deleted file mode 100644 index 19784749de..0000000000 --- a/.changeset/fn-7527-desktop-switch-server-navigation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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`. diff --git a/.changeset/fn-7528-task-performance-capture.md b/.changeset/fn-7528-task-performance-capture.md deleted file mode 100644 index c460beaa73..0000000000 --- a/.changeset/fn-7528-task-performance-capture.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7531-planner-overseer-state-exposure.md b/.changeset/fn-7531-planner-overseer-state-exposure.md deleted file mode 100644 index e47ffac7bc..0000000000 --- a/.changeset/fn-7531-planner-overseer-state-exposure.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7532-branch-group-completion.md b/.changeset/fn-7532-branch-group-completion.md deleted file mode 100644 index 8b18b6cb39..0000000000 --- a/.changeset/fn-7532-branch-group-completion.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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). diff --git a/.changeset/fn-7534-branch-group-archived-member.md b/.changeset/fn-7534-branch-group-archived-member.md deleted file mode 100644 index d79c918c9d..0000000000 --- a/.changeset/fn-7534-branch-group-archived-member.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7535-global-gitlab-setting-save.md b/.changeset/fn-7535-global-gitlab-setting-save.md deleted file mode 100644 index adf4d7d16c..0000000000 --- a/.changeset/fn-7535-global-gitlab-setting-save.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7536-activity-dropdown-mobile.md b/.changeset/fn-7536-activity-dropdown-mobile.md deleted file mode 100644 index 1fefce406b..0000000000 --- a/.changeset/fn-7536-activity-dropdown-mobile.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7537-backup-automation-manual-run.md b/.changeset/fn-7537-backup-automation-manual-run.md deleted file mode 100644 index d367f5d451..0000000000 --- a/.changeset/fn-7537-backup-automation-manual-run.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7539-oversight-badge-default.md b/.changeset/fn-7539-oversight-badge-default.md deleted file mode 100644 index c9ab7eaf20..0000000000 --- a/.changeset/fn-7539-oversight-badge-default.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7542-remove-overseer-state-badge.md b/.changeset/fn-7542-remove-overseer-state-badge.md deleted file mode 100644 index 3491a6b29d..0000000000 --- a/.changeset/fn-7542-remove-overseer-state-badge.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7543-original-prompt-markdown-collapsed.md b/.changeset/fn-7543-original-prompt-markdown-collapsed.md deleted file mode 100644 index 79284d7736..0000000000 --- a/.changeset/fn-7543-original-prompt-markdown-collapsed.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7544-artifact-cross-instance-live-refresh.md b/.changeset/fn-7544-artifact-cross-instance-live-refresh.md deleted file mode 100644 index f890cc0447..0000000000 --- a/.changeset/fn-7544-artifact-cross-instance-live-refresh.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/fn-7550-terminal-shortcut-scroll.md b/.changeset/fn-7550-terminal-shortcut-scroll.md deleted file mode 100644 index 89119231f1..0000000000 --- a/.changeset/fn-7550-terminal-shortcut-scroll.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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`. diff --git a/.changeset/fn-7551-overseer-timeline-wiring.md b/.changeset/fn-7551-overseer-timeline-wiring.md deleted file mode 100644 index 82d4775708..0000000000 --- a/.changeset/fn-7551-overseer-timeline-wiring.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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]). diff --git a/.changeset/fn-7552-mobile-authentication-global-prefix.md b/.changeset/fn-7552-mobile-authentication-global-prefix.md deleted file mode 100644 index a36edea9cb..0000000000 --- a/.changeset/fn-7552-mobile-authentication-global-prefix.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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). diff --git a/.changeset/fn-7553-keyboard-shortcuts-section.md b/.changeset/fn-7553-keyboard-shortcuts-section.md deleted file mode 100644 index 79259dd4d5..0000000000 --- a/.changeset/fn-7553-keyboard-shortcuts-section.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-7557-plan-auto-approve-default.md b/.changeset/fn-7557-plan-auto-approve-default.md deleted file mode 100644 index f849b72911..0000000000 --- a/.changeset/fn-7557-plan-auto-approve-default.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/fn-coding-ideas-workflow.md b/.changeset/fn-coding-ideas-workflow.md deleted file mode 100644 index 4f8fa8f9e1..0000000000 --- a/.changeset/fn-coding-ideas-workflow.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": minor ---- - -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. diff --git a/.changeset/mission-triage-branch-strategy-and-parked-validation.md b/.changeset/mission-triage-branch-strategy-and-parked-validation.md deleted file mode 100644 index 0966318fa7..0000000000 --- a/.changeset/mission-triage-branch-strategy-and-parked-validation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@runfusion/fusion": patch ---- - -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. diff --git a/.changeset/proud-horses-chat.md b/.changeset/proud-horses-chat.md new file mode 100644 index 0000000000..f27ce913a5 --- /dev/null +++ b/.changeset/proud-horses-chat.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +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. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2451ce510d..a35a0d6532 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,19 +36,19 @@ jobs: include: - os: ubuntu-latest target: bun-linux-x64 - binary: fn-linux-x64 + binary: fn-cli-linux-x64 - os: ubuntu-24.04-arm target: bun-linux-arm64 - binary: fn-linux-arm64 + binary: fn-cli-linux-arm64 - os: macos-latest target: bun-darwin-arm64 - binary: fn-darwin-arm64 + binary: fn-cli-darwin-arm64 # bun-darwin-x64 (Intel) dropped: macos-13 runners are scarce and # blocked releases by sitting queued for hours. The CLI ships # Apple-Silicon-only for macOS; desktop macOS DMG/ZIP is universal. - os: windows-latest target: bun-windows-x64 - binary: fn-windows-x64.exe + binary: fn-cli-windows-x64.exe steps: - name: Checkout diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml index 7edd2ca8fc..33f0ad5fc8 100644 --- a/.github/workflows/test-release.yml +++ b/.github/workflows/test-release.yml @@ -19,18 +19,18 @@ jobs: include: - os: ubuntu-latest target: bun-linux-x64 - binary: fn-linux-x64 + binary: fn-cli-linux-x64 - os: ubuntu-24.04-arm target: bun-linux-arm64 - binary: fn-linux-arm64 + binary: fn-cli-linux-arm64 - os: macos-latest target: bun-darwin-arm64 - binary: fn-darwin-arm64 + binary: fn-cli-darwin-arm64 # bun-darwin-x64 (Intel) dropped: macos-13 runner scarcity — CLI is # Apple-Silicon-only for macOS. Keep in sync with release.yml. - os: windows-latest target: bun-windows-x64 - binary: fn-windows-x64.exe + binary: fn-cli-windows-x64.exe steps: - name: Checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 18882c459c..833a246cfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,60 +2,727 @@ 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.55.0 - -### New - -- Allow configuring permissions for ephemeral and permanent agents. -- Add a Settings override for the local Cursor CLI binary path. -- 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. -- Display linked GitLab tracking metadata and stale badges on tasks. -- 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 sidebar rename buttons to direct Chat conversations. -- 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. -- Collapse mobile Chat thread controls into one compact header row. -- Add a GitLab enable toggle and collapsible Settings controls. +## 0.56.1 ### Fixed -- 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. +- 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. + +## 0.56.0 + +### @fusion/dashboard + +#### Patch Changes + +- @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 + +### @fusion/desktop + +#### Patch Changes + +- @fusion/core@0.56.0 +- @fusion/dashboard@0.56.0 +- @fusion/engine@0.56.0 + +### @fusion/engine + +#### Patch Changes + +- @fusion/core@0.56.0 +- @fusion/pi-claude-cli@0.56.0 + +### @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 + +### @fusion/dashboard + +#### Patch Changes + +- @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 + +### @fusion/desktop + +#### Patch Changes + +- @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 @@ -12122,6 +12789,22 @@ for reference. - Updated dependencies [a2ed6d0] - @runfusion/fusion@0.1.0 +## 0.39.21 + +### @fusion/i18n + +#### Patch Changes + +- @fusion/core@0.56.1 + +## 0.39.20 + +### @fusion/i18n + +#### Patch Changes + +- @fusion/core@0.56.0 + ## 0.39.19 ### @fusion/i18n @@ -12276,6 +12959,22 @@ for reference. - @fusion/core@0.40.0 +## 0.11.47 + +### @fusion/droid-cli + +#### Patch Changes + +- @fusion-plugin-examples/droid-runtime@0.1.47 + +## 0.11.46 + +### @fusion/droid-cli + +#### Patch Changes + +- @fusion-plugin-examples/droid-runtime@0.1.46 + ## 0.11.45 ### @fusion/droid-cli diff --git a/MOBILE.md b/MOBILE.md index ccc13e3f3d..7b4d565ce0 100644 --- a/MOBILE.md +++ b/MOBILE.md @@ -89,6 +89,16 @@ Implementation notes: - Active-profile deletion fallback is shell-owned: deleting the active profile promotes the first remaining profile, and deleting the final profile resets to a clean empty state. - The dashboard consumes this through the shared `window.fusionShell` connection APIs. +### Native Back Handling (Android Back + iOS Edge-Swipe-Back) + +Task-detail dismissal via native "back" (Android hardware Back / predictive-back gesture, +iOS edge-swipe-back, or plain browser swipe-back) converges on a single shared invariant: +the dashboard's `useNavigationHistory` nav-history stack. See `packages/mobile/README.md` +→ "Native Back Handling" for the full Android (`fusion:native-back`) vs. iOS (`popstate`) +routing details and the tracked post-`cap sync` patch scripts (`scripts/ +patch-android-manifest.ts`, `scripts/patch-ios-webview.ts`) that keep each platform's native +gesture delivery enabled across `cap sync` regenerations. + ### Planning Mode Planning Mode opens directly into the composer pane on mobile when no planning sessions exist, avoiding an empty-sidebar dead end. On desktop/tablet the split view is unaffected. Once sessions are saved, mobile shows the session list as usual and the user can navigate between list and detail panes. @@ -186,3 +196,5 @@ Mobile package scripts (`packages/mobile/package.json`): - `dev:ios` - `dev:android` - `build:mobile` +- `patch:ios-webview` — idempotently enables the iOS WKWebView edge-swipe-back gesture in the generated `ios/App/App/AppDelegate.swift` (safe no-op if `ios/` doesn't exist yet) +- `capacitor:sync:after` — Capacitor's own post-`cap sync` hook; currently runs the iOS webview patch so `cap sync` regeneration can't silently drop the gesture opt-in diff --git a/README.md b/README.md index 7092cce277..b75e16bd9c 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,7 @@ Every task shows its plan, its reviews, its diffs, and its file changes in real |---|---| | 🧠 **AI planning** | Describe a task in plain language. Planning agents turn it into a `PROMPT.md` plan with steps, file scope, and acceptance criteria. | | 🔁 **Selectable workflows** | Built-ins cover coding, quick fixes, review-heavy work, stepwise execution, plugin-gated Compound Engineering, and PR lifecycle fragments. Pick a workflow per task or author custom ones in the [Workflow Editor](./docs/workflow-editor.md). | +| 🛡️ **Planner oversight** | Per-task or per-workflow oversight level (`off` / `observe` / `steer` / `autonomous`) governs how closely a planner overseer watches and intervenes — merge/PR and destructive actions always require explicit human confirmation. See [Settings Reference](./docs/settings-reference.md#workflow-settings) and [Dashboard Guide](./docs/dashboard-guide.md). | | 🌳 **Worktree isolation** | Each task runs in its own branch and worktree (`fusion/{task-id}`). Parallel tasks. Zero conflicts. Optional [worktrunk](https://github.com/max-sixty/worktrunk) delegation via [`worktrunk.enabled`](./docs/settings-reference.md#worktree-backend-settings) (see [WorktreeBackend abstraction](./docs/architecture.md#worktreebackend-abstraction)). | | ⚡ **Smart merge controls** | Passing every gate? Fusion squash-merges and moves on. Opt into manual approval anywhere, inherit the live global auto-merge default, or set explicit per-task auto/manual overrides. | | 🛰️ **Multi-node mesh** | Laptop, Mac mini, Linux server, cloud VM, phone — all synced. Desktop, mobile, web. | @@ -385,6 +386,15 @@ Fusion workflows define how a task moves from idea to delivery. The default codi Read [Workflow Steps](./docs/workflow-steps.md) for runtime semantics, built-in workflow behavior, and workflow-step templates; read [Workflow Editor](./docs/workflow-editor.md) for the dashboard authoring guide. + + +### Planner oversight + +Each workflow (and optionally each task) can set a **planner oversight** level — `off`, `observe`, `steer`, or `autonomous` (default) — controlling how closely a planner overseer watches and intervenes in that task's execution. Even at `autonomous`, merge/PR progression and any destructive or external-service side effect always require an explicit, recorded human confirmation before they run. Notification verbosity is controlled separately. Set the default in the **Workflow Editor → Values** tab, or override per task from the New Task dialog / Task Detail edit form. Read [Settings Reference](./docs/settings-reference.md#workflow-settings) for the full setting semantics and [Dashboard Guide](./docs/dashboard-guide.md) for the UI controls. + --- ## Multi-node. One board. Every platform. @@ -504,6 +514,7 @@ npx companies.sh add paperclipai/companies/gstack - **Visual Workflow Editor** — Inspect read-only built-ins, duplicate/customize workflows, and edit graph nodes, columns, task fields, typed settings, and per-project values ([Workflow Editor](./docs/workflow-editor.md)) - **Workflow Steps** — Configurable quality gates (pre-merge: blocks merge; post-merge: informational), plus workflow-declared optional steps such as opt-in [Browser Verification](./docs/workflow-steps.md#workflow-declared-optional-steps) - **Workflow-native policy** — Fast-mode planning (`leanPlanning` / `autoApproveSpec`), typed triage thresholds, review/approval, step execution, and model/fallback lanes are workflow settings, not hard-coded engine constants ([Settings Reference](./docs/settings-reference.md#workflow-native-triage-policy-settings); [workflow settings](./docs/settings-reference.md#workflow-settings)) +- **Planner oversight** — Workflow-native `plannerOversightLevel` (`off`/`observe`/`steer`/`autonomous`), with an optional per-task override and a separate notification-verbosity setting; merge/PR progression and destructive actions always require explicit human confirmation, even at `autonomous` ([overview](#planner-oversight); [Settings Reference](./docs/settings-reference.md#workflow-settings)) - **GitHub + PR lifecycle** — Import issues, create PRs, display real-time PR/issue badges, and use workflow-mode PR lifecycle graph fragments where enabled - **Dashboard** — Real-time kanban/list/graph views, agent management, terminal, git manager, mission planner, chat, workflow editor, custom provider setup, and one-click update action - **Missions** — Hierarchical planning (Mission → Milestone → Slice → Feature → Task) with autopilot, validation contracts, fix-feature retries, mission-goal linking, and blocked-handoff semantics diff --git a/docs/README.md b/docs/README.md index 9b0c003a59..28d5bfba19 100644 --- a/docs/README.md +++ b/docs/README.md @@ -43,11 +43,14 @@ For a full walkthrough (installation, onboarding, first task, and daily workflow | [Multi-Project](./multi-project.md) | Central registry architecture, project management, isolation modes, and migration paths | ### Configuration & Agents -| Guide | Description | -|---|---| + | [Settings Reference](./settings-reference.md) | Global/project settings, workflow setting values, model/fallback lane hierarchy, defaults, and API endpoints | | [MCP](./mcp.md) | Model Context Protocol server configuration, secret references, validation, CLI, dashboard, and import/export workflows | | [Agents](./agents.md) | Agent management, presets, prompts, heartbeat behavior, spawning, and mailbox workflows | +| Planner Oversight (see [Settings Reference](./settings-reference.md#workflow-settings), [Dashboard Guide](./dashboard-guide.md), [Architecture](./architecture.md)) | Workflow-native oversight levels (`off`/`observe`/`steer`/`autonomous`), per-task overrides, notification verbosity, the human-confirmation gate on merge/PR and destructive actions, and the Task Detail overseer controls/Intervention Timeline | ### Architecture & Development | Guide | Description | @@ -151,5 +154,5 @@ FN-7088 links previously-unlinked first-class testing and baseline docs here so - **New user:** Getting Started → Dashboard Guide → Task Management - **Workflow author:** Dashboard Guide → Workflow Editor → Workflow Steps → Settings Reference -- **Power user / automation owner:** Settings Reference → Workflow Steps → Agents +- **Power user / automation owner:** Settings Reference → Workflow Steps → Agents → Planner Oversight (Settings Reference § Workflow Settings) - **Maintainer / contributor:** Architecture → Multi-Project → Contributing diff --git a/docs/dashboard-guide.md b/docs/dashboard-guide.md index f0b36d9e02..7cd3333754 100644 --- a/docs/dashboard-guide.md +++ b/docs/dashboard-guide.md @@ -196,14 +196,18 @@ Features: - Task cards show a read-only **oversight-level badge** (`Observe`, `Steer`, or `Auto-recovery`) in the meta-badges cluster reflecting the effective planner-oversight level, but only when oversight is *meaningfully configured* — an explicit per-task override (including an explicit `autonomous` override), or a resolved workflow/effective tier of `observe`/`steer` (`data-testid="card-oversight-badge"`). A card that merely **inherits** the schema default `autonomous` tier (no per-task override, no non-default workflow tier) renders no badge and no empty `.card-meta-badges` shell. The badge is also absent when the effective level is explicitly "off", **and** while an inherited (no per-task-override) workflow tier is still being resolved (in flight or not yet fetched) — it never shows a guessed default during that window. - -- The task detail modal's inline meta-controls cluster (next to Priority/Execution mode) adds four planner-overseer controls: a **quick oversight-level select** (`data-testid="detail-oversight-level-select"`) that writes the per-task `plannerOversightLevel` override (Off/Observe/Steer/Autonomous recovery) or clears it back to the inherited workflow/project default via an "Inherit" option; a **manual nudge** button (`data-testid="detail-overseer-nudge"`) that asks the overseer to inject one guidance-only steering comment into the currently watched stage right now (never a merge/PR/destructive action), disabled when the overseer is off/inactive or the task is user-paused/done/archived/`autoMerge:false` in-review; a **stop oversight** button (`data-testid="detail-overseer-stop"`) that disables active oversight for the task (confirmation-gated), hidden once oversight is already off; and an **explain current action** button (`data-testid="detail-overseer-explain"`) that toggles a small read-only panel (`data-testid="detail-overseer-explain-panel"`) showing the overseer's watched stage, reason, last action, and attempt count/limit, with a non-empty-shell inactive state when the overseer is not currently watching. All three action controls call the `POST /tasks/:id/overseer/nudge`, `POST /tasks/:id/overseer/stop`, and `GET /tasks/:id/overseer/explain` routes. + +- The task detail modal's inline meta-controls cluster (next to Priority/Execution mode) exposes planner-overseer controls behind a single compact **"Oversight" overflow-menu button** (`data-testid="detail-oversight-menu-trigger"`, `MoreVertical` icon, `aria-haspopup="menu"`) on every viewport, desktop and mobile alike. Clicking the trigger opens a `role="menu"` popover (mirroring the existing move-action dropdown pattern) containing: a **quick oversight-level select** (`data-testid="detail-oversight-level-select"`) that writes the per-task `plannerOversightLevel` override (Off/Observe/Steer/Autonomous recovery) or clears it back to the inherited workflow/project default via an "Inherit" option; a **manual nudge** button (`data-testid="detail-overseer-nudge"`) that asks the overseer to inject one guidance-only steering comment into the currently watched stage right now (never a merge/PR/destructive action), disabled when the overseer is off/inactive or the task is user-paused/done/archived/`autoMerge:false` in-review; a **stop oversight** button (`data-testid="detail-overseer-stop"`) that disables active oversight for the task (confirmation-gated), hidden once oversight is already off; and an **explain current action** button (`data-testid="detail-overseer-explain"`) that toggles a small read-only panel (`data-testid="detail-overseer-explain-panel"`) showing the overseer's watched stage, reason, last action, and attempt count/limit, with a non-empty-shell inactive state when the overseer is not currently watching. All three action controls call the `POST /tasks/:id/overseer/nudge`, `POST /tasks/:id/overseer/stop`, and `GET /tasks/:id/overseer/explain` routes. The trigger itself is withheld entirely when none of the menu's controls would render (no empty-shell overflow button for the unresolved-default case). -- The FN-7517 controls above carry a visible, non-interactive **`"Overseer controls"` group label** (`data-testid="detail-oversight-controls-label"`) so Nudge/Stop/Explain read as an identifiable cluster rather than unlabeled chips; the label is gated by the same `(hasTaskOversightOverride || workflowOversightResolved) && !oversightIsOff` condition as the buttons, so it never renders an empty shell when oversight is Off/unresolved. When **Nudge** is disabled, an always-visible helper line (`data-testid="detail-overseer-nudge-disabled-reason"`) states the reason in-DOM (mirroring the existing hover `title`) instead of relying on a mouse-hover tooltip alone. **Explain** is read-only and non-mutating, so it is never disabled purely because the overseer is inactive — clicking it always opens/closes the panel, which shows the overseer's live state when watching or an informative "not currently watching this task" message otherwise. Nudge's mutating enablement rule (`canNudgeOverseer`, including the human-control suppression cases) and Stop's confirmation dialog are unchanged. - -- On mobile (viewport ≤ 768px), the level-select/nudge/stop/explain controls above collapse behind a single compact **"Oversight" overflow-menu button** (`data-testid="detail-oversight-menu-trigger"`, `MoreVertical` icon, `aria-haspopup="menu"`) that opens a `role="menu"` popover (mirroring the existing move-action dropdown pattern) listing the same controls as full-width, comfortably tappable `role="menuitem"` entries with the SAME testids and enablement/visibility rules as the desktop inline controls. The trigger itself is withheld entirely when none of those controls would render (no empty-shell overflow button for the oversight-off + overseer-inactive default). Desktop (>768px) keeps the inline cluster unchanged. - -- Below the quick oversight controls, the task detail modal renders an **Intervention Timeline** (`data-testid="planner-intervention-timeline"`) listing every recorded planner-overseer intervention for the task, newest-first: watched stage, reason, action taken, outcome (with a `.status-dot` indicator using semantic outcome tokens), an attempt count/limit badge (only when both are present), and source links (agent log / review comment / failed check / merge error / PR state / generic URL). It renders a calm "No planner interventions yet" empty state rather than an empty shell when there are none, and is hidden entirely (no leftover container) when oversight is off or unresolved for the task. Entries are read via `GET /tasks/:id/overseer/interventions`, which assembles them from the existing run-audit store under the `overseer:intervention` mutation type (`recordPlannerIntervention`/`getPlannerInterventionTimeline` in `@fusion/core`). This is a pure read surface — FN-7520 wires the actual intervention-producing call-sites. +- The controls inside the Oversight menu carry a visible, non-interactive **`"Overseer controls"` group label** (`data-testid="detail-oversight-controls-label"`) so Nudge/Stop/Explain read as an identifiable cluster rather than unlabeled entries; the label is gated by the same `(hasTaskOversightOverride || workflowOversightResolved) && !oversightIsOff` condition as the buttons, so it never renders when oversight is Off/unresolved (opening the menu in that state shows only the level select). When **Nudge** is disabled, an always-visible helper line (`data-testid="detail-overseer-nudge-disabled-reason"`) states the reason in-DOM (mirroring the existing hover `title`) instead of relying on a mouse-hover tooltip alone. **Explain** is read-only and non-mutating, so it is never disabled purely because the overseer is inactive — clicking it always opens/closes the panel, which shows the overseer's live state when watching or an informative "not currently watching this task" message otherwise. Nudge's mutating enablement rule (`canNudgeOverseer`, including the human-control suppression cases) and Stop's confirmation dialog are unchanged. + +- The Oversight overflow-menu trigger and its popover render identically at every viewport (desktop and mobile): the same testids, the same enablement/visibility rules, and the same `role="menu"`/`role="menuitem"` popover semantics. Menu-open auto-focus lands on the first actionable button menuitem, never the native level `; focusing the { - void handleOversightLevelChange(event.target.value); - }} - disabled={isSavingOversightLevel} - aria-label={t("taskDetail.oversight.ariaLabel", "Planner oversight level")} - > - - {PLANNER_OVERSIGHT_LEVELS.map((levelOption) => ( - - ))} - - - )} - {/* - FNXC:PlannerOversight 2026-07-04-17:00: - FN-7517 manual nudge / stop oversight / explain current action - controls. Disabled (with an accessible aria-label reason) rather - than hidden for nudge/explain when the overseer is off/inactive - so operators understand WHY the control is inert instead of it - silently vanishing; stop is hidden once oversight is already off - (nothing left to stop) per the PROMPT's enablement rule, avoiding - an always-on empty shell for the common oversight-off default. - - FNXC:PlannerOversight 2026-07-04-20:30: - FN-7546 — operators reported these controls were confusing: - unlabeled inline chips, greyed out most of the time, with the - only "why" behind a mouse-hover `title`. Add a visible, - non-interactive `detail-oversight-controls-label` group label - (gated by the SAME condition as the buttons) so the cluster is - identifiable, and a `detail-overseer-nudge-disabled-reason` - helper line that surfaces the disabled reason in-DOM (not just - on hover) whenever Nudge is unavailable. Explain is read-only - and non-mutating, so its disabled gate is removed entirely - (see handleExplainOverseer below) — it always opens its panel, - which already renders an informative "not currently watching" - empty state. Nudge's mutating gate (`canNudgeOverseer`) and - Stop's confirm dialog are unchanged. - */} - {(hasTaskOversightOverride || workflowOversightResolved) && !oversightIsOff && ( - - {t("taskDetail.oversight.controlsLabel", "Overseer controls")} - - )} - {(hasTaskOversightOverride || workflowOversightResolved) && !oversightIsOff && ( - - )} - {(hasTaskOversightOverride || workflowOversightResolved) && !oversightIsOff && !canNudgeOverseer && ( - - {t("taskDetail.oversight.nudgeDisabledTitle", "Nudge unavailable: overseer is not actively watching this task")} - - )} - {(hasTaskOversightOverride || workflowOversightResolved) && showStopOverseer && ( - - )} - {(hasTaskOversightOverride || workflowOversightResolved) && !oversightIsOff && ( - - )} - - )} + )} {overseerExplainOpen && (
@@ -4085,21 +4127,6 @@ export function TaskDetailContent({ )}
)} - {/* - FNXC:PlannerOversight 2026-07-04-18:00: - FN-7519 Intervention Timeline: rendered adjacent to the FN-7517 - oversight cluster (no separate `.task-oversight-controls` class - exists in the merged FN-7517 code, so this attaches to the - closest existing seam — the same gating condition used by the - nudge/stop/explain controls above). Hidden entirely (no - leftover empty shell) when oversight is Off or unresolved, per - the Surface Enumeration gate. - */} -