What happens
squabble verify-satisfied tells the agent to arm auto-merge on a PR whose base branch has no required status checks. In the same verdict it warns that arming would merge the PR at once. AGENTS.md §5c item 5 forbids exactly that ("Never arm automerge on a repo with no required contexts — it merges instantly"). Such a PR can never reach exit 0 without breaking the rule, so the agent is stuck.
Where
crates/squabble-core/src/done.rs on feat/verify-satisfied (PR #119), section "5 + 6", around line 446:
None if facts.merge_state == "BLOCKED" || required_pending => {
agent.push(Item::AutoMergeNotArmed { .. })
}
The arm is not guarded by "the base has at least one required context". The warning about this goes only into notes, so it does not affect the verdict.
Measured (2026-10-01, squabble 0.1.0 at ~/.local/bin/squabble)
In each case, notes[0] reads: "no required status checks on the base branch — automerge would merge on arming, before any review bot reports".
All three rulesets carry a code_scanning rule. None of the three heads has a CodeQL run. The BLOCKED state most likely comes from that rule. Squabble lists code_scanning in neither agent_items nor its "not evaluated" note.
Second, smaller defect: text rendering
When held_by_human is empty, the text renderer prints notes straight after the agent items and leaves out the notes: header. The warning then reads as a third agent instruction ("agent must act: … – no required status checks …"). On git-seo#25 the same notes appear under "held by a human" instead.
Acceptance criteria
Found while running verify-satisfied across the 71 ORCID citation PRs.
🤖 Generated with Claude Code
https://claude.ai/code/session_01B2ARtAVppZ7x7mVY5u6nAz
What happens
squabble verify-satisfiedtells the agent to arm auto-merge on a PR whose base branch has no required status checks. In the same verdict it warns that arming would merge the PR at once. AGENTS.md §5c item 5 forbids exactly that ("Never arm automerge on a repo with no required contexts — it merges instantly"). Such a PR can never reach exit 0 without breaking the rule, so the agent is stuck.Where
crates/squabble-core/src/done.rsonfeat/verify-satisfied(PR #119), section "5 + 6", around line 446:The arm is not guarded by "the base has at least one required context". The warning about this goes only into
notes, so it does not affect the verdict.Measured (2026-10-01, squabble 0.1.0 at
~/.local/bin/squabble)agent_itemsauto_merge_not_armedauto_merge_not_armedauto_merge_not_armedIn each case,
notes[0]reads: "no required status checks on the base branch — automerge would merge on arming, before any review bot reports".All three rulesets carry a
code_scanningrule. None of the three heads has a CodeQL run. The BLOCKED state most likely comes from that rule. Squabble listscode_scanningin neitheragent_itemsnor its "not evaluated" note.Second, smaller defect: text rendering
When
held_by_humanis empty, the text renderer printsnotesstraight after the agent items and leaves out thenotes:header. The warning then reads as a third agent instruction ("agent must act: … – no required status checks …"). On git-seo#25 the same notes appear under "held by a human" instead.Acceptance criteria
verify-satisfiednever emitsAutoMergeNotArmed. A BLOCKED PR goes toheld_by_human, with a kind that names the reason (e.g.blocked_without_required_contexts, carrying the effective rule types).code_scanningrule whose tool has produced no analysis on the head is reported, as an item or at least by name in the BLOCKED safety-net note. It is not left unmentioned.notes:header, so a note can never render as an agent or human item.AutoMergeNotArmedwhen BLOCKED.Found while running
verify-satisfiedacross the 71 ORCID citation PRs.🤖 Generated with Claude Code
https://claude.ai/code/session_01B2ARtAVppZ7x7mVY5u6nAz