diff --git a/workflows/operate_parallel_scout.workflow.js b/workflows/operate_parallel_scout.workflow.js index 705e74f8b..36b0baaa2 100644 --- a/workflows/operate_parallel_scout.workflow.js +++ b/workflows/operate_parallel_scout.workflow.js @@ -41,7 +41,9 @@ export default async function () { const summary = await task({ description: "Synthesize from surviving parallel slots", label: "synthesizer", - type: "general", + // Read-only synthesizer — "general" is write-capable and fails closed without + // write scope (same class as operate_read_audit; dogfood 2026-07-24). + type: "review", prompt: [ "Build one operator-facing summary from the surviving scout results.", "Explicitly note which parallel slot failed or returned null.", diff --git a/workflows/operate_read_audit.workflow.js b/workflows/operate_read_audit.workflow.js index d0b13ab87..2e6b47041 100644 --- a/workflows/operate_read_audit.workflow.js +++ b/workflows/operate_read_audit.workflow.js @@ -35,10 +35,12 @@ export default async function (args) { ]); phase("Synthesize"); + // Synthesizer must stay read-only: type "general" is write-capable and + // requires writeRoots/exactFiles/coordinationContracts (dogfood 2026-07-24). const summary = await task({ description: "Synthesize audit findings for the operator.", label: "audit summary", - type: "general", + type: "review", prompt: [ "Synthesize a concise security/reliability audit from these scout results.", "Filter null/failed scouts. Group by severity. No file edits.",