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
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
52a28d39ff
feat: add per-task GitHub tracking overrides to task create (fn_task_create + CLI)
...
fn_task_create gains github_tracking/github_repo params and fn task create
gains --github/--no-github/--github-repo flags, resolved through
resolveTaskGithubTracking (task > project > global). CLI create now also
honors the project/global tracking-enabled default it previously ignored;
explicit disables persist enabled:false so later default flips cannot
re-enable a task.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-14 21:12:15 -07:00
gsxdsm
0188d9427b
FN-9044: group workspace tasks by acquired worktrees
...
Show workspace-mode task cards in their own worktree group instead of Unassigned.
- Classify workspace worktree groups with stable identifiers and repository counts.
- Render localized workspace headers and appropriate group icons.
- Cover workspace grouping across utilities, columns, lanes, and group headers.
- Document the board behavior and add a patch changeset.
Files changed:
.changeset/fn-9044-workspace-worktree-grouping.md | 7 ++
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/Column.tsx | 4 +-
.../dashboard/app/components/WorktreeGroup.tsx | 20 ++++--
.../app/components/__tests__/Column.test.tsx | 32 ++++++++-
.../app/components/__tests__/Lane.test.tsx | 24 ++++++-
.../__tests__/worktree-grouping-workspace.test.tsx | 66 +++++++++++++++++
.../app/utils/__tests__/worktreeGrouping.test.ts | 82 ++++++++++++++++++++++
packages/dashboard/app/utils/worktreeGrouping.ts | 37 ++++++++--
packages/i18n/locales/en/app.json | 4 +-
packages/i18n/src/resources.d.ts | 4 +-
11 files changed, 267 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-9044
Fusion-Task-Lineage: d342d4fb-9fab-4efd-813f-2a3091d7c414
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 20:50:55 -07:00
gsxdsm
66b1c046c5
test: assert Memory Keeper in fresh-project built-in agent listings
...
Fusion-Task-Id: automation
FN-8932 seeds the durable Memory Keeper alongside the four routed workflow principals, so fn_list_agents and fn_agent_org_chart now enumerate five built-in agents on a fresh project. Update the two extension.test.ts assertions from count 4 to 5 and assert Memory Keeper is present.
2026-08-14 17:04:07 -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
ba643fc384
FN-9042: fix dashboard update installation feedback
...
Make dashboard update actions report clear terminal outcomes and avoid unsupported installs.
- Distinguish update checks, no-op responses, installation failures, and unsupported installation methods.
- Block source-checkout, Homebrew, and missing-npm global installation attempts with actionable guidance.
- Surface update results in dashboard controls and cover API, updater, and UI behavior with tests.
Files changed:
.changeset/fn-9042-update-now-outcomes.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 2 +-
packages/dashboard/app/api/settings/settings.ts | 2 +
.../dashboard/app/components/SettingsModal.tsx | 18 +--
.../app/components/UpdateAvailableBanner.tsx | 11 +-
.../__tests__/SettingsModal.general.test.tsx | 20 ++++
.../__tests__/UpdateAvailableBanner.test.tsx | 19 ++++
.../dashboard/src/__tests__/auto-update.test.ts | 38 ++++++-
.../dashboard/src/__tests__/update-check.test.ts | 19 +++-
packages/dashboard/src/auto-update.ts | 33 +++++-
.../__tests__/register-update-check-routes.test.ts | 104 ++++++++++++++++++
.../src/routes/register-update-check-routes.ts | 28 +++--
packages/dashboard/src/server.ts | 9 +-
packages/dashboard/src/update-check.ts | 122 ++++++++++-----------
15 files changed, 338 insertions(+), 96 deletions(-)
Fusion-Task-Id: FN-9042
Fusion-Task-Lineage: 22ae5540-e5b5-43cf-ad16-c7aa05782593
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 12:59:23 -07:00
gsxdsm
b7604a94bf
FN-9041: remove agent state-change activity logs
...
Remove durable agent state-change events and hide retained state-change rows from activity displays.
- Stop AgentStore update and reconciliation paths from writing state-change activity events.
- Filter historical state-change events in activity stores and panels while retaining live roster notifications.
- Document the retained activity contract, add coverage, and include a patch changeset.
Files changed:
.changeset/fn-9041-removal.md | 7 ++++
docs/agent-activity-contract.md | 4 ++
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../src/__tests__/agent-activity-writers.test.ts | 23 ++++++-----
packages/core/src/agents/agent-store.ts | 28 +++++--------
.../app/components/agentsOrgChartActivity.ts | 12 ++++++
.../command-center/AgentActivityPanel.tsx | 25 +++++++----
.../__tests__/AgentActivityPanel.test.tsx | 48 ++++++++++++++++++++++
.../app/hooks/__tests__/agentActivityStore.test.ts | 39 +++++++++++++++++-
packages/dashboard/app/hooks/agentActivityStore.ts | 3 +-
11 files changed, 153 insertions(+), 40 deletions(-)
Fusion-Task-Id: FN-9041
Fusion-Task-Lineage: 532724b1-5945-4904-b5cd-2c27909805de
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 12:41:03 -07:00
gsxdsm
9c83812351
fix(ci): unblock check:lane-wiring for the task-recommendations read
...
check:lane-wiring runs in CI's Lint gate and has been failing on main since FN-9037 landed
`listTaskRecommendations`, so it blocks every PR in the repo, not just the one that hit it.
Recorded rather than rewired, because this is the false-positive shape the escape hatch exists
for. The guard catches a callee silently falling back to a LEGACY COLUMN LITERAL when a caller
omits the lane; `listTaskRecommendationsImpl` falls back to
`resolveProjectColumnsForRoles(store, ["complete"])`, which reads the board's own lanes. Real
callers already pass a resolved set — the dashboard route resolves `completeColumns` before
calling — so the fallback only serves the pass-through wrapper. Resolving again in the wrapper
would duplicate that query on every call for no behavioural difference.
The reason lives at the call site as well as in the baseline, since a bare count in a JSON file
is exactly the kind of entry that later reads as unexplained debt.
Baseline diff verified to be a single added entry (store.ts: 1) — nothing else raised or lowered.
Verified: check:lane-wiring exits 0, core typecheck clean, eslint clean, FNXC date check clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-13 23:46:57 -07:00
gsxdsm
9d31396f7a
FN-9031: strengthen computer snapshot action fencing
...
Serialize computer snapshots and actions through a durable app-scoped fence.
- Hold the fence from snapshot acquisition or element resolution through OS action consumption.
- Report snapshot consumption only when the expected latest pointer was invalidated.
- Heartbeat and token-check directory locks for safe crash recovery and add command-fence coverage.
Files changed:
.../commands/__tests__/computer-commands.test.ts | 26 +++++++++-
.../__tests__/computer-snapshot-index.test.ts | 2 +-
packages/cli/src/commands/computer.ts | 37 ++++++++-----
.../cli/src/commands/computer/snapshot-store.ts | 60 ++++++++++++++++------
4 files changed, 93 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-9031
Fusion-Task-Lineage: f196b7ca-ce3f-4a50-98d2-d6ac8bf184ac
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:44:02 -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
bebb46ff41
FN-9037: add indexed recommendation task lookups
...
Keep recommendation task creation responsive without changing duplicate-intake semantics.
- Add project-scoped proposal claim and source-lineage persistence reads with supporting indexes.
- Use bounded lookups for recommendation replay and same-agent duplicate intake.
- Resolve terminal lanes from each candidate's workflow and cover the indexed query paths.
Files changed:
.changeset/fn-9037-recommendation-create-perf.md | 7 ++
docs/storage.md | 4 +
.../intake-duplicate-terminal-lanes.test.ts | 3 +-
.../postgres/proposal-claim-lookup.pg.test.ts | 106 +++++++++++++++++++++
.../__tests__/same-agent-duplicate-intake.test.ts | 14 ++-
.../0059_fn_9037_tasks_source_agent_index.sql | 3 +
packages/core/src/postgres/schema-applier.ts | 12 ++-
packages/core/src/postgres/schema/project.ts | 3 +
packages/core/src/store.ts | 8 +-
.../core/src/task-store/async/async-persistence.ts | 40 ++++++++
packages/core/src/task-store/reads.ts | 18 +++-
packages/core/src/task-store/task-creation.ts | 10 +-
.../__tests__/task-recommendation-routes.test.ts | 38 +++++++-
.../src/routes/register-task-workflow-routes.ts | 20 ++--
14 files changed, 259 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-9037
Fusion-Task-Lineage: ea44d65c-98cc-4a5b-a116-b3c28f14c292
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:13:56 -07:00
gsxdsm
2dcead4c8f
FN-9035: prevent static computer commands in shipped skills
...
Keep bundled computer-use guidance limited to runtime discovery so command syntax cannot drift.
- Scan all shipped skill markdown files, including plugin skills
- Reject static `fn computer` commands outside the computer-use discovery stub
- Assert the discovery stub exposes only its supported JSON probes
Files changed:
packages/cli/src/commands/__tests__/computer-use-skill.test.ts | 50 ++++++++++++++++++++--
1 file changed, 47 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-9035
Fusion-Task-Lineage: 5049fd29-1b3b-4968-b09e-1bb7be9d52ff
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:01:39 -07:00
gsxdsm
1788dc0506
FN-9033: harden macOS computer-use permission handling
...
Treat missing osascript as an explicit automation denial while preserving replay failures.
- Track missing osascript separately from indeterminate permission probes.
- Block all macOS automation paths before execution when osascript is unavailable.
- Preserve replay permission and timeout errors, mapping only stale locators to element errors.
- Add coverage for replay failures and missing-binary enforcement.
Files changed:
.../__tests__/computer-adapter-registry.test.ts | 87 +++++++++++++++++++++-
.../commands/__tests__/computer-commands.test.ts | 29 +++++++-
.../cli/src/commands/computer/adapter-macos.ts | 52 +++++++------
3 files changed, 142 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-9033
Fusion-Task-Lineage: 48e77cc5-cd71-49f1-a163-13d68a81d1d4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 16:55:23 -07:00