Features

Four signals.
One verdict.

Every pull request is scored on four independent axes. The umbrella check — izri/quality — folds them into a single answer to the only question that matters: is this delta safe to merge?

github · checks · PR #482
izri/qualityfailing · 1 hard fail42s
izri/scopepassing · 96
izri/testspassing · 88
izri/hallucinationfailing · fabricated assertion
izri/visualat-risk · 2px drift

passing recedes · failing surfaces — chroma is reserved for urgency

01 / 04izri/scope

Did the change match its stated intent?

Izri reads the PR description as a contract, then walks the diff file by file. Edits that serve the intent pass quietly; edits nothing in the description explains get flagged — the classic tell of an agent that wandered.

  • Intent parsed from title, description and linked issues
  • Every hunk classified: in-scope, supporting, or unexplained
  • Unexplained edits annotated on the exact lines
intent: "fix pagination off-by-one"scope · 96
api/paginate.tsin-scope
api/paginate.test.tssupporting
billing/invoice.tsunexplained
ui/table.tsxin-scope
↳ why does a pagination fix touch billing?
02 / 04izri/tests

Do the tests actually pass — and cover the diff?

Not just a green run. Izri measures how much of the changed code the suite exercises, retries suspiciously fast failures, and marks flaky specs instead of letting them poison the verdict.

  • Diff coverage, not repo coverage — the lines that changed
  • Flake detection with automatic quarantine & retry
  • Score drops when new code lands untested
vitest · 214 specstests · 88
paginate returns last page12ms
cursor survives empty result9ms
retry on flaky socketflaky · 2/33.1s
diff coverage91%
03 / 04izri/hallucination

Are the tests real — or did the agent invent them?

AI-written tests can assert against APIs that don't exist, mock the very thing they claim to verify, or pass vacuously. Izri traces every assertion back to a real symbol in your codebase — a fabricated one is a hard fail, no matter the other scores.

  • Every asserted symbol resolved against the real code graph
  • Detects self-mocking & tautological assertions
  • Fabrication is a hard fail — it vetoes the umbrella
assertion trace · checkout.test.tshallucination · hard fail
cart.total()resolves → lib/cart.ts:41
applyCoupon()resolves → lib/promo.ts:18
api.users.bulkVerify()no such symbol
↳ assertion targets a method that exists nowhere in the codebase
04 / 04izri/visual

Did anything the user sees quietly change?

Izri renders the routes your diff touches, compares them against base pixel by pixel, and boxes the regions that moved. Intentional redesigns approve in one click; accidental drift never reaches production.

  • Only routes reachable from the diff are rendered
  • Perceptual diffing — anti-aliasing noise ignored
  • Approve a change once; it becomes the new baseline
visual-diff · /dashboardcompared
base
this PR
34% wider
mainvsPR #4821 layout break
Seven states

Shape first, colour second.

Every state is encoded by pip shape and halo before colour — legible in monochrome, in a terminal, or to colour-blind eyes.

PassingFailingAt-riskPendingRunningFlakySkipped

Put the four signals on your next PR.