Share a result without sharing the record
August 26, 2026 ยท View on GitHub
openadapt-flow report-run <run-dir> --receipt share/ --production
Writes share/receipt.png, receipt.json, and receipt.md locally and
contacts nothing. Only a VERIFIED run may use the success rail, so an
unverified run still emits nothing.
The receipt is additive, never redacted
The receipt is generated from a closed allow-list, never redacted from the run report. Subtractive redaction of a run report is unwinnable: burned-in pixels, OCR text captured precisely because it identifies a record, and free-form halt reasons all leak, and one missed field is a breach. So the receipt declares its complete field set and refuses any key outside it:
- outcome, profile, and transaction class (closed enums)
- exact authorization / identity / postcondition / effect coverage
- step, heal, and model-call counts
- the zero over-halt counter
- duration
- the resolution-rung histogram
- evidence classes
- substrate
- a validated package version
- the bundle and receipt digests
- explicit provenance
- an hour-truncated timestamp
There is no screenshot, OCR text, typed value, parameter, URL, hostname, coordinate, workflow name, operator label, or free text.
Read every byte before you post it
receipt.json is every byte that would leave the machine, so you can read it
before you post it. A receipt emitted directly by the bundled tutorial is marked
synthetic-tutorial and contains no real data by construction. A separate
report-run --receipt invocation refuses to guess provenance: pass
--production for a saved run. The tutorial command emits its bundled
reference receipt directly; a deserialized report cannot prove that provenance.
Route a production receipt through sanitize / review-sanitized /
approve-sanitized before it crosses a trust boundary. See
SANITIZED_ARTIFACTS.md.