Skip to content
VERASPEC
Repository
The fixture corpusstable

The manifest contract

jsonc
{
"manifest_version": "1.1", // 1.1 added the registry/lineage_peers/profile options
"corpus": "ver-conformance/1.1-draft",
"profile": "vera-profile/1.0", // the profile a run reports when no entry overrides `schema`
"default_schema": "1.0.1", // schema release used when an entry names none
"valid": [ /* conformant records */ ],
"invalid": [ /* seeded-defect records */ ]
}

corpus names the newest release the corpus covers, not the only one: default_schema stays 1.0.1, so an entry that names no schema is still a statement about 1.0.1 and the existing fixtures are untouched. manifest_version went to 1.1 because the three options below are not decoration — a reader that ignores lineage_peers runs the VER1604 fixture with nothing to walk and gets a different answer from the one the manifest states.

Two different things are called profile, and the collision is worth naming. The header field is the conformance profile identifier a report carries, and a 1.1-draft run reports vera-profile/1.1-draft regardless of what the header says — the header states the default for the corpus, which is default_schema's profile. The per-entry profile option below is the strictness profile passed to the validator: default or high-trust. They are unrelated axes: high-trust is a way of reading the 1.1 draft's rules, not a fourth release.

A valid entry:

fieldmeaning
filepath relative to conformance/
descriptionwhat the fixture demonstrates
allowed_warningscodes that MAY be emitted. Any other code — of any severity — is a failure, and ok MUST be true

An invalid entry:

fieldmeaning
filepath relative to conformance/
target_codethe code this fixture exists to exercise; the filename starts with it
descriptionthe seeded defect, in the standard's own terms
expect_codesthe exact set of codes the validator must emit — not a subset
expect_severityerror (⇒ ok false), warning (⇒ ok true), or none (no issues at all)

Optional on either kind:

fieldmeaning
schema1.0.0, 1.0.1 or 1.1-draft. 1.1-draft selects the draft schema and the profile rules gated on it
levelforces the effective conformance level
max_bytesthe --max-bytes hard cap
spaces_registrypath to a space registry of embedding space descriptors (--spaces, VER402)
signature_keypath to a PEM public key (--signature-key, stage 15)
registrypath to a VER Registry snapshot of governed value-space tokens (--registry, VER1205/VER1206)
lineage_peerslist of paths to peer records the cycle search may walk (--lineage-peer, VER1604)
profiledefault or high-trust (--profile); high-trust promotes VER1606 to an error
notesoperator-facing caveats: required flags, unavoidable collateral codes, how a digest was constructed

Every path is relative to conformance/. spaces_registry and registry are deliberately two keys read by two loaders: they name different documents, and one key that accepted either file would find nothing in the wrong one and report it as a clean run.

also holds additional runs of the same file under different options. Each entry is merged over its parent, so it restates only what changes; null clears an inherited setting ("signature_key": null runs the fixture with no key). A valid entry's also may carry expect_codes, which then replaces allowed_warnings as the permitted set.

The corpus uses also for the claims worth pinning down rather than merely asserting in prose: that the two perceptual-digest fixtures emit their profile code alone under --schema 1.0.0, which is precisely the gap the 1.0.1 schema correction closes; that the signature fixtures behave differently with and without a key and never report an unverified signature as valid; that the three flag-gated fixtures are conformant when their flag is absent, so the flag is what reaches the rule; and that ver1103-c2pa-state-inconsistent, audited at --level L1, is silent — the other half of annex E28's ruling, which tells a producer that could not validate a manifest to omit provenance.c2pa and not claim L3. A validator that rejected that record below L3 would punish the behaviour the annex demands.

The 1.1-draft fixtures add four more such claims: that a registry snapshot turns VER1206 into VER1205 or into silence depending on what it lists, and never the other way round; that a lineage cycle is reported only when the peer that closes it was supplied, and its absence is never read as proof there is none; and that --profile high-trust promotes exactly one code and changes nothing else about the record.