gsxdsm
d9fcabfaef
FN-9112: default Memory Keeper heartbeats to disabled
...
Default built-in Memory Keeper agents to opt-in heartbeat scheduling while retaining operator choices.
- Provision new Memory Keeper agents with heartbeat disabled and hourly scheduling preconfigured.
- Preserve explicit heartbeat settings during startup convergence and avoid no-op rewrites.
- Add provisioning coverage, operator documentation, and a release changeset.
Files changed:
.../fn-9112-memory-keeper-heartbeat-default-off.md | 7 +++
docs/agents.md | 2 +-
.../__tests__/memory-agent-provisioning.test.ts | 59 +++++++++++++++++++---
packages/core/src/agents/agent-store.ts | 34 ++++++++++---
4 files changed, 86 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-9112
Fusion-Task-Lineage: 49edc6d9-3d9b-412f-91a5-c26f4a26a662
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 20:17:07 -07:00
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
e9089ee8a1
FN-9110: contain GitHub pull request imports on mobile
...
Keep GitHub pull-request rows and previews readable within narrow import layouts.
- Let mobile pull-request rows grow with wrapped titles, badges, and branch metadata.
- Break long branch names within list rows and detail previews.
- Cover modal and embedded presentations with layout and interaction regressions.
- Add a patch changeset for the mobile layout fix.
Files changed:
.changeset/fn-9110-github-import-pulls-mobile.md | 7 +++
.../github-import-pulls-mobile-layout.test.ts | 54 ++++++++++++++++++++++
.../dashboard/app/components/GitHubImportModal.css | 27 ++++++++++-
.../__tests__/GitHubImportModal.test.tsx | 32 +++++++++++++
4 files changed, 119 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-9110
Fusion-Task-Lineage: 572b5fb3-076e-448a-9f6f-185b836b4161
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 17:53:29 -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
gsxdsm
872d260ab8
FN-9104: Add mailbox recommendation task actions
...
Add guarded task creation directly to completed-task recommendation notices.
- Render live recommendation details and task actions in mailbox detail and conversation surfaces.
- Prevent duplicate creates, expose existing task links, and support unavailable and retry states.
- Cover desktop and mobile surfaces, update notice copy and documentation, and add a release changeset.
Files changed:
.../fn-9104-mailbox-recommendation-create.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../__tests__/task-recommendation-notice.test.ts | 7 ++
packages/core/src/task-recommendation-notice.ts | 9 +-
packages/dashboard/app/components/MailboxModal.tsx | 3 +
.../app/components/MailboxTaskRecommendations.css | 9 ++
.../app/components/MailboxTaskRecommendations.tsx | 127 +++++++++++++++++++++
packages/dashboard/app/components/MailboxView.tsx | 3 +
.../MailboxTaskRecommendations.surfaces.test.tsx | 77 +++++++++++++
.../__tests__/MailboxTaskRecommendations.test.tsx | 72 ++++++++++++
10 files changed, 311 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-9104
Fusion-Task-Lineage: 94f53bfe-f57f-42ee-970e-56658129c1e0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 17:36: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
84bbdadab4
Merge branch 'mission/M-MSU1HV06-000V-4HPI'
2026-08-15 17:01:23 -07:00
gsxdsm
920bf8b022
FN-9105: document boot-smoke anomaly remeasurement
...
Confirm the W33 spike as cold-start variance and preserve a repeatable diagnosis protocol.
- Record five sequential phase-timed samples and the 20.5-second median threshold.
- Link the controlled remeasurement protocol from the testing guide.
- Explain the timing snapshot handoff and why incomplete CI artifacts were not published.
- Preserve the no-appeasement requirement beside boot-smoke phase timing.
Files changed:
.../boot-smoke-w33-walltime-anomaly.md | 100 +++++++++++++++++++++
docs/testing.md | 2 +-
scripts/boot-smoke.mjs | 7 ++
3 files changed, 108 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-9105
Fusion-Task-Lineage: 6956b037-db0f-4560-bb04-136080a975b5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 16:59:37 -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
987878bd17
fix: close Fusion tracking issues created after a task is already done
...
Late-created GitHub tracking issues never got a task:moved close, and the
reconcile sweep only scanned the oldest 200 terminal rows.
2026-08-15 15:33:40 -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
f11bb2e899
fix(core): restore title-redirect planning hold and stamp workflow-create partition
...
Full-suite repair, core cluster. Two real product regressions caught by
the red tests: (1) the wave-18 refactor dropped the task.title argument
FN-8840 added to isDuplicateRedirectOnlyPrompt inside
isTaskAwaitingPlanning, so a title-only DUPLICATE:<ID> redirect read as
executable Ready instead of awaiting planning; (2) FN-8998 scoped every
workflow-definition read by layer.projectId but left the INSERT on the
session-GUC default, so a JS-bound layer created workflow rows it could
never read back — the insert now stamps the bound projectId like the
FN-8997 workflowSteps insert. Test-lag fixes: analytics renamed-lanes
harnesses now bind projectId 'p1' to match FN-8957/FN-8998 scoping,
project-ownership-runtime-scope replaces a hardcoded expired approval
date, schema-applier learns migrations 0059/0060 (115 project tables,
baseline 0060), and builtin-workflow-settings-triage learns FN-8932's
memoryConsolidationEnabled with position-independent lookups.
Verified: 10 files / 128 tests green, core typecheck clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:22:33 -07:00
gsxdsm
13525fc0f0
fix: keep Anthropic OAuth login error inside Settings on mobile
...
The expiry banner was an inline flex sibling of Login, so the sentence overflowed a phone-width Settings card.
2026-08-15 15:21:30 -07:00
gsxdsm
b579c5367c
test(desktop): resolve mcp-builtin-servers subpath and pin setup-java to its major
...
Full-suite repair, desktop cluster: FN-8926's Node-only
@fusion/core/mcp-builtin-servers subpath needed the same vitest alias
desktop's engine/dashboard siblings already carry — without it the broad
prefix alias mangled the path and the runtime-resolution test failed with
ENOTDIR. The release-workflow test pinned actions/setup-java to an exact
patch that Dependabot rotates (broke twice, #3303 then #3367 ); it now
asserts the v5 major while keeping the JDK-21 and Android wiring
assertions intact. Desktop suite: 29 files / 265 tests green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:08:05 -07:00
gsxdsm
5a351b2454
test: repoint worktree-capacity audit entries and fix core subpath alias
...
Full-suite repair, mechanical cluster: the wave-18 executor peel (#3317 )
moved the audited child-spawn bound to executor/create-spawn-agent-tool.ts,
the admission-reason unification moved the binding-gate discriminator into
concurrency/concurrency.ts, and the FN-9059-era merge-claim and direct
workflow-continuation defers read the shared ceiling through
resolveActiveTaskCapacityLimit (OFF-mode aware) — all audited with reasons,
none is a new raw gate. Core's vitest config now aliases the
@fusion/core/mcp-builtin-servers subpath before the bare alias (mirroring
engine's config) so core PG tests that exercise engine's mcp-resolution
resolve it from source.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:07:24 -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
38d128ca29
FN-9103: align auth route tests with model refresh caching
...
Update dashboard auth route coverage and engine mocks for cached model registry refresh behavior.
- provide faithful bounded model registry refresh helpers in the dashboard engine mock
- reset refresh cache state between API key route tests
- verify API key saves invalidate the cache without redundant refreshes
Files changed:
.../dashboard/src/__tests__/routes-auth.test.ts | 20 ++++--
packages/dashboard/src/test/mockCoreEngine.ts | 74 ++++++++++++++++++++++
2 files changed, 90 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-9103
Fusion-Task-Lineage: d09453b1-08a5-4cde-849c-31e22bd61c0f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 14:40:55 -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
7ed1c39a67
FN-9102: fix active runtime segment accounting
...
Prevent reopened tasks from double-counting closed execution segments while preserving pre-execution planning time.
- Clear the live execution anchor whenever a WIP segment is banked.
- Clamp legacy poisoned runtime values with separate execution and combined-work wall-clock ceilings.
- Cover cards, detail statistics, core totals, and planner metrics across WIP round trips and historical rows.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-9102-task-runtime-double-count.md | 7 ++
.../src/__tests__/reopen-semantics-by-role.test.ts | 95 ++++++++++++++--------
packages/core/src/tasks/task-timing.ts | 20 ++++-
.../core/src/workflows/default-workflow-hooks.ts | 14 +++-
.../app/components/__tests__/TaskCard.test.tsx | 27 ++++++
.../__tests__/TaskTokenStatsPanel.test.tsx | 27 ++++++
.../app/utils/__tests__/taskTiming.test.ts | 40 +++++++++
packages/dashboard/app/utils/taskTiming.ts | 28 +++++--
.../__tests__/task-planner-chat-metrics.test.ts | 28 +++++++
.../dashboard/src/task-planner-chat-metrics.ts | 22 ++++-
10 files changed, 260 insertions(+), 48 deletions(-)
Fusion-Task-Id: FN-9102
Fusion-Task-Lineage: 3b42e81f-4e11-4232-80f6-052f51b83f1c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 13:39:24 -07:00
gsxdsm
743251a5d3
FN-9099: harden Hermes Windows CLI launches
...
Reliably resolve and safely launch operator-installed Hermes binaries on Windows.
- Resolve Windows Hermes shims using PATH and PATHEXT-aware lookup with bounded caching
- Launch .cmd and .bat shims through escaped cmd.exe payloads while preserving direct executable launches
- Supervise CLI turns and cover Windows shim, probe, cache, timeout, and injection behavior
Files changed:
.changeset/fn-9099-hermes-windows-launch.md | 7 +
plugins/fusion-plugin-hermes-runtime/README.md | 4 +
plugins/fusion-plugin-hermes-runtime/package.json | 1 +
.../src/__tests__/cli-spawn.test.ts | 139 +++++++++++++++-
.../src/__tests__/probe.test.ts | 61 +++++++
.../src/__tests__/windows-binary-launch.test.ts | 64 +++++++
.../fusion-plugin-hermes-runtime/src/cli-spawn.ts | 72 ++++----
plugins/fusion-plugin-hermes-runtime/src/index.ts | 8 +
plugins/fusion-plugin-hermes-runtime/src/probe.ts | 19 ++-
.../src/windows-binary-launch.ts | 184 +++++++++++++++++++++
pnpm-lock.yaml | 3 +
11 files changed, 508 insertions(+), 54 deletions(-)
Fusion-Task-Id: FN-9099
Fusion-Task-Lineage: 37b1f255-07ce-4952-aac6-1556890849be
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 12:38:24 -07:00
gsxdsm
c0e568bf78
FN-9100: fix staged Cursor core imports in CLI builds
...
Ensure staged plugin core runtime imports resolve reliably in packaged CLI builds.
- Export Cursor runtime core helpers from the CLI runtime shim.
- Guard staged plugin imports against undeclared or unavailable core exports.
- Add Cursor bundle coverage and document the focused packaging test.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-9100-staged-plugin-core-shim.md | 7 +
docs/testing.md | 1 +
.../__tests__/plugin-sdk-core-runtime-shim.test.ts | 40 +++-
.../__tests__/staged-plugin-core-imports.test.ts | 221 +++++++++++++++++++++
packages/cli/src/plugin-sdk-core-runtime-shim.mjs | 10 +-
5 files changed, 272 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-9100
Fusion-Task-Lineage: 4c25ef74-065d-4e5a-86f2-e6f9a22500b3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 12:04:30 -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
284feeaf11
FN-9092: prevent model menus from dismissing host dialogs
...
Keep portaled model-menu interaction from propagating to host dialog dismissal.
- Mark model-menu portal surfaces and stop their pointer events from reaching dialog backdrops.
- Apply the dismissal guard across agent, chat, floating-window, and model-selection dialogs.
- Close enabled overlays on valid touch taps while suppressing duplicate compatibility mouse closes.
- Add desktop and mobile regression coverage for portal-host dismissal behavior.
Files changed:
.../fn-9092-model-filter-dialog-dismissal.md | 7 +
.../ui-bugs/portaled-model-menu-host-dismissal.md | 19 +++
packages/dashboard/app/components/AgentsView.tsx | 6 +
.../app/components/ChatThinkingLevelControl.tsx | 17 ++-
packages/dashboard/app/components/ChatView.tsx | 38 +++--
.../app/components/CustomModelDropdown.tsx | 13 +-
.../dashboard/app/components/FloatingWindow.tsx | 17 +--
.../app/components/ModelSelectionModal.tsx | 17 +--
.../dashboard/app/components/NewAgentDialog.tsx | 12 +-
.../dashboard/app/components/QuickEntryBox.tsx | 5 +-
.../ChatThinkingLevelControl.portal.test.tsx | 9 ++
.../__tests__/CustomModelDropdown.test.tsx | 24 ++-
.../__tests__/ModelSelectionModal.test.tsx | 3 +-
.../NewAgentDialog.portal-dismissal.test.tsx | 77 ++++++++++
.../components/__tests__/NewAgentDialog.test.tsx | 11 ++
.../model-menu-filter-host-dismissal.test.tsx | 163 +++++++++++++++++++++
.../app/hooks/__tests__/useOverlayDismiss.test.tsx | 7 +-
packages/dashboard/app/hooks/useOverlayDismiss.ts | 26 +++-
.../app/utils/__tests__/portalSurfaces.test.ts | 31 ++++
packages/dashboard/app/utils/portalSurfaces.ts | 31 ++++
20 files changed, 469 insertions(+), 64 deletions(-)
Fusion-Task-Id: FN-9092
Fusion-Task-Lineage: a0d0b84d-2efe-4a67-9485-77c08f7cc57e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 06:42:39 -07:00
gsxdsm
b26894e0dd
FN-9095: move spec alignment details to Definition tab bottom
...
Place low-frequency spec alignment provenance after plan and relationship content.\n\n- Move the Definition-tab spec-lock report to the final section.\n- Cover populated, unavailable, and absent spec-lock report states.\n- Document the placement and add a patch changeset.\n\nFiles changed:\n .changeset/fn-9095-spec-alignment-position.md | 7 ++\n docs/dashboard-guide.md | 2 +-\n .../dashboard/app/components/TaskDetailModal.tsx | 87 +++++++++++-----------\n .../__tests__/TaskDetailModal.spec-lock.test.tsx | 63 ++++++++++++++++\n 4 files changed, 115 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-9095
Fusion-Task-Lineage: c017325c-b7c1-4f0e-abab-49462903a778
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 06:09:09 -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
d77b427b8c
FN-9063: document multi-repository workspace mode
...
Document workspace setup, operation, recovery, and lifecycle guidance for operators.
- Add a dedicated multi-repository workspace guide.
- Link workspace mode from onboarding, settings, task management, and project documentation.
- Cover the documentation contract with focused dashboard tests.
Files changed:
docs/README.md | 1 +
docs/getting-started.md | 2 +-
docs/multi-project.md | 2 +-
docs/settings-reference.md | 1 +
docs/task-management.md | 4 +-
docs/workspaces.md | 129 +++++++++++++++++++++
packages/dashboard/src/__tests__/workspace-documentation.test.ts | 74 ++++++++++++
7 files changed, 209 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-9063
Fusion-Task-Lineage: b79baa34-fcd7-47ed-89de-b4637160c305
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 22:25:15 -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
9ba6a67695
fix: create CLI GitHub tracking issues synchronously before process exit
...
The task-created hook (GitHub tracking issue creation) was deferred behind
the fire-and-forget auto-title-summarize chain whenever autoSummarizeTitles
is on and the task has a long description and no title — i.e. for every
'fn task create'. The short-lived CLI process closed the store and exited
before the deferred chain ran, so tasks ended up with
githubTracking.enabled=true but no issue (observed on FN-9045..FN-9061).
fn task create now suppresses the deferred hook and calls
createTrackingIssueForTask directly after create, printing the linked
issue; exports that helper from @fusion/dashboard.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-14 21:55:49 -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