Replies: 3 comments
🧭 needs-ruling — Auto-merge needs a token that may merge, and this fleet has deliberately never had one. Which side holds it: GitHub's own auto-merge behind branch protection, or a ceremony-owned merge step inside the reconciler? AnalysisYour premise is right, and it measures better than you stated it. Across the last 30 pull requests here: 29 merged, one closed, and of the 29, 26 reached What it is not is a trustworthy predictor of the moment — and that is the whole of the design question, so it is measured rather than argued. I walked every Five of those pull requests account for 154 assertions and 152 take-backs, and the shape is identical on all five, in all three repositories, from both builder logins:
An agent writes the label on its duty tick; the reconciler removes it forty seconds later; five minutes on, the agent writes it again. This is not a bug — The case that decides where the hook goesincubator#133, whole timeline:
Read that against the two hooks:
The review axis says the same thing. On crew#434, all three reviewers filed So the hook is not a matter of taste, and it is the same under A and B: the trigger must be What each option costsA — GitHub holds the credential. Its appeal is real: no ceremony workflow gains
B — ceremony holds it. A repo-owned script a test can drive, which is also exactly what #171's standing fleet rule requires of any job whose token is write-capable — it names C — decline. Costs nothing and changes no doctrine. Against it: the itch is measured, not felt — 26 merges in this repository today, each needing you present. Three things I settled from the repo, so they are not in the question
What lands whichever way you ruleSix sentences say a human merges: Flag stateNo |
Ruled B, recorded as a decision, and minted — triage,
|
| issue | queue | |
|---|---|---|
| epic | #458 — auto-merge as a consumer's own toggle | — |
| 1 | #459 — the toggle, plumbed and inert: one input, the fleet predicate, one pure verdict, no merge | ready, unclaimed |
| 2 | #460 — the merge itself: head-pinned, confirmation-read, through run() |
blocked behind #459 |
| 3 | #461 — the post-merge dispatch (see the disclosure below) | blocked behind #460 |
| 4 | #462 — the doctrine: eight sites, plus the consumer guide | blocked behind #461 and #456 |
Three of your asks landed as written, and one is out by the rule the ask itself stated:
- The trigger is
decide_state's own conclusion, in the pass that concludes it — never thelabeledevent, never the label. That is the whole of the design, and it is the incubator#133 measurement above, not taste. offis the default everywhere, and the input names the merge method (off | merge | squash | rebase) rather than being a boolean: a repository can have merge commits disabled, and a two-value toggle would be unusable there with no way to say so.- The author allowlist is the fleet set you already maintain —
panel=, everypanel[<login>]=row andtriage-actors=in.github/labels.conf. No new field, no schema change, no pin bump for anyone who does not opt in. AUTO_MERGE_RELEASEis out. The ask said "if you want the release toggle in scope, say so in your reply and it is in scope; left unsaid, it is out", and the reply saidB. Nothing in the four issues forecloses it — one line here and I mint it.
One thing I owe you, measured after you ruled
A merge performed by the sweep raises a push that starts no workflow run. GitHub creates no runs from GITHUB_TOKEN-raised events (workflow_dispatch and repository_dispatch excepted) — the same rule release.yml:173-175 already states about its own bump push, and the rule the sweep's own wake depends on. So an auto-merged commit runs neither ci.yml's push: branches: [main] nor the release door. Release PRs are excluded, so the ship path is untouched and the door is a green no-op on everything else; what is genuinely lost is main's own CI, once per auto-merged PR.
I did not price that in the ask, and it is disclosed here rather than folded in quietly. It does not reverse B: the cost is shared by A, whose arming token is the same one; a write-capable PAT is org policy and was never granted; and GitHub's own exemption — a workflow_dispatch — is exactly the mechanism the trigger job already uses. #461 restores the signal that way, with an empty-by-default post_merge_workflow input. It is the one issue in the arc you did not ask for, and it is why the arc is four issues rather than three.
What stays yours
Adoption. The arc ships the capability closed everywhere, including here — self-labels-sweep.yml keeps contents: read and passes no input, and no child touches any caller. Turning it on in a repository is two lines in that repository's sweep caller (with: { auto_merge: merge } and contents: write), and it should follow the arc's release, not its first merge: until #461 lands, an opted-in repo would trade a hand press for a silent loss of main's CI.
#459 is deliberately safe to enable on its own — it decides and logs and merges nothing, so you can switch it on under contents: read, read a week of sweeps saying what they would have merged, and grant the permission only if the verdicts look right.
Two smaller facts, in the epic and in the guide rather than left for you to discover: auto-merge ignores merge-next (queue order is intent the reconciler must not guess — the loser of a real conflict is disqualified by blocker:conflict instead), and it can be slower than your hand — the labels caller has no pull_request_review trigger, so a final approval's only wake is the hourly cron, against your measured 5½-minute median press.
Closing this as resolved; the epic is the venue now, and the release-toggle line above is open whenever you want it.
Uh oh!
There was an error while loading. Please reload this page.
What's the itch?
All PRs in needs_human are basically auto-merged unless they are a release PR. it would be great to have a way for consumers of ceremony to choose whether they want to automatically merge PRs
What would "done" feel like?
I think an ALLOW_AUTO_MERGE or something that you can set at the consumer site that would make it so PRs that get to needs_human are automatically merged. We might want to have an AUTO_MERGE_RELEASE just in case. both are closed by default (false). also we probably want to define somewhere the logins that are allowed to create PRs that actually get there.
All reactions