निर्णय रिकॉर्ड · ADR-018
ADR-018: A declared product carbon footprint under extensions.pact_pcf
A batch may carry a product carbon footprint that a named third party calculated, copied from a WBCSD PACT footprint into extensions.pact_pcf of the metadata document and validated by a published fragment. The reference implementation never calculates, sums or propagates one.
- दस्तावेज़ आईडी
- ADR-018
- तिथि
- 2026-10-23
- स्रोत
- docs/adr/ADR-018.md
| Field | Value |
|---|---|
| ID | ADR-018 |
| Subject area | Sustainability, metadata schema |
| Status | Proposed (2026-10-23). Not accepted: it needs the confirmation of two independent implementers (GOVERNANCE.md) |
| Date | 2026-10-23 |
| Owners | A-REX Contributors; requested by the A-REX Platform (UNTP export and declared footprints) |
| Related requirements | AREX-CORE §3.5 (metadata); ADR-014 (carbon), ADR-017 (extensions) |
| Supersedes / superseded by | — |
Context
Buyers of agricultural lots increasingly ask for a product carbon footprint: manufacturers that will issue a Digital Product Passport for textiles, furniture or tyres, and companies reporting Scope 3 emissions. The footprints exist outside the token. A grower, a ginner or a mill commissions a life-cycle study, and the result is published in the WBCSD PACT format (Technical Specifications 3.0.3).
A-REX already records carbon in one way: credits immobilised in their registry and linked to a lot (ADR-014). A footprint is a different thing, an emission figure per unit of product. The two must not be confused, and Directive (EU) 2024/825 treats environmental claims based on offsetting, or not substantiated, as unfair commercial practices.
Issue
How can a batch carry a footprint that buyers can rely on, without the token or its implementations becoming the party that calculates or vouches for it?
Assumptions
- Footprints are calculated by a third party (or by the issuer with a third-party method) and published in PACT 3.x.
- The metadata document is committed on chain by
metadataHash; changing it means a new document (setBatchMetadata). - ADR-017 namespacing applies: fields contributed by an extension live under
extensions.<key>.
Constraints
- Directive (EU) 2024/825 (environmental claims, offset-based claims).
- ADR-014: carbon credits are never issued or netted by the token.
- The PACT licence allows sharing a Separate Derivative commercially with a notice, but not a reproduction of the specification. The fragment is A-REX's own work and copies no PACT file.
- No personal data in public documents (AREX-CORE §3.5).
Alternatives considered
| Alternative | For | Against | Outcome |
|---|---|---|---|
| Calculate a footprint from the batch data (commodity, quantities, transformations) | no third party needed | the token has none of the activity data; the result would be an unsubstantiated claim by the platform | Rejected |
| Sum or average the footprints of input batches into output batches | follows lineage automatically | it is a calculation; allocation and mass balance make it wrong in general | Rejected |
Free top-level fields (carbonFootprint: 1.8) | simple | no unit, no method, no source, no verifier; collides with other uses | Rejected |
| Store the whole PACT ProductFootprint document | lossless | large; carries fields a batch does not need; ties the schema to PACT's full model | Rejected (the source stays reachable through footprintId and source) |
A closed object under extensions.pact_pcf with the PACT fields a reader needs, plus the source, the issuer and an explicit verification status | small, validated, names every party, keeps the source reachable | one more fragment to maintain against PACT releases | Proposed |
Decision (proposed)
The key pact_pcf is reserved under extensions. Its object is validated by interop/pact-pcf.schema.json ($id https://arex.ag/schema/extensions/pact-pcf/0.1.0), explained field by field in interop/PACT.md. It carries the declared value per declared unit, the declared unit, the reference period, the methodology standards, the primary data share, the boundary, the issuer and the calculator, the verification status and verifier, and the source footprint id.
Rules:
- The value is declared, never computed. The reference implementation and any implementation claiming this fragment copy it from the source footprint; they never calculate, estimate or adjust it.
- The issuer is named (
issuer.name). A footprint that is verified names its verifier (verification.providerName). verification.statusis required (verifiedornot_verified), so a reader never mistakes an unverified footprint for a verified one.- Wording derived from it never says "carbon neutral", "climate positive", "net zero", "offset" or "compensated".
- It is distinct from ADR-014 credits. Credits linked to a lot are never subtracted from, combined with or presented as reducing a footprint.
- A footprint on an input batch does not flow to the batches made from it, and footprints of different batches are never summed or averaged. Under mass balance, the goods of an output cannot be attributed to specific inputs, so an output's footprint is calculated by a third party for the output and declared on the output.
- A footprint that is superseded is replaced with
setBatchMetadata: a new document and a new hash. The previous document stays in the batch's history. - Until ADR-017 is accepted, documents carry
extensions.pact_pcfunder schema 1.2.0, which allows additional top-level properties.
Argument
The value a buyer needs is someone's measurement, not the token's. Keeping the token to a faithful, committed copy with named sources gives buyers what they can check: the metadata hash proves the copy has not changed since it was declared, footprintId and source lead to the original, and the verifier is named or the absence of one is stated. Following PACT field names keeps the copy readable by PACT tools without a translation table.
Consequences
Positive
- A batch can feed a manufacturer's Digital Product Passport (UNTP
performanceClaim, interop/UNTP.md) and an EPCIS export with the same declared figure. - No implementation takes on the liability of calculating or certifying a footprint.
Negative
- A footprint attached after creation needs a metadata update, which is a role-gated on-chain transaction.
- Fields of PACT not in the fragment (the full emission breakdown, data quality ratings) are only in the source footprint.
Obligations it creates
test/pact-pcf.test.mjs: the example is valid; missing verification, a verified footprint without a verifier, malformed decimals and extra properties are rejected.- The fragment follows PACT 3.x; a PACT 4.0 needs a new fragment version.
Implementation and evidence
| What | Where |
|---|---|
| Fragment | interop/pact-pcf.schema.json |
| Field mapping, licence notice | interop/PACT.md |
| Example | examples/batch-metadata.pact-pcf.example.json |
| Tests | test/pact-pcf.test.mjs |
| First consumer | A-REX Platform (declared footprint on a lot, UNTP and EPCIS exports) |