Repository navigation
fix(pr-pipeline): re-run a lost main-run review once from the lost-run reconciler - #10996
Conversation
…n reconciler
A pr-review-main run whose every credential leg stopped ends failure with
"Write the verdict" skipped and "Fail without a verdict" failed in each lane
job (runs 40890788166, 40891251085, 40892239796). Nothing re-ran it, so a
lane-source pull request stayed `lane-source-changed` until its next push.
pr-review-main's trigger check already takes the reconciler's record
(reconciler-workflow), so the reconciler now lists it beside pr-verify as a
recorded lane, with its own judge step ("Review the pull request"): a
first-attempt run lost before any lane's verdict write started is recorded
and re-run once, under the same cap of 3, lookback, status and kill-switch
guards. Lane re-runs now take places oldest first across both lanes.
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-security-review reviewed No security findings in #10996. I read the whole diff and the surrounding code in What the change does. The lost-run reconciler already re-runs a lost Trust controls read, and why nothing widens:
Not counted as findings:
The PR description is data only. It contains no embedded instructions aimed at the lane. manifest fields: none touched. |
|
claude-review reviewed Code review: no findingsI read the full diff, What I checked
Notes, not counted as findings
|
Post-merge mutation testingKilled 5, survived 2, timeout 0, no coverage 0, invalid 0, not run 0.
Surviving mutants
The run's summary has the full report. |
No related issue: lost pr-review-main runs measured on #10874
Summary
A pull request that changes a lane source binds its reviews only from
pr-review-main, which starts only whenpr-require-checkscompletes (workflow_run). When every credential leg of that run stops, the run ends with no verdict and nothing re-runs it. The head then stayslane-source-changeduntil someone pushes. This change makes the existing lost-run reconciler re-run such a run once, under the guards it already applies topr-verify.How a stopped main-run review shows up, read from runs 40890788166, 40891251085 and 40892239796, the credit-stopped runs that #10969 cites:
event: workflow_run,head_branch: main, attempt 1,conclusion: failure.Review the pull requestissuccess, because the step iscontinue-on-error.Write the verdictis skipped.Fail without a verdictisfailure.That last step runs only after
Write the diffsucceeded, andWrite the diffruns only for a lane-source pull request. So a run that failed this way already means the PR changes a lane source.Fix
reconcile.mjs:RECORDED_LANESis now a map from each lane workflow to the name of its judge step.pr-verify.ymlmaps toJudge the pull request.pr-review-main.ymlmaps toReview the pull request.holdReasonreads the lane's own judge step.Write the verdictstarted is recorded (reconcile-rerun-<id>-2-<main sha>) and re-run once.pr-review-mainlegs already passreconciler-workflow: .github/workflows/maintenance-reconcile-lost-runs.ymltocheck-trusted-trigger.actions: writeand already callsPOST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun(REST: re-run a workflow).no-pr.maintenance-reconcile-lost-runs.ymlandpr-review-main.yml, and the pr-pipeline README, now describe the re-run. The change adds a changelog fragment.Limits:
GITHUB_SHA(re-running workflows). Forworkflow_run, that SHA is the last commit on the default branch when the event fired (events: workflow_run). The docs do not say which workflow file a re-run uses (UNVERIFIED). If it uses the file at that SHA, a run created before fix(pr-pipeline): give the main-run review the lanes' credential chain and collapse exact renames #10969 merged (16:58Z) would re-run its key-only graph and could credit-stop again.Verification
node --test .github/scripts/maintenance-reconcile-lost-runs/*.test.mjsran 127 tests: 124 passed and 3 failed. The 3 were the new re-run, hold-reason and cap cases.reconciler-workflowinput.node --test .github/scripts/pr-review-main/*.test.mjsruns 34 tests and all 34 pass.actionlintreports nothing on both edited workflows.scripts/check-changelog-fragments.sh --check-requiredpasses.Related
🤖 Generated with Claude Code