{
  "subscenarios": [
    {
      "id": "exact-linked-success-rejects-unlinked-and-wrong-key",
      "sides": {
        "alice": {
          "self": "client",
          "initialRecords": ["record-lists/request.json"],
          "policy": { "kind": "datalog", "path": "modules/linked-request-responses.module.datalog.tmpl" }
        },
        "bob": {
          "self": "service",
          "addedRecords": ["record-lists/success-candidates.json"],
          "policy": { "kind": "datalog", "path": "modules/linked-request-responses.module.datalog.tmpl" }
        }
      },
      "expect": {
        "afterOpen": {
          "completed": true,
          "alice": { "count": 1, "hasRecords": ["request-1"] },
          "bob": { "count": 1, "hasRecords": ["request-1"] },
          "events": [{ "side": "bob", "phase": "transfer", "event": "received", "record": "request-1" }]
        },
        "afterAdded": {
          "completed": true,
          "alice": {
            "count": 2,
            "hasRecords": ["request-1", "success-response"],
            "lacksRecords": ["unlinked-response", "wrong-key-response"]
          },
          "bob": {
            "count": 4,
            "hasRecords": ["request-1", "success-response", "unlinked-response", "wrong-key-response"]
          },
          "events": [{ "side": "alice", "phase": "transfer", "event": "received", "record": "success-response" }]
        }
      }
    },
    {
      "id": "linked-application-error-is-a-response-record",
      "sides": {
        "alice": {
          "self": "client",
          "initialRecords": ["record-lists/request.json"],
          "policy": { "kind": "datalog", "path": "modules/linked-request-responses.module.datalog.tmpl" }
        },
        "bob": {
          "self": "service",
          "addedRecords": ["record-lists/error-response.json"],
          "policy": { "kind": "datalog", "path": "modules/linked-request-responses.module.datalog.tmpl" }
        }
      },
      "expect": {
        "afterOpen": {
          "completed": true,
          "alice": { "count": 1, "hasRecords": ["request-1"] },
          "bob": { "count": 1, "hasRecords": ["request-1"] }
        },
        "afterAdded": {
          "completed": true,
          "alice": { "count": 2, "hasRecords": ["request-1", "error-response"] },
          "bob": { "count": 2, "hasRecords": ["request-1", "error-response"] },
          "events": [{ "side": "alice", "phase": "transfer", "event": "received", "record": "error-response" }]
        }
      }
    },
    {
      "id": "exact-correlation-allows-multiple-responses",
      "sides": {
        "alice": {
          "self": "client",
          "initialRecords": ["record-lists/request.json"],
          "policy": { "kind": "datalog", "path": "modules/linked-request-responses.module.datalog.tmpl" }
        },
        "bob": {
          "self": "service",
          "addedRecords": ["record-lists/multiple-responses.json"],
          "policy": { "kind": "datalog", "path": "modules/linked-request-responses.module.datalog.tmpl" }
        }
      },
      "expect": {
        "afterOpen": {
          "completed": true,
          "alice": { "count": 1, "hasRecords": ["request-1"] },
          "bob": { "count": 1, "hasRecords": ["request-1"] }
        },
        "afterAdded": {
          "completed": true,
          "alice": { "count": 3, "hasRecords": ["request-1", "first-response", "second-response"] },
          "bob": { "count": 3, "hasRecords": ["request-1", "first-response", "second-response"] },
          "events": [
            { "side": "alice", "phase": "transfer", "event": "received", "record": "first-response" },
            { "side": "alice", "phase": "transfer", "event": "received", "record": "second-response" }
          ]
        }
      }
    },
    {
      "id": "replay-and-idempotency-are-application-records",
      "sides": {
        "alice": {
          "self": "client",
          "initialRecords": ["record-lists/replayed-requests.json"],
          "policy": { "kind": "datalog", "path": "modules/replay-decision.module.datalog.tmpl" }
        },
        "bob": {
          "self": "service",
          "addedRecords": ["record-lists/idempotency-decision.json"],
          "policy": { "kind": "datalog", "path": "modules/replay-decision.module.datalog.tmpl" }
        }
      },
      "expect": {
        "afterOpen": {
          "completed": true,
          "alice": { "count": 2, "hasRecords": ["original-idempotent-request", "replayed-idempotent-request"] },
          "bob": { "count": 2, "hasRecords": ["original-idempotent-request", "replayed-idempotent-request"] }
        },
        "afterAdded": {
          "completed": true,
          "alice": { "count": 3, "hasRecords": ["original-idempotent-request", "replayed-idempotent-request", "idempotency-decision"] },
          "bob": { "count": 3, "hasRecords": ["original-idempotent-request", "replayed-idempotent-request", "idempotency-decision"] },
          "events": [{ "side": "alice", "phase": "transfer", "event": "received", "record": "idempotency-decision" }]
        }
      }
    },
    {
      "id": "acknowledgement-links-the-exact-response",
      "sides": {
        "alice": {
          "self": "client",
          "initialRecords": ["record-lists/request.json"],
          "addedRecords": ["record-lists/response-acknowledgement.json"],
          "policy": { "kind": "datalog", "path": "modules/response-acknowledgement.module.datalog.tmpl" }
        },
        "bob": {
          "self": "service",
          "initialRecords": ["record-lists/acknowledged-response.json"],
          "policy": { "kind": "datalog", "path": "modules/response-acknowledgement.module.datalog.tmpl" }
        }
      },
      "expect": {
        "afterOpen": {
          "completed": true,
          "alice": { "count": 2, "hasRecords": ["request-1", "response-to-acknowledge"] },
          "bob": { "count": 2, "hasRecords": ["request-1", "response-to-acknowledge"] }
        },
        "afterAdded": {
          "completed": true,
          "alice": { "count": 3, "hasRecords": ["request-1", "response-to-acknowledge", "response-acknowledgement"] },
          "bob": { "count": 3, "hasRecords": ["request-1", "response-to-acknowledge", "response-acknowledgement"] },
          "events": [{ "side": "bob", "phase": "transfer", "event": "received", "record": "response-acknowledgement" }]
        }
      }
    }
  ]
}
