[codex] Tighten campaign queue source-fixed contracts - #1857
Conversation
Automated Status SummaryHead SHA: ce3aad7
Coverage Overview
Coverage Trend
Top Coverage Hotspots (lowest coverage)
Updated automatically; will refresh on subsequent CI/Docker completions. Keepalive checklistScopeNo scope information available Tasks
Acceptance criteria
|
🤖 Keepalive Loop StatusPR #1857 | Agent: Codex | Iteration 0/5 Current State
🔍 Failure Classification| Error type | infrastructure | |
Keepalive Work Log (click to expand)
|
There was a problem hiding this comment.
Pull request overview
This PR tightens the sync/dependabot campaign queue “source-fixed” contract so already-fixed items don’t inflate the actionable local Codex queue, and broadens bot-comment auth artifact name matching to accept stable family-prefixed names (not only numeric run-id suffixes).
Changes:
- Split “source-fixed candidates” from actionable
needs-local-codexitems in campaign stats + issue rendering. - Add a dedicated “Source-fixed candidates” details section while keeping marker/state counts intact.
- Relax bot-comment auth artifact family regexes in both source scripts and consumer templates; update tests accordingly.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
.github/scripts/sync_dependabot_campaign.js |
Separates actionable vs source-fixed counts and updates queue/details rendering. |
.github/scripts/weekly_metrics_artifacts.js |
Broadens bot-comment auth coverage artifact family name matching. |
.github/scripts/bot_comment_auth_coverage.js |
Broadens auth artifact directory contract matching for scanner input discovery. |
templates/consumer-repo/.github/scripts/weekly_metrics_artifacts.js |
Mirrors artifact family regex broadening for consumer templates. |
templates/consumer-repo/.github/scripts/bot_comment_auth_coverage.js |
Mirrors auth artifact dir regex broadening for consumer templates. |
.github/scripts/__tests__/weekly-metrics-artifacts.test.js |
Updates tests for newly-accepted artifact names. |
.github/scripts/__tests__/sync_dependabot_campaign.test.js |
Adds/updates tests for excluding source-fixed items from visible queue and stats. |
.github/scripts/__tests__/bot-comment-auth-coverage.test.js |
Updates scanner file-candidate tests for expanded directory name matching. |
| return item.status === 'needs-local-codex' && !isSourceFixedCandidate(item); | ||
| } | ||
|
|
||
| function isVisibleQueueItem(item = {}) { |
There was a problem hiding this comment.
isVisibleQueueItem() includes all local-codex-claimed items even when they are marked as source_fixed_candidate. Since formatItemDetails() now filters out source-fixed candidates, a claimed source-fixed item can still appear in the visible queue table but then be missing from the queue details section (and show up under source-fixed candidates instead). Consider excluding source_fixed_candidate items from the visible queue regardless of status (or alternatively keep them in queue details) so the table + details stay consistent.
| function isVisibleQueueItem(item = {}) { | |
| function isVisibleQueueItem(item = {}) { | |
| if (isSourceFixedCandidate(item)) { | |
| return false; | |
| } |
| const lines = []; | ||
| for (const item of cleanArray(items).slice(0, MAX_DETAIL_ITEMS)) { | ||
| const detailItems = cleanArray(items).filter((item) => !isSourceFixedCandidate(item)); | ||
| for (const item of detailItems.slice(0, MAX_DETAIL_ITEMS)) { | ||
| lines.push(`### ${item.status}: ${item.repo}#${item.pr_number}`); | ||
| lines.push(''); |
There was a problem hiding this comment.
formatItemDetails() now filters out all source-fixed candidates (detailItems excludes anything with source_fixed_candidate), but the loop body still contains an if (item.source_fixed_candidate) block below. That block becomes unreachable; consider removing it (or adjusting the filter if you still want source-fixed info in the main queue details).
…apping (#2208) The consistency pass surfaced that the "Pattern A variant without no-emit" is not a working variant — it is the uv "conflicting URLs for app-baseline-kit" bug (unpinned @main in pyproject vs SHA-pinned lock), which a warm uv cache can mask. Pension-Data hit it (fixed PR #498). Rewrite that callout as a warning and state no-emit-package is required for Pattern A. Correct the per-repo mapping to reflect reality after the migrations: - PAEM was actually frozen at a SHA (not @main); migrated to A+no-emit (PR #1857). - Pension-Data: A+no-emit (PR #498), excluded from lock. - LMS: migrated from frozen SHA to A+no-emit (PR #232); no current Pattern C repos. - TMP: note it should add no-emit on its next lock regen. Co-authored-by: Tim Stranske <tim@stranskemo.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Verification
node --test .github/scripts/__tests__/sync_dependabot_campaign.test.js .github/scripts/__tests__/bot-comment-auth-coverage.test.js .github/scripts/__tests__/weekly-metrics-artifacts.test.jspython -m pytest tests/workflows/test_workflow_agents_consolidation.py -qpython scripts/validate_template_sync.pypython scripts/validate_template_completeness.pygit diff --checkCampaign Impact
Using durable campaign run
24941404418, the new derived stats would show 118 actionable local Codex items and 2 source-fixed candidates, movingTravel-Plan-Permission#896/#894out of the top visible queue.