Retries are comforting until the process dies at the worst possible moment: after an external action has happened, but before the caller records the acknowledgement. A restarted agent sees a durable running state and has to choose between retrying, which might duplicate the action, and stopping, which might leave work unfinished.

resumeproof is a small, offline lab for making that decision visible. It uses a workflow journal and a simulated tool ledger in two separate SQLite files. The tool ledger stands in for a merchant or messaging provider, but there is no network client, real purchase, or social message. The demo deliberately kills a child process with exit code 86 after the tool ledger commits and before the journal acknowledges the result.

Run the crash

Python 3.11 or newer is required. From the repository root:

python -m venv .venv