You are building a workflow scheduler. Each task has a unique task_id, an integer deadline, and an optional list of prerequisite tasks that must be completed before this task becomes ready. The dependency graph is guaranteed to be a DAG. Starting with all ready tasks (those whose prerequisites are already satisfied), repeatedly choose the ready task with the smallest deadline. If multiple ready tasks share the same deadline, choose the one with the smaller task_id. Mark that task as completed, unlock any tasks whose prerequisites are now all done, and continue until every task is scheduled. Return the full execution order as a list of task_ids. You must optimize the selection of the next ready task by using an efficient data structure (a min-heap) instead of scanning the full ready list each time.