{
  "name": "Request to Action | Tern Harbor demo",
  "nodes": [
    {
      "parameters": {},
      "id": "f150d2eb-18db-4d54-b746-a9bbd85824fd",
      "name": "Run demo",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "return [\n  {\n    \"request\": {\n      \"id\": \"R-01\",\n      \"reference\": \"TH-410\",\n      \"account_id\": \"AC-01\",\n      \"requester\": \"Bayside dispatch\",\n      \"category\": \"access\",\n      \"summary\": \"Give our new dispatcher access to the work order view.\",\n      \"channel\": \"Form\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"accepted\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-02\",\n      \"reference\": \"TH-411\",\n      \"account_id\": \"AC-02\",\n      \"requester\": \"\",\n      \"category\": \"billing\",\n      \"summary\": \"Review an invoice with two service fees.\",\n      \"channel\": \"Email\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"accepted\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-03\",\n      \"reference\": \"TH-405\",\n      \"account_id\": \"AC-02\",\n      \"requester\": \"Cedar finance\",\n      \"category\": \"billing\",\n      \"summary\": \"Following up on the invoice adjustment we sent yesterday.\",\n      \"channel\": \"Chat\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"accepted\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-04\",\n      \"reference\": \"TH-412\",\n      \"account_id\": \"AC-03\",\n      \"requester\": \"Hilltop shift lead\",\n      \"category\": \"operations\",\n      \"summary\": \"The field team cannot see any of today’s work orders.\",\n      \"channel\": \"Form\",\n      \"blocking\": true,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"accepted\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-05\",\n      \"reference\": \"TH-413\",\n      \"account_id\": \"AC-01\",\n      \"requester\": \"Bayside operations\",\n      \"category\": \"other\",\n      \"summary\": \"A partner asked about reusing service records.\",\n      \"channel\": \"Chat\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"accepted\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-06\",\n      \"reference\": \"TH-414\",\n      \"account_id\": \"AC-01\",\n      \"requester\": \"Bayside manager\",\n      \"category\": \"billing\",\n      \"summary\": \"Update the purchase order reference for October.\",\n      \"channel\": \"Email\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"ack_lost\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-07\",\n      \"reference\": \"TH-405\",\n      \"account_id\": \"AC-02\",\n      \"requester\": \"Cedar finance\",\n      \"category\": \"billing\",\n      \"summary\": \"I found the second charge for Friday’s visit.\",\n      \"channel\": \"Chat\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"Second receipt: TH-405-B. Both charges cleared.\",\n      \"delivery\": \"accepted\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  },\n  {\n    \"request\": {\n      \"id\": \"R-08\",\n      \"reference\": \"TH-415\",\n      \"account_id\": \"AC-03\",\n      \"requester\": \"Hilltop shift lead\",\n      \"category\": \"operations\",\n      \"summary\": \"The east crew is missing two work orders for tomorrow.\",\n      \"channel\": \"Form\",\n      \"blocking\": false,\n      \"received_at\": \"2026-10-12T14:00:00Z\",\n      \"update_note\": \"\",\n      \"delivery\": \"before_write\"\n    },\n    \"history\": [\n      {\n        \"reference\": \"TH-405\",\n        \"account_id\": \"AC-02\",\n        \"queue\": \"Billing\",\n        \"channel\": \"Email\",\n        \"ticket_id\": \"BL-184\",\n        \"received_at\": \"2026-10-12T10:00:00Z\",\n        \"target_hours\": 24,\n        \"source_request_id\": \"original-405\",\n        \"last_update\": \"\"\n      },\n      {\n        \"reference\": \"TH-396\",\n        \"account_id\": \"AC-03\",\n        \"queue\": \"Customer Ops\",\n        \"channel\": \"Form\",\n        \"ticket_id\": \"CS-139\",\n        \"received_at\": \"2026-10-12T09:00:00Z\",\n        \"target_hours\": 8,\n        \"source_request_id\": \"original-396\",\n        \"last_update\": \"\"\n      }\n    ]\n  }\n].map(json => ({ json }));"
      },
      "id": "4cc828e4-c265-41eb-ac0d-ae285709915b",
      "name": "Load synthetic requests",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "function routeRequest(request, history, options = {}) {\n  const clean = value => typeof value === 'string' ? value.trim() : '';\n  const reference = clean(request.reference).toUpperCase();\n  const account = clean(request.account_id).toUpperCase();\n  const key = account && reference ? account + '/' + reference : '';\n  const source = clean(request.channel) || 'Form';\n  const updateNote = clean(request.update_note);\n  const missing = [\n    ['requester', 'requester'],\n    ['account_id', 'account'],\n    ['reference', 'request reference'],\n    ['summary', 'summary'],\n  ].filter(([field]) => !clean(request[field])).map(([, label]) => label);\n  const trace = [{ step: 'Receive', message: source + ' · ' + (reference || 'no reference') }];\n  const result = (status, values = {}) => ({ status, key, queue: null, targetHours: null, ticketId: null,\n    receivedAt: null, dueAt: null, change: null, ...values, trace });\n  const timing = row => ({\n    queue: row.queue, targetHours: row.target_hours, receivedAt: row.received_at,\n    dueAt: new Date(Date.parse(row.received_at) + row.target_hours * 3600000).toISOString(),\n  });\n  if (missing.length) {\n    trace.push({ step: 'Validate', message: 'Missing ' + missing.join(', ') + '.' });\n    return result('needs_info', { missing });\n  }\n  if (!Number.isFinite(Date.parse(request.received_at))) {\n    trace.push({ step: 'Validate', message: 'A valid intake timestamp is required for the response clock.' });\n    return result('needs_info', { missing: ['intake timestamp'] });\n  }\n  trace.push({ step: 'Validate', message: 'The request has the fields needed to check for an existing ticket.' });\n\n  const existing = history.find(item =>\n    clean(item.reference).toUpperCase() === reference && clean(item.account_id).toUpperCase() === account\n  );\n  if (existing) {\n    trace.push({ step: 'Look up ticket', message: key + ' matches ' + existing.ticket_id + ' from ' + existing.channel + '.' });\n    const details = { ...timing(existing), ticketId: existing.ticket_id };\n    if (options.reconcile) {\n      trace.push({ step: 'Reconcile', message: 'A ticket is already present. Recover the existing ID without a second write.' });\n      return result('reconciled', details);\n    }\n    const updates = existing.updates ?? (existing.last_update ? [existing.last_update] : []);\n    if (updateNote && !updates.includes(updateNote)) {\n      trace.push({ step: 'Append update', message: 'New evidence is added to ' + existing.ticket_id + '. Its owner and original response deadline are kept.' });\n      return result('updated', { ...details, change: { type: 'update', ticket: { ...existing, last_update: updateNote, updates: [...updates, updateNote] } } });\n    }\n    trace.push({ step: 'Link repeat', message: 'No new evidence to append. Keep the existing ticket and response deadline.' });\n    return result('duplicate', details);\n  }\n  trace.push({ step: 'Look up ticket', message: 'No ticket matches ' + key + '.' });\n\n  const queues = {\n    access: { queue: 'Customer Ops', target_hours: 8 },\n    billing: { queue: 'Billing', target_hours: 24 },\n    operations: { queue: 'Field Operations', target_hours: 12 },\n  };\n  const category = clean(request.category).toLowerCase();\n  const categoryRoute = Object.hasOwn(queues, category) ? queues[category] : null;\n  const route = request.blocking === true ? { queue: 'Incident Response', target_hours: 2 } : categoryRoute;\n  if (!route) {\n    trace.push({ step: 'Assign', message: 'No queue rule covers this category. A person must review it.' });\n    return result('needs_review', { queue: 'Manual triage' });\n  }\n  const ticket = {\n    reference, account_id: account, ...route, channel: source,\n    ticket_id: 'CASE-' + account + '-' + reference,\n    received_at: request.received_at, source_request_id: request.id ?? key, last_update: updateNote,\n    updates: updateNote ? [updateNote] : [],\n  };\n  const details = timing(ticket);\n  trace.push({ step: 'Assign', message: route.queue + ' · ' + route.target_hours + 'h from intake.' });\n  if (options.delivery === 'before_write') {\n    trace.push({ step: 'Dispatch', message: 'The queue rejected the write before saving. No ticket exists yet.' });\n    return result('retry', details);\n  }\n  const change = { type: 'create', ticket };\n  if (options.delivery === 'ack_lost') {\n    trace.push({ step: 'Dispatch', message: 'The queue timed out. Look up the original key before attempting another write.' });\n    return result('confirm_pending', { ...details, change });\n  }\n  trace.push({ step: 'Dispatch', message: 'The simulated queue confirmed ' + ticket.ticket_id + '.' });\n  return result('routed', { ...details, ticketId: ticket.ticket_id, change });\n}\nfunction applyTicketChange(history, change) {\n  if (!change) return history;\n  const { ticket } = change;\n  if (change.type === 'update') return history.map(item => item.ticket_id === ticket.ticket_id ? ticket : item);\n  return history.some(item => item.account_id === ticket.account_id && item.reference === ticket.reference)\n    ? history : [...history, ticket];\n}\n\nreturn $input.all().map(({ json }, index) => {\n  const { request, history } = json;\n  const first = routeRequest(request, history, { delivery: request.delivery });\n  let stored = applyTicketChange(history, first.change);\n  let retry = null;\n  if (first.status === 'retry' || first.status === 'confirm_pending') {\n    retry = routeRequest(request, stored, { reconcile: true, delivery: 'accepted' });\n    stored = applyTicketChange(stored, retry.change);\n  }\n  const final = retry ?? first;\n  return {\n    json: {\n      id: request.id,\n      ...final,\n      status: first.status === 'retry' && retry?.status === 'routed' ? 'routed_after_retry' : final.status,\n      first_status: first.status,\n      final_status: final.status,\n      first_trace: first.trace,\n      retry_trace: retry?.trace ?? [],\n      writes: Number(Boolean(first.change)) + Number(Boolean(retry?.change)),\n      tickets_added: stored.length - history.length,\n    },\n    pairedItem: { item: index },\n  };\n});\n"
      },
      "id": "9a786193-31d5-40ad-9ea8-8a2ba3930110",
      "name": "Route and reconcile",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        480,
        0
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-routed",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "routed",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Routed"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-needs_info",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "needs_info",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Needs information"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-duplicate",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "duplicate",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Linked repeat"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-updated",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "updated",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Updated existing ticket"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-needs_review",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "needs_review",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Manual triage"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-routed_after_retry",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "routed_after_retry",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Created on retry"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "is-reconciled",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "reconciled",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Recovered existing ticket"
            }
          ]
        },
        "options": {}
      },
      "id": "8ccb7cb0-0f5b-4815-9eba-6b275f40884f",
      "name": "Choose outcome",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        720,
        0
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f0",
      "name": "Routed",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        -264
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f1",
      "name": "Needs information",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        -132
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f2",
      "name": "Linked repeat",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        0
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f3",
      "name": "Updated existing ticket",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        132
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f4",
      "name": "Manual triage",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        264
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f5",
      "name": "Created on retry",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        396
      ]
    },
    {
      "parameters": {},
      "id": "37de9bbb-4734-42cf-8a6a-51df5b3bb5f6",
      "name": "Recovered existing ticket",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        980,
        528
      ]
    }
  ],
  "connections": {
    "Run demo": {
      "main": [
        [
          {
            "node": "Load synthetic requests",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Load synthetic requests": {
      "main": [
        [
          {
            "node": "Route and reconcile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route and reconcile": {
      "main": [
        [
          {
            "node": "Choose outcome",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Choose outcome": {
      "main": [
        [
          {
            "node": "Routed",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Needs information",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Linked repeat",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Updated existing ticket",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Manual triage",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Created on retry",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Recovered existing ticket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}
