Specify that task provides/requires must be an immutable set.
Have the linear workflow verify the tasks inputs.

When a task is added ensure that the previous task, if
it exists creates the neccasary outputs for the task to
be added. If it does not then throw an exception.