fix(review): a review with a control that did not run stops a merge
Operator decision 2026-10-06. Before, a WARN that existed only because a reviewer or engine never reported (e.g. /security-review without an origin remote) mapped to verdict-gate exit 0, so a review nobody performed in full was green. Now `missing-reviewer:` / `unattributable-payload` in the JSON block's allow_blocked_by is exit 2 (could not decide, never green); a WARN for a MAJOR or a set-aside finding still passes with its reasons. A 1.1 review must carry allow_blocked_by. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
40f6ae1177
commit
22e792ce19
7 changed files with 72 additions and 14 deletions
|
|
@ -214,7 +214,9 @@ Verdict is mechanical — never override. The verdict goes into the
|
|||
frontmatter `verdict:` field (REQUIRED, K7), the trailing JSON block AND the
|
||||
Executive Summary's first sentence — the same value in all three.
|
||||
`lib/review/verdict-gate.mjs` reads the frontmatter and refuses (exit 2,
|
||||
never green) a file whose JSON block or BLOCKER findings contradict it.
|
||||
never green) a file whose JSON block or BLOCKER findings contradict it, and
|
||||
a WARN whose `allow_blocked_by` names a reviewer or engine that did not run.
|
||||
Always write `allow_blocked_by` (an empty list when nothing withheld ALLOW).
|
||||
|
||||
## Output: review.md content
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue