diff --git a/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md b/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md index cd0c6325..e2abd55b 100644 --- a/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md +++ b/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md @@ -165,29 +165,44 @@ controller's `plan-moved` event, never inferred from time. ## A stop on a shared walk -*2026-10-11, by ADR 0299 (issue 459).* +*2026-10-11, by ADR 0299 (issue 459), with its progressive insight of the same day.* One walk carries every merge of its batch, so ending a walk for one delivery ends it for every other delivery on it. A stop therefore ends only the change it is for: - **A group's stop.** When a member after a failed one is stopped and its walk is open, mesh-delivery asks `delivery-stop` for that walk with the stopped members' merges to leave out, every member the same pass - stops on that walk in one ask. The controller ends the walk, said as stopped, and puts every other merge it - answered into a fresh batch, its window already closed, which is cut by the usual rules. -- **A merge that contains a stopped merge.** A later merge of the stopped merge's repository and branch - contains it, and cannot be walked without delivering it: it is left out too, and its delivery ends - `stopped`, naming the stopped merge it contains. An earlier merge of that repository is walked again at its - own commit. -- **The walk's record.** The stopped walk names the batch that walks its merges again and every merge it left - out. A delivery whose merge is walked again goes from `delivering` back to `published` (the row `rewalk`), or - stays `published`, and follows the fresh walk once it is cut. A delivery whose merge was left out, and every + stops on that walk in one ask. The controller ends the walk, said as stopped, and walks every other merge + it answered again. +- **What is left out with it.** A later merge of the stopped merge's repository and branch contains it. A + module is built at its branch, so a merge that moves a module a left-out merge moves would deliver it too. + Each such merge is left out as well, until no more is, and its delivery ends `stopped`, naming the stopped + merge it contains or whose modules it shares. An earlier merge of that repository sharing no module is + walked again. +- **Where the others go.** They join the open batch of their kind, where merges heard while the walk ran + already wait, so an older commit never walks after a newer one; only with none open do they form a new + batch. The stop closes that batch's window, and its walk withholds the left-out merges' modules where it + would build them only as dependents. A batch not yet cut can be stopped without a merge too: the merge goes + to a stopped record of its own, and the batch goes on without it. The stopped record, the batch and every + merge moved are written in one transaction. +- **The walk's record.** The stopped walk names the batch that walks its merges again, every merge it left + out, and each module it already sent that nothing walks again, with the machines it reached. A delivery + whose merge is walked again goes from `delivering` back to `published` (the row `rewalk`), or stays + `published`, and follows the fresh walk once it is cut. A delivery whose merge was left out, and every delivery on a walk stopped whole, ends `stopped`, naming the walk and the stop. +- **A stopped merge never ships by a walk.** mesh-delivery asks every open walk or batch that names a stopped + delivery's merge to leave it out, and never gives such a walk its word. When the controller refuses, it + stops the whole walk. - **A person's stop.** `stop` of a delivery whose open walk carries other deliveries does nothing at first: it answers with each of them, which of them contain this merge and end either way, and two ways given with `way`: `again` (the walk ended and the others walked again without this merge) or `walk` (the whole walk - stopped, every delivery on it with it). A delivery alone on its walk is stopped at once. -- **What it does not do.** A merge of the same repository heard after the stop contains the stopped merge and - delivers it when walked: holding a merged change back for good is a revert's job. + stopped, every delivery on it with it). A delivery alone on its walk is stopped at once. A delivery is + marked stopped only once its walk is; a stop the controller refuses leaves it as it was. +- **What it does not do.** What the stopped walk already sent stays on the machines it reached, and its + asked builds still register, so a later send may carry them further; the stop names the machines, and + putting them back is issue 509's. A merge of the same repository waiting elsewhere, or one that moves the + stopped merge's modules, contains the stopped change and delivers it when walked; the stop names each it + can see, and holding a merged change back for good is a revert's job. ## The delivery budget *Decided 2026-10-10 by ADR 0282.