In addition to the artifacts already consumed by build targets, I'm reasonably confident that the dependency tree can be implemented with a "Depends On" typeahead for build steps, and an implicit artifact created from previous build targets. This would allow the construction of advanced dependency trees between build steps, like so:
```
a
/|\
/ | \
/ | \
/ | \
b c d
\ |
\ |
\ |
\|
e____
/|\ \
/ | \ \
/ | \ \
/ | \ \
f g h i
\ | \ |
\ | \ |
\ | \|
\| j
k
```
The build is considered successful only if all targets are currently in a successful state (or more accurately, we can re-run the steps in "failure steps", "success steps" when there are no more targets running to re-evaluate the build state).