docs: record merge-method requirement and divergence recovery in release playbook#2893
Conversation
…ase playbook Learned at the 4.0.3 cut (#2892): - The 'merge with a merge commit' step silently depended on the repo setting 'Allow merge commits', which had been switched to squash-only between the 4.0.1 and 4.0.2 cuts — forcing #2819 to squash and poisoning the next promotion with 24 spurious conflicts. The setting is enabled again (permanently, per maintainer decision 2026-06-09); the playbook now says so explicitly. - Document the '-s ours' healing recipe for promoting develop over a diverged main, including the must-be-empty tree-diff verification. - Promote the CHANGELOG rename on develop BEFORE cutting the release branch (the 4.0.3 flow, #2891) so develop doesn't need a back-port like #2824. - Fix dispatch-list drift: chocolatey-wheels was retired for scoop-wheels, and the apt/yum bucket dispatches were missing from the trigger list. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: Docs-only patch documenting three lessons from the 4.0.3 cut: the "Allow merge commits" repo-setting dependency, the `-s ours` divergence-healing recipe, the CHANGELOG-rename-on-develop sequencing, and a corrected dispatch list. The dispatch corrections are verified against `release.yml` and the prose is accurate. Two gaps in the `-s ours` recipe make it incomplete for the intended 3am use-case; flagging as nits. Overall verdict: comment — the core content is correct, but the recipe needs two lines to be safely executable.
Correctness
Gap 1 — git checkout -b fails if the branch already exists.
.github/RELEASE_PLAYBOOK.md, the new conflict-recovery bash block:
git checkout -b release/X.Y.Z-to-main origin/developThe section heading is "If the develop→main PR reports conflicts", meaning the normal flow (step 1 of the release day section) has already run: the branch was created, pushed, and the PR was opened. At that point git checkout -b fails with fatal: A branch named 'release/X.Y.Z-to-main' already exists. Replace -b with -B to reset the branch to origin/develop:
git checkout -B release/X.Y.Z-to-main origin/developGap 2 — No git push step after the merge.
The same bash block ends with:
git diff HEAD origin/develop # MUST print nothing — verify before pushingThe comment says "before pushing", but there is no push command. After the verify the remote branch and the open PR still reflect the old (conflicting) head. The block needs:
git push --force-with-lease origin release/X.Y.Z-to-mainWithout it a maintainer following the recipe will see their local state is correct but the GitHub PR will still report conflicts, and gh pr merge --merge will refuse.
Suggested final block:
git checkout -B release/X.Y.Z-to-main origin/develop
git merge -s ours origin/main -m "Merge main into release branch (ours): develop is authoritative"
git diff HEAD origin/develop # MUST print nothing — verify before pushing
git push --force-with-lease origin release/X.Y.Z-to-mainCommits
Single commit docs: record merge-method requirement and divergence recovery in release playbook — 81 characters, docs type, no scope (optional), not ALL-CAPS. Passes commitlint.config.js. Clean.
Docs
The dispatch-list corrections (DOWNSTREAM_DISPATCH_TOKEN / LINUX_REPO_DISPATCH_TOKEN, chocolatey → scoop, apt-wheels / yum-wheels additions) were verified against .github/workflows/release.yml lines 553–736; the playbook now matches the workflow exactly.
Wheels Bot — Reviewer B (round 1)A's review is accurate and well-grounded. Both gaps are real, both are verified against the actual diff, and the dispatch-list check was confirmed against the exact workflow lines. No false positives, no sycophancy. The only nit B would add (a missing SycophancyNone detected. A withheld approval, raised two concrete gaps, and did not use LGTM language. False positivesNone detected.
Missed issuesOne micro-nit A did not raise: the recovery block starts with Verdict alignmentA issued ConvergenceAligned. A and B agree: the core content is correct and the dispatch corrections are verified; two lines in the conflict-recovery bash block are missing or wrong. Emitting |
Playbook corrections learned at the 4.0.3 cut (#2892):
-s ourshealing recipe for promoting develop over a diverged main, including the must-be-empty tree-diff verification step.Docs-only; no executable paths touched.
🤖 Generated with Claude Code