In 1983 Eric Allman wrote a C program called syslog.c that opened its destination files in append mode. It took lines of text, stamped them with a time, and routed them somewhere based on which subsystem sent them and how bad it was. Lines accumulated. Nothing in it checked whether messages arrived in order, whether any went missing, or whether the sender was who it claimed.
None of that was an oversight. RFC 3164, which wrote down BSD syslog's behavior two decades after the fact, noted that most messages were human-readable because a capable administrator was expected to interpret them. The reader was an ops engineer. The question was what's happening on this box, or what happened just before it fell over. The protocol assumed almost nothing about what a message contained because the person reading it would bring the context. I have been that person. You bring a lot of context at 3 AM when the pager goes off.
Syslog was network-aware early, since nobody was going to walk to every machine to read local files. The real shift came later, when infrastructure got distributed enough that you couldn't know in advance which line would matter during the next outage. By the early 2000s anyone running thousands of servers had hit the same wall: search tools that barely searched, and no way to line up events across machines without visiting each one. What came next was a generation of tools built on one promise. Collect the data whatever shape it arrives in, index it, impose structure at query time. Search later.
As a debugging philosophy that is sound, and I've lived inside it for most of my career. The alternative is deciding in advance what to keep, which means betting you can predict what will break. That bet loses constantly.
But collect-everything-search-later stopped being a debugging philosophy and became the default shape of digital record-keeping generally. Agent audit trails are inheriting it now.
The current standards say what to write down. OpenTelemetry's GenAI semantic conventions and the EU AI Act's logging requirements both standardize vocabulary, which is useful and overdue. Neither specifies anything about the record's structure that would make a missing or inconsistent entry surface by itself.
That gap has a concrete shape. I wrote earlier about byte-identical requests carrying entirely different mandates: authenticated agent traffic that preserves who the agent is while dropping what it was authorized to do. An append-and-search log will happily reconstruct a sequence of events, provided the relevant lines got captured. It cannot reconstruct whether an action was authorized if authorization was never a field anyone was required to fill.
One individual Internet-Draft, updated this week, takes a run at that structurally. For high-risk actions that change state, it proposes two linked records rather than one: an authorization decision written before execution and an outcome written after, sharing enough detail that a missing half is detectable. It adds hash-linked chains and two independent storage planes whose contents can be compared, with any disagreement between them raised as an integrity event. It carries no IETF endorsement and no standing whatsoever. It's one person's proposal. But the impulse behind it is recognizable, and it's the same one the bookkeepers had: let the format show you the hole instead of waiting for a reader to notice something absent.
Agent record-keeping sits between proposals like that and anything actually adopted, still running on a model built forty-odd years ago for a human who shows up after the crash.

