Replies: 5 comments
|
🧭 needs-ruling — Should a consumer be able to auto-merge its own Options: Recommend: A. Both remedies you named protect releases, and the one you wrote as the simpler of the two is already shipped, unconditional, and landed ahead of the button that would need it. Your lean to the toggle was formed against a feature that does not behave the way the sentence assumes, so I am not reading it as a decision. Nothing forecloses B — it stays one word away: reply B and I mint it in the same tick. Blocked: Default: AnalysisThe two minutes
So "we just introduced an auto-merge feature" is #463, and it is the only thing that has landed. What #463 actually shipped — the refusal is in the same commit as the verdict
auto_merge_verdict() { # $1 = this pass's decide_state conclusion (#459)
[ "$AUTO_MERGE" != off ] || { echo SKIP:off; return; }
[ "$1" = state:needs-human ] || { echo SKIP:state; return; }
! has_label release || { echo SKIP:release; return; }
is_fleet_login "$AUTHOR" || { echo SKIP:author; return; }
[ "$MERGEABLE" = MERGEABLE ] || { echo SKIP:mergeable; return; }
echo MERGE
}Line 303 is your second remedy, already built: a And it is inert, so the refusal landed before the thing it refusesThe one call site, if [ "$AUTO_MERGE" != off ]; then
log "#$n: auto-merge: $(auto_merge_verdict "$desired")"
fi
This was decided once already, and the door was deliberately left open#458 E4 states it as an epic-wide constraint — "release PRs are never auto-merged, under any value of the input" — resting on It got there because the ruling ask on #450 put your own
Your reply was Why the correction changes what the toggle would meanWritten against a feature that auto-merged releases, Priced, if you want it anyway: B is cheap to build, and its whole cost is in what it permits. A repo that sets it ships a tag on the reconciler's verdict — And that floor is thinner than the label table makes it look. I checked rather than assumed: Where a B child would land on the boardIt edits One bound worth naming, under any optionThe gate is Not asked hereWhether to adopt auto-merge in any repository — #458 E14 turns it on nowhere, including here, and adoption is your act per repository once the arc releases. Anything about @danmt — one word does it: A, B, or C. |
|
@dan-claude-bot let's go B. If I understand correctly the current auto_merge doesn't allow auto merge of releases, this would be a secondary toggle closed by default. I want to have two separate toggles, one that auto merges needs human PRs that are not release, and a second toggle for PRs that are release. Both closed by default. |
|
Yes, your reading of I said I would mint in the same tick. I am not, and this is why: I priced B without checking whether an auto-merged release actually ships. It does not. 🧭 needs-ruling — An auto-merged release PR merges but never publishes. May the release door learn a second, dispatch-driven entrance? Options: Recommend: B. It is the only option that delivers the thing you ruled for. C is strictly worse than pressing the button yourself — it replaces one act with two, and leaves a window in between where the next fragment-carrying PR reds. A is not a rebuttal of your ruling, it is what happens if the price of B is one you would not have paid. That price, stated plainly: the family's ship door gains a second live entrance in all three repositories, and a tag can be published with nobody at the button. Every interlock still holds — the 5-state table, the Blocked: Default: AnalysisThe fact I missed, in three measured steps1. A 2. The merge door is gated on the release-on-merge:
# The merge door. Gated on the push EVENT as well as the ref (rig's
# form): a workflow_dispatch of a caller sitting on main — this repo's
# own release-exercise.yml — must stay dry wiring, never a live door.
if: github.event_name == 'push' && github.ref == 'refs/heads/main'The tag door is gated the same way ( 3. Therefore an auto-merged release PR runs no door at all. The version bump lands on E10 said the ship path was untouched. It said so because E4 excluded release PRs. Reverse E4 and E10's own reasoning turns on itself. That is the whole of my error, and it was mine to catch before I put the option to you. The second consequence:
|
Ruled B, recorded as a decision, and minted — triage,
|
| issue | queue | what it is | |
|---|---|---|---|
| 5 | #467 | ready |
release.yml's release-on-merge learns a second live form, distinguished by a new merged-sha input rather than by an event. The shipped head is read from exactly one place; release-exercise.yml stays dry by construction rather than by event name; a dispatched head that is not a 40-hex SHA is refused before anything is checked out. Lands inert — nothing dispatches it yet. |
| 6 | #468 | blocked behind #467 and #462 |
auto_merge_release at all three boundaries, the release label turned from a refusal into a selector, SKIP:release retired, the confirmation read made symmetric, a release_workflow input, and the dispatch that wakes the door with the head the merge was pinned to. Plus the doctrine clause for both toggles. |
On the epic: E4 is superseded by E19, E17's "No AUTO_MERGE_RELEASE" clause is struck, and E19–E22 record the ruling, its unpriced precondition, why the toggle and the dispatch cannot be split, and what the release half still does not do.
Two places I deviated from the ask, both mine and both disclosed
- The reconciler's dispatch moved from child 1 into child 2. The ask put it in the entrance child. It cannot live there: the dispatch fires only after a release PR merges, and until
auto_merge_releaseexists no fixture can make a release PR merge — so the branch would ship with an unreachable failing case and an unwritable test, which is the shape Epic: auto-merge as a consumer's own toggle — the reconciler's verdict presses the button, closed by default #458 E7 exists to refuse. The entrance child is now purely the door's side, and it is fully testable on its own. - actions/labels-reconcile —
auto_merge_release: the second toggle, and the dispatch that ships what it merges #468 adds a refusal you did not ask for. With the second toggle set andrelease_workflowunset, the verdict refuses (SKIP:no-release-dispatch) rather than merging. That configuration is the one that silently produces exactly the state this ruling exists to avoid — merged, unpublished,maindisarmed, and the next builder's PR red for a reason that is not theirs. It is a reachable refusal with a writable test, so it is not the door-already-closed shape the epic forbids. If you would rather that configuration merge anyway, say so and it comes out.
What this costs, restated now that it is real
The family's ship door gains a second live entrance in all three repositories. Every interlock still holds — the 5-state table, the release label, the version transition, the nothing may exist yet assert, and facts.sh's demand for a merged release-labelled PR behind the dispatched SHA — but the door stops being reachable only by a human's merge. And the floor that was in front of you when you answered has not moved: blocker:drill-pending is still not in BLOCKERS, still never emitted, and still never read by decide_state, so under this toggle the last thing between a green release PR and a published tag is the panel's approvals. That is its own issue and its own ask; #468 records it and does not repair it.
Nothing is owed by you now
Adoption is your act, per repository, and this arc turns nothing on anywhere — including here. self-release.yml gains no workflow_dispatch:, no caller gains actions: write, and both new inputs ship off and empty. When the arc releases, opting in is: auto_merge_release on the labels caller, release_workflow naming your release caller, actions: write on the labels caller, and workflow_dispatch: with a merged-sha input on the release caller — four lines, documented by #468's doctrine half before any of them is worth writing.
Closing this as resolved; the record lives on #458.
Uh oh!
There was an error while loading. Please reload this page.
What's the itch?
We just introduced an auto-merge feature. But there doesn't seem be a way to scope it only for releases.
What would "done" feel like?
There should be either an auto_merge_release toggle or simply limiting auto-merge for non releases. I'm leaning to an additional option
All reactions