Implementing EPCIS 2.0 and the CBV: Challenges and solutions
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.
Reads are minimally scoped. You see your own scope; what is outside it is absent, not greyed out and not redacted, so there is no shape left behind to argue about. Recording an event is $0 by policy — intent, until published terms bind it — because a stream that charges per event is one you stop feeding the month the bill grows with volume.
The part epcis.dev makes concrete is validation. Every event is machine-checked against the official GS1 EPCIS 2.0 JSON schema before it is accepted, and a capture that does not validate is refused as application/problem+json carrying the standard's own exception types, not a vendor error string.
Provenance: an aged epcis.dev page, kept at its original URL and refreshed into the current design on 15 August 2026.
Proof, not adjectives. The gateway's conformance tests pass against GS1's normative artifacts, and the calculators answer on this origin — POST /translate, /validate, /hash, no key. The dated ledger is What ships today.