v2.14.0 ·
Merged roadmap items leave hold when the work ships
Merging is how AIDLC keeps a backlog small. When two roadmap items are about the same thing, one
becomes the carrier, the other gets parked in hold/ with a reason like "merged into
item-20261009-hygiene-tests-read-the-checkout-path", and its criteria move into a ## Merged from
section on the carrier.
Then the carrier ships, and nothing happens to the parked one. It sits in hold/ forever, looking
exactly like work that is still waiting. In one project I use, 27 of the 51 items in hold/ were
merge stubs, and 13 of those belonged to carriers that were already done. Asking "what is waiting,
and why" meant opening every file.
What changed
When an instance finishes and its roadmap item moves to done/, every item merged into it moves
too, in the same step. Each one gets a history line saying which carrier took it:
roadmap: 20261010-stub-a.md merged into item-20261009-carrier → done/
roadmap: moved 1 of 1 merged item(s) to done/, 0 left in hold/
For carriers that finished before this existed, aidlc doctor does the same sweep once. On a copy
of that project's roadmap it moved 4 stubs and hold/ went from 51 items to 47.
Why it does not move all 13
An item only moves when the carrier says it took it, with a ## Merged from <id> heading. The other
9 stubs pointed at done carriers that never wrote that heading. Maybe the criterion was carried and
nobody wrote it down. Maybe it was dropped. The files cannot tell me which, so doctor lists those 9
by name and moves none of them. Filing them away would bury exactly the case worth a second look.
The parser was the part I got wrong first. That project writes merges three ways in the hold
reason or the opening line, and I checked for those. The first dry run reported 7 unrecorded stubs
instead of 9. The missing two opened with a blockquote, > **Merged 2026-09-17** into, a fourth
shape I had not looked for. I widened the rule and the count came out right.
What it does not do
It does not change how merging works, and it does not touch items parked for any other reason. It
also does not write the missing headings. Those 9 stubs stay in hold/ until a person checks each
carrier and either adds the heading or parks the item again with a real reason.