Give a rollout the word of a stopped delivery that waits for it (hq issue 753) #312

Merged
mesh-admin merged 1 commits from fix/753-a-rollout-is-never-left-without-a-word into main 2026-10-14 22:35:39 +00:00
Contributor

Fixes hq issue 753: on 2026-10-14 mesh-catalog's rollout plan (#301, #304, #307) waited forever for mesh-delivery's word, because every delivery it carried was final: #301 stopped by its group for a member delivered since, waiting for a later rollout containing its merge, and the only such rollout waiting for #301's word.

  • (a) A delivery its group stopped for a member delivered since gives its word to the open plan that waits for a word, answers its merge and has not left the merge out (lapsedOn/lapsedTurns/lapsedOf/lapsedAnswered/lapsedBehind in answers.go, from plan() in holder.go), through the existing words(): a living delivery not at its turn still holds the plan, a stop made by a person gives no word, the word is given once per plan (in LetGoWhy). It gives its word only in its group's order: every member ordered before it must have reached the machines, unless that member is also a lapsed stop answered by the same plan; otherwise stalled walks names the member it waits for.
  • (c) A plan held only by lapsed stops stays under the orphans timer: past the grace stalled lists it with why (the member waited for, the last hold, the controller's refusal of the word, or the word given and not started); stalled walks and stalled name every ended delivery a plan with no living delivery carries.
  • (b), covering a delivery whose modules reached every machine through another repository's rollout, is not done: it needs a controller read of each running build's source, and would skip the plan's own steps (backups, resending a provider's consumers).

