The One-Way Seat
One intent crosses an irreversible boundary once. The response is lost, the process is killed, and a re-worded retry comes back for a second try. Twelve beats, every value from the recorded artifact — nothing dramatized, nothing invented.
Reproduce it from the repository: uv run irrevon demo — see install or the getting-started guide.
Evidence: Verified evidenceTechnical provenance
Keyboard: ← → step · Home/End jump. Stepping back never replays the crossing — history is re-inspected, not re-performed.
01 / 12Stable identifiers.
Order id, invoice id, authorization id — business facts, never model output.
- stable_ids
- order_id · customer_ref
- effect_type
- order.create
- scope
- acme-store/prod
02 / 12One identity.
The facts hash to one effect id. Different wording later cannot make a different identity.
- effect_id
- 0bb7e8d64711…
03 / 12Persisted before anything is sent.
The intent is inscribed in the append-only ledger.
- lifecycle
- PERSISTED
04 / 12The gate checks, with evidence.
Authority, capability, dedup — each check recorded.
- decision
- ALLOW · decision_id 1
- checks
- deny_list passed · authority passed · branch_lineage passed · dedup passed
05 / 12The crossing.
Allowed once, the dispatch passes the boundary — and the pawl seats. CLICK.
- effect_id
- 0bb7e8d64711…
06 / 12Seated.
The destination committed. One external effect exists — geometry now holds it.
- destination_effects
- 1
07 / 12The response never arrives.
Bytes went out; no recognized answer came back. Not failed — AMBIGUOUS, recorded.
- fault
- response_lost
- lifecycle
- AMBIGUOUS
08 / 12The process is killed.
A real SIGKILL, mid-doubt. The ledger is the only memory that survives.
- exit_status
- -9
09 / 12Recovery asks the destination.
A new process replays the ledger and probes — a read, through the port.
- scanned
- 1
- adjudicated
- 1
10 / 12Evidence returns. The effect does not.
The receipt crosses back through the port; the ball never moves.
- probe
- reconcile_open · PRESENT · n_found 1
- still seated
- 1
11 / 12Settled: confirmed unique.
The record closes under the double rule. Committed, exactly once.
- lifecycle
- SETTLED_COMMITTED
- classification
- CONFIRMED_UNIQUE
12 / 12A re-worded retry arrives — same identity. Refused, with citations.
Nothing crosses the boundary twice.
- parameter_variant
- sha256:074abd…98c2cd
- replayed
- true
- gate
- denied · deny_check dedup · decision_id 2
The same faults against a developmental B5 stand-in
The recorded developmental B5 leg: file-journal durable retry semantics, stable operation IDs, idempotency keys sent — the identical fault schedule. A real Temporal arm remains a Stage-B prerequisite. Four recorded events; a different ending. The twelve-beat stage above deliberately does not drive these — they are the control, not the story.
- 1
b5_response_lost
transport_outcome LOST
The same fault against a developmental file-journal B5 stand-in: the response is lost.
- 2
b5_restart
durable runtime restarts the workflow
The durable journal restarts the workflow — memory of the attempt, not of the effect.
- 3
b5_retried
retried wf-order-9410-activity-0
The retry carries the same operation id and idempotency key. The key is sent — and ignored.
- 4
b5_duplicate
destination_effects 2
The C2 destination now holds two effects. The duplicate is created, not caught.
Evidence: Verified evidenceTechnical provenance
The full eleven-event transcript is on the home page; how it works explains the mechanism behind each beat. The raw artifact lives in the repository: web/fixtures/canonical/demo-artifact.json.