One rig with an uninitialized beads store makes the demand read PARTIAL for the whole city, and every pool stops spawning while gc status reads healthy #24
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
A rig registered in
city.tomlwhose.beads/was never created fails itsscale_check. That failure is not contained to the broken rig: it sets a PARTIAL flag on the demand read, andbuildDesiredStaterefuses fresh pool creates on a partial read. So one misconfigured rig freezes polecat spawning for every rig in the city.The interlock itself is correct. Refusing to spawn when you cannot see demand is the safe choice. The defect is the blast radius: one rig's broken store should not blind the reader for rigs whose stores are fine.
Measured
gc-scratch, 2026-09-08 18:00:25 PDT. A fifth rigbna-yard-sale-2was added tocity.tomlby hand (its config appended withoutgc rig add), so its beads database was never created.gc rig liststates it plainly, and it is the only rig in that state:~/.gc/supervisor.log, from the config reload at 18:00:25 onward — 430 occurrences of the first line in about five minutes:Note the third and fourth entries in the PARTIAL list.
celilo/core.control-dispatcherand the city-levelcore.control-dispatcherare named as failed, and neither has anything to do withbna-yard-sale-2.The consequence, at the same moment:
Two seats wanted, zero sessions alive.
gc session listshowed nocelilo/gastown.{furiosa,nux,slit,rictus,capable}at all, whilegc bd readyforgc.routed_to=celilo/gastown.polecatreturned seven claimable beads, two of them P1.Why this is hard to see
Every surface reads healthy or ambiguous:
gc statusprints the pool asscaled (min=0, max=5)with each seatunknown (partial status). Nothing says "blocked".gc bd readyreturns the real queue, so routing verification passes. The mayor's standard check ("is it claimable at the receiving end?") answers yes and is still wrong about whether anyone will claim it.fresh create blockedline in~/.gc/supervisor.log, which is unwindowed and carries every supervisor the city has ever run.This is the same shape as #7: real pool demand, no spawn, one log line as the sole witness. Different cause, same silence.
Suggested fix
Scope the failure to the rig that produced it. A
scale_checkthat cannot read rig A's store should mark rig A's templates partial and leave rig B's demand read authoritative. As written, one unreadable store degrades the read for templates that were queried successfully.Two smaller things that would each have caught this on their own:
gc doctorshould fail when a registered, unsuspended rig has no initialized beads store.gc rig listalready computes and printsBeads: not initialized, so the fact is available and nothing acts on it.gc statusknows the pool is desired at 2 and running 0; it could say why.Workaround
gc rig suspend bna-yard-sale-2removes it from the reconciler's set. Applied here 2026-09-09 01:1xZ. The proper repair is to register the directory through the supported path (gc rig add --adopt, or remove and re-add) so it gets a real Dolt store rather than a hand-built one.gc order checkreads "ready" for 185 hours while the order never fires #32gc order checkreads "ready" for 185 hours while the order never fires #32