ci: keep the judge changeable, and let ordinary pull requests merge - #2141
Conversation
Two defects an adversarial audit found in the verification workflow, both of which would have taken effect the moment distribution-verify became the required check. The documented policy-update/* ceremony for changing the verifier existed only in prose. The branch exemption fired solely when NO part of the judge was on base, so once installed the judge could never be changed by any pull request - including the ceremony meant to change it. There is now an arm for it; the control is that such a branch is judged by the PREVIOUS base verifier and requires human review, not that the diff is forbidden. Separately, once a release lands, .release/files.sha256 makes every edited file a digest mismatch, so an ordinary pull request - a README typo, a community patch - would have been unmergeable. Full artifact verification is now scoped to what is actually being published: a release branch, or a push to main. Landed as its own two-path change so the release candidate carries judge bytes identical to base, which is what lets it be judged by a verifier it cannot modify. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
/prflow:review |
PRFlow Review — PR #2141Status: ✅ Reviewed Blueprint
Verdict: APPROVE WITH ADVISORY NOTES (shell-correct, CI-green cutover; one behavior-inert comment falsehood and one intentional security-boundary tradeoff to note before merge)The change adds two guarded early-exit arms to Issue ComplianceNo related issue found — requirement compliance not checked; scope not-established. Verification Checklist ResultsChecklist skipped intentionally (Phase 0.5: small_diff + config_only — a deliberate low-risk-diff engine profile, not a failure). No caveat applies (rule 4b). Code Review Findings🟠 Important / Major
🟡 Suggestion / Minor
over-grade annotation: one finding flagged (Important arm-2 finding — shape 3, advisory only; does not change the verdict). Verdict Criteria applied
Notes for the consumer / gotchas
|
A policy-update change: it modifies the verification workflow itself, so it lands on
its own, judged by the verifier currently on
mainrather than by the one it installs.An adversarial audit of the cutover plan found two defects, both of which would have
taken effect the moment
distribution-verifybecame the required status check.1. The judge could never be changed again
The
policy-update/*ceremony documented for changing the verifier existed only inprose. In code, the branch exemption fired solely when no part of the judge was on
base. Once installed, every pull request touching it would fail — including the ceremony
meant to change it. The repository would have been permanently unable to update its own
verification logic except by an admin bypass or by removing the required check, i.e. the
exact controls this design exists to tighten.
There is now an arm for it. The control is that such a branch is judged by the
previous base verifier and requires human review — not that the diff is forbidden.
2. Any ordinary pull request would have been unmergeable
Once a release lands,
maincarries.release/files.sha256, and the verifier reports adigest mismatch for every edited file. A README typo or a community patch would have
failed the required check with no way to pass it.
Full artifact verification is now scoped to what is actually being published — a
release/*branch, or a push tomain. An ordinary pull request is exempted with astated notice rather than silently skipped.
Why now
The pending release candidate carried these fixes, and the base-equality rule correctly
refused it: a release must not change its own judge. Landing them here first means the
release can then carry judge bytes identical to base, which is precisely what lets it
be judged by a verifier it cannot modify.