Skip to content

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 run execution and every agent node, including each action the node invoked and each result.
  • The branch taken at each route and each choose. Implementations MUST replay the recorded branch, and MUST NOT re-evaluate the subject.
  • The decision at every guard: the outcome of each when, each choose arm, and each until.
  • Every evaluation fault.
  • Every for_each iteration and every repeat iteration, 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_for outcome: the event that was delivered, or the timeout, and the instant.
  • Every stop_after evaluation and the decision that followed.
  • The outcome of every step, and the terminal outcome of the run.

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.