Files
hq/04-ISSUES/208-a-seats-worker-is-made-only-when-the-controller-starts/00-report.md
T

2.1 KiB

status, opened, located-in, fixed-by, amended-design
status opened located-in fixed-by amended-design
located 2026-10-03
mesh-controller

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.