Context
Measured 2026-10-07 15:51Z (gh pr list --state open --json mergeable,headRefName): 94 of 213 open pull requests conflict with master, 67 of them on queen- branches, the oldest opened 2026-09-21. GitHub runs no required check on a conflicting head, so the reviewer bee never judges it and the merger never merges it. No bee updates its own branch, so every master merge that touches a bee's files strands that pull request for good. tools/queen/pusher.py already counts conflicted_bee_prs; nothing acts on the count.
Boundary
specs/queen/review_valve.t27, gen/c/queen/review_valve.c (generated), one docs/now/ entry. Wiring into the publisher and the supervisor is a separate issue.
Scenarios
- A bee PR conflicts and fewer than 50 Actions runs are queued: GitHub's update-branch merges master into the head (no force-push).
- Same, with the queue over 50: wait for the next tick, at most 48 hours.
- update-branch answers 422 (a real conflict), or the head conflicted again after 2 updates, or it waited 48 hours: close the PR with the reason and release the dispatch, so a fresh bee redoes the issue from current master. This is one of MAX_RELEASES; once those are spent, close.
- A human branch or a clean PR: not this valve's.
Requirements
conflict_step(queen_branch, conflicting, update_failed, updates, hours, releases, queued_runs) -> u8 returning C_NONE / C_WAIT / C_UPDATE / C_REDO / C_CLOSE.
- Constants CONFLICT_UPDATES = 2, UPDATE_QUEUE_CEILING = 50, CONFLICT_WAIT_HOURS = 48.
- Step codes are pinned by an invariant, and the wait ends before the policy's 48-hour hold.
Success criteria
t27c parse specs/queen/review_valve.t27 exits 0
t27c typecheck specs/queen/review_valve.t27 exits 0
t27c test-report specs/queen/review_valve.t27 reports vacuous passes 0
Context
Measured 2026-10-07 15:51Z (
gh pr list --state open --json mergeable,headRefName): 94 of 213 open pull requests conflict with master, 67 of them onqueen-branches, the oldest opened 2026-09-21. GitHub runs no required check on a conflicting head, so the reviewer bee never judges it and the merger never merges it. No bee updates its own branch, so every master merge that touches a bee's files strands that pull request for good.tools/queen/pusher.pyalready countsconflicted_bee_prs; nothing acts on the count.Boundary
specs/queen/review_valve.t27,gen/c/queen/review_valve.c(generated), onedocs/now/entry. Wiring into the publisher and the supervisor is a separate issue.Scenarios
Requirements
conflict_step(queen_branch, conflicting, update_failed, updates, hours, releases, queued_runs) -> u8returning C_NONE / C_WAIT / C_UPDATE / C_REDO / C_CLOSE.Success criteria
t27c parse specs/queen/review_valve.t27exits 0t27c typecheck specs/queen/review_valve.t27exits 0t27c test-report specs/queen/review_valve.t27reportsvacuous passes 0