gsxdsm
2a9ae0aca3
FN-9109: add resilient cross-runtime Cursor fallback
...
Route eligible CLI fallback failures into one bounded, auditable Cursor runtime handoff.
- defer cursor-cli fallback selection until a retryable primary prompt failure
- serialize concurrent swaps, retry the primary after failed handoffs, and dispose replacements safely
- transfer text-only conversation context within strict turn and total character limits
- document routing behavior and cover provider, runtime, concurrency, and failure cases
Files changed:
.../fn-9109-cross-runtime-cursor-fallback.md | 7 +
AGENTS.md | 2 +
docs/cursor-cli-contract.md | 8 +
.../src/__tests__/cli-provider-routing.test.ts | 18 +-
.../cli-runtime-routing-conformance.test.ts | 64 ++++-
.../src/__tests__/cross-runtime-fallback.test.ts | 146 +++++++++++
.../engine/src/agents/agent-session-helpers.ts | 211 ++++++----------
packages/engine/src/agents/cli-provider-routing.ts | 4 +-
.../engine/src/agents/cross-runtime-fallback.ts | 277 +++++++++++++++++++++
packages/engine/src/util/run-audit.ts | 8 +
10 files changed, 602 insertions(+), 143 deletions(-)
Fusion-Task-Id: FN-9109
Fusion-Task-Lineage: 30664371-8410-4d6f-a263-cc86c8e0dc72
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 19:10:55 -07:00
gsxdsm
66bbeaa28d
FN-9108: Restore routed workflow-principal session identity
...
Restore routed principal attribution throughout workflow prompt and review sessions.
- Thread the graph-selected principal into workflow-step execution.
- Resolve principal runtime configuration, skills, telemetry, and session attribution consistently.
- Fail closed when the routed principal is unavailable and add regression coverage.
- Add a patch changeset for the restored behavior.
Files changed:
.../fn-9108-workflow-principal-session-identity.md | 7 +
.../executor-workflow-step-principal.test.ts | 154 +++++++++++++++++++++
.../engine/src/executor/execute-workflow-step.ts | 34 ++++-
.../engine/src/executor/run-graph-custom-node.ts | 11 +-
4 files changed, 198 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-9108
Fusion-Task-Lineage: ec668551-8ff4-4ced-8c7f-a4aa04eb044f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 17:45:32 -07:00
Phil Larson
81b1860f95
fix(ci): correct future FNXC stamps ( #3440 )
...
## Summary
- replaces newly added future-dated FNXC metadata with the actual UTC
change time
- tightens the FNXC future-date baseline to zero known exceptions
## Test plan
- `pnpm check:fnxc-future-dates`
- `pnpm check:lifecycle-columns`
- `pnpm check:changesets`
- `pnpm --filter @runfusion/fusion exec vitest run
src/__tests__/staged-plugin-core-imports.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm lint`
2026-08-15 17:16:05 -07:00
gsxdsm
802a4249fb
FN-9106: Route non-continuable step sessions through retry recovery
...
Recover poisoned step-session transcripts before the generic failure sink can retain them.
- Apply bounded fresh-session recovery to incomplete step-session execution failures.
- Preserve completed-work handling ahead of retry classification.
- Add regression coverage and production-shaped executor fixtures.
- Document the published patch behavior in a changeset.
Files changed:
.changeset/fn-9106-non-continuable-step-session.md | 7 ++++
.../post-done-continuation-no-wedge.test.ts | 48 +++++++++++++++++++++-
packages/engine/src/executor/run-implementation.ts | 11 +++++
3 files changed, 65 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-9106
Fusion-Task-Lineage: 537ea415-96dd-4b66-ab5d-84dc4603388b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 17:13:20 -07:00
gsxdsm
43a42d8b7b
FN-9107: preserve mission completion triggers after reconciliation failures
...
Keep scheduler mission completion handling active when best-effort reconciliation fails.
- isolate pre- and post-resolution reconciliation failures without suppressing mission execution
- cover custom completion columns, failed in-place updates, fallback behavior, and slice guards
- document the resilience contract and add a patch changeset
Files changed:
.changeset/fn-9107-mission-trigger.md | 7 +
docs/missions.md | 2 +-
.../mission-validation-trigger-gap.test.ts | 40 ++++--
.../scheduler-mission-move-trigger.test.ts | 153 +++++++++++++++++++++
packages/engine/src/scheduler.ts | 20 ++-
5 files changed, 203 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-9107
Fusion-Task-Lineage: a492d0c0-79ca-4dba-a7bc-c8fa54415f28
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 17:06:39 -07:00
gsxdsm
5e5b0dbb8f
FN-9098: bridge scoped Fusion tools into Cursor
...
Publish engine-owned Fusion tools to Cursor through a crash-safe, worktree-scoped MCP bridge.
- preserve operator MCP configuration with locking, journaling, quarantine, and lease reconciliation
- enforce identity-scoped fn_* provenance so injected custom and MCP tools are never exposed
- secure loopback dispatch with per-session tokens, heartbeats, cleanup, and normalized tool events
- document the Cursor contract and cover bridge lifecycle, config hygiene, and failure handling
Files changed:
.changeset/fn-9098-cursor-mcp-bridge.md | 7 +
docs/cursor-cli-contract.md | 140 ++-------------
docs/mcp.md | 4 +
.../src/__tests__/agent-session-helpers.test.ts | 24 +++
.../src/__tests__/step-session-executor.test.ts | 16 ++
.../src/__tests__/web-fetch-universal.test.ts | 4 +-
packages/engine/src/agent-heartbeat.ts | 3 +-
packages/engine/src/agents/agent-runtime.ts | 9 +
.../engine/src/agents/agent-session-helpers.ts | 26 +--
packages/engine/src/execution/reviewer.ts | 1 +
.../engine/src/execution/step-session-executor.ts | 31 ++--
.../engine/src/executor/execute-workflow-step.ts | 4 +-
packages/engine/src/merger.ts | 4 +-
plugins/fusion-plugin-cursor-runtime/README.md | 18 +-
plugins/fusion-plugin-cursor-runtime/package.json | 2 +-
.../src/__tests__/cursor-mcp-config.test.ts | 100 +++++++++++
.../cursor-mcp-server-failure.stream.jsonl | 3 +
.../fixtures/cursor-mcp-tool-call.stream.jsonl | 4 +
.../src/__tests__/runtime-adapter.test.ts | 57 +++++-
.../src/__tests__/worktree-hygiene.test.ts | 52 ++++++
.../src/cursor-mcp-config.ts | 196 +++++++++++++++++++++
.../src/mcp-schema-server.cjs | 155 ++++++++++++++++
.../src/prompt-transport.ts | 4 +-
.../src/runtime-adapter.ts | 67 +++++--
.../src/tool-bridge.ts | 48 +++++
.../src/tool-mapping.ts | 11 ++
plugins/fusion-plugin-cursor-runtime/src/types.ts | 6 +-
.../src/worktree-hygiene.ts | 117 ++++++++++++
28 files changed, 934 insertions(+), 179 deletions(-)
Fusion-Task-Id: FN-9098
Fusion-Task-Lineage: 11b6cb10-ce0e-4f33-9007-c83f2bbf82ea
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 16:51:54 -07:00
gsxdsm
56a087dac9
fix(engine): restore shipped behaviors dropped by the wave-18 executor peel
...
Full-suite repair, engine harness cluster (~85 red suites). Two causes:
(1) graph dispatch now fails closed without options.agentStore
(FN-8764/FN-8821, intended) — the shared executor test harness now
provisions the workflow-routing agent-store fixture for bare
TaskExecutor constructions, with explicit opt-out for the two tests
asserting the fail-closed park; (2) the wave-18 'pure peel' (#3317 )
rebuilt executor.ts from a stale base and silently deleted shipped
behaviors, restored here: FN-8864 agent-activity writers (task
started/handed-off, workflow gate pass/fail, gate principal attribution
via executor/workflow-gate-activity.ts), FN-8768 Plan Review group
recognition, convergence primer, and modified-file review scoping,
FN-6782's fire-time guard on transient resume-after-restart retries,
FN-8868 session usage telemetry boundaries, recommendation-route
withheld-tool guidance, and the per-instance worktree retry cap.
Stale expectations updated for intended changes (FN-8823 shared-member
hold, FN-9060 zero-acquire fail-closed, heartbeat tool inventory,
peeled-module seams, PG harness provisioning). Verified: 23 files /
711 tests green, engine typecheck clean, merge gate green.
Known follow-ups (not addressed here): step-session error routing may
still bypass FN-5866 non-continuable classification
(post-done-continuation-no-wedge red), scheduler mission-loop trigger
gap (mission-validation-trigger-gap red), and executeWorkflowStep lost
routed workflow-principal session identity threading (untested drop
from the same peel).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:52:52 -07:00
gsxdsm
374ae08d56
test(engine): repoint source-scan contracts to the peeled module layout
...
Full-suite repair, engine source-scan cluster. The package code
organization waves moved ~30 engine modules into subdirectories
(plugins/, execution/, scheduling/, healing/, worktree/, executor/
peels); the log-severity manifest, prompt carve-out, emit-surface,
failure-lane, and worktree-invariant scanners now read the moved
locations, verified per file via git log --follow. Two scans caught
real drift rather than moves: the lifecycle census had 12 unexamined
column guards (resolved with DELIBERATE-LITERAL markers for the mailbox
archived tab, the FN-9059 lease-owner terminality check, and the FN-9056
legacy done fallback — baseline re-recorded with zero absorbed debt),
and planning-claim gained a genuine second writer in self-healing's
FN-8998 transport-failure recovery, admitted to the allowlist with its
CAS-guarded justification. 9 files / 119 tests green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:31:58 -07:00
gsxdsm
6a2de64381
fix: normalize Anthropic storage ids at the ModelRuntime.login choke point
...
Third incident of the same class (#1857/FN-7391, FN-9101, GitHub #3462 ):
Fusion's Anthropic auth-card/storage ids (anthropic-subscription,
anthropic-api-key) leaking into pi, which only registers the execution
provider 'anthropic'. FusionAuthStorage.login is the single seam that hands
a provider id to ModelRuntime.login; it now normalizes via
toExecutionModelProviderId so a future caller bug degrades to a correct
upstream anthropic login instead of a hard 'Unknown provider' failure, with
a regression test pinning the seam. The invariant, incident history, and
guard inventory are captured in
docs/solutions/integration-issues/anthropic-storage-ids-are-never-pi-provider-ids.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 14:52:38 -07:00
gsxdsm
7fa5029ef8
fix: route Anthropic subscription instance login through upstream anthropic provider
...
The Authentication cards pass an explicit credential-instance id, which sent
dashboard subscription logins through loginInstance. That seam mapped the card
to the anthropic-subscription storage row id and passed it verbatim to
ModelRuntime.login, which pi rejects with 'Unknown provider:
anthropic-subscription' (GitHub #3462 ) — every subscription login failed while
the credential path itself was healthy. loginInstance now reuses the
Anthropic-aware login seam (upstream login as 'anthropic', credential relocated
to the anthropic-subscription row) with a regression test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 14:48:07 -07:00
gsxdsm
6401fdea89
FN-9101: normalize Anthropic auth provider selections
...
Route Anthropic subscription and API-key auth selections through the built-in execution provider.
- Add a shared provider-ID normalization helper and export it from core.
- Normalize persisted model selections during session creation and registry lookup.
- Hide credential-only Anthropic provider rows from the dashboard model catalog.
- Add regression coverage and a patch changeset for subscription-backed execution.
Files changed:
...9101-anthropic-subscription-model-resolution.md | 7 ++++
.../__tests__/anthropic-execution-provider.test.ts | 18 ++++++++
packages/core/src/ai/anthropic-models.ts | 13 ++++++
packages/core/src/index.gate.ts | 2 +
packages/core/src/index.ts | 2 +
.../dashboard/src/__tests__/routes-auth.test.ts | 2 +
.../dashboard/src/routes/register-model-routes.ts | 14 ++++---
...-session-helpers-anthropic-subscription.test.ts | 49 ++++++++++++++++++++++
.../src/__tests__/pi-create-fn-agent.test.ts | 25 +++++++++++
.../engine/src/agents/agent-session-helpers.ts | 26 ++++++++----
packages/engine/src/pi.ts | 14 +++++--
11 files changed, 154 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-9101
Fusion-Task-Lineage: 72e70e67-b291-44fc-ba3f-12b54d06eba9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 14:19:23 -07:00
gsxdsm
b6efd89ae5
FN-9097: add Cursor CLI execution runtime
...
Add a supervised Cursor CLI runtime for routed Cursor model sessions.
- Stream Cursor prompt output into Fusion session callbacks with resume support.
- Support Windows Cursor shims, inactivity-based supervision, and cursor-agent to cursor fallback execution.
- Route Cursor CLI models through the bundled plugin and document the runtime contract.
Files changed:
.changeset/fn-9097-cursor-cli-runtime.md | 7 ++
docs/cursor-cli-contract.md | 21 ++++
docs/settings-reference.md | 4 +-
.../cli-runtime-routing-conformance.test.ts | 11 +-
.../engine/src/agents/agent-session-helpers.ts | 6 +-
packages/engine/src/agents/cli-provider-routing.ts | 27 ++---
plugins/fusion-plugin-cursor-runtime/README.md | 21 ++++
plugins/fusion-plugin-cursor-runtime/package.json | 1 +
.../src/__tests__/cli-spawn.test.ts | 25 ++++-
.../src/__tests__/prompt-transport.test.ts | 58 ++++++++++
.../src/__tests__/runtime-adapter.test.ts | 44 +++++---
.../src/__tests__/stream-parser.test.ts | 12 +++
.../fusion-plugin-cursor-runtime/src/cli-spawn.ts | 57 +++++++++-
plugins/fusion-plugin-cursor-runtime/src/index.ts | 4 +-
.../src/prompt-transport.ts | 120 +++++++++++++++++++++
.../src/runtime-adapter.ts | 59 ++++++----
.../src/stream-parser.ts | 43 ++++++++
plugins/fusion-plugin-cursor-runtime/src/types.ts | 18 ++--
pnpm-lock.yaml | 3 +
19 files changed, 458 insertions(+), 83 deletions(-)
Fusion-Task-Id: FN-9097
Fusion-Task-Lineage: a4eed861-6059-4528-9f80-3426f5ccad58
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 08:51:35 -07:00
gsxdsm
1d3f6c198c
FN-9096: route CLI models through installed runtimes
...
Route every CLI-provider selection through an explicit installed-runtime policy.
- Centralize CLI provider classifications, runtime hints, fallback behavior, and actionable missing-runtime errors.
- Validate routing coverage statically and add conformance and integration tests for CLI runtime paths.
- Document runtime routing behavior and add a published CLI changeset.
Files changed: .changeset/fn-9096-cli-runtime-routing.md | 7 +
docs/settings-reference.md | 29 +++
docs/testing.md | 6 +-
package.json | 6 +-
.../src/__tests__/cli-provider-routing.test.ts | 74 ++++++++
.../__tests__/cli-runtime-routing-check.test.ts | 25 +++
.../cli-runtime-routing-conformance.test.ts | 210 +++++++++++++++++++++
.../__tests__/hermes-runtime-integration.test.ts | 28 +++
.../engine/src/agents/agent-session-helpers.ts | 166 ++++------------
packages/engine/src/agents/cli-provider-routing.ts | 174 +++++++++++++++++
scripts/check-cli-runtime-routing.mjs | 26 +++
scripts/lib/cli-runtime-routing-check.mjs | 84 +++++++++
12 files changed, 701 insertions(+), 134 deletions(-)
Fusion-Task-Id: FN-9096
Fusion-Task-Lineage: f9f6a434-b28d-4ebb-816a-53ca75efc2c4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 07:19:29 -07:00
gsxdsm
8d8ea26cb2
FN-9094: omit unsupported Grok auto-update flag
...
Align Grok ACP expectations with the released CLI contract.
- Update runtime routing and adapter assertions to omit --no-auto-update by default.
- Cover explicit false and default argument behavior in ACP settings tests.
- Document the released CLI incompatibility and opt-in escape hatch.
Files changed:
docs/grok-cli-contract.md | 7 ++++---
packages/engine/src/__tests__/grok-runtime-routing.test.ts | 14 +++++++++-----
.../src/__tests__/acp-settings.test.ts | 2 ++
.../src/__tests__/runtime-adapter.test.ts | 14 ++++++++++----
4 files changed, 25 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-9094
Fusion-Task-Lineage: f776e401-8473-45b2-a8b2-8d8251b4713e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 05:58:36 -07:00
gsxdsm
9fa8b386ee
FN-9059: add durable workspace coordination leases
...
Prevent overlapping multi-node workspace operations and duplicate repository landings.
- Add durable coordination leases, fence tokens, and land-intent persistence.
- Fence workspace merge dispatches and repository publication across engine nodes.
- Reconcile expired coordination state safely and cover lease lifecycle behavior.
Files changed:
.../fn-9059-workspace-durable-coordination.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
docs/multi-project.md | 48 ++++
.../workspace-coordination-leases.pg.test.ts | 56 ++++
.../__tests__/postgres/workspace-leases.pg.test.ts | 112 ++++++++
packages/core/src/engine-node-identity.ts | 22 ++
packages/core/src/index.ts | 3 +
.../0060_fn_9059_workspace_coordination_leases.sql | 10 +
packages/core/src/postgres/schema-applier.ts | 13 +-
packages/core/src/postgres/schema/project.ts | 31 ++
packages/core/src/store.ts | 18 ++
packages/core/src/task-store/workspace-leases.ts | 261 +++++++++++++++++
packages/core/src/tasks/workspace-lease-types.ts | 24 ++
.../engine/src/__tests__/project-engine.test.ts | 69 ++++-
.../src/__tests__/self-healing-workspace.test.ts | 63 ++++-
.../workspace-durable-coordination.test.ts | 49 ++++
.../src/__tests__/workspace-merger-lease.test.ts | 312 ++++++++++++++++++++-
packages/engine/src/merge/merger-ai.ts | 277 ++++++++++++++++--
packages/engine/src/merge/workspace-fence-ref.ts | 171 +++++++++++
packages/engine/src/project-engine.ts | 175 ++++++++++--
packages/engine/src/runtimes/in-process-runtime.ts | 4 +-
packages/engine/src/self-healing.ts | 191 ++++++++++++-
packages/engine/src/util/run-audit.ts | 2 +
.../engine/src/worktree/worktree-acquisition.ts | 43 ++-
25 files changed, 1901 insertions(+), 63 deletions(-)
Fusion-Task-Id: FN-9059
Fusion-Task-Lineage: e51e3f54-69ee-4337-a218-4895d87474aa
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 03:22:13 -07:00
gsxdsm
2f99a8fb59
FN-9052: add atomic workspace worktree entry merges
...
Serialize per-repository workspace worktree state updates across concurrent Fusion processes.
- Add advisory-locked store-level per-entry workspace worktree merges.
- Route acquisition, landing, failure, and recovery updates through atomic merges.
- Cover concurrent sibling repository writes and document the invariant.
Files changed:
.../fn-9052-workspace-worktree-atomic-merge.md | 7 ++
docs/architecture.md | 1 +
...workspace-worktrees-concurrent-merge.pg.test.ts | 90 ++++++++++++++++++++++
packages/core/src/store.ts | 10 ++-
packages/core/src/task-store/task-mutation-ops.ts | 52 ++++++++++++-
packages/core/src/types.ts | 2 +
packages/core/src/types/task/task-core.ts | 17 +++-
.../merge-orphan-body-durable-writes.test.ts | 8 ++
.../src/__tests__/self-healing-workspace.test.ts | 49 +++++++++---
.../src/__tests__/workspace-merger-lease.test.ts | 12 +++
.../engine/src/__tests__/workspace-merger.test.ts | 12 +--
.../worktree-acquisition-workspace.test.ts | 82 +++++++++++++++++++-
packages/engine/src/merge/merger-ai.ts | 21 ++---
.../engine/src/merge/workspace-land-failure.ts | 19 +++--
packages/engine/src/self-healing.ts | 15 +++-
.../engine/src/worktree/worktree-acquisition.ts | 25 +++---
16 files changed, 370 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-9052
Fusion-Task-Lineage: 2168085a-74a7-4a0f-954e-50db99eb98b7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 01:14:43 -07:00
gsxdsm
7bb7d450e6
FN-9062: surface workspace repository land status
...
Expose per-repository workspace landing progress and failures in Task Detail.
- Persist display-only repository land failure breadcrumbs during merge and recovery
- Render landed, pending, and failed repository statuses with partial-land detail
- Document the workspace status behavior and add coverage for UI and recovery paths
Files changed:
.changeset/fn-9062-workspace-land-status.md | 7 ++
docs/dashboard-guide.md | 4 +
packages/core/src/types/task/task-core.ts | 11 ++-
.../dashboard/app/components/TaskDetailModal.css | 33 +++++++
.../app/components/WorkspaceWorktreesSummary.tsx | 106 ++++++++-------------
.../__tests__/WorkspaceWorktreesSummary.test.tsx | 46 ++++++++-
.../src/__tests__/self-healing-workspace.test.ts | 19 ++++
.../engine/src/__tests__/workspace-merger.test.ts | 6 ++
packages/engine/src/merge/merger-ai.ts | 7 +-
.../engine/src/merge/workspace-land-failure.ts | 21 ++++
packages/engine/src/self-healing.ts | 16 ++++
11 files changed, 208 insertions(+), 68 deletions(-)
Fusion-Task-Id: FN-9062
Fusion-Task-Lineage: 8c12b9f9-f6ed-4766-a6f1-49cdf9ea8926
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:48:23 -07:00
gsxdsm
43889bc684
FN-9058: block workspace main-checkout edits
...
Prevent workspace tasks from completing after task-era edits in configured sub-repository main checkouts.
- Detect dirty and recent commit evidence across every workspace main checkout before invariant checks.
- Block attributable edits with bounded retries while warning safely for inconclusive evidence.
- Add audit telemetry, documentation, changeset, and real-git regression coverage.
Files changed:
.../fn-9058-workspace-main-checkout-guard.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 1 +
.../engine/src/__tests__/_workspace-fixture.ts | 3 +-
.../executor-workspace-main-checkout-guard.test.ts | 164 +++++++++++++++++++++
packages/engine/src/executor/execution-prompt.ts | 3 +-
.../src/executor/workspace-main-checkout-guard.ts | 128 ++++++++++++++++
.../src/executor/worktree-verify-invariants.ts | 45 +++++-
packages/engine/src/util/run-audit.ts | 2 +
9 files changed, 351 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-9058
Fusion-Task-Lineage: b5dd58bd-4bd9-41fd-b3d5-e07270f3abca
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:41:44 -07:00
gsxdsm
c7779e44ac
FN-9055: guard archive disposal of live workspace worktrees
...
Prevent archive cleanup from removing worktrees that still belong to live tasks.
- Add shared archive liveness evaluation and transactional refusal guards.
- Require CLI and extension archive operations to refuse live tasks unless a human uses --force.
- Protect baseline archive worktree disposal and cover CLI, core, and engine paths with tests.
Files changed:
.changeset/fn-9055-archive-live-worktree-guard.md | 7 ++
docs/cli-reference.md | 4 +-
docs/task-management.md | 4 +-
.../extension-task-archive-live-guard.test.ts | 82 +++++++++++++++++++
packages/cli/src/bin.ts | 6 +-
packages/cli/src/commands/__tests__/task.test.ts | 66 ++++++++++++++-
packages/cli/src/commands/task.ts | 49 +++++++++---
packages/cli/src/extension.ts | 25 ++++--
.../src/__tests__/archive-live-task-guard.test.ts | 70 ++++++++++++++++
.../postgres/archive-live-task-fence.pg.test.ts | 69 ++++++++++++++++
.../src/__tests__/task-archive-liveness.test.ts | 19 +++++
packages/core/src/index.ts | 10 +++
packages/core/src/store.ts | 4 +-
.../core/src/task-store/archive-lifecycle-2.ts | 27 +++++--
packages/core/src/task-store/archive-lifecycle.ts | 20 ++---
.../src/task-store/async/async-archive-lineage.ts | 17 +++-
packages/core/src/tasks/task-archive-liveness.ts | 56 +++++++++++++
...chive-baseline-disposer-live-task-guard.test.ts | 93 ++++++++++++++++++++++
.../healing/archive-worktree-disposer-install.ts | 15 +++-
19 files changed, 592 insertions(+), 51 deletions(-)
Fusion-Task-Id: FN-9055
Fusion-Task-Lineage: 08644626-cc61-4854-abb9-5b415ddc9491
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:35:12 -07:00
gsxdsm
6adcab3b0e
FN-9057: bound workspace trailer fallback scans
...
Bound degraded workspace landing checks to recent task evidence.
- Pass task creation time through workspace landing and recovery paths
- Limit branch-gone trailer scans by time and commit count
- Cover recycled task-id fallback behavior with real-git tests
Files changed:
...fn-9057-workspace-land-predicate-recycled-id.md | 7 +++
...ace-land-predicate-recycled-id.real-git.test.ts | 58 ++++++++++++++++++++++
.../workspace-merger-idempotency.slow.test.ts | 19 +++++++
packages/engine/src/merge/merger-ai.ts | 6 +++
.../engine/src/merge/workspace-land-predicate.ts | 39 +++++++++++++--
packages/engine/src/self-healing.ts | 5 +-
6 files changed, 127 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-9057
Fusion-Task-Lineage: e522a33e-0f11-49ad-af88-3fa29129fad2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:25:04 -07:00
gsxdsm
1372218b1f
FN-9047: invalidate stale workspace landing proof after revert
...
Preserve workspace landing attribution while allowing cleanly reverted work to land again.
- Record a per-repository revert boundary after clean git-mode workspace reverts.
- Reject recorded and trailer landing proof at or behind that boundary, then clear it on a fresh landing.
- Persist boundaries through the revert route and cover re-land behavior with git tests.
Files changed:
.changeset/fn-9047-workspace-revert-landed-sha.md | 7 +++
docs/architecture.md | 2 +
packages/core/src/types/task/task-core.ts | 7 ++-
.../src/routes/register-session-diff-routes.ts | 2 +-
.../src/routes/register-task-workflow-routes.ts | 11 ++++
.../task-revert.workspace.real-git.test.ts | 27 ++++++++++
...orkspace-land-predicate.revert-boundary.test.ts | 60 ++++++++++++++++++++++
packages/engine/src/execution/task-revert.ts | 42 +++++++++++++--
packages/engine/src/index.ts | 1 +
packages/engine/src/merge/merger-ai.ts | 5 +-
.../engine/src/merge/workspace-land-predicate.ts | 25 +++++++--
packages/engine/src/self-healing.ts | 9 +++-
12 files changed, 185 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-9047
Fusion-Task-Lineage: 8ac41347-3c76-4f54-8d69-f16f82084305
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:02:52 -07:00
gsxdsm
4bc0a32d60
FN-9050: enforce AI squash scope and diff-volume gates
...
Validate approved AI squashes before any integration ref advances.
- Enforce task file scope and diff-volume checks for single-repo and workspace lands.
- Reset rejected clean rooms to the integration tip so invalid approved squashes cannot be recovered on retry.
- Add audit events, documentation, a changeset, and regression coverage for land gates.
Files changed:
.changeset/fn-9050-ai-merge-scope-gates.md | 7 +
docs/architecture.md | 2 +
docs/workflow-steps.md | 4 +-
.../src/__tests__/merger-ai-squash-gates.test.ts | 188 +++++++++++++++++++++
.../__tests__/merger-file-scope-invariant.test.ts | 29 ++++
.../__tests__/workspace-merger-scope-gates.test.ts | 118 +++++++++++++
.../engine/src/merge/merger-ai-squash-gates.ts | 66 ++++++++
packages/engine/src/merge/merger-ai.ts | 21 ++-
.../engine/src/merge/merger-diff-volume-gate.ts | 14 +-
packages/engine/src/merge/merger-file-scope.ts | 33 +++-
packages/engine/src/util/run-audit.ts | 1 +
11 files changed, 474 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-9050
Fusion-Task-Lineage: 9ecd8b8c-5c00-45ea-98e9-2aa8a8040c53
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 23:42:52 -07:00
gsxdsm
6896f1d7f3
FN-9045: wire workspace mode toggle to workspace config
...
Connect workspace-mode settings updates to the runtime workspace configuration lifecycle.
- Synchronize workspace.json and config.json when workspace mode changes.
- Reconcile settings events and executor state after successful or failed toggles.
- Add dashboard route, UI copy, localization, documentation, and regression coverage.
Files changed:
.changeset/fn-9045-workspace-mode-toggle.md | 7 +
docs/settings-reference.md | 2 +-
.../settings-workspace-toggle-side-effect.test.ts | 178 +++++++++++++++++++++
.../src/__tests__/workspace-mode-toggle.test.ts | 71 ++++++++
packages/core/src/git/git-repository.ts | 147 ++++++++++++++++-
packages/core/src/index.gate.ts | 6 +
packages/core/src/index.ts | 6 +
packages/core/src/task-store/settings-ops.ts | 86 +++++++++-
packages/core/src/types/settings/settings-scope.ts | 11 +-
.../settings/sections/GeneralSection.tsx | 10 +-
.../settings-workspace-mode-route.test.ts | 148 +++++++++++++++++
.../src/routes/register-settings-memory-routes.ts | 18 +++
.../executor-workspace-toggle-invalidation.test.ts | 64 ++++++++
.../engine/src/executor/task-executor-state.ts | 6 +
.../src/executor/workspace-config-resolver.ts | 16 +-
packages/engine/src/runtimes/in-process-runtime.ts | 12 ++
packages/i18n/locales/en/app.json | 2 +-
packages/i18n/locales/es/app.json | 4 +-
packages/i18n/locales/fr/app.json | 4 +-
packages/i18n/locales/ko/app.json | 4 +-
packages/i18n/locales/pt-BR/app.json | 4 +-
packages/i18n/locales/zh-CN/app.json | 4 +-
packages/i18n/locales/zh-TW/app.json | 4 +-
23 files changed, 791 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-9045
Fusion-Task-Lineage: e382726f-8409-4983-94ef-93f341a6adbf
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 23:33:36 -07:00
gsxdsm
892afaaf03
FN-9048: clear disposed workspace state on unarchive
...
Prevent disposed workspace metadata from being revived when archived tasks return.
- Reconcile missing workspace and singular worktree paths during archive restore.
- Preserve surviving workspace entries and cover archive-to-restore recovery behavior.
- Document the restore lifecycle and add a patch changeset.
Files changed:
.changeset/fn-9048-workspace-unarchive.md | 7 ++
docs/task-management.md | 2 +-
.../archive-restore-workspace-worktrees.pg.test.ts | 70 +++++++++++++
.../core/src/task-store/archive-lifecycle-2.ts | 8 +-
.../src/task-store/async/async-archive-lineage.ts | 43 ++++++++
.../src/__tests__/self-healing-workspace.test.ts | 111 ++++++++++++++++++++-
6 files changed, 236 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-9048
Fusion-Task-Lineage: fa9b9359-5fab-497f-87ce-0174d8069d99
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 23:22:05 -07:00
gsxdsm
db8e715452
FN-9056: reclaim safe terminal workspace worktrees
...
Reclaim safely abandoned workspace worktrees and canonical task branches without disrupting live or recoverable tasks.
- Tear down eligible complete, idle failed, and soft-deleted per-repository worktrees with bounded retries.
- Veto live, paused, scheduled-recovery, ambiguous, and unsafe-path cleanup candidates.
- Verify failed-task landing evidence against each repository integration branch before deleting canonical branches.
- Cover liveness and stale landed-SHA safety regressions.
Files changed:
.changeset/fn-9056-workspace-terminal-teardown.md | 7 +
AGENTS.md | 2 +-
docs/architecture.md | 1 +
.../src/__tests__/self-healing-workspace.test.ts | 319 ++++++++++++++++++++-
.../engine/src/executor/cleanup-task-worktree.ts | 8 +-
packages/engine/src/self-healing.ts | 268 ++++++++++++-----
packages/engine/src/util/run-audit.ts | 7 +-
7 files changed, 525 insertions(+), 87 deletions(-)
Fusion-Task-Id: FN-9056
Fusion-Task-Lineage: 4353f7d9-063b-442b-88d3-6f3da1c9aae8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 23:14:19 -07:00
gsxdsm
c2c9205281
FN-9064: clarify workspace merge routing
...
Replace stale workspace merge messaging and retire a dead sync-SQLite cleanup path.
- Direct misrouted workspace tasks to the per-repository land path.
- Update merge-boundary tests and engine diagnostics for the active routing contract.
- Remove the retired deferred branch-cleanup implementation.
Files changed: .../assert-not-workspace-task-merge.test.ts | 28 +++++++++------
packages/core/src/task-store/archive-lifecycle.ts | 41 ++++------------------
packages/core/src/task-store/merge-queue-ops.ts | 8 ++---
packages/core/src/types/task/task-core.ts | 26 ++++++--------
.../engine/src/__tests__/workspace-merger.test.ts | 2 +-
packages/engine/src/project-engine.ts | 18 +++++-----
6 files changed, 48 insertions(+), 75 deletions(-)
Fusion-Task-Id: FN-9064
Fusion-Task-Lineage: b75fbf34-fe65-49f0-9e69-554c0897777a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 22:32:00 -07:00
gsxdsm
ebd345da0f
FN-9060: reconcile zero-acquire workspace completion reviews
...
Align workspace completion and per-repo review behavior for tasks with no acquired worktrees.
- Centralize zero-acquire classification for completion and review paths.
- Approve proven commit-free tasks and immediately route deterministic unavailable reviews.
- Add regression coverage, workflow documentation, and a patch changeset.
Files changed:
.changeset/fn-9060-workspace-zero-acquire.md | 7 +++
docs/workflow-steps.md | 2 +-
.../__tests__/executor-workspace-taskdone.test.ts | 14 +++++
.../src/__tests__/executor-workspace.test.ts | 10 ++--
.../src/__tests__/reviewer-workspace.test.ts | 37 +++++++++++++-
.../src/__tests__/workflow-step-review.test.ts | 14 +++++
.../src/__tests__/workspace-zero-acquire.test.ts | 59 ++++++++++++++++++++++
packages/engine/src/execution/reviewer.ts | 7 +++
.../create-authoritative-workflow-seams.ts | 26 ++++++++--
.../src/executor/workspace-review-per-repo.ts | 32 +++++++++---
.../engine/src/executor/workspace-zero-acquire.ts | 53 +++++++++++++++++++
.../engine/src/executor/worktree-verify-invariants.ts | 31 ++++++++----
.../engine/src/workflows/workflow-node-handlers.ts | 14 +++--
13 files changed, 274 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-9060
Fusion-Task-Lineage: eb88f881-7db2-49d2-b79a-796eacd4fa40
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 22:16:44 -07:00
gsxdsm
c9e283ae0d
FN-9049: distinguish unavailable workspace branch evidence
...
Prevent transient Git probe failures from being treated as missing workspace branches.
- Classify branch evidence as present, absent, or unavailable using show-ref probes
- Defer unavailable evidence with bounded retries before parking a task
- Cover probe outcomes and partial-land recovery with workspace tests
- Add a patch changeset and document the workspace reconciliation contract
Files changed:
.changeset/fn-9049-workspace-branch-evidence.md | 7 ++
AGENTS.md | 2 +-
.../src/__tests__/self-healing-workspace.test.ts | 134 +++++++++++++++++++--
packages/engine/src/self-healing-git-evidence.ts | 59 +++++++--
packages/engine/src/self-healing.ts | 71 +++++++----
5 files changed, 234 insertions(+), 39 deletions(-)
Fusion-Task-Id: FN-9049
Fusion-Task-Lineage: 1a77d5af-3c06-4229-b61e-30a3891870ca
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 22:10:35 -07:00
gsxdsm
da4e4bca44
FN-9053: prevent workspace acquisition from persisting singular worktrees
...
Keep workspace tasks classified as multi-repository throughout sub-repository worktree acquisition.
- Suppress singular worktree and branch persistence for workspace sub-repo acquisition.
- Preserve the single-repository persistence contract and add regression coverage for acquisition failures.
- Document the workspace acquisition-state invariant and add a patch changeset.
Files changed:
.../fn-9053-workspace-acquisition-atomicity.md | 7 ++
docs/architecture.md | 1 +
.../worktree-acquisition-workspace.test.ts | 98 ++++++++++++++++++++--
.../engine/src/worktree/worktree-acquisition.ts | 66 +++++++++------
4 files changed, 142 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-9053
Fusion-Task-Lineage: e27d1e90-fc99-4bb6-ac83-033f71abc521
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 22:03:16 -07:00
gsxdsm
41d415fe70
FN-9051: report blocked workspace finalization
...
Prevent workspace merge entry points from treating an unfinalized task as a successful merge.
- Add a typed blocked-finalization result and engine handling that avoids retries, failure parking, and branch promotion.
- Return blocked outcomes through dashboard and CLI merge surfaces.
- Cover blocked finalization behavior and publish a patch changeset.
Files changed:
.changeset/fn-9051-workspace-blocked-finalize.md | 7 ++
packages/cli/src/commands/__tests__/task.test.ts | 38 ++++++++
packages/cli/src/commands/dashboard.ts | 22 +++--
packages/cli/src/commands/task.ts | 19 ++--
.../engine/src/__tests__/project-engine.test.ts | 105 ++++++++++++++++++++-
.../engine/src/__tests__/workspace-merger.test.ts | 1 +
packages/engine/src/index.ts | 1 +
packages/engine/src/merge/merger-ai.ts | 28 +++++-
packages/engine/src/project-engine.ts | 42 ++++++++-
9 files changed, 240 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-9051
Fusion-Task-Lineage: 89d5fcbb-1a00-4429-87ea-fc3e34db2706
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 21:51:45 -07:00
gsxdsm
495845023d
FN-9061: gate workspace foreach worktree isolation
...
Reject unsupported workspace projects before per-instance foreach worktree allocation.
- Add a workspace-isolation guard at graph execution and worktree allocation seams.
- Propagate workspace configuration probing through foreach dependencies.
- Cover workspace and non-workspace behavior, and document the limitation.
Files changed: .../fn-9061-foreach-workspace-isolation-gate.md | 7 +++
docs/workflow-steps.md | 2 +
.../workflow-foreach-workspace-isolation.test.ts | 72 ++++++++++++++++++++++
.../src/__tests__/workflow-graph-foreach.test.ts | 56 +++++++++++++++++
.../src/executor/build-foreach-worktree-deps.ts | 34 +++++++++-
packages/engine/src/executor/deps-bags.ts | 1 +
.../src/workflows/workflow-graph-executor.ts | 3 +
.../engine/src/workflows/workflow-graph-foreach.ts | 17 +++++
.../src/workflows/workflow-graph-task-runner.ts | 2 +
9 files changed, 193 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-9061
Fusion-Task-Lineage: 38772936-a45f-41f1-b7ee-7999997404db
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 21:44:18 -07:00
gsxdsm
d6da58d89a
FN-9054: reclaim archived workspace land leases
...
Reclaim stale workspace land leases when their owners are terminal.
- Treat archived and soft-deleted workspace task owners as terminal after the existing staleness floor.
- Preserve active and merge-pending lease protections while recording terminal reclaim reasons.
- Cover archived, renamed archive lane, deleted, missing, and protected-owner lease cases.
Files changed:
AGENTS.md | 2 +-
.../src/__tests__/self-healing-workspace.test.ts | 150 +++++++++++++++++++++
packages/engine/src/self-healing.ts | 50 ++++---
packages/engine/src/util/run-audit.ts | 2 +-
4 files changed, 185 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-9054
Fusion-Task-Lineage: 747e62f2-732a-4640-8d49-c08869a47964
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 21:39:30 -07:00
gsxdsm
010e619628
FN-9046: fix scoped pnpm dependent selector
...
Correct workspace merge verification to test changed packages with their dependents.
- Use pnpm's valid leading dependents selector for scoped merge tests.
- Cover single, multiple, and shell-metacharacter package selectors.
- Add a patch changeset for the verification fix.
Files changed:
.changeset/fn-9046-pnpm-filter-selector.md | 7 +++++
.../src/__tests__/merger-verification.test.ts | 33 +++++++++++++++++++---
.../src/merge/merger-workspace-test-commands.ts | 11 ++++++--
3 files changed, 45 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-9046
Fusion-Task-Lineage: 07186296-36b7-42bb-aaa8-739dbf5e00d5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 21:32:58 -07:00
gsxdsm
25b03d6e70
FN-9043: fix workspace completion commit detection
...
Resolve workspace configuration consistently so task completion observes commits across acquired repositories.
- Add a host-scoped, memoized workspace configuration resolver and preserve live configuration through executor dependency bags.
- Resolve workspace configuration before planning, worktree, graph, cleanup, and task-done paths.
- Aggregate workspace commit observations and cover partial-repository completion cases.
Files changed:
.changeset/fn-9043-workspace-no-commits.md | 7 ++
.../executor-workspace-config-propagation.test.ts | 116 +++++++++++++++++++++
.../engine/src/executor/cleanup-task-worktree.ts | 6 +-
.../create-authoritative-workflow-seams.ts | 6 +-
packages/engine/src/executor/deps-bags.ts | 74 ++++++++++---
.../executor/ensure-graph-custom-node-worktree.ts | 14 ++-
.../executor/ensure-task-worktree-for-planning.ts | 8 +-
packages/engine/src/executor/get-worktree-path.ts | 3 +
packages/engine/src/executor/mark-stuck-aborted.ts | 6 +-
.../engine/src/executor/run-graph-custom-node.ts | 8 +-
packages/engine/src/executor/run-implementation.ts | 6 +-
.../src/executor/workspace-config-resolver.ts | 40 +++++++
.../src/executor/worktree-task-done-scope-leak.ts | 8 +-
.../src/executor/worktree-verify-invariants.ts | 44 ++++----
14 files changed, 287 insertions(+), 59 deletions(-)
Fusion-Task-Id: FN-9043
Fusion-Task-Lineage: fc012b8e-c9cb-47e8-81a7-c9590a63a980
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 14:24:26 -07:00
gsxdsm
873f339ddd
FN-9040: show backup status and preserve schedules
...
Expose database backup inventory and schedule execution evidence while keeping scheduled backups due after unchanged settings saves.
- Display backup files, empty and error states, and automatic schedule details in Settings.
- Reconcile the shared backup routine at engine startup and retain its next run when settings are unchanged.
- Add API, localization, documentation, and regression coverage for backup status and scheduling.
Files changed:
.changeset/fn-9040-database-backups-visibility.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 4 +
.../src/__tests__/backup-schedule-status.test.ts | 124 +++++++++++++++++++++
.../core/src/automation/global-routine-store.ts | 31 +++++-
packages/core/src/backup/backup.ts | 95 ++++++++++++++--
packages/core/src/index.gate.ts | 4 +-
packages/core/src/index.ts | 4 +-
.../app/api/agents/agent-import-generation.ts | 14 +++
packages/dashboard/app/api/legacy.ts | 1 +
.../dashboard/app/components/SettingsModal.tsx | 12 +-
.../__tests__/SettingsModal.test-harness.tsx | 7 +-
.../__tests__/SettingsModalNodeRouting.test.tsx | 2 +-
.../components/__tests__/settings-mobile.test.tsx | 2 +-
.../settings/sections/DatabaseBackupsSection.css | 24 ++++
.../settings/sections/DatabaseBackupsSection.tsx | 67 ++++++-----
.../__tests__/DatabaseBackupsSection.test.tsx | 45 ++++++++
.../register-system-maintenance-routes.test.ts | 47 +++++++-
.../routes/register-system-maintenance-routes.ts | 46 ++++++--
.../src/__tests__/in-process-runtime.pg.test.ts | 15 ++-
packages/engine/src/runtimes/in-process-runtime.ts | 13 +++
packages/i18n/locales/en/app.json | 17 ++-
packages/i18n/locales/es/app.json | 17 ++-
packages/i18n/locales/fr/app.json | 17 ++-
packages/i18n/locales/ko/app.json | 17 ++-
packages/i18n/locales/pt-BR/app.json | 17 ++-
packages/i18n/locales/zh-CN/app.json | 17 ++-
packages/i18n/locales/zh-TW/app.json | 17 ++-
packages/i18n/src/resources.d.ts | 28 ++++-
29 files changed, 623 insertions(+), 90 deletions(-)
Fusion-Task-Id: FN-9040
Fusion-Task-Lineage: 29a803a2-0784-4a99-b7cb-2f67d105254b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:22:46 -07:00
gsxdsm
cb4ab3b6da
FN-9028: guard automatic mission rollup status writers
...
Protect automatic mission and milestone status rollups with a durable writer-coverage ratchet.
- Add source-level coverage for every computed mission and milestone status writer.
- Verify core persistence and engine reconciliation preserve blocked and archived intent.
- Document shared rollup-ownership guard requirements.
Files changed:
docs/missions.md | 2 +-
.../mission-rollup-status-writer-ratchet.test.ts | 170 +++++++++++++++++++++
.../mission-status-recompute-guard.test.ts | 11 ++
.../__tests__/postgres/mission-store.pg.test.ts | 43 ++++--
packages/core/src/missions/mission-types.ts | 4 +-
.../mission-autopilot-rollup-guard.test.ts | 115 ++++++++++++++
6 files changed, 331 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-9028
Fusion-Task-Lineage: 89b72b57-fc73-4268-a639-5edac05ff8f8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 16:01:57 -07:00
gsxdsm
19dffe36f6
fix(engine): make the planning->plan-review handoff atomic so planned cards stop stranding in Todo
...
Triage announced specification completion before its finally block marked the
plan work item terminal, so the Plan Review seeder saw its own still-running
predecessor as an "active continuation", bailed, and the discarded result
silently stranded the card until FN-8592 self-healing re-seeded it ~10 minutes
later (529 occurrences in 18 days).
- seedStrandedPlanReviewContinuation gains retirePredecessorId: idle check
excludes the named predecessor, then retires it and installs the successor in
ONE transaction under the task lock; a bailed seed mutates nothing.
- triage threads planningWorkItemId through PlanningHandoffReport; the runtime
reaction passes it as retirePredecessorId.
- reactToSpecificationComplete consumes the seed result: typed quiet parks
(incl. new "no-pre-release-plan-review"), bounded retries with a fresh
task/IR snapshot per attempt (mid-retry pause/needs-replan honored), loud
warning naming self-healing on exhaustion.
- Tests: PG both-orderings/no-mutation-on-bail/cross-task cases, direct engine
seeder handoff cases, reaction retry/park/pause/replan cases.
- docs/solutions: new planning-handoff-race writeup; graph-entry-contract doc
reclassifies the FN-8592 sweep as backstop-only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-12 21:24:53 -07:00
gsxdsm
ea53cbd4ff
FN-9021: send mailbox notices for task recommendations
...
Completed tasks now optionally send captured recommendations to the operator mailbox.
- Add idempotent, non-blocking mailbox notices after accepted task completion.
- Expose a project setting and localized dashboard control for recommendation notices.
- Cover notification dispatch, settings parity, and completion-path behavior with tests.
Files changed:
.../fn-9021-recommendation-mailbox-notice.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 1 +
.../core/src/__tests__/settings-parity.test.ts | 2 +
.../__tests__/task-recommendation-notice.test.ts | 77 +++++++++++++
packages/core/src/config/settings-schema.ts | 2 +
packages/core/src/index.ts | 9 ++
packages/core/src/task-recommendation-notice.ts | 122 +++++++++++++++++++++
packages/core/src/types/settings/settings-scope.ts | 6 +
.../__tests__/SettingsModal.general.test.tsx | 10 ++
.../app/components/settings/section-keys.ts | 1 +
.../settings/sections/GeneralSection.tsx | 15 +++
.../settings-default-descriptions.test.tsx | 1 +
.../executor-task-recommendations.test.ts | 39 ++++++-
.../executor/completion-recommendation-notice.ts | 52 +++++++++
.../engine/src/executor/create-task-done-tool.ts | 12 ++
packages/engine/src/executor/plan-review-no-op.ts | 12 ++
packages/engine/src/runtimes/in-process-runtime.ts | 14 +++
packages/i18n/locales/en/app.json | 4 +-
packages/i18n/locales/es/app.json | 4 +-
packages/i18n/locales/fr/app.json | 4 +-
packages/i18n/locales/ko/app.json | 4 +-
packages/i18n/locales/pt-BR/app.json | 4 +-
packages/i18n/locales/zh-CN/app.json | 4 +-
packages/i18n/locales/zh-TW/app.json | 4 +-
packages/i18n/src/resources.d.ts | 40 ++++++-
26 files changed, 442 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-9021
Fusion-Task-Lineage: f6c5c93c-a3b6-470b-9efb-79e6b4003985
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 21:15:53 -07:00
gsxdsm
8699ff41e2
FN-9016: add manager evaluation tools
...
Enable managers to review report evaluations and record coaching follow-ups.
- Add manager-scoped evaluation read and follow-up extension tools.
- Enforce management-subtree access through action gating and regression tests.
- Document the tool surface and add a minor release changeset.
Files changed:
.changeset/fn-9016-manager-eval-tools.md | 7 +
docs/agent-tool-surface-full-loop.md | 4 +-
docs/agents.md | 8 +-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 22 ++
.../skill/fusion/references/fusion-capabilities.md | 2 +
.../__tests__/extension-manager-eval-tools.test.ts | 159 +++++++++++++++
packages/cli/src/extension.ts | 227 +++++++++++++++++++++
.../engine/src/__tests__/agent-action-gate.test.ts | 1 +
.../src/__tests__/gating-classifications.test.ts | 1 +
.../src/__tests__/permanent-agent-gating.test.ts | 1 +
.../engine/src/execution/gating-classifications.ts | 8 +
12 files changed, 438 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-9016
Fusion-Task-Lineage: 1ad7c344-0f3c-4565-aabc-acb51481431d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 15:51:22 -07:00
gsxdsm
b0f623b100
FN-9013: fix mission feature reconciliation
...
Preserve mission-store method receivers so active mission reconciliation completes reliably.
- Invoke optional listFeatures with its mission-store receiver.
- Contain reconciliation failures to individual slices and continue remaining work.
- Cover synchronous, asynchronous, fallback, and failing-slice behavior.
Files changed:
.changeset/fn-9013-scheduler-listfeatures-receiver.md | 7 ++
.../mission-stranded-feature-retriage.test.ts | 109 +++++++++++++++++++++
packages/engine/src/scheduler.ts | 51 ++++++----
3 files changed, 146 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-9013
Fusion-Task-Lineage: 2745383a-3780-4fa4-bf07-bc75419d3384
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 15:14:32 -07:00
gsxdsm
c4467b0a5b
FN-9007: upgrade Pi runtime to 0.84.1
...
Upgrade the bundled Pi runtime closure to version 0.84.1.
- Pin direct and transitive Pi runtime packages to a coherent 0.84.1 closure.
- Adapt runtime interfaces and test assertions for Pi 0.84.1 behavior.
- Guard the added Pi client, protocol, and telemetry packages in desktop packaging checks.
Files changed:
.changeset/fn-9007-pi-0-84-1.md | 7 +
packages/cli/package.json | 4 +-
packages/cli/src/__tests__/package-config.test.ts | 6 +-
packages/cli/vitest.config.ts | 2 +-
packages/core/package.json | 2 +-
packages/dashboard/package.json | 4 +-
packages/dashboard/src/routes.ts | 6 +-
packages/engine/package.json | 4 +-
packages/engine/src/__tests__/pi.test.ts | 45 ++--
.../src/__tests__/provider-registration.test.ts | 4 +-
packages/engine/src/auth/auth-storage.ts | 20 +-
packages/engine/src/pi.ts | 5 +
packages/pi-claude-cli/package.json | 8 +-
pnpm-lock.yaml | 283 ++++++++++++---------
pnpm-workspace.yaml | 14 +-
.../__tests__/check-pi-versions-pinned.test.mjs | 27 +-
scripts/check-pi-versions-pinned.mjs | 8 +
17 files changed, 279 insertions(+), 170 deletions(-)
Fusion-Task-Id: FN-9007
Fusion-Task-Lineage: 89045e86-d4c8-4fc3-bbf6-5ba38fc786e7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 14:07:30 -07:00
gsxdsm
d9a0ed7837
fix(FN-8998): prevent planning lock reentry stalls
2026-08-11 21:44:22 -07:00
gsxdsm
5ce3a973e6
FN-8902: bound and cache model registry refreshes
...
Bound model-catalog refreshes so requests retain available models when providers stall.
- Add timeout-bounded, single-flight engine registry refreshes with fallback model retention.
- Cache refresh outcomes per registry and invalidate them after all credential mutations, including default-instance changes.
- Cover refresh cache and route behavior, and document the resilience contract.
Files changed:
.changeset/fn-8902-models-refresh-bounding.md | 7 +
docs/dashboard-guide.md | 6 +
.../__tests__/model-registry-refresh-cache.test.ts | 77 +++++++
.../register-model-routes-refresh-bounding.test.ts | 246 +++++++++++++++++++++
.../dashboard/src/model-registry-refresh-cache.ts | 153 +++++++++++++
packages/dashboard/src/routes.ts | 5 +
.../dashboard/src/routes/register-auth-routes.ts | 24 +-
.../dashboard/src/routes/register-model-routes.ts | 12 +-
.../src/__tests__/model-registry-refresh.test.ts | 33 +++
packages/engine/src/auth/model-registry-refresh.ts | 125 +++++++----
packages/engine/src/index.ts | 3 +
11 files changed, 642 insertions(+), 49 deletions(-)
Fusion-Task-Id: FN-8902
Fusion-Task-Lineage: 9f0eaf34-6d28-49aa-b065-274be14ea500
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 19:00:44 -07:00
gsxdsm
7b4b2b547b
FN-8996: guard engine test module specifiers
...
Ensure engine test dependencies remain valid after module moves.
- Expand the engine test specifier guard to validate Vitest APIs and imports.
- Repair moved worktree, branch-conflict, and lifecycle module references in tests.
- Preserve worktree recovery coverage and document the harness contract.
Files changed:
docs/testing.md | 21 ++-
.../worktrunk-self-healing.test.ts | 14 +-
.../__tests__/vi-mock-specifiers-resolve.test.ts | 149 ++++++++++++++++-----
.../__tests__/workflow-graph-step-rerun.test.ts | 14 +-
...-sync-role-conversion-inert-live-e2e.pg.test.ts | 2 +-
.../__tests__/worktree-acquisition-pinned.test.ts | 52 ++++++-
.../__tests__/worktree-admin-entry-prune.test.ts | 12 +-
7 files changed, 212 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8996
Fusion-Task-Lineage: dd93b4a8-cf45-42e2-9823-e5c2e6f84f82
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 18:46:48 -07:00
gsxdsm
167e17c697
fix(engine): resume planned mission follow-ups
2026-08-11 17:53:40 -07:00
gsxdsm
0e4c0c713e
FN-8995: reconcile durable-write inventory drift
...
Keep the durable-write inventory synchronized while preserving reviewed lifecycle verdicts.
- Add fail-closed manifest regeneration and regression coverage.
- Reconcile current call-site structure while retaining equivalent verdicts through module moves.
- Clarify durable wedge-notification writer classification and regeneration guidance.
Files changed:
.../merge-orphan-body-durable-write-fences.md | 18 +-
.../__tests__/_merge-durable-write-callsites.ts | 84 +-
.../merge-orphan-durable-write-inventory.json | 15414 +++++++++----------
...ge-orphan-durable-write-inventory-drift.test.ts | 88 +-
4 files changed, 7836 insertions(+), 7768 deletions(-)
Fusion-Task-Id: FN-8995
Fusion-Task-Lineage: df3d27ca-6614-418d-b09f-e1dd9f49f910
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 15:29:44 -07:00
gsxdsm
5134a55b77
FN-8958: fence orphaned merge-body writes
...
Prevent cancelled merge generations from writing stale task state.
- Add a signal-aware merge write fence with orphan audit reporting.
- Fence merge finalization, post-push metadata, and recovery-branch task logs.
- Cover durable write callsites and cancellation behavior with tests and guidance.
Files changed:
.changeset/fn-8958-orphan-merge-write-fence.md | 7 +
AGENTS.md | 1 +
.../reliability/orphan-merge-body-write-fence.md | 68 ++
.../__tests__/_merge-durable-write-callsites.ts | 4 +
.../merge-orphan-durable-write-inventory.json | 982 +++++++++++----------
.../merge-orphan-body-durable-writes.test.ts | 38 +-
.../engine/src/__tests__/merge-write-fence.test.ts | 39 +
.../engine/src/merge/auto-merge-finalization.ts | 9 +
packages/engine/src/merge/merge-write-fence.ts | 92 ++
packages/engine/src/merge/merger-ai.ts | 173 ++--
10 files changed, 875 insertions(+), 538 deletions(-)
Fusion-Task-Id: FN-8958
Fusion-Task-Lineage: 5f398c44-4320-4f0c-be15-707184f66aa8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 15:20:19 -07:00
gsxdsm
43141467fb
FN-8955: harden reviewer verdict extraction
...
Recover structured reviewer verdicts from prose containing malformed brace or quote characters.
- Scan and recover JSON verdict candidates after parser desynchronization.
- Prevent unreadable structured verdicts from being treated as prose approvals.
- Cover malformed prose and multi-finding verdict recovery across review gates.
Files changed:
.changeset/fn-8955-verdict-extractor.md | 7 ++
docs/workflow-steps.md | 4 +-
packages/engine/src/__tests__/reviewer.test.ts | 65 +++++++++++++++
.../workflow-malformed-verdict-gate.test.ts | 14 ++++
.../workflow-step-verdict-parsing.test.ts | 86 ++++++++++++++++++--
packages/engine/src/execution/reviewer.ts | 92 ++++++++++++++++++++--
.../engine/src/executor/workflow-step-verdict.ts | 16 ++--
7 files changed, 267 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8955
Fusion-Task-Lineage: 84107fd2-b7f3-4162-9e8c-2ec24600d9d5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 15:01:52 -07:00
gsxdsm
778292b484
refactor: package code organization wave 19 (self-healing pure peels) ( #3403 )
...
## Summary
Starts **U5** of the package code-organization program after wave 18
(executor peels) landed.
Peels pure free-function clusters out of `self-healing.ts` into
`packages/engine/src/self-healing/` without behavior changes. Public
imports from `./self-healing.js` remain stable via re-exports.
### Peels
| Symbol | New home |
|--------|----------|
| `autoRecoverWorktreeSessionStartFailure` |
`self-healing/auto-recover-worktree-session.ts` |
| `archiveAsGhostBug` | `self-healing/archive-ghost-bug.ts` |
| `hasStepProgress` / work-complete helpers |
`self-healing/step-progress.ts` |
### Line count
- `self-healing.ts`: ~15456 → ~15231 (baseline ratcheted to post-peel
live; main had already drifted past the prior grandfathered ceiling via
organic growth)
- New modules each well under 2,000 lines
## Test plan
- [x] `pnpm --filter @fusion/engine exec tsc --noEmit`
- [x] `self-healing-trait-rekey.test.ts` (autoRecover requeue)
- [x] `self-healing-paused-abort-recovery.test.ts`
- [x] `self-healing-model-unavailable-recovery.test.ts`
- [ ] CI gate
## Follow-ups
U5 Slice B: domain method clusters (startup, in-review, merge-status,
workspace, surfacing) into additional `self-healing/*.ts` modules.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved automatic recovery when worktree sessions fail to start,
including stale or incomplete session data.
* Tasks can be safely requeued while preserving progress, or escalated
after retry limits are reached.
* Improved handling of completed work and failures where task completion
was not recorded.
* Preserved valid task branches during recovery and provided more
reliable fallback requeue behavior.
* Ghost bugs are automatically archived with recovery details and
activity history.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 11:29:30 -10:00
gsxdsm
9622a62425
fix(engine): preserve manual handoff holds during recovery ( #3422 )
...
## Summary
Supersedes #3421 — fork head not writable for main-merge. Same change
rebased onto current main so lifecycle-column lint stays green.
## Test plan
- [x] merges cleanly onto main
- [ ] CI green
Co-authored-by: BESA-Franz <49682134+BESA-Franz@users.noreply.github.com >
2026-08-11 11:29:23 -10:00