Every product-group payload declares pub gtin: Gtin — not Option<Gtin>. A GTIN is structurally mandatory to create a passport in this workspace.
EN 18219:2026 — Digital product passport: Unique identifiers, one of the six standards cited by Commission Implementing Decision (EU) 2026/1736, and a presumption route under ESPR Art. 41(2) — does not require anything of the kind.
What the standard actually admits
Its clause 5.1 requires a unique product identifier to satisfy the general principles in its Clause 4 and comply with one of the ID schemes in Clause 5. They are alternatives. There are five:
| # |
Basis |
External dependency |
| 1 |
Web-enabled structured-path/query — GS1 Digital Link or ASC MH10.8.2 Data Identifiers |
a registered Issuing Agency Code |
| 2 |
Identification Link (IL), EN IEC 61406-1/-2, URL format |
none — self-issuing |
| 3 |
Decentralized Identifiers — did:web, did:ethr, did:ebsi |
none — self-issuing |
| 4 |
Limited-capacity carriers: RAIN RFID (ISO/IEC 18000-63) and 2D codes, resolver-based |
an Issuing Agency Code |
| 5 |
DOI (ISO 26324) |
an issuing agency |
We implement the GS1 branch of scheme 1, and the domain type makes it the only possibility.
🚨 A GTIN requires GS1 membership, which is a recurring commercial subscription. Schemes 2 and 3 are described by the standard as self-issuing systems without external dependencies. So the model forecloses four of five admissible routes, and the one it keeps is the only one with a paid third-party dependency.
Why this is a product question, not a tidiness question
An operator who cannot obtain a GTIN cannot create a passport here at all — not a degraded one, not one with a warning. The type system refuses.
That is a real segment. A small manufacturer, or a non-EU manufacturer placing product on the EU market under its own brand, carries the DPP duty and is among the least likely to hold GS1 membership. EN 18219 says such an operator can have a fully conformant unique product identifier. We say they cannot have a passport.
The cheapest route in is one we already ship
dpp-vc already produces did:web documents, and dpp-crypto already does Ed25519 and JWS.
Scheme 3 requires conformance with W3C Decentralized Identifiers v1.0:2022, and names did:web as the lightweight non-DLT option. It also records that a DID can represent any granularity — model, batch or item, which is the same flexibility scheme 1 gets from AI qualifiers.
So the distance from what is built to a second admissible scheme is smaller than it looks, and it runs through a crate that exists for another reason.
⚠️ One property of scheme 3 worth noting for transfer of responsibility: the standard records that DLT-backed DID methods enable dynamic updates of the deep link to the passport, explicitly including the case where the economic operator responsible for the passport changes. Scheme 1 has no equivalent mechanism. That is a surface this workspace already models.
What this issue asks for
A decision, taken deliberately, on whether gtin stays mandatory.
It is a persisted-shape change, so docs/architecture/PERSISTED-SHAPES.md governs it: a non-additive change to ProductGroupData makes already-written documents undeserialisable at runtime. That cost is zero today and rises monotonically. The project's own record is that breaking changes are free precisely while nothing depends on them, and that the window closes on the first real operator.
Three shapes, for whoever takes it:
- Leave it. Defensible if GS1 is the deliberate target market. Should then be written down as a market choice rather than left as a type-level accident.
Option<Gtin> plus a scheme discriminant. The identifier becomes "which scheme, and its value", with GTIN one variant. Mirrors what LegalEntityIdentifier already does for EUID-or-other in the unsold-goods payload — the pattern exists in this crate.
- Full identifier enum covering schemes 1–3. More work, and it is what conformance across schemes eventually needs.
I would take 2. It is the smallest change that stops foreclosing the other schemes, it reuses a pattern already in the crate, and it leaves 3 reachable without another persisted-shape break.
Not in scope here
Scheme 4 (RFID) and scheme 5 (DOI) — no pull for either, and scheme 4's territory belongs to EN 18220 (data carriers), which is a separate standard.
Also related but separate: #256, the unpinned GS1 Digital Link version. EN 18219 clause 6.3.2 names it as 1.6.0:2022.
Every product-group payload declares
pub gtin: Gtin— notOption<Gtin>. A GTIN is structurally mandatory to create a passport in this workspace.EN 18219:2026 — Digital product passport: Unique identifiers, one of the six standards cited by Commission Implementing Decision (EU) 2026/1736, and a presumption route under ESPR Art. 41(2) — does not require anything of the kind.
What the standard actually admits
Its clause 5.1 requires a unique product identifier to satisfy the general principles in its Clause 4 and comply with one of the ID schemes in Clause 5. They are alternatives. There are five:
did:web,did:ethr,did:ebsiWe implement the GS1 branch of scheme 1, and the domain type makes it the only possibility.
🚨 A GTIN requires GS1 membership, which is a recurring commercial subscription. Schemes 2 and 3 are described by the standard as self-issuing systems without external dependencies. So the model forecloses four of five admissible routes, and the one it keeps is the only one with a paid third-party dependency.
Why this is a product question, not a tidiness question
An operator who cannot obtain a GTIN cannot create a passport here at all — not a degraded one, not one with a warning. The type system refuses.
That is a real segment. A small manufacturer, or a non-EU manufacturer placing product on the EU market under its own brand, carries the DPP duty and is among the least likely to hold GS1 membership. EN 18219 says such an operator can have a fully conformant unique product identifier. We say they cannot have a passport.
The cheapest route in is one we already ship
dpp-vcalready producesdid:webdocuments, anddpp-cryptoalready does Ed25519 and JWS.Scheme 3 requires conformance with W3C Decentralized Identifiers v1.0:2022, and names
did:webas the lightweight non-DLT option. It also records that a DID can represent any granularity — model, batch or item, which is the same flexibility scheme 1 gets from AI qualifiers.So the distance from what is built to a second admissible scheme is smaller than it looks, and it runs through a crate that exists for another reason.
What this issue asks for
A decision, taken deliberately, on whether
gtinstays mandatory.It is a persisted-shape change, so
docs/architecture/PERSISTED-SHAPES.mdgoverns it: a non-additive change toProductGroupDatamakes already-written documents undeserialisable at runtime. That cost is zero today and rises monotonically. The project's own record is that breaking changes are free precisely while nothing depends on them, and that the window closes on the first real operator.Three shapes, for whoever takes it:
Option<Gtin>plus a scheme discriminant. The identifier becomes "which scheme, and its value", with GTIN one variant. Mirrors whatLegalEntityIdentifieralready does for EUID-or-other in the unsold-goods payload — the pattern exists in this crate.I would take 2. It is the smallest change that stops foreclosing the other schemes, it reuses a pattern already in the crate, and it leaves 3 reachable without another persisted-shape break.
Not in scope here
Scheme 4 (RFID) and scheme 5 (DOI) — no pull for either, and scheme 4's territory belongs to EN 18220 (data carriers), which is a separate standard.
Also related but separate: #256, the unpinned GS1 Digital Link version. EN 18219 clause 6.3.2 names it as 1.6.0:2022.