Four Review Phases
1
Setup and Classification
The engine identifies the diff under review, its base, the related issue’s acceptance criteria and the risk profile of the changed files.
2
Verification Checklist
PRFlow builds a checklist of the claims this specific change makes: dependency interactions, test and mock alignment, data-format assumptions, API contracts and absolute claims. It drops an absolute claim that does not quote the change’s own text, and removes overlapping checks. Simple presence or absence claims are resolved directly. Deeper claims go to a reviewer for evidence-based evaluation. For a generated claim eligible for INVALID, a failure needs evidence of a broken requirement: the code’s own contract, a repository rule, or what a shipped caller or documented state needs. The reviewer uses INVALID only after establishing that the code is correct and no requirement source supports the claim; a validated INVALID counts as a pass. If the reviewer cannot establish correctness or settle the requirement, the item is inconclusive. A counterexample whose whole case is one an acceptance criterion says the finished change still allows or leaves as before does not fail such an item; one reaching beyond those words, or that the reviewer cannot place wholly inside them, still counts. Acceptance-criterion checks and re-checks of earlier findings follow their supplied grading rules.Each item comes back as pass, fail or inconclusive. A failed item and an inconclusive item both prevent a clean approval.
3
Specialized Reviewers
PRFlow dispatches reviewers with different focus areas, in separate contexts, so they do not inherit each other’s conclusions. Four always run and two run only when the change warrants them.Findings identify a file, a line and a defect type where possible. PRFlow uses that signature to count independent corroboration: when several reviewers report the same defect, confidence in the finding rises. A finding from a single reviewer stays visible for closer human scrutiny.
4
Verdict
PRFlow combines the checklist results, the findings, which reviewers completed and the configured severity threshold into one verdict. It reports incomplete checklist items and any reviewer that did not complete.
Which Reviewers Run
Four reviewers run on every review:
Two more run only when the diff warrants them:
A reviewer that does not run is not a reviewer that found nothing. When two or more reviewers fail to return results, PRFlow adds a partial review coverage note to the verdict so you can see the gap.
The Verdict Vocabulary
Every review reports one of five verdicts.What Drives a Rejection
Any one of these produces aREJECT:
- A verification-checklist item that failed, when its severity is at or above the configured severity threshold. The checker grades each item
critical,importantorsuggestionby how much breaks: for a failed item, the requirement or counterexample it found; otherwise, the claimed behavior failing. An item without a trustworthy grade counts ascritical. A failed item about inert prose (defined below) counts at its capped grade; the report still lists it. A failed item from the pull request’s last posted review is re-checked against the head being reviewed. Between review-and-fix passes, only a passed checklist item can carry over: it keeps its earlier result when, among other conditions, its cited lines are unchanged. - A finding at or above the configured severity threshold. At the
importantandsuggestionthresholds, a finding below Critical whose whole claim is behavior a decided acceptance criterion requires, or that asks for what one excludes, is exempt unless a rule below rejects it or its relation to the criterion is unclear or only partly decided: it stays in the report at its grade, marked[decided by criterion <N>].
critical, so only critical findings and critical checklist failures (less the inert-prose exception above) reject through it; the rules below reject at any threshold, except for inert prose as noted. A lower-graded one does not reject on its own and is listed in the report with its severity. Set prflow_review.verdict_severity_threshold to important or suggestion to make more of both reject. See Review Settings.
The Rules That Surprise People
Further rejection rules do not read the severity threshold. Their one exception is inert prose: a code comment, docstring or documentation line that no tool or agent reads to decide behavior. An untrue line of inert prose is capped at Suggestion, or at Important when it ships to readers outside the repository (a README, a published doc page, a release note, a user-facing message), so it never rejects at the default threshold. “Untrue” here means the added or modified line contradicts the code as it now stands, is already stale or contradicts another part of the same change. PRFlow treats this as a correctness principle rather than a severity grade: a change that documents itself incorrectly is wrong regardless of how minor the wording looks.Why this rule is absolute
Why this rule is absolute
A wrong comment or a wrong documentation line survives the pull request and misleads every reader afterwards, including the next automated run. A severity threshold exists so a team can decide how much polish blocks a merge. It is not meant to let a change ship a statement about itself that is false. Rating that as a suggestion, and then letting the default threshold ignore it, is exactly how such lines used to reach the default branch.
Stricter than criterion line, a finding that reports only its departure moves to Informational — Deferred and rejects at no threshold (see Disclosed Stricter-Than-Criterion Fixes). Separately, on every run that builds a checklist, every decided acceptance criterion gets exactly one checklist item, however many the issue carries, and these items never count against the checklist’s size cap. If any criterion is left without an item, the review rejects with a coverage shortfall. A run whose checklist generation failed caps that run’s verdict at APPROVE WITH CAVEAT, because no checklist was generated.
Review and Fix
/prflow:review-and-fix runs the same engine inside a correction loop. It evaluates each finding, applies the corrections it can justify, verifies each correction and reviews the result again. The configured default cap is five fix iterations.
Before an approval-side result stands, a shadow pass reviews the diff again with the primary reviewers’ conclusions withheld from its prompts; under /prflow:implement, a clean first iteration skips it. Its separate write directory reduces accidental discovery; it does not isolate reads. It can send a missed finding back into another iteration and reports reviewer coverage gaps.
A report with no gaps means only that PRFlow recorded no known gap. It does not mean every defect was found.