Repository navigation
fix(ci): post a pr-unblock stop status on the head the lane pushed - #12743
Conversation
report-stop-status posted the failing stop status on the select job's head, read before the activity's own push. When publish-feedback or apply-dependency-verdict stopped after apply-feedback-patch or apply-dependency-patch pushed, the pull request's new head carried no failing status, so ci-status passed and pr-merge armed auto-merge over the stop. HEAD_SHA now takes each activity's pushed-commit before its select head, and report-stop-status needs apply-dependency-patch. The enable-auto-merge.mjs header now lists HOLD_LABELS as the code does. Co-Authored-By: Claude Opus 5.5 <[email protected]> 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-security-review reviewed Security review: PR #12743 (head 6806423)I found no security issues in this change. I read every hunk of all 5 changed files in What was checked
critical-findings: 0 |
|
claude-review reviewed Code review: no findingsI read every hunk of all 5 changed files. Two are on trusted paths, Since the last review (
Other files
Notes
|
…test report-stop-status posts on the commit the activity's push job pushed, before its select job's head, and needs apply-dependency-patch for it. report-escalation now needs apply-dependency-patch too, so the two jobs' needs stay equal; it still reads none of that job's outputs. The callers test pins the new HEAD_SHA order and evaluates it: each push job's pushed commit wins over its select head, and the select head stands when nothing was pushed. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
…tatus-pushed-head
No related issue: defect found tracing #12647's needs-session arm
Summary
pr-unblock's
report-stop-statusposted the failing stop status on the head the select job read, before the activity's own push. In run 41575318920 on #12647,apply-feedback-patchpushedefa0184c(parent55176925),publish-feedbackthen stopped withfeedback-unadjudicated(routedfail), andreport-stop-statuspostedpr-unblock/address-feedback failureon55176925. The PR's headefa0184ccarried no failing status, so ci-status passed and pr-merge'senable-auto-mergearmed it with an open finding, whilereport-escalation(which reads the live head) commented onefa0184c.Fix
.github/workflows/pr-unblock.yml,report-stop-status:HEAD_SHAtakes each activity's push-jobpushed-commitbefore its own select head:apply-conflict-patchbeforeresolve-conflicts-select,apply-feedback-patchbeforeaddress-feedback-select,apply-dependency-patchbeforereview-dependency-select.apply-dependency-patchis added to the job'sneeds. It already ran before this job throughapply-dependency-verdict, so the order of jobs does not change.pushed-commitcomes only from the base'sapply-patch.mjsstep (pr-run-activity-write.ymlpushed-commit: ${{ steps.act-script.outputs.commit }}). It is not gated ondispatcher-run-idasreport-escalation's input is: the push happened either way, so that commit is the PR's head.publish-feedbackruns afterapply-feedback-patchand can stop (feedback-unadjudicatedand others). This is the observed defect.apply-dependency-verdictruns afterapply-dependency-patch. On a lane push it can stop withdependency-invalid,dependency-config-unreadableordependency-fix-refused(apply-dependency-verdict.mjs349/361/367). This is the same defect.apply-conflict-patch's push.conflict-scan-refusalruns only when no patch was written, andapply-patch.mjspushes or escalates, never both (1395-1400). The change here affects only theclearpath, which now targets the pushed commit (a no-op, since that commit has no status yet) instead of a head the PR has left.apply-patch.mjs, no reply or verdict job follows, andrung-up=truemeansapply-patchdid not push..github/scripts/pr-merge/enable-auto-merge.mjs: the header now lists theHOLD_LABELSthe code reads (do-not-merge,pr-verify-failed,security: outside-actor) plus the human-gated label.statusandclearmake the same calls whatever commit they target, and the addedneedsentry runs nothing.apply-patch-rung-uppushed and the job then failed,ci-fix-escalatedwould land on the pre-push head. GitHub does not document whether a failed reusable job's outputs reach its caller.Verification
node --test .github/scripts/pr-unblock/workflow-gates.test.mjs: 49 pass, 0 fail. The new testreport-stop-status posts on the commit the activity's push job pushed, else its select headfails without the change in two places:needslist it fails withreport-stop-status needs apply-dependency-patch.needslist and the oldHEAD_SHAexpression it fails withapply-conflict-patch over resolve-conflicts-select: 'before' !== 'pushed'.node --testover workflow-gates, feedback-dispatch, dependency-dispatch, fix-ci-dispatch, dispatch, refire-refused, maintenance-monitor-signals/collect and pr-merge/enable-auto-merge: 721 pass, 0 fail.pr-unblock.yml, all 0 fail:scripts/pr-unblock-trusted-base.test.sh: 29 passscripts/read-runner-dispatcher-gate.test.sh: 10 passscripts/check-read-caller-keys.test.sh: 57 passscripts/ci-rerun-ci-status.test.sh: 291 passscripts/plan-test-lanes.test.sh: 58 passactionlintonpr-unblock.ymlreports only the existingcache-modeandconcurrency.queuekeys its version does not know, and nothing on the changed lines.Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW