fix(fleet-merge): enforce the author trust it documents, and be able to merge at all - #643
Conversation
…to merge Two bugs that cancelled out, so the routine ran green weekly and merged nothing. 1. --admin was never passed. Development Branch Protection requires 1 approving review and grants bypass to OrganizationAdmin only, so a plain squash could not merge. The 2026-08-28 run: 3 merged/would-merge, 46 skipped, every real attempt 'merge refused by GitHub'. 2. The author was read and never tested, despite the header promising to refuse authors not trusted for unattended merge. Fixing only (1) would have started merging functional work without review. Also keeps the refusal text. The old branch discarded it, which is why 'refused by GitHub' named no reason and the cause went undiagnosed.
|
Agreed on both defects — I reached the same One consequence worth deciding deliberately rather than inheriting, on the same 2026-08-28 run (33163749650):
18 of the 20 refusals were release version bumps, and the trusted list here does not include them. Before this PR they were attempted and refused; after it they will be skipped as untrusted. Either way they do not merge — so the That matters because those bumps are not cosmetic. They land by being merged: openregister's I am not arguing they should be blanket-trusted: Happy either way; flagging it so it is a choice and not an oversight. Your call, since this is your PR. |
Two bugs that cancelled each other out, so the Friday routine ran on schedule, reported success, and merged nothing — for weeks.
1. It could never merge
Development Branch Protectionsetsrequired_approving_review_count: 1and grants bypass toOrganizationAdminonly. The workflow calledgh pr merge --squashwith no--admin, so GitHub refused every attempt. Evidence from the 2026-08-28 run (DRY_RUN: false):2. The author was read but never tested
The header has always said it refuses "PRs whose author is not trusted for unattended merge". Nothing enforced it —
authorwas parsed and then only interpolated into a status line. Fixing (1) alone would have started merging functional work with no review. That is why both are in one change.Dependency bumps are the class that is safe unattended: the diff is a version number, and the gates judging it are the ones a human reviewer would read. Everything else keeps its review.
'dependabot[bot]'is quoted deliberately — unquoted, the brackets are acasecharacter class matchingdependabott, not the literal login. Exercised directly:3. The refusal reason is now kept
The old branch discarded stderr, so "refused by GitHub" named no cause and read as an ordinary conflict — which is precisely why this went undiagnosed. A refusal we cannot read is one we will misattribute.
Verified: YAML parses;
bash -nclean on bothrun:blocks extracted from the parsed YAML (a YAML parse says nothing about the shell inside it).