The operator's direction of 2026-10-02 on seeing a 35-image rebuild run serially on one machine while three others idled: this is our first occurrence of a mesh advantage — a build-agent module every node can run, holding a node-scoped seat, with the controller using whichever agents are online; and make sure the setup is done generically so another module needing mesh functionality reuses the pattern.
ADR 0190 (extends 0121), the generic pattern first:
Work asked of a seat is taken by whichever of its holders is idle; the asker addresses the role, never a machine; the outcome says which machine did it.
A holder pulls one ask at a time when idle — a pull consumer, which removes the push-prefetch race of issue 175 by shape rather than by a one-in-flight limit (the limit is what made the shared queue serial).
Work bound to one machine is a node seat's verb (design 33 §4), not a work queue.
One pattern for any node seat with accepts; the controller derives queue and worker, the module's manifest says what a holding machine needs.
Building is the first use: seat node-build-agent (node scope, same build ask and events), held by the build-agent module on every machine with a container runtime; mesh-build-machine and builder retire once replaced.
Design 25 §1/§5 already drew this ("a seat's accept subjects on a queue group of holders is what a build queue shared by several machines is"). Rejected: a concurrency setting or second holder by hand; a build-specific dispatcher in the controller.
Also: notes in ADR 0121 (mechanism changed) and ADR 0162 (progressive insight: "the only build machine there could be"); design 18 gains "Where a build runs" and its code list names modules/build-agent. Checks pass.
Code: mesh-controller branch feat/a-seats-work-is-shared-by-its-holders (in progress), mesh-catalog #231 (build-agent module). Live switch happens after WP3's live step, since the current queue is what builds node-tools.
The operator's direction of 2026-10-02 on seeing a 35-image rebuild run serially on one machine while three others idled: *this is our first occurrence of a mesh advantage* — a build-agent module every node can run, holding a node-scoped seat, with the controller using whichever agents are online; and *make sure the setup is done generically* so another module needing mesh functionality reuses the pattern.
**ADR 0190** (extends 0121), the generic pattern first:
1. Work asked of a seat is taken by whichever of its holders is idle; the asker addresses the role, never a machine; the outcome says which machine did it.
2. A holder pulls one ask at a time when idle — a pull consumer, which removes the push-prefetch race of issue 175 by shape rather than by a one-in-flight limit (the limit is what made the shared queue serial).
3. Work bound to one machine is a node seat's verb (design 33 §4), not a work queue.
4. One pattern for any node seat with `accepts`; the controller derives queue and worker, the module's manifest says what a holding machine needs.
5. Building is the first use: seat `node-build-agent` (node scope, same `build` ask and events), held by the `build-agent` module on every machine with a container runtime; `mesh-build-machine` and `builder` retire once replaced.
Design 25 §1/§5 already drew this ("a seat's accept subjects on a queue group of holders is what a build queue shared by several machines is"). Rejected: a concurrency setting or second holder by hand; a build-specific dispatcher in the controller.
**Also:** notes in ADR 0121 (mechanism changed) and ADR 0162 (progressive insight: "the only build machine there could be"); design 18 gains "Where a build runs" and its code list names `modules/build-agent`. Checks pass.
Code: mesh-controller branch `feat/a-seats-work-is-shared-by-its-holders` (in progress), mesh-catalog #231 (build-agent module). Live switch happens after WP3's live step, since the current queue is what builds node-tools.
The build role was a mesh seat with one holder and its worker a push consumer with one delivery in
flight, so thirty-five images rebuilt serially on one machine while three others idled. The bus was
drawn for the alternative — a seat's accept subjects on a queue group of holders (design 25) — and
0190 uses it as one pattern for every role: a node seat with accepts, every holder pulling one ask
when idle, the asker addressing the role. Building is the first use: node-build-agent, held by the
build-agent module on every machine with a container runtime. Notes in 0121 and 0162 where their
facts went stale.
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.
The operator's direction of 2026-10-02 on seeing a 35-image rebuild run serially on one machine while three others idled: this is our first occurrence of a mesh advantage — a build-agent module every node can run, holding a node-scoped seat, with the controller using whichever agents are online; and make sure the setup is done generically so another module needing mesh functionality reuses the pattern.
ADR 0190 (extends 0121), the generic pattern first:
accepts; the controller derives queue and worker, the module's manifest says what a holding machine needs.node-build-agent(node scope, samebuildask and events), held by thebuild-agentmodule on every machine with a container runtime;mesh-build-machineandbuilderretire once replaced.Design 25 §1/§5 already drew this ("a seat's accept subjects on a queue group of holders is what a build queue shared by several machines is"). Rejected: a concurrency setting or second holder by hand; a build-specific dispatcher in the controller.
Also: notes in ADR 0121 (mechanism changed) and ADR 0162 (progressive insight: "the only build machine there could be"); design 18 gains "Where a build runs" and its code list names
modules/build-agent. Checks pass.Code: mesh-controller branch
feat/a-seats-work-is-shared-by-its-holders(in progress), mesh-catalog #231 (build-agent module). Live switch happens after WP3's live step, since the current queue is what builds node-tools.