Read every armable deadline out of an authoritative suspended summary.
NEVER throws on author data. By the time this runs Mastra has already
persisted the suspension, so a malformed flowsafe.deadlineMs cannot be
rejected by failing the caller: that would leave the run suspended AND the
caller erroring. The entry is reported in rejected for the caller to log,
and the suspension stays an ordinary one.
Works on either projection of the same suspension — the live result and the
snapshot-rehydrated status() — and must agree with itself across the two,
because the boundary that arms an entry and the wake that fences it do not
read the same one.
The arming invariant: an entry may be armed only for a suspension that
EXCLUSIVELY OWNS the dot-joined key its fence fields are read from. A
nested suspension fails "owns" — the key's fence belongs to the enclosing
step — and a key collision fails "exclusively" — two suspensions answer to
one key, which Mastra's own snapshot namespace also collides. Refusing is
all flowsafe can do there: arming would let a wake deliver one suspension's
timeout envelope to an unrelated step. Each refusal below is a detector for
one projection's way of breaking that invariant.
Read every armable deadline out of an authoritative suspended summary.
NEVER throws on author data. By the time this runs Mastra has already persisted the suspension, so a malformed
flowsafe.deadlineMscannot be rejected by failing the caller: that would leave the run suspended AND the caller erroring. The entry is reported inrejectedfor the caller to log, and the suspension stays an ordinary one.Works on either projection of the same suspension — the live result and the snapshot-rehydrated
status()— and must agree with itself across the two, because the boundary that arms an entry and the wake that fences it do not read the same one.The arming invariant: an entry may be armed only for a suspension that EXCLUSIVELY OWNS the dot-joined key its fence fields are read from. A nested suspension fails "owns" — the key's fence belongs to the enclosing step — and a key collision fails "exclusively" — two suspensions answer to one key, which Mastra's own snapshot namespace also collides. Refusing is all flowsafe can do there: arming would let a wake deliver one suspension's timeout envelope to an unrelated step. Each refusal below is a detector for one projection's way of breaking that invariant.