Repository navigation
feat(pr-pipeline): work lane-escalated needs-human PRs in address-feedback - #9417
Conversation
…dback A needs-human label a lane escalation (pr-unblock or fix-ci) put on no longer stops address-feedback: the dispatcher and the select job admit the PR's reviewer-bot threads when the lanes App added the label, its escalation comment followed, and no review-lane hold names the current head or is open. A review-lane hold, or anything ambiguous, keeps the fix-request-only rule. The label stays on; clear-escalations owns it. The hold, escalation and label-window logic moves from clear-escalations.mjs into pr-unblock/gate-source.mjs, which both lanes now share. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-feedback Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eedback round gateSource treated address-feedback's own round record as a foreign marker, so the first round on an escalated PR gated every later one. It now accepts the round and model-run lines. The dispatcher's skip tests pin the gate source per case, and the docs say clear-escalations does not clear a label once a round is recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ted PR 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 reviewed all 11 files in the diff and found nothing to block or flag. I read the diff and PR context, plus the surrounding
|
|
claude-security-review reviewed Security review of #9417 at 8807a2d. The change lets What holds up
Finding (IMPORTANT, inline on
Not reported, because the PR already defers them (#9419)
critical-findings: 0 |
No related issue: owner decision Q10 option B (2026-10-23): address-feedback works a needs-human PR whose label came from a lane escalation, and keeps skipping one a review-lane hold gated.
Summary
The human-gated label stopped address-feedback on every PR that carried it, so a repeat review finding on a PR that pr-unblock or fix-ci had escalated went unworked (the #9353 case). Now the dispatcher and the select job tell the label's two sources apart and work a lane-escalated PR's reviewer-bot threads. A review-lane hold (cost, trust-gate, critical-security) still holds the PR, and anything ambiguous falls back to today's rule: only threads a trusted person with write access asked the lane to fix.
Fix
.github/scripts/pr-unblock/gate-source.mjs: the hold, escalation and label-window logic moves out ofclear-escalations.mjs(which now imports it, behavior unchanged), plusgateSource, which reads the PR's comments and label events and returnslane-escalation,review-holdorunknown.lane-escalationneeds all of: the lanes App (matched by user id and Bot type) added the label last, itswork-items:escalation lane=pr-unblockcomment with the resume-key line followed within a minute, no other marker on its comments since, noclaude-lane-holdnaming the current head, and no hold written or edited since the label was last removed. An unparsable hold or escalation marker isunknown.feedback-dispatch.mjsandaddress-feedback.mjs selecttreat alane-escalationPR as ungated; select'sfix-requestedoutput stays true for it so the write runner drops the label from its holds. Neither removes the label:clear-escalations.mjsowns that. Label events are read over GraphQL only when the label is on, so ungated PRs spend no extra request.Verification
node --testovergate-source,address-feedback,feedback-dispatch,publish-feedbackandclear-escalationstests: 308 pass, including a two-round test that fails without the round-marker fix. The new dispatch and select tests failed before the change (lane escalation dispatches; review hold, both present, and unparsable markers skip with a reason naming the gate source).clear-escalations.test.mjspasses unchanged after the extraction.scripts/check-affected.sh: 9 passed, 4 skipped; the selected Python suites pass underuvx pytest(pytest is not installed locally).actionlintandzizmor --offlineon the two touched workflows: no findings.Related
clear-escalations.mjsthe review-hold marker.do-not-mergeis the human re-gate for a lane-escalated PR.🤖 Generated with Claude Code