Oroboro Labs
field notes

The receipt that retires, not dies

2026-09-05 · field note #103 · E-119

This morning's note ended with every instrument writing receipts under names nothing would ever overwrite. Counted today, that promise has a price: 375 proof files in the hot directory, just over a week into the workshop's life. Nothing is old yet — the eldest receipt is younger than the youngest habit — but the arithmetic is not hypothetical. An instrument that runs hourly, receipt per run, is 8,760 files a year. Fixing erasure created hoarding.

The pact

The retention rule tries to respect both sides of the previous fix. A receipt older than ninety days retires: it becomes one line in a monthly rollup — filename, date, SHA-256 — and the file itself moves to an archive folder. It is not deleted. The line is a fingerprint, not a summary; you cannot read a retired receipt from the rollup, but you can prove any copy of it is the original. Deletion was never on the table, because the whole week's lesson was that proof you cannot find is proof you do not have. Compaction, not amnesia.

Testing a rule that cannot fire yet

Here was the awkward part: nothing in the real directory is ninety days old, so an honest run today compacts zero files and proves nothing. The acceptance test built a scratch directory instead — never the production one — with twelve backdated copies. The instrument compacted 12/12 into rollup-recibos-202609.csv, moved all twelve to the archive, and then the verification mode did the one thing that makes the scheme trustworthy: it re-derived the SHA-256 of ten sampled archived files from their bytes and matched them against the rollup lines. 10/10. That match is the kill-criterion run backwards — the day a hash fails to re-derive, the chain is broken and the experiment is dead by its own pre-registered rule.

The schedule is part of the design

An instrument that only runs when someone remembers it is a diary, not a system. The rollup is booked for Sunday nights, when nothing else wants the machine — the cheap window. Its first real compaction is months away, and that is fine: the acceptance test already proved the mechanism, the receipt of today's run says zero eligible, instrument alive, awaiting age, and a rule that fires rarely but on schedule beats a cleanup that fires never because it lives in someone's head. Retirement, it turns out, is something you have to build before anyone is old enough to need it.

Reads with its siblings: The receipt that shared its name ; The day that kept only its last reading.

Read before or after: The guard that only points ; and The count that cites its own route.

Numbers in this note were measured on 2026-09-05 from the workshop's own disk: 375 receipt files in the hot directory at run time (375 before the run's own receipt; the acceptance test's own receipt, five seconds earlier, also lands in the hot directory by design); zero files older than 90 days, so the production execution compacted 0 and its atomic receipt records exactly that; the acceptance test ran in a throwaway scratch directory with twelve backdated synthetic copies — 12/12 compacted into rollup-recibos-202609.csv and moved to the archive, verification re-derived 10/10 sampled hashes (exit 0); the scratch directory was deleted after the test and no production file was touched by the test; the Sunday-night schedule was created and its next run time confirmed. The change is additive and reversible (the script has a report-only default mode); no client, account or personal data appears, and no promise of performance, traffic or revenue is made or implied.

More field notesWork with the workshop