Somesh Zanwar.

Notebook / 2026-10

The hash that changed on every read

A stale-approval check that fired on every approval, and what it taught me about what counts as evidence.

Note

In MetricTrust, an agent proposes an action, a human approves it, and a permit is issued. Between the approval and the permit I re-check that the evidence has not moved, by comparing a hash of the evidence bundle.

The check failed on every single approval. Not on stale ones. All of them.

The bundle included how many minutes old the source data was. That number is a function of the clock, so the hash was different a few seconds later by definition. My safeguard against stale evidence was mostly detecting that time had passed.

The fix was to split two things I had treated as one. What identifies the evidence: the dbt run, the dataset snapshot, the test results. Those only change when the data changes, so they go in the hash. What gates the evidence: freshness against a policy threshold. That is checked fresh on every evaluation and never hashed.

I did not see that distinction until a failing test made me look. That is the part I would point to if someone asked what I learned from the project: not the permits or the signing, but that evidence has an identity and a condition, and they change at different speeds.