From b269f60238a0169304dd750da877e1f780020d9e Mon Sep 17 00:00:00 2001 From: stranske Date: Fri, 26 Dec 2025 19:39:59 +0000 Subject: [PATCH 1/2] fix: skip verifier when no acceptance criteria exist The verifier was running and potentially creating follow-up issues even when there were no acceptance criteria to verify. Now it skips with a notice when acceptanceCount == 0, avoiding unnecessary issue creation. --- .github/scripts/agents_verifier_context.js | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.github/scripts/agents_verifier_context.js b/.github/scripts/agents_verifier_context.js index eaaf6f66c..cbf585691 100644 --- a/.github/scripts/agents_verifier_context.js +++ b/.github/scripts/agents_verifier_context.js @@ -280,6 +280,31 @@ async function buildVerifierContext({ github, context, core }) { const contextPath = path.join(process.cwd(), 'verifier-context.md'); fs.writeFileSync(contextPath, markdown, 'utf8'); + // Skip verifier if there are no acceptance criteria to verify + if (acceptanceCount === 0) { + const skipReason = 'No acceptance criteria found in PR or linked issues; skipping verifier.'; + core?.notice?.(skipReason); + core?.setOutput?.('should_run', 'false'); + core?.setOutput?.('skip_reason', skipReason); + core?.setOutput?.('pr_number', String(pull.number || '')); + core?.setOutput?.('issue_numbers', JSON.stringify(issueNumbers)); + core?.setOutput?.('pr_html_url', pull.html_url || ''); + core?.setOutput?.('target_sha', targetSha); + core?.setOutput?.('context_path', contextPath); + core?.setOutput?.('acceptance_count', '0'); + core?.setOutput?.('ci_results', JSON.stringify(ciResults)); + return { + shouldRun: false, + reason: skipReason, + markdown, + contextPath, + issueNumbers, + targetSha, + acceptanceCount, + ciResults, + }; + } + core?.setOutput?.('should_run', 'true'); core?.setOutput?.('skip_reason', ''); core?.setOutput?.('pr_number', String(pull.number || '')); From fafb1a2b86f91539b890332a2426a49eb2b006de Mon Sep 17 00:00:00 2001 From: stranske Date: Fri, 26 Dec 2025 19:49:13 +0000 Subject: [PATCH 2/2] fix: address code review feedback for verifier skip logic - Fix P1: Use hasAcceptanceContent to check for any acceptance content, not just checkboxes. This prevents skipping PRs with plain-text acceptance criteria that aren't formatted as checkboxes. - Optimize: Move skip check before file write to avoid unnecessary I/O when there's nothing to verify. - Consistency: Simplify return object to match other skip paths (shouldRun, reason, ciResults only). --- .github/scripts/agents_verifier_context.js | 37 +++++++++++----------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/.github/scripts/agents_verifier_context.js b/.github/scripts/agents_verifier_context.js index cbf585691..32ab317a2 100644 --- a/.github/scripts/agents_verifier_context.js +++ b/.github/scripts/agents_verifier_context.js @@ -206,9 +206,14 @@ async function buildVerifierContext({ github, context, core }) { const sections = []; let acceptanceCount = 0; + let hasAcceptanceContent = false; const pullSections = parseScopeTasksAcceptanceSections(pull.body || ''); acceptanceCount += countCheckboxes(pullSections.acceptance); + // Check for any acceptance content, not just checkboxes + if (pullSections.acceptance && String(pullSections.acceptance).trim()) { + hasAcceptanceContent = true; + } const prSections = extractScopeTasksAcceptanceSections(pull.body || '', { includePlaceholders: true, }); @@ -223,6 +228,10 @@ async function buildVerifierContext({ github, context, core }) { for (const issue of closingIssues) { const issueSectionsParsed = parseScopeTasksAcceptanceSections(issue.body || ''); acceptanceCount += countCheckboxes(issueSectionsParsed.acceptance); + // Check for any acceptance content, not just checkboxes + if (issueSectionsParsed.acceptance && String(issueSectionsParsed.acceptance).trim()) { + hasAcceptanceContent = true; + } const issueSections = extractScopeTasksAcceptanceSections(issue.body || '', { includePlaceholders: true, }); @@ -276,35 +285,27 @@ async function buildVerifierContext({ github, context, core }) { content.push('_No scope, tasks, or acceptance criteria were found in the pull request or linked issues._'); } - const markdown = content.join('\n').trimEnd() + '\n'; - const contextPath = path.join(process.cwd(), 'verifier-context.md'); - fs.writeFileSync(contextPath, markdown, 'utf8'); - - // Skip verifier if there are no acceptance criteria to verify - if (acceptanceCount === 0) { + // Skip verifier early if there are no acceptance criteria to verify + // Check for any acceptance content (not just checkboxes) to handle plain-text criteria + if (!hasAcceptanceContent) { const skipReason = 'No acceptance criteria found in PR or linked issues; skipping verifier.'; core?.notice?.(skipReason); core?.setOutput?.('should_run', 'false'); core?.setOutput?.('skip_reason', skipReason); core?.setOutput?.('pr_number', String(pull.number || '')); - core?.setOutput?.('issue_numbers', JSON.stringify(issueNumbers)); + core?.setOutput?.('issue_numbers', '[]'); core?.setOutput?.('pr_html_url', pull.html_url || ''); core?.setOutput?.('target_sha', targetSha); - core?.setOutput?.('context_path', contextPath); + core?.setOutput?.('context_path', ''); core?.setOutput?.('acceptance_count', '0'); core?.setOutput?.('ci_results', JSON.stringify(ciResults)); - return { - shouldRun: false, - reason: skipReason, - markdown, - contextPath, - issueNumbers, - targetSha, - acceptanceCount, - ciResults, - }; + return { shouldRun: false, reason: skipReason, ciResults }; } + const markdown = content.join('\n').trimEnd() + '\n'; + const contextPath = path.join(process.cwd(), 'verifier-context.md'); + fs.writeFileSync(contextPath, markdown, 'utf8'); + core?.setOutput?.('should_run', 'true'); core?.setOutput?.('skip_reason', ''); core?.setOutput?.('pr_number', String(pull.number || ''));