Skip to content

JSON schemas

Verdis publishes a JSON schema for every object in its data model, so that other tools can consume a verdict without scraping text.

Schema The object
report.schema.json a normalized report
claim.schema.json an extracted claim
plan.schema.json a reproduction plan
policy.schema.json a project's policy
build.schema.json a build result
run.schema.json a run result
oracle-result.schema.json one oracle's result
verdict.schema.json the verdict
bundle-manifest.schema.json the bundle manifest
rrs.schema.json a Reproducible Report Spec block

Using them

import json
from pathlib import Path

from verdis.schemas.verdict import VerdictResult

payload = json.loads(Path("bundle/verdict.json").read_text())
verdict = VerdictResult.model_validate(payload)

The schemas are also on disk, in schemas/, and are regenerated from the models:

python -m verdis.schemas.generate schemas/

A test checks that the committed schemas match the models, so a change to a model without a schema change fails the build.

Stability

The schemas are frozen at 1.0. Before 1.0 they may change; after it, anything that would break a consumer is a major version bump.

A note on the verdict

The verdict schema is the one most likely to be consumed by other tools. The important fields:

Field Meaning
verdict one of the seven verdicts.
tier tier1 or tier2, only for REPRODUCED.
flags the secondary flags.
why one paragraph on why.
evidence the points behind the verdict.
policy_matches the clauses that matched, with citations.
dedupe_matches the duplicate candidates, with reasons.
not_established what the verdict does not establish.
next_action what a human should do next.