Deduplicate self-healing log entries for queued tasks that remain blocked by the same active file-scope overlap.
- Track the last active overlap blocker logged per task and skip duplicate preserved-queued log entries across self-healing passes.
- Clear the memo when blockers change, resolve, or the manager stops so legitimate future recoveries are still logged.
- Cover unchanged blockers, blocker changes, resolved blockers, stop/reset behavior, and FN-5488 stale-blockedBy preservation with regression tests.
Files changed:
packages/engine/src/__tests__/self-healing.test.ts | 123 +++++++++++++++++++++
packages/engine/src/self-healing.ts | 61 ++++++++--
2 files changed, 177 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6276
Fusion-Task-Lineage: 169d4402-ec4e-4fa9-8225-2f545c11a3f7
Rescue the already-merged self-healing real-git test while quarantining a separate flaky merger AI suite.
- Call the already-merged recovery path directly in the rescued test and assert specific audit event types instead of exact total counts.
- Remove self-healing-already-merged.real-git.test.ts from the engine default quarantine list and ledger.
- Add merger-ai.test.ts to the engine default quarantine list and quarantine ledger with FN-6238 evidence.
Files changed:
.../self-healing-already-merged.real-git.test.ts | 20 +++++++++++++-------
packages/engine/vitest.config.ts | 2 +-
scripts/lib/test-quarantine.json | 10 +++++-----
3 files changed, 19 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-6238
Fusion-Task-Lineage: b04451e3-fbd3-4dee-aca2-f542d1036d20
Quarantines the flaky active-session pruning coverage without hiding the rest of merger cleanup tests.
- Move the active-session pruning scenario into its own focused test file.
- Keep the broader merger cleanup suite in the reliability project.
- Point the quarantine ledger and engine default exclude at only the isolated flaky test.
Files changed:
.../merger-ai-cleanup-active-session.test.ts | 60 ++++++++++++++++++++++
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 22 ++------
packages/engine/vitest.config.ts | 2 +-
scripts/lib/test-quarantine.json | 4 +-
4 files changed, 66 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-6207
Fusion-Task-Lineage: b5e806cb-aec8-4893-83ef-d27164250a5c
Restore Pi-upgraded workspaces to keep Fusion resources accessible and recover title generation when configured models go stale.
- Mark read-only Fusion/Pi provider settings views as project-trusted so extension loading keeps working after Pi upgrades.
- Retry task title summarization with automatic model resolution when the configured provider model is missing from the Pi registry.
- Cover provider settings trust behavior and stale summarizer fallback paths with regression tests.
- Document the read-only settings trust contract and add a patch changeset.
Files changed:
.changeset/fn-6218-pi-upgrade-regressions.md | 5 +
docs/settings-reference.md | 2 +
docs/task-management.md | 2 +
.../commands/__tests__/provider-settings.test.ts | 16 ++++
packages/cli/src/commands/provider-settings.ts | 5 +
packages/core/src/__tests__/ai-summarize.test.ts | 102 +++++++++++++++++++++
packages/core/src/ai-summarize.ts | 85 ++++++++++++-----
.../src/__tests__/pi-create-fn-agent.test.ts | 32 +++++++
packages/engine/src/pi.ts | 7 +-
9 files changed, 233 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6218
Fusion-Task-Lineage: 3d6aca32-a56a-43a0-a57b-8e6abc839ce9
The idle-worktree sweep (cleanupOrphans) and cap-enforcement sweep only
guarded isWorktreeResumeReserved (CLI resume sessions), not in-process
active sessions. scanIdleWorktrees treats a worktree as active only while
a non-done task points at it, but the executor transiently moves tasks to
done or nulls the worktree field mid-run — so a checkout backing a live
executor/merger/step/workflow session could be removed before the work
finished. Add the activeSessionRegistry.isPathActive guard to both loops,
mirroring reapUnregisteredOrphans (FN-4811/FN-5065).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move undocumented flaky engine tests into the formal quarantine path.
- add quarantine ledger entries for flaky engine test files observed under concurrent/full-suite load
- exclude the quarantined engine test files from vitest projects so they no longer run in gate and reliability pools
- remove the undocumented it.skip markers by quarantining at the file/config level instead
Files changed:
.../__tests__/merger-file-scope-invariant.test.ts | 4 ++--
.../src/__tests__/project-engine-manager.test.ts | 2 +-
packages/engine/vitest.config.ts | 10 ++++++++--
scripts/lib/test-quarantine.json | 23 +++++++++++++++++++++-
4 files changed, 33 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6206
Fusion-Task-Lineage: 8d88725e-1e92-4a06-aaa6-be34287e613a
Guarantee AI merge clean-room worktrees are pruned on merge completion and swept by task state.
- prune pre-existing same-task AI merge temp worktrees before starting a new merge and audit cleanup outcomes
- add task-aware tempdir sweep rules with a short grace period for done or archived tasks and immediate cleanup for deleted tasks
- extend merger and self-healing coverage and document the updated stale worktree policy
Files changed:
.changeset/ai-merge-cleanup-sweep.md | 5 +
docs/architecture.md | 2 +-
packages/engine/src/__tests__/merger-ai-cleanup.test.ts | 109 ++++++++++++++++++--
packages/engine/src/__tests__/self-healing-tempdir-sweep.test.ts | 112 ++++++++++++++++++++-
packages/engine/src/merger-ai.ts | 63 ++++++++++++
packages/engine/src/self-healing.ts | 26 ++++-
6 files changed, 300 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-6199
Fusion-Task-Lineage: 659cc52f-0994-4315-a187-6c865bbe3983
Stop the self-healing DB corruption test from leaking into unrelated tmpdir state while quarantining the known flake.
- mock node:os tmpdir usage so the test runs inside a per-test sandbox and cleans it up after each case
- add the flaky self-healing DB corruption test to the engine default exclude list
- record the quarantine entry and failure context in scripts/lib/test-quarantine.json
Files changed:
.../__tests__/self-healing-db-corruption.test.ts | 22 ++++++++++++++++++++++
packages/engine/vitest.config.ts | 1 +
scripts/lib/test-quarantine.json | 8 +++++++-
3 files changed, 30 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6195
Fusion-Task-Lineage: 60f7f6ca-d14d-42b4-b47e-0644a25e64ae
Keep AI merge commit finalization running when the task disappears during settings resolution.
- fall back to a synthetic task stub before merging effective settings in runAiAgentForCommit
- add an engine regression test covering deleted-task settings degradation
- add a patch changeset for the published CLI package
Files changed:
.changeset/fn-6193-merger-deleted-task.md | 5 +++
.../src/__tests__/merger-settings-degrade.test.ts | 43 ++++++++++++++++++++++
packages/engine/src/merger.ts | 3 +-
3 files changed, 50 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6193
Fusion-Task-Lineage: 1d63d24e-1321-450c-95c9-ffc058fd8387
Prevent rebuilt dashboard tabs from reusing stale cached assets after a deploy.
- revalidate service-worker asset requests against the network before falling back to cache and bump the cache version
- suppress repeated version-change reloads for the same remote build and cover the new behavior with dashboard tests
- update engine heartbeat test expectations for summarized task creation metadata and add the published package changeset
Files changed:
.changeset/fn-blank-page-service-worker-assets.md | 3 ++
packages/dashboard/app/__tests__/pwa.test.ts | 11 ++++++
packages/dashboard/app/__tests__/versionCheck.test.ts | 28 ++++++++++++++
packages/dashboard/app/public/sw.js | 37 +++++++++++++++++-
packages/dashboard/app/versionCheck.ts | 45 ++++++++++++++++++++++
packages/engine/src/__tests__/heartbeat-executor.test.ts | 3 +-
packages/engine/src/__tests__/heartbeat-session-prompt.test.ts | 7 +++-
7 files changed, 131 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6180
Fusion-Task-Lineage: 4f07e5f0-56c7-4241-8719-f576dfd8613e
Update the skill diagnostics test to assert against the structured logger surface that now emits the diagnostics output.
- spy on [1mpiLog.log[22m instead of [1mpiLog.warn[22m in the structured logger diagnostics test
- keep the existing [skills] and [executor] assertions while matching the current logging path
Files changed:
packages/engine/src/__tests__/pi-create-fn-agent.test.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6172
Fusion-Task-Lineage: e52023f7-6c18-435d-b2c6-bd7f7024b75f
Treat already-finalized or paused workflow-graph exits as benign instead of failure-worthy.
- log info-level benign messages when workflow graph runs end after a task is paused or has already advanced out of in-progress
- keep true in-progress graph failures on the existing failed-and-handoff path with failure logging
- add executor recovery coverage for todo, in-review, done, paused, and genuine failure cases
- add a patch changeset for the published CLI package
Files changed:
.changeset/fn-6141-benign-graph-exit.md | 5 +
.../engine/src/__tests__/executor-recovery.test.ts | 137 ++++++++++++++++++++-
packages/engine/src/executor.ts | 23 ++--
3 files changed, 150 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-6141
Fusion-Task-Lineage: 8d29159a-8d7a-4e84-b05a-fe83f6ccbb78
Fix the branch authority helper and caller so the squash merge stays lint-clean.
- drop the unused `baseSha` parameter from `isBranchAuthoritativeForTask`
- update the merger authority probe to call the helper with the remaining arguments
Files changed:
packages/engine/src/branch-conflicts.ts | 1 -
packages/engine/src/merger.ts | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
Fusion-Task-Id: FN-6132
Fusion-Task-Lineage: c8d8352d-67f7-498b-8b6d-254375d42417
Treat foreign task-attributed commits in branch ranges as informational instead of blocking worktree acquisition or branch authority checks.
Fusion-Task-Id: FN-6131
Ensure agent-created untitled tasks still request AI-generated titles even when project auto-summarization is disabled.
- force summarize=true for agent-created tasks that do not provide an explicit title
- add engine tests covering untitled, titled, and title-generation behavior with autoSummarizeTitles disabled
- document the agent-task summarization behavior in settings docs
- add a patch changeset for the published CLI package
Files changed:
.changeset/agent-task-title-summaries.md | 5 ++
docs/settings-reference.md | 2 +-
packages/engine/src/__tests__/agent-tools.test.ts | 63 +++++++++++++++++++++++
packages/engine/src/agent-tools.ts | 1 +
4 files changed, 70 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6107
Fusion-Task-Lineage: d0c25981-a5cb-48ca-b835-9267817b4edd