probat

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

  1. Bytes: encoding (valid UTF-8, UTF-16 detection, byte order mark), line endings, control characters, invisible and bidirectional control characters.
  2. Syntax: the file parses — well-formed XML, valid JSON, a readable ZIP container.
  3. Schema: the structure matches a grammar — RELAX NG, XSD or JSON Schema.
  4. 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.

Edit this page on GitHub