Agree a toolchain by strict majority; a node on another version sits out (ADR 0584, issue 1578) #154

Merged
mesh-tools merged 3 commits from fix/toolchain-majority into main 2026-11-01 15:04:08 +00:00
Member

Delivery group fix/toolchain-majority (mesh-sdk, mesh-delivery, mesh-catalog), one check, one Approve. Issue 1578. Decision: ADR 0584 (accepted 2026-11-01, chosen by the operator): the agreed toolchain of a language is the version a strict majority of build nodes report; a build waits only when no version has a strict majority; a node on another version builds nothing of that language (it declines build and check asks instead of failing them) and is named in the build's Step ("ace sits out: typescript 26.12.1, agreed 26.13.0"), readable through builder_builds. Changes ADR 0477 §2.

Why: on 2026-11-01 ace reported Node.js 26.12.1 and the other three 26.13.0, and no TypeScript module built from about 09:00 (36 modules, gitea among them). Quick fix (pause ace's TypeScript builder or upgrade ace) weighed against the thorough fix (this group): thorough chosen, the second time a version gap stalled builds.

This member: delivery.ToolchainAgreement (strict majority, SittingOut, Wait), AgreedToolchain kept as a wrapper; CheckJob.Toolchain; buildstep askrun declines a build or check ask for another toolchain (*Declining) and the Puller ends it declined instead of refusing it. Tests: the AgreedToolchain tests folded into one table; rows added to existing askrun and pull tests; net test functions -2.

Reviewed-by: reviewerA@shanks at 67354f8e01
Pushed-by: lead-47@shanks

https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL

Delivery group fix/toolchain-majority (mesh-sdk, mesh-delivery, mesh-catalog), one check, one Approve. Issue 1578. Decision: ADR 0584 (accepted 2026-11-01, chosen by the operator): the agreed toolchain of a language is the version a strict majority of build nodes report; a build waits only when no version has a strict majority; a node on another version builds nothing of that language (it declines build and check asks instead of failing them) and is named in the build's Step ("ace sits out: typescript 26.12.1, agreed 26.13.0"), readable through builder_builds. Changes ADR 0477 §2. Why: on 2026-11-01 ace reported Node.js 26.12.1 and the other three 26.13.0, and no TypeScript module built from about 09:00 (36 modules, gitea among them). Quick fix (pause ace's TypeScript builder or upgrade ace) weighed against the thorough fix (this group): thorough chosen, the second time a version gap stalled builds. This member: delivery.ToolchainAgreement (strict majority, SittingOut, Wait), AgreedToolchain kept as a wrapper; CheckJob.Toolchain; buildstep askrun declines a build or check ask for another toolchain (*Declining) and the Puller ends it declined instead of refusing it. Tests: the AgreedToolchain tests folded into one table; rows added to existing askrun and pull tests; net test functions -2. Reviewed-by: reviewerA@shanks at 67354f8e019af88ceccf3d042ec4aea35ae89d0a Pushed-by: lead-47@shanks https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
mesh-tools added 3 commits 2026-11-01 14:42:07 +00:00
One build node on another version stopped every build of the language. The agreed toolchain is now the strict majority's; a tie still waits and names the versions.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
With the toolchain agreed by majority, a node on the minority version can pull an ask for the agreed one. It now declines it (the issue 890 path) for the asker to put again, so it never fails a build.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Name the agreed toolchain in a check ask and decline it on a node off that toolchain (ADR 0584, issue 1578)
mesh/delivery merged: source.main moved to novox/mesh-sdk@621984614dc6
mesh/delivery-group group fix/toolchain-majority merged: every member is merged
mesh/check pass 67354f8e019a on cad8250aaa8c | unit 7056 run, 243 kept, 16 skipped | integration 7194 run, 275 kept, 25 skipped | over bound: unit, in…
67354f8e01
A check ask named no toolchain, so a node on the minority version could run it and its pass be recorded as run on the agreed one. CheckJob now carries the toolchain; a node on another declines it before it fetches, as for a build ask.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Author
Member

Delivery novox/mesh-sdk@67354f8e019a — merged since 2026-11-01T15:04:09Z

Source — source.main moved to novox/mesh-sdk@621984614d. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/toolchain-majority: novox/mesh-catalog@f06335cf7e, novox/mesh-delivery@d739516056, novox/mesh-sdk@67354f8e01

  • composed together: pass — the checker's verdict at the members' heads (5d22d9ea466d)

Transitions

  • 2026-11-01 14:42 (new) → proposed (announced): novox/mesh-sdk#154's head announced
  • 2026-11-01 14:42 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-01 15:04 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@67354f8e019a` — **merged** since 2026-11-01T15:04:09Z **Source** — source.main moved to novox/mesh-sdk@621984614dc6. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/toolchain-majority`: novox/mesh-catalog@f06335cf7eff, novox/mesh-delivery@d739516056dd, novox/mesh-sdk@67354f8e019a - composed together: pass — the checker's verdict at the members' heads (5d22d9ea466d) **Transitions** - 2026-11-01 14:42 (new) → proposed (announced): novox/mesh-sdk#154's head announced - 2026-11-01 14:42 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-01 15:04 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit 621984614d into main 2026-11-01 15:04:08 +00:00
mesh-tools deleted branch fix/toolchain-majority 2026-11-01 15:04:08 +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-sdk#154