AEGIS
aegis / design-doc · v0.1 · 2026
Try it Ask AI governance DITA MVP
AEGIS v0.1  ·  documentation evidence for AI governance  ·  2026

AEGIS: Build regulator-ready evidence from the DITA source
and prove each item is covered, current and approved

Working version. Try the evidence sandbox on the Gemma 4 source, or ask the evidence corpus. The simulator in §6 is the scripted design demo.

Disclaimer. This is a portfolio design document. Google has not engaged, sponsored or endorsed this work. The sample content is adapted from the Gemma and Cloud TPU documentation, which Google publishes under the Creative Commons Attribution 4.0 licence1. The adapted versions are modified from the originals. Topics marked for the authority audience are written for this design and are not Google documentation. Sample runs, hours and costs are modelled, not measured. This document describes a documentation tool. It is not legal advice. Stakeholders are job roles, not real people. The two readers in §3 are fictional.

4
readers the AI Act names
for model information
3%
of turnover: top fine for
incomplete information
10 yrs
minimum retention of
each documentation version
Abstract

Documentation has had three main readers: developers, architects and support engineers. The EU AI Act adds readers who use documentation as evidence. A provider of a general-purpose AI model must keep its technical documentation current, give it to the AI Office and national authorities on request, and give downstream providers the information they need6. Inside the company, a compliance lead must show the same evidence before anyone asks. These readers don't ask how to use a model. They ask for proof: for this version, from this source, approved by this person.

The technical writing team already holds that proof. A DITA source in Git has one source of truth, a version history, named reviewers and audience profiling. AEGIS (AI Evidence and Governance Integrity System) is an agent that turns that source into an evidence pack. Each requirement is a DITA topic. A relationship table links each requirement to the topics that answer it. Four deterministic checks prove that each link is covered, current, approved and consistent. Gemini proposes a link only where a requirement has none. A compliance lead releases the pack, and AEGIS seals it in a Cloud Storage bucket with a locked retention policy.

The first AEGIS design was a governance platform for a fictional asset manager, with five agents and an EU AI Act risk classifier31. This version keeps its evidence bundle and its human escalation. It drops risk classification, because deciding whether an obligation applies is a legal decision, not a documentation decision.

evidence packEU AI ActAnnex XINIST AI RMFDITAreltableDITAVALaudience profilingprovenanceGeminiAgent Development KitBucket Lock

§1 Client Brief

The client is Google's AI model documentation, together with the Cloud TPU documentation that describes the hardware the models train on. Google signed the EU general-purpose AI Code of Practice in July 20251214. The sample content is the public Gemma 4 model card2, the Gemma 3 model card3 and the Gemma overview page4.

It is a good test for four reasons. A model card is the public document closest to what the regulation asks for, so its sections map to most items in Annex XI. It has real gaps and drift to find (§2.1). It is published under CC BY 4.0, so it can be adapted1. And it raises a real applicability question: Gemma 4 is released under Apache 2.02, and Article 53(2) exempts some open-source models from parts of the documentation duty6. AEGIS doesn't answer that question. It records who answered it, and when.

TermMeaning in this document
Evidence packThe files AEGIS builds for one request: the profiled documentation, a manifest and a coverage report.
Requirement topicA DITA reference topic that states one requirement in plain words, with its legal source and a key, for example aia.xi-2d.
Evidence topicA normal documentation topic, such as a model card section, that answers a requirement.
Relationship tableThe DITA <reltable>. Each row links topics in its cells17. Here, a requirement topic and its evidence topics.
DITAVAL profileA file that keeps or removes content by attribute value at build time18. AEGIS uses @audience with three values: public, downstream and authority.
PrologThe metadata block at the top of a DITA topic: author, critical dates and other metadata.
Model Documentation FormThe form in the Transparency chapter of the Code of Practice for the information that Article 53 needs1213.
Downstream providerA company that builds its own AI system on top of the model.
Retention lockA Cloud Storage retention policy that, once locked, can't be removed or shortened20.
Figure 1
System context: as-is state
PUBLISHED DOCS REPOSITORY ENGINEERING Gemma 4 model card ai.google.dev · public DITA source in Git topics · keys · history · reviews Training and eval facts sheets · run logs AI Office request "send the latest version" Compliance lead copies text · chases owners Model Documentation Form .docx · pasted text Email threads questions · approvals Spreadsheet tracker status by hand Shared folder the pack that was sent copy not used as evidence by email which version? who approved? approval apart from content
existing sourcegap
The one place that holds versions, dates and reviewers, the DITA source in Git, is not part of the evidence path. The evidence is rebuilt by copying, so it starts to drift the day it is sent.

1.1 Documentation has new readers

The usual readers use documentation to do a job. The new readers use it to check a claim. They read the same content, but they need three things a reader doing a job rarely asks for: the version, the source and the person who approved it.

Figure 2
One source, two kinds of reader
READ TO USE IT READ AS EVIDENCE Developer how do I call it? Architect will it fit my system? Support engineer why did it fail? One DITA source topics · keys · audience Git history · reviews Compliance lead can we prove it? AI Office · authority send the latest version Downstream provider can I meet my own duty? Internal audit who approved it, when? evidence adds: version · source · approver
reads to do a jobreads to check a claimthe source both read
The content is the same on both sides. The right side also needs the metadata that a DITA source and Git already keep.
ReaderAsksNeeds from the documentationTime limit
Developer, architectHow do I use it?Accurate task and reference topicsNone
Support engineerWhy did it fail?One answer for each valueNone
Compliance lead at GoogleCan we prove it?Evidence for each requirement, with version and approverBefore release
AI Office, national authoritySend the latest documentationAnnex XI technical documentation7On request, in the time set13
Downstream providerCan I meet my own obligations?Annex XII information814 days in the Code of Practice13
PublicWhat was it trained on?Public summary of training content, Article 53(1)(d)6At release

