Design and implement a Workflow Engine that executes a deterministic DAG-based workflow for DoorDash customer-support ticket resolution. The engine receives two inputs: (1) a workflow definition represented as a DAG whose nodes are typed actions or decisions (START, END, IS_LATE, FULL_REFUND, PARTIAL_REFUND, SEND_EMAIL, etc.) and whose edges encode control flow, and (2) a ticket object (JSON) containing fields such as order_time, delivery_time, refund_amount, customer_email, etc. Your engine must traverse the DAG beginning at the unique START node, evaluate decision nodes by applying their boolean condition to the ticket, follow the corresponding true/false edge, execute action nodes by producing an effect (e.g., record refund, queue email), and terminate when it reaches any END node. The output is the ordered list of action nodes that were executed. You must validate that the workflow is a DAG (no cycles), that START and at least one END exist, and that every node is reachable; otherwise raise an error before execution. You may use Cursor/Copilot to scaffold the graph structure, node-evaluation logic, and tests; clarity of prompts and iterative refinement are part of the assessment.