GVNR

Receipts

Every decision leaves a receipt: allows as well as refusals. Not a log line, a record with the fields an audit asks for, in a chain that shows if anyone edits it.

What one looks like

This is a real receipt, written when an agent tried to read a .env file:

{
  "ts": "2026-09-25T17:35:38.094Z",
  "agent": "claude:7c1e9a",
  "verdict": "ask",
  "reason": "would read or write credentials",
  "source": "capability",
  "rule": "read or write credentials",
  "tool": "Read",
  "model": "",
  "tokens": 0,
  "operator": "sam@acme.dev",
  "client": "?acme-api",
  "meter": "transcript",
  "policy": "unreachable",
  "hash": "6b3f1a0106d445b6608266d51c2d99d11030202477354f11992b8422ea585819"
}

What a receipt never holds: the command text, file contents or prompts.

Where it lives

On your machine, one line per decision in ~/.enforcer-governor/receipts.jsonl. /enforcer-governor:verify walks the whole file and names the first line that does not add up.

Signed in to an Enforcer workspace, receipts are also shipped in the background after each session, so the team has one record. The workspace can recompute each install's chain on its own, and the console shows spend and decisions by person, project, model and rule. The local file stays either way. shipOn switches shipping off.

Why it is hash-chained

Edit or delete a single entry and the chain visibly breaks. That is the difference between a log, which anyone with write access can quietly revise, and a record you can put in front of someone with a reason to doubt you.

If GVNR cannot read its own state, a refusal is still recorded, deliberately without a hash: there is no chain tail to hash against, and verify counts that line as unverifiable rather than as a break. Recording nothing would hide a real refusal; forging a link would cry tampering on an honest file.

An Instruxi solution. Verified against Enforcer Governor v2.8.0 on 25 September 2026. Runs in Claude Code today; other harnesses are coming. Nothing leaves your machine until you sign in to an Enforcer workspace. Next: Configure, Teams (soon), Install. Enforcer, the identity and authorization service, is at enforcer.instruxi.dev.