Tests: issue753_test.go (live shapes; group order; a refused word; a person's stop). gofmt, go vet, go test ./..., MESH_CHECK_MODULES=mesh-delivery merge-check.sh pass. Reviewed independently before push (two rounds): APPROVE at 373f339750.

Fixes hq issue 753: on 2026-10-14 mesh-catalog's rollout plan (#301, #304, #307) waited forever for mesh-delivery's word, because every delivery it carried was final: #301 stopped by its group for a member delivered since, waiting for a later rollout containing its merge, and the only such rollout waiting for #301's word. - (a) A delivery its group stopped for a member delivered since gives its word to the open plan that waits for a word, answers its merge and has not left the merge out (`lapsedOn`/`lapsedTurns`/`lapsedOf`/`lapsedAnswered`/`lapsedBehind` in answers.go, from `plan()` in holder.go), through the existing `words()`: a living delivery not at its turn still holds the plan, a stop made by a person gives no word, the word is given once per plan (in `LetGoWhy`). It gives its word only in its group's order: every member ordered before it must have reached the machines, unless that member is also a lapsed stop answered by the same plan; otherwise `stalled walks` names the member it waits for. - (c) A plan held only by lapsed stops stays under the orphans timer: past the grace `stalled` lists it with why (the member waited for, the last hold, the controller's refusal of the word, or the word given and not started); `stalled walks` and `stalled` name every ended delivery a plan with no living delivery carries. - (b), covering a delivery whose modules reached every machine through another repository's rollout, is not done: it needs a controller read of each running build's source, and would skip the plan's own steps (backups, resending a provider's consumers). Tests: issue753_test.go (live shapes; group order; a refused word; a person's stop). gofmt, go vet, go test ./..., MESH_CHECK_MODULES=mesh-delivery merge-check.sh pass. Reviewed independently before push (two rounds): APPROVE at 373f339750779fc6224a3401b3746a916216ee92.
mesh-admin added 1 commit 2026-10-14 22:31:31 +00:00
Give a walk the word of a stopped delivery that waits for it (hq issue 753)
mesh/merge-gate head 373f33975077 merged into trunk 7913b56d66f7 — pass: builds mesh-delivery → novox; no bus step; every machine composes with the change …
mesh/repo-check head 373f33975077 merged into trunk 7913b56d66f7 — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-…
mesh/delivery delivered
373f339750
A delivery its group stopped for a member delivered since waits for a later
walk of its repository that contains its merge (issue 747). When that walk
carried no living delivery, nothing gave it its word and it waited forever.
The delivery now takes its turn on the walk that answers its merge, in its
group's order. A walk owed such a word stays under the orphans' timer, so
past the grace without it `stalled` lists it with why (held, or the
controller's refusal), and a walk no living delivery holds names the ended
deliveries it carries.
Author
Contributor

Delivery novox/mesh-catalog@373f33975077 — delivered since 2026-10-14T22:36:41Z

Delivery plan — builds mesh-delivery → novox; no bus step

  • tier 0: mesh-delivery
  • novox: receives mesh-delivery

Machines

  • mesh-delivery on every machine running it: sent

Transitions

  • 2026-10-14 22:31 (new) → proposed (announced): novox/mesh-catalog#312's head announced
  • 2026-10-14 22:35 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-14 22:35 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-14 22:35 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-14 22:35 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
  • 2026-10-14 22:36 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@373f33975077` — **delivered** since 2026-10-14T22:36:41Z **Delivery plan** — builds mesh-delivery → novox; no bus step - tier 0: mesh-delivery - novox: receives mesh-delivery **Machines** - mesh-delivery on every machine running it: sent **Transitions** - 2026-10-14 22:31 (new) → proposed (announced): novox/mesh-catalog#312's head announced - 2026-10-14 22:35 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-14 22:35 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-14 22:35 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-14 22:35 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit - 2026-10-14 22:36 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
mesh-admin added the mesh/ready label 2026-10-14 22:31:42 +00:00
Author
Contributor

ready at 373f339750 (the operator's word, 2026-10-15; independent review APPROVE at this sha).

ready at 373f339750779fc6224a3401b3746a916216ee92 (the operator's word, 2026-10-15; independent review APPROVE at this sha).
Author
Contributor

Merge check at 373f3397
Judged: head 373f33975077 merged into trunk 7913b56d66f7; read beside it: mesh-controller 3ed08c3464e3, mesh-controller-main 3ed08c3464e3, mesh-host 1a2677882380, mesh-tools 5d70eb3e35a9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-delivery)
  • mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)

Delivery plan — builds mesh-delivery → novox; no bus step

  • tier 0: mesh-delivery
  • novox: receives mesh-delivery
  • read by no module's build: modules/mesh-delivery/cmd/mesh-delivery/fakes_test.go, modules/mesh-delivery/cmd/mesh-delivery/issue753_test.go

Run by the build seat on novox as build-1792017093275012514 (builds --log build-1792017093275012514).

--- the gate: mesh-delivery
mesh-delivery: ok, 1 tool(s), invokes seat:mesh-controller.delivery-plan, seat:mesh-controller.delivery-order, seat:mesh-controller.delivery-check, seat:mesh-controller.deliver, seat:mesh-controller.delivery-stop, seat:mesh-controller.delivery-walks, seat:mesh-controller.forget-checks, gitea.gitea_note_append, gitea.gitea_delivery_view, gitea.gitea_commit_status, gitea.gitea_commit_statuses, gitea.gitea_contains, gitea.gitea_open_pulls, gitea.gitea_merge_pull_request, gitea.gitea_add_comment, gitea.gitea_api, keeps state deliveries, groups
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-14T22:08:46Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-14T22:08:46Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 1 module(s) in 1 tier(s): mesh-delivery

notes:
  - modules/mesh-delivery/cmd/mesh-delivery/fakes_test.go and modules/mesh-delivery/cmd/mesh-delivery/issue753_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	git.novox.be/novox/mesh-catalog/checks/words	0.003s
words: 12 retired words and 70 daemons' lines, none in the 47507 strings of 726 files
ok  	git.novox.be/novox/mesh-catalog/checks/agenthome	0.015s
agent-home: no archive and no file written into under the agent's home
ok  	git.novox.be/novox/mesh-catalog/checks/secrets	0.014s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
ok  	git.novox.be/novox/mesh-catalog/checks/paths	0.006s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 62, as kept
ok  	git.novox.be/novox/mesh-catalog/checks/deps	0.467s
testing modules/mesh-delivery
ok  	mesh-delivery/cmd/mesh-delivery	4.187s
--- its merge-check-typescript.sh (typescript toolchain)
**Merge check** at `373f3397` Judged: head `373f33975077` merged into trunk `7913b56d66f7`; read beside it: mesh-controller `3ed08c3464e3`, mesh-controller-main `3ed08c3464e3`, mesh-host `1a2677882380`, mesh-tools `5d70eb3e35a9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-delivery) - `mesh/repo-check`: **PASS** — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript) **Delivery plan** — builds mesh-delivery → novox; no bus step - tier 0: mesh-delivery - novox: receives mesh-delivery - read by no module's build: modules/mesh-delivery/cmd/mesh-delivery/fakes_test.go, modules/mesh-delivery/cmd/mesh-delivery/issue753_test.go Run by the build seat on novox as `build-1792017093275012514` (`builds --log build-1792017093275012514`). ``` --- the gate: mesh-delivery mesh-delivery: ok, 1 tool(s), invokes seat:mesh-controller.delivery-plan, seat:mesh-controller.delivery-order, seat:mesh-controller.delivery-check, seat:mesh-controller.deliver, seat:mesh-controller.delivery-stop, seat:mesh-controller.delivery-walks, seat:mesh-controller.forget-checks, gitea.gitea_note_append, gitea.gitea_delivery_view, gitea.gitea_commit_status, gitea.gitea_commit_statuses, gitea.gitea_contains, gitea.gitea_open_pulls, gitea.gitea_merge_pull_request, gitea.gitea_add_comment, gitea.gitea_api, keeps state deliveries, groups long-running resources without health: 0 files asking for a setting without saying whether it is trusted: 0 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-14T22:08:46Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-14T22:08:46Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 1 module(s) in 1 tier(s): mesh-delivery notes: - modules/mesh-delivery/cmd/mesh-delivery/fakes_test.go and modules/mesh-delivery/cmd/mesh-delivery/issue753_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok git.novox.be/novox/mesh-catalog/checks/words 0.003s words: 12 retired words and 70 daemons' lines, none in the 47507 strings of 726 files ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.015s agent-home: no archive and no file written into under the agent's home ok git.novox.be/novox/mesh-catalog/checks/secrets 0.014s secrets: no setting can replace a vault secret in a mergeable file (1 known, nested) ok git.novox.be/novox/mesh-catalog/checks/paths 0.006s paths: no module names another's state on its machine (3 known, listed to go) long-running resources without health: 62, as kept ok git.novox.be/novox/mesh-catalog/checks/deps 0.467s testing modules/mesh-delivery ok mesh-delivery/cmd/mesh-delivery 4.187s --- its merge-check-typescript.sh (typescript toolchain) ```
mesh-admin merged commit 5ce2d07c7f into main 2026-10-14 22:35:39 +00:00
mesh-admin deleted branch fix/753-a-rollout-is-never-left-without-a-word 2026-10-14 22:35:39 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#312