← THE BUILD LOG
005AGENTS · STILL BUILDING

Teaching a linear method to run in parallel

A railway point in wet steel, one rail splitting into three.
A railway point in wet steel, one rail splitting into three. Illustration.

What it is

BMAD plans work well and then executes it in a straight line. Luvus schedules agents across a board and does not care what put the cards there. Agent-board sits between them: it translates a BMAD sprint into board cards, works out what can run at the same time, and schedules it.

267 commits in about 36 hours on 16 and 17 September 2026. It is running waves against its own board while I write this, which is why it is filed as still building.

Why I built it

Watching a plan execute one story at a time when four of them touched nothing in common. The method had produced a good plan and then thrown away most of what the plan told it, because its dev loop does not infer a dependency graph. It just goes down the list.

The information needed to parallelise was already there. Nothing was reading it.

The problem

Working out what can genuinely run at once is the whole job, and it is not a graph problem so much as a file problem. Two stories are independent when they do not write the same files, and a plan does not say which files a story will touch. It says what the story is for.

So the translation has to infer scope, then be conservative about it, because the cost of being wrong is two agents editing one file and a merge nobody wants to read. It is better to run three things when four were possible than to run four and lose an afternoon.

I also pulled the method out of the project it grew inside. It started as part of the fitness build, and anything built inside one repository ends up welded to that repository’s shape. Extracting it before it worked properly was the right order, though it did not feel like it at the time.

What I learnt

The thing worth recording went wrong on the page rather than in the code. The status document claimed nothing was written yet, that stopped being true within hours, and it stayed there for the rest of the day. I have caught the same thing before and it is the same class of mistake: a document that describes an intention is treated by everyone, including me, as if it describes reality.

A status line should be generated from something, or dated so obviously that a stale one looks stale.

What’s next

It is mid-flight. The near work is making the scope inference less cautious without making it wrong, and deciding whether the translation belongs in the method or beside it. Both are open.


Built with Python, BMAD, Luvus
Code On my own git host, so there is no link. The writing is the record.
JOHN · #AlwaysBuildingSomething