Agent Trust & Assurance · Evidence

The Anatomy of an
Answer's Evidence
what produced it, checkable by anyone

The other stories make each thing an agent uses trustworthy. This one starts from an answer and asks what made it: which agent, which model, which ontology, which skills, and whether each one was signed and unchanged at the moment it answered. Then it lets anyone check the answer, without Uderia.

Trust & Assurance · visual story · companion architecture: Evidence · the tool: Evidence Verifier

The answer on this page is real

On 9 October 2026 at 10:26 UTC, the policing demo's estate analyst @PXPROD on the hosted instance was asked "How many robberies are there in the data?" It answered: "There are 179,193 robberies recorded in the data, according to the Policing_Core.v_Offence table (where offence_code is '120')."

Everything below is read from that answer's record. Its evidence was exported from the hosted instance, and the panel in Act V verifies the file in your browser.

Act I

Answered and inventoried — the bill of materials

When a turn starts, the platform records every signed part the agent will use: the agent itself, the deployment it runs on (model, tool catalog, connectors), and what it is made of (its ontology, any extension of it, its skills, its knowledge and planner repositories). For each part it keeps the content hash at that moment and the signature that matched it. This list is the answer's bill of materials.

the question how many robberies? the answer · @PXPROD 179,193 robberies Policing_Core.v_Offence · code 120 recorded at the start of the turn, sealed when it ends bill of materials · 8 parts · all signed when answered AGENT agent PXPROD DEPLOYMENT Google · gemini-3.1-flash-lite · 48 tools · 0 connectors WHAT THE AGENT IS MADE OF ontology Policing Core Model (NIBRS + CASE) extension the Lead extension (Act II of signed actions) skill teradata-sql-expert skill knowledge-graph-expert skill compute-expert skill dashboard-expert signedsignedsignedsigned signedsignedsignedsigned each part: its hash then · the signature it matched · signer, time, key

The answer's own Evidence row reads 8 parts · all signed when answered. Had a part been unsigned or edited after signing, the row would name it — the exception is the only thing that is marked.

A part is anything signable it used

Not a log line — an inventory

The list comes from the same composition the trust badge resolves, so it holds exactly what the agent's signature covers. The data products an answer read and the writes it performed appear beside it too, each from its own sealed receipt.

The model is a part

The deployment, named

Which provider, which model, how many tools and which connectors the agent could reach are the deployment part. A model swapped since the deployment was attested reads as changed, so an answer always says what it actually ran on.

Act II

Sealed — into the answer's signed chain

Every Uderia answer already leaves a hash-chained, Ed25519-signed record of its steps. The bill of materials becomes its last step. The question and the answer are hashed into the first and fifth. Change any of them afterwards, in the database or in an exported file, and the chain stops verifying.

0 · query_intakethe question · 0563d05313…chain 568d49ea15… · signed 1 · profile_resolve@PXPROD · 37556bce71…chain 67502794c5… · signed 2 · agent_tool_callbase_readQuery · 9160a52dbe…chain 3402c55557… · signed 3 · agent_tool_result10.7 s · 1868484753…chain 6767fd3ad3… · signed 4 · turn_completethe answer · 556b35d5cd…chain aabaca0ba7… · signed 5 · trust.bom8 parts · 4cbbc97204…chain tip 64a49c4303… · signed each chain hash = sha256(index : type : content hash : previous chain hash) · each signed with the deployment key a6c5cf5c…

The hashes are this answer's own, abbreviated. A step's content hash covers what the step recorded; the chain hash links it to the step before; the Ed25519 signature binds both to the deployment's key.

Sealed means checkable

The question and the answer are in the seal

The chain hashes the first 4,096 characters of the question and of the answer. A verifier re-hashes the text it is given and compares; an answer edited in an exported file reads "the answer text does not match what was sealed".

The inventory is in the seal

The bill of materials is the tip

The last step's content hash is the digest of the bill of materials. Claiming afterwards that the answer ran on a different model, or without a part it used, breaks the tip — and with it every check that depends on the chain.

Act III

Kept — history, not overwrite

A signature is not a status that gets replaced. Re-signing an agent or an ontology adds a record; the earlier signature stays. So an answer's evidence always names the exact version it was made with — the teradata-sql-expert skill as signed on 7 October, the ontology as signed on 21 September — even after both have moved on.

Re-signed

A new record is appended. Answers given before it keep pointing at the version they used; answers after it point at the new one.

Key replaced

Every key that has signed here is kept. A signature made with a retired key still verifies, and the estate lists it as made with a retired key.

Session deleted

The answer's text goes; a content-free record of which parts, which hashes and which signatures stays, and reads session deleted — content not retained.

Every artefact knows its answers

The trust badge of each skill, ontology or agent now says Used by N answers · M with this version. When a flaw is found in an artefact, the operator sees at once which answers it touched, and how many of them used the version that has the flaw.

Act IV

Compared — when answered · now

Each part carries two readings in a fixed order: its state when the answer was given, and its state now. A part signed then and edited since reads changed since; the answer itself is untouched, and the evidence still names the version it used. The same question, asked a few minutes apart on the same day, shows why both readings matter.

