02 · THE ARTIFACTS, IN DETAIL
Four things accumulate across the stages. Each is a real object in your repo or your runtime, with contents you can inspect, not a deliverable name on a statement of work.
A machine-readable inventory of everything in your product that is AI, and every boundary your data crosses to reach it.
- Model, provider, version, region and the contractual retention and training terms for each
- SDKs and their pinned versions, with the transitive graph resolved
- Vector stores, what is embedded in them, and who can query them
- MCP servers, their tool manifests, and the auth in front of each one
- Agents, their tool grants, and the identity each one runs as
- Every data flow that leaves your boundary, with its processor and lawful basis
Where it lives · Versioned in your repo, regenerated by a CI job, not a spreadsheet
The set of documents an enterprise security review asks an AI vendor for, written once and reusable for every deal after the first.
- A trust page with structured markup, because buyers now send agents to read it before a human does
- An answer bank covering the standard AI questionnaire items, each answer linked to its evidence
- The data-flow map, rendered from the AI-BOM rather than drawn by hand
- DPA template and the current subprocessor list
- A one-page AI incident response plan with real names and a phone tree
- A written EU AI Act Article 50 position
Where it lives · A published page plus a repo folder your sales team can grep
Adversarial regression tests. Every confirmed finding becomes a permanent case, so the same failure cannot return in the next sprint or the next model version.
- Labelled attack cases with an expected refusal or an expected denial, not a fuzzy score
- Direct and indirect injection, tool misuse, exfiltration, memory poisoning, secret recovery
- Cases tagged to OWASP LLM and ASI categories so coverage is legible to an auditor
- A ship gate with a stated pass bar that fails the build on regression
- Cost and latency assertions alongside the safety ones, because a fix that triples spend is not a fix
Where it lives · In your repo, running on every commit and every model bump
The containment. OWASP's 2026 position is to assume the model will be fooled and build so it does not matter, which makes this an authorization problem rather than a filtering one.
- A distinct workload identity per agent, never a shared service account
- Short-lived, audience-scoped credentials minted per task, brokered rather than embedded
- A policy decision point every tool call passes through, with rules in version control
- A blast-radius boundary per agent: what it may spend, send, delete and reach
- An append-only audit log with a stable event schema
- A kill switch, a rollback, and drift alerting on agent behaviour
Where it lives · Running in production, with the policy reviewed like code