Migration guidestable
§4 Consumer checklist — 1.0.0 → 1.0.1
Required changes: none. A 1.0.0 consumer parses every 1.0.1 Record. That is the point of the two-plane design.
Recommended, in rough order of value:
- Adopt the 1.0.1 schema for validation. You will start rejecting Records that were always non-conformant — wrong-width perceptual digests, undeclared members in the identity objects. Decide deliberately whether to reject or to quarantine; both are defensible, silently accepting is not.
- Run the conformance profile, not just the schema. The schema cannot express referential integrity, role↔kind matching, digest verification, or chain chronology. Everything Appendix D #4 catalogued lives in the profile.
- Stop treating
pixel_hashas a primary key (annex E27, findingSPEC-27). It groups rendered identity. Two producers legitimately publish different Records with the samepixel_hash; asset and database identity belong to your system, keyed by whatever your system means by "asset" — commonly(producer, pixel_hash). If you key rows onpixel_hashalone you will lose records the moment a second producer appears. - Never compare
pixel_hashvalues acrosscpnp_version. Read the field. It identifies a hash universe, and a defaulted value is how consumers end up comparing across universes (WIRE-13,WIRE-14). - Read
identity.perceptual[].algbefore comparing digests. Do not assume an algorithm from a digest's length, and do not compare across algorithms. - Filter by grade through E19's derivation.
ocr_pixels→A,caption_auto→A−,caption_human/alt_text/title/description→B,surrounding_text/page_context→C. Grade-C sources are untrusted by definition (§12, context poisoning). - Treat perceptual digests and embeddings as similarity signals only. Never authentication, never integrity, never provenance. That is the byte tier and C2PA (§5, §12).
- Believe
redactedoverabsent. They are different states with different legal meanings.stripped_suspectedis a third. A Record that conflates them is telling you something false about what happened to the asset. - Check
image.source_bytes_ref.sha256againstidentity.content_hash.valuebefore fetching. If they disagree, the reference is not the asset the Record describes (annex E25).
