{
  "schemaVersion": "flowdrome.workflow.v1",
  "id": "",
  "name": "Overnight alerts — digest into one summary",
  "version": "0",
  "status": "draft",
  "nodes": [
    {
      "id": "seed",
      "type": "input.inject",
      "label": "First alert",
      "category": "trigger",
      "config": {
        "contentType": "application/json",
        "payload": {
          "alert": "disk 91% on host-2"
        }
      },
      "position": {
        "x": 0,
        "y": 0
      }
    },
    {
      "id": "d1",
      "type": "processing.digest",
      "label": "Digest (1st)",
      "category": "flow",
      "config": {
        "key": "nd-digest-mrsqq3nq",
        "mode": "collect",
        "releaseCount": 3,
        "maxHeld": 100
      },
      "position": {
        "x": 530,
        "y": 0
      }
    },
    {
      "id": "d2",
      "type": "processing.digest",
      "label": "Digest (2nd)",
      "category": "flow",
      "config": {
        "key": "nd-digest-mrsqq3nq",
        "mode": "collect",
        "releaseCount": 3,
        "maxHeld": 100
      },
      "position": {
        "x": 2120,
        "y": 0
      }
    },
    {
      "id": "d3",
      "type": "processing.digest",
      "label": "Digest (3rd)",
      "category": "flow",
      "config": {
        "key": "nd-digest-mrsqq3nq",
        "mode": "collect",
        "releaseCount": 3,
        "maxHeld": 100
      },
      "position": {
        "x": 3710,
        "y": 0
      }
    },
    {
      "id": "a2",
      "type": "processing.set",
      "label": "Second alert",
      "category": "processing",
      "config": {
        "mode": "manual",
        "assignments": [
          {
            "name": "alert",
            "type": "string",
            "value": "tls cert expires in 6 days"
          }
        ],
        "include": "none",
        "dotNotation": true,
        "ignoreConversionErrors": false
      },
      "position": {
        "x": 1590,
        "y": 0
      }
    },
    {
      "id": "a3",
      "type": "processing.set",
      "label": "Third alert",
      "category": "processing",
      "config": {
        "mode": "manual",
        "assignments": [
          {
            "name": "alert",
            "type": "string",
            "value": "queue depth 12k and climbing"
          }
        ],
        "include": "none",
        "dotNotation": true,
        "ignoreConversionErrors": false
      },
      "position": {
        "x": 3180,
        "y": 0
      }
    },
    {
      "id": "held1",
      "type": "utility.console",
      "label": "Still collecting",
      "category": "utility",
      "config": {
        "message": "held — {{ $json.count }} so far"
      },
      "position": {
        "x": 1060,
        "y": 0
      }
    },
    {
      "id": "held2",
      "type": "utility.console",
      "label": "Still collecting (2)",
      "category": "utility",
      "config": {
        "message": "held — {{ $json.count }} so far"
      },
      "position": {
        "x": 2650,
        "y": 0
      }
    },
    {
      "id": "summary",
      "type": "utility.console",
      "label": "One summary",
      "category": "utility",
      "config": {
        "message": "MORNING SUMMARY — {{ $json.count }} alerts: {{ $json.items }}"
      },
      "position": {
        "x": 4240,
        "y": 0
      }
    }
  ],
  "edges": [
    {
      "id": "e0",
      "sourceNodeId": "seed",
      "sourcePort": "output",
      "targetNodeId": "d1",
      "targetPort": "input"
    },
    {
      "id": "e1",
      "sourceNodeId": "d1",
      "sourcePort": "held",
      "targetNodeId": "held1",
      "targetPort": "input"
    },
    {
      "id": "e2",
      "sourceNodeId": "held1",
      "sourcePort": "output",
      "targetNodeId": "a2",
      "targetPort": "input"
    },
    {
      "id": "e3",
      "sourceNodeId": "a2",
      "sourcePort": "output",
      "targetNodeId": "d2",
      "targetPort": "input"
    },
    {
      "id": "e4",
      "sourceNodeId": "d2",
      "sourcePort": "held",
      "targetNodeId": "held2",
      "targetPort": "input"
    },
    {
      "id": "e5",
      "sourceNodeId": "held2",
      "sourcePort": "output",
      "targetNodeId": "a3",
      "targetPort": "input"
    },
    {
      "id": "e6",
      "sourceNodeId": "a3",
      "sourcePort": "output",
      "targetNodeId": "d3",
      "targetPort": "input"
    },
    {
      "id": "e7",
      "sourceNodeId": "d3",
      "sourcePort": "digest",
      "targetNodeId": "summary",
      "targetPort": "input"
    }
  ],
  "triggers": [
    {
      "id": "t0",
      "nodeId": "seed"
    }
  ],
  "meta": {
    "snippets": [],
    "source": "template-gallery",
    "description": "Three alerts drip in; a Digest (release at 3) holds them under one shared key and releases ONE batch — the third append hands a single { count, items } summary to the console instead of three separate pings. Pair a flush-mode Digest with a Schedule trigger for time-based digests (\"every morning, everything that arrived overnight\")."
  }
}