AI CodeOps

Verify an evidence pack

An evidence pack is a signed record of how one change was made in AI CodeOps: the task given to the AI and the models that ran it, every approval and each vote, policy decisions, findings, test results, the pull request, the deployment and the audit trail. Choose a pack file to check that this platform issued it and that nothing in it has changed since.

What an evidence pack is

A pack is one JSON file per change, in the format aicodeops.evidence-pack/v1. It has two parts: a payload with the record itself, and a signature over it. The payload says when the pack was generated, by whom and by which platform, and then holds:

  • The task: the prompt given to the AI, the model, provider and tier, and the context files.
  • The runs: the session and every follow-up run, with status, timings, tokens and cost, and each agent step's provider and model.
  • The result: the summary, the changed files and a SHA-256 hash of the diff. The code itself is not included.
  • Approvals and policy decisions: each approval request, who could approve, every vote with its time and note, and each allow, deny or ask the workspace's policies made.
  • Findings and tests: review findings with their triage, and test results.
  • Delivery and audit: the pull request, the deployment, any linked incident, and the audit log entries about all of the above.
  • People: the email address behind every account ID in the pack, so it reads without access to the platform.

Packs are downloaded from a change's page in AI CodeOps (Changes, then a change, then Download evidence pack). That needs audit access in the workspace, which owners, admins and security admins have, and every download is recorded in the workspace audit log.

How verification works

When you choose a file, this page sends it to the platform's verify endpoint. The check reads the pack, returns a verdict and doesn't keep the file. It runs these steps:

  1. It checks the shape: the format must be aicodeops.evidence-pack/v1, with a payload and a signature that names the Ed25519 algorithm, a key ID and a value.
  2. It looks up the key ID among the platform's public keys. A key ID is the first 16 hex characters of the SHA-256 hash of the public key. An unknown ID gives "Signed with a key this platform did not issue."
  3. It rebuilds the canonical JSON of the payload, with object keys sorted at every level and no whitespace, and checks the Ed25519 signature against it. If they don't match, the pack was altered after it was issued, and the page says so.
  4. If the signature holds, the page shows the change ID, when the pack was generated and the key.

Because the signature covers canonical JSON, reformatting the file or reordering its keys doesn't break it. Changing any value does. Files over 8 MB are refused, and checks are limited to 30 per client every 10 minutes.

What a verified pack tells you

A verified pack was signed by this platform and hasn't changed since. It doesn't contain your code, so to tie it to a pull request, compare the pack's diff hash and changed files with the pull request. It records what the platform knew when the pack was generated: the audit trail is capped at 1,000 entries, and the pack marks it as truncated when it reaches that.

Keys and rotation

The platform creates its signing key on first use and stores the private key encrypted. Keys are never deleted. When a key is retired it stops signing new packs, and the packs it signed still verify. Keep a copy of the public keys with your audit records if you want verification that doesn't depend on reaching the platform.

Check it yourself

You don't have to trust this page. The platform's public keys are at /api/evidence?action=keys; the signature is Ed25519 over the pack's payload in canonical JSON (object keys sorted at every level, no whitespace). The evidence pack guide in the docs has a short Node.js script that checks a pack offline, and Signed evidence packs: proving how AI-written code shipped explains why packs are built this way.

Frequently asked questions

Do I need an account to verify a pack?

No. This page and the public keys are open to anyone, so an auditor or customer can check a pack you send them.

Is the pack stored when I check it?

No. The verify endpoint reads the file, checks the signature and returns the verdict without saving the pack.

Does the pack contain our source code?

No. It lists the changed files and a SHA-256 hash of the diff, so you can match it against the pull request without the code leaving your repository.

Do old packs still verify after a key is retired?

Yes. Keys are never deleted. A retired key stops signing new packs, and the packs it signed still verify.

Can I verify a pack without this website?

Yes. Save the public keys once, then run the short Node.js script in the evidence pack guide. It needs Node.js 20 or later and no network access.