pub async fn execute_dag(
workflow_name: &str,
steps: &[DagWorkflowStep],
input: &str,
executor: Arc<dyn StepExecutor>,
) -> DagExecutionResultExpand description
Execute a DAG workflow using the provided step executor.
This is the core DAG execution engine. Steps with no dependencies (roots) run
first. When a step completes, any step whose dependencies are now all satisfied
is scheduled. Steps with no mutual dependencies run concurrently using
tokio::task::JoinSet for true multi-threaded parallelism.