Skip to content

EN 18221 clause 4.2 version archiving is absent, and our 'archive' means something elseΒ #298

Description

@LKSNDRTMLKV

1. 🚨 "Archive" means two different things, and the collision hides a gap

POST /api/v1/dpp/{dppId}/archive β€” "permanently archive a published or suspended passport" after retention expiry β€” sets a terminal lifecycle status. That is what "archive" means in this codebase.

EN 18221:2026 (Digital product passport β€” Data storage, archiving and data persistence, one of the six standards cited by Commission Implementing Decision (EU) 2026/1736) uses the word for something else entirely: the retention of historical versions of a passport that is still live.

Anyone mapping our surface to that standard by name would tick the box. The box is not ticked.

2. What clause 4.2 actually asks for

In our own words, not the standard's:

  • archiving begins at the first change to the initial passport β€” not at publish, and not at end of life;
  • archived versions are held by both the back-up service provider and the creator (or a main provider acting for it);
  • all archived versions persist for the passport's lifetime;
  • all changes are archived, save those a product-specific rule exempts β€” real-time sensor data is the example the standard gives;
  • archived attributes carry the same access restrictions as the live ones;
  • the version as it stood at a given point in time is retrievable by authenticated, authorised actors.

3. What we have instead

An append-only audit trail β€” repo_audit, enforced by an ODAL_AUDIT trigger that rejects mutation at the database. Closest in spirit, and genuinely good, but an audit trail records that something changed. It does not reconstitute the passport as it stood at time T, which is the clause's actual requirement.

Continuity snapshots β€” which fire on publish, and on the status changes that leave the public tier. Publish-triggered, not change-triggered, and they carry the rendered public view rather than the full record. dpp-types/src/snapshot.rs already invokes EN 18221 in its module doc β€” written against an assumption about the standard, before anyone had read it. The posture it describes is right; it is not the same obligation as clause 4.2.

Verdict: non-conformant on the evidence. Not "probably fine" β€” the mechanism the clause describes is not present.

4. Clause 4.3 has a requirement we have not designed for

The back-up provider must hold the most recent version and all required historical versions, with the same access restrictions as the original; the passport is available to specifically authorised users from the back-up for its lifetime; and β€” the one worth reading twice β€”

general access via the back-up becomes available once the economic operator is no longer active on the market.

That is a concrete, implementable mechanism for the ESPR Art. 11(e) availability-after-insolvency requirement, and it is more specific than anything in the current design. Our continuity tier keeps a passport reachable when the node is down. It does not model a change of audience on operator cessation β€” access widening, not merely persisting.

This is a design input as much as a conformance finding.

5. ⚠️ Clause 4.5 cannot be assessed at all yet

Replication to the back-up provider must cover the passport and all changes, at a frequency sufficient to minimise data loss β€” the standard names a Recovery Point Objective as the way to express it. It must be possible via a standardised lifecycle API per EN 18222:2026, and must run over a data exchange protocol per EN 18216:2026.

Neither standard is on hand, so clause 4.5 conformance is not assessable, not merely unassessed.

⚠️ And a property of the standard rather than of us: EN 18221's normative references include EN 18239 and EN 18246, both of which are undated because they are still under preparation. Clause 4.2's integrity requirement points at EN 18246. Full conformance with EN 18221 is therefore not presently achievable by anyone. Worth knowing before any outward conformance claim.

6. βœ… The good news, and it is substantial

EN 18221's Annex ZA maps its clauses to ESPR essential requirements, and for Art. 10(4) it records that the presumption covers only the technical aspects of the back-up β€” not the existence of the back-up as such.

So the standard itself separates does the mechanism conform from who may lawfully operate it (ESPR Art. 2(32)'s independent-third-party requirement), and supplies only the first.

That means the continuity work can proceed as a technical conformance exercise without first resolving the service-provider question. Those have been treated as one blocked decision; they are two, and the standard is the citable basis for separating them.

What this issue asks for

  1. Disambiguate the word. Either rename the lifecycle endpoint/status or document the collision prominently where someone comparing us to EN 18221 will see it.
  2. Decide whether to build version archiving to clause 4.2's shape, and whether the append-only audit trail is the substrate for it.
  3. Design the cessation-triggered access widening of clause 4.3, or record a deliberate decision not to.
  4. Acquire EN 18216 and EN 18222 before any clause 4.5 work β€” they gate it normatively.

Per-surface verdicts and the full clause-by-clause mapping were recorded separately; everything needed to act on this issue is restated above, so no other document is required to work it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    blocked/upstreamWaiting on a merge chain, a release, or an unpublished standardsurface/persistenceMoves retention, archiving or the ESPR Art. 10(4) back-up copytype/scanCross-check act citations in this repo against the primary texturgency/nextBlocks work already scheduled

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions