Say in to-be 47 where a stop's other merges go, what stays on the machines, and that a stopped merge never ships by a walk (ADR 0299's insight, issue 459)

This commit is contained in:
2026-10-11 21:16:05 +02:00
parent d954e34277
commit f8efb08b3d
@@ -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.