This page was translated automatically from English, the only language this site is written in. Read the original.
Execution waves are computed from the graph, and issues in one wave that touch the same paths are reported as serialised
A wave is the set of issues whose dependencies are all satisfied at the same depth. Wave zero is every root; an issue sits one layer past its deepest dependency. Waves are derived on every read and stored nowhere, so no execution plan can go stale. Sharing a wave is necessary for two issues to run concurrently and is not sufficient: if their declared scope paths overlap, the overlap is reported and they are serialised.
declared status○declared status: guaranteedDeclared deterministic and blocking, implemented, and naming the behavioural test that is to prove it. Whether a recorded run supports it is the evidence verdict, shown beside it.
recorded evidence○recorded evidence: not runDeclared guaranteed, and not supported by a recorded run: the test is named, and no passing run of the current inputs is recorded. how evidence is recorded
Sharing a wave is necessary for concurrency, not sufficient. Overlapping declared scope serialises conservatively, because a false serialisation costs time and a false parallel costs a conflict.
A wave is the set of issues whose dependencies are all satisfied at the same depth. Wave zero is every root; an issue sits one layer past its deepest dependency. Waves are derived on every read and stored nowhere, so no execution plan can go stale. Sharing a wave is necessary for two issues to run concurrently and is not sufficient: if their declared scope paths overlap, the overlap is reported and they are serialised.
The same Kahn layering that detects cycles assigns the waves. Scope conflict is a containment test on the declared paths of two issues in the same wave that are both READY or ACTIVE; a path equal to, inside, or containing another counts as an overlap.
majordomus plan waves# Wave 1# I0002 READY …# I0003 READY …## serialised by scope overlap:# I0002 shares lib/project.awk with I0003; they may not run concurrently
Scope is what an issue declares, not what it touches. Two issues that both edit a file neither of them claimed will conflict, and this reports nothing — the same limit check has.
A false serialisation costs time. A false parallel costs a merge conflict and two workers discovering it after the work is done. The conservative direction is the cheap one.