---
title: izri/tests
description: Did the relevant tests run against this diff, and did they pass?
order: 30
---

# `izri/tests`

Tests answers the most familiar question: **did the suite pass?**

It is the most conventional of the four signals, and on its own the least interesting — your CI already runs tests. What makes it useful here is that its result is aggregated with the other three, so a green suite can no longer be the last word. A run that passes while [`izri/hallucination`](/docs/signals/hallucination) reports the diff was never exercised produces a failing umbrella, which is exactly the outcome a bare test run can't give you.

## What it does

Triggers a run against the change set, waits for it, and reports the outcome. Runs execute on the runner — the queue consumer that drains jobs from Redis — so a self-hosted instance without a runner leaves runs at `PENDING` indefinitely. See [self-hosting](/docs/install/self-hosting).

## Run statuses

| Status | Meaning |
| --- | --- |
| `PENDING` | Queued, not yet picked up. |
| `RUNNING` | Executing. |
| `PASSED` | Terminal. Everything passed. |
| `FAILED` | Terminal. Tests failed. |
| `ERROR` | Terminal. The run itself broke. |
| `CANCELLED` | Terminal. Stopped before completion. |

`PASSED` is the only terminal status that isn't a failure. The CLI exits non-zero on every other one.

## Scoring

Test pass rate feeds the composite at weight **0.36** — the second-heaviest signal, behind hallucination.

A run that errors rather than failing is treated as an analyzer error, which is a hard rule. A broken run is not a passing run, and it isn't a soft deduction either: it means Izri has no evidence, and no evidence never resolves to "safe".

## Scoped test selection

Izri selects the tests relevant to the diff rather than always running everything. This keeps the signal fast enough to gate every push. The selection is what `izri/hallucination` then audits — it checks whether the selected tests actually reached the changed lines.

## Running it

```bash
izri run              # trigger, don't wait
izri run --watch      # poll until terminal
```

`--watch` polls every 3 seconds with a 30-minute cap and exits non-zero on any terminal status except `PASSED`.

In CI, the GitHub Action does this for you when `mode` is `tests` or `both`.

## Related

- [`izri/hallucination`](/docs/signals/hallucination) — whether those passing tests meant anything.
- [Verdicts and exit codes](/docs/reference/verdicts-and-exit-codes).
- [Troubleshooting](/docs/reference/troubleshooting) — stuck at `PENDING`.
