Repository navigation
fix(ci): read a lanes App head's pass by exact name in FAIL index mode - #12717
Conversation
In FAIL index mode the verdict reader reads by exact name and saves no artifact listing, so the merge-group step that fails a held lanes App pull request read the missing listing as unreadable and failed every passing lanes App head, dropping it and its group from the queue. When the legacy FAILs file sits beside the reader, read the head's four pass names by exact name into the listing file instead; without it the step still fails closed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-review reviewed Code review: PR #12717, reading a lanes App head's pass by exact name in FAIL index modeNo findings. I read every hunk in all 4 changed files: The previous round (at What I checked
Not verified by me: the PR's 303/303 pass count for Closing issue: none. The PR says no issue was filed (it fixes a regression from #12558), so there are no acceptance criteria to check. Prior findings: the only earlier entry is the summary comment from the last round, which had 0 findings. Nothing is restated. Spend (not a finding): up to 4 more GITHUB_TOKEN exact-name artifact reads per lanes App head per merge-group run. This uses only the API rate pool and does not cost money. |
|
claude-security-review reviewed Security review: #12717 (head cfa6620)No security issues found. Scope: I read every hunk of all 4 changed files:
What changed since the last review (head 864f696): The four pass-artifact names are now built once, in the Merge-hold check (repeated against this head):
No merge hold is weakened. No trust control is widened. No token scope changes. No manifest changes. Spend: each lanes App head in a merge-group run makes up to 4 more Other:
critical-findings: 0 |
The merge-queue lookup loop now reads the head's pass names from a pass_names array set above it, so the verify-rules sync test, which runs the loop lifted out of the workflow, found no names and counted no pass. Lift the array with the loop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
No related issue: regression from #12558 (FAIL index mode); issues are being driven to zero, so none was filed.
Summary
Since #12558 turned on FAIL index mode, merge-group
ci-statusfails every passing lanes App pull request with "the verdict reader read no artifact listing" (pr-require-checks.yml, lanes App hold step). In index mode the verdict reader reads by exact name and writes no artifact listing, so this step read the missing listing as unreadable, failed the head and dropped it and its group from the queue. Index mode was reported working on call counts alone (a 24-call reader run) while this next step failed.Fix
When the legacy FAILs file (
verify-legacy-fails.json) sits beside the reader, the step reads the head's four pass names (pass,pass-<digest>,pass-notes,pass-notes-<digest>) by exact name into the listing file and judges them as before. Without that file the step still fails closed with the same error. The reader-refusal path is unchanged.Call delta: +4 exact-name artifact reads (counter B) per lanes App head per merge-group run, against the whole-listing reads index mode removed. Every read is bounded (one page of an exact name).
Verification
bash scripts/ci-lanes-pr-hold.test.sh: 303/303 pass; the 3 new cases (index mode with a pass at the head passes, its pass names take 1-4 exact-name reads, index mode with no pass holds) fail without the change. The existing no-listing case still fails closed when no legacy file is present.plugins/source-control/skills/babysit-prs/scripts/tests/test_verify_rules_sync.pylifts the hold step's lookup loop out of the workflow; it now also lifts thepass_namesarray the loop reads (856d563). Without that, CI at 864f696 failed 23 subtests (test-python (8), test-bash (1)). After the fix: 18 passed, 206 subtests;engine.test.sh4029 tests OK; both re-run green after merging main (cfa6620).pr-require-checks.ymlare watched (lanes App PRs included) and the change is reverted on two consecutive failures caused by it.Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW