Trust as Policy and Evidence Across Boundaries

Stepping back to the idea underneath the incidents.

Watch one request cross an API gateway and the whole trust problem is sitting right there.

Who’s asking. What proof of who they are came with it. What policy applies. What gets written down. What context survives the handoff to the next hop. A system that answers those out loud is doing trust work. A system that doesn’t is running on assumption, and assumption is where trust quietly rots.

Trust is not a vibe. It’s the policy you enforce and the evidence you keep at every point where control changes hands.

The pushback that lands hardest comes from teams with good observability. We’ve got traces, dashboards, a log pipeline. Isn’t that evidence? Not yet. A log line proves an action happened. It doesn’t prove the action was allowed. Telemetry turns into evidence the moment it ties back to the control that governed it, and not a moment before.

Policy without evidence is assertion. Evidence without policy is uninterpreted telemetry.

Try this: walk one request through your stack and list every place control changes hands. At each one, ask what policy applied and what evidence is left. Where both answers come back empty, that’s your real trust surface. Whatever the diagram says.

The Agent Audit Packet

Something practical, and it’s free.

Most teams will tell you their AI system is auditable. Ask for the folder.

Not the dashboard. Not the deck. The folder you’d hand an auditor who asked why the agent did that, for one specific decision, on a Tuesday.

I put one together. One ID that ties every record from a single decision together, and everything that hangs off it: the decision trace step by step, the evidence each step leaned on, the policy it was evaluated against with its version, the schemas for the trace and the evidence with their hashes, pointers into the logs, and the signing key and software bills of materials for the services involved. About 230 KB zipped.

It’s a worked example, not a product. The point is the diff. Pull it down, open each file, and ask one question: could we produce this today, for any decision, on demand? Every no is a line in your governance backlog.

The schemas are deliberately boring. Versioned, hash-summed, minimal. Steal them.

Ungated and free to reuse. The packet is linked below.

Finished and Delivered Are Different Facts

Here’s one that’s been on my mind since it happened.

The first run of an AI agent under our governance layer to finish its job lost it.

The executor did the work and committed it. Clean tree. The wrap-up step looked at that clean tree, read “nothing to commit” as a failure, and quit. Cleanup came through behind it and deleted the workspace. Then the ledger wrote done.

No pull request anywhere. And the ledger wasn’t lying.

Finished and delivered are two different facts. If your pipeline has one word for both, it will eventually record one as the other, and it’ll do it on the day the process reading that word has a delete in its hand.

I wasn’t worried about the work. It was scoped, and it came back by replaying the executor’s session log into a PR. What stuck with me was the handoff.

The fix was a second column. The ledger now records delivery beside outcome, and cleanup refuses to touch anything unpushed. The old wrap-up got one last word in: it reproduced the bug on the very patch that replaced it.

Monday: grep your pipeline for done, complete, success. Whichever word your steps write and your dashboards read. Ask which of the two facts it’s recording.

Starting the weekly posts

I’m going to be posting once a week: one incident at a time from putting AI agents to work on real systems, and what the record actually showed afterward.

Spent most of this year letting AI agents do real work on my own systems, then going back to see what they actually did.

Fifteen years in regulated platforms leaves you with one habit: don’t trust the status, read the log. So I read the logs.

One run burned about forty percent of its budget re-deriving a defect that was already written down. My first instinct was to give it a bigger budget. The fix was one line.

Another run finished its job and lost it. The ledger said done. There was no pull request. Both were true.

That’s the work now. Not whether agents can do the job. Whether you can prove what they did afterward.

The write-ups live in Research, one incident at a time, receipts included.