Write It Down

A decision recorded in a real AI-assisted workflow — written down as it happened, and recovered afterward by a read-only query.

No log file is emitted; the record is the database itself. This is a small, true story about traceability — why a jar of sesame seeds never made it into a grocery order, how the reason was already on record, and exactly what you can and can't conclude from a record like that. The honest version, failure included.

Governed AI · Traceability Read-only recovery Run it yourself Honest failure included

What this piece claims, up front: that a decision record was written contemporaneously and is recoverable after the fact by a read-only query, decoupled from the run that produced it. That is all. It does not claim to prove the model's true internal reason, that the record is tamper-evident, or that such records are comparable across re-runs. Those boundaries are the point, and they're named plainly below.

A promise, turned into a check

This studio makes a promise on its front page: traceable results — you can follow the chain from source to conclusion. This piece takes one corner of that promise — the traceability of a decision — and turns it from a claim into something you can check yourself.

The usual question people ask about AI is “is the model right?” It's the wrong question to build accountability on, because you often can't answer it in the moment. A more answerable question — and, when something slips, a more useful one — is: if it wasn't right, can you recover what it decided, and the reason it recorded at the time?

Here, the answer is yes, and the demonstration is deliberately humble: an ordinary grocery workflow, an ordinary miss, and a record that was already sitting in a database waiting to be queried. The interesting part isn't the mistake. It's that the reason was recoverable — and that being honest about a record like this means being just as clear about what it doesn't establish.

What happened

The workflow is the tail end of a chain of free, USDA-grounded nutrition tools: a gram-based home cookbook, and a weekly grocery-list engine that turns a meal plan into a single, store-sectioned shopping list. The last step is the one that matters here — an AI agent assembles that list into a cart in a real, logged-in grocery account, and a human reviews and completes every purchase. A person, not the agent, does the buying.

One week, a recipe called for sesame seeds. They never made it into the cart. Not a dramatic failure — a small, ordinary one. Which is exactly why it's a safe place to look closely: the method is what generalizes, and you want to learn it on a case where nothing is at stake.

The reason was already on record

Here's the part that matters. At the time it built the list, the agent had recorded an assumption it was working from: that small pantry staples like sesame were already on hand. That note wasn't reconstructed after the fact or inferred later — it was written as the work happened and stored as a single row in the orchestrator's database. Weeks afterward, I pulled it back out with an ordinary read-only query.

A read-only recovery in a terminal. It shows the query SELECT id, type, fired_at, payload_json FROM events WHERE id LIKE '336ef27e%', and the recovered row: id 336ef27e (remainder redacted), type observation.captured, fired_at 2026-07-18 (time redacted), and the payload note beginning 'Assuming operator has remaining small pantry items (sesame...'. The connection path, exact time, and the rest of the note are opaque-filled. A caption in the capture reads: a contemporaneously-written reasoning note, recovered later by an ordinary read-only query; no log file was emitted at session close; the record IS this queryable row.
The real recovery, redacted to the kernel: a note the agent wrote at decision time — “assuming… small pantry items (sesame…)” — pulled back out by a read-only query (?mode=ro). The connection path, the exact timestamp, the full payload, and the row's identifier tail are opaque-filled; the assumption itself is what's on the record.
image sha256: 0f80bc1770f03d365f310202064807124638d53b4fba4b25e8ee277a73d19390

Read this record honestly — three things it is, and isn't.

  • It's the recorded assumption, not the proven cause. The record states that the agent assumed pantry staples were on hand. I'm not claiming to know why the model inferred that, or that the assumption is the true cause of the omission — only that it was there, in writing, at the moment the decision was made.
  • The failure was a human one: approval by habit. The assumption wasn't hidden. It was surfaced at the human-review step — and a human (me) clicked approve all. That's the failure mode worth naming: not a machine inventing something, but an unverified assumption waved through at the exact moment review was supposed to happen. Traceability didn't catch a hallucination; it located a rubber-stamp.
  • The stakes are tiny on purpose. The value here isn't the sesame seeds. It's that the record let me find the exact spot the miss entered — which is the concrete thing a record like this buys you: surface the inferred-but-unverified assumptions at the approval window, so the next “approve all” is a decision, not a reflex.

On that hash. The screenshot above is content-hashed, and it's worth being exact about what that does and doesn't buy you. The hash shows the image file hasn't been altered since it was captured. It does not prove the underlying record is genuine, or that its timestamp is true. So don't take the screenshot on faith — the next-but-one section lets you reproduce the whole mechanism yourself, which is the honest way to earn that trust.

The record is a database, not a log file

A natural assumption — one I've caught myself repeating — is that a system like this “writes a log file when the session ends.” It doesn't. No log file is written at close. The record is the database the whole time: sessions, phases, and events. A reasoning note is just one row in the events table — a type, a timestamp, and a JSON payload. The readable “session log” is reconstructed from those tables on demand. It's a view, not a file.

sessions  —<  phases  —<  events   (a reasoning note is one events row)

sessions

  • idPK · uuid
  • numberint
  • started_atdatetime
  • closed_atdatetime?
  • labelstr?
  • content_modefull · meta

phases

  • idPK · uuid
  • session_idFK
  • namestr
  • intenttext
  • started_atdatetime

events holds the trace

  • idPK · uuid
  • typestr
  • session_idFK
  • phase_idFK
  • fired_atdatetime
  • payload_jsonjson