The writing team is the right owner for these readers because evidence needs the same things good documentation needs: one source, a known version, a named reviewer and the right content for each audience. A structured DITA source already has all of them. The table shows where each governance need is already met.

Governance needWhat the writing team already hasDITA or Git feature
One source for every answerSingle-sourced topics in GitMaps, topics, conref
Trace each requirement to its evidenceLinks that writers maintain<reltable>17
Give each reader only their partAudience profiling@audience and DITAVAL18
Version and date of every statementReview dates and history<critdates>, commits
A named, accountable reviewerPull request approvalProtected branches, code owners2830
One value everywhereKeys, as in AlignR33<keydef>, keyref
A controlled vocabularyAllowed attribute valuesSubject scheme map

1.2 Regulation in brief

Two frameworks set the scope. The EU AI Act (Regulation (EU) 2024/1689) is binding law5. The Digital Omnibus on AI, Regulation (EU) 2026/1744, moved the high-risk dates later10. The obligations for general-purpose AI models did not move. They have applied since 2 August 2025, and the AI Office can enforce them with fines from 2 August 202611. The NIST AI Risk Management Framework is voluntary. NIST is revising it, and has not given a release date for the new version15.

Figure 3
EU AI Act dates after the Digital Omnibus
2024 2025 2026 2027 2028 today · 20 Oct 2026 In force 1 Aug 2024 GPAI model duties Article 53 · Annex XI, XII 2 Aug 2025 Fines and enforcement Article 50, Article 101 2 Aug 2026 High-risk, Annex III Article 11 · Annex IV 2 Dec 2027 Prohibitions 2 Feb 2025 Code of Practice 10 Jul 2025 · Google signs Older GPAI models 2 Aug 2027 High-risk, Annex I 2 Aug 2028
general-purpose AI model duties: in scope for AEGIShigh-risk systems: outside this MVPgeneral
Dates from the Digital Omnibus text and its summary1011. Code of Practice date from the Commission12. The purple duties already apply. The high-risk dates are the ones the omnibus moved.
ArticleWhat it asks forApplies fromDocumentation job
53(1)(a) and Annex XITechnical documentation, kept current, for the AI Office and national authorities on request672 Aug 2025. Older models: 2 Aug 202711Authority pack
53(1)(b) and Annex XIIInformation for providers who build the model into their own systems82 Aug 2025Downstream pack
53(1)(d)A public summary of the training content, on the AI Office template62 Aug 2025Public page
50Tell people when they deal with an AI system or generated content2 Aug 202611Disclosure text
11 and Annex IVTechnical documentation for high-risk AI systems2 Dec 2027 for Annex III10Not in this MVP
101Fines up to 3% of worldwide turnover or €15 million, including for incorrect, incomplete or misleading information92 Aug 202611Accuracy of what is sent

The NIST framework has four functions. GOVERN is cross-cutting. MAP sets the context for risks, MEASURE assesses them and MANAGE acts on them16. It doesn't set a document format, but several subcategories ask for something to be documented. Figure 4 shows the ones that AEGIS can produce evidence for (§5.9).

Figure 4
NIST AI RMF functions and the subcategories that ask for documentation
GOVERN cross-cutting MAP set the context MEASURE assess and track MANAGE act on risks GOVERN 1.6 Mechanisms exist to inventory AI systems AEGIS: pack register MAP 2.2 Knowledge limits and human oversight described AEGIS: limits topics MEASURE 2.8 Transparency and accountability risks AEGIS: approver per item MEASURE 2.9 Model explained, validated and documented AEGIS: coverage check MANAGE 4.3 Incidents and errors communicated outside this MVP
AEGIS produces evidencenot covered
Subcategory text paraphrased from NIST AI 100-116. NIST also publishes a Generative AI Profile, NIST AI 600-1 (July 2024)15. AEGIS treats NIST subcategories as one more requirement set in the same map.
Scope
AEGIS proves that evidence exists, is current, was approved and is consistent. It doesn't decide whether an obligation applies, and it doesn't judge whether the evidence is legally enough. Those are decisions for the compliance lead and legal counsel. AEGIS records each decision with a name and a date, like any other item.

§2 Problem Statement

When the AI Office or a downstream provider asks for model documentation, someone has to put a pack together. Today that pack is built by hand from published pages, spreadsheets and email. It is slow, and it can't show which version of each statement was sent or who approved it. Article 101 allows fines for information that is incorrect, incomplete or misleading9, so a pack that can't prove its own accuracy is a cost, not only an effort.

2.1 The content exists, but not as evidence

Figure 5 checks the public Gemma pages against the Annex XI items that apply to every general-purpose AI model provider7. It is the check a compliance lead can do without asking anyone, and the starting point for every pack built by hand.

