Field notes · EU AI Act

The EU AI Act wants your training data documented. Documentation isn't evidence.

A signed, offline-verifiable evidence pack for Articles 10–12 — in one open-source command.

July 2026 · 7 min read

You got the email from legal. The EU AI Act applies to your product, and someone needs to "document the training data." So you open a Google Doc, or you point them at the dataset's README, or you promise to export something from your warehouse.

Here's the problem with all of that: it's documentation, and documentation isn't evidence. A README can be edited after the fact. A warehouse export is only as trustworthy as the warehouse — and the one thing an independent auditor cannot do is trust your infrastructure. The difference between documentation and evidence is simple and unforgiving:

Evidence can be verified without trusting whoever produced it.

This post is the engineer's version of the AI Act data requirements. Not legal advice — the engineering reading. It answers one question: what concrete technical artifact satisfies the data obligations, in a way an auditor can check for themselves?

First, the timeline — because it changed

If you were told "everything is due 2 August 2026," that's now out of date. The AI Act entered into force on 1 August 2024 and became fully applicable on 2 August 2026 — but the Digital Omnibus on AI, adopted in mid-2026, deferred the high-risk obligations. The dates that matter now:

2 Aug 2025
GPAI obligations — already in force, and untouched by the Omnibus. Includes Art. 53(1)(d): a public summary of training content on a mandatory template, required even of open-weight models.
2 Aug 2026
The Act is fully applicable; transparency obligations (Art. 50) apply — and the AI Office can begin verifying GPAI compliance and issuing corrective measures.
2 Dec 2027
High-risk obligations for stand-alone Annex III systems — recruitment, credit scoring, education, biometrics, border control. This is your date for the data-governance articles below.
2 Aug 2028
High-risk obligations for AI embedded in Annex I regulated products.

The takeaway isn't "relax." One of those clocks has already run out — if you provide a GPAI model, the training-content summary is live and enforceable now. For everyone else it's the opposite of relaxing: you have runway to build the data pipeline properly instead of assembling a compliance binder in a panic the week before a deadline. Non-compliance with high-risk obligations can draw fines up to €15M or 3% of global turnover (the €35M / 7% tier is reserved for prohibited practices under Art. 5).

What the regulation actually asks (engineer's translation)

Three articles do the work for training data:

Read together, these ask for something specific: provenance you can prove, a transformation history you can't quietly rewrite, and a description bound to the actual bytes.

Why the obvious tools fall short — as evidence

None of these are bad tools. They just don't produce evidence in the sense above.

The gap in every case is the same: the proof depends on trusting the producer or their stack.

The properties the artifact needs

Independent of any product, the artifact you hand an auditor should have:

SURFRAME is one open-source implementation of that standard. Here's the whole loop on a real, public dataset.

Hands-on: from a public dataset to a verifiable evidence pack

We'll use the Adult Census Income dataset (scikit-learn/adult-census-income, CC0) — the canonical fairness/bias dataset, with race and sex columns. That makes it a realistic stand-in for an Annex III system (income/credit-style prediction) with exactly the special-category data Art. 10(5) is about.

# install
pip install surframe

# 1. get the data as CSV
python -c "from datasets import load_dataset; \
load_dataset('scikit-learn/adult-census-income', split='train').to_pandas().to_csv('adult.csv', index=False)"

# 2. pack it into a signed, queryable container
surx write adult.csv trainset.surx

# 3. encrypt the special-category columns — they stay usable for bias
#    work, but travel sealed (you'll be prompted for a passphrase)
surx encrypt trainset.surx race,sex

# 4. generate a signing key and sign the exact bytes
surx keygen
surx sign trainset.surx --key surx_signing.key --signer data-gov

# 5. export the AI Act evidence pack
surx export trainset.surx --format ai-act \
  -d "purpose=Income classification, Annex III credit-style system" \
  -d "license=CC0-1.0"

The pack contains EVIDENCE.json, a human-readable REPORT.md, VERIFY.md (instructions), ai_act_mapping.md (an explicit map onto Art. 10 / 11 / 12), an audit_chain/ directory copied verbatim, and checksums.txt. Encrypting race and sex is the point, not a side-quest: recipients query everything else without the passphrase, the sensitive columns stay available for the bias examination the regulation requires, and the side-cars are cryptographically bound so they can't be spliced between containers.

The part that makes it evidence

Flip a single byte in the container and try again:

surx verify trainset.surx     # → names the exact chunk that changed, exit 1
surx export trainset.surx --format ai-act
  ✗ Container verification FAILED — no evidence pack will be generated.

That's the whole thesis in one command. export runs verify first and refuses to produce an evidence pack for a tampered or corrupt container. It is a tool that cannot generate false evidence. A PDF generator will happily render whatever you feed it; that's why a PDF is a promise, not evidence.

One honest caveat, straight from the threat model: a self-attested pack (the key embedded in the container) proves internal consistency — that these bytes go together and haven't moved. Proving authorship — that your team produced them — requires distributing the public key through an independent channel (--pubkey at verification time). SURFRAME records which of the two you're relying on. It attests integrity and traceability; it does not certify conformity. Conformity is a property of your whole system and process, and no tool can hand you that.

Handing it to an auditor (or your own legal team)

The reassuring part: the auditor doesn't need to install anything to read the evidence. REPORT.md and ai_act_mapping.md open in any text editor. To actually check the integrity, they have two levels:

The "install a tool" step is the feature. It's what lets a third party confirm the result mathematically, without trusting you or a vendor's database. And you can push it left: the surx-verify-action GitHub Action gates your CI so an unsigned or tampered dataset never reaches training in the first place.

The point

The AI Act's data-governance clock for high-risk systems now runs to December 2027. Use the runway. "Documenting your data" without integrity guarantees is a promise; evidence is a promise anyone can check without trusting you. The right artifact — signed bytes, a sealed audit chain, portable and offline-verifiable — already exists, and it's open source.

Turn a dataset into evidence.

Apache-2.0 · verification is free, forever · one command to the evidence pack.

pip install surframe · copy

If you work in compliance and think this maps the articles wrong — tell me. That feedback is worth more than another star.