{
  "name": "orders_etl_cyclic",
  "description": "INTENTIONALLY INVALID as a DAG: the same topology plus a back edge from notify_owner to ingest_orders, which makes it cyclic.",
  "acyclic": false,
  "nodes": [
    {
      "id": "ingest_orders",
      "kind": "task"
    },
    {
      "id": "validate_orders",
      "kind": "task"
    },
    {
      "id": "transform_orders",
      "kind": "task"
    },
    {
      "id": "load_warehouse",
      "kind": "task"
    },
    {
      "id": "refresh_dashboard",
      "kind": "task"
    },
    {
      "id": "notify_owner",
      "kind": "task"
    }
  ],
  "edges": [
    {
      "from": "ingest_orders",
      "to": "validate_orders"
    },
    {
      "from": "validate_orders",
      "to": "transform_orders"
    },
    {
      "from": "transform_orders",
      "to": "load_warehouse"
    },
    {
      "from": "transform_orders",
      "to": "refresh_dashboard"
    },
    {
      "from": "load_warehouse",
      "to": "notify_owner"
    },
    {
      "from": "refresh_dashboard",
      "to": "notify_owner"
    },
    {
      "from": "notify_owner",
      "to": "ingest_orders"
    }
  ],
  "expected": {
    "nodeCount": 6,
    "edgeCount": 7,
    "hasCycle": true,
    "cycle": [
      "ingest_orders",
      "validate_orders",
      "transform_orders",
      "load_warehouse",
      "notify_owner",
      "ingest_orders"
    ]
  }
}
