You probably already realized this, but the current reason that skipped tasks are kept in the pipeline is for progress/history recording. We only want to record these things at the end of the pipeline and we need to do them in order, so it won't suffice to record history early at the point where we decide to skip the task. I'm not sure what the way around this would be.