docs(operations): serialize rolling PR drain rule (#770) #901
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!901
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "rigger/770-rolling-content-stability"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Scope
Implements the documentation artifact for release-toolkit#770.
Measured behavior and disposition
The measured mechanism has two separate boundaries:
A main landing after approval can therefore regenerate the rolling PR and change its release content, for example by including a newly available fragment. The correctness hazard is approval/content binding. Forgejo stale-approval dismissal is the correct protection for that changed tree, not the defect, and the rolling PR must not be exempted from it.
At the measured repository configuration, block_on_outdated_branch=false, so being behind main does not itself block an otherwise-eligible merge. The rolling PR is self-healing on behind-by. The drain decision is narrower: let expected work land first; when main is quiet, review the current rolling head and merge it before another main landing triggers another rebuild. If the rolling PR refreshes after approval, re-review the new head.
A content-equivalence shortcut is not implemented or claimed. It requires a separate measured comparison over the complete prepared artifact and is not an invariant of the current flow.
Measured confirmation: rolling PR #891 regenerated at 13:26:10 with head
f6429660; it was behind main by 0, mergeable=true, and its CHANGELOG diff was +45. This separates branch freshness from the regeneration that changes the reviewed content.Changed files
Verification
6e734382468a871bf610f5d52784d5This update requested no review and performed no merge.
Reviewed current exact head
8a871bf610after the requested2d45d70b3badvanced by one documentation-only commit; the earlier approval was removed and not carried forward. PR base isf5d52784d5; the own three-way diff is merge-base 6e73438246e5eca53ebe93d9d617776c59466cd0..head, exactly docs/integration.md plus changelog.d/770.fixed.md, +37/-0. No rebase was performed.Approved. The final text distinguishes two mechanisms: mode=noop does not refresh; mode=update invokes rt prep --rolling-mode, whose rolling path uses git checkout -B release-prep/rolling and force-with-lease pushes the rebuilt branch. The drain decision therefore waits for expected main landings, reads the quiet current rolling head once, and merges before another landing triggers regeneration. Behind-by alone is not treated as the hazard: live main protection reports block_on_outdated_branch=false, while required_approvals=1 and dismiss_stale_approvals=true preserve approval/tree binding. Historical live evidence is review #878/#5598: stale=true, official=false, bound to old
f29c8d1bwhile that PR head isa03eef10. The #891 timeline records regeneration at 13:26:10 tof6429660with a 45-line CHANGELOG delta; #889 merged at 13:27:37.The content-equivalence shortcut remains explicitly deferred and makes no unmeasured complete-artifact claim. Full go test -count=1 ./..., go vet ./..., fragment-check, and merge-base git diff --check pass. No merge action taken.
Reviewed current exact head
8a871bf610after the requested2d45d70b3badvanced by one documentation-only commit; the earlier approval was removed and not carried forward. PR base isf5d52784d5; the own three-way diff is merge-base 6e73438246e5eca53ebe93d9d617776c59466cd0..head, exactly docs/integration.md plus changelog.d/770.fixed.md, +37/-0. No rebase was performed.Approved. The final text distinguishes two mechanisms: mode=noop does not refresh; mode=update invokes rt prep --rolling-mode, whose rolling path uses git checkout -B release-prep/rolling and force-with-lease pushes the rebuilt branch. The drain decision therefore waits for expected main landings, reads the quiet current rolling head once, and merges before another landing triggers regeneration. Behind-by alone is not treated as the hazard: live main protection reports block_on_outdated_branch=false, while required_approvals=1 and dismiss_stale_approvals=true preserve approval/tree binding. Historical live evidence is review #878/#5598: stale=true, official=false, bound to old
f29c8d1bwhile that PR head isa03eef10. The #891 timeline records regeneration at 13:26:10 tof6429660with a 45-line CHANGELOG delta; #889 merged at 13:27:37.The content-equivalence shortcut remains explicitly deferred and makes no unmeasured complete-artifact claim. Full go test -count=1 ./..., go vet ./..., fragment-check, and merge-base git diff --check pass. No merge action taken.