The idea is straightforward: if some task produces a broken output, you will need to "undo" it, as well as all dependent tasks. Since we have access to the structure of the workflow, we can create a "rollback-workflow" by reversing dependencies and replacing each task with its "rollback-task" (plus, cutting out the OK part, of course).
The idea is straightforward: if some task produces a broken output, you will need to "undo" it, as well as all dependent tasks. Since we have access to the structure of the workflow, we can create a "rollback-workflow" by reversing dependencies and replacing each task with its "rollback-task" (plus, cutting out the OK part, of course).