// cloud · verdicts
Verdicts & gating
how a run is judged
Every Cloud run carries a single verdict — the headline answer to “is this migration safe?” The verdict is computed by the CLI from the run’s statistical analysis and the migration policy, stamped into the immutable bundle, and stored as an indexed column so EvalShift Cloud never has to crack the blob open to show it.
## The four verdicts
| Badge | Value | Meaning |
|---|---|---|
| PASS | pass | No budget exceeded and no blocking regression. Safe to ship the target model. |
| CONDITIONAL | conditional_pass | Every budget held and nothing critical or high regressed, but medium/low regressions or comparisons that scored no pairs are in the mix. A passing state with caveats — it never blocks a PR on its own. |
| FAIL | fail | A budget was exceeded or a blocking regression of severity critical/high was found. This is the only verdict that gates. |
| INCONCLUSIVE | inconclusive | No decision could be made: no policy is configured, no metrics were recorded, nothing was measured (no blocking evaluator scored a record), every comparison scored severity insufficient, a budget was breached on too small a sample to confirm it, or the policy names a slice this run never measured. The reason string says which. |
## The gate is binary
Badges are four-valued, but enforcement is two-valued. A run is blocked if and only if a policy budget is conclusively exceeded — overall or on a slice, the two block alike — or a blocking regression of severity critical or high is present. A breach the sample cannot confirm is inconclusive, not a fail. Everything else passes the gate:
- +
PASSandCONDITIONALboth clear the gate —conditional_passis informational only. - +
FAILblocks (PR comment + commit status, or the Blocked marker in the Pull Requests view). - +
INCONCLUSIVEnever blocks; it means there was nothing to decide against. It is not a quiet pass — the app renders it in a neutral tone rather than the amber ofCONDITIONAL, because “held with caveats” and “could not be judged” are different answers. A run pushed with no migration policy, and a run whose blocking evaluators scored no records, both land here.
+
server-side enforcement
EvalShift Cloud answers for a run under the policy that was pushed with it: the verdict the CLI computed, stored at finalize alongside the budgets it was computed against. Tightening a budget in
evalshift.yaml changes the next run, never a stored one. See Migration policy.## Where the verdict shows up
- +Run history — a verdict column on the runs table, with a verdict filter.
- +Run detail — the header strip, alongside the regression count and cost/latency deltas.
- +Diff view — a verdict-delta strip showing the baseline verdict moving to the candidate verdict. See Baselines & diffs.
- +Trends — a verdict-history band over time. See Trends & slices.
- +Pull Requests — the latest verdict per PR plus a policy status badge.
