feat(FN-5147): complete Step 3 — gate remaining in-review mutators

Fusion-Task-Id: FN-5147
Fusion-Task-Lineage: 2a0e5bd4-b2ea-498c-95ef-85126819e824
This commit is contained in:
Fusion (runfusion.ai)
2026-05-19 09:00:58 -07:00
committed by gsxdsm
parent 59c68043aa
commit 17cf473703
2 changed files with 5 additions and 0 deletions

View File

@@ -7621,8 +7621,10 @@ describe("autoMerge gating for mutating in-review sweeps (FN-5147)", () => {
"recoverStuckMergeDeadlocks",
"recoverOrphanOnlyScopeViolations",
"recoverAlreadyMergedReviewTasks",
"recoverForeignOnlyContaminatedInReviewTasks",
"recoverMissingWorktreeReviewFailures",
"recoverPartialProgressNoTaskDoneFailures",
"reclaimSelfOwnedBranchConflicts",
] as const)("skips entirely when autoMerge is disabled (respects PR-based review flow): %s", async (methodName) => {
if (methodName === "recoverReviewTasksWithFailedPreMergeSteps") {
manager = new SelfHealingManager(store, { rootDir: "/tmp/test-project", recoverFailedPreMergeStep: vi.fn() });

View File

@@ -1706,11 +1706,14 @@ export class SelfHealingManager {
/**
* STANDING: do not auto-discard stranded commits. Reclaim preserves commits;
* unrecoverable conflicts are escalated for human review.
*
* No-op when `settings.autoMerge === false` — PR-based review flow owns lifecycle until human merge.
*/
async reclaimSelfOwnedBranchConflicts(): Promise<number> {
try {
const settings = await this.store.getSettings();
if (settings.globalPause || settings.enginePaused) return 0;
if (settings.autoMerge === false) return 0;
const todoCandidates = await this.store.listTasks({ column: "todo", slim: true });
const inProgressCandidates = await this.store.listTasks({ column: "in-progress", slim: true });