ReadonlyattemptThis attempt, 1-based.
Optional ReadonlydeadlineThe run's deadline, epoch milliseconds — absent without one.
Optional ReadonlyidempotencyThe key this attempt must be made under — the REAL key, computed once per execution from the declared rule (or
the $call's option). Pass it to the system ({ idempotencyKey }), so a retry, a resume and a caller's retry
all name one operation. Absent without a key. Records carry its served form.
ReadonlyofThe attempts the policy allows in total.
ReadonlyretryReadonlyseriesThe series its record names (see AttemptRecord.series).
ReadonlysignalAborts when this attempt must stop: at its cap (AttemptTimeoutError), at the run's deadline, or when the run
is cancelled. Pass it to fetch and SDK calls — the engine stops waiting at the cap either way, but only the
function can stop its own work.
Optional ReadonlysystemThe outside system this attempt touches (P3) — absent when it touches none.
Optional ReadonlytimeoutThe cap this attempt runs under (see AttemptRecord.timeoutMs) — absent when uncapped.
Report an attempt an outside system ran ON ITS OWN — an SDK's internal retry (design §3.6, P2). It becomes an
AttemptRecord of kind 'observed' beside this attempt's evidence, and fires onAttempt; it never changes
control flow — in either direction: a report that comes after this attempt ended (an SDK's callback firing
late) is dropped and recorded by name (lateWrites), never thrown. Only the report's named fields are read; its
error is served under the run's redaction rule, and no hook is handed the error object itself. A malformed
report is the adapter's bug: a TypeError naming the field. Prefer one loop: turn the SDK's own retries off and
run the call under scope.$call.
Milliseconds before the run's deadline — Infinity without one. Read through the scope, it marks the stage's
commit untrackedSources: ['env'] when a deadline exists: time is an input the record cannot replay.
The attempt a function is running in — a stage's (
scope.$attempt(), design §3.1), or a call's (the argumentscope.$callandattempt()hand their function, P2). Never serialised: it holds a live signal.A stage with no retry policy and no deadline is attempt 1 of 1, with the run's signal (or one that never aborts) and
Infinityleft.