Skip to main content
A promotion gate makes a lineage’s production alias move only on evidence. While the gate is on, promoting a version to production needs a completed experiment of exactly that version, on the gate’s dataset snapshot, scored by exactly the gate’s evaluator versions, that meets every rule below. Otherwise the move is refused with every reason at once. The gate is opt-in per lineage and guards only production:
  • Rollback is never gated, so you can always get back to the previous version.
  • Moves of staging or custom aliases are not gated.
  • A new lineage’s first version becomes production without a check.

Configure the gate

Configuring from the CLI turns the gate on; veri models gate acme-bot --off turns it off and keeps the config, and veri models gate acme-bot shows it.

Create the evidence

This creates the experiment the gate requires (the gate’s snapshot, exactly its evaluator pins and trials) against version 7, and sets the current production version’s latest matching run as the baseline, so the result carries a diff. It works whether or not the gate is on, so you can gather evidence before turning it on. Add --local if the gate pins a local code evaluator. The version must be served by a live deployment: deploy its library model (veri deployments create --from-model mdl_...), or attach it to a fleet that serves the lineage. Otherwise the call returns 409 version_not_servable. With no gate config it returns 409 gate_not_configured. Then promote:
The move’s response carries gate: {passed, experiment_id, baseline_experiment_id, evaluators}.

Rules

Every rule is checked, and every failure is reported:

Refusals

A refused promotion returns 409 with code eval_gate_failed:
failed_rules entries may also carry a hint and, for no_experiment, near_miss_experiment_id and near_miss_reason. newly_failing lists the items that pass on production and fail on the candidate, per evaluator. The CLI prints the same refusal readably and exits 1:
In the SDK the refusal raises VeriRequestError with code == "eval_gate_failed" and the fields above in details; veri_sdk.client.format_gate_failure(error) renders the text.

Judge agreement

veri models gate acme-bot (and client.models.get_gate) also reports, for each pinned llm_judge evaluator, how often the judge agrees with human scores on the same targets, collected through human review. Below 80% agreement over at least 10 shared targets it shows a warning, including on a refusal. The warning never blocks a promotion.

Where to go next

Model versions

Register, promote, roll back, and pin versions.

Experiments

How the evidence runs, and how baseline diffs compare.