§6 Conformance-profile rules
The vera-profile/1.0 validator (`packages/ver-validator/`) is where the findings that cannot be expressed in JSON Schema 2020-12 are enforced. The code registry is stable: codes are never renumbered or reused (ADR-0003).
Five codes (four rules) exceed what VER 1.0 requires and are labelled profile strictness or profile policy below; a producer failing only those is schema-conformant. The four rules are: the size caps (VER103 and VER104 — one rule, two severities, no 1.0 basis), format/contentEncoding assertion (VER202), the embedding.space_id pattern (VER403), and preprocessing completeness (VER405). This grouping is ADR-0003's, and this is the one place the number is stated — every other document cross-references here rather than restating it. Everything else in the table is a normative VER 1.0 or 1.0.1-annex requirement that the schema alone cannot check.
| Code | Severity | Rule | Enforces | Disposition |
|---|---|---|---|---|
VER101 | error | unparseable-json | A Record is a UTF-8 JSON document (§10) | validator-rule — profile |
VER102 | error | not-a-json-object | §10 | validator-rule — profile |
VER103 | error | record-exceeds-hard-cap | App. D #11 — 64 MiB hard cap, configurable | validator-rule — profile policy, no 1.0 basis |
VER104 | warning | record-size-policy | App. D #11 — the 1.1 draft §7 numbers, advisory in 1.0 | validator-rule — profile policy, no 1.0 basis |
VER201 | error | schema-invalid | The companion schema, one issue per error | validator-rule — normative |
VER202 | error | format-invalid | Annex E23 (SCH-01, SCH-02) | validator-rule — profile strictness |
VER301 | warning | level-absent | SCH-21 — absent level means effective L0 | validator-rule — normative |
VER302 | error | raw-preservation-missing | §7.1 at L1+; REC-01, IMPL-CONFORMANCE-SELF-DECLARED | validator-rule — normative |
VER303 | error | availability-incomplete | §7.2 at L1+; App. D #4 | validator-rule — normative |
VER304 | error | normalized-view-missing | §7.3 at L2+ | validator-rule — normative |
VER305 | error | trust-entry-missing | §7.4 at L2+; SCH-15 | validator-rule — normative |
VER306 | error | provenance-missing | §9 at L3 | validator-rule — normative |
VER307 | error | c2pa-status-missing | §9 at L3; App. D #12 | validator-rule — normative |
VER308 | warning | signature-absent | §9/§11 — SHOULD at L3; SPEC-14 | validator-rule — normative |
VER401 | error | duplicate-space-id | Annex E18 (App. D #14, WIRE-32) | validator-rule — normative |
VER402 | error | space-registry-conflict | §6.2 immutability; SPEC-22 (needs --spaces) | validator-rule — normative |
VER403 | error | embedding-space-id-malformed | SCH-06, SCHEMA-EMB-SPACEID-UNPATTERNED | validator-rule — profile strictness |
VER404 | warning | space-reference-missing | Annex E13 (SPEC-09-emb, SPEC-21, REC-08) | validator-rule — normative, warning in 1.0 |
VER405 | warning | visual-preprocessing-underspecified | SCHEMA-PREPROC-EMPTY, SCH-11, SCHEMA-06 | validator-rule — profile strictness |
VER501 | error | embedding-references-undeclared-space | §6 — every vector is bound to a declared space; App. D #4 | validator-rule — normative |
VER601 | error | dim-mismatch-vs-descriptor | Annex E24 (App. D #15) | validator-rule — normative |
VER602 | error | dtype-mismatch-vs-descriptor | Annex E24 (App. D #15, REC-07) | validator-rule — normative |
VER603 | error | inline-vector-length-mismatch | Annex E24; SCH-08 | validator-rule — normative |
VER604 | error | b64-vector-byte-length-mismatch | Annex E24; SCH-08 | validator-rule — normative |
VER605 | error | ref-byte-length-mismatch | Annex E24; SCH-08 | validator-rule — normative |
VER606 | warning | dim-dtype-unstated | App. D #15; ADR-0008 would make this an error for 1.1 records | validator-rule — advisory |
VER607 | error | non-finite-vector-component | §10 / annex E23 — an inline vector component that is NaN or ±Infinity is not representable in RFC 8259 JSON. Unreachable through a file once VER101 rejects the non-RFC-8259 literals; reachable through validate_record | validator-rule — normative |
VER701 | error | canonical-visual-in-nonvisual-space | §6; App. D #10 | validator-rule — normative |
VER702 | error | contextual-in-nontext-space | §8 | validator-rule — normative |
VER703 | error | fused-in-nonfused-space | §8 | validator-rule — normative |
VER704 | error | fused-recipe-invalid | Annex E20 (SPEC-08-emb, SCRIPT-FUSED-RECIPE-INPUTS) | validator-rule — normative |
VER705 | error | no-canonical-visual-embedding | §6 — defence in depth over the schema's contains | validator-rule — normative |
VER801 | error | pdq-length | §5 / annex E22; HASH-01, App. D #1 | validator-rule — normative |
VER802 | error | phash-length | §5 / annex E22 | validator-rule — normative |
VER901 | error | stripped-suspected-without-basis | §7.2; REC-06, App. D #4 | validator-rule — normative |
VER1001 | error | redaction-availability-inconsistent | §7.2/§7.5; annex E15 | validator-rule — normative |
VER1002 | warning | redaction-missing-salted-hash | App. D #8 — permanently a warning: ADR-0006 resolved to mandatory for 1.1 records only, and this code judges 1.0.x records (§10 REV-18, VERSIONING.md §5) | validator-rule — advisory |
VER1003 | error | conflict-sources-not-distinct | §7.3 — a conflict needs two distinct sources | validator-rule — normative |
VER1004 | warning | conflict-field-untracked | §7.3/§7.4 at L2+; SCH-15 | validator-rule — advisory |
VER1005 | error | redacted-family-raw-present | Annex E15 (SPEC-02) — no redaction claim over preserved evidence | validator-rule — normative |
VER1101 | error | c2pa-raw-present-status-missing | §9 at L3; annex E28 | validator-rule — normative |
VER1102 | warning | c2pa-valid-without-manifest-hash | §9 — valid without manifest_sha256 is unbindable | validator-rule — advisory |
VER1103 | error | c2pa-state-inconsistent | Annex E28 (SCH-17, REC-02) | validator-rule — normative |
VER1201 | error | chain-not-chronological | Annex E16 (SPEC-16, REC-10) — strictly decreasing only | validator-rule — normative |
VER1202 | error | chain-precedes-acquisition | §9; annex E16 | validator-rule — normative |
VER1203 | warning | record-precedes-chain | Annex E16 — created_at SHOULD be ≥ every chain event | validator-rule — advisory |
VER1204 | warning | action-order-implausible | REC-10 — decode before normalize before embed | validator-rule — advisory |
VER1301 | error | b64-vector-undecodable | SCH-02; annex E23/E24 | validator-rule — normative |
VER1302 | error | raw-segment-sha256-mismatch | §7.1; annex E11 (REC-03, EX-01) | validator-rule — normative |
VER1305 | error | source-ref-content-hash-mismatch | Annex E25 (SCH-18) | validator-rule — normative |
VER1401 | error | signature-object-invalid | Annex E17 (SPEC-14) | validator-rule — normative |
VER1402 | error | signature-verification-failed | Annex E17 — only when a key and the optional dependencies are present | validator-rule — normative |
VER1403 | warning | signature-unverified | Annex E17 — verification skipped, never silently passed | validator-rule — advisory |
VER1303 (vector-ref-unverified) is reserved and deliberately not emitted: an unfetchable vector_ref is not a defect of the Record, and a validator that reports one would make network reachability part of conformance.
