EPCIS and CBV Implementation Best Practices

Underneath this topic sits one mechanism: an EPCIS 2.0 capture gateway. epcis.dev is one — every posted event is validated against GS1's own schema, stamped with the capturing account (capturedBy, the warrantor, kept distinct from who, the attested observer), hashed by CBV 2.0, and appended, never edited. Hold the topic above against that ground and it stays concrete.

The implementation order that works: validate first — every event against the official GS1 schema, failures refused in the standard's own exception types — then bring the archive along, EPCIS 1.1/1.2 XML through translation with a per-job fidelity report, then make the store append-only so custody is structural rather than promised. Each step is checkable on its own before the next begins, and this gateway implements all three.

Custody is structural, not promised. No service identity holds an UPDATE or DELETE grant; the write path has exactly one writer and it can only append. You can add an event; you cannot un-write one, which is what makes a later trace evidentiary rather than merely stored.

Two attributions travel with every event, and the door owns a different half of each. capturedBy is the warrantor — the account whose key opened the door — stamped by the gateway together with recordTime and the attestation grade, with caller-supplied values in those stamped fields stripped. who is the attested observer, asserted by the caller and graded by the door: it reaches only the grade claimed until identity attestation lands. One is stamped, the other is graded; they never merge.

Provenance: an aged epcis.dev page, kept at its original URL and refreshed into the current design on 8 September 2026.