{
  "schemaVersion": "0.1",
  "errorPolicy": "allOrNothing",
  "revisionMessage": "Build /checkout request-flow scene: 8 lifelines, alt fragment around payment retry, async notification publish",
  "ops": [
    { "op": "createNode", "id": "client", "nodeType": "sequence.actor", "shape": "rect", "label": "Client" },
    { "op": "createNode", "id": "checkout", "nodeType": "sequence.lifeline", "shape": "rect", "label": "Checkout Service" },
    { "op": "createNode", "id": "auth", "nodeType": "sequence.lifeline", "shape": "rect", "label": "Auth Service" },
    { "op": "createNode", "id": "cache", "nodeType": "sequence.lifeline", "shape": "rect", "label": "Redis Cache" },
    { "op": "createNode", "id": "inventory", "nodeType": "sequence.lifeline", "shape": "rect", "label": "Inventory Service" },
    { "op": "createNode", "id": "payment", "nodeType": "sequence.lifeline", "shape": "rect", "label": "Payment Provider\n(Stripe)" },
    { "op": "createNode", "id": "notify", "nodeType": "sequence.lifeline", "shape": "rect", "label": "Notification Queue" },

    { "op": "createEdge", "id": "m_post", "edgeType": "sequence.message", "from": { "elementId": "client" }, "to": { "elementId": "checkout" }, "label": "POST /checkout" },
    { "op": "createEdge", "id": "m_verify", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "auth" }, "label": "verifyToken(jwt)" },
    { "op": "createEdge", "id": "m_verify_ok", "edgeType": "sequence.reply", "from": { "elementId": "auth" }, "to": { "elementId": "checkout" }, "label": "user_id" },
    { "op": "createEdge", "id": "m_cache_get", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "cache" }, "label": "GET cart:{user_id}" },
    { "op": "createEdge", "id": "m_cache_hit", "edgeType": "sequence.reply", "from": { "elementId": "cache" }, "to": { "elementId": "checkout" }, "label": "cart (hit)" },
    { "op": "createEdge", "id": "m_reserve", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "inventory" }, "label": "reserve(items)" },
    { "op": "createEdge", "id": "m_reserved", "edgeType": "sequence.reply", "from": { "elementId": "inventory" }, "to": { "elementId": "checkout" }, "label": "reservation_id" },

    { "op": "createNode", "id": "note_payment", "nodeType": "sequence.note", "shape": "rect", "label": "Stripe charge with\nidempotency key", "extensions": { "anchor": "payment" } },

    { "op": "createEdge", "id": "m_charge", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "payment" }, "label": "charge($total, idempotency_key)" },
    { "op": "createEdge", "id": "m_charge_ok", "edgeType": "sequence.reply", "from": { "elementId": "payment" }, "to": { "elementId": "checkout" }, "label": "charge_id" },
    { "op": "createEdge", "id": "m_charge_retry", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "payment" }, "label": "charge (retry)" },
    { "op": "createEdge", "id": "m_charge_retry_ok", "edgeType": "sequence.reply", "from": { "elementId": "payment" }, "to": { "elementId": "checkout" }, "label": "charge_id (after retry)" },

    {
      "op": "createFrame",
      "id": "frag_charge",
      "containerType": "fragment",
      "title": "[charge succeeded]",
      "children": ["m_charge", "m_charge_ok", "m_charge_retry", "m_charge_retry_ok"],
      "layout": { "mode": "absolute", "x": 270, "y": 545, "width": 1410, "height": 190 },
      "extensions": { "operator": "alt", "operands": [{ "y": 635, "guard": "retry on 5xx (exp backoff: 1s, 2s, 4s)" }] }
    },

    { "op": "createEdge", "id": "m_commit", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "inventory" }, "label": "commit(reservation_id)" },
    { "op": "createEdge", "id": "m_notify", "edgeType": "sequence.async", "from": { "elementId": "checkout" }, "to": { "elementId": "notify" }, "label": "publish(order_placed)" },
    { "op": "createEdge", "id": "m_self_validate", "edgeType": "sequence.message", "from": { "elementId": "checkout" }, "to": { "elementId": "checkout" }, "label": "build response" },
    { "op": "createEdge", "id": "m_response", "edgeType": "sequence.reply", "from": { "elementId": "checkout" }, "to": { "elementId": "client" }, "label": "200 OK + receipt" }
  ]
}