Figure 5
Annex XI, Section 1, against the public Gemma model cards
Annex XI itemGemma 4 model cardGemma 3 model card
1(a) Intended tasksStatedIntended usage sectionStatedIntended usage section
1(b) Acceptable useLinkedGemma Terms of Use4LinkedGemma Terms of Use
1(c) Release date, distributionNot statedOnly a "last updated" dateNot statedOnly a "last updated" date
1(d) Architecture, parametersStatedDense and MoE; 30.7B; 25.2B with 3.8B activePartlySize names, no parameter counts
1(e) Input and outputTwo statementsVideo in the introduction, not in the modality tableStatedText and images in, text out
1(f) LicenceTwo statementsApache 2.0 on the card; overview also links the Gemma Terms4StatedGemma Terms of Use
2(a) Integration meansPartlyBest practices sectionPartlySoftware section
2(b) Design and training methodPartlyArchitecture, no rationalePartlyArchitecture, no rationale
2(c) Training dataStatedData types, languages, preprocessingStatedTokens per size, preprocessing
2(d) Training computeNot statedNo hardware or computePartlyHardware: TPUv4p, TPUv5p, TPUv5e
2(e) Energy useNot statedNo energy figureNot statedOne sentence on sustainability
stated or linkedpartly, or stated twice in different waysnot stated
Pages as published: Gemma 4, last updated 30 July 20262; Gemma 3, last updated 14 August 20253. This does not show that Google lacks the information. Annex XI documentation goes to the AI Office on request and isn't public. It shows how much of a pack built from public pages must still be chased by hand: 7 of 11 items for Gemma 4.
A real example
The Gemma 4 model card describes language support twice. The introduction says the model supports over 140 languages. The capabilities section says "Out-of-the-box support for 35+ languages, pre-trained on 140+ languages"2. Both can be true, because they measure different things. A pack built by copying must pick one sentence, from one page, on one date, and it records none of those choices. The same page also carries a notice that the documentation is deprecated and has moved to gemma.ai. In a DITA source the two numbers are two keys with two labels, and the move is a commit with a date.

The cost is mostly people's time. Figure 6 models one authority pack for one model, built by hand and built by AEGIS. Most of the manual time goes to chasing owners and confirming approvals, which is exactly what Git already records.

Figure 6
People hours for one Annex XI pack (modelled)
08162432 h By hand form · sheet · email find 6 copy into form 8 chase owners 10 approvals 5 send 3 With AEGIS checks · review · release review 3 release 1 · about 4 h checks and build: minutes of machine time
finding and copyingchasing and confirmingAEGIS machine timehuman review and release
Modelled for this design, not measured. Assumes 11 Annex XI items, 14 evidence topics and 4 owners, with the coverage of Figure 5. Each new model version and each request repeats the manual bar. With AEGIS the review time falls as the relationship table fills in.

2.2 Why the current options fail

There are four common ways to answer an evidence request. Each one moves the evidence away from the source, or loses the link to the version and the approver.

OptionWhat it doesWhat it missesResult
Copy into the form and track in a sheetThe compliance lead pastes published text into the Model Documentation Form.No link to the source version. No proof of approval. Out of date at the next release.Manual
Governance, risk and compliance platformStores policies, controls and attestations.Holds a second copy of the content, with its own licence. Writers don't work in it, so it drifts.Second copy
A chat assistant fills the formDrafts answers from the model card.Answers have no source, no version and no approver. Nothing can be shown as evidence.Unverifiable
Wiki page approval (first AEGIS)Records sign-off as a page approval31.The approval sits on a page, apart from the source that the published docs are built from.Partial
AEGIS v0.1Builds the pack from the DITA source. Links each item to a commit, a date and an approver. Checks decide.Can't decide if an obligation applies. Can't write a missing fact.Evidence from source
Figure 7
Options by distance from the source and strength of evidence
DISTANCE FROM THE DITA SOURCE → STRENGTH OF EVIDENCE → in the sourcea copy of a copy claimproof Chat assistant fills the form Copy into the form GRC platform Wiki page approval AEGIS v0.1 commit · date · approver per item
A qualitative placement, not a measurement. Evidence gets weaker each time the content is copied away from the place where versions and approvals are kept.
Problem statement
Regulators, downstream providers and compliance leads now read model documentation as evidence. They need each statement with its version, its source and its approver. Today the evidence is rebuilt by hand from published pages, so it is slow to build, starts to drift when it is sent, and can't prove its own accuracy. The DITA source in Git already holds the versions, dates and reviews, but nothing turns it into evidence.

§3 User Profiles

Five roles at Google decide whether AEGIS is useful. Two readers outside the writing team use what it produces.

Documentation lead, GemmaSponsor
GoalAnswer evidence requests without taking writers off launches.
Measured byPeople hours per pack. Packs answered in time.
TodayEach request becomes a small manual project.
ConcernA compliance tool that the writing team must run forever.
SuccessA pack in one working day, with no text copied by hand.
Technical writer, Gemma model docsMain user
GoalWrite each fact once and know where it is used as evidence.
Measured byGap notes per release. Hours spent on each pack.
TodayAnswers compliance questions by email and finds old text in forms.
ConcernBecoming a copy service for the compliance team.
SuccessEvidence links live in the map, next to the content she maintains.
Information architectStructure owner
GoalKeep requirement topics, links and audience values under control.
Measured byRequirements with no link. Profile errors at build time.
TodayRequirements are not modelled in the source at all.
ConcernAn agent that adds links nobody reviewed.
SuccessEvery link change is a pull request that she approves.
Research engineer, Gemma trainingContributor
GoalGive each training fact once, to one place.
Measured byQuestions per pack.
TodaySeveral teams ask him the same compute and energy questions.
ConcernConfidential numbers reaching public output.
SuccessFacts live in authority-only topics, and the public build never contains them.
AI governance and compliance leadNew consumer
GoalAnswer the AI Office or a downstream provider with evidence she can defend.
Measured byRequests answered in time. Items with a named approver.
TodayFills in the Model Documentation Form by hand from published pages.
ConcernSending incomplete or incorrect information, which Article 101 can fine9.
SuccessEach item traced to a commit, a date and a person, in a pack that she releases herself.