One detail on this table is load-bearing for the honesty of the whole piece: the events table has no hash column. These rows are a genuine contemporaneous record, but they are not, by themselves, tamper-evident. (Integrity of that kind lives in a separate layer, whose mechanism isn't published here.) I'd rather you see the gap than have me paper over it.

A small confession, kept on purpose. I know it doesn't emit a log file because I checked the code — not my memory of it. An earlier description of mine had drifted from what the system actually does. That's the same discipline this piece is about: trust the artifact, not the storyteller. Which is why the next section hands you the artifact.

Where the miss entered

Laid out end to end, the pipeline makes the honest point visible: the failure isn't at the model. It's at the human-approval node, where a recorded assumption was approved without a check.

The grocery pipeline and where the miss entered. Four stages left to right: recipe and meal plan, weekly grocery list, cart assembled by an AI agent in a real logged-in account, and human reviews and buys. During list-building a decision record is written as one events row, recording the assumption that pantry staples including sesame were on hand and could be left off. That recorded assumption reaches the human-review stage and is approved without a check — the miss. The record is recovered later by a read-only query, decoupled from the run. THE PIPELINE From recipe to cart — and where the miss got approved Recipe & meal plan USDA-grounded cookbook Weekly grocery list one store-sectioned list Cart assembled AI agent · real logged-in account Human reviews & buys a person completes every purchase ◆ the miss — approved, unchecked DECISION RECORD · written at the time one events row — “assume pantry staples (incl. sesame) already on hand → leave off the list” RECOVERED LATER · read-only SELECT type, fired_at, payload_json FROM events … decoupled from the run that wrote it
The failure is at the human-approval node — an unverified assumption waved through — not a model hallucination. The record, written during list-building, made the exact spot recoverable weeks later by a read-only query.

Recover it yourself

A case study about verifiability shouldn't ask you to trust its screenshots. So here's the actual mechanism, on a small, fully synthetic, zero-PHI database with the same shape as the real one. Download it, run one command, and recover a contemporaneous decision record yourself — a reader-runnable demonstration of the one thing this piece claims: that the record exists and is recoverable, read-only.

# recover.py — recover a contemporaneous decision record, READ-ONLY
import sqlite3, json

# mode=ro : strictly read-only — the query cannot create or modify the database
con = sqlite3.connect("file:record.db?mode=ro", uri=True)
row = con.execute(
    "SELECT id, type, fired_at, payload_json "
    "FROM events WHERE type = 'observation.captured'"
).fetchone()
con.close()
# prints the recovered id, type, timestamp, and the reasoning note in the payload
Download the sample ↓
recover-it-yourself.zip — 4 files (record.db, recover.py, build_sample_db.py, README.md), ~4 KB. Unzip, then run python recover.py from inside the recover-it-yourself folder.
sha256: 16d31165880867a8d2840f1da485d9f53fb36022000e49a0e7e42a2ca3f4814a

What running it shows — and what it doesn't.

  • Shows: the record was written at decision time, stored as one row, and is recoverable by an ordinary read-only query (the connection is opened ?mode=ro — try a DELETE and SQLite refuses: attempt to write a readonly database). No separate log file; the record is the row.
  • Doesn't show, and isn't claimed: that the recorded reason is the model's true internal cause; tamper-evidence of the row; or stability of such records across non-deterministic re-runs. Those are out of scope, on purpose.

What this is — and isn't

This case study sits downstream of a field note published earlier on this site, “A faithful log of an unfaithful trace.” That note maps an agent's records against ALCOA+, the data-integrity framework used in regulated industries, and lands on an uncomfortable cell: a reasoning record can be perfectly contemporaneous — logged, time-stamped, captured as emitted — and still not be the true account of why the agent decided what it did. In the note's own table, a contemporaneous reasoning capture proves “the narrative existed at decision time” but is, in its exact words, “necessary, not sufficient.”

So here is precisely what this case study is, and nothing more: a worked illustration of the contemporaneous-and-recoverable leg of that record, caught in a real workflow. The note described a fuller record — contemporaneous, tamper-evident, and cross-run-comparable — that “isn't built yet.” This illustrates one part of it and leaves the other two — tamper-evidence and cross-run comparability — explicitly unbuilt. It does not close that problem.

Named plainly as out of scope — the legs this does not demonstrate:

  • The true cause. That the recorded reason is the model's actual internal cause is explainability, and the field note shows why that boundary is leaky. This piece stays on the record, not the cause.
  • Tamper-evidence of this record. The events rows aren't hash-chained; a separate integrity layer handles that, and its mechanism isn't published. Don't read the recovered row as tamper-evident.
  • Cross-run comparability. Whether such records are stable enough to compare across non-deterministic re-runs is the field note's hardest open question — not demonstrated here.

This piece was checked against the shipped code (no log file is written at close; the events table carries no hash column) and passed a separate, in-studio adversarial review before publishing — a distinct pass, not a third-party audit. Its one job is to be honest about a small true thing.

Where this fits

One sentence of positioning, held humble: the architecture behind this is a deliberately unusual set of trade-offs — the only model in the loop is the user's own, and verification recomputes at the export step rather than being asserted after the fact — which is a different architecture, not a claim to beat the serious work others are doing on AI auditability. The reframe worth keeping is smaller and sturdier than any product pitch: stop asking only whether the model was right, and start asking whether its decisions are recoverable — because that is the question you can actually check, on a Tuesday, over a jar of sesame seeds.

Related work

If this way of thinking is useful, a few neighboring pieces go deeper — all public, all checkable:

Work you can check, not take on trust

This case study was built so a skeptic can interrogate it — the recovery runs on your machine, not ours. If that's the kind of AI work you need, let's talk.

Get in touch View more projects