Durable Promise Specification
API + state-transition table for durable promises — the persistent coordination primitive of Distributed Async Await.
Promises are fundamental units of coordination. Distributed Async Await proposes Durable Promises — promises that persist in storage and enable coordination across process boundaries.
Within the Distributed Async Await specification, each execution — whether a function execution or an action taking place in the physical world — pairs to a promise.
Distributed Async Await requires that promise data objects are stored to disk, thus making the promises durable, giving them the name Durable Promises.
A promise (also called future, awaitable, or deferred) is a representation of a future value. A promise is either pending or completed — that is, resolved or rejected. A promise is pending while the value is not yet available; once completed, it signals success (resolved) or failure (rejected).
A promise is a coordination primitive. In a typical scenario, a downstream function execution creates a promise and awaits its completion. An upstream function execution either resolves or rejects the promise. On completion, the downstream execution resumes with the value of the promise.
API#
Durable Promise Application Programming Interface
Logically, the Application Programming Interface (API) is divided into two parts: the Downstream API and the Upstream API.
Downstream API#
-
Create
A downstream component may create a promise.
codeCreate(promise-id, idempotency-key, param, header, timeout, strict) -
Cancel
A downstream component can cancel an existing promise.
codeCancel(promise-id, idempotency-key, value, header, strict) -
Callback
A downstream component can register a callback on an existing promise.
codeCallback(id, promise-id, root-promise-id, timeout, recv)A
recvspecifies the transport on which the callback will occur. Below is a non-exhaustive list of supported receivers.Type Data Shorthand poll{"group": "string", "id": "string"}poll://group:idhttp{"headers": {"string": "string"}, "url": "string"}http://example.com
Upstream API#
-
Resolve
An upstream component can resolve an existing promise, signaling success.
codeResolve(promise-id, idempotency-key, value, header, strict) -
Reject
An upstream component can reject a promise, signalling failure.
codeReject(promise-id, idempotency-key, value, header, strict)
OpenAPI spec example#
openapi: 3.0.0
info:
title: Durable Promise API
version: x.x.x
license:
name: Apache 2.0
url: https://opensource.org/license/apache-2-0
servers:
- url: https://your_public_api_url
description: <your_public_server_description>
- url: http://localhost:<port>
description: <your_local_server_description>
paths:
/promises:
get:
tags: [Promises]
summary: Search promises
operationId: searchPromises
parameters:
- in: header
name: request-id
schema: { type: string }
- name: id
in: query
schema: { type: string }
- name: state
in: query
schema: { type: string, enum: [pending, resolved, rejected] }
- name: tags
in: query
style: deepObject
explode: true
schema:
type: object
additionalProperties: { type: string }
- name: limit
in: query
schema: { type: integer }
- name: cursor
in: query
schema: { type: string }
responses:
200:
description: OK
content:
application/json:
schema:
type: object
properties:
promises:
type: array
items:
$ref: "#/components/schemas/Promise"
cursor:
type: string
post:
tags: [Promises]
summary: Create promise
operationId: createPromise
parameters:
- in: header
name: request-id
schema: { type: string }
- in: header
name: idempotency-key
schema: { type: string }
- in: header
name: strict
schema: { type: boolean }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [id, timeout]
properties:
id: { type: string }
timeout: { type: integer, format: int64 }
param: { $ref: "#/components/schemas/Value" }
tags:
type: object
additionalProperties: { type: string }
responses:
200:
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
201:
description: Created
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
400: { description: Invalid request }
403: { description: Forbidden }
409: { description: Promise already exists }
/promises/{id}:
get:
tags: [Promises]
summary: Read promise
operationId: readPromise
parameters:
- in: path
name: id
required: true
schema: { type: string }
- in: header
name: request-id
schema: { type: string }
responses:
200:
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
400: { description: Invalid request }
404: { description: Promise not found }
patch:
tags: [Promises]
summary: Complete promise
operationId: completePromise
parameters:
- in: path
name: id
required: true
schema: { type: string }
- in: header
name: request-id
schema: { type: string }
- in: header
name: idempotency-key
schema: { type: string }
- in: header
name: strict
schema: { type: boolean }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [state]
properties:
state:
type: string
enum: [RESOLVED, REJECTED, REJECTED_CANCELED]
value: { $ref: "#/components/schemas/Value" }
responses:
200:
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
400: { description: Invalid request }
403: { description: Forbidden }
404: { description: Promise not found }
components:
schemas:
Promise:
type: object
required: [id, state, timeout, param, value, tags]
properties:
id: { type: string }
state:
type: string
enum:
[PENDING, RESOLVED, REJECTED, REJECTED_CANCELED, REJECTED_TIMEDOUT]
timeout: { type: integer, format: int64 }
param: { $ref: "#/components/schemas/Value" }
value: { $ref: "#/components/schemas/Value" }
tags:
type: object
additionalProperties: { type: string }
idempotencyKeyForCreate: { type: string, readOnly: true }
idempotencyKeyForComplete: { type: string, readOnly: true }
createdOn: { type: integer, format: int64 }
completedOn: { type: integer, format: int64 }
Value:
type: object
properties:
headers:
type: object
additionalProperties: { type: string }
data: { type: string }
Task:
type: object
required: [id, version, state]
properties:
id: { type: string }
state:
type: string
enum: [pending, acquired, suspended, fulfilled]
version: { type: integer }
timeout: { type: integer, format: int64 }
processId: { type: string }
createdOn: { type: integer, format: int64 }
completedOn: { type: integer, format: int64 }A task and its associated promise share an identifier; they are paired but distinct. A task carries a version that increments on every transition back to pending (release, resume, lease expiry). All mutating task operations require the caller to present the current version — a mismatch returns conflict (status 409).
For the full task lifecycle, operations, and invariants, see Tasks.
State transitions#
| Current State | Action | Next State | Output | |
|---|---|---|---|---|
| 1 | Init | Create(id, -, T) | Pending(id, -, -) | OK |
| 2 | Init | Create(id, -, F) | Pending(id, -, -) | OK |
| 3 | Init | Create(id, ikc, T) | Pending(id, ikc, -) | OK |
| 4 | Init | Create(id, ikc, F) | Pending(id, ikc, -) | OK |
| 5 | Init | Resolve(id, -, T) | Init | KO, Already Init |
| 6 | Init | Resolve(id, -, F) | Init | KO, Already Init |
| 7 | Init | Resolve(id, iku, T) | Init | KO, Already Init |
| 8 | Init | Resolve(id, iku, F) | Init | KO, Already Init |
| 9 | Init | Reject(id, -, T) | Init | KO, Already Init |
| 10 | Init | Reject(id, -, F) | Init | KO, Already Init |
| 11 | Init | Reject(id, iku, T) | Init | KO, Already Init |
| 12 | Init | Reject(id, iku, F) | Init | KO, Already Init |
| 13 | Init | Cancel(id, -, T) | Init | KO, Already Init |
| 14 | Init | Cancel(id, -, F) | Init | KO, Already Init |
| 15 | Init | Cancel(id, iku, T) | Init | KO, Already Init |
| 16 | Init | Cancel(id, iku, F) | Init | KO, Already Init |
| 17 | Pending(id, -, -) | Create(id, -, T) | Pending(id, -, -) | KO, Already Pending |
| 18 | Pending(id, -, -) | Create(id, -, F) | Pending(id, -, -) | KO, Already Pending |
| 19 | Pending(id, -, -) | Create(id, ikc, T) | Pending(id, -, -) | KO, Already Pending |
| 20 | Pending(id, -, -) | Create(id, ikc, F) | Pending(id, -, -) | KO, Already Pending |
| 21 | Pending(id, -, -) | Resolve(id, -, T) | Resolved(id, -, -) | OK |
| 22 | Pending(id, -, -) | Resolve(id, -, F) | Resolved(id, -, -) | OK |
| 23 | Pending(id, -, -) | Resolve(id, iku, T) | Resolved(id, -, iku) | OK |
| 24 | Pending(id, -, -) | Resolve(id, iku, F) | Resolved(id, -, iku) | OK |
| 25 | Pending(id, -, -) | Reject(id, -, T) | Rejected(id, -, -) | OK |
| 26 | Pending(id, -, -) | Reject(id, -, F) | Rejected(id, -, -) | OK |
| 27 | Pending(id, -, -) | Reject(id, iku, T) | Rejected(id, -, iku) | OK |
| 28 | Pending(id, -, -) | Reject(id, iku, F) | Rejected(id, -, iku) | OK |
| 29 | Pending(id, -, -) | Cancel(id, -, T) | Canceled(id, -, -) | OK |
| 30 | Pending(id, -, -) | Cancel(id, -, F) | Canceled(id, -, -) | OK |
| 31 | Pending(id, -, -) | Cancel(id, iku, T) | Canceled(id, -, iku) | OK |
| 32 | Pending(id, -, -) | Cancel(id, iku, F) | Canceled(id, -, iku) | OK |
| 33 | Pending(id, ikc, -) | Create(id, -, T) | Pending(id, ikc, -) | KO, Already Pending |
| 34 | Pending(id, ikc, -) | Create(id, -, F) | Pending(id, ikc, -) | KO, Already Pending |
| 35 | Pending(id, ikc, -) | Create(id, ikc, T) | Pending(id, ikc, -) | OK, Deduplicated |
| 36 | Pending(id, ikc, -) | Create(id, ikc, F) | Pending(id, ikc, -) | OK, Deduplicated |
| 37 | Pending(id, ikc, -) | Create(id, ikc*, T) | Pending(id, ikc, -) | KO, Already Pending |
| 38 | Pending(id, ikc, -) | Create(id, ikc*, F) | Pending(id, ikc, -) | KO, Already Pending |
| 39 | Pending(id, ikc, -) | Resolve(id, -, T) | Resolved(id, ikc, -) | OK |
| 40 | Pending(id, ikc, -) | Resolve(id, -, F) | Resolved(id, ikc, -) | OK |
| 41 | Pending(id, ikc, -) | Resolve(id, iku, T) | Resolved(id, ikc, iku) | OK |
| 42 | Pending(id, ikc, -) | Resolve(id, iku, F) | Resolved(id, ikc, iku) | OK |
| 43 | Pending(id, ikc, -) | Reject(id, -, T) | Rejected(id, ikc, -) | OK |
| 44 | Pending(id, ikc, -) | Reject(id, -, F) | Rejected(id, ikc, -) | OK |
| 45 | Pending(id, ikc, -) | Reject(id, iku, T) | Rejected(id, ikc, iku) | OK |
| 46 | Pending(id, ikc, -) | Reject(id, iku, F) | Rejected(id, ikc, iku) | OK |
| 47 | Pending(id, ikc, -) | Cancel(id, -, T) | Canceled(id, ikc, -) | OK |
| 48 | Pending(id, ikc, -) | Cancel(id, -, F) | Canceled(id, ikc, -) | OK |
| 49 | Pending(id, ikc, -) | Cancel(id, iku, T) | Canceled(id, ikc, iku) | OK |
| 50 | Pending(id, ikc, -) | Cancel(id, iku, F) | Canceled(id, ikc, iku) | OK |
| 51 | Resolved(id, -, -) | Create(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
| 52 | Resolved(id, -, -) | Create(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
| 53 | Resolved(id, -, -) | Create(id, ikc, T) | Resolved(id, -, -) | KO, Already Resolved |
| 54 | Resolved(id, -, -) | Create(id, ikc, F) | Resolved(id, -, -) | KO, Already Resolved |
| 55 | Resolved(id, -, -) | Resolve(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
| 56 | Resolved(id, -, -) | Resolve(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
| 57 | Resolved(id, -, -) | Resolve(id, iku, T) | Resolved(id, -, -) | KO, Already Resolved |
| 58 | Resolved(id, -, -) | Resolve(id, iku, F) | Resolved(id, -, -) | KO, Already Resolved |
| 59 | Resolved(id, -, -) | Reject(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
| 60 | Resolved(id, -, -) | Reject(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
| 61 | Resolved(id, -, -) | Reject(id, iku, T) | Resolved(id, -, -) | KO, Already Resolved |
| 62 | Resolved(id, -, -) | Reject(id, iku, F) | Resolved(id, -, -) | KO, Already Resolved |
| 63 | Resolved(id, -, -) | Cancel(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
| 64 | Resolved(id, -, -) | Cancel(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
| 65 | Resolved(id, -, -) | Cancel(id, iku, T) | Resolved(id, -, -) | KO, Already Resolved |
| 66 | Resolved(id, -, -) | Cancel(id, iku, F) | Resolved(id, -, -) | KO, Already Resolved |
| 67 | Resolved(id, -, iku) | Create(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 68 | Resolved(id, -, iku) | Create(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 69 | Resolved(id, -, iku) | Create(id, ikc, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 70 | Resolved(id, -, iku) | Create(id, ikc, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 71 | Resolved(id, -, iku) | Resolve(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 72 | Resolved(id, -, iku) | Resolve(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 73 | Resolved(id, -, iku) | Resolve(id, iku, T) | Resolved(id, -, iku) | OK, Deduplicated |
| 74 | Resolved(id, -, iku) | Resolve(id, iku, F) | Resolved(id, -, iku) | OK, Deduplicated |
| 75 | Resolved(id, -, iku) | Resolve(id, iku*, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 76 | Resolved(id, -, iku) | Resolve(id, iku*, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 77 | Resolved(id, -, iku) | Reject(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 78 | Resolved(id, -, iku) | Reject(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 79 | Resolved(id, -, iku) | Reject(id, iku, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 80 | Resolved(id, -, iku) | Reject(id, iku, F) | Resolved(id, -, iku) | OK, Deduplicated |
| 81 | Resolved(id, -, iku) | Reject(id, iku*, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 82 | Resolved(id, -, iku) | Reject(id, iku*, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 83 | Resolved(id, -, iku) | Cancel(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 84 | Resolved(id, -, iku) | Cancel(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 85 | Resolved(id, -, iku) | Cancel(id, iku, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 86 | Resolved(id, -, iku) | Cancel(id, iku, F) | Resolved(id, -, iku) | OK, Deduplicated |
| 87 | Resolved(id, -, iku) | Cancel(id, iku*, T) | Resolved(id, -, iku) | KO, Already Resolved |
| 88 | Resolved(id, -, iku) | Cancel(id, iku*, F) | Resolved(id, -, iku) | KO, Already Resolved |
| 89 | Resolved(id, ikc, -) | Create(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 90 | Resolved(id, ikc, -) | Create(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 91 | Resolved(id, ikc, -) | Create(id, ikc, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 92 | Resolved(id, ikc, -) | Create(id, ikc, F) | Resolved(id, ikc, -) | OK, Deduplicated |
| 93 | Resolved(id, ikc, -) | Create(id, ikc*, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 94 | Resolved(id, ikc, -) | Create(id, ikc*, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 95 | Resolved(id, ikc, -) | Resolve(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 96 | Resolved(id, ikc, -) | Resolve(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 97 | Resolved(id, ikc, -) | Resolve(id, iku, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 98 | Resolved(id, ikc, -) | Resolve(id, iku, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 99 | Resolved(id, ikc, -) | Reject(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 100 | Resolved(id, ikc, -) | Reject(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 101 | Resolved(id, ikc, -) | Reject(id, iku, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 102 | Resolved(id, ikc, -) | Reject(id, iku, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 103 | Resolved(id, ikc, -) | Cancel(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 104 | Resolved(id, ikc, -) | Cancel(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 105 | Resolved(id, ikc, -) | Cancel(id, iku, T) | Resolved(id, ikc, -) | KO, Already Resolved |
| 106 | Resolved(id, ikc, -) | Cancel(id, iku, F) | Resolved(id, ikc, -) | KO, Already Resolved |
| 107 | Resolved(id, ikc, iku) | Create(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 108 | Resolved(id, ikc, iku) | Create(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 109 | Resolved(id, ikc, iku) | Create(id, ikc, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 110 | Resolved(id, ikc, iku) | Create(id, ikc, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
| 111 | Resolved(id, ikc, iku) | Create(id, ikc*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 112 | Resolved(id, ikc, iku) | Create(id, ikc*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 113 | Resolved(id, ikc, iku) | Resolve(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 114 | Resolved(id, ikc, iku) | Resolve(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 115 | Resolved(id, ikc, iku) | Resolve(id, iku, T) | Resolved(id, ikc, iku) | OK, Deduplicated |
| 116 | Resolved(id, ikc, iku) | Resolve(id, iku, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
| 117 | Resolved(id, ikc, iku) | Resolve(id, iku*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 118 | Resolved(id, ikc, iku) | Resolve(id, iku*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 119 | Resolved(id, ikc, iku) | Reject(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 120 | Resolved(id, ikc, iku) | Reject(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 121 | Resolved(id, ikc, iku) | Reject(id, iku, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 122 | Resolved(id, ikc, iku) | Reject(id, iku, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
| 123 | Resolved(id, ikc, iku) | Reject(id, iku*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 124 | Resolved(id, ikc, iku) | Reject(id, iku*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 125 | Resolved(id, ikc, iku) | Cancel(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 126 | Resolved(id, ikc, iku) | Cancel(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 127 | Resolved(id, ikc, iku) | Cancel(id, iku, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 128 | Resolved(id, ikc, iku) | Cancel(id, iku, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
| 129 | Resolved(id, ikc, iku) | Cancel(id, iku*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 130 | Resolved(id, ikc, iku) | Cancel(id, iku*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
| 131 | Rejected(id, -, -) | Create(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
| 132 | Rejected(id, -, -) | Create(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
| 133 | Rejected(id, -, -) | Create(id, ikc, T) | Rejected(id, -, -) | KO, Already Rejected |
| 134 | Rejected(id, -, -) | Create(id, ikc, F) | Rejected(id, -, -) | KO, Already Rejected |
| 135 | Rejected(id, -, -) | Resolve(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
| 136 | Rejected(id, -, -) | Resolve(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
| 137 | Rejected(id, -, -) | Resolve(id, iku, T) | Rejected(id, -, -) | KO, Already Rejected |
| 138 | Rejected(id, -, -) | Resolve(id, iku, F) | Rejected(id, -, -) | KO, Already Rejected |
| 139 | Rejected(id, -, -) | Reject(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
| 140 | Rejected(id, -, -) | Reject(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
| 141 | Rejected(id, -, -) | Reject(id, iku, T) | Rejected(id, -, -) | KO, Already Rejected |
| 142 | Rejected(id, -, -) | Reject(id, iku, F) | Rejected(id, -, -) | KO, Already Rejected |
| 143 | Rejected(id, -, -) | Cancel(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
| 144 | Rejected(id, -, -) | Cancel(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
| 145 | Rejected(id, -, -) | Cancel(id, iku, T) | Rejected(id, -, -) | KO, Already Rejected |
| 146 | Rejected(id, -, -) | Cancel(id, iku, F) | Rejected(id, -, -) | KO, Already Rejected |
| 147 | Rejected(id, -, iku) | Create(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 148 | Rejected(id, -, iku) | Create(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 149 | Rejected(id, -, iku) | Create(id, ikc, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 150 | Rejected(id, -, iku) | Create(id, ikc, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 151 | Rejected(id, -, iku) | Resolve(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 152 | Rejected(id, -, iku) | Resolve(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 153 | Rejected(id, -, iku) | Resolve(id, iku, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 154 | Rejected(id, -, iku) | Resolve(id, iku, F) | Rejected(id, -, iku) | OK, Deduplicated |
| 155 | Rejected(id, -, iku) | Resolve(id, iku*, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 156 | Rejected(id, -, iku) | Resolve(id, iku*, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 157 | Rejected(id, -, iku) | Reject(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 158 | Rejected(id, -, iku) | Reject(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 159 | Rejected(id, -, iku) | Reject(id, iku, T) | Rejected(id, -, iku) | OK, Deduplicated |
| 160 | Rejected(id, -, iku) | Reject(id, iku, F) | Rejected(id, -, iku) | OK, Deduplicated |
| 161 | Rejected(id, -, iku) | Reject(id, iku*, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 162 | Rejected(id, -, iku) | Reject(id, iku*, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 163 | Rejected(id, -, iku) | Cancel(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 164 | Rejected(id, -, iku) | Cancel(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 165 | Rejected(id, -, iku) | Cancel(id, iku, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 166 | Rejected(id, -, iku) | Cancel(id, iku, F) | Rejected(id, -, iku) | OK, Deduplicated |
| 167 | Rejected(id, -, iku) | Cancel(id, iku*, T) | Rejected(id, -, iku) | KO, Already Rejected |
| 168 | Rejected(id, -, iku) | Cancel(id, iku*, F) | Rejected(id, -, iku) | KO, Already Rejected |
| 169 | Rejected(id, ikc, -) | Create(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 170 | Rejected(id, ikc, -) | Create(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 171 | Rejected(id, ikc, -) | Create(id, ikc, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 172 | Rejected(id, ikc, -) | Create(id, ikc, F) | Rejected(id, ikc, -) | OK, Deduplicated |
| 173 | Rejected(id, ikc, -) | Create(id, ikc*, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 174 | Rejected(id, ikc, -) | Create(id, ikc*, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 175 | Rejected(id, ikc, -) | Resolve(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 176 | Rejected(id, ikc, -) | Resolve(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 177 | Rejected(id, ikc, -) | Resolve(id, iku, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 178 | Rejected(id, ikc, -) | Resolve(id, iku, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 179 | Rejected(id, ikc, -) | Reject(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 180 | Rejected(id, ikc, -) | Reject(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 181 | Rejected(id, ikc, -) | Reject(id, iku, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 182 | Rejected(id, ikc, -) | Reject(id, iku, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 183 | Rejected(id, ikc, -) | Cancel(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 184 | Rejected(id, ikc, -) | Cancel(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 185 | Rejected(id, ikc, -) | Cancel(id, iku, T) | Rejected(id, ikc, -) | KO, Already Rejected |
| 186 | Rejected(id, ikc, -) | Cancel(id, iku, F) | Rejected(id, ikc, -) | KO, Already Rejected |
| 187 | Rejected(id, ikc, iku) | Create(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 188 | Rejected(id, ikc, iku) | Create(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 189 | Rejected(id, ikc, iku) | Create(id, ikc, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 190 | Rejected(id, ikc, iku) | Create(id, ikc, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
| 191 | Rejected(id, ikc, iku) | Create(id, ikc*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 192 | Rejected(id, ikc, iku) | Create(id, ikc*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 193 | Rejected(id, ikc, iku) | Resolve(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 194 | Rejected(id, ikc, iku) | Resolve(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 195 | Rejected(id, ikc, iku) | Resolve(id, iku, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 196 | Rejected(id, ikc, iku) | Resolve(id, iku, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
| 197 | Rejected(id, ikc, iku) | Resolve(id, iku*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 198 | Rejected(id, ikc, iku) | Resolve(id, iku*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 199 | Rejected(id, ikc, iku) | Reject(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 200 | Rejected(id, ikc, iku) | Reject(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 201 | Rejected(id, ikc, iku) | Reject(id, iku, T) | Rejected(id, ikc, iku) | OK, Deduplicated |
| 202 | Rejected(id, ikc, iku) | Reject(id, iku, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
| 203 | Rejected(id, ikc, iku) | Reject(id, iku*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 204 | Rejected(id, ikc, iku) | Reject(id, iku*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 205 | Rejected(id, ikc, iku) | Cancel(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 206 | Rejected(id, ikc, iku) | Cancel(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 207 | Rejected(id, ikc, iku) | Cancel(id, iku, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 208 | Rejected(id, ikc, iku) | Cancel(id, iku, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
| 209 | Rejected(id, ikc, iku) | Cancel(id, iku*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 210 | Rejected(id, ikc, iku) | Cancel(id, iku*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
| 211 | Canceled(id, -, -) | Create(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
| 212 | Canceled(id, -, -) | Create(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
| 213 | Canceled(id, -, -) | Create(id, ikc, T) | Canceled(id, -, -) | KO, Already Canceled |
| 214 | Canceled(id, -, -) | Create(id, ikc, F) | Canceled(id, -, -) | KO, Already Canceled |
| 215 | Canceled(id, -, -) | Resolve(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
| 216 | Canceled(id, -, -) | Resolve(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
| 217 | Canceled(id, -, -) | Resolve(id, iku, T) | Canceled(id, -, -) | KO, Already Canceled |
| 218 | Canceled(id, -, -) | Resolve(id, iku, F) | Canceled(id, -, -) | KO, Already Canceled |
| 219 | Canceled(id, -, -) | Reject(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
| 220 | Canceled(id, -, -) | Reject(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
| 221 | Canceled(id, -, -) | Reject(id, iku, T) | Canceled(id, -, -) | KO, Already Canceled |
| 222 | Canceled(id, -, -) | Reject(id, iku, F) | Canceled(id, -, -) | KO, Already Canceled |
| 223 | Canceled(id, -, -) | Cancel(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
| 224 | Canceled(id, -, -) | Cancel(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
| 225 | Canceled(id, -, -) | Cancel(id, iku, T) | Canceled(id, -, -) | KO, Already Canceled |
| 226 | Canceled(id, -, -) | Cancel(id, iku, F) | Canceled(id, -, -) | KO, Already Canceled |
| 227 | Canceled(id, -, iku) | Create(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 228 | Canceled(id, -, iku) | Create(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 229 | Canceled(id, -, iku) | Create(id, ikc, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 230 | Canceled(id, -, iku) | Create(id, ikc, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 231 | Canceled(id, -, iku) | Resolve(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 232 | Canceled(id, -, iku) | Resolve(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 233 | Canceled(id, -, iku) | Resolve(id, iku, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 234 | Canceled(id, -, iku) | Resolve(id, iku, F) | Canceled(id, -, iku) | OK, Deduplicated |
| 235 | Canceled(id, -, iku) | Resolve(id, iku*, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 236 | Canceled(id, -, iku) | Resolve(id, iku*, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 237 | Canceled(id, -, iku) | Reject(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 238 | Canceled(id, -, iku) | Reject(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 239 | Canceled(id, -, iku) | Reject(id, iku, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 240 | Canceled(id, -, iku) | Reject(id, iku, F) | Canceled(id, -, iku) | OK, Deduplicated |
| 241 | Canceled(id, -, iku) | Reject(id, iku*, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 242 | Canceled(id, -, iku) | Reject(id, iku*, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 243 | Canceled(id, -, iku) | Cancel(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 244 | Canceled(id, -, iku) | Cancel(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 245 | Canceled(id, -, iku) | Cancel(id, iku, T) | Canceled(id, -, iku) | OK, Deduplicated |
| 246 | Canceled(id, -, iku) | Cancel(id, iku, F) | Canceled(id, -, iku) | OK, Deduplicated |
| 247 | Canceled(id, -, iku) | Cancel(id, iku*, T) | Canceled(id, -, iku) | KO, Already Canceled |
| 248 | Canceled(id, -, iku) | Cancel(id, iku*, F) | Canceled(id, -, iku) | KO, Already Canceled |
| 249 | Canceled(id, ikc, -) | Create(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 250 | Canceled(id, ikc, -) | Create(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 251 | Canceled(id, ikc, -) | Create(id, ikc, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 252 | Canceled(id, ikc, -) | Create(id, ikc, F) | Canceled(id, ikc, -) | OK, Deduplicated |
| 253 | Canceled(id, ikc, -) | Create(id, ikc*, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 254 | Canceled(id, ikc, -) | Create(id, ikc*, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 255 | Canceled(id, ikc, -) | Resolve(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 256 | Canceled(id, ikc, -) | Resolve(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 257 | Canceled(id, ikc, -) | Resolve(id, iku, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 258 | Canceled(id, ikc, -) | Resolve(id, iku, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 259 | Canceled(id, ikc, -) | Reject(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 260 | Canceled(id, ikc, -) | Reject(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 261 | Canceled(id, ikc, -) | Reject(id, iku, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 262 | Canceled(id, ikc, -) | Reject(id, iku, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 263 | Canceled(id, ikc, -) | Cancel(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 264 | Canceled(id, ikc, -) | Cancel(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 265 | Canceled(id, ikc, -) | Cancel(id, iku, T) | Canceled(id, ikc, -) | KO, Already Canceled |
| 266 | Canceled(id, ikc, -) | Cancel(id, iku, F) | Canceled(id, ikc, -) | KO, Already Canceled |
| 267 | Canceled(id, ikc, iku) | Create(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 268 | Canceled(id, ikc, iku) | Create(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 269 | Canceled(id, ikc, iku) | Create(id, ikc, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 270 | Canceled(id, ikc, iku) | Create(id, ikc, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
| 271 | Canceled(id, ikc, iku) | Create(id, ikc*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 272 | Canceled(id, ikc, iku) | Create(id, ikc*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 273 | Canceled(id, ikc, iku) | Resolve(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 274 | Canceled(id, ikc, iku) | Resolve(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 275 | Canceled(id, ikc, iku) | Resolve(id, iku, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 276 | Canceled(id, ikc, iku) | Resolve(id, iku, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
| 277 | Canceled(id, ikc, iku) | Resolve(id, iku*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 278 | Canceled(id, ikc, iku) | Resolve(id, iku*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 279 | Canceled(id, ikc, iku) | Reject(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 280 | Canceled(id, ikc, iku) | Reject(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 281 | Canceled(id, ikc, iku) | Reject(id, iku, T) | Canceled(id, ikc, iku) | OK, Deduplicated |
| 282 | Canceled(id, ikc, iku) | Reject(id, iku, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
| 283 | Canceled(id, ikc, iku) | Reject(id, iku*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 284 | Canceled(id, ikc, iku) | Reject(id, iku*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 285 | Canceled(id, ikc, iku) | Cancel(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 286 | Canceled(id, ikc, iku) | Cancel(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 287 | Canceled(id, ikc, iku) | Cancel(id, iku, T) | Canceled(id, ikc, iku) | OK, Deduplicated |
| 288 | Canceled(id, ikc, iku) | Cancel(id, iku, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
| 289 | Canceled(id, ikc, iku) | Cancel(id, iku*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 290 | Canceled(id, ikc, iku) | Cancel(id, iku*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
| 291 | Timedout(id, -, -) | Create(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
| 292 | Timedout(id, -, -) | Create(id, -, F) | Timedout(id, -, -) | KO, Already Timedout |
| 293 | Timedout(id, -, -) | Create(id, ikc, T) | Timedout(id, -, -) | KO, Already Timedout |
| 294 | Timedout(id, -, -) | Create(id, ikc, F) | Timedout(id, -, -) | KO, Already Timedout |
| 295 | Timedout(id, -, -) | Resolve(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
| 296 | Timedout(id, -, -) | Resolve(id, -, F) | Timedout(id, -, -) | OK, Deduplicated |
| 297 | Timedout(id, -, -) | Resolve(id, iku, T) | Timedout(id, -, -) | KO, Already Timedout |
| 298 | Timedout(id, -, -) | Resolve(id, iku, F) | Timedout(id, -, -) | OK, Deduplicated |
| 299 | Timedout(id, -, -) | Reject(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
| 300 | Timedout(id, -, -) | Reject(id, -, F) | Timedout(id, -, -) | OK, Deduplicated |
| 301 | Timedout(id, -, -) | Reject(id, iku, T) | Timedout(id, -, -) | KO, Already Timedout |
| 302 | Timedout(id, -, -) | Reject(id, iku, F) | Timedout(id, -, -) | OK, Deduplicated |
| 303 | Timedout(id, -, -) | Cancel(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
| 304 | Timedout(id, -, -) | Cancel(id, -, F) | Timedout(id, -, -) | OK, Deduplicated |
| 305 | Timedout(id, -, -) | Cancel(id, iku, T) | Timedout(id, -, -) | KO, Already Timedout |
| 306 | Timedout(id, -, -) | Cancel(id, iku, F) | Timedout(id, -, -) | OK, Deduplicated |
| 307 | Timedout(id, ikc, -) | Create(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 308 | Timedout(id, ikc, -) | Create(id, -, F) | Timedout(id, ikc, -) | KO, Already Timedout |
| 309 | Timedout(id, ikc, -) | Create(id, ikc, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 310 | Timedout(id, ikc, -) | Create(id, ikc, F) | Timedout(id, ikc, -) | OK, Deduplicated |
| 311 | Timedout(id, ikc, -) | Create(id, ikc*, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 312 | Timedout(id, ikc, -) | Create(id, ikc*, F) | Timedout(id, ikc, -) | KO, Already Timedout |
| 313 | Timedout(id, ikc, -) | Resolve(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 314 | Timedout(id, ikc, -) | Resolve(id, -, F) | Timedout(id, ikc, -) | OK, Deduplicated |
| 315 | Timedout(id, ikc, -) | Resolve(id, iku, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 316 | Timedout(id, ikc, -) | Resolve(id, iku, F) | Timedout(id, ikc, -) | OK, Deduplicated |
| 317 | Timedout(id, ikc, -) | Reject(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 318 | Timedout(id, ikc, -) | Reject(id, -, F) | Timedout(id, ikc, -) | OK, Deduplicated |
| 319 | Timedout(id, ikc, -) | Reject(id, iku, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 320 | Timedout(id, ikc, -) | Reject(id, iku, F) | Timedout(id, ikc, -) | OK, Deduplicated |
| 321 | Timedout(id, ikc, -) | Cancel(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 322 | Timedout(id, ikc, -) | Cancel(id, -, F) | Timedout(id, ikc, -) | OK, Deduplicated |
| 323 | Timedout(id, ikc, -) | Cancel(id, iku, T) | Timedout(id, ikc, -) | KO, Already Timedout |
| 324 | Timedout(id, ikc, -) | Cancel(id, iku, F) | Timedout(id, ikc, -) | OK, Deduplicated |