Readers

Lena BrandtReader
RoleTechnical assessor at the European AI Office (fictional).
GoalCheck that the latest documentation covers Annex XI.
TodayReceives documents with no version or date on each statement.
SuccessEvery item names its source, its model version and its approver.
Priya NairReader
RoleML platform lead at a European company that builds a support assistant on Gemma 4 (fictional).
GoalMeet her own obligations as a downstream provider.
TodayReads the public card and guesses which statement is current.
SuccessAn Annex XII pack within the 14 days that the Code of Practice sets13.

Evidence needs clear ownership, so the roles map to a RACI matrix. Each activity has one role that approves it (A). AEGIS appears in no column: it does work, but it never approves.

ActivityDocs leadWriterIAEngineerCompliance
Write requirement topicsICRIA
Write evidence topicsARCCI
Supply training factsICIAI
Approve requirement linksICAIC
Decide if an obligation appliesIIIIA
Release a packCIIIA
A: approvesR: does the workC: consultedI: informed

§4 User Stories

Each story has acceptance criteria that a tool or check in §5 tests.

US-1 · Documentation lead
As the documentation lead, I want each pack built from the source with its hours and model cost logged, so that I can show the time it saves.
Accepted when: seal_pack writes one register row per pack with build time, model calls and cost; review time comes from pull request timestamps.
US-2 · Technical writer
As the Gemma writer, I want each requirement linked to my topics in the map, so that I answer compliance questions by keeping the source current.
Accepted when: check_coverage reads only the relationship table; a topic older than the current model version shows as stale in check_currency.
US-3 · Information architect
As the information architect, I want every new requirement link to arrive as a pull request, so that no link reaches a pack without my review.
Accepted when: propose_mapping writes only to a branch; the evidence map has her as code owner; the agent's account can't approve.
US-4 · Research engineer
As the research engineer, I want confidential training facts to reach only the authority pack, so that they never appear in public output.
Accepted when: topics with audience="authority" are absent from the public and downstream builds; check_consistency fails the build if an authority-only key resolves in either.
US-5 · Compliance lead
As the compliance lead, I want each item in a pack traced to a commit, a date and an approver, so that what I send is complete and correct.
Accepted when: check_approval passes for every item; the manifest lists commit, revised date and approver for each requirement; seal_pack refuses a pack she hasn't released.
US-6 · Lena, reader
As an assessor, I want the pack to show the model version and date of each statement, so that I can check it against the model on the market.
Accepted when: each manifest item carries model-version and a revised date, and check_currency passes.
US-7 · Priya, reader
As a downstream provider, I want one pack with only the Annex XII items, so that I can meet my own obligations quickly.
Accepted when: the downstream build passes check_coverage for all 11 Annex XII requirements, and the pack is ready within one working day.
Figure 8
Stories mapped to the agent tools
load_requirements read_evidence_map check_coverage check_currency check_approval check_consistency propose_mapping build_pack open_review seal_pack US-1 Lead · time saved US-2 Writer · links in map US-3 IA · links reviewed US-4 Engineer · no leaks US-5 Compliance · traced US-6 Lena · version, date US-7 Priya · Annex XII
deterministic toolcheck that decides pass or failmodel call
The model appears in two stories, and in both a person reviews its output. No acceptance test depends on the model.

§5 Proposed Design

AEGIS v0.1 is an agent built with Agent Development Kit (ADK), Google's open-source agent framework22. Plain Python tools, called through function calling24, read the source, run the checks and build the pack. Gemini 3.8 Flash (gemini-3.8-flash)23 has one job. When a requirement has no evidence linked to it, Gemini proposes a link by filling a JSON Schema with structured output25. The checks decide pass or fail. The agent can't approve a link, release a pack or change a topic.

5.1 How it works

A compliance lead opens an issue for a request: who asked, which requirement set and which audience. AEGIS reads three inputs that already exist: the requirement map, the DITA source and the Git history. It runs four checks, asks Gemini only about requirements with no evidence, builds the pack with DITA-OT and opens a review. When the compliance lead releases the pack, AEGIS seals it. Figure 9 is the same context as Figure 1, with AEGIS added.

Figure 9
System context: AEGIS added
Requirement map Annex XI · XII · NIST as topics DITA source in Git topics · reltable · keys · prolog Git and review history commits · PR approvals AEGIS AGENT · ADK · CLOUD RUN JOB load_requirements read_evidence_map build_pack · DITA-OT check_coverage check_currency check_approval check_consistency requirements + links + dates + approvals Gemini 3.8 Flash propose_mapping unmapped requirements only no evidence all pass, or gaps recorded Review pull request pack · report · gaps Compliance lead releases · decides gaps Sealed pack locked bucket · register Link pull request IA approves or rejects seal branch
existing source or storedeterministic tool or outputcheck that decidesmodel, and its proposalsgap path
The DITA source is now on the evidence path. The model sits beside the checks, not in front of them. Its only output is a proposed link, and a person approves it before it counts. When the link pull request merges, AEGIS runs again.

