Assigning a bead to an idle on_demand named session does not wake it, so a refinery sleeps on a full merge queue until a human nudges it #10
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?
What happens
An
on_demandnamed session ends a turn with "IDLE: no work, exiting turn". Work is then correctly assigned to it. Nothing wakes it. It sleeps on a full queue indefinitely, and every operator surface reads healthy.This is not #9. In #9 the bead carried
gc.routed_to, which a named session's hook query does not match, so the bead was never claimable. Here the beads areassignee = celilo/gastown.refinery, which is exactly the workaround #9 recommends, and the refinery's own find-work query matches them. The query is right. Nothing runs it.Measured, 2026-09-02
Timeline on the gc-scratch city, celilo rig:
Six and a half hours, four beads, one of them (
ce-p98w) carrying a fix that unblocks an e2e suite that had been dead at stage 2.The refinery's belief is in its own transcript and is the crux: it declined to pour a fresh patrol wisp because it expected the controller to wake it on assignment. That expectation is either wrong, or the wake exists and did not fire. Either way the two halves disagree and neither says so.
Why it is invisible
gc statusshowscelilo/gastown.refinery running. It is running. It is parked.gc bd list --status in_progressreturns empty, which reads as "queue drained" and is indistinguishable from "queue never started".branchmetadata, correct status.No surface says "this session has assigned work and is asleep". That is the gap.
Blast radius
Any
on_demandnamed session, which on this city is the refineries andcrew. The refinery is the worst case: under the no-pull-requests rule it is the only path tomain, so a sleeping refinery halts all landing on that rig while reporting healthy.It compounds with two issues filed today. #9 means routing does not reach a named session, so assignment is the only channel. This means assignment does not wake one. Between them, the only reliable way to get work to a named session is a human noticing and nudging.
Suggested fix
gc statusshould mark a session holding assigned, unstarted work while not running a turn, andgc doctorshould check for it. The information is already in the bead store.on_demandsession with a non-empty queue could be woken on the same tick that evaluates pool demand. The scale check already runs every tick and already reads the bead store.Related
ce-uh79in the celilo bead store: the refinery's find-work query filters--status=open, so a bead that reachesin_progresson its hook and stops is invisible to it too. That is a pack defect and probably belongs ingascity-packs.Environment
gc
88f3894ad-dirty, built 2026-08-31. Pack pinned at gastownhall/gascity-packssha:3b3b89f2011e06d84459aa7bea1552382f13930a. macOS, herdr runtime. City/Users/pbanka/gc-scratch. Host load 6.6 on 10 cores at the time, so this is not starvation.