The gate & replay
Assurance is cheapest before a change ships. Two mechanisms make promotion an evidence question rather than a dropdown: the lifecycle gate, which demands proof at each stage transition, and replay, which rehearses a candidate configuration against real recorded traffic — offline.
The lifecycle gate
Section titled “The lifecycle gate”lifecycle_stage moves proposed → approved → active → deprecated → retired. Each
transition carries an evidence requirement:
| Transition | Requires |
|---|---|
proposed → approved |
A contract minted for the current config; an owner; intended use |
approved → active |
An approver recorded on the contract; a liveness decision |
active → active (config change) |
No unapproved widening of permissions |
active → deprecated |
A successor named, or “no successor” stated explicitly |
deprecated → retired |
No runs for the quiet period (30 days) |
Moving backwards needs no evidence — that is how an operator corrects a mistake, and a
gate that traps a system in active is a gate people route around. Skipping a stage is
refused outright.
Systems with eu_ai_act_risk_tier: "high" additionally require a named human approver on
every transition, and an unexpired impact assessment (an EU AI Act Article 27 FRIA, a
DPIA — attached as evidence) for proposed → approved. Both are
floors, not defaults: a tenant policy can tighten the other requirements or relax
them, but cannot remove these. The assessment is demanded only at the approval step —
approval is the review where the document is actually read, and a document does not get
truer by being checked twice.
External evidence
Section titled “External evidence”Some evidence the platform cannot generate: an impact assessment, an evaluation report, a
red-team or penetration-test report. These attach to the AI System as evidence
artifacts — pointers with fingerprints, not copies. The document stays in your document
system; the platform records where it lives (uri), how to verify it (sha256), who
produced it, whether that party was independent of the team that built the system,
and how long the assessor’s claim holds (valid_until). An expired impact assessment
does not satisfy the gate — evidence that has aged out is a different fact from evidence
that exists, and the refusal names which document needs renewing.
Attached artifacts appear in the Assurance Report, which also states plainly when everything attached is self-produced — independent evidence matters more as the stakes rise, so its absence is a named gap, never a silent one.
The checklist is visible before you click
Section titled “The checklist is visible before you click”GET /v1/admin/ai-systems/{id}/lifecycle returns every reachable stage with its full
requirement list, each item marked satisfied or not. The UI shows an operator what is
missing rather than a red toast after the fact, and a refusal names every missing
requirement at once rather than the first one.
Replay
Section titled “Replay”Your audit log is an eval dataset: Brutor collects production traces as a byproduct of enforcement, so a suite costs nothing to gather. If a replay suite is bound to a system, promotion through the gate requires a passing replay run.
Because nothing is dispatched, replay cannot call a tool, spend a token or move money — that is structural, not a setting. It is also deterministic, so a failing gate is reproducible rather than a coin flip against a live provider.
Sampling is stratified, rarest-first across terminal state, step-count decile and tool signature — plus an explicit outlier bucket for runs that brush the iteration cap. “The last 50 runs” is the obvious suite and it gates nothing: it encodes the happy path and misses the exhausted runs, the rare tool and the long trajectories, which are exactly the cases a config change breaks. Each case records which stratum it was picked for, so a suite that is thirty variations on one happy path is visible as such.
The diff classifies each case:
| Verdict | Means | Passes? |
|---|---|---|
matched |
Every step decided the same way | ✅ |
policy_changed |
A step now needs approval that did not | ❌ |
outcome_changed |
A step that used to succeed is now denied — the task would not have completed | ❌ |
failed |
The case could not be evaluated (its actions aged out) | ❌ |
skipped |
Excluded from the pass rate entirely | — |
A new approval requirement is stricter, not broken, so it is reported separately from an outright denial — blocking a release for tightening would teach people to route around the gate.
Nothing that evaluated nothing reports a pass. An empty suite, an unreplayable suite, a case whose actions have aged out of retention: each fails with a reason. A suite where every case was skipped reports no pass rate at all rather than a confident 100%.
Related
Section titled “Related”- Contracts — the thing being promoted, and the diff an approver reads
- The run ledger — where the recorded traffic comes from
- Behavioural drift — the after-the-fact counterpart to replay