5.2 Governance in DITA

AEGIS adds no new format. It uses four DITA 1.3 features that the team already knows. DITA 1.3 is the current OASIS standard, and DITA-OT 4.4 only previews DITA 2.019, so the design targets 1.3. Requirements become topics, links become a relationship table, evidence topics carry their dates in the prolog, and DITAVAL profiles decide which reader gets which topics.

Figure 10
Four DITA layers between a requirement and a pack
1 · REQUIREMENT TOPICS2 · RELATIONSHIP TABLE3 · EVIDENCE TOPICS4 · DITAVAL PROFILES aia.xi-1d aia.xi-2d aia.xii-2b nist.measure-2.9 one requirement, one key xi-1doverview xi-2dtrain-infra xii-2bio-formats m-2.9benchmarks one row per requirement models-overviewpublic · 2026-07-30 training-infraauthority · 2026-07-30 io-formatsdownstream · 2026-07-30 benchmarkspublic · 2026-07-30 audience · dates · version public.ditavalpublic only downstream.ditaval+ downstream authority.ditaval+ authority one reader, one profile check_coverage readswhich keys must be answered check_coverage readswhether each has evidence check_currency, check_approvalread dates and Git check_consistency teststhat nothing leaks
requirementtraceevidenceaudience profile
The evidence map is a separate DITA map that only AEGIS builds, so the relationship table never adds links to the published model card. Topic dates are sample values.
Figure 11
The four layers in source
1 · Requirement topic, owned by the information architect
<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>
2 · Relationship table in the evidence map
<reltable title="Gemma 4 · Annex XI">
  <relheader><relcolspec type="reference"/><relcolspec type="reference"/></relheader>  <!-- requirement | evidence -->
  <relrow>
    <relcell><topicref keyref="aia.xi-1d"/></relcell>
    <relcell><topicref href="gemma4/models-overview.dita"/></relcell>
  </relrow>
  <relrow>
    <relcell><topicref keyref="aia.xi-2d"/></relcell>
    <relcell><topicref href="gemma4/training-infrastructure.dita"/></relcell>  <!-- added by PR #457 -->
  </relrow>
</reltable>
3 · Evidence topic: audience and dates in the prolog
<reference id="gemma4-training-infrastructure" audience="authority">
  <title>Gemma 4 training infrastructure</title>
  <prolog>
    <author type="contributor">Gemma research engineering</author>
    <critdates><created date="2026-04-02"/><revised modified="2026-07-30"/></critdates>
    <metadata><othermeta name="model-version" content="gemma-4"/></metadata>
  </prolog>
  <refbody><properties>
    <property><proptype>Training hardware</proptype><propvalue><ph keyref="gemma4-train-hardware"/></propvalue></property>
    <!-- more rows: training time, compute estimate -->
  </properties></refbody>
</reference>
4 · DITAVAL profile for the downstream pack
<val>
  <prop att="audience" val="public"     action="include"/>
  <prop att="audience" val="downstream" action="include"/>
  <prop att="audience" val="authority"  action="exclude"/>
</val>
KeysRequirement keys and value keys work the same way. A value changes in one place, and every pack picks it up.
AudienceThe authority topic exists once. The downstream and public profiles exclude it at build time.
ApprovalThe prolog names who should own a topic. Git records who approved it. AEGIS trusts Git for approval.
Sample source written for this design. The training infrastructure topic and its key are placeholders, because Annex XI documentation isn't public. Element and attribute names follow DITA 1.31718.
DITA or Git featureGovernance jobChecked by
<reltable> in the evidence mapTrace each requirement to its evidencecheck_coverage
<critdates>, model-versionShow which version and which date each statement belongs tocheck_currency
Pull request reviews, code ownersShow who approved each statementcheck_approval
Keys and keyrefOne value in every packcheck_consistency
@audience and DITAVALGive each reader only their partcheck_consistency (leak test)
Subject scheme mapAllow only known audience values and requirement keysThe DITA-OT build fails on an unknown value

5.3 Four checks

The checks are plain code. They give the same answer every time, and they decide whether a pack can be released. Each writes its result into the manifest, so the result becomes part of the evidence.

CheckPasses whenFails whenWrites
check_coverageEvery requirement in the set has at least one evidence topic that survives the pack's profileA row is empty, or its only evidence is removed by the profileCoverage table
check_currencyEach evidence topic was revised on or after the model version date, or holds only key references whose keys changed in an approved commit after that dateA topic is older than the model version and contains literal valuesStale list
check_approvalThe last change to each topic merged through a pull request approved by a code owner who is not the author or the agent2830A direct push, a self-approval, or no approvalApprover for each item
check_consistencyEach specification value resolves from a key, keys resolve the same in every pack, and no authority-only key appears in the public or downstream buildA literal value conflicts with a key, or authority content leaksConflict and leak list

5.4 Agent tools

The agent has ten tools. One calls the model. The pattern comes from the earlier projects in this series: plain tools give the same result every time, checks decide, and a person approves3233.

1. Load the requirement set load_requirements

