so targets on the whole currently do get built in ...
# general
a
so targets on the whole currently do get built in topological order, if the tasks are implemented correctly, and the v2 engine is intended to make this correspondence less complex and less dependent on writing a task "correctly" (among other things). but the basic v1 model is "each task looks at all the targets, finds which targets are relevant to it/invalidated, does some processing on each one (e.g. compiles it), then populates a product that it declares in its
product_types
method". other tasks will declare
round_manager.require(<product>)
or
round_manager.require_data(<product>)
, and the round manager (v1 engine) will ensure (ish) that the tasks are run in the right order. you can provide
topological_order
(i think that's the right kwarg name) to a
self.invalidated
call to get all the invalidated targets for a single task in a topological order (which i think is what you were asking)