From 75ad864dff5b06b9b92aef84e677e0be0f09740c Mon Sep 17 00:00:00 2001 From: Tim Stranske Date: Sun, 26 Apr 2026 20:27:10 -0500 Subject: [PATCH] fix: address refreshed sync review blockers --- .../__tests__/terminal-disposition-coverage.test.js | 13 ++++++------- .github/scripts/terminal_disposition_coverage.js | 2 +- docs/LABELS.md | 3 +++ scripts/aggregate_agent_metrics.py | 1 + .../scripts/terminal_disposition_coverage.js | 2 +- templates/consumer-repo/WORKFLOW_USER_GUIDE.md | 6 +++--- .../scripts/aggregate_agent_metrics.py | 1 + tests/scripts/test_aggregate_agent_metrics.py | 4 ++++ 8 files changed, 20 insertions(+), 12 deletions(-) diff --git a/.github/scripts/__tests__/terminal-disposition-coverage.test.js b/.github/scripts/__tests__/terminal-disposition-coverage.test.js index bcfe046cd..5493c574f 100644 --- a/.github/scripts/__tests__/terminal-disposition-coverage.test.js +++ b/.github/scripts/__tests__/terminal-disposition-coverage.test.js @@ -375,7 +375,7 @@ test('does not require verifier model metadata when mode is unknown', () => { assert.deepEqual(report.enforcement.blockers, []); }); -test('requires verifier model metadata for post-contract records with unknown mode', () => { +test('does not require verifier model metadata for post-contract records with unknown mode', () => { const report = summarizeTerminalDispositionCoverage( [ { @@ -394,12 +394,11 @@ test('requires verifier model metadata for post-contract records with unknown mo ); const markdown = formatTerminalDispositionCoverageMarkdown(report); - assert.equal(report.status, 'warning'); - assert.equal(report.verifier_model_compatibility.missing_model_record_count, 1); - assert.equal(report.verifier_model_compatibility.missing_model_unknown_mode_record_count, 1); - assert.deepEqual(report.enforcement.blockers, ['missing-verifier-model-metadata']); - assert.equal(report.verifier_model_compatibility.missing_model_records[0].verifier_mode, 'unknown'); - assert.match(markdown, /Missing verifier model metadata records with unknown mode: 1/); + assert.equal(report.status, 'pass'); + assert.equal(report.verifier_model_compatibility.missing_model_record_count, 0); + assert.equal(report.verifier_model_compatibility.missing_model_unknown_mode_record_count, 0); + assert.deepEqual(report.enforcement.blockers, []); + assert.match(markdown, /Missing verifier model metadata records with unknown mode: 0/); }); test('suppresses pre-contract verifier terminal records missing model metadata', () => { diff --git a/.github/scripts/terminal_disposition_coverage.js b/.github/scripts/terminal_disposition_coverage.js index 643fc3a6c..fe5ee1fe6 100644 --- a/.github/scripts/terminal_disposition_coverage.js +++ b/.github/scripts/terminal_disposition_coverage.js @@ -176,7 +176,7 @@ function summarizeVerifierModelCompatibility(records = [], options = {}) { const model = cleanString(record.llm_model ?? record.model).toLowerCase(); const reason = cleanString(record.model_selection_reason); const verifierMode = cleanString(record.verifier_mode).toLowerCase(); - const requiresCodexModel = verifierMode !== 'evaluate'; + const requiresCodexModel = Boolean(verifierMode) && verifierMode !== 'evaluate'; if (model) selectedModels[model] = (selectedModels[model] || 0) + 1; if (reason) modelSelectionReasons[reason] = (modelSelectionReasons[reason] || 0) + 1; if (!model && requiresCodexModel && modelMetadataContract.model_metadata_required) { diff --git a/docs/LABELS.md b/docs/LABELS.md index 3b450ad2f..8e4ba1cf8 100644 --- a/docs/LABELS.md +++ b/docs/LABELS.md @@ -16,8 +16,11 @@ This document describes all labels that trigger automated workflows or affect CI | `agents:formatted` | Auto-applied | Indicates issue has been formatted | | `agents:optimize` | Issue labeled | Analyzes issue and posts suggestions | | `agents:apply-suggestions` | Issue labeled | Applies optimization suggestions | +| `agents:auto-pilot` | Issue labeled | Runs issue-to-PR automation | +| `agents:auto-pilot-pause` | Issue labeled | Pauses auto-pilot dispatch | | `agents:paused` | PR labeled | Pauses keepalive loop on PR | | `agents:keepalive` | PR labeled | Enables keepalive loop on PR | +| `runner:` | Issue labeled | Selects an auto-pilot runner without triggering issue intake | | `verify:checkbox` | PR labeled | Runs verifier checkbox mode after merge | | `verify:evaluate` | PR labeled | Runs verifier evaluation mode after merge | | `verify:compare` | PR labeled | Runs verifier comparison mode after merge | diff --git a/scripts/aggregate_agent_metrics.py b/scripts/aggregate_agent_metrics.py index 923fad967..7ebe4ae89 100755 --- a/scripts/aggregate_agent_metrics.py +++ b/scripts/aggregate_agent_metrics.py @@ -31,6 +31,7 @@ "agents-verifier-metrics", "agents-verifier-disposition-metrics", "codex-cli-freshness", + "pr-source-context", } _PREFIXED_ARTIFACT_FAMILIES = ( "autopilot-metrics-", diff --git a/templates/consumer-repo/.github/scripts/terminal_disposition_coverage.js b/templates/consumer-repo/.github/scripts/terminal_disposition_coverage.js index 643fc3a6c..fe5ee1fe6 100644 --- a/templates/consumer-repo/.github/scripts/terminal_disposition_coverage.js +++ b/templates/consumer-repo/.github/scripts/terminal_disposition_coverage.js @@ -176,7 +176,7 @@ function summarizeVerifierModelCompatibility(records = [], options = {}) { const model = cleanString(record.llm_model ?? record.model).toLowerCase(); const reason = cleanString(record.model_selection_reason); const verifierMode = cleanString(record.verifier_mode).toLowerCase(); - const requiresCodexModel = verifierMode !== 'evaluate'; + const requiresCodexModel = Boolean(verifierMode) && verifierMode !== 'evaluate'; if (model) selectedModels[model] = (selectedModels[model] || 0) + 1; if (reason) modelSelectionReasons[reason] = (modelSelectionReasons[reason] || 0) + 1; if (!model && requiresCodexModel && modelMetadataContract.model_metadata_required) { diff --git a/templates/consumer-repo/WORKFLOW_USER_GUIDE.md b/templates/consumer-repo/WORKFLOW_USER_GUIDE.md index 173d7cb7c..2f3e69221 100644 --- a/templates/consumer-repo/WORKFLOW_USER_GUIDE.md +++ b/templates/consumer-repo/WORKFLOW_USER_GUIDE.md @@ -87,7 +87,7 @@ Issue: "Add user authentication" 4. Use a `workflow:source-*` label if you need to classify an existing PR from the PR list **What Happens:** -- Workflows treats valid non-issue sources as intentional work instead of missing process state +- Workflows treat valid non-issue sources as intentional work instead of missing process state - PR metadata automation avoids repeated missing-source repair comments - Keepalive can continue without a linked issue when the PR has a valid non-issue workflow source context @@ -138,7 +138,7 @@ Issue: "Add user authentication" ### User-Applied Labels (Triggers) | Label | Where | What It Does | -|-------|-------|--------------|| +|-------|-------|--------------| | `autofix` | PR | Auto-fixes formatting/lint errors | | `autofix:clean` | PR | Aggressive autofix with cosmetic repairs | | `agent:codex` | Issue | Creates PR from issue | @@ -159,7 +159,7 @@ Issue: "Add user authentication" ### Auto-Applied Labels (Status) | Label | Meaning | -|-------|---------|| +|-------|---------| | `agents:formatted` | Issue has been formatted | | `agents:keepalive` | Keepalive is monitoring this PR | | `agent:needs-attention` | Human intervention required | diff --git a/templates/consumer-repo/scripts/aggregate_agent_metrics.py b/templates/consumer-repo/scripts/aggregate_agent_metrics.py index 923fad967..7ebe4ae89 100755 --- a/templates/consumer-repo/scripts/aggregate_agent_metrics.py +++ b/templates/consumer-repo/scripts/aggregate_agent_metrics.py @@ -31,6 +31,7 @@ "agents-verifier-metrics", "agents-verifier-disposition-metrics", "codex-cli-freshness", + "pr-source-context", } _PREFIXED_ARTIFACT_FAMILIES = ( "autopilot-metrics-", diff --git a/tests/scripts/test_aggregate_agent_metrics.py b/tests/scripts/test_aggregate_agent_metrics.py index 894354553..8b589d714 100644 --- a/tests/scripts/test_aggregate_agent_metrics.py +++ b/tests/scripts/test_aggregate_agent_metrics.py @@ -720,6 +720,10 @@ def test_classify_entry_prefers_explicit_type() -> None: assert aggregate_agent_metrics._classify_entry({"other": "value"}) == "unknown" +def test_artifact_family_classifies_pr_source_context() -> None: + assert aggregate_agent_metrics._artifact_family("pr-source-context") == "pr-source-context" + + def test_safe_number_helpers() -> None: assert aggregate_agent_metrics._safe_int("3") == 3 assert aggregate_agent_metrics._safe_int("bad") is None