Skip to content

Models, populations, and evidence formats

GND artifacts answer different questions and have different versioned contracts. Keep them separate even when they refer to the same model. A model version, a report schema version, and the package version are independent identities.

The two starting artifacts

A model declares object types, fact types, constraints, provenance, and optional operations, derivations, and fixed references. A population provides instances and facts for that vocabulary and declares what it covers. Both accept the supported YAML/JSON representation; a .json suffix does not turn a file into a different semantic model.

population.model is a model reference label; model_id, when declared, checks compatible identity. Neither means “open any path written inside this data.” Pass the actual model explicitly to the API or command. Coverage says which fact types the population addresses. An absent relation is not silently equivalent to a deliberately covered empty relation.

Use complete tutorial checkpoints as starting examples. A schema fragment in a guide illustrates one construct and is not a complete loadable model.

Canonical references

Artifact or concern Authoritative reference
Model YAML/JSON, operations, derivations, temporal terms, references Representation format
Shared vocabulary and project-owned rules Model includes (version 5)
Constraint families and checkability Constraint reference
Populations, typing, coverage and verdict bands Population format
Rule origins, proposal status and modality Provenance and modality
Structural model and population schemas Model schema, population schema
Operation invocation walk Steps schema and the representation format's walk contract
Check/report variants Report schema
Model comparison Diff contract, diff schema
Generated project and ownership Codegen contract
Static declarations and runnable smoke rows Architecture contract
Project agreement findings Conformance contract
Change proposals, previews and records Evolution contract
Recovered-code evidence Recovery contract
Extraction sidecars and document manifests Extraction contract, rendering contract
Anchor sidecars (versions 1 and 2) Anchor sidecars, anchor sidecar schema
Composition manifests and records Composition, manifest schema, record schema
Session contracts and outcomes Session skill, v7 contract, v8 judgments
Finite witnesses and bounded native bundles Witness contract, export contract
Why-not answers Why-not reference, why-not schema (gnd-why-not/2)
Which outputs carry values in each mode Disclosure

These links point into the repository's maintained specification and schema sources. For a released integration, consult the same paths at the tag/commit matching your installed package rather than assuming main is that version.

Bind bytes without confusing the identities

Some identities bind normalized model/population representations; others bind the raw file bytes. The format says which applies. Fixed-reference sha256 pins, for example, bind exact raw files; changing whitespace changes the pin. Transition model_digest and operations_digest have different bases. Obtain them from gnd validate MODEL --trace, rather than hashing the whole model file and guessing. The canonical model identity, a digest a caller can recompute without Python, is defined in the representation format's "Model identity (canonical, versions 1 and 2)"; gnd validate MODEL --identity prints it and the document it hashes. Wherever GND matches a model_digest you supply (a walk, a report read back, a synth sidecar, a witness certificate), either identity is accepted, and GND keeps writing the legacy value in its own reports; the representation format's digest table states the rule.

An input refusal after a file change is useful information: the old evidence described other bytes. Re-author or regenerate the appropriate dependent artifact deliberately. Do not merely replace a digest to label old evidence current without rerunning the step that produced it.

Consume the right report

Check JSON, a session outcome, a conformance report, a witness certificate, and a review synthesis are not interchangeable success records. Read the schema version and command family first, then its findings and bindings. Report version 15, written by gnd check --rule-ids, --baseline or --allow-vacuous, is described in the rule-check report reference. Reference-aware reports can wrap the mechanical report, while the base diff schema has its own shape. Use the API examples for concrete access patterns rather than reaching into private evaluator internals.