Hi Maxime,
The use-case is as described above. When there are many DAG runs at the same time, a downstream task will not get run until all upstream tasks in all runs have finished.
In my instance, my workflow has three layers, the first layer has a task that locks an object, that object is then worked on by several tasks in parallel in the second layer, and the object is then unlocked in the third layer. Once the work is completed, I'd want the object to get unlocked as soon as possible, but instead the last task never gets scheduled until all objects (across all dag runs) have finished processing, then they all get unlocked.
If you think about priority as a proxy for value then it makes sense to me that priority should increase the deeper you go into a DAG, because you would have done work towards a goal (by completing some tasks along a path), but not achieved the final goal (end of the run) thus you should want to achieve the end of the run that delivers that run's value before you schedule tasks from other runs that are not as far along. This makes each run as short as possible, which I think is desirable in a distributed system in terms of limiting the exposure of intermediate results to adverse external events, as well as minimizing resource locks.
This kind of execution would be achieved if instead of adding priority weights in a subtree you would add weights of ancestors from up the tree.