# Verification

URL: /code/verification · Id: `process:verification`

> Verification checks every Change and every night’s state against deterministic checks and returns verdicts, never Approvals.

Verification checks every [Change](/business/nouns/change) and every night’s state against deterministic checks and returns verdicts, never [Approvals](/business/nouns/approval).

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each Change carries a pass or fail verdict with Evidence, and each regression found overnight is an Issue with a reproduction. |
| Reads | [Change](/business/nouns/change) |
| Leaves | [Issue](/business/nouns/issue), [Change](/business/nouns/change), [Evidence](/business/nouns/evidence) |
| Runs in | Each Startup |

## Accountable
[Quality Lead](/agents/quality/quality-lead), [Quality Team](/agents/quality).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Nightly quality run](/code/verification/nightly-quality-run) | every day at 03:00 | [Quality Team](/agents/quality) |
| [Change verdict](/code/verification/change-verdict) | on `Change.created` | [Quality Team](/agents/quality) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Nightly quality run](/code/verification/nightly-quality-run) | 1. Re-run every check across the Startup. | [Tester](/agents/quality/tester) | [Action.evaluate](/business/nouns/action/evaluate) | None |
| [Nightly quality run](/code/verification/nightly-quality-run) | 2. Replay known-good Actions on every Interface. | [Tester](/agents/quality/tester) | [Watch.replay](/business/nouns/watch/replay) | None |
| [Nightly quality run](/code/verification/nightly-quality-run) | 3. Walk the synthetic paying stranger from signup to first value. | [Tester](/agents/quality/tester) |  |  |
| [Nightly quality run](/code/verification/nightly-quality-run) | 4. Open an Issue for each regression, with the Action that reproduces it. | [Tester](/agents/quality/tester) | [Issue.create](/business/nouns/issue/create) | None |
| [Change verdict](/code/verification/change-verdict) | 1. Run the Change’s checks. | [Quality Lead](/agents/quality/quality-lead) | [Change.review](/business/nouns/change/review) | None |
| [Change verdict](/code/verification/change-verdict) | 2. Replay known-good Actions and the synthetic paying stranger against it. | [Quality Lead](/agents/quality/quality-lead) | [Watch.replay](/business/nouns/watch/replay) | None |
| [Change verdict](/code/verification/change-verdict) | 3. Record the verdict, pass or fail, with its Evidence. | [Quality Lead](/agents/quality/quality-lead) | [Evidence.create](/business/nouns/evidence/create) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | Every day at 03:00 | Starts [Nightly quality run](/code/verification/nightly-quality-run) |
| In | On `Change.created` | Starts [Change verdict](/code/verification/change-verdict) |
| Out | [`Action.evaluated`](/business/events/Action.evaluated) | Raised by step 1 of [Nightly quality run](/code/verification/nightly-quality-run) |
| Out | [`Watch.replayed`](/business/events/Watch.replayed) | Raised by step 2 of [Nightly quality run](/code/verification/nightly-quality-run) |
| Out | `Issue.created` | Raised by step 4 of [Nightly quality run](/code/verification/nightly-quality-run) |
| Out | [`Change.reviewed`](/business/events/Change.reviewed) | Raised by step 1 of [Change verdict](/code/verification/change-verdict) |
| Out | `Evidence.created` | Raised by step 3 of [Change verdict](/code/verification/change-verdict) |

## Plays
No Play names this Process.

## Controls
- [Worker competence](/systems/trust-and-governance/controls/worker-competence)
- [Control wake review](/systems/trust-and-governance/controls/control-wake-review)
- [Control definition](/systems/trust-and-governance/controls/control-definition)
- [One-way Action windows](/systems/trust-and-governance/controls/one-way-windows)
- [Control sameness](/systems/trust-and-governance/controls/control-sameness)
- [Adversarial control testing](/systems/trust-and-governance/controls/adversarial-testing)
- [Namespace isolation](/systems/trust-and-governance/controls/namespace-isolation)
- [Append-only records](/systems/trust-and-governance/controls/append-only-records)
- [Change approval](/systems/trust-and-governance/controls/change-approval)
- [Agent definition evals](/systems/trust-and-governance/controls/agent-definition-evals)
- [Environment separation](/systems/trust-and-governance/controls/environment-separation)
- [Input validation](/systems/trust-and-governance/controls/input-validation)
- [Action completion](/systems/trust-and-governance/controls/action-completion)

## Settings
None.

## Failure
A failed step retries; when retries run out, the Action goes to the [Quality Lead](/agents/quality/quality-lead).

## Loop
No loop: the path is never randomized, because it serves [Agent definition evals](/systems/trust-and-governance/controls/agent-definition-evals).

## Code

**Ask**

```text
Turn on verification
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for every Product Template. [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

## Example
A Change renames `total` to `amount` in an invoice-parsing API. Two known-good runs fail against it, so the verdict is fail, with both runs as [Evidence](/business/nouns/evidence). That night, the quality run passes every replay on the unchanged main line.