Result states and layers
Every check reports passed, failed or not_run, and checks run in four layers from bytes to business rules.
Three states
| State | Meaning |
|---|---|
passed |
The check ran and found nothing. |
failed |
The check ran and found at least one problem. Each finding names the rule, the location and a short hint. |
not_run |
The check did not run: the engine or rule set is not available, an earlier layer failed, or it was switched off. |
A check that did not run is never reported as passed. A report lists every check that applies to the format, including the ones that did not run, so a green result cannot hide a missing check.
Four layers
- Bytes: encoding (valid UTF-8, UTF-16 detection, byte order mark), line endings, control characters, invisible and bidirectional control characters.
- Syntax: the file parses — well-formed XML, valid JSON, a readable ZIP container.
- Schema: the structure matches a grammar — RELAX NG, XSD or JSON Schema.
- Rules: business rules on top of the structure — Schematron rule sets such as EN 16931, XRechnung and Peppol, and your own pattern rules.
When a layer fails, the deeper layers report not_run. A file that is not well-formed has no
meaningful schema result.
Output
Text for people, JSON for programs, SARIF for code scanning. The exit code is 0 when every check
that ran passed, 1 when there are findings, 2 when the file could not be read or the call was
wrong. Rule IDs are stable, so CI configurations and AI agents can refer to them.