Your agent's memory is not your audit trail
There is a genuinely good agent memory pattern making the rounds under the name LVP: an append-only event Ledger, a Policy layer, derived Views, with bitemporal timestamps underneath. Then comes the inference — "we already have a ledger and a policy layer, so governance is covered." Same words. Opposite sides of a trust boundary.
The pattern circulates as LVP — Ledger, Policy, Views. Every input and tool call lands on an append-only event Ledger, never overwritten. A Policy layer defines the rules for writing, reading and forgetting. Views are derived from the ledger on demand — compact state cards assembled for whatever the model is doing right now. Add layered retention on top — session metadata that dies fast, a sliding window, a structured profile, a rolling summary: the decomposition reverse-engineered from ChatGPT's own memory system — and bitemporal timestamps underneath (when a fact was recorded versus when it was true), and you have a serious answer to a real problem: models cannot digest their own raw history.
I want to be clear before I say anything else: this is good engineering. If I were building an agent's memory, it is roughly what I would build. It is good partly because almost none of it is new. I could not find a publication that defines LVP, but every part of it has a canonical source: the Ledger is event sourcing, the Views are CQRS read models, and the dual timestamps are bitemporal modeling — decades of production database craft, lately arriving in agent memory by way of systems like Zep's temporal knowledge graph. Patterns with that much history showing up in agent design is a sign the field is growing up.
Then comes the sentence I keep hearing in evaluations, and it is the reason this piece exists:
"The architecture already has an immutable ledger, a policy engine and full audit history — so we don't need a separate governance layer."
Every load-bearing word in that sentence — ledger, immutable, policy, audit — means something different on the other side of one line — the dashed line in the diagram above.
One question separates the two categories
Hand your ledger to someone who distrusts you. What can they verify?
An agent's memory serves the agent. Its consumer sits inside the trust boundary — the views exist so the model's next step is cheaper and better grounded. Evidence serves a stranger: an auditor, a counterparty, a regulator. Its consumer sits outside the boundary, holds none of your credentials, and may be looking at the record years after your infrastructure is gone. Once you place the consumer, the properties each system needs stop looking similar at all.
Who writes it — and would you know?
The memory ledger is written by the agent runtime itself. The same process whose behaviour is in question is the author of the record of its behaviour. "Append-only" holds exactly as far as your own database credentials say it does — which is to say, it is a promise, and the party making the promise is the party being audited. Standards work has a name for this shape. The TRACE specification — the attestation standard for AI agent workloads, where I contribute — encodes it as a schema field: a record must declare whether the evidence came from the runtime that measured it or from "a record transcribed from another vendor's control plane, where the party asserting the evidence also wrote the log." Records in the second category are forced down to the lowest trust tier, and both the schema and the reference verifier reject any attempt to claim otherwise. The standards world has already priced self-attestation. It is not a high price.
An evidence layer breaks the promise-shape mechanically: a hash chain over every record, immutability enforced at the database layer rather than in application code, and export as a signed pack whose Ed25519 signature is checked by a standalone verifier — no account, no backend, no trust in the vendor, runnable on an air-gapped machine. Tampering does not become impossible; it becomes detectable by the stranger, which is the property that actually matters.
Can it forget?
Look at the policy layer's own job description: the rules for writing, reading and forgetting. For memory this is not a weakness — it is the point. Ephemeral session state should die fast; a sliding window should slide; context hygiene is why the architecture exists. But a record system whose policy layer holds first-class forgetting rules is, by definition, a memory manager. Evidence needs the opposite invariant. The one thing an audit record must never do is quietly stop existing — and "our policy decides what gets forgotten" is precisely the sentence an auditor cannot accept from the party under audit.
Could it have stopped the action — or did it watch?
Nothing in the memory pattern sits in front of an action. The policy gates memory I/O — what gets written, what gets recalled — not tool execution. It is an observer, and a log written by an observer can be incomplete without anyone knowing: whatever the observer missed simply is not there, and its absence looks identical to nothing having happened. A record produced by the enforcement gate itself — the gate that allowed, denied, redacted or paused the action — exists because the action existed. That is the difference between describing controls and being the control, and no amount of ledger craft on the observer side closes it.
What does it say when it crashes?
Every high-throughput writer has a crash window — a tail of events that were in flight when the process died. A memory system loses that tail silently, and honestly, nobody should care: the agent re-derives what it needs. An evidence system does not get that luxury, and the honest response is not to pretend the window doesn't exist. Ours drops a runtime marker at startup and removes it on graceful shutdown; a marker still present at the next boot means the previous process died hard, and the system appends a signed audit.gap.disclosed record describing the possible-missing window. The gap becomes a row an auditor can see, not a silent hole. A chain that can only be "perfect or broken" quietly pressures its operator to backfill; a chain that can say exactly what it lost stays honest under real failure.
Five questions that tell them apart
You do not need Proofpane to run this test. Ask any architecture — including ours — these five questions:
I have not yet seen a memory architecture that answers yes to all five — because the moment one does, it has stopped being a memory architecture and become a governance layer. That is not a criticism. It is the reason the two layers are different layers, and it is the step missing between "this agent is well designed" and "so we need nothing else."
The part I actually worry about
The teams adopting this memory pattern are the good teams — the ones who read architecture write-ups and care about state management. That is what makes the inference dangerous: it arrives with the credibility of everything around it. A sloppy agent with no ledger at all never tempts anyone into skipping governance. A well-built one does, precisely because the words on its diagram are the words on a compliance checklist.
So the claim I am making is narrow, and I want to state it at its narrowest: nothing about a well-designed memory substrate — ledger, policy, views, bitemporal timestamps, all of it — produces a record that a party outside your trust domain has any reason to believe. Build the memory architecture. It will make your agent better. Then notice that every component of it faces inward, and that the auditor is standing outside.
The five questions are free. What they buy you is the difference between a system that remembers and a system that can be believed.