Browse docs
Docs /start/your-first-verdict
Getting started

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/quality is 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

Reading this with an agent? /docs/start/your-first-verdict.md serves the raw markdown.

Edit this page on GitHub →All docs