Reads the requirement map for this request: Annex XI, Annex XII, or a set of NIST AI RMF subcategories. Each requirement is a topic with a key and the audience it is required for.

output: requirement keys, legal sources and required audiences

2. Read the evidence map read_evidence_map

Reads the relationship table, each evidence topic's prolog and keys, and the Git log and pull request reviews for each topic file.

output: requirement-to-topic links with dates, model version, commit and reviewers

3. Check coverage check_coverage check

Every requirement has evidence that survives the pack's DITAVAL profile.

output: covered requirements out of all requirements, with each empty row

4. Check currency check_currency check

Compares each topic's revised date and model version with the current model version date. A topic that holds only key references passes when its keys were updated in an approved commit.

output: current topics out of all topics, with each stale topic

5. Check approval check_approval check

Reads the pull request reviews from the GitHub API. The approver must be a code owner, must not be the author, and must not be the agent's account.

output: approver, role and date for each topic

6. Check consistency check_consistency check

Every value comes from a key. A key gives the same value in every pack. Authority-only keys never resolve in the public or downstream build.

output: conflicts and leaks, each with file and line

7. Propose a link propose_mapping model

Runs only for requirements with no evidence. Gemini reads the requirement topic and the titles and short descriptions of candidate topics, never their bodies. It returns a candidate topic ID from a list of real IDs, a reason and a confidence, or "none".

output: a relationship table change on a branch, or a gap note for the owner

8. Build the pack build_pack

Runs DITA-OT 4.4 on the map with the request's DITAVAL profile. Writes the PDF and HTML, the manifest (§5.8) and the coverage report.

output: pack files, manifest.json, report.html

9. Open the review open_review

Opens a pull request with the pack and the report. Assigns link proposals to the information architect and gaps to their owners. Asks the compliance lead to release. The agent can't approve.

output: review pull request and issues for each gap

10. Seal the pack seal_pack

Runs only after the compliance lead approves the release. Hashes each file with SHA-256, uploads the pack to a Cloud Storage bucket with a locked 10-year retention policy20, and writes one row to the BigQuery register.

output: object paths, manifest hash, register row

5.5 Agent loop

Checks run first. Gemini is called only for coverage gaps. Currency, approval and consistency failures go to people as gap notes, because only the owner can fix a stale topic or approve a change.

Figure 12
Agent loop for one request
Load requirements, read the map All four checks pass? Build the pack, open review Compliance lead releases Seal the pack yes no coverage gap any other failure Gemini proposes a link or "none" with a gap note Gap note to the owner no model call IA reviews link PR approve or reject re-run on merge lead decides: fix, or record with a reason
A gap is never hidden. It is fixed in the source and the loop runs again, or it ships in the report with the compliance lead's decision and reason. Gemini never sees currency, approval or consistency failures.

The schema for propose_mapping is built fresh for each run, so the candidate list holds only topic IDs that exist in the map. Gemini can't link to a topic that isn't there. A proposal with a confidence under 0.6 becomes a gap note, not a pull request.

// propose_mapping schema (excerpt) · run 0457 · requirement aia.xi-2d
{
  "type": "object", "additionalProperties": false,
  "required": ["requirement", "candidate", "reason", "confidence"],
  "properties": {
    "requirement": { "enum": ["aia.xi-2d"] },
    "candidate":   { "enum": ["gemma4-training-infrastructure", "gemma4-models-overview", …, "none"] },
    "reason":      { "type": "string", "maxLength": 300 },
    "confidence":  { "type": "number", "minimum": 0, "maximum": 1 },
    "gap_note":    { "type": "string", "maxLength": 400 }
  }
}

5.6 One request, end to end

Figure 13 follows the AI Office request in the third simulator scenario (§6). Two requirements have no evidence. Gemini finds a topic for one of them. The other is a real gap.

Figure 13
Sequence: Annex XI pack for Gemma 4
Compliance lead GitHub AEGIS agent Gemini Checks Storage 1 request issue 2 Actions trigger 3 requirements · map · history 4 run four checks 5 coverage 9/11 6 two requirements 7 one link · one none 8 link PR · gap issue 9 IA approves 10 merge · re-run 11 re-check 12 10/11 · 1 gap 13 review PR 14 release 15 approved 16 upload · lock · register
One model call for the whole pack. The information architect reviews one link and the compliance lead makes one decision about one gap: the energy figure for Annex XI point 2(e).

5.7 One source, three packs

The same source builds three packs, one for each reader that the regulation names. The authority topics exist once and are never copied.

Figure 14
Three DITAVAL profiles over one source
GEMMA 4 SOURCE · 14 TOPICS models-overview intended-usage limitations training-data benchmarks best-practices licence ethics-safety modalities integration sw-versions io-formats training-infra energy-estimate public.ditavaldownstream.ditavalauthority.ditaval Public model card 9 topics · anyone Downstream pack · Annex XII 12 topics · downstream providers Authority pack · Annex XI 14 topics · AI Office, authorities
audience="public"audience="downstream"audience="authority"
Topic counts are for the sample source. Each profile only adds audiences. A reader never gets a topic marked for a narrower audience.
PackProfileRequirement setSent toTime limit
Public model cardpublic.ditavalModel card sectionsAnyoneAt release
Downstream packdownstream.ditavalAnnex XII, 11 items8Downstream providers14 days13
Authority packauthority.ditavalAnnex XI, Section 1, 11 items7AI Office, national authorities6On request