the demo account's @PXPROD 8 parts · all signed when answered agent PXPRODsigned · signed deploymentsigned · signed ontology · extensionsigned · signed four skillssigned · signed the row marks nothing: there is no exception to name the publisher's own @PXPROD 4 parts · 1 not signed-and-intact agent PXPRODchanged · changed deploymentsigned · signed ontologysigned · signed teradata-sql-expertsigned · signed the agent's configuration was edited after it was signed — named on the row

Both answers were correct: 179,193. Evidence does not grade the answer — it says what the answer was made with. On the publisher's working copy that included an agent whose configuration had moved since its signature, and every answer it gives says so until someone re-signs it.

The estate at a glance

The Evidence tab

Trust → Evidence lists every signature the operator may see, worst first: changed since signed, made with a retired key, recorded without a signature. On the hosted instance's publisher account, on the day this was written: 67 signatures · 17 changed since signed. Filters narrow the list; they never change the summary.

The act that is owed

Changed parts route to their trust record

A part that changed since, or was never signed, offers Open trust record, where it can be re-signed. An intact part offers nothing — there is nothing to do.

Act V

Exported and verified — without Uderia

Export evidence puts one answer in one file: the question, the answer, its trust checks, its sealed chain, every signature it was made with, the public key, and a signed checkpoint of the evidence ledger. The file is checked by a small script or by a web page, with no Uderia server involved — an auditor does not have to trust Uderia's interface to check Uderia's records.

Try it — this is the answer above, exported from the hosted instance

The deployment's public-key fingerprint, which an auditor gets from the operator, not from the file:
a6c5cf5c09865269e3d3b660837435aff471e602b840fb31a08777a7a0549a57

Choose one. The check runs here, in your browser (WebCrypto Ed25519 and SHA-256); nothing is sent anywhere.

The same file: download it and drop it on the Evidence Verifier, or run python scripts/verify_evidence.py evidence-answer-sample.json --fingerprint a6c5cf5c09865269e3d3b660837435aff471e602b840fb31a08777a7a0549a57 (needs only pip install cryptography).

Two verifiers, one rule set

Python and the browser agree

The script and the page check the same things — each signature with the carried key, the key's fingerprint, each answer's chain, its bill of materials, its question and answer text, the ledger proof — and a gate runs both on the same files, tampered or not, and requires the same verdict.

The bytes travel too

Content you can re-hash

A full export carries the exact bytes each signature binds, up to a size limit, so the content itself can be re-hashed offline. The full export of this answer re-hashes all 8 signed parts. The sample on this page omits the content: some of it is internal skill text.

Act VI

Anchored — history nobody can quietly rewrite

Signatures protect each record. The evidence ledger protects the history around them: every signing event and every answer's record is entered in one hash chain, in the same transaction that writes it. Editing, inserting or removing a record afterwards breaks the chain, and the Evidence tab says so.

entry 1 ⋯ signingevent this answerrecord signed checkpointentry 158 · tip 13ea04db… each entry hashes the one before it every export carries the signed checkpoint opt-in · published off the host a write-once file (WORM) a webhook · an append-only log an RFC 3161 time-stamp authority opt-in · the signing key off the host an HSM, a cloud KMS or Vault: the server asks, never reads

On the hosted instance the ledger reads ledger intact: 158 entries at the checkpoint this answer carries, no breaks, no edits. Its signatures entered the history the first time the release started, with their original signing dates.

Who holds the key

Custody, said in words

By default the key is a file on the server, and every export and the ledger chip say so. Switched to an external signer, the server can ask for a signature but never read the key; every signature it returns is checked before use, and older answers keep verifying against the key that signed them.

Tried against the real thing

Three real services

The external signer was run with a key held in SoftHSM over PKCS#11; checkpoints were published to a real webhook and to freetsa.org. The time-stamp receipt passes openssl ts -verify and fails when one byte of the checkpoint is changed.

Proof

The answer, in numbers

From the answer on this page, the hosted instance it came from, and the gates every increment had to pass.

8
signed parts in this answer's bill of materials — all signed and intact when it answered
6
sealed steps in its chain — the question, the answer and the inventory among them
10/10
checks pass on the exported file, offline, signer confirmed against the fingerprint
69/69
checks pass on the hosted instance's full audit export, verified off the host
158
ledger entries at this answer's signed checkpoint — 0 breaks, 0 edits
3
kinds of tampering in the panel above — each one refused by name
476
assertions across 8 gate suites, each rule mutation-tested to fail by name
3
real external services the opt-in custody and anchoring were run against
Honest limits

A signature proves what was recorded and that it has not changed — not that the answer is right. Whether it is right is the job of grounding, guardrails and the judges. With the default setting — the one the hosted instance runs — the signing key lives on the server, so its administrator could rewrite and re-sign history; what they cannot do is make it contain a checkpoint someone exported earlier. External custody and anchoring close the rest. An answer given before evidence recording existed can never show its parts, and says so. Signed content travels up to 256 KB per part; a larger part travels as its hash.

Why this matters

Trust in an agent is a claim about the past: what it was made of when it answered. Evidence turns that claim into a record — inventoried at the start of the turn, sealed at the end, kept as history, and checkable by anyone with a file and a fingerprint. The other stories make each part trustworthy. This one shows, for any single answer, that it was.