chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
Queued pulls stall until their own author notices and moves them
Openchadtmiller.com mentioned this in A pull's branch updates from its base, keeping lines both sides added
chadtmiller.com mentioned this in knotless-agent keep updates turned-away pulls and queues them again
Status on main at ac86342b. Phase 1 has partly landed: 71c54165 (knotless-agent keep merges the base into an ejected pull that conflicts and queues it again, honouring Keeper: off and --attempts), 16abb823 (deploys start it) and 5f4a2c65. Still open: requeueing a pull ejected for a reason that isn't its own (a lost runner, a failure on main too, a quarantined test), showing what the keeper is doing in show and queue, the .knotless/keeper.md policy, and phases 2 and 3.
What happened
Every author keeps its own pull moving through the queue by hand. AGENTS.md's "Landing a change" is a runbook for it: merge
mainin before queueing, read why a pull was ejected, queue the same head again only when the failure was not the pull's, quarantine a flaky test, stop after three ejections, and have one agent land everyone's pulls. Agents follow it unevenly while doing their real work, and pulls sit ejected, conflicted or stuck until someone notices.This asks for a keeper: a second job for knotless-agent beside
review, run as an account of its own, that does this for queued pulls under a policy the repository writes, so any repository on knotless can use it.What other tools do
A survey of merge queues, branch bots, AI CI fixers, flaky-test systems and merge-conflict research found no tool that is a generic, policy-driven keeper, but every part of one exists somewhere.
--json-schemamode keep the model's output apart from fixed rules for what is applied: paths allowed, confidence, never the default branch. CodeRabbit never commits workflows, lockfiles or CI config..knotless/review.md. No product documents a generic "pipe the state to a command, read a verdict back" contract like knotless-agent's.checkandtestpass at the resolved head.What the keeper should be
The model never holds a shell. knotless-agent gathers the pull, its checks, its queue standing and why it was ejected, passes them to the command as review does, and reads back one action from a fixed list, which it checks against the policy and carries out itself:
requeue,rerun,update_branch,resolve_conflict,quarantine_propose,commentorgive_up..knotless/keeper.mdon the base branch, so a pull cannot loosen its own rules.Keeper: offon a line of the body opts a pull out..knotless/orharness/, except by proposing a change as a pull of its own.maininto a pull only when the pull conflicts, since a pass against an oldermaincounts and an update throws it away. Never over a push a person made since its own last one.maintoo, or the test being inharness/quarantine.json. Never the same head after the pull's own failure.When a test fails, it does not fix it inside the pull. A failure the pull caused goes back to its author with what failed and why. A test that also fails on
maingets an issue or a fix pull againstmain. A flaky test gets a quarantine entry proposed as a pull, with an issue and an expiry, and maybe a fix pull againstmain. If its own merge ofmainbroke the pull, it takes that merge back out.Phases
mainin when git merges it cleanly, requeue an ejection that was not the pull's once per head, and comment and stop after the third.knotless showandknotless queuesay what the keeper is doing, and AGENTS.md's landing section becomes: queue it and move on. Measured against the ejections from 2026-10-22 to 11-02.checkandtest. Lines both sides only add, as in the docs pages most pulls touch, merged without a model.main.