Which execution leg the provider is minting for. On resume, step is the
resumed step's normalized path — taken from the caller's step selection,
or resolved from the snapshot when exactly one step is suspended;
undefined when the target step cannot be determined (ambiguous multi-step
resume without an explicit selection). suspendedAt is the epoch-ms
timestamp of that step's CURRENT suspension (from the persisted snapshot):
providers bind capabilities to the specific suspension they were granted
for — an approval decided before this suspension began belongs to an
earlier incarnation of the gate and must not mint again (see flowsafe's
approvalGrantProvider). resumeCount pairs with suspendedAt — the
runtime-owned monotonic resume ordinal (undefined on a step's first
suspension, 1,2,… on successive re-suspensions) — so a provider can tell
two same-step suspensions apart even when their suspendedAt stamps collide
within a millisecond. It replaces the payload-conditional resumedAt as the
tie-breaker: the runtime increments it on every resume, so no-payload
resumes cannot erase the first-vs-re-suspension distinction.
Which execution leg the provider is minting for. On resume,
stepis the resumed step's normalized path — taken from the caller's step selection, or resolved from the snapshot when exactly one step is suspended; undefined when the target step cannot be determined (ambiguous multi-step resume without an explicit selection).suspendedAtis the epoch-ms timestamp of that step's CURRENT suspension (from the persisted snapshot): providers bind capabilities to the specific suspension they were granted for — an approval decided before this suspension began belongs to an earlier incarnation of the gate and must not mint again (see flowsafe's approvalGrantProvider).resumeCountpairs withsuspendedAt— the runtime-owned monotonic resume ordinal (undefined on a step's first suspension,1,2,…on successive re-suspensions) — so a provider can tell two same-step suspensions apart even when theirsuspendedAtstamps collide within a millisecond. It replaces the payload-conditionalresumedAtas the tie-breaker: the runtime increments it on every resume, so no-payload resumes cannot erase the first-vs-re-suspension distinction.