diff --git a/src/resources/extensions/sf/auto-dispatch.ts b/src/resources/extensions/sf/auto-dispatch.ts index f8828f459..16cfdb88a 100644 --- a/src/resources/extensions/sf/auto-dispatch.ts +++ b/src/resources/extensions/sf/auto-dispatch.ts @@ -548,6 +548,7 @@ export const DISPATCH_RULES: DispatchRule[] = [ state.activeTask.id, "accept", "auto-mode: accepted agent recommendation; user can override via /sf escalate", + "auto-mode", ); if (result.status === "resolved") { // Flags cleared; let the next dispatch cycle re-read state and diff --git a/src/resources/extensions/sf/escalation.ts b/src/resources/extensions/sf/escalation.ts index 3208ccccb..753a4c450 100644 --- a/src/resources/extensions/sf/escalation.ts +++ b/src/resources/extensions/sf/escalation.ts @@ -311,6 +311,7 @@ export function resolveEscalation( taskId: string, choice: string, rationale: string, + source: "user" | "auto-mode" = "user", ): ResolveEscalationResult { const task = getTask(milestoneId, sliceId, taskId); if (!task || !task.escalation_artifact_path) { @@ -365,13 +366,17 @@ export function resolveEscalation( buildAuditEnvelope({ traceId: `escalation:${milestoneId}:${sliceId}:${taskId}`, category: "gate", - type: "escalation-user-responded", + type: + source === "auto-mode" + ? "escalation-auto-accepted" + : "escalation-user-responded", payload: { milestoneId, sliceId, taskId, chosenOptionId: chosenOption?.id, rationale, + resolvedBy: source, }, }), );