Fusion Agent
3f85c4cf84
FN-034: route workspace tasks through repository worktrees
...
Route multi-repository planning and graph execution through declared repository worktrees instead of workspace roots.
- Acquire declared repository worktrees for planning and custom graph nodes.
- Filter planning coordinator selection to configured repositories and preserve workspace routing metadata.
- Add workspace worktree recovery, concurrency coverage, and release documentation.
Files changed:
.changeset/fn-034-workspace-worktree-routing.md | 7 ++
docs/architecture.md | 1 +
...workspace-worktrees-concurrent-merge.pg.test.ts | 36 +++++++
packages/core/src/store.ts | 10 ++
packages/core/src/task-store/task-mutation-ops.ts | 60 +++++++++++-
.../executor-workspace-session-cwd.test.ts | 29 ++++--
packages/engine/src/__tests__/self-healing.test.ts | 17 ++--
.../workspace-root-worktree-routing.test.ts | 107 +++++++++++++++++++++
.../create-authoritative-workflow-seams.ts | 48 ++++++---
.../executor/ensure-graph-custom-node-worktree.ts | 45 +++++++-
.../executor/ensure-task-worktree-for-planning.ts | 38 ++++++--
.../src/executor/reset-steps-if-work-lost.ts | 12 ++-
.../engine/src/executor/run-graph-custom-node.ts | 83 ++++++++++++++--
packages/engine/src/executor/run-implementation.ts | 59 ++++++++++--
.../src/executor/workspace-config-resolver.ts | 30 +++++-
.../src/executor/workspace-review-per-repo.ts | 29 +++++-
.../executor/worktree-missing-session-recovery.ts | 26 ++++-
packages/engine/src/self-healing.ts | 50 +++++++---
.../self-healing/auto-recover-worktree-session.ts | 31 +++++-
.../engine/src/worktree/worktree-acquisition.ts | 65 +++++++++++-
20 files changed, 702 insertions(+), 81 deletions(-)
Fusion-Task-Id: FN-034
Fusion-Task-Lineage: 59c5f273-d676-4b7f-b006-c12dc6c3abe6
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-08-20 03:56:41 +00:00
Fusion Agent
c3ff663c1c
FN-030: route refinement tasks directly to planning
...
Route refinement and duplicate-task handling through the planning path while preserving task metadata and API behavior.\n\n- Route CLI refinement commands directly into planning.\n- Harden dependency updates and duplicate-task refinement persistence.\n- Expand PostgreSQL, CLI, and dashboard authorization coverage.\n- Document the refined task lifecycle and add the published-package changeset.\n\nFiles changed:\n .changeset/fn-030-refinement-planning-route.md | 7 ++\n docs/architecture.md | 20 ++--\n docs/task-management.md | 11 +-\n packages/cli/src/commands/__tests__/task.test.ts | 9 +-\n packages/cli/src/commands/task.ts | 2 +-\n .../postgres/refine-duplicate-task.pg.test.ts | 130 +++++++++++++++++++++\n .../__tests__/postgres/store-comments.pg.test.ts | 32 +++++\n packages/core/src/task-store/update-task-deps.ts | 17 +--\n packages/dashboard/app/__tests__/api-auth.test.ts | 5 +-\n 9 files changed, 207 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-030
Fusion-Task-Lineage: 885c0a9f-d8bf-4abf-9ec9-dca5a01648e8
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-08-20 03:55:39 +00:00
gsxdsm
84d9a59e7e
FN-9169: retry Windows worktree cleanup failures
...
Make clean-room removal resilient to transient Windows filesystem locks without weakening worktree ownership safeguards.
- add bounded errno-based directory removal retries with Windows read-only recovery
- reuse cleanup retries across AI merge teardown, self-healing sweeps, and native backend fallback
- preserve residual registrations and expose retry outcomes through cleanup audit metadata
- cover retry, idempotency, residual, and ownership-aware cleanup behavior
Files changed:
.../fn-9169-windows-ai-merge-worktree-cleanup.md | 7 +
docs/architecture.md | 4 +-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 195 ++++++++++++++++++++-
.../__tests__/self-healing-tempdir-sweep.test.ts | 109 ++++++++++--
.../engine/src/__tests__/worktree-backend.test.ts | 39 ++++-
.../src/__tests__/worktree-removal-retry.test.ts | 64 +++++++
packages/engine/src/merge/merger-ai-worktree.ts | 103 ++++++-----
packages/engine/src/self-healing.ts | 26 ++-
packages/engine/src/worktree/worktree-backend.ts | 15 +-
.../engine/src/worktree/worktree-removal-retry.ts | 110 ++++++++++++
10 files changed, 592 insertions(+), 80 deletions(-)
Fusion-Task-Id: FN-9169
Fusion-Task-Lineage: 4719bd4f-27bf-4a2b-8f31-350658523127
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 20:25:18 -07:00
gsxdsm
416c6a0215
FN-9170: Preserve structured merge failure sentinels
...
Keep merge-unavailable intact across workflow merge dispatch so graph routing receives the engine's structured result.
- preserve merge-unavailable alongside implementation-incomplete during primitive classification
- cover direct and legacy merge paths, audit context, normalization, and non-terminal retry behavior
- document the structured sentinel invariant and add a patch changeset
Files changed:
.changeset/fn-9170-merge-unavailable.md | 7 ++
docs/architecture.md | 2 +
.../merge-unavailable-classification.test.ts | 113 +++++++++++++++++++++
.../src/__tests__/workflow-merge-nodes.test.ts | 47 ++++++++-
.../engine/src/workflows/workflow-merge-nodes.ts | 13 ++-
5 files changed, 176 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-9170
Fusion-Task-Lineage: 99cc501f-8a25-49f5-b81a-74dd2e6e872b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 20:08:05 -07:00
gsxdsm
d280fa6f54
FN-9166: preserve implementation-incomplete merge failures
...
Keep structured incomplete-implementation failures intact so graph recovery can resume or fail closed without retrying a no-op merge.
- Preserve normalized implementation-incomplete reasons during direct merge-attempt classification.
- Cover primitive, legacy seam, resumable, fail-closed, and cancellation paths.
- Document the merge-boundary invariant and add a patch changeset.
Files changed:
.../fn-9166-preserve-implementation-incomplete.md | 7 ++
docs/architecture.md | 2 +-
.../merge-node-paused-abort-retryable.test.ts | 76 ++++++++++++++++++++++
.../__tests__/workflow-merge-cancellation.test.ts | 15 ++++-
.../src/__tests__/workflow-merge-nodes.test.ts | 46 +++++++++++++
.../engine/src/workflows/workflow-merge-nodes.ts | 13 +++-
6 files changed, 155 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-9166
Fusion-Task-Lineage: 1b7946bf-62e3-42f0-8c8c-09230fef22bb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 19:12:28 -07:00
gsxdsm
7b55a02e51
FN-9157: fix workflow merge boundary proof and retry routing
...
Make workflow merge admission accept valid foreach completion and terminate retries when proof is unavailable.
- Treat fully terminal live foreach steps as implementation proof for Review Level 0 workflows.
- Preserve merge-boundary-unproven as a terminal graph failure and park blocked retries visibly.
- Add unit, graph-boundary, and PostgreSQL regression coverage plus operator documentation and a patch changeset.
Files changed:
.changeset/fn-9157-merge-boundary.md | 7 +++
docs/architecture.md | 4 ++
docs/workflow-steps.md | 6 ++
.../src/__tests__/workflow-merge-proof.test.ts | 11 +++-
packages/core/src/workflow-merge-proof.ts | 20 +++++--
.../src/__tests__/executor-graph-boundary.test.ts | 64 +++++++++++++++++++++-
...xecutor-merge-boundary-foreach-proof.pg.test.ts | 10 ++++
.../__tests__/merge-boundary-unproven-park.test.ts | 48 ++++++++++++++++
.../create-authoritative-workflow-primitives.ts | 13 ++++-
.../create-authoritative-workflow-seams.ts | 6 +-
.../executor/evaluate-workflow-merge-boundary.ts | 18 +++++-
.../executor/route-graph-merge-failure-to-retry.ts | 26 ++++++++-
packages/engine/src/executor/task-predicates.ts | 2 +
.../engine/src/executor/workflow-merge-boundary.ts | 29 +++++++---
.../engine/src/workflows/workflow-merge-nodes.ts | 13 +++++
15 files changed, 253 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-9157
Fusion-Task-Lineage: 7c68dfe2-28fb-4353-9ae6-df0ddbaf799a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 18:16:49 -07:00
ischindl
c84924b99a
fix(RUFU-076): stop self-healing git storm on paused projects and bound repair sweeps ( #3473 )
...
**Problem:** Self-healing repeatedly spawned git children
(status/rev-parse/for-each-ref) for paused/idle projects on every sweep,
and certain repair sweeps ran unbounded — a spawn/git storm that spiked
CPU and I/O on the production host.
**Fix:** Bound self-healing git work for paused projects (skip/cooldown)
and cap the repair sweeps so the engine stops churning git processes
when there is nothing actionable. Includes in-process-runtime pause-gate
+ self-healing pause-storm regression tests.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Bug Fixes**
- Paused projects no longer trigger Git-intensive self-healing
maintenance.
- Pause and unpause transitions now correctly stop and resume
maintenance scheduling.
- Global and engine-level pauses are handled consistently.
- **Improvements**
- Active-project Git maintenance is limited to an hourly cadence,
reducing unnecessary activity.
- Merge-metadata recovery is capped at 25 items per cycle for more
predictable processing.
- Database and filesystem housekeeping continues during pauses.
- **Documentation**
- Updated architecture and runtime documentation to describe pause-aware
maintenance behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-17 15:05:10 -07:00
Phil Larson
0159ef8784
fix: preserve gridlock notification cooldown ( #3469 )
...
## Summary
- preserve the gridlock notification wall-clock cooldown across
transient detector clears
- add a regression test for clear-then-rediscover behavior during the
cooldown
- document the cooldown contract and add a patch changeset
## Test plan
- `corepack pnpm --filter @fusion/engine exec vitest run
src/__tests__/notifier.test.ts --project=engine-default
--reporter=verbose -t 'suppresses the same gridlock after a transient
resolution during cooldown'`
- `corepack pnpm --filter @fusion/engine typecheck`
- `corepack pnpm build`
- `corepack pnpm changeset status --output
/tmp/fusion-gridlock-changeset-status.json`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Bug Fixes**
- Gridlock notifications now remain suppressed during the 15-minute
cooldown, even if the condition temporarily clears and reappears.
- Prevents repeated notifications caused by transient detector-state
changes.
- **Documentation**
- Updated gridlock notification behavior documentation to reflect the
persistent cooldown.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-16 17:46:23 -07:00
gsxdsm
87e673baf7
feat(merge): remove the pre-commit diff-volume gate
...
The gate blocked approved clean-room squashes on per-file shrinkage with no
override path ("AI merge diff-volume gate blocked the approved squash").
Removed by operator decision: delete checkDiffVolume/DiffVolumeRegressionError,
the merge:diff-volume-blocked audit event, the runDiffVolumeGate call sites in
every legacy squash finalizer, the AI-merge pre-land check, and the
mergeDiffVolume* settings. File scope remains the pre-land guard; the
post-squash audit policy remains the shrinkage backstop.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 22:42:39 -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
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
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
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
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
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
f7bf3f91d1
FN-9022: add task recommendations to Insights
...
Expose actionable task recommendations in the Insights view.
- Add recommendation list API, client hook, and Insights rendering states.
- Localize recommendation content and document the Insights workflow.
- Cover recommendation retrieval, routes, hooks, API, and view behavior.
Files changed:
.changeset/fn-9022-insights-recommendations.md | 7 ++
docs/architecture.md | 1 +
docs/dashboard-guide.md | 3 +-
.../__tests__/task-recommendations-list.test.ts | 136 +++++++++++++++++++++
packages/core/src/index.ts | 2 +-
packages/core/src/store.ts | 5 +-
packages/core/src/task-store/reads.ts | 48 +++++++-
packages/core/src/types.ts | 4 +
packages/core/src/types/task/task-core.ts | 19 +++
packages/dashboard/app/__tests__/api-tasks.test.ts | 24 ++++
packages/dashboard/app/api/legacy.ts | 3 +
packages/dashboard/app/api/tasks/tasks.ts | 22 ++++
packages/dashboard/app/components/InsightsView.css | 27 ++++
packages/dashboard/app/components/InsightsView.tsx | 47 +++++--
.../app/components/__tests__/InsightsView.test.tsx | 117 ++++++++++++++++++
.../hooks/__tests__/useTaskRecommendations.test.ts | 130 ++++++++++++++++++++
.../dashboard/app/hooks/useTaskRecommendations.ts | 116 ++++++++++++++++++
.../__tests__/task-recommendation-routes.test.ts | 26 ++++
.../src/routes/register-task-workflow-routes.ts | 33 +++++
packages/i18n/locales/en/app.json | 11 +-
packages/i18n/locales/es/app.json | 11 +-
packages/i18n/locales/fr/app.json | 11 +-
packages/i18n/locales/ko/app.json | 11 +-
packages/i18n/locales/pt-BR/app.json | 11 +-
packages/i18n/locales/zh-CN/app.json | 11 +-
packages/i18n/locales/zh-TW/app.json | 11 +-
packages/i18n/src/resources.d.ts | 9 ++
27 files changed, 835 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-9022
Fusion-Task-Lineage: b83f1074-37af-4f87-9ec0-2bd9bb9bf64d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 22:18:18 -07:00
ischindl
d4db29f3e6
fix(dashboard): surface mergeTaskSnapshot on useTasks mocks to fix task-detail tests ( #3409 )
...
## Problem
`app/components/__tests__/navigation-history.test.tsx`,
`TaskDetail.swipe-back.test.tsx`, and
`TaskDetail.mobile-transition.board-panel.test.tsx` fail to load.
FN-8796 (`132026545`, "stabilize task-detail lifecycle snapshots") added
`mergeTaskSnapshot` to `hooks/useTasks.ts`, which
`App.tsx`/`MainContent.tsx` now import. The curated test suites that
`vi.mock("../../hooks/useTasks")` still only expose `useTasks`, so the
fixture throws at import time:
```
No "mergeTaskSnapshot" export is defined on the useTasks mock
```
Confirmed on `origin/main`: `mergeTaskSnapshot` is present in
`useTasks.ts` and imported by `App.tsx`, while these tests' `vi.mock`
shims don't surface it.
## Fix
Update the mocks to surface every export the rendered components import,
using a partial `importOriginal` mock so `mergeTaskSnapshot` keeps its
real implementation (a `vi.fn()` returning `undefined` would make
`App.tsx:2179` `liveTask.id` throw):
```ts
vi.mock("../../hooks/useTasks", async (importOriginal) => {
const actual = await importOriginal();
return { ...actual, useTasks: (_options?: any) => mockUseTasks() };
});
```
## Verification
- `FUSION_DASHBOARD_DEEP=1 vitest run navigation-history swipe-back
board-panel` → **14 files, 116 tests passed**
- Pre-existing on `origin/main`, fixes a regression introduced by
FN-8796.
## Scope
Tests + a one-line docs note only. No production behavior change.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Documentation**
- Documented improved worktree recovery behavior, including safer
handling of incomplete, inactive, and unregistered directories.
- Added guidance for recovery across different storage locations and
bounded cleanup of recognized entries.
- Clarified protections that prevent internal recovery containers from
being treated as worktrees.
- **Tests**
- Improved dashboard test coverage and reliability for task detail
rendering, mobile transitions, swipe-back navigation, and navigation
history.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Fusion <noreply@runfusion.ai >
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com >
2026-08-11 11:28:50 -10:00
gsxdsm
6ae9299576
FN-8953: defer terminal wedge alerts during recovery
...
Hold terminal wedge alerts until their recovery window has elapsed.
- Persist and settle pending wedge notifications across restarts.
- Clear pending alerts on task progress and reconcile expired holds during self-healing.
- Expose the settle window in notification settings with coverage for store and notification flows.
Files changed:
.changeset/fn-8953-wedge-settle-window.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 3 +-
docs/settings-reference.md | 1 +
.../core/src/__tests__/store-wedge-pending.test.ts | 56 +++++
packages/core/src/config/settings-schema.ts | 1 +
packages/core/src/store.ts | 46 ++++
packages/core/src/types/settings/settings-scope.ts | 2 +
packages/core/src/types/task/task-core.ts | 15 ++
.../app/components/settings/save-split.ts | 1 +
.../sections/NotificationsSection.search.ts | 9 +
.../settings/sections/NotificationsSection.tsx | 15 ++
.../settings-default-descriptions.test.tsx | 1 +
...self-healing-pending-wedge-notification.test.ts | 148 ++++++++++++
.../__tests__/notification-service.test.ts | 7 +-
.../__tests__/task-wedge-notification.test.ts | 258 ++++++++++++++++++++-
.../src/notification/notification-service.ts | 260 +++++++++++++++++++++
packages/engine/src/self-healing.ts | 38 +++
packages/i18n/locales/en/app.json | 2 +
19 files changed, 850 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8953
Fusion-Task-Lineage: fd5b5827-c69d-409f-86d5-01ff23405ee3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 12:34:47 -07:00
gsxdsm
4c9f14e21a
FN-8965: restore explicit intake owner routing
...
Restore deliberate engineer and authorized override assignments while preserving executor-only automatic routing.
- Accept eligible engineers as explicit intake owners through normal and reserved-ID task creation.
- Honor metadata-authorized role overrides without weakening runtime, state, or assignment-policy gates.
- Add resolver and PostgreSQL coverage plus release and architecture documentation.
Files changed:
.../fn-8965-intake-owner-explicit-routing.md | 7 +++
docs/architecture.md | 2 +-
.../postgres/create-task-reserved-id.pg.test.ts | 29 ++++++++++++
.../__tests__/task-intake-owner-resolver.test.ts | 51 ++++++++++++++++++++--
packages/core/src/task-store/task-creation.ts | 7 +++
.../core/src/tasks/task-intake-owner-resolver.ts | 38 ++++++++++++----
6 files changed, 121 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8965
Fusion-Task-Lineage: 4ecf7fc8-e966-49c8-abf6-e50ae26d8224
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 19:31:21 -07:00
gsxdsm
d749a11a5b
FN-8923: document orphan merge durable-write fences
...
Record the bounded cancellation frontier for orphaned AI merge bodies.
- Add AST-derived durable-writer inventory and drift guard for the pinned merge closure.
- Characterize orphan and successor merge-lane writes with production-path fixtures.
- Document unresolved follow-ups and link the fence from the architecture guide.
Files changed:
docs/architecture.md | 2 +-
.../merge-orphan-body-durable-write-fences.md | 92 +
.../__tests__/_merge-durable-write-callsites.ts | 938 ++
.../merge-orphan-durable-write-inventory.json | 9965 ++++++++++++++++++++
.../merge-orphan-body-durable-writes.test.ts | 348 +
...ge-orphan-durable-write-inventory-drift.test.ts | 56 +
packages/engine/src/merge/merger-ai.ts | 6 +
packages/engine/src/project-engine.ts | 6 +
8 files changed, 11412 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8923
Fusion-Task-Lineage: 5b2d278c-1626-439a-affd-077f2de2aef1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 17:55:46 -07:00
gsxdsm
3143f9536f
FN-8908: auto-recover terminal task failures
...
Recover generic terminal task failures through a bounded, durable retry budget before escalating them to operators.
- add fenced task-store recovery claims, retries, budget resets, and audit events
- defer terminal-failure notifications until recovery is exhausted while preserving a single escalation
- expose operator retry budget reset and cover recovery lifecycle behavior
Files changed:
.../fn-8908-terminal-failure-auto-recovery.md | 7 +
AGENTS.md | 1 +
docs/agents.md | 2 +
docs/architecture.md | 2 +
packages/cli/src/commands/task.ts | 2 +
packages/cli/src/extension.ts | 2 +
...terminal-failure-auto-recovery-store.pg.test.ts | 108 +++++++++
.../terminal-failure-auto-recovery.test.ts | 60 +++++
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 179 ++++++++++++++-
.../core/src/task-store/archive-lifecycle-2.ts | 15 ++
packages/core/src/task-store/moves.ts | 48 +++-
packages/core/src/task-store/persistence.ts | 18 +-
packages/core/src/task-store/project-store-ops.ts | 4 +-
.../src/task-store/workflow-task-create-ops.ts | 4 +-
packages/core/src/tasks/index.ts | 1 +
.../src/tasks/terminal-failure-auto-recovery.ts | 114 ++++++++++
packages/core/src/types/task/task-core.ts | 24 ++
.../src/routes/register-task-workflow-routes.ts | 2 +
...-healing-terminal-failure-auto-recovery.test.ts | 199 ++++++++++++++++
.../__tests__/notification-service.test.ts | 86 ++++++-
.../__tests__/task-wedge-notification.test.ts | 2 +-
.../src/notification/notification-service.ts | 103 +++++++--
.../src/notification/task-wedge-notification.ts | 30 ++-
packages/engine/src/self-healing.ts | 251 ++++++++++++++++++++-
packages/engine/src/util/run-audit.ts | 7 +
27 files changed, 1240 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-8908
Fusion-Task-Lineage: 99e96b16-0306-41f1-87da-8623d69735f7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 16:53:51 -07:00
gsxdsm
00ddafd5fe
FN-8845: persist deterministic spec alignment
...
Persist approved-plan drift alignment on linked mission features.
- Store spec alignment across PostgreSQL and SQLite mission feature projections
- Reconcile and render durable alignment instead of browser-side task joins
- Preserve migration identities and cover drift persistence regressions
Files changed:
docs/architecture.md | 2 +
docs/missions.md | 2 +-
.../core/src/__tests__/planner/spec-lock.test.ts | 1 +
.../src/__tests__/postgres/schema-applier.test.ts | 9 ++++-
.../async-stores/async-mission-store-queries.ts | 5 +++
packages/core/src/missions/mission-store.ts | 9 ++++-
packages/core/src/missions/mission-types.ts | 10 +++++
packages/core/src/planner/spec-lock.ts | 7 +++-
.../0053_mission_feature_spec_alignment.sql | 3 ++
packages/core/src/postgres/schema-applier.ts | 13 +++++-
packages/core/src/postgres/schema/project.ts | 2 +
packages/dashboard/app/api/missions/missions.ts | 2 +
.../dashboard/app/components/MissionManager.tsx | 40 ++++++------------
packages/dashboard/app/components/mission-types.ts | 2 +
.../src/__tests__/plan-approval-status.pg.test.ts | 4 +-
.../src/__tests__/mission-feature-sync.test.ts | 37 ++++++++++++++++-
.../src/__tests__/spec-drift-reconciler.test.ts | 14 +++++++
packages/engine/src/missions/mission-autopilot.ts | 17 +++++---
.../engine/src/missions/mission-feature-sync.ts | 47 +++++++++++++++++++++-
packages/engine/src/project-engine.ts | 3 +-
packages/engine/src/scheduler.ts | 40 +++++++++++-------
packages/engine/src/spec-drift-reconciler.ts | 5 +++
22 files changed, 215 insertions(+), 59 deletions(-)
Fusion-Task-Id: FN-8845
Fusion-Task-Lineage: d4a30472-f1c3-41ba-a61b-3f2be1ad32ab
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 11:50:56 -07:00
gsxdsm
82b5d78bf8
FN-8945: invalidate approved lineage fingerprints
...
Invalidate stale approval evidence atomically when a parent task leaves lineage.
- Lock and revalidate lineage children before parent deletion or archival.
- Clear affected approvals, append invalidation evidence, and reconcile cleared children.
- Cover lifecycle races, evidence collisions, and async archive/delete paths.
Files changed:
.changeset/fn-8945-lineage-approval-invalidation.md | 7 +
docs/architecture.md | 6 +
.../lineage-approval-invalidation.pg.test.ts | 379 +++++++++++++++++++++
.../planning-lifecycle-advisory-lock.pg.test.ts | 58 ++++
.../postgres/runtime-lifecycle-async.test.ts | 4 +
.../__tests__/postgres/taskstore-lifecycle.test.ts | 3 +-
packages/core/src/postgres/advisory-locks.ts | 164 ++++++---
packages/core/src/store.ts | 26 +-
.../core/src/task-store/archive-lifecycle-2.ts | 123 +++++--
.../src/task-store/async/async-archive-lineage.ts | 27 +-
.../core/src/task-store/async/async-lifecycle.ts | 89 +--
.../task-store/lineage-approval-invalidation.ts | 168 +++++++++
12 files changed, 939 insertions(+), 115 deletions(-)
Fusion-Task-Id: FN-8945
Fusion-Task-Lineage: be7dd6c8-5411-4b0e-8734-9fe63b9d1d9f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 08:48:47 -07:00
gsxdsm
e610c72034
FN-8943: reconcile spec-lock divergence history
...
Preserve prior divergence when a task is re-locked after plan changes.
- Persist immutable spec locks, current-plan evidence, and drift reports.
- Reconcile retained divergence into re-approved alignment state across engine, API, and dashboard views.
- Fence Plan Review acceptance and schema upgrades while retaining migration identity parity.
Files changed:
.changeset/fn-8845-spec-lock-drift-report.md | 7 +
.changeset/fn-8943-spec-lock-divergence.md | 7 +
docs/architecture.md | 17 +-
docs/dashboard-guide.md | 3 +
docs/missions.md | 4 +
.../core/src/__tests__/planner/spec-lock.test.ts | 158 ++++++++++++++
.../src/__tests__/postgres/schema-applier.test.ts | 30 ++-
.../postgres/task-dependency-mutation.pg.test.ts | 74 +++++++
packages/core/src/index.gate.ts | 4 +
packages/core/src/index.ts | 4 +
packages/core/src/planner/drift-report.ts | 152 +++++++++++++
packages/core/src/planner/spec-lock.ts | 182 ++++++++++++++++
.../migrations/0050_spec_lock_drift_report.sql | 29 +++
.../0051_spec_lock_source_revision_bigint.sql | 3 +
packages/core/src/postgres/schema-applier.ts | 25 ++-
packages/core/src/postgres/schema/project.ts | 13 ++
packages/core/src/store.ts | 242 ++++++++++++++++++++-
.../core/src/task-store/branch-and-pr-entities.ts | 32 ++-
packages/core/src/task-store/project-store-ops.ts | 34 ++-
packages/core/src/task-store/task-update.ts | 66 +++++-
packages/core/src/task-store/update-task-deps.ts | 31 ++-
packages/dashboard/app/api.ts | 3 +
packages/dashboard/app/api/tasks/tasks.ts | 22 ++
.../dashboard/app/components/MissionManager.css | 21 ++
.../dashboard/app/components/MissionManager.tsx | 41 +++-
.../dashboard/app/components/TaskDetailModal.css | 26 +++
.../dashboard/app/components/TaskDetailModal.tsx | 62 +++++-
.../__tests__/TaskDetailModal.spec-lock.test.tsx | 80 +++++++
.../__tests__/TaskDetailModal.test-helpers.ts | 2 +
.../src/__tests__/plan-approval-status.pg.test.ts | 81 ++++++-
.../src/routes/register-task-workflow-routes.ts | 59 ++++-
.../src/__tests__/mission-feature-sync.test.ts | 15 +-
.../src/__tests__/spec-drift-reconciler.test.ts | 108 +++++++++
.../engine/src/executor/execute-workflow-graph.ts | 49 ++++-
.../engine/src/missions/mission-feature-sync.ts | 55 ++++-
packages/engine/src/project-engine.ts | 33 +++
packages/engine/src/spec-drift-reconciler.ts | 105 +++++++++
packages/engine/src/triage.ts | 29 +++
38 files changed, 1842 insertions(+), 66 deletions(-)
Fusion-Task-Id: FN-8943
Fusion-Task-Lineage: 2a7f8a38-99aa-4c4b-8c36-41d14c466d21
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 02:56:58 -07:00
Phil Larson
a5c3476cb2
fix: harden pinned worktree recovery cleanup ( #3402 )
...
## Summary
- serialize pinned-path classification, orphan preservation, quarantine
reconciliation, and recreation under one reservation
- preserve cross-filesystem orphans atomically beside the configured
worktree root and retain the newest 10 generated entries per recovery
root
- exclude recovery containers from pool and self-healing scans, with
fail-closed symlink and active-session guards
- document recovery location and retention behavior
## Test plan
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/worktree-acquisition.test.ts
src/__tests__/worktree-paths.test.ts src/__tests__/worktree-pool.test.ts
src/__tests__/self-healing-tempdir-sweep.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm --filter @fusion/engine build`
- `pnpm test:gate:static`
- `pnpm check:changesets --strict`
- `pnpm check:fnxc-future-dates`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Preserves orphaned pinned worktrees during recovery, including across
filesystems.
* Retains the 10 most recent recovery entries and safely skips active or
invalid entries.
* Keeps recovery data separate from normal worktree discovery, cleanup,
and capacity checks.
* Adds safeguards for path containment, active-session ownership, and
concurrent recovery.
* **Bug Fixes**
* Prevents pinned worktree data from being lost during recreation or
quarantine cleanup.
* Ensures recovery cleanup failures do not interrupt worktree
acquisition.
* **Documentation**
* Documented orphan recovery, retention, fallback behavior, and cleanup
safeguards.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-09 19:39:39 -10:00
gsxdsm
1474c617b5
FN-8918: suppress false parked-task alerts
...
Prevent stale self-healing observations from notifying operators about active or intentionally held tasks.
- Require ownerless self-healing proof before classifying a task as wedged.
- Revalidate live tasks and suppress notifications for progressing, held, deleted, archived, or complete-lane rows.
- Cover reviewing, typed not-found reads, and archived episode resolution; document the behavior.
- Add a patch changeset for the notification fix.
Files changed:
.changeset/fn-8918-false-parked-task-alerts.md | 7 ++
docs/agents.md | 2 +-
docs/architecture.md | 2 +-
packages/engine/src/notification/__tests__/task-wedge-notification.test.ts | 121 +++++++++++++++++++--
packages/engine/src/notification/notification-service.ts | 34 ++++--
packages/engine/src/notification/task-wedge-notification.ts | 21 +++-
6 files changed, 166 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8918
Fusion-Task-Lineage: 4da385aa-c625-40c5-a781-36becdf94fe5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 21:57:01 -07:00
gsxdsm
f5a9cf01b1
FN-8912: recover stale merge status after aborts
...
Clear orphaned transient merge statuses so bounded retries can proceed.
- Fence aborted merge generations from writing transient task statuses.
- Reconcile and clear unconfirmed merge stamps in the queue and stale-state recovery paths.
- Cover timeout, abort, retry, and self-healing behavior with regression tests.
Files changed:
.changeset/fn-8912-merge-abort-transient-status.md | 7 +
docs/architecture.md | 1 +
docs/task-management.md | 2 +-
.../merge-abort-clears-transient-status.test.ts | 410 +++++++++++++++++++++
.../src/__tests__/merge-active-status.test.ts | 21 ++
packages/engine/src/__tests__/self-healing.test.ts | 231 ++++++++++--
packages/engine/src/merge/merge-active-status.ts | 18 +
packages/engine/src/merge/merger-ai.ts | 34 +-
packages/engine/src/project-engine.ts | 49 ++-
packages/engine/src/self-healing.ts | 72 +++-
10 files changed, 810 insertions(+), 35 deletions(-)
Fusion-Task-Id: FN-8912
Fusion-Task-Lineage: 8b2b7506-ed3e-41d4-9e54-59f45abc0020
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 20:14:10 -07:00
gsxdsm
6bd8004ba1
FN-8915: document agent activity API contract
...
Publish an inspectable contract for durable agent-activity history and pagination.
- Define the route wire shape, cursor semantics, retention, and SSE recovery behavior.
- Add PostgreSQL and dashboard coverage for documented pagination and truncation guarantees.
- Link architecture and diagnostics guidance to the canonical contract and validate its prerequisite lineage.
Files changed:
.changeset/fn-8864-agent-activity-events.md | 2 +-
AGENTS.md | 1 +
docs/agent-activity-contract.md | 94 ++++++++++++++++++++++
docs/architecture.md | 2 +-
docs/diagnostics.md | 2 +-
.../agent-activity-cursor-contract.pg.test.ts | 90 +++++++++++++++++++++
.../src/__tests__/agent-activity-route.test.ts | 10 +++
.../src/__tests__/sse-agent-activity.test.ts | 12 ++-
scripts/check-fn-8864-ancestry.sh | 35 ++++++++
9 files changed, 244 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8915
Fusion-Task-Lineage: da3f8c96-3b58-4e6d-a413-c51bdd643f26
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 15:58:54 -07:00
gsxdsm
8a7ab1dedc
FN-8911: allow direct database URLs for planning locks
...
Allow planning lifecycle locks to use non-pooled runtime PostgreSQL connections without a duplicate migration URL.
- Select runtime-direct endpoints for direct DATABASE_URL connections and retain migration overrides for pooled endpoints.
- Preserve lifecycle transport failures across triage retries and expose lock helpers through the core barrel.
- Document the connection behavior and add resolver, advisory-lock, and triage regression coverage.
Files changed:
.../fn-8911-direct-database-url-planning-lock.md | 7 +
docs/architecture.md | 2 +-
docs/multi-project.md | 4 +-
.../__tests__/postgres/backend-resolver.test.ts | 43 +++++-
.../planning-lifecycle-advisory-lock.pg.test.ts | 28 +++-
packages/core/src/index.ts | 2 +
packages/core/src/postgres/advisory-locks.ts | 6 +-
packages/core/src/postgres/backend-resolver.ts | 29 +++-
packages/core/src/postgres/index.ts | 5 +
...ge-planning-lifecycle-transport-failure.test.ts | 159 +++++++++++++++++++++
packages/engine/src/triage.ts | 100 +++++++++++--
11 files changed, 360 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-8911
Fusion-Task-Lineage: ac2ec0d6-f409-40ba-a678-6dd7da7006dd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 15:24:21 -07:00
gsxdsm
6bd178bdcf
FN-8864: add durable agent activity stream
...
Add a persisted, project-scoped agent activity feed with query and live delivery surfaces.
- Store sequenced, attributed activity events with privacy-safe metadata and retention.
- Emit activity across agents, workflow execution, reviews, approvals, merges, and recovery.
- Provide paginated API history and resilient SSE tailing with coverage and documentation.
- Renumber the activity migration to 0049 after reconciling main’s 0048 GitHub check-state migration.
Files changed:
.changeset/fn-8864-agent-activity-events.md | 7 +
docs/architecture.md | 8 +
docs/diagnostics.md | 4 +
docs/storage.md | 1 +
.../__tests__/agent-activity-attribution.test.ts | 21 +
.../agent-activity-metadata-hygiene.test.ts | 60 +++
.../src/__tests__/agent-activity-writers.test.ts | 94 +++++
.../postgres/agent-activity-events.pg.test.ts | 57 +++
.../src/__tests__/postgres/schema-applier.test.ts | 34 +-
packages/core/src/agents/agent-store.ts | 24 ++
packages/core/src/agents/approval-request-store.ts | 15 +-
packages/core/src/index.ts | 4 +
.../0049_fn_8864_agent_activity_events.sql | 24 ++
packages/core/src/postgres/schema-applier.ts | 15 +-
packages/core/src/postgres/schema/project.ts | 19 +-
packages/core/src/store.ts | 17 +
.../core/src/task-store/agent-activity-outbox.ts | 75 ++++
.../src/task-store/async/async-agent-activity.ts | 71 ++++
packages/core/src/types.ts | 2 +
packages/core/src/types/agents/agents.ts | 79 ++++
packages/dashboard/app/api.ts | 54 +++
.../src/__tests__/agent-activity-route.test.ts | 68 ++++
.../src/__tests__/sse-agent-activity.test.ts | 315 +++++++++++++++
packages/dashboard/src/routes/README.md | 2 +-
.../src/routes/register-setup-activity-routes.ts | 19 +-
packages/dashboard/src/sse.ts | 139 ++++++-
.../src/__tests__/agent-activity-writers.test.ts | 442 +++++++++++++++++++++
packages/engine/src/executor.ts | 110 ++++-
packages/engine/src/merger.ts | 15 +-
packages/engine/src/self-healing.ts | 35 +-
30 files changed, 1809 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8864
Fusion-Task-Lineage: 4938f35b-a0bc-4eb3-905c-178fed859cc6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 14:39:17 -07:00
gsxdsm
3ca5d4d643
FN-8913: prioritize older tasks in hold-release scheduling
...
Rank eligible hold-release candidates by priority, age, and task ID to prevent newer work from starving older peers.
- Reuse the core priority-age-ID comparator for hold-release evaluation.
- Add regression coverage for priority, age, dependency, and overlap scheduling behavior.
- Document the production hold-release fairness order and add a patch changeset.
Files changed:
.changeset/fn-8913-older-first-scheduling.md | 7 ++
docs/architecture.md | 4 +-
.../hold-release-priority-age-order.test.ts | 113 +++++++++++++++++++++
.../__tests__/scheduler-overlap-starvation.test.ts | 76 ++++++++++++++
packages/engine/src/execution/hold-release.ts | 17 +++-
5 files changed, 212 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8913
Fusion-Task-Lineage: 89910df9-9d3a-404c-85fa-f0797e8fa001
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 14:23:24 -07:00
gsxdsm
ad91795dac
FN-8843: assign eligible executors to new tasks
...
Assign durable executor ownership during shared task intake.
- Resolve eligible executor owners for API, dashboard, and reserved-ID task creation.
- Preserve explicit assignments, reject invalid owners, and audit unresolved ownerless intake.
- Cover routing and PostgreSQL intake behavior with regression tests and document the contract.
Files changed:
.changeset/fn-8843-intake-agent-assignment.md | 7 +
docs/architecture.md | 6 +
docs/workflow-steps.md | 12 +-
.../postgres/create-task-reserved-id.pg.test.ts | 187 +++++++++++++++
.../__tests__/task-intake-owner-resolver.test.ts | 141 ++++++++++++
packages/core/src/store.ts | 29 ++-
packages/core/src/task-store/task-creation.ts | 251 +++++++++++++++++----
.../core/src/tasks/task-intake-owner-resolver.ts | 239 ++++++++++++++++++++
.../dashboard/src/__tests__/routes-tasks.test.ts | 47 ++++
.../__tests__/task-create-intake-owner.pg.test.ts | 195 ++++++++++++++++
.../src/routes/register-task-workflow-routes.ts | 12 +-
.../src/__tests__/workflow-agent-routing.test.ts | 19 +-
.../engine/src/agents/workflow-agent-router.ts | 37 ++-
13 files changed, 1120 insertions(+), 62 deletions(-)
Fusion-Task-Id: FN-8843
Fusion-Task-Lineage: b94728b4-d9e8-4a26-8fbc-7096eb797839
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 14:12:49 -07:00
gsxdsm
c7c879905b
FN-8903: add event-driven GitHub CI merge checks
...
Persist ingested GitHub CI signals and use them to assess merge readiness.
- Store project-scoped GitHub check states with retention maintenance.
- Resolve configured required checks from ingested signals during PR merge decisions.
- Add delivery, lifecycle, persistence, and retention coverage with operator documentation.
Files changed:
.changeset/fn-8903-event-driven-checks.md | 7 ++
docs/architecture.md | 1 +
docs/settings-reference.md | 2 +-
docs/signals-connectors.md | 2 +-
.../src/commands/__tests__/task-lifecycle.test.ts | 50 ++++++++-
packages/cli/src/commands/task-lifecycle.ts | 7 +-
.../core/src/__tests__/ingested-checks.test.ts | 66 +++++++++++
.../postgres/github-check-states.pg.test.ts | 71 ++++++++++++
packages/core/src/config/index.ts | 1 +
packages/core/src/config/ingested-checks.ts | 32 ++++++
packages/core/src/index.ts | 10 ++
.../0048_fn_8903_github_check_states.sql | 32 ++++++
packages/core/src/postgres/schema-applier.ts | 15 ++-
packages/core/src/postgres/schema/project.ts | 29 ++++-
.../core/src/task-store/async/async-ci-checks.ts | 104 ++++++++++++++++++
packages/core/src/task-store/async/index.ts | 1 +
packages/core/src/types.ts | 2 +
packages/dashboard/src/__tests__/github.test.ts | 121 ++++++++++++++++++++-
.../src/__tests__/register-signal-routes.test.ts | 81 +++++++++++++-
packages/dashboard/src/github.ts | 74 +++++++++----
.../dashboard/src/routes/register-git-github.ts | 29 +++--
.../dashboard/src/routes/register-signal-routes.ts | 10 +-
.../src/routes/register-task-workflow-routes.ts | 14 ++-
packages/dashboard/src/signal-source.ts | 23 ++++
packages/dashboard/src/signal-sources/github.ts | 2 +
.../self-healing-github-check-retention.test.ts | 121 +++++++++++++++++++++
packages/engine/src/self-healing.ts | 23 ++++
27 files changed, 878 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8903
Fusion-Task-Lineage: b2643587-c568-4b6c-8b3a-d50a6165963d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 09:14:56 -07:00
gsxdsm
661b2cf7b3
FN-8899: document unified AI merge path
...
Clarify that approved work is merged exclusively through the clean-room AI merge workflow.
- Replace the legacy merger entry point with runAiMerge in the architecture overview.
- Mark aiMergeTask as retained, soft-deprecated, and inert.
Files changed:
docs/architecture.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Fusion-Task-Id: FN-8899
Fusion-Task-Lineage: 03436366-3f48-46c7-908e-ff97843b81d9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 07:22:31 -07:00
gsxdsm
3d6a908b95
FN-8898: document inert prerebase settings
...
Clarify that legacy prerebase settings are inert on the production merge path.
- Mark retained prerebase configuration and audit events as legacy-only.
- Add a static validator and tests preventing new prerebase callers.
- Update merge architecture, testing, and settings documentation.
Files changed:
AGENTS.md | 2 +-
docs/architecture.md | 3 +-
docs/settings-reference.md | 6 +-
docs/testing.md | 2 +-
package.json | 6 +-
packages/core/src/types/settings/settings-scope.ts | 32 +++--
.../src/errors/transient-merge-error-classifier.ts | 12 +-
packages/engine/src/merge/merger-auto-prerebase.ts | 12 +-
packages/engine/src/util/run-audit.ts | 2 +
scripts/__tests__/check-prerebase-inert.test.mjs | 73 +++++++++++
scripts/__tests__/run-static-gate-checks.test.mjs | 1 +
scripts/__tests__/verify-fast.test.mjs | 1 +
scripts/check-prerebase-inert.mjs | 146 +++++++++++++++++++++
scripts/lib/source-projection.mjs | 87 ++++++++++++
14 files changed, 359 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-8898
Fusion-Task-Lineage: 9cfd836d-17c2-44a0-a076-56fef0917935
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 06:01:02 -07:00
gsxdsm
c60a11607f
FN-8856: bound scheduler hold-release sweep work
...
Keep hold-release scheduling and dashboard health checks responsive under PostgreSQL load.
- Batch and cache workflow-selection reads for each hold-release pass.
- Bound sweep execution, prevent overlapping project passes, and expose sweep instrumentation.
- Time-bound PostgreSQL health probes and add regression coverage.
Files changed:
.changeset/fn-8856-hold-release-sweep-bounded.md | 7 +
docs/architecture.md | 6 +
docs/diagnostics.md | 4 +
.../__tests__/workflow-ir-selection-cache.test.ts | 77 ++++
packages/core/src/index.ts | 2 +
packages/core/src/store.ts | 6 +-
.../core/src/task-store/workflow-definitions.ts | 25 ++
.../core/src/workflows/workflow-ir-resolver.ts | 27 +-
.../__tests__/dashboard-postgres-health.test.ts | 76 ++++
.../dashboard/src/dashboard-postgres-health.ts | 34 +-
.../__tests__/hold-release-instrumentation.test.ts | 34 ++
.../hold-release-sweep-bounded-db-work.test.ts | 467 +++++++++++++++++++++
packages/engine/src/execution/hold-release.ts | 391 +++++++++--------
packages/engine/src/scheduler.ts | 56 ++-
14 files changed, 1021 insertions(+), 191 deletions(-)
Fusion-Task-Id: FN-8856
Fusion-Task-Lineage: 5fa55d95-0760-4c4d-8c6c-6e1805109b3c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 04:37:47 -07:00
gsxdsm
7745c59e63
FN-8880: align shared-member recovery consent tests
...
Align recovery expectations with the shared-member consent policy.
- Hold non-opted-in shared members when project auto-merge is off.
- Cover explicit per-task auto-merge opt-in during startup and self-healing recovery.
- Document the project-off consent rule for branch-group members.
Files changed:
AGENTS.md | 2 +-
docs/architecture.md | 4 +-
packages/engine/src/__tests__/project-engine.test.ts | 41 +++++++++++------
packages/engine/src/__tests__/self-healing.test.ts | 51 +++++++++++++++++++---
4 files changed, 75 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-8880
Fusion-Task-Lineage: 3118064d-59ca-4c2e-89a8-442ee8876cf8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 02:41:02 -07:00
gsxdsm
9c43736794
FN-8870: add structural approval and report mail
...
Add typed report and approval metadata to the mailbox contract.
- Define and validate structural mail kinds, report sections, and approval references.
- Let agents send validated reports while reserving approval mail for engine emission.
- Emit idempotent, fail-soft approval notifications and document the contract.
Files changed:
.changeset/fn-8870-structural-mail-contract.md | 7 ++
docs/agents.md | 2 +
docs/architecture.md | 4 +
.../message-metadata-structural-mail.test.ts | 25 ++++
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 30 +++++
packages/core/src/types/messaging/messages.ts | 21 ++++
...gent-tools-send-message-structural-mail.test.ts | 34 +++++
.../src/__tests__/approval-mail-emission.test.ts | 137 +++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 3 +
packages/engine/src/agent-tools.ts | 28 ++++-
packages/engine/src/agents/approval-mail.ts | 40 ++++++
packages/engine/src/executor.ts | 3 +
14 files changed, 334 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8870
Fusion-Task-Lineage: 7d30b2f9-c004-4975-86b1-9600e2c8d76f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 00:41:18 -07:00
gsxdsm
0e8d743064
FN-8867: prevent false task wedge notifications
...
Prevent stale terminal snapshots and pause markers from notifying for progressing tasks.
- Reclassify the live task immediately before claiming wedge episodes.
- Require actual pause state for pause-derived wedge reasons.
- Cover resumed-task races and stale pause markers with notification tests.
- Document the wedge notification behavior and add a patch changeset.
Files changed:
.changeset/fn-8867-wedge-false-terminal-alerts.md | 7 ++
docs/agents.md | 2 +-
docs/architecture.md | 2 +-
.../__tests__/notification-service.test.ts | 9 +-
.../__tests__/task-wedge-notification.test.ts | 102 +++++++++++++++++++--
.../src/notification/notification-service.ts | 22 +++--
.../src/notification/task-wedge-notification.ts | 22 ++++-
7 files changed, 137 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-8867
Fusion-Task-Lineage: c92c7735-e8b9-4979-8028-10a0555810f1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 00:01:44 -07:00
gsxdsm
65bf3097ff
FN-8857: invalidate stale task dispatch routes
...
Clear persisted effective routes whenever an eligible task node override changes.
- Add route invalidation logic that preserves checkout-bound and explicit replacement routes.
- Cover in-memory and PostgreSQL task-update scenarios, including partial snapshot replacements.
- Document the dispatch snapshot invalidation behavior and add a patch changeset.
Files changed:
.changeset/fn-8857-stale-effective-route.md | 7 +
docs/architecture.md | 6 +-
docs/task-management.md | 4 +-
.../__tests__/effective-route-invalidation.test.ts | 101 ++++++++++++++
.../postgres/task-node-override.pg.test.ts | 63 +++++++++
...ask-update-effective-route-invalidation.test.ts | 148 +++++++++++++++++++++
packages/core/src/index.ts | 5 +
.../core/src/mesh/effective-route-invalidation.ts | 58 ++++++++
packages/core/src/task-store/task-update.ts | 40 ++++++
9 files changed, 428 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8857
Fusion-Task-Lineage: ab6c1a40-70b4-4501-ab34-771de288da10
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-08 23:05:29 -07:00
gsxdsm
72623ec804
FN-8837: fix pull-request merge retry recovery
...
Make pull-request merge failures retry safely and report actionable terminal states.
- Persist exponential retry backoff and schedule durable retry wakeups.
- Classify policy, transient, and non-retryable GitHub merge failures correctly.
- Clear retry state on successful merges and cover notifications and recovery paths.
Files changed:
.changeset/fn-8837-pr-merge-retries.md | 7 +
docs/architecture.md | 1 +
.../task-update-awaiting-approval-reason.test.ts | 9 +
packages/core/src/store.ts | 2 +-
packages/core/src/task-store/task-update.ts | 6 +-
packages/core/src/types/task/task-core.ts | 7 +-
.../src/__tests__/merge-error-recovery.test.ts | 440 ++++++++++++++++++++-
.../engine/src/__tests__/ntfy-provider.test.ts | 14 +
.../engine/src/__tests__/webhook-provider.test.ts | 15 +
.../__tests__/notification-service.test.ts | 48 +++
.../src/notification/notification-service.ts | 15 +-
packages/engine/src/notification/ntfy-provider.ts | 15 +-
.../engine/src/notification/webhook-provider.ts | 9 +-
packages/engine/src/project-engine.ts | 240 +++++++++--
14 files changed, 781 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-8837
Fusion-Task-Lineage: a39b3491-d5cb-4509-b450-3e5671e0ba2d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-08 22:43:45 -07:00
gsxdsm
36f20f835e
FN-8822: prevent worktree capacity leaks
...
Keep live-task capacity admission visible and consistent across all lifecycle lanes.
- Report canonical active holders when worktree or concurrent-task capacity is exhausted.
- Persist deduplicated queue reasons for merge, triage, and workflow-continuation admission.
- Cover retained worktree behavior and document the capacity model.
Files changed:
.changeset/fn-8822-worktree-capacity-leak.md | 7 +++
docs/architecture.md | 1 +
docs/settings-reference.md | 4 +-
.../src/__tests__/agent-heartbeat-worktree.test.ts | 11 ++++-
.../engine/src/__tests__/project-engine.test.ts | 4 ++
...ecutor-no-task-done-vs-worktree-reclaim.test.ts | 55 +++++++++++++++++++---
...admission-worktree-ledger-renamed-lanes.test.ts | 4 ++
.../workflow-continuation-capacity.test.ts | 8 +++-
.../src/__tests__/worktree-acquisition.test.ts | 6 +--
packages/engine/src/concurrency/concurrency.ts | 22 +++++++++
packages/engine/src/project-engine.ts | 34 ++++++++++++-
packages/engine/src/runtimes/in-process-runtime.ts | 33 ++++++++++++-
packages/engine/src/scheduler.ts | 53 ++++++++++-----------
packages/engine/src/triage.ts | 18 +++++++
14 files changed, 215 insertions(+), 45 deletions(-)
Fusion-Task-Id: FN-8822
Fusion-Task-Lineage: 73eda70b-2b74-4b49-a0ff-29d41fd9aab8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-07 21:43:28 -07:00
gsxdsm
cdf81a2244
fix(FN-8826): retry partial workflow progress after restart
...
Fusion-Task-Id: FN-8826
2026-08-07 16:55:00 -07:00
gsxdsm
eaadd153b1
FN-8764: route workflow stages through durable role agents
...
Route workflow stages through task-scoped durable role agents.
- Persist normalized multi-role agents and workflow principal fences with migrations.
- Route planning, execution, review, and merge workflow nodes through authorized permanent principals with capacity leasing and recovery.
- Retire ephemeral workflow-stage workers and expose role-aware agent configuration, workflow editing, and documentation.
- Preserve lifecycle-column ratchet coverage by centralizing workflow-role classification rather than adding test exemptions.
Files changed:
.changeset/fn-8764-workflow-role-agents.md | 7 +
CONCEPTS.md | 3 +
docs/agents.md | 6 +
docs/architecture.md | 6 +
docs/cli-reference.md | 2 +
docs/dashboard-guide.md | 4 +
docs/settings-reference.md | 6 +-
docs/storage.md | 2 +
docs/workflow-steps.md | 6 +
.../src/__tests__/extension-agent-update.test.ts | 11 +-
packages/cli/src/__tests__/extension.test.ts | 18 +-
packages/cli/src/extension.ts | 41 +-
.../core/src/__tests__/agent-permissions.test.ts | 12 +
.../core/src/__tests__/agent-role-policy.test.ts | 7 +
packages/core/src/__tests__/agent-roles.test.ts | 21 +
.../legacy-column-collection-gating-ledger.test.ts | 19 +-
.../src/__tests__/postgres/schema-applier.test.ts | 16 +-
.../core/src/__tests__/settings-parity.test.ts | 9 +-
.../workflow-agent-node-classification.test.ts | 25 +
.../src/__tests__/workflow-work-item-cas.test.ts | 38 ++
packages/core/src/agents/agent-permissions.ts | 11 +-
packages/core/src/agents/agent-role-policy.ts | 39 +-
packages/core/src/agents/agent-store.ts | 190 ++++++-
.../core/src/async-stores/async-agent-store.ts | 6 +
packages/core/src/config/settings-schema.ts | 5 +-
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 7 +-
.../0045_fn_8764_multi_role_workflow_agents.sql | 20 +
.../0046_fn_8764_workflow_principal_fence.sql | 49 ++
packages/core/src/postgres/schema-applier.ts | 22 +-
packages/core/src/postgres/schema/project.ts | 21 +
packages/core/src/store.ts | 2 +-
.../task-store/async/async-workflow-workitems.ts | 49 +-
packages/core/src/task-store/row-types.ts | 4 +
packages/core/src/task-store/settings-helpers.ts | 16 +-
packages/core/src/task-store/settings-ops-2.ts | 13 +-
packages/core/src/task-store/settings-ops.ts | 16 +-
packages/core/src/task-store/task-row-mappers.ts | 4 +
.../src/task-store/workflow-task-create-ops.ts | 6 +-
.../src/task-store/workflow-workitems-ops-2.ts | 25 +-
packages/core/src/types.ts | 2 +
packages/core/src/types/agents/agents.ts | 45 +-
packages/core/src/types/merge/merge-queue.ts | 17 +
packages/core/src/types/settings/settings-scope.ts | 9 +-
packages/core/src/workflows/workflow-ir-types.ts | 58 +++
packages/core/src/workflows/workflow-ir.ts | 19 +
.../dashboard/app/components/AgentDetailView.css | 14 +
.../dashboard/app/components/AgentDetailView.tsx | 34 +-
.../dashboard/app/components/NewAgentDialog.tsx | 28 +-
.../app/components/WorkflowNodeEditor.tsx | 19 +
.../__tests__/AgentDetailView.core.test.tsx | 4 +-
.../app/components/__tests__/AgentsView.test.tsx | 2 +-
.../__tests__/SettingsModal.general.test.tsx | 86 ---
.../__tests__/SettingsModal.test-harness.tsx | 1 -
.../components/agent-presets/agentCreatePayload.ts | 9 +-
.../app/components/settings/section-keys.ts | 1 -
.../settings/sections/GeneralSection.tsx | 8 -
.../settings-default-descriptions.test.tsx | 1 -
.../app/components/workflow-flow-mapping.ts | 7 +
packages/dashboard/src/mission-routes.ts | 26 +-
.../src/routes/__tests__/agent-core-routes.test.ts | 23 +-
.../src/routes/register-agent-core-routes.ts | 42 +-
...gister-agent-import-export-generation-routes.ts | 21 -
.../engine/src/__tests__/agent-action-gate.test.ts | 33 ++
.../engine/src/__tests__/agent-assignment.test.ts | 370 -------------
.../src/__tests__/ephemeral-worker-manager.test.ts | 575 ---------------------
...ecutor-ephemeral-disabled-dispatch-gate.test.ts | 223 --------
.../__tests__/executor-fast-mode-workflows.test.ts | 58 +++
.../engine/src/__tests__/log-severity-manifest.ts | 1 -
.../__tests__/log-severity-spam-contract.test.ts | 3 -
.../resolved-read-with-literal-filter.test.ts | 4 -
.../__tests__/scheduler-ephemeral-toggle.test.ts | 175 -------
.../__tests__/scheduler-workflow-cutover.test.ts | 19 -
.../src/__tests__/workflow-agent-capacity.test.ts | 47 ++
.../src/__tests__/workflow-agent-routing.test.ts | 137 +++++
.../src/__tests__/workflow-graph-foreach.test.ts | 15 +
.../__tests__/workflow-graph-task-runner.test.ts | 73 +++
.../src/__tests__/workflow-task-runtime.test.ts | 95 ++++
.../src/__tests__/workflow-work-scheduler.test.ts | 20 +
packages/engine/src/agents/agent-action-gate.ts | 64 +++
packages/engine/src/agents/agent-assignment.ts | 135 -----
packages/engine/src/agents/agent-reflection.ts | 1 +
.../engine/src/agents/ephemeral-worker-manager.ts | 429 ---------------
.../engine/src/agents/workflow-agent-capacity.ts | 113 ++++
.../engine/src/agents/workflow-agent-router.ts | 185 +++++++
packages/engine/src/execution/reviewer.ts | 26 +-
packages/engine/src/executor.ts | 501 +++++++++++++++---
packages/engine/src/index.ts | 1 -
packages/engine/src/merger.ts | 20 +-
packages/engine/src/pi.ts | 11 +
packages/engine/src/runtimes/in-process-runtime.ts | 37 --
packages/engine/src/scheduler.ts | 114 +---
packages/engine/src/triage.ts | 196 ++++++-
.../src/workflows/workflow-graph-executor.ts | 109 +++-
.../engine/src/workflows/workflow-graph-loop.ts | 13 +-
.../src/workflows/workflow-graph-task-runner.ts | 12 +
.../engine/src/workflows/workflow-task-runtime.ts | 125 ++++-
.../src/workflows/workflow-work-scheduler.ts | 8 +-
98 files changed, 2722 insertions(+), 2468 deletions(-)
Fusion-Task-Id: FN-8764
Fusion-Task-Lineage: 5527fccb-342d-46f6-8108-bbf89142efec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-07 01:36:34 -07:00
gsxdsm
4f4aef7173
FN-8811: preserve explicit shared-member review holds
...
Keep shared branch-group integration moving unless an operator explicitly holds the task.
- Track auto-merge provenance and distinguish explicit user holds from inherited mission policy.
- Preserve manual holds across workflow recovery, merge coordination, API updates, and dashboard status.
- Add regression coverage, document the behavior, and quarantine the observed flaky test.
Files changed:
.changeset/fn-8811-shared-member-review-hold.md | 7 ++
docs/architecture.md | 4 +-
docs/dashboard-guide.md | 1 +
.../mission-store.sync-auto-merge.test.ts | 7 +-
.../__tests__/postgres/mission-store.pg.test.ts | 1 +
.../__tests__/postgres/store-movement.pg.test.ts | 20 ++++
packages/core/src/__tests__/task-merge.test.ts | 14 +++
.../core/src/async-stores/async-mission-store.ts | 6 +-
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/merge/task-merge.ts | 20 +++-
packages/core/src/missions/mission-store.ts | 6 +-
packages/core/src/task-store/serialization.ts | 2 +-
packages/core/src/task-store/task-creation.ts | 8 +-
packages/core/src/types/task/task-core.ts | 12 ++-
.../components/__tests__/TaskDetailModal.test.tsx | 63 ++++++++++++
.../dashboard/src/__tests__/routes-tasks.test.ts | 47 +++++++++
.../src/routes/register-task-workflow-routes.ts | 15 ++-
...cutor-live-branch-group-auto-merge-hold.test.ts | 87 +++++++++++++++++
.../src/__tests__/group-merge-coordinator.test.ts | 99 ++++++++++++++++++-
.../engine/src/__tests__/project-engine.test.ts | 57 ++++++++++-
.../self-healing-paused-abort-recovery.test.ts | 52 +++++++++-
packages/engine/src/__tests__/self-healing.test.ts | 106 +++++++++++++++++++++
.../workflow-graph-executor-handlers.test.ts | 23 +++++
packages/engine/src/executor.ts | 37 ++++++-
packages/engine/src/project-engine.ts | 25 +++--
packages/engine/src/self-healing.ts | 71 ++++++++++++--
.../src/workflow-node-runners/merge-runner.ts | 24 ++++-
.../src/workflows/workflow-graph-executor.ts | 4 +
.../src/workflows/workflow-graph-task-runner.ts | 6 ++
.../engine/src/workflows/workflow-node-handlers.ts | 5 +-
packages/engine/vitest.config.ts | 11 ++-
scripts/lib/test-quarantine.json | 5 +
33 files changed, 789 insertions(+), 58 deletions(-)
Fusion-Task-Id: FN-8811
Fusion-Task-Lineage: 5c1609bf-3132-4988-a254-fedec6c0e33d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 17:39:15 -07:00
gsxdsm
26219b8d34
FN-8799: suppress alerts during automatic task recovery
...
Prevent terminal task alerts while persisted automatic recovery owns a failed task.
- Classify scheduled and transient merge recovery ownership before wedge notification claims.
- Re-read live task state before claims and deferred failure delivery to avoid recovery races.
- Add recovery suppression coverage, architecture documentation, and a patch changeset.
Files changed:
.changeset/fn-8799-recovery-notifications.md | 7 ++
docs/architecture.md | 2 +
.../src/errors/transient-merge-error-classifier.ts | 18 +++++
.../__tests__/notification-service.test.ts | 78 ++++++++++++++++++-
.../__tests__/task-wedge-notification.test.ts | 26 ++++++-
.../src/notification/notification-service.ts | 90 ++++++++++++----------
.../src/notification/task-wedge-notification.ts | 37 +++++++--
packages/engine/src/project-engine.ts | 4 +-
8 files changed, 210 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8799
Fusion-Task-Lineage: f8296e81-6b84-4697-8b20-63823f09d584
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 22:17:06 -07:00
gsxdsm
4167841e3c
FN-8792: resume Plan Review after approval
...
Approved plans now seed their canonical Plan Review continuation so dispatch can proceed.
- Add an engine handoff that atomically seeds approved Plan Review work without duplicating active continuations.
- Invoke the handoff under the dashboard approval lifecycle lock and cover approval, duplicate, and lifecycle-fence cases.
- Document the lifecycle guarantee and add a patch changeset.
Files changed:
.changeset/fn-8792-plan-approval-dispatch.md | 7 +
docs/architecture.md | 6 +-
.../dashboard/src/__tests__/routes-github.test.ts | 167 ++++++++++++++++++++-
.../src/routes/register-task-workflow-routes.ts | 17 +++
.../__tests__/plan-approval-hold-invariant.test.ts | 70 +++++++++
packages/engine/src/index.ts | 4 +
packages/engine/src/plan-review-continuation.ts | 38 +++++
7 files changed, 304 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8792
Fusion-Task-Lineage: 0645c48d-ec92-475d-9e29-73cc22c12df8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 19:31:06 -07:00
gsxdsm
1dc636b8b4
FN-8785: deduplicate queued dependency and scope logs
...
Persist queue episodes atomically so repeated scheduler and self-healing passes do not duplicate diagnostics.
- Add a queued-episode signature with PostgreSQL migration and task serialization support.
- Route dependency and file-scope queue transitions through the atomic deduplication API.
- Cover repeated and concurrent queue transitions, and update scheduler mocks for the new store API.
Files changed:
.changeset/fn-8785-queued-log-deduplication.md | 7 +
docs/architecture.md | 1 +
.../postgres/queued-episode-transition.pg.test.ts | 158 +++++++++++++++++++++
.../src/__tests__/postgres/schema-applier.test.ts | 9 +-
.../core/src/postgres/migrations/0000_initial.sql | 1 +
.../0044_fn_8785_queued_episode_signature.sql | 3 +
packages/core/src/postgres/schema-applier.ts | 12 +-
packages/core/src/postgres/schema/project.ts | 1 +
packages/core/src/store.ts | 5 +-
packages/core/src/task-store/audit-ops.ts | 80 +++++++++++
packages/core/src/task-store/persistence.ts | 2 +
packages/core/src/task-store/serialization.ts | 1 +
packages/core/src/types/task/task-core.ts | 5 +
...executor-outer-dispatch-dependency-gate.test.ts | 39 +++--
.../engine/src/__tests__/executor-test-helpers.ts | 7 +
.../__tests__/scheduler-overlap-starvation.test.ts | 43 +++++-
.../__tests__/scheduler-workflow-cutover.test.ts | 35 +++--
.../self-healing-completion-fanout.test.ts | 37 +++++
packages/engine/src/__tests__/self-healing.test.ts | 25 +++-
packages/engine/src/executor.ts | 16 ++-
packages/engine/src/scheduler.ts | 26 ++--
packages/engine/src/self-healing.ts | 117 +++++----------
22 files changed, 491 insertions(+), 139 deletions(-)
Fusion-Task-Id: FN-8785
Fusion-Task-Lineage: 8d68c243-f24e-4db4-bd1d-b7eda01309f6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 11:52:15 -07:00