OptionalassigneeOptionaldescriptionOptionaldurationWith assignee, arms the claim TTL window (assigned_until /
claim_expires_at) at creation — the row is born locked to the
assignee, exactly as a post-create claim() locks it.
OptionalentityOptionalenvelopeUnindexed display/form context for resolver UIs
OptionalexpiresOptionalinitiatedOptionalmetadataGIN-indexed; put claim/filter keys here
OptionaloriginOptionalparentOptionalpriorityOptionalroleOptionalspanOptionalsubtypeOptionaltaskOptionaltimeoutSLA timer for the wait itself (e.g. '30m', '24h'). Arms the same
resume timer as condition(signalId, '30m'): when it fires first, the
workflow resumes with false and the escalation row transitions
pending → expired (a later resolve fails as already-expired). A signal
that arrives first resolves normally and the timer is inert.
OptionaltraceOptionaltypeOptionalworkflow
Born-assigned: writes
assigned_toin the same atomic INSERT that creates the row — on thecondition()path, one commit with the workflow's Leg1 checkpoint. Alone it is a durable pre-assignment: the row surfaces in the assignee'slist({ assignedTo })immediately, is resolvable by the assignee withassertClaim, and remains claimable by others (a routing hint). WithdurationMinutesit is a hard claim at creation. Thecreatedevent payload carries the assignment.