From 6c113be47359ebe596c93b76d84f8aaa2ab5d77d Mon Sep 17 00:00:00 2001 From: Mikael Hugo Date: Sun, 10 May 2026 08:32:21 +0200 Subject: [PATCH] fix(uat): treat ASSESSMENT file with verdict as completed UAT result checkNeedsRunUat only checked for UAT_RESULT file, but the autonomous runner writes ASSESSMENT files. This caused run-uat to dispatch 5x with no verdict when only an ASSESSMENT (with verdict: PASS) existed. Now ASSESSMENT file with any verdict counts as a completed UAT result, stopping the infinite dispatch loop. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/resources/extensions/sf/workflow-helpers.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/resources/extensions/sf/workflow-helpers.js b/src/resources/extensions/sf/workflow-helpers.js index e71ed0aa0..77b8d948a 100644 --- a/src/resources/extensions/sf/workflow-helpers.js +++ b/src/resources/extensions/sf/workflow-helpers.js @@ -119,6 +119,17 @@ export async function checkNeedsRunUat(base, mid, _state, prefs) { "UAT_RESULT", ); if (resultFile && existsSync(resultFile)) return null; + // Also treat an ASSESSMENT file with a verdict as a completed UAT result. + const assessmentFile = resolveSliceFile( + base, + mid, + lastCompleted.id, + "ASSESSMENT", + ); + if (assessmentFile && existsSync(assessmentFile)) { + const assessContent = await loadFile(assessmentFile); + if (assessContent && hasVerdict(assessContent)) return null; + } const uatContent = await loadFile(uatFile); const uatType = hasVerdict(uatContent) ? "verdict" : "narrative"; return { sliceId: lastCompleted.id, uatType };