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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user