Ten years of vendor XML,
translated.
A decade of EPCIS 1.1 and 1.2 XML becomes EPCIS 2.0 JSON-LD, deterministically, with a per-job round-trip fidelity report whose law is: loss may exist, but silence about it may not.
The door is live. POST an EPCIS 1.1/1.2 XML document to /translate on this origin. You get conformant EPCIS 2.0 JSON-LD and a per-job FidelityReport — same engine as npx epcis.dev: pinned schemas, deterministic mapping, a zero-dependency namespace-aware XML parser, CBV migration, extension unwrapping. No key, no account; the ledger is at What ships today.
The fidelity report is the contract.
Every job returns a report beside the output. roundTripClean is computed by recomputation — every source leaf must be accounted for in the output, and a miss is a translator defect: the job fails and is never delivered. lossyPaths enumerates every source path with no standard 2.0 home, so loss is declared, never silent. The translation is something you review, not something you trust.
{
"roundTripClean": true,
"lossyPaths": [],
"notes": [ "CBV 1.2 URN vocabulary migrated to CBV 2.0 web URIs" ]
}
The report shape above is the implemented FidelityReport; the values are illustrative of a clean job.
Three doors, one engine.
POST /translate translates and returns — the caller decides whether to capture; it answers on this origin with no key, because a calculator is not a store. POST /capture/xml translates and captures in one door, under the full gateway laws, with your capture key. And translate is an MCP tool with readOnlyHint: true, so a deputized integration agent can run it inside already-granted scope without a mid-task approval. All three run the same engine.
curl -X POST https://epcis.dev/translate \
-H 'content-type: application/xml' \
--data-binary @legacy-1.2.xml
200 OK
GS1-EPCIS-Version: 2.0.1
Spine-Translation-Fidelity: round-trip-clean
→ EPCIS 2.0 JSON-LD + the per-job fidelity report
The proof corpus is committed: golden-corpus/xml-translation/ holds source → expected fixture pairs — 1.1 aggregation, 1.2 object, 1.2 transformation with extensions, 2.0 object — and the round-trip suite runs in CI. The evaluation is not a claim on this page; it is your own corpus through the engine, without an account, from the terminal you are in.
The build is cheap. The conformance tax is forever — every engineer spent tracking schema and CBV revisions is a feature not shipped. This engine is the part of that tax you stop paying.
We answer in writing. We take at most five conversations a month, only when you ask for one, and only after you already have the written read.