5.8 The manifest

The manifest is the part of the pack that turns documentation into evidence. It records, for each requirement, which topic answered it, from which commit, on which date and with whose approval. It also records every gap and the decision about it.

Figure 15
manifest.json for the Annex XI pack (excerpt)
{
  "pack_id":  "gemma4-aia-xi-2026-10-20-01",
  "request":  { "from": "AI Office", "basis": "Article 53(1)(a)", "issue": 456 },
  "source":   { "commit": "9c41e7a", "profile": "authority.ditaval", "model_version": "gemma-4" },
  "items": [
    { "req": "aia.xi-1d", "topics": ["gemma4-models-overview"], "revised": "2026-07-30",
      "approved_by": "technical-writer", "pr": 418, "checks": "pass" },
    { "req": "aia.xi-2d", "topics": ["gemma4-training-infrastructure"], "revised": "2026-07-30",
      "approved_by": "training-lead", "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" } }
  ],
  "files":    [{ "path": "gemma4-annex-xi.pdf", "sha256": "3b7f…a91c" }],
  "released": { "by": "compliance-lead", "pr": 459 },
  "sealed":   { "bucket": "aegis-evidence", "retention": "315360000s, locked" }
}
ProvenanceCommit, date and approver for each requirement. Roles here, named people in a real pack.
Model's partThe link Gemini proposed is labelled as proposed, with the person who approved it.
Recorded gapThe missing item is in the pack, with a decision, a name and a date.
Sample values. 315,360,000 seconds is 10 years, the minimum retention in the Code of Practice13. Cloud Storage allows up to 100 years20.

5.9 NIST AI RMF evidence

The NIST subcategories go into the requirement map as one more set of topics. The same checks then produce evidence for them, with no extra tool.

SubcategoryWhat it asks, paraphrased16AEGIS evidence
GOVERN 1.6Mechanisms to inventory AI systemsThe BigQuery register lists every model, version and pack
MAP 2.2Information on the system's knowledge limits and human oversightLimitations topics are required evidence; check_coverage fails without them
MEASURE 2.8Transparency and accountability risks examined and documentedThe manifest names the approver of each statement
MEASURE 2.9The model is explained, validated and documentedCoverage of model overview, benchmark and evaluation topics

5.10 Where it runs

Figure 16
Deployment on Google Cloud
GITHUB Repository DITA source · maps Actions request issue trigger Pull requests code owners · reviews the approval record GOOGLE CLOUD PROJECT Cloud Run job ADK agent · Python checks DITA-OT 4.4 in the image one run per request Secret Manager GitHub app key · API key Cloud Storage bucket retention locked · 10 years sealed packs BigQuery pack register · run log Gemini API gemini-3.8-flash · titles only start PRs
No server runs between requests. The bucket and the register are the only state that lasts, and the bucket can't be changed once a pack is sealed.
PartTechnologyFree tier or licence
Agent frameworkAgent Development Kit22Apache 2.0
ModelGemini 3.8 Flash (gemini-3.8-flash), structured outputGemini API free tier for the POC26
Pack buildDITA-OT 4.4 with DITAVAL19Apache 2.0
Trigger and approval recordGitHub Actions, protected branches, code owners2830Actions free for public repositories29
Agent runtimeCloud Run job, one run per requestCloud Run free tier2127
Sealed packsCloud Storage, retention policy locked with Bucket Lock205 GB-months of Standard storage21
Pack registerBigQuery1 TB of queries a month21
SecretsSecret Manager6 secret versions a month21

Data handling. The sample content is public, so the Gemini API free tier is acceptable for the POC. Content sent on the free tier is used to improve Google products, so a real deployment needs the paid tier26. AEGIS also limits what the model sees: propose_mapping sends only requirement text and the titles and short descriptions of candidate topics, never the body of an authority topic.

Known limits. AEGIS proves that evidence exists, is current, was approved and is consistent. It doesn't prove that the evidence is true. A locked retention policy can't be removed or shortened20, so the POC tests with a short unlocked policy first. Free-tier limits change over time21.

§6 Evidence Simulator

Three requests for Gemma 4. The first passes cleanly. In the second, a model update raises two flags and code clears both. In the third, Gemini finds one missing link and the compliance lead gets one real gap.

aegis · evidence simulator
idle
Sample request
// choose a sample request and run it
Scripted demo. No live model call. Issue numbers, timings, token counts and costs are illustrative.

§7 Success Metrics

The MVP is measured on the Gemma 4 sample source, with one authority pack and one downstream pack. Each metric comes from a check result, the manifest or the register, not from a judgement.

MetricHow it is measuredMVP target
Requirements in a released pack that are covered, current and approvedCheck results in the manifest100%, or a recorded decision for each gap
Items with a named human approver from Gitcheck_approval100%
Values in packs that resolve from a keycheck_consistency100%
Authority content found in public or downstream outputLeak test in check_consistency0
Time from request to a pack ready for releaseIssue opened to review pull requestUnder 1 working day
People hours per packPull request review timestampsUnder 4, against a modelled 32 by hand (Figure 6)
Model calls per packRegisterOnly for unmapped requirements, falling as the map fills
Packs sealed with a locked policy and a manifest hashRegister and bucket metadata100%
Figure 17
Sample report on the review pull request
Review PR #459 · issue #456 · Gemma 4 · Annex XI · authorityready · 1 recorded gap
10/11requirements covered
14/14topics current
14/14topics approved
1model call
Built from
  • Commit 9c41e7a · profile authority.ditaval · model version gemma-4
  • Requirement set: Annex XI, Section 1 (11 items), maintained by the information architect
