Cover a failed or stopped delivery once a later finished walk contains it (hq issue 747) #308

Merged
mesh-admin merged 1 commits from fix/747-a-failed-member-is-covered-by-a-later-walk into main 2026-10-14 21:30:10 +00:00
Contributor

Fixes hq issue 747: a failed group member stayed failed after a later walk delivered it, and its stopped group stopped every catalogue walk (today: controller #336's group stops #301/#304/#307).

  • Each pass, a failed or stopped delivery whose repository has a done walk that contains its merge (the forge's answer) and built every module its plan moves is read as covered (DeliveredBy); the state stays final, the forge is told once (as for issue 480), and the group counts it delivered.
  • A member stopped for it (StoppedFor, read back from the stop reason for old records) no longer holds walks back.
  • While the forge's containment answer is pending or erroring, the walk is held for at most 10 minutes and the hold is said in waits, stalled walks and stalled; after that the walk is asked to leave the merge out, as before.
  • A stop covered under issue 480 now makes its group read reached, not stopped.

Tests: issue747_test.go reads tonight's state back from the store; the two main cases fail on main and pass here; the guard cases and the forge-cannot-say bound are covered. go vet, go test ./..., gofmt clean.

Reviewed independently before push: APPROVE at 6f7f07635e.

Fixes hq issue 747: a failed group member stayed failed after a later walk delivered it, and its stopped group stopped every catalogue walk (today: controller #336's group stops #301/#304/#307). - Each pass, a failed or stopped delivery whose repository has a done walk that contains its merge (the forge's answer) and built every module its plan moves is read as covered (`DeliveredBy`); the state stays final, the forge is told once (as for issue 480), and the group counts it delivered. - A member stopped for it (`StoppedFor`, read back from the stop reason for old records) no longer holds walks back. - While the forge's containment answer is pending or erroring, the walk is held for at most 10 minutes and the hold is said in `waits`, `stalled walks` and `stalled`; after that the walk is asked to leave the merge out, as before. - A stop covered under issue 480 now makes its group read reached, not stopped. Tests: issue747_test.go reads tonight's state back from the store; the two main cases fail on main and pass here; the guard cases and the forge-cannot-say bound are covered. go vet, go test ./..., gofmt clean. Reviewed independently before push: APPROVE at 6f7f07635e0297256d48ad9e528c716d55eeaea3.
mesh-admin added 1 commit 2026-10-14 21:23:58 +00:00
Cover a failed or stopped delivery once a later finished walk contains it (hq issue 747)
mesh/merge-gate head 6f7f07635e02 merged into trunk 0f76b6e232a5 — pass: builds mesh-delivery → novox; no bus step; every machine composes with the change …
mesh/repo-check head 6f7f07635e02 merged into trunk 0f76b6e232a5 — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-…
mesh/delivery delivered
6f7f07635e
A group member whose walk failed in an outage stayed failed after a later walk
of its repository, containing its merge, was done; its group then stopped every
later walk of the other repository, and the catalogue could deliver nothing.

A failed or stopped delivery now reads covered when a done walk of its
repository, made after its merge, whose commit contains it (the forge's word,
as issue 362's containment), built every module it moves. A group counts it as
delivered, and a member the group stopped for it no longer holds a walk back:
the group stops a walk only for a member whose change is still undelivered.
A stop covered under issue 480 now likewise makes its group read reached, not
stopped.

While the forge is asked, the walk is held back rather than stopped, for at
most ten minutes from the first ask: a forge that keeps erroring or cannot say
then lets the walk be asked to leave the stopped merge out, as before. The
hold is said by waits, stalled and stalled walks. The pass reads kept walks
each tick, so today's stuck deliveries clear after a restart.
Author
Contributor

Delivery novox/mesh-catalog@6f7f07635e02 — delivered since 2026-10-14T21:31:25Z

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 21:24 (new) → proposed (announced): novox/mesh-catalog#308's head announced
  • 2026-10-14 21:30 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-14 21:30 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-14 21:30 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 21:30 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 21:31 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@6f7f07635e02` — **delivered** since 2026-10-14T21:31:25Z **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 21:24 (new) → proposed (announced): novox/mesh-catalog#308's head announced - 2026-10-14 21:30 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-14 21:30 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-14 21:30 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 21:30 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 21:31 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 21:24:32 +00:00
Author
Contributor

ready at 6f7f07635e

ready at 6f7f07635e0297256d48ad9e528c716d55eeaea3
Author
Contributor

Merge check at 6f7f0763
Judged: head 6f7f07635e02 merged into trunk 0f76b6e232a5; read beside it: mesh-controller 60cc9ec363df, mesh-controller-main 60cc9ec363df, 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/issue747_test.go

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

--- 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-14T21:19:19Z 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-14T21:19:19Z

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/issue747_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.006s
words: 12 retired words and 70 daemons' lines, none in the 47330 strings of 722 files
ok  	git.novox.be/novox/mesh-catalog/checks/agenthome	0.016s
agent-home: no archive and no file written into under the agent's home
ok  	git.novox.be/novox/mesh-catalog/checks/secrets	0.018s
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.009s
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.409s
testing modules/mesh-delivery
ok  	mesh-delivery/cmd/mesh-delivery	4.090s
--- its merge-check-typescript.sh (typescript toolchain)
**Merge check** at `6f7f0763` Judged: head `6f7f07635e02` merged into trunk `0f76b6e232a5`; read beside it: mesh-controller `60cc9ec363df`, mesh-controller-main `60cc9ec363df`, 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/issue747_test.go Run by the build seat on novox as `build-1792013058121273199` (`builds --log build-1792013058121273199`). ``` --- 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-14T21:19:19Z 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-14T21:19:19Z 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/issue747_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.006s words: 12 retired words and 70 daemons' lines, none in the 47330 strings of 722 files ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.016s agent-home: no archive and no file written into under the agent's home ok git.novox.be/novox/mesh-catalog/checks/secrets 0.018s 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.009s 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.409s testing modules/mesh-delivery ok mesh-delivery/cmd/mesh-delivery 4.090s --- its merge-check-typescript.sh (typescript toolchain) ```
mesh-admin merged commit c51357f8af into main 2026-10-14 21:30:10 +00:00
mesh-admin deleted branch fix/747-a-failed-member-is-covered-by-a-later-walk 2026-10-14 21:30:11 +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#308