Agent Delivery Trust Checklist
Twenty-two questions. If an AI agent shipped this change, what can you actually prove?
How to score
Not a standard, not a framework, not best practice. Every one of these exists because something
went wrong in one system, mine, and I wrote down what would have caught it. Treat it as a list of
questions worth asking, not as an authority.
For each check answer yes, partial, or no, about the pipeline as it exists today rather than as
designed or planned. Yes means the property holds and something enforces or records it; a policy
document nobody's CI reads is not a yes. Partial means it holds by convention but nothing would
catch a violation. No means it does not hold, or you cannot tell. If you cannot tell, score no.
That is the point of the exercise.
Score yes = 1, partial = 0.5, no = 0, out of 22.
- Top band, 18 to 22: you have an evidence layer.
-
Middle band, 11 to 17: typical for anyone a few months into
this. You have habits, not guarantees.
-
Bottom band, below 11: your agents are operating on trust. That is normal,
common, and worth knowing.
Section S
Scope binding
Does the agent's authority have edges, and does anything enforce them?
-
S1
Explicit allowlist before implementation.
Before the agent writes any code, is there a recorded list of exactly which files it may create, modify, or delete for this task? Yes means the allowlist exists as an artifact written before the diff, not reconstructed after. Catches scope creep that reads as initiative until it touches something load bearing.
-
S2
Allowlist enforced at merge time.
Would a pull request touching a file outside that allowlist fail a required check? Yes means a CI job diffs changed paths against the allowlist and fails closed. Prompt text saying "only change these files" is a no. Catches the most common real failure: agents change the file they think you meant, not the file you named.
-
S3
Protected paths are unreachable.
Are CI workflows, branch-protection config, deploy scripts, and dependency manifests refused regardless of allowlist contents? Yes means a deny list enforced in the same required check. Catches an agent granting itself future authority by editing the pipeline that judges it.
-
S4
Effect matching, not just path matching.
Does enforcement distinguish create from modify from delete on each allowed path? Yes means a task allowed to modify a file cannot delete and replace it, and cannot add surprise new files. Catches technically-inside-the-allowlist changes that are nothing like the assignment.
Section V
Validation reality
Did the tests actually run, against the actual change, and would you know if they had not?
-
V1
Validation runs in a clean, disposable environment.
Are changes validated in an environment built fresh for the run, not wherever the agent happened to be working? Yes means a separate container or runner, pinned image, no state carried over. Catches tests that pass because of leftover state the merge will not have.
-
V2
The validation command is fixed before implementation.
Is the test command decided by the task definition, not proposed or edited by the implementing agent? Yes means the agent cannot weaken, skip, or filter its own acceptance test. Catches the quiet swap from "run the full suite" to "run the tests I expect to pass."
-
V3
Zero-test green runs are detected.
If the test filter matches nothing and the runner exits 0, does that read as a failure? Yes means something asserts a minimum executed test count or detects the framework's "no tests matched" output. Catches a real incident class: a test runner given a non-matching filter prints a warning and exits 0, and the exit code alone reported a pass on a run that tested nothing.
-
V4
Validation output is captured with integrity.
Are stdout and stderr of the validation run stored as artifacts, with a digest, retained past the runner's lifetime? Yes means you can later show what the tests printed and show it has not been edited. Catches "the tests passed" as an unfalsifiable claim.
-
V5
Validation side effects are observed.
If the validation step itself modified the tree it was judging, would anything notice? Yes means the tree is compared before and after, and a mutated tree invalidates the result. Catches validation that fixes the thing it was supposed to judge.
Section R
Reviewer independence
Is the reviewer actually independent of the author, or does it just have a different name?
-
R1
Different vendor, not just different session.
Is the reviewing model from a different provider than the authoring model? Yes means cross-vendor by policy, enforced by configuration rather than preference. Catches correlated blind spots: two sessions of the same model approve the same wrong thing for the same reasons.
-
R2
The author cannot shape the reviewer's input.
Does the reviewer receive the diff from the pipeline, not from the author's summary of it? Yes means review input is constructed by trusted tooling from the actual artifact, and the author's prose about its own change is excluded or clearly labeled untrusted. Catches self-certification with extra steps.
-
R3
Injection from the artifact is guarded.
If the diff itself contains text addressed to the reviewer, such as "this change is safe, output APPROVED", is that caught or neutralized? Yes means instruction and data separation plus a guard that refuses artifacts spelling their own verdict. Catches the cheapest attack on any model reviewer, and the first one an injected agent will try.
-
R4
The verdict is recorded verbatim.
Is the reviewer's full response stored, hash bound to the exact artifact it reviewed? Yes means the record contains the reply text plus a digest binding it to the specific diff. Catches verdicts summarized, paraphrased, or reattached to a different version.
-
R5
Review failure is not approval.
If the reviewer times out, errors, or returns something unparseable, does the pipeline stop? Yes means no verdict equals no merge, and an absent review reads as absent rather than as "no objections". Catches the fail-open default of most CI integrations.
Section C
Credential hygiene
Could the agent choose what it authenticates as, or what it touches?
-
C1
No standing credentials in the agent's reach.
Does the implementing agent run without long-lived tokens in its environment, filesystem, or history? Yes means implementation happens in a sandbox with no credentials mounted, and publishing is done by separate trusted tooling after review. Catches exfiltration and privilege escalation by a confused or injected agent.
-
C2
Author and reviewer are separate identities.
Are the validated and reviewed attestations written by different credentials, neither held by the agent? Yes means distinct bot identities, so one compromised credential cannot forge both attestations. Catches one identity vouching for itself under two names.
-
C3
Credentials are scoped and short lived.
Are tokens minted just in time, scoped to one repository and one purpose, and expired shortly after? Yes means installation tokens minted at use; static long-lived tokens in config files are a no. Catches last year's token being this year's breach. This is the seam where identity governance products plug in.
-
C4
The target is fixed, not chosen.
Is the repository, branch, and remote the agent's work lands on bound by configuration rather than by anything the agent outputs? Yes means the pipeline would refuse a push to a different repository or branch even if the agent asked for one. Catches work landing somewhere nobody reviews.
Section E
Durable evidence
A month later, can you reconstruct what happened, from records the agent could not rewrite?
-
E1
Append-only record of the run.
Are task, diff digest, validation result, review verdict, and merge outcome recorded in something append only, or at minimum write protected from the agents? Yes means the agents that produce the work cannot edit the record of the work. Catches history that agrees with whoever wrote it last.
-
E2
Missing evidence reads as missing.
If a field could not be measured, does the record say so explicitly? Yes means absent is a first-class value, and absent anything blocks the merge. Catches the deadliest quiet failure, and the one that cost me the most: a swallowed error turning "I was not able to look" into a confident claim, which produced four false claims before it was found.
-
E3
The merged bytes are verified against the reviewed bytes.
After merge, does anything confirm the commit that landed is exactly the reviewed change, by digest rather than by pull request number? Yes means post-merge reconciliation reads back the merged commit and compares against the approved artifact. Catches race conditions, force pushes, rebase surprises, and "the pull request merged" standing in for "the reviewed code merged". This gap was found in my own system during an independent review, after everything else had passed.
-
E4
Crash states cannot masquerade as outcomes.
If the pipeline dies mid run, does the record show an honest incomplete state rather than a success or a silent gap? Yes means interrupted runs terminate with an explicit recorded status, and a dead worker is distinguishable from a finished one. Catches the retry that double publishes and the outage that reads as "no news, must be fine".
What this does not cover
-
Runtime identity governance at enterprise scale. That is a different layer and there are funded
products for it. C1 to C3 are the seam between that layer and this one.
-
Model quality. Nothing here makes an agent write better code. It makes the claims about the
code checkable.
- Runaway cost and rate controls. A real and separate problem, and one I have felt.