System ingress ignores claims
A person's claim blocks other people resolving by id, while webhooks resolving by signal key or domain key act for the process regardless.
The situation
A reviewer has claimed an order and is halfway through the form when the upstream system reports the order was cancelled at the source. The system event should settle the row; another reviewer clicking resolve should not.
The recipe
| Resolve presented | Row claimed by someone else, live window |
|---|---|
By escalation id (dashboard, resolve) |
409, the lock is theirs |
By signal key (resolveBySignalKey) |
Resolves |
By metadata (resolveByMetadata) |
Resolves |
| Batch fill or accumulator add | Lands, unless assertClaim: true |
await lt.escalations.resolveBySignalKey({ signalKey: `review-${orderId}`, resolverPayload: { cancelledAtSource: true },});The by-id path serves people working a queue. The signal-key and metadata paths serve system ingress that acts on behalf of the process, not a claimant.
The guarantee
The by-id claim check runs twice: an advisory check before side effects, and again inside the guarded resolve statement, so a claim that lapses mid-request cannot land a stale resolution. Ingress paths skip that check by design. Batch fills and accumulator adds can opt into it with assertClaim: true. See Conditional.
Related patterns
Resolving from anywhere
A claim is a work lock
A claim names a holder and a window. While the window is live nobody else can resolve the row, and when it lapses the row is back in the pool.
Resolving from anywhere
Resolve by signal key
A webhook that knows the deterministic signal id resumes the exact waiting workflow, with no id lookup and no facet to duplicate.
Resolving from anywhere
Resolve by domain key
A caller that knows only orderId resolves the right row in one atomic statement, with no lookup of the escalation id first.
Resolving from anywhere
An expired claim is recovery
When a holder walks away, the window lapses and the row is claimable again with no job, no status change and no lost input.
