# description
Machine-readable output of `sm conformance run --json`. Aggregates pass / fail totals across the selected scope set plus per-scope and per-case breakdowns. The `elapsedMs` top-level field is the command's own wall-clock (see `cli-contract.md` §Elapsed time).

# properties.ok.description
Always `true` on the happy path. Error envelopes use the shared `{ ok: false, error: { code, message } }` shape from `cli-contract.md` §Error envelope (unknown scope, missing binary) and do NOT carry this schema's other fields. A run that surfaces failing cases still returns `ok: true` (the verb succeeded; failures live under `scopes[].cases[].status === 'fail'` and gate the exit code).

# properties.kind.description
Discriminator pinning this envelope to the conformance-run verb.

# properties.totals.description
Grand totals across every selected scope.

# properties.totals.properties.cases.description
Total case count, sum of `scopes[].caseCount`.

# properties.totals.properties.failCount.description
Total cases with `status === 'fail'`. Equal to `cases - passCount`.

# properties.scopes.description
Per-scope breakdown in the order the verb iterated. Empty when no scope was selected.

# properties.scopes.items.properties.label.description
Scope label as registered (`spec`, `provider:claude`, ...).

# properties.scopes.items.properties.passCount.description
Cases in this scope with `status === 'pass'`.

# properties.scopes.items.properties.cases.description
Per-case status, in the runner's iteration order.

# properties.scopes.items.properties.cases.items.properties.id.description
Case id (kebab-case stem matching the case filename, see `conformance-case.schema.json`).

# properties.scopes.items.properties.cases.items.properties.status.description
Verdict for the case as a whole. A case passes iff every assertion passes.

# properties.scopes.items.properties.cases.items.properties.failures.description
Failed assertions when `status === 'fail'`. Empty when `status === 'pass'`.

# properties.scopes.items.properties.cases.items.properties.failures.items.properties.reason.description
Sanitised + length-capped explanation. Runner-internal types may splice subprocess stderr verbatim into this field, the CLI applies the same sanitisation as the human renderer (see `formatAssertionFailureDetail`).

# properties.elapsedMs.description
Command's own wall-clock duration in milliseconds (see `cli-contract.md` §Elapsed time).