fix(FN-4545): wire contamination handler into auto-recovery dispatcher

Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
This commit is contained in:
Fusion
2026-05-14 20:30:20 -07:00
committed by gsxdsm
parent 4cd3627e63
commit c37d3b404c
3 changed files with 14 additions and 1 deletions

View File

@@ -20,7 +20,6 @@ export class ContaminationAutoRecoveryHandler implements Pick<AutoRecoveryHandle
}
async issueRetry(failure: AutoRecoveryFailure, decision: AutoRecoveryDecision, ctx: AutoRecoveryContext): Promise<void> {
void this.deps.repoDir;
const task = ctx.task;
if (task.userPaused) {
this.logger.warn(`auto-recovery: skipped (userPaused) class=${failure.class} task=${task.id}`);

View File

@@ -73,6 +73,7 @@ import type { AgentReflectionService } from "./agent-reflection.js";
import { createRunAuditor, generateSyntheticRunId, type EngineRunContext, type RunAuditor } from "./run-audit.js";
import { AutoRecoveryDispatcher } from "./auto-recovery.js";
import { BranchWorktreeAutoRecoveryHandler } from "./auto-recovery-handlers/branch-worktree.js";
import { ContaminationAutoRecoveryHandler } from "./auto-recovery-handlers/contamination.js";
import { createFileScopeAutoRecoveryHandler } from "./auto-recovery-handlers/file-scope.js";
import { ReadonlyViolationError, filterCustomToolsForReadonly } from "./workflow-step-tool-policy.js";
import { evaluateSpecStaleness, getPromptPath } from "./spec-staleness.js";
@@ -848,11 +849,20 @@ export class TaskExecutor {
runAudit: audit,
logger: executorLog,
});
const contaminationHandler = new ContaminationAutoRecoveryHandler({
taskStore: this.store,
runAudit: audit,
logger: executorLog,
repoDir: this.rootDir,
});
return new AutoRecoveryDispatcher({
taskStore: this.store,
auditEmitter: audit,
handlers: {
issueRetry: async (failure, decision, ctx) => {
if (failure.class === "branch-cross-contamination") {
return contaminationHandler.issueRetry(failure, decision, ctx);
}
if (failure.class === "branch-conflict-unrecoverable") {
return branchWorktreeHandler.issueRetry(failure, decision, ctx);
}

View File

@@ -105,6 +105,10 @@ export type DatabaseMutationType =
| "auto-recovery:retry-issued"
| "auto-recovery:ai-session-spawned"
| "auto-recovery:pause-because-destructive-ambiguity"
| "contamination:retry-issued"
| "contamination:irreducible-pause"
| "message-delivery:retry-issued"
| "message-delivery:park"
| "branch-worktree:auto-requeue"
| "branch-worktree:ai-session-spawned"
| "branch-worktree:irreducible-pause"