The bundled tutorial, end to end
August 26, 2026 · View on GitHub
openadapt-flow tutorial (which openadapt quickstart delegates to) is the
complete free path against the bundled MockMed application, a synthetic
practice-management fixture served through its real transactional backend.
openadapt-flow tutorial # the whole loop, VERIFIED
openadapt-flow tutorial --break-it # then watch it catch a lie
openadapt-flow tutorial --guided # perform the demo yourself
What tutorial does
It records a demonstration while observing the system of record, mines the
effect contract from the record delta it observed, certifies the bundle against
the shipped clinical-write policy, admits the run through the fail-closed gate
under the Standard profile, and verifies the write by reading the system of
record out of band — a path the application itself never calls, so the screen
cannot influence it. It ends VERIFIED with zero model calls, and writes a
shareable receipt.png / receipt.json beside the run.
What --break-it does
--break-it reruns the same certified bundle against a backend that lies:
the server rejects the write after the application has painted its success
banner, so every on-screen check passes while nothing lands. The independent
read of the system of record refutes the mined record_written contract and the
engine HALTS at the consequential step instead of believing the screen. The
caught fault's evidence is a clearly-labeled local run-broken/REPORT.md; no
shareable receipt is emitted for it, because only VERIFIED runs may use the
success rail.
What --guided does
For a live walkthrough, perform the demonstration yourself and then watch the
compiled replay at a visible pace. The recording browser closes after OpenAdapt
observes the saved record through the separate read-only interface. OpenAdapt
then compiles, certifies, and replays what you demonstrated. If you prefer a
fully automatic presentation, use
openadapt-flow tutorial --headed --presentation-delay 1. The delay applies
only to this bundled tutorial. The ordinary tutorial, replay, and run
paths keep their normal execution speed.
The receipt the tutorial emits is generated from a closed allow-list — outcomes,
counts, digests, and validated package versions — so it can carry no screenshot,
OCR text, typed value, parameter, URL, hostname, coordinate, operator text, or
free-form halt reason. It carries the bundle digest, so anyone can run the same
public tutorial and compare. The complete field set is in
RECEIPTS.md.
Drive the same stages by hand
openadapt-flow demo-record --out rec # record a demonstration
openadapt-flow compile rec --out bundle --name my-task # compile it
openadapt-flow lint bundle # expected: finds demo gaps
openadapt-flow certify bundle --policy permissive # smoke-policy pass
openadapt-flow certify bundle --policy clinical-write # expected: strict refusal
openadapt-flow replay bundle # replay: local, \$0
openadapt-flow replay bundle --drift theme \
--save-healed-to healed # deterministic repair
openadapt-flow visualize bundle -o graph.html # see what compiled
The command is openadapt-flow. If you installed the
OpenAdapt launcher, the two-word form
openadapt flow <args> is equivalent and forwards every flag, including
--backend, to this engine.
Why the hand-driven bundle is refused
The hand-driven demo-record bundle above is intentionally runnable but not
certified for clinical writes. lint exits nonzero because its irreversible
final click is unarmed, and clinical-write refuses additional identity,
system-effect, and idempotency gaps. That is the safety boundary working, not a
setup failure. The permissive policy is only a smoke gate, and replay runs the
Demo profile, whose contract asks for no effect evidence — so a Demo
completion is COMPLETED_UNVERIFIED and is never billable and never a success.
tutorial differs precisely by supplying that missing evidence: a real
persistence boundary, a mined effect contract, and an independent verifier.
Nothing in the Demo profile was relaxed to get there.
Replay serves MockMed and writes report.json, an illustrated REPORT.md, and
reviewable repair patches under heals/. A healed bundle written by
--save-healed-to is a repair candidate, never an implicitly active bundle:
promoting it goes through the governed lifecycle (openadapt-flow repair:
reviewed diff, replay + fault campaigns, human approval, staged canary,
one-command rollback). See REPAIR_LIFECYCLE.md.
Packaging and browser provisioning
The base openadapt-flow package stays lightweight for native desktop, RDP,
and Citrix runners. The browser extra adds Playwright only for web workflows;
the first browser command then downloads its matching Chromium build once
(about 150 MB), with no separate playwright install chromium step. Prefer the
canonical pip install 'openadapt[browser]' launcher path for normal use. In
air-gapped or CI environments that pre-provision the browser, set
OPENADAPT_FLOW_NO_AUTO_INSTALL=1 to disable the auto-download.
The weekly clean-machine test runs this complete install-to-uninstall journey on Linux, macOS, and Windows. See the capability and qualification matrix for the accepted scope of each substrate.