From 39f9faffa83b6e68cf6309b9739b44ca8ae64366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=82CHES?= Date: Fri, 20 Mar 2026 15:11:55 -0600 Subject: [PATCH] fix: default UAT type to artifact-driven to prevent unnecessary auto-mode pauses (#1651) When a UAT file has no `## UAT Type` section, `extractUatType()` returns `undefined`. The fallback was `"human-experience"`, causing `pauseAfterDispatch: true` in the auto-dispatch rule. Since doctor-generated UAT placeholders never include a UAT Type section and LLM-executed UATs are always artifact-driven, the correct default is `"artifact-driven"`. Closes #1649 Co-authored-by: Claude Opus 4.6 (1M context) --- src/resources/extensions/gsd/auto-prompts.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/resources/extensions/gsd/auto-prompts.ts b/src/resources/extensions/gsd/auto-prompts.ts index 5b290e705..9cae54994 100644 --- a/src/resources/extensions/gsd/auto-prompts.ts +++ b/src/resources/extensions/gsd/auto-prompts.ts @@ -759,8 +759,8 @@ export async function checkNeedsRunUat( if (hasResult) return null; } - // Classify UAT type; unknown type → treat as human-experience (human review) - const uatType = extractUatType(uatContent) ?? "human-experience"; + // Classify UAT type; default to artifact-driven (LLM-executed UATs are always artifact-driven) + const uatType = extractUatType(uatContent) ?? "artifact-driven"; return { sliceId: sid, uatType }; } @@ -1403,7 +1403,7 @@ export async function buildRunUatPrompt( const inlinedContext = capPreamble(`## Inlined Context (preloaded — do not re-read these files)\n\n${inlined.join("\n\n---\n\n")}`); const uatResultPath = join(base, relSliceFile(base, mid, sliceId, "UAT-RESULT")); - const uatType = extractUatType(uatContent) ?? "human-experience"; + const uatType = extractUatType(uatContent) ?? "artifact-driven"; return loadPrompt("run-uat", { workingDirectory: base,