Adam, Along with initializer/finalizer type actions, we have found a need for "precondition" type actions. It would work like this: once the DAG was used to figure out all tasks that must execute, any preconditions for all those tasks would be run. These could check that the system/environment is configured correctly for that task. For instance, Gradle's own build script could use a precondition to check that the gradle_installPath property has been defined if the "install" task will be run. If not, the build could quickly fail, rather than run though a bunch of (potentially time consuming) dependent tasks before reaching a task that fails because of a missing property.
-- John Murph Automated Logic Research Team
