A worker can push, assign the refinery and stop while branch/target/merge_strategy stay empty — the refinery is their only reader, so the merge sits looking perfectly healthy #35
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?
The worker contract is: push the branch, set
branch/target=main/merge_strategy=directon your own bead, assign the rig's refinery, stop. Nothing enforces the middle step. A worker that does three of the four produces a bead that is indistinguishable from a healthy queued merge from every surface: status open, assignee the refinery, branch genuinely on the remote, and no metadata for the refinery to act on.Measured 2026-09-29
ce-7dj9(celilo, P1, production outage). Polecatfuriosadid the work well — commit0b187187onpolecat/ce-7dj9, pushed,refs/heads/polecat/ce-7dj9confirmed present on the remote, with a changeset and 91 lines of test. It then assignedcelilo/gastown.refineryand stopped. Its bead's metadata at that moment:No
branch. Notarget. Nomerge_strategy. The mayor set all three by hand and the merge proceeded normally.The celilo refinery reports this was the third such bead in one session. Its own words: "that's the third bead this session where a worker left branch/target/merge_strategy empty. The refinery is the only reader, so it sits looking healthy — same failure mode as ce-2qm. Worth a standing fix rather than the mayor catching each one by hand."
Why it hides
This is the empty-answer shape on the write side. Every check a mayor would naturally run passes:
opencelilo/gastown.refinerygc bd showThere is no surface that says "this bead is assigned to a refinery and carries no merge instructions". The absence renders as absence.
Why it goes here and not to a bead
No polecat in this city can change the
gcbinary or the pinned pack, so a bead would strand the work while reading as tracked. Noting also that a fix ingascity-packs(tightening the polecat's completion prompt) does not reach this city until someone deliberately re-pins the pack sha — the pin is3b3b89f2011e06d84459aa7bea1552382f13930aand it is deliberate. So the prompt-side fix is real but inert here; the gc-side one is what would actually land.Suggested fix, cheapest first
flow-stall-checkalready mails the mayor on the ce-2qm shape. Add: open, assignee matches*.refinery, and any ofbranch/target/merge_strategymissing. This is the one that pays for itself immediately and needs no pack re-pin.branchis knowable from the claiming session's worktree, andtargetdefaults tomain; onlymerge_strategyis a real choice. Deriving two of three shrinks the window even if a worker forgets. Cross-ref gascity#31, which is aboutgc.work_branchbeing stamped from the wrong checkout.Related
gc.routed_toas an empty string. Same act, adjacent field, same stranding.merged_sha.gc hook --claimstampsgc.work_branchfrom the rig root's checkout, not the claiming session's worktree.