Development record
abcd land and the build loop decide whether a merge is held for a person's approval (ruling AM1) from the committed ruleset mirror under .abcd/work/rulesets/, never from the forge's live rules. A mirror that has gone stale, saying an approval is required when the forge no longer requires one, lets abcd arm a merge that no person gates. Found by the Opus security reviewer of the abcd land change on 2026-10-15; the loop has the same reading, so this predates abcd land. Route exists without abcd: no, the mirror-based decision is abcd's, so abcd fixes it.
abcd land and the build loop decide whether a merge is held for a person's approval (ruling AM1) from the committed ruleset mirror under .abcd/work/rulesets/, never from the forge's live rules. A mirror that has gone stale, saying an approval is required when the forge no longer requires one, lets abcd arm a merge that no person gates. Found by the Opus security reviewer of the abcd land change on 2026-10-15; the loop has the same reading, so this predates abcd land. Route exists without abcd: no, the mirror-based decision is abcd's, so abcd fixes it.
2026-10-16, evidence from a real run in a private throwaway lab with no ruleset mirror: abcd land (v0.15.0) reported "no merge queue gates main (per the ruleset mirror), so its merge is left to a person". With no mirror at all, that claim rests on absence: a repository whose forge does run a merge queue but carries no mirror reads the same way, and the note credits a mirror that does not exist. Reading the live forge's rules, as this record proposes, settles both; until then the note should say that no ruleset mirror exists.
2026-10-30, after the merge gate replaced ruling AM1 (itd-2610150602547271): the mirror no longer decides whether a merge waits for a person, only whether a merge queue gates the default branch. With no mirror, abcd land and the build loop arm --auto --merge. The live forge accepts that arming against this repository's merge queue: it answers that the queue sets the merge strategy and enqueues the pull request (seen on two pull requests that day). What a missing mirror loses is land's queue path. Land reports that the forge merges once the required checks pass, and skips the confirmation and the auto-merge toggle that recover a pull request left outside the queue (iss-2610090642376032). A queue whose method is not a merge commit was not tried. The remedy above still settles both.
Frontmatter
| id | iss-2610150656282243 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2610150656282243-abcd-land-and-the-build-loop-decide.md
open on GitHub ↗ · commit history ↗
mentions2
- iss-2610090642376032A pull request the implement loop lands can leave the merge queue silently. Twice it sat CLEAN with auto-merge armed and never entered the queue (#837, #844; the enqueue mutation then failed with a forge error and only toggling auto-merge queued it), and four times across this run and the v0.13.2 cut a failed merge-group check (the macOS job cap, or a flaky test) dropped it from the queue (#839, #854, #867, #869) with nothing re-queuing it. The loop arms auto-merge and walks away, so a run that trusts it stalls unseen; one drop cost about 45 minutes in this run.
- itd-2610150602547271The facilitator's mode gates the merge