# description
Score-free record of one run of one verifier (engine) against one named VRP conformance corpus. It carries per-vector outcomes, the reproducibility binding (engine, corpus digest, configuration, environment, run instant) and at least one declared must-fail control. It is not a trust, safety, compliance, certification or whole-agent verdict. It is not a score, a ranking, a registry of nodes, or a catalogue.

# properties.engine.description
The verifier under test. `source` and/or `digest` MUST identify the exact code that ran; a name and version alone are not reproducible.

# properties.corpus.description
The vector set that was run, as a repository path plus a content digest. One report covers exactly one corpus; do not merge corpora into one report.

# properties.config.description
Every input that could change an outcome and is not part of the corpus itself: injected clock source, key resolution, exclusions. Empty object means the engine ran with no options.

# properties.run_at.description
UTC instant the run started (RFC 3339, Z suffix).

# properties.results.description
One entry per vector in the corpus, including vectors that were not run. Missing evidence, a failed control or unavailable infrastructure is `inconclusive` or `void`, never `pass`.

# properties.must_fail_controls.description
Declared controls the engine MUST reject. A control whose `observed` outcome is anything other than `reject-as-required` shows the harness cannot distinguish the behavior; the report is then `discriminates: false` and no aggregate may be published.

# properties.discriminates.description
true only when every declared must-fail control was observed as `reject-as-required`.

# properties.aggregate.description
Optional. Counts only; no score, no weight, no percentile. `denominator` is always the full corpus size. Only `pass` and `reject-as-required` count as distinguished. `not-exercised`, `inconclusive` and `void` can never raise `distinguished`. The aggregate is not a trust, safety, compliance, certification or whole-agent verdict.

# properties.reporter.description
Who ran it. Free text; a report is evidence about a run, not an endorsement of the reporter.

# $defs.digest.properties.method.description
How the digest was produced, precisely enough to recompute it. For a directory corpus: `sha256sum` manifest of the sorted (LC_ALL=C) *.json file names, then sha256 of that manifest text.

# $defs.result.properties.expected.description
The vector's own `expected` block, copied verbatim.

# $defs.result.properties.observed.description
What the engine returned, in the same shape as `expected`. Null members mean the engine did not evaluate that member.