Recording and Replay
A run’s recorded history MUST be sufficient to reproduce the run exactly, without re-contacting any dependency and without reading a clock.
Implementations MUST record all of the following.
- The resolution that the run executed against.
- Every action invocation: its evaluated arguments, its outcome, the result on success, and the classified code on failure or on an ambiguous outcome.
- Every retry attempt, its outcome, and the delay that was applied.
- Every
runexecution and everyagentnode, including each action the node invoked and each result. - The branch taken at each
routeand eachchoose. Implementations MUST replay the recorded branch, and MUST NOT re-evaluate the subject. - The decision at every guard: the outcome of each
when, eachchoosearm, and eachuntil. - Every evaluation fault.
- Every
for_eachiteration and everyrepeatiteration, identified by position. - Every entry to a state, identified by position.
- Every timer that was created and the instant at which it fired.
- Every
wait_foroutcome: the event that was delivered, or the timeout, and the instant. - Every
stop_afterevaluation and the decision that followed. - The outcome of every step, and the terminal outcome of the run.
Resolution and pinning
Section titled “Resolution and pinning”Implementations MUST resolve all of the following at or before the start of a run:
- connector versions and filter package versions;
- trigger bindings;
- schema overlays, recorded by content hash;
- local template content, recorded by content hash;
- the callee of every
call; - the time zone database version;
- the format version.
Implementations MUST record the resolution for every run, whether or not the source declared it explicitly.
An implementation MAY resolve a Workfile once and then execute many runs against that one resolution. The deployment is then the unit of resolution, and a change to a catalog or to an overlay reaches a run only through an explicit re-resolution. This does not relax the recording obligation. Each run MUST record the resolution that it executed against.
A run executes against the definition resolved for it. A change to a Workfile’s source MUST NOT alter the behavior of a run that is already in progress.