Glossary

Wave plan: parallel batches separated by a barrier

2 min read

A wave plan organises tasks into batches — waves — that run in parallel, with a barrier between them: nothing in wave N+1 starts until everything in wave N has finished.

The barrier is the entire point. Without it you have a work queue, which keeps agents busier and gives you no moment at which the repository is in a state somebody can look at.

What the barrier buys

A reviewable state. After a wave completes there is a coherent tree to inspect. In a continuous queue the tree is always mid-flight, so "is this working" has no answer you can hold still long enough to check.

Bounded blast radius. A bad plan discovered in wave two has done two waves of damage, not the whole graph.

Contention you can reason about. File ownership only has to be disjoint within a wave — a far weaker property than global disjointness, and one that can actually be checked before dispatch.

Its measurable shape

Two of the six numbers in DevPilot's plan score describe wave structure specifically: maxParallelism, the widest wave, and waveEfficiency, the average tasks per wave.

The gap between them is the diagnostic. A peak of 8 against an average of 2 is one enormous wave and a long thin tail — meaning concurrency limits sized for a burst that happens once. Peak and average close together is a smooth plan. Reading the rest of the score covers what the other four say.

When a wave plan is the wrong shape

If tasks are genuinely independent — a hundred files needing the same mechanical transform, no shared state, no ordering — a queue is better and the barrier is pure overhead. Waves earn their cost when work has dependencies or contention, which describes most feature work and almost no bulk-edit work.

The tell: whether "what should I look at after step one" has a meaningful answer. If it does, you want waves. The longer comparison works through the trade.

Relationship to the floor

Widening waves cannot beat the critical path. A barrier can only make a plan slower than its longest dependency chain, never faster — so a wave containing one long task and five short ones costs nothing, while a wave that forces a critical-path task to wait behind unrelated work is a scheduling error.