SKIP TO CONTENT
AI AGENTS6 minAgents in Production / Ep. 9 · Stage 9-3

AI Act Technical File: Keeping It Current at Every Release

In a made-up case, release 1.5 adds one eval metric and the build blocks it. Why would a stale paragraph stop your release?

XIN

IN 30 SECONDS

A technical file kept in CI is one the build regenerates at every release, next to the tests. In this design, a person-owned section past its review date blocks the release, the way a failed test does.

KEY TAKEAWAYS · 3

  • In this design, a person-owned block past its review window blocks the release, like a failed test.
  • Regenerating the file in CI can help keep its facts current, but it doesn’t meet the documentation duty on its own.
  • A passed review gate shows that reviews happened in time, not that the arguments hold.
On this page

One release ships, the next is blocked

IN SHORT The same build ships one release and blocks the next, because one person-owned section went past its review date.

WORDS TO KNOW

Release tag
A label in version control, like 1.4.0, that marks the code and versioned settings of one release.
Manifest
A small config file that lists the blocks of the technical file and says, for each one, who may write it.
CI
Continuous integration: the automated pipeline that builds and tests every change.

The values below are invented. The rule comes from the Manifest A small config file that lists the blocks of the technical file and says, for each one, who may write it. See the glossary: a person-owned block past its review window fails the release, the way a broken test does.

A WORKED EXAMPLE

Illustrative numbers

PASSRelease 1.4.0: a model swap, reviews in date

INPUT

Tag
reconciliation-agent@1.4.0
Change
model swap and prompt edit
Metric rationale
reviewed 30 days ago (window: 90 days)

WHAT HAPPENS

  1. The build reads the model, prompt and eval results at the tag.
  2. It fetches the person-owned blocks and checks their review dates.
  3. All are inside their windows, so it renders the file.

OUTPUT

Result
file rendered, release ships
File
technical file for 1.4.0, dated

BLOCKEDRelease 1.5.0: a new eval metric, a stale rationale

INPUT

Tag
reconciliation-agent@1.5.0
Change
a new main eval metric
Metric rationale
reviewed 120 days ago (window: 90 days)

WHAT HAPPENS

  1. The generated blocks render without trouble.
  2. The metric rationale is 30 days past its window.
  3. The gate fails the release, the way a broken test does.

OUTPUT

Result
release blocked
Next
the risk owner re-reviews the metric argument

ITEM GET

A passed gate proves timing, not truth

The gate checks that each review happened in time, not that the argument holds. Someone still has to read it, and a lawyer decides whether the Act applies.

Coming up next: So where and when does this check run?

Keeping the file current at every release

IN SHORT Put the generator next to the tests, so every release regenerates the file and compares it with the last one.

In this design, the tests and the generator run in CI Continuous integration: the automated pipeline that builds and tests every change. See the glossary on every change, against the same Release tag A label in version control, like 1.4.0, that marks the code and versioned settings of one release. See the glossary. A build step can help keep the facts current. It doesn’t meet the documentation duty on its own: you still check that the file is complete and that the human parts were reviewed.

STEP BY STEP

Flow diagram: 4 stepsFlow diagram: 4 steps. Merge a change, then Regenerate the file in CI. Regenerate the file in CI, then Diff it against the last release. Diff it against the last release, then Ship the file with the tag. Ship the file with the tag loops back to Merge a change.1Merge a change2Regenerate the file inCI3Diff it against thelast release4Ship the file withthe tag

Step 1. Merge a change. A prompt edit, a model swap or a rebuilt index changes what the system is.

Pick a step to see it move
  1. Merge a change A prompt edit, a model swap or a rebuilt index changes what the system is.
  2. Regenerate in CI The step that runs the tests renders the file too. Nobody has to remember.
  3. Diff against the last release A moved generated block is expected. A stale person-owned block fails the build like a broken test.
  4. Ship with the tag, then loop Once the owner re-reviews, the file ships with its tag: version 1.4 gets version 1.4 documentation. The next change starts the loop again.
The return edge is the point. Article 11 asks for documentation kept up to date, and a loop does that more reliably than a one-off milestone.

IN PLAIN WORDS

The file is rebuilt with the code. A human section nobody re-confirmed stops the release.

Start small and track the upkeep: pulling facts out, outside evidence and reviewed parts all take time. A rendered file is still only a picture of the system. It helps when you can check its sources, its release and its review history.

I’d rather render the file badly at first and fix the template than write it in a rush, from memory, about a version I no longer run.

The eval numbers in the generated half come from the same run as the eval suite that gates a release: that run gives both the release verdict and the file’s eval results.

annex-iv.yaml
# annex-iv.yaml: the technical file as a build artifact (illustrative values)
release_tag: reconciliation-agent@1.4.0
blocks:
  - { id: system_description,        point: 1, source: generated }
  - { id: build_and_architecture,    point: 2, source: generated }
  - { id: design_rationale,          point: 2, source: human, owner: tech-lead,  review_every_days: 90 }
  - { id: monitoring_and_control,    point: 3, source: generated }
  - { id: metrics_rationale,         point: 4, source: human, owner: risk-owner, review_every_days: 90 }
  - { id: risk_management,           point: 5, source: human, owner: risk-owner, review_every_days: 90 }
  - { id: lifecycle_changes,         point: 6, source: generated }
  - { id: standards_applied,         point: 7, source: human, owner: tech-lead,  review_every_days: 180 }
  - { id: declaration_of_conformity, point: 8, source: human, owner: compliance }
  - { id: post_market_evaluation,    point: 9, source: human, owner: risk-owner, review_every_days: 90 }  # incl. Art. 72(3) plan
gate:
  block_release_if:
    - a human block is past its review_every_days
    - a generated block cannot be read at release_tag
    - release_tag is missing

Four blocks the build produces, six a person owns; point 2 takes one of each. The review windows are illustrative. Teams tend to skip the gate at the bottom: with it, a stale human section fails the release.

FAQ

Partly. Automate repeatable proof, check what gets pulled out, and assemble approved text; some proof lives outside the repo. People must own and sign off the reasons, the metric choices and the risk calls, and review them when those change.

STAGE CLEAR

What you now know

  • A stale review on a person-owned section fails the release the way a broken test does.
  • Regenerating the file in CI can help keep its facts current; people still check that it is complete.

Check yourself

Tap or click a question to see the answer.

Illustrative case: release 1.6 only edits a prompt, and every review is in date. What does the build do?

It regenerates the facts, records the prompt change and renders the file, so the release can ship. People still review the file.

Next stage:When someone asks for the file, how do you find the right version, and how long must you keep it?6 min
Adam Boudjemaa
Adam Boudjemaa

Former CTO of Integra. Named author (1 of 5) of ERC-3643, first author of ERC-6960, co-author of ERC-7410, and co-author of ERC-8203, which is still a draft. Building production AI and regulated Web3 systems.

Have a project to ship or a role to fill?

Discuss your project or role
Follow the engineering notes

Get new articles on production AI and smart contracts by email.