2.1 KiB
status, opened, located-in, fixed-by, amended-design
| status | opened | located-in | fixed-by | amended-design | |
|---|---|---|---|---|---|
| located | 2026-10-03 |
|
208 — A seat's worker is made only when the controller starts, so a holder assigned later finds none
What was observed
2026-10-03, assigning the first holders of node-build-agent (ADR 0190)
to four machines and pushing them. Every agent came up, authenticated, bound its seat, and restarted:
taking build work as a holder of node-build-agent
mesh-builder: this machine cannot take work from node-build-agent: nats: consumer not found. The mesh
creates that queue and this machine's worker on it, and a build machine may not create one
The seat's stream existed; its worker did not. The controller makes a seat's worker where it raises the bus's objects — on start — for the seats that have a holder at that moment, by design: the queue before the holder, so work queues until somebody arrives. Nothing makes the worker when a holder arrives later: a push asserts the module's own consumers (what it consumes) and not the seat's worker. The remedy was a controller restart, so the raise ran again with the holder known.
Why it matters beyond this instance
A seat's first holder is assigned after the controller started in every case but genesis, so every new role's first holder meets this. The build machine met it on 2026-09-28 the same way ("left the build machine bound to a consumer nothing had created") and the fix then was to pass the holders at the raise — which fixed the start, not the arrival. The holder says the right thing and cannot do anything about it, because a holder may not create its worker (design 25 §3).
Diagnosis
Owner mesh-controller: the raise runs once (RaiseSeats with the holders of the moment); push and
assign run EnsureConsumer only for a module's declared consumption. Fix direction: when a
module claiming a seat with accepts is assigned, or on every push that composes a holder for such a
seat, ensure the seat's worker as the raise does — the same derivation, the same idempotent assertion.