Skip to content
← All docsReports

The open report schema

Terminal, markdown, and JSON output, stamped with the model and prompt version.

Every run produces three views of the same result: a human readable terminal summary, a markdown report, and norma-report.json, the canonical machine readable artifact. Choose with --format terminal|md|json.

Why it is an open schema

Every report stamps the model and promptVersion used, so a score can be reproduced or contested rather than taken on trust. The JSON conforms to a published schema at https://norma.sh/schema/report/v1.json, which is how the number becomes a shared standard rather than one vendor's metric.

Shape

{
  "schemaVersion": "norma.report/v1",
  "generatedAt": "<ISO timestamp>",
  "model": "<model id>",
  "promptVersion": "<judge prompt version>",
  "remediationPromptVersion": "<set when fixes are generated>",
  "target": { "root": "<path>", "changedFiles": ["..."] },
  "summary": {
    "score": 78,
    "total": 4,
    "counts": { "met": 2, "partial": 1, "missing": 0, "contradicted": 1 },
    "hasContradictions": true
  },
  "requirements": [ { "id": "R001", "text": "...", "priority": "must" } ],
  "findings": [ { "id": "R001", "verdict": "met", "rationale": "...", "locations": [], "remediation": null } ]
}

requirements is the extracted spec, and findings is one verdict per requirement with its rationale, file locations, and, when norma fix ran, a remediation block. See Remediation.

Did the build keep its promises?

AI can write the code.
Who verifies the intent?