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: the builder waits on ToolchainAgreement, names sitting-out nodes in the Step, re-puts a declined ask after a 5 s pause without using an asking, and fails loudly after 30 min of declines naming each node and reason; the checker names the agreed toolchain in every check ask (a declined check ask is re-put at once, paced by the puller's own skip: a known limit). Builder, indexer and checker pin mesh-sdk v0.1.14-0.20261101143343-67354f8e019a. One subtest and rows in existing tests; no new test functions.
Reviewed-by: reviewerA@shanks at d739516056
Pushed-by: lead-47@shanks
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: the builder waits on ToolchainAgreement, names sitting-out nodes in the Step, re-puts a declined ask after a 5 s pause without using an asking, and fails loudly after 30 min of declines naming each node and reason; the checker names the agreed toolchain in every check ask (a declined check ask is re-put at once, paced by the puller's own skip: a known limit). Builder, indexer and checker pin mesh-sdk v0.1.14-0.20261101143343-67354f8e019a. One subtest and rows in existing tests; no new test functions.
Reviewed-by: reviewerA@shanks at d739516056dd79cafc29a58b08837cd33bbcfea1
Pushed-by: lead-47@shanks
https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
One build node on another version refused every build of the language. The builder and the checker now follow mesh-sdk's majority agreement; the key's step names a node that sits out ("ace sits out: typescript 26.12.1, agreed 26.13.0"), and a build ask a minority node declined is put again for a node on the agreed version. Check steps compare no toolchain, so clause 2 already holds for them. Pins builder, indexer and checker to mesh-sdk 71be15f.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
A build node off the agreed toolchain declines the ask and, idle, takes the ask put again at once, so three declines used the three askings and failed the build. A decline now uses no asking: the ask is put again after a short pause, and past a bound from the first decline the key fails naming the declining nodes and their reasons. A person reads which node sits out in the key's step text, which the view's builder_builds answers as stored.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
A check ask named no toolchain, so a node on the minority version could run it and KeepPasses record the pass as run on the agreed one. The check ask now carries the agreed toolchain and a node off it declines (mesh-sdk), for the checker's decline loop to put again. Pins the builder, indexer and checker.
Known limit: the checker puts a declined check ask again at once, with no pause; the declining puller skips that kind until its next pull wait, which paces a lone minority node.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Deliverynovox/mesh-delivery@d739516056dd — merged since 2026-11-01T15:04:23Z
Source — source.main moved to novox/mesh-delivery@cc38ca3f8d. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
composed together: pass — the checker's verdict at the members' heads (5d22d9ea466d)
Transitions
2026-11-01 14:42 (new) → proposed (announced): novox/mesh-delivery#131'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-delivery@d739516056dd` — **merged** since 2026-11-01T15:04:23Z
**Source** — source.main moved to novox/mesh-delivery@cc38ca3f8dc8. 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-delivery#131'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`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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: the builder waits on ToolchainAgreement, names sitting-out nodes in the Step, re-puts a declined ask after a 5 s pause without using an asking, and fails loudly after 30 min of declines naming each node and reason; the checker names the agreed toolchain in every check ask (a declined check ask is re-put at once, paced by the puller's own skip: a known limit). Builder, indexer and checker pin mesh-sdk v0.1.14-0.20261101143343-67354f8e019a. One subtest and rows in existing tests; no new test functions.
Reviewed-by: reviewerA@shanks at
d739516056Pushed-by: lead-47@shanks
https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
One build node on another version refused every build of the language. The builder and the checker now follow mesh-sdk's majority agreement; the key's step names a node that sits out ("ace sits out: typescript 26.12.1, agreed 26.13.0"), and a build ask a minority node declined is put again for a node on the agreed version. Check steps compare no toolchain, so clause 2 already holds for them. Pins builder, indexer and checker to mesh-sdk 71be15f. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovLDelivery
novox/mesh-delivery@d739516056dd— merged since 2026-11-01T15:04:23ZSource — source.main moved to novox/mesh-delivery@cc38ca3f8d. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/toolchain-majority: novox/mesh-catalog@f06335cf7e, novox/mesh-delivery@d739516056, novox/mesh-sdk@67354f8e01Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.