Repository navigation
fix(pr-pipeline): drop non-security review and verify stops - #9798
Conversation
The review lanes hold only for a real charge or a CRITICAL security finding: code-review's cost class covers non-free runners and IaC, and the trust-gate path hold is gone; the security lane reads the takeover paths with extra scrutiny and rates a takeover CRITICAL. The verifier judges the takeover set on what a change does, treats only real-charge holds as owner holds, and passes an oversize diff with notes. ci-status's cost-only clear ignores lanes App comments that are not escalations. The lost-run reconciler re-runs a failed or judge-started pr-verify run once, and pr-verify fails a kill-switched run so it is re-run after the switch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DUS7XB8hUjcDnuSYLqJRzd
…ep spend out of the count The cost class listed only runners and infrastructure as code, narrower than the wrapper prompt's paid-plan, Azure and GitHub billing list, and called subscription spend a counted finding, which holds the merge. Point at pr-review-cli.yml@v0.65.7 for both the schema and the rule, and name such spend in one summary line outside the findings count. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # .github/workflows/pr-review-hosted.yml # .github/workflows/pr-review-security-hosted.yml
# Conflicts: # .github/scripts/maintenance-reconcile-lost-runs/reconcile.mjs
Lane Funding's own pull request replaces the hold-class text in both review skills with a pointer to pr-review-cli.yml, so this branch drops its edits to those sections and keeps only the security lane's takeover-path scrutiny. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # plugins/review/skills/security-review/SKILL.md
# Conflicts: # .github/scripts/maintenance-reconcile-lost-runs/reconcile.mjs # .github/scripts/maintenance-reconcile-lost-runs/reconcile.test.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-review reviewed Incremental review of the four files changed since 158d751: no findings. The change moves the reconciler's pr-verify hold from the judge step's listed conclusion to whether the "Write the verdict" step started ( What I checked by reading the code. I ran no tests.
Cosmetic only, not counted as findings: the rewrapped comments in No |
|
claude-security-review reviewed Incremental security review of 158d751..f688926. I found no security issues. critical-findings: 0 The change moves the reconciler's hold test for a pr-verify run from "the judge step succeeded" to "the Write the verdict step started". That is safe:
Manifests: this diff touches no plugin manifest. Trusted paths: none of the four changed files matches the trusted-path globs. The rest of the change is a changelog entry and comments. It spends no billed resources, so there is no hold. |
…ne re-run comment The verifier passes a part of the diff it could not judge with notes only when that part is prose or data; an unjudged workflow, action, script, hook or binary still fails. A probe fixture with an unreadable binary pins it. The reconciler's comment now says why a lane re-run grants nothing: an uploaded FAIL counts whatever the run's conclusion, and the ci-status job does hold actions: write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The trusted-actor list, CODEOWNERS and .gitmodules are data, so an oversize diff that left one of them unjudged passed with notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The pr-unblock lane stopped on this pull request and needs a person: the merge stages a change under .github/workflows/, which the lane does not push.
To resume, deal with the reason above, remove the gh workflow run pr-unblock.yml -R melodic-software/claude-code-plugins -f pr-number=9798 -f activity=resolve-conflicts |
# Conflicts: # .github/scripts/maintenance-reconcile-lost-runs/reconcile.mjs
The lost-run reconcile log claimed a newer run judges the head for both hold reasons; only the not-started reason implies one. The cut-list hold now logs its reason with no newer-run claim. The verifier's oversize-diff rule now also fails when an unjudged part is a package or plugin manifest, a lockfile, or agent or skill instructions that steer the review or verify lanes. Other docs and fixtures keep pass-notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A FAIL judgment followed by a write or upload error ended the run failed with no FAIL uploaded, and the reconciler re-ran it, giving the head a second model sample. The reconciler now holds a fully listed pr-verify run whose judge step concluded success and names the hold in the run summary; runs lost before or during the judgment are still re-run once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e judge step The judge step is continue-on-error, so its listed conclusion is success even when the judgment broke, and holding on it kept broken judgments from their one re-run. The reconciler now holds a fully listed pr-verify run only when its "Write the verdict" step started; that step runs only on the judge step's true success. Every other lost run is re-run once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No related issue: removes non-intent, non-security stops (owner goal 2026-10-24; rows D:S1, D:S3, D:S6/N2, D:S7, D:S8, D:S10, D:S12, D:STALL 1, D:STALL 3, D:STALL 4, D:STALL 5, D:STALL 6, D:STALL 7, E:E19)
Trust path. This pull request changes the review lanes' hold classes, the review callers, ci-status's cost-only clear, the pr-verify prompt and workflow, and the lost-run reconciler's pr-verify handling. It needs the trust-path reviewer.
Summary
Only an intent mismatch or a security issue should stop an item. This removes the review, verify and ci-status stops in this batch that are neither, and keeps every security gate it touches:
hold-paths, which in ci-workflows v0.65.8 only flags the four trust-gate paths for extra security scrutiny and never holds by itself. The review skills' hold text is fix(review): point the hold classes at the live ci-workflows prompt #9857's (pointer topr-review-cli.yml@v0.65.8); this pull request does not change either review skill.Fix
pr-review-cli.yml@v0.65.8. This pull request leaves both skills as main has them.trust-gateclass went in #9857. Both callers keep main'shold-pathslist: the input "asks the review to give a changed file matching one extra security scrutiny. A match never holds the pull request by itself" (pr-review-cli.yml@v0.65.8#L243-L247). An earlier draft of this branch added a takeover-path paragraph tosecurity-review/SKILL.md(extra paths: kill switch, lane token, resolve-config; a takeover rated CRITICAL). It is dropped: #9857's Trusted paths paragraph covers the same place, and two paragraphs on one topic would disagree. The pr-pipeline README's "Review-lane holds" now says ahold-pathsmatch only flags a file for scrutiny and never holds by itself.pr-verify/prompt.md: a change to the takeover set is read with extra care and fails only when it lets someone outside the organization gain trust, push, merge or mint a token, or weakens one of those checks beyond the spec.prompt.md: the owner-kept cost hold is a hold on a real charge; model, effort, turn, timeout or schedule changes get a note.prompt.md: a diff too large to judge whole returnspass-notesnaming the unjudged parts and a split, unless what was read blocks.babysit_review_evidence.py(poteto's file, off limits), and no mechanism re-runs the security lane from there. Per the batch instruction, the CRITICAL default stays.hold-paths.rerun-ci-statusuploads itsrerun-ci-status-<run>-<attempt>-<sha>record, which check-trusted-trigger accepts.pr-verify.yml: both "Report the kill switch" steps now fail the job, and the reconciler re-runs a failed first attempt, so a run stopped by the kill switch is judged after the switch clears. The reconciler idles while the switch is on.pr-require-checks.ymlcost-only clear: only a lanes App comment carrying a<!-- work-items:escalationmarker, created or edited in the window, keeps the hold. Review replies and fix notes no longer do. A lanes escalation still blocks the clear.reconcile.mjs:failurejoins the lost conclusions for recorded lanes (LANE_LOST), so a judgment that broke after it started is re-run once (attempt 2 is never re-run).hold-labelset andpublish: comments, the reusable'sApply the holdstep runsalways(), including a no-change skip.uncountedis reported only for a run in summary mode or without a hold label, a caller change that would otherwise dodge the holds.resolve-pr.mjs, which belongs to the Q78 builder.reconcile.mjs: the judge-step hold is removed. A run lost after its judge started is re-run once. It was there to stop a cancel-to-rejudge; the lanes App token has noactions: write(pr-merge.yml: "actions: write, which the lane App token does not have"), a FAIL uploaded before the loss still counts, and attempt 2 is never re-run. A run none of whose jobs started is still left alone, because a newer run judges the head. Composed with #9871: a job whose steps did not list in full, and whose cut list reaches the judge step or its predecessor, stays held, because a runner-loss annotation there can be echoed judge output. Only a run whose steps listed in full is re-run after its judge step started.Trust-path reviewer, please check:
critical-securityclass covers them.Verification
node --test .github/scripts/maintenance-reconcile-lost-runs/*.test.mjsafter merging main (fix(ci): count a review lane by its head-bound evidence when the jobs API lists no steps #9813's steps-unknown handling kept; its two judge-step-hold tests now expect the once-only re-run E:E19 makes; fix(maintenance): count a runner-loss annotation only on a failed job cut before the judge step #9871's cut-list holds kept): 89 pass. The new tests cover a judge-started run re-run once, a failed run re-run once, a kill-switched run re-run, a failed attempt 2 never re-run, and pr-verify failing on the kill switch. They failed before the change.bash scripts/ci-hold-cost-decision.test.sh: PASS=140 FAIL=0. New cases: an edited escalation keeps the hold, and a non-escalation App comment clears. They failed before the change.bash scripts/ci-review-lanes.test.sh: PASS=83 FAIL=0. Both callers send exactly the four trust-gate paths ashold-paths, and the exempt-author patterns stay pinned to the same four paths.node --testin.github/scripts/pr-verify: 101 pass.scripts/check-affected.sh --testson the merged head: 12 passed, 1 skipped. The one failure was pytest missing on this machine. The 14 selected Python suites pass underpython3 -m unittest.Related
stops-vs-global-intent-2026-10-24.md(owner session), section "Automation Lanes".pr-review-cli.ymlv0.65.8: the pin both review callers use;hold-pathsis scrutiny-only there.🤖 Generated with Claude Code