Checks
  • Coverage: 10 of 11. Point 2(e), energy use, has no evidence topic.
  • Currency: 14 of 14 topics revised on or after the gemma-4 version date
  • Approval: 14 of 14 through approved pull requests, 3 roles, no self-approval
  • Consistency: 23 keys, 0 conflicts, 0 authority keys in other builds
Model proposals
  • Point 2(d) → gemma4-training-infrastructure, confidence 0.86. Approved by the information architect in PR #457.
Decision needed
  • Point 2(e): release with the gap recorded, or hold until issue #458 is closed. Owner: research engineering.
Cost

Build 3 min 40 s · 1 model call · 6,420 tokens in · 380 tokens out · under $0.01

The report tells the compliance lead where to look: one proposal, already reviewed, and one decision. Everything else has passed every check.
Figure 18
Requirements that needed a model call, per pack (modelled)
01234 421020 pack 1pack 2pack 3pack 4pack 5pack 6 NIST set added REQUIREMENTS WITH NO LINK BEFORE THE RUN
Annex XI and XII packsafter a new requirement set
Modelled, not measured. Each approved link stays in the relationship table, so the model is needed less with each pack. A new requirement set starts the curve again, at a lower point.

Sources

Checked on 20 October 2026.

  1. Google Developers, "Site Policies." developers.google.com/site-policies
  2. Google AI for Developers, "Gemma 4 model card," last updated 30 July 2026. ai.google.dev/gemma/docs/core/model_card_4
  3. Google AI for Developers, "Gemma 3 model card," last updated 14 August 2025. ai.google.dev/gemma/docs/core/model_card_3
  4. Google AI for Developers, "Gemma models overview," last updated 8 July 2026. ai.google.dev/gemma/docs/core
  5. Regulation (EU) 2024/1689 (Artificial Intelligence Act), EUR-Lex. eur-lex.europa.eu/eli/reg/2024/1689/oj
  6. EU AI Act, Article 53: obligations for providers of general-purpose AI models. artificialintelligenceact.eu/article/53
  7. EU AI Act, Annex XI: technical documentation for providers of general-purpose AI models. artificialintelligenceact.eu/annex/11
  8. EU AI Act, Annex XII: transparency information for downstream providers. artificialintelligenceact.eu/annex/12
  9. EU AI Act, Article 101: fines for providers of general-purpose AI models. artificialintelligenceact.eu/article/101
  10. "Digital Omnibus on AI," Regulation (EU) 2026/1744, AI Act Explorer. artificialintelligenceact.eu/ai-act-explorer/digital-omnibus
  11. 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
  12. European Commission, "The General-Purpose AI Code of Practice," last updated 7 October 2026. digital-strategy.ec.europa.eu/en/policies/gpai-code-practice
  13. AI Act Explorer, "Overview of the Code of Practice." artificialintelligenceact.eu/code-of-practice-overview
  14. 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
  15. NIST, "AI Risk Management Framework." nist.gov/itl/ai-risk-management-framework
  16. NIST AI 100-1, "Artificial Intelligence Risk Management Framework (AI RMF 1.0)," January 2023. nvlpubs.nist.gov/nistpubs/ai/nist.ai.100-1.pdf
  17. OASIS DITA 1.3, "reltable." docs.oasis-open.org/dita/dita/v1.3/os/part1-base/langRef/base/reltable.html
  18. DITA 1.3 specification, "Conditional processing (profiling)." dita-lang.org/1.3/dita/archspec/base/condproc
  19. DITA Open Toolkit 4.4, "DITA 2.0 preview support." dita-ot.org/4.4/reference/dita-v2-0-support
  20. Google Cloud, "Bucket Lock." docs.cloud.google.com/storage/docs/bucket-lock
  21. Google Cloud, "Free Google Cloud features." cloud.google.com/free
  22. Google, Agent Development Kit documentation. github.com/google/adk-docs
  23. Google AI for Developers, "Gemini 3.8 Flash." ai.google.dev/gemini-api/docs/models/gemini-3.8-flash
  24. Google AI for Developers, "Function calling with the Gemini API." ai.google.dev/gemini-api/docs/function-calling
  25. Google AI for Developers, "Structured outputs." ai.google.dev/gemini-api/docs/structured-output
  26. Google AI for Developers, "Gemini Developer API pricing." ai.google.dev/gemini-api/docs/pricing
  27. Google Cloud, "Cloud Run pricing." cloud.google.com/run/pricing
  28. GitHub Docs, "About protected branches." docs.github.com/.../about-protected-branches
  29. GitHub Docs, "How use of GitHub Actions is measured." docs.github.com/en/billing/concepts/product-billing/github-actions
  30. GitHub Docs, "About code owners." docs.github.com/.../about-code-owners
  31. Siddharth Rao, "AEGIS: AI Evidence and Governance Integrity System," first design. github.com/raosiddharthp/The-Autonomous-Compliance-Officer
  32. Siddharth Rao, "MANIFEST," design document. siddharthraop.github.io/Manifest
  33. Siddharth Rao, "AlignR," design document v0.1. siddharthraop.github.io/AlignR