Repository navigation
fix(pr-pipeline): read the ci-lanes status creator as GraphQL reports it - #9650
Conversation
fix-ci dispatch compared the ci-lanes status creator's login to github-actions[bot], the REST spelling. The GraphQL rollup reports the login as github-actions, so no head ever counted as failed and nothing was dispatched. Trust the creator by type and id instead (Bot 41898282), still refusing any other actor or a missing creator, and log why a head whose lanes failed is skipped so such a skip is visible. Test fixtures now use the creator shape read live from a pull request's ci-lanes status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failed ci-lanes status the GitHub Actions bot did not set was logged as "ci-lanes has not failed", the misdiagnosis this branch fixes. Give it its own reason, share one failed-state predicate between dispatch and the skip log, and cover the ERROR state in the log test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 I found no issues in this change, so there are no inline comments. I read the full diff and the PR context. I did not run any tests. What the change does.
What I checked.
Unverified. The PR body's test counts and its live query result against #9642 are the author's claims. I did not reproduce them. |
|
claude-security-review reviewed No security issues found in this pull request, so there are no inline comments and no hold. What changed: Trust boundary:
Logging:
Other checks:
critical-findings: 0 |
No related issue: found by the GitHub Support session; fix-ci dispatched nothing since the check landed
Summary
fix-ci-dispatch.mjstrusted the head'sci-lanescommit status only whencreator.login === "github-actions[bot]". That is the REST spelling. The GraphQL rollup the dispatcher reads reports the login asgithub-actions, solanesFailed()was always false and every pull request was skipped asci-lanes has not failed, silently, because the listing loop logged nothing for a skip.Fix
creator { __typename ... on Bot { databaseId } }, and the status is trusted only when the creator is aBotwith the GitHub Actions bot id41898282, the id this repository already uses for that bot (for exampleaddress-feedback.mjsMARKER_AUTHOR_ID). Any other actor, aUserwith the same login or id, aBotwith another id, or a missing creator is still refused.skip fix-ci #N: <reason>for a skipped pull request whoseci-lanesisFAILUREorERROR, whoever set it. Passing and pending heads stay quiet, so the log grows only for the case a silent skip would hide. A failed status the bot did not set is skipped asci-lanes failed but the GitHub Actions bot did not set it, notci-lanes has not failed.review-venuereported absent. The code review found three issues, all fixed: a second copy of the failed-state list, a misleading skip reason for an untrusted creator, and no ERROR case in the log test. The security review found no P1 to P4 issues.fix-ci-dispatch.test.mjs,dispatch.test.mjs,callers.test.mjsanddispatch-limits.test.mjsnow build the creator in the shape GraphQL returns.Other
github-actions[bot]comparisons under.github/scriptsand.github/actionswere checked. Each reads REST data, git commit data or a workflow context, where the[bot]spelling is correct, so none changed:work-unblock/label-unblocked.mjs(REST issue and commentuser.login),pr-unblock/gate-source.mjslaneHold(REST comments and timelineuser),pr-unblock/dependency-classify.mjsACTIONS_AUTHOR(git author name and email from REST pull commits),intake-triage/apply-verdict.mjsandintake-triage/refine.mjs(REST comments),maintenance-audit-lane-runs/file-findings.mjs,post-merge-demotion-alert/report.mjsandmaintenance-monitor-signals/collect.mjs(REST?creator=query parameter),maintenance-audit-lane-runs/triage-sweep.mjs(REST comments and search), andcheck-trusted-trigger.mjs(thegithub.triggering_actorcontext).Verification
node --test .github/scripts/pr-unblock/*.test.mjs .github/actions/resolve-config/callers.test.mjs .github/actions/resolve-config/dispatch-limits.test.mjs: 844 tests, 844 pass.fix-ci-dispatch.test.mjsfails 26 of 38 tests, including every dispatch case and the new untrusted-creator case (aBotwith logingithub-actions[bot]and no id is no longer trusted).scripts/check-affected.sh: 9 passed, 4 skipped, none failed.LIST_QUERYrun live against this repository: feat(planning): let supersede and restore handle register rows with more than an answer #9642'sci-lanes(FAILURE, creator{"__typename":"Bot","databaseId":41898282}) gets skip reason""(a candidate) fromskipReason, where the old check returnedci-lanes has not failed. The query cost 2 points.Related
{"context":"ci-lanes","creator":{"__typename":"Bot","databaseId":41898282,"login":"github-actions"},"state":"FAILURE"}.ci-lanesstatus with the login check.🤖 Generated with Claude Code