Repository navigation
fix(pr-pipeline): let a kill-switch stop skip cleanly and re-fire pr-unblock heads after the switch lifts - #10844
Conversation
…unblock heads after the switch lifts The write lane's token request now passes kill-switch-ok on a pull request run, so a broker kill-switch refusal ends neutral kill-switch (a new skip-reason) instead of red, and the gate's own kill-switch stop posts the same title. The pr-unblock dispatchers read a kill-switch check as a stop that did no work (limit-stop.mjs killSwitchStop), so a head stopped this way is dispatched again once the switch lifts, under the per-head caps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mp the new skip reason minor Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # .github/scripts/pr-unblock/dependency-dispatch.mjs
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 Incremental review of the four files changed since 9c1573f. I found no security issues. critical-findings: 0 The change makes the kill-switch skip narrower.
No manifest fields are touched. |
|
claude-review reviewed Incremental review of the four files changed since 9c1573f. I found nothing to flag.
I only read files and did not run the test suite, so test results are unverified. This change spends no money. |
No dispatcher re-fires report-escalation, so a neutral skip would drop a real escalation's comment and label. The write lane passes kill-switch-ok only for a pull request run of any other activity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Unattended merge: risk HIGH at head |
|
Unattended merge: risk HIGH at head This refusal has stood unchanged at this head, so a person is needed: the pr-merge lane added the human-gated label. |
No related issue: kill-switch stranding seen on #10828 #10829 #10808
Summary
A lanes kill switch turned on while a pr-unblock run is in flight stopped it red, and the head then stayed stranded after the switch lifted. The run's own kill-switch step had already passed, so only the token broker's live read stopped it:
pr-run-activity-write.ymlrequested the lane token withoutkill-switch-ok, so the refusal failed the job (lane-token-denied ... kill-switch, seen on #10828). A failedpublish-feedbackthen mapped tofeedback-publish-failed, which routesfail. The dispatchers treat a head that already has an activity check run as handled, andmaintenance-reconcile-lost-runsre-fires onlyci-statusafter a lift, so nothing re-fired those heads until a new push.This PR edits
.github/workflows/, so the owner arms it.Fix
pr-run-activity-write.ymlpasseskill-switch-ok: ${{ inputs.issue-number == '' }}on the token request. On a pull request run the refusal now ends green with no token, every later step skips, and the check is neutralkill-switch. An issue run (work-resolve-issue) stays red, since work-unblock re-fires its issue from the failed mint step. Three later steps that read the token now also gate on it explicitly (token != ''); each already ran only after a step that required the token, so nothing changes at run time.skip-reasonkill-switchinpr-pipeline.schema.json.report-check-runrefused an enum miss as failure, so the token-path skip needed a member. The gate's own kill-switch stop now maps tokill-switchinstead ofprerequisite-missingtoo, so both paths post one title. This applies to every lane checkreport-check-runposts, so the fragment bumps minor, aslane-stoppeddid.limit-stop.mjs(KILL_SWITCH_STOP,killSwitchStop,releasesHead):anyHandlesnever counts a kill-switch skip on the activity's own check as handling the head. It counts towardlimits.limit-stops-per-head, like a held skip, so a switch that keeps flipping mid-run still ends the head.stopRelease(resolve-conflicts, and review-dependency's verdict, which main now routes through it) releases a head on a kill-switch emitter check as it does on a lane stop.Skipped: kill-switchamong its releasing skips. That also feeds the half-hourly sweep, address-feedback's only trigger after a lift, underSWEEP_HEAD_CAP..github/actions/check-trusted-trigger/README.md:63). The dispatchers already run only with the switch off (pr-unblock-dispatch.yml:98-119,pr-feedback-dispatch.yml:137-146), so not counting a kill-switch check re-fires the head on their next run after the lift.Verification
node --testunder.github/scripts/pr-unblock(943 pass),.github/scripts/pr-merge(627),.github/actions/resolve-configafternpm ci(744),.github/actions/report-check-run(109),.github/actions/request-lane-token(76) and.github/scripts/maintenance-reconcile-lost-runs(117): all pass, 0 fail, on the head merged with main.actionlint .github/workflows/pr-run-activity-write.yml: clean.kill-switch-okrenders true with an empty issue number and false with one set.Skipped: kill-switch.anyHandles,permanentlyHandlesandstopReleaseon kill-switch stops, including the cap.SWEEP_HEAD_CAP.kill-switchdenial stays red, as before: a red address-feedback or review-dependency check with no limit record still holds its head.totalCount, so a pr-refine fix-docs head the switch stopped still strands, as before this change.apply-patch-rung-upreads as a clean apply toreport-escalation, so the rung-up stop posts no status. It is silent, not red.stopReleaseunit test only.Related
kill-switch-okto request-lane-token for pr-merge and intake-triage.🤖 Generated with Claude Code