Your first verdict
Your PR now has an izri/quality check. This page explains what it is telling you.
Where the verdict appears
Izri publishes to two surfaces, both driven by the same underlying report:
- The check run.
izri/qualityis the umbrella. Each signal that ran appears as its own child check —izri/scope,izri/tests, and so on. This is the surface branch protection reads. - The sticky comment. One comment on the PR, edited in place on every subsequent push rather than appended. You get the current verdict, not a scroll of stale ones.
Both update on every push to the head branch.
Reading the umbrella
The umbrella resolves to one of three states:
| State | Meaning |
|---|---|
passing |
No hard rule fired, and the soft composite cleared the threshold. |
failing |
A hard rule fired, or the composite fell below threshold. |
unknown |
Not enough signal to judge — usually a delta still in flight, or every child skipped. |
unknown is not a pass. If you require the check in branch protection, treat it as "wait", not "go".
Reading a signal
Each child reports independently and can be in a state the umbrella is not:
| Child state | Meaning |
|---|---|
passing |
Ran, found nothing blocking. |
failing |
Ran, found something that fails this signal. |
pending |
Queued or still running. |
error |
The analyzer itself crashed. This is a hard rule — it fails the umbrella rather than being silently ignored. |
skipped |
Not applicable to this diff, or not enabled on your plan. |
skipped is the one to internalize: a backend-only diff skips izri/visual, and that is a healthy verdict, not a gap. The composite redistributes weight across the signals that actually ran, so a skipped signal doesn't drag your score down.
When a signal fails
Failures come in two flavors, and the difference decides whether you're blocked.
Hard rules fail the umbrella outright, regardless of every other signal:
- a change in a forbidden category for the PR's declared type
- a diff that no test exercised at all
- any analyzer that crashed
Everything else is a soft signal feeding a weighted composite that must reach 70. Scope alignment, test pass rate, diff coverage, and visual delta each contribute; a mediocre score on one can be carried by the others.
Some findings never block at all. sensitive_path is emitted at info — it is a "look here" hint pointing at something worth a human glance, not a gate. pr_type_mismatch is warn. Only error-severity findings block by default.
So a failing umbrella means one of exactly two things: a hard rule fired, or the composite came in under 70. The check output tells you which.
Next steps
- The four signals — every weight and hard rule in one table.
- Verdicts and exit codes — how this maps to CI exit codes.
- Troubleshooting — when the verdict isn't what you expected.
Reading this with an agent? /docs/start/your-first-verdict.md serves the raw markdown.
Edit this page on GitHub →All docs