When the regulator reads the docs
Model documentation suddenly has readers who couldn't care less how to call an API, but care immensely about whether your claims are legal fiction. The evidence they demand already lives in our DITA source—if only we stop handling compliance like a frantic paper-shuffling exercise in a burning building.
This is a portfolio post about a design, AEGIS v0.1. Google hasn't engaged, sponsored or endorsed it. Sample content is adapted from Google's Gemma documentation, published under the Creative Commons Attribution 4.0 licence, and is modified from the original1. Authority-only topics, keys, pull request numbers and all projected numbers are written for this post. It describes a documentation tool and isn't legal advice.
For virtually the entire existence of technical writing, manuals have existed for three reasonably harmless groups of people. Developers read them to assemble things, architects read them to plan things, and support engineers read them to discover why those things have exploded into a thousand smoking pieces. They read simply to get on with their day. But on 2 August 2025, the European Union entered the chat, meaning providers of general-purpose AI models suddenly found themselves saddled with a fourth, deeply humorless reader: someone who reads documentation purely to see if they can catch you out on a technicality.
The European AI Office can drop by whenever it pleases and demand your full technical portfolio. A third-party firm trying to build an app on your foundation model can demand the exact specifications needed to save their own skin, and the official Code of Practice gives you precisely 14 days to hand it over. And inside your own building, an increasingly terrified compliance officer needs to be able to present water-tight proof before the inspectors even finish taking off their coats. These people have zero interest in your Python endpoints. What they want to know is which Git commit produced that claim, which training run justifies it, and precisely which human being is prepared to stake their career on its accuracy.
This is fundamentally an information architecture problem masquerading as a catastrophic legal hazard. Which means it belongs on the technical writers' desks, because we already have the tools to sort it out. We shall examine this through two lenses: the weary writer trying to tame the content, and the engineer who actually owns the underlying facts. And then we will look at the cold, hard numbers for the enterprise.
Stop acting as an unpaid administrative photocopier for the legal department. Wire regulatory obligations directly into your DITA maps, and let automated CI catch stale text and missing chapters before someone serves you a subpoena.
State each engineering metric once as a central key in Git. Approval is just your normal pull request review. And confidential training metrics are locked down so thoroughly that they will never, ever leak into public manuals.
On the new reader
Article 53 of the EU AI Act saddles every general-purpose AI provider with three separate documentation burdens. You must maintain deep technical documentation for the authorities under Annex XI, provide system integration information to downstream builders under Annex XII, and publish a comprehensive public summary of everything your scrapers digested during training. The Digital Omnibus on AI, Regulation (EU) 2026/1744, kicked the deadlines for high-risk systems down the road to late 2027 and 2028. But these core documentation duties? They didn't budge an inch.
As of 2 August 2026, Brussels can fine a company up to €15 million or 3% of total worldwide turnover—whichever hurts more. And right near the top of their list of unforgivable sins is handing over documentation that is incomplete, out of date, or just plain wrong. Google willingly signed the Code of Practice back in July 2025, which means agreeing to preserve every iteration of this technical evidence for at least ten years. Ten. Entire. Years.
| Reader | Asks for | Time limit |
|---|---|---|
| AI Office, national authorities | Annex XI technical documentation7 | On request |
| Downstream providers | Annex XII integration information8 | 14 days13 |
| The public | A summary of the training content6 | At release |
| Compliance lead | Evidence for each requirement, with an approver | Before release |
Across the Atlantic, the NIST AI Risk Management Framework remains technically voluntary, though NIST is currently giving it a thorough overhaul. Yet its requirements read like a checklist of things you ought to have written down anyway: GOVERN 1.6 requires a meticulous inventory of all deployed models, MAP 2.2 insists on documenting cognitive blind spots and human safeguards, and MEASURE 2.9 expects the entire system to be rigorously tested, validated, and explained in clear prose. In AEGIS, these aren't treated as panic-inducing audit inquiries; they are simply treated as automated requirements within the pipeline.
Look at that list through the eyes of an experienced documentation architect. These aren't terrifying legal hurdles; they are audiences. Each has a specific deliverable, distinct clearance parameters, and tailored output targets. We have been solving this exact problem for twenty-five years using modular DITA maps, metadata profiling, and conditional reviews.
On writers and evidence
When an inquiry lands today, compliance officers invariably sprint to the public-facing model card. I sat down and cross-referenced the Gemma 4 model card against the 11 explicit requirements of Annex XI, Section 1. Exactly four items were properly stated or linked. The remaining seven were missing entirely, half-finished, or stated in two mutually contradictory ways across the same website.
Mind you, blank spaces aren't even the worst bit. The real headache is the content that actually is there. In the Gemma 4 documentation, language coverage is explained twice. Up in the introduction, it airily claims support for "over 140 languages". Scroll down to the capabilities section, and it suddenly announces: "Out-of-the-box support for 35+ languages, pre-trained on 140+ languages". Both are technically true, provided you understand the subtle nuance between baseline pre-training and tuned inference. But when a compliance paralegal is building an evidence pack by copying text into Word, they simply choose whichever sentence looks prettier, paste it in, and record nothing about where it came from. And now that the original pages have moved to gemma.ai, their manual copy-paste links directly to a ghost town.
And that is how technical writers are reduced to corporate scribes. The compliance team sends a frantic email asking which number is the real one. The writer investigates, replies in an unsearchable email thread, and drops the paragraph into a form. Three weeks later, an engineer tweaks the model, updates Git, and nobody bothers to tell the Word document. Figure 3 shows the painful divergence.
On evidence
AEGIS invents no new formats, because inventing formats is what bureaucrats do when they are bored. It relies entirely on four standard DITA 1.3 mechanisms that any proper enterprise tech writer already understands. Each regulatory mandate becomes a topic identified by a key. A relationship table maps that mandate straight to the topics answering it. Every piece of technical evidence records its revision timestamps directly in its XML prolog. And standard DITAVAL profiles filter by @audience to govern who is allowed to read what.
In source code, it looks delightfully simple. A regulatory requirement is managed by the documentation architect as a self-contained reference topic. It outlines the expectation in plain English and embeds the statutory citation right in its metadata so the final compiler knows where to point.
<reference id="aia-xi-2d"> <title>Annex XI 2(d): computational resources used for training</title> <shortdesc>Describe the compute used to train the model, such as floating point operations and training time.</shortdesc> <prolog><metadata> <othermeta name="legal-source" content="Regulation (EU) 2024/1689, Annex XI, Section 1, point 2(d)"/> <othermeta name="required-for" content="authority"/> </metadata></prolog> </reference>
A requirement is a topic, so it has an owner, a history and a review, like any other content.
<reltable title="Gemma 4 · Annex XI"> <relheader> <relcolspec type="reference"/> <!-- requirement --> <relcolspec type="reference"/> <!-- evidence --> </relheader> <relrow> <relcell><topicref keyref="aia.xi-1e"/></relcell> <relcell><topicref href="gemma4/modalities.dita"/> <topicref href="gemma4/io-formats.dita"/></relcell> </relrow> <relrow> <relcell><topicref keyref="aia.xi-2d"/></relcell> <relcell><topicref href="gemma4/training-infrastructure.dita"/></relcell> </relrow> <!-- link proposed by AEGIS, approved in PR #457 --> </reltable>
The evidence map is a separate map that only AEGIS builds, so these links never appear on the published model card.
<concept id="gemma4-languages" audience="public"> <title>Language support</title> <prolog> <critdates><revised modified="2026-07-30"/></critdates> <metadata><othermeta name="model-version" content="gemma-4"/></metadata> </prolog> <conbody> <p>Gemma 4 is pre-trained on <ph keyref="gemma4-langs-pretrain"/> languages. It supports <ph keyref="gemma4-langs-supported"/> languages out of the box.</p> </conbody> </concept>
The 140 and the 35 from the model card become two keys with two labels. Every pack, and the public page, reads the same values.
<val> <prop att="audience" val="public" action="include"/> <prop att="audience" val="downstream" action="include"/> <prop att="audience" val="authority" action="exclude"/> </val>
One source builds three packs: public, downstream and authority. Each profile only adds audiences, so no reader gets a narrower audience's topics.
Once this plumbing is fastened together, the writer's life becomes remarkably civilized:
- Answer once. You wire a statutory requirement to an evidence topic exactly once in a pull request. From that moment on, every future dossier compiles automatically. Cost to handle the next request? Virtually zero.
- Drift becomes a broken test. If a technical chapter falls behind the current model build,
check_currencytrips an alarm in CI, unless it's drawing dynamically from updated keys. - Gaps trigger early warnings.
check_coverageaudits the map and flags every unanswered requirement immediately. For those holes, Gemini proposes an existing topic, which a human architect either approves or rejects with a single click. - Writers do actual writing. Feedback arrives as normal Git comments on lines of code, rather than panicked emails from lawyers asking what on earth a FLOP is.
| Writer's task in one Annex XI pack | By hand | With AEGIS |
|---|---|---|
| Find the current text for each item | 3.0 h | 0 h |
| Answer "which sentence is right" questions | 4.0 h | 0 h |
| Paste and reformat into the form | 2.5 h | 0 h |
| Fix stale topics that a check flags | 0 h | 0.5 h |
| Review link proposals with the IA | 0 h | 0.5 h |
| Total | 9.5 h | 1.0 h |
Modelled for this post, not measured. The writer's share of the 32-hour manual pack in Figure 9.
The technical writing team already maintains the source of truth. The modern regulator simply insists we prove it.
On developers and facts
Engineers possess the raw data that regulators obsess over: GPU counts, petawatt-hours, compute calculations, evaluation benchmarks. Right now, developers are peppered with queries from every corner of the enterprise. Legal wants the compute stats for a memo. Compliance demands training metrics for a spreadsheet. And confidential hardware figures are flung across the company as insecure email attachments.
Then consider the poor sod building an application on your platform. They are legally required to integrate your model responsibly under Annex XII, yet they are forced to squint at a glossy marketing webpage and guess which performance metrics are actually up to date.
Google sorted out this philosophy years ago. In Software Engineering at Google, the doctrine is iron-clad: documentation should be treated exactly like code, documents must have explicit owners, and every change must pass through standard code review. AEGIS simply applies that exact same engineering discipline to regulatory compliance. A fact is a key. Its steward is a code owner. And its compliance sign-off is a regular Git review.
<map> <title>Gemma 4 training facts (authority only)</title> <keydef keys="gemma4-train-hardware" audience="authority"> <topicmeta><keywords><keyword>[value from the training lead]</keyword></keywords></topicmeta> </keydef> <keydef keys="gemma4-train-flops" audience="authority"> <topicmeta><keywords><keyword>[value from the training lead]</keyword></keywords></topicmeta> </keydef> </map>
Placeholders, because these values aren't public. The engineer edits one file. Every authority pack picks up the change, and no public build can resolve these keys.
# Facts: only research engineering can approve a change /keys/gemma4-authority.ditamap @gemma-research-eng # Requirements and links: the information architect /requirements/ @docs-ia /maps/*-evidence.ditamap @docs-ia # Model docs: the Gemma writers /gemma4/ @gemma-docs
GitHub requests a review from the code owner of every file a pull request changes21. check_approval reads that review history. The agent's account is never a code owner.
on: pull_request: { paths: ["keys/**", "gemma4/**", "maps/**", "requirements/**"] } jobs: evidence-checks: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: aegis check --set annex-xi --profile authority - run: aegis check --set annex-xii --profile downstream --leak-test
The checks run like a linter on every pull request, so a problem shows up while the author still has the change open.
$ aegis check --set annex-xii --profile downstream --leak-test coverage 11/11 requirements answered currency 12/12 topics current for gemma-4 approval 12/12 approved by a code owner consistency FAIL gemma4/io-formats.dita:41 key gemma4-train-flops has audience="authority" and resolves in the downstream build consistency WARN gemma4/modalities.dita:18 literal "video" has no key; modality table lists text, image, audio result: blocked · 1 leak · fix the conref or move the sentence
Sample output. A leak fails the build with a file and a line, before the content reaches a downstream provider.
- A single place to record facts. Technical values sit in one central map. Compliance, legal, and partner teams drink from the exact same stream.
- Reviews you already perform. Sign-off isn't a 20-page legal questionnaire; it is an engineer approving a pull request in Git. Done.
- Classified means classified. Values marked
audience="authority"simply do not render in public or partner builds. The leak test fails the build if one slips out, and the model never even sees them in the first place. - Fails instantly in CI. If an error occurs, it reports the file and line number immediately on the open pull request, exactly like a software compiler.
- Downstream builders get proper packs. Partners building on your foundation receive an iron-clad documentation set containing version numbers, dates, and verifiable sign-offs.
| For the engineer | Today | With AEGIS |
|---|---|---|
| Where a fact lives | Spreadsheets, memos, email | One key in one map |
| How it is approved | A reply in a thread | Code owner review on the pull request |
| Questions per pack | About 3 (modelled) | Only for real gaps, about 0.3 (modelled) |
| Where confidential values go | Attachments, shared folders | Authority build only, leak-tested |
| When a problem shows up | After the pack is sent | In CI, on the open pull request |
On AEGIS
AEGIS is built on Google's open-source Agent Development Kit. It operates as a stateless Cloud Run job—spinning up on demand, handling the request, and shutting down immediately on the standard GCP free tier. GitHub holds the master XML and code reviews, while a locked Cloud Storage bucket holds the compiled dossiers. Once a retention policy is locked in Google Cloud, not even an executive with a panic attack can shorten or delete it.
The system wields ten automated tools, exactly one of which invokes an AI model. Four of those tools are hard deterministic tests, and they make the final call on whether the pack is released or thrown in the bin:
| Check | Passes when | Who fixes a failure |
|---|---|---|
check_coverage | Every requirement has an evidence topic that survives the pack's profile | Information architect, with a Gemini proposal |
check_currency | Every topic is current for the model version | Topic owner |
check_approval | Every change merged with a code owner's approval, not the author's or the agent's | Topic owner |
check_consistency | Every value resolves from a key, and nothing leaks between audiences | Topic owner |
The core governing philosophy here is utterly non-negotiable: the model proposes, but the code checks decide. When a requirement lacks evidence, Gemini 3.8 Flash outputs structured JSON constrained by a strict schema. It cannot invent phantom topic IDs out of thin air; it can only point to topics that actually exist in the map, or admit "none". If its confidence drops below 0.6, it doesn't open a pull request—it logs an explicit gap note. Gaps are never hidden beneath corporate jargon. They are published plainly in the dossier alongside the compliance officer's sign-off, signature, and timestamp.
{
"req": "aia.xi-2d",
"topics": ["gemma4-training-infrastructure"],
"revised": "2026-07-30", "commit": "9c41e7a",
"approved_by": "training-lead", "pr": 462,
"link": { "proposed_by": "propose_mapping", "confidence": 0.86,
"approved_by": "information-architect", "pr": 457 }
},
{
"req": "aia.xi-2e", "topics": [], "checks": "gap",
"decision": { "by": "compliance-lead", "date": "2026-10-20",
"note": "energy estimate due with next release; issue 458" }
}Sample values. A link that Gemini proposed is labelled as proposed, with the person who approved it. The gap is in the pack, with a decision.
On the organisation
Now, let's talk about money. What follows is a modelled projection rather than laboratory measurements, but the assumptions are deliberately stripped down so you can plug in your own reality. The hourly rates are median wage statistics from the US Bureau of Labor Statistics for May 2025: $43.46 for technical writers, $38.81 for compliance officers, and $64.44 for software engineers. That completely ignores corporate overhead and large-tech compensation packages, so these savings are conservative to the point of absurdity.
| Assumption (modelled) | Value |
|---|---|
| Authority packs a year (model releases and AI Office requests) | 8 |
| Downstream provider requests a year | 60 |
| People hours per authority pack, by hand / with AEGIS | 32 / 4 |
| People hours per downstream pack, by hand / with AEGIS | 16 / 2 |
| Split of hours by hand: compliance / writer / engineer | 40 / 35 / 25% |
| Split of hours with AEGIS: compliance / writer and IA / engineer | 50 / 25 / 25% |
| Model cost per pack, Gemini 3.8 Flash | under $0.01 |
Figure 8:Modelled hours for one pack.
Uses the role splits and BLS median wages above. A projection for discussion, not a measured result.
Saved hours are merely the most obvious benefit. There are three significantly more compelling advantages for the business:
- Evidence that actually holds up in an audit. Every technical claim in a released dossier cites its exact Git commit hash, its last modification timestamp, and the verifiable human who signed off on it. In a manual copy-paste workflow, that level of provenance is precisely zero percent.
- Drastically reduced regulatory exposure. Article 101 fines can reach up to 3% of global annual turnover for misrepresenting facts to European authorities. While predicting an audit fine is an impossible guessing game, AEGIS guarantees that every single claim is verifiably true as of a named repository commit, and any known technical gaps are explicitly disclosed with an authorized decision.
- Software that becomes cheaper over time. Operating costs run in literal pennies on Google Cloud's free tier. Every approved relationship link removes future model costs, and each newly introduced regulation reuses the exact same testing harness.
| Outcome (modelled) | By hand | With AEGIS |
|---|---|---|
| Items with a named approver from Git | not recorded | 100% |
| People hours a year | 1,216 | 152 |
| Working days to a downstream pack | about 8 | under 1 |
| Engineer questions a year | about 204 | about 20 |
| Authority content in public output | not tested | 0, leak-tested |
| Running cost a year | people only | under $1 in model calls |
Technical writers have always quietly maintained the company's true technical reality. The only difference now is that international regulators are demanding we prove it on paper. Armed with a basic DITA relationship table, audience profiles, and Git revision history, we can deliver that proof effortlessly. And AEGIS turns that entire legal defence into an automated CI build step.
The complete architectural specification—complete with sequence diagrams, agent tool definitions, and a runnable test harness—is hosted in the AEGIS design document3. If you manage complex model documentation or own the underlying performance data, I should be delighted to hear where your current setup would break down under an actual audit.
References
- Google Developers, "Site Policies." developers.google.com/site-policies
- Google AI for Developers, "Gemma 4 model card," last updated 30 July 2026. ai.google.dev/gemma/docs/core/model_card_4
- Siddharth Rao, "AEGIS," design document v0.1. siddharthraop.github.io/AEGIS
- Google AI for Developers, "Gemma models overview," last updated 8 July 2026. ai.google.dev/gemma/docs/core
- Regulation (EU) 2024/1689 (Artificial Intelligence Act), EUR-Lex. eur-lex.europa.eu/eli/reg/2024/1689/oj
- EU AI Act, Article 53. artificialintelligenceact.eu/article/53
- EU AI Act, Annex XI. artificialintelligenceact.eu/annex/11
- EU AI Act, Annex XII. artificialintelligenceact.eu/annex/12
- EU AI Act, Article 101. artificialintelligenceact.eu/article/101
- "Digital Omnibus on AI," Regulation (EU) 2026/1744. artificialintelligenceact.eu/ai-act-explorer/digital-omnibus
- ActuIA, "AI Act: obligations in force and delays under omnibus 2026/1744." actuia.com/en/news/ai-act-obligations-in-force-and-delays-under-omnibus-2026-1744
- European Commission, "The General-Purpose AI Code of Practice." digital-strategy.ec.europa.eu/en/policies/gpai-code-practice
- AI Act Explorer, "Overview of the Code of Practice." artificialintelligenceact.eu/code-of-practice-overview
- TechCrunch, "Google says it will sign EU's AI code of practice," 30 July 2025. techcrunch.com/2025/07/30/google-says-it-will-sign-eus-ai-code-of-practice
- NIST, "AI Risk Management Framework." nist.gov/itl/ai-risk-management-framework
- NIST AI 100-1, "AI RMF 1.0," January 2023. nvlpubs.nist.gov/nistpubs/ai/nist.ai.100-1.pdf
- OASIS DITA 1.3, "reltable." docs.oasis-open.org/dita/dita/v1.3/os/part1-base/langRef/base/reltable.html
- DITA 1.3, "Conditional processing (profiling)." dita-lang.org/1.3/dita/archspec/base/condproc
- Tom Manshreck, "Documentation," in Software Engineering at Google, chapter 10. abseil.io/resources/swe-book/html/ch10.html
- Google Cloud, "Bucket Lock." docs.cloud.google.com/storage/docs/bucket-lock
- GitHub Docs, "About code owners." docs.github.com/.../about-code-owners
- Google, Agent Development Kit documentation. github.com/google/adk-docs
- Google AI for Developers, "Structured outputs." ai.google.dev/gemini-api/docs/structured-output
- Google Cloud, "Free Google Cloud features." cloud.google.com/free
- U.S. Bureau of Labor Statistics, "Technical Writers," Occupational Outlook Handbook, May 2025 data. bls.gov/ooh/media-and-communication/technical-writers.htm
- U.S. Bureau of Labor Statistics, "Compliance Officers," Occupational Outlook Handbook, May 2025 data. bls.gov/ooh/business-and-financial/compliance-officers.htm
- U.S. Bureau of Labor Statistics, "Software Developers, Quality Assurance Analysts, and Testers," Occupational Outlook Handbook, May 2025 data. bls.gov/ooh/computer-and-information-technology/software-developers.htm