Keep pull requests current, and merge them on approval — squash unless curated #17
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Meta/Campaign
Meta/Epic
Meta/Session
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
Reviewed/Confirmed
Reviewed/Curated
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Scope/Campaign
Status/Abandoned
Status/Blocked
Status/Conflicted
Status/In Progress
Status/In Review
Status/Need Grooming
Status/Need More Info
Status/Ready
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Ting/Jostoph#17
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Two rules the steward has the substrate for today, and neither exists yet.
Keeping a PR current. A
tango/<ticket>branch goes stale the moment its base moves. With merge-commits and rebase-merge turned off (#5), a stale branch cannot land at all until someone updates it by hand, so the flow stalls on a mechanical step nobody is watching for.Merging on approval. An approved PR sits until a human returns to click merge. The click carries a decision, though, and it is one Ting/Ting#4 already made: history is curated into logical commits before the PR, so a merge must replay those commits — but only when they were actually curated. A branch that was never curated is exploratory session work ("fix: nu -> nushell" three commits after the typo), and replaying that onto the trunk publishes the noise the curation discipline exists to remove.
So:
rebasewhen the pull request is marked curated,squashwhen it is not. The label is the author asserting they did the work; absent it, the safe reading is that they did not.In scope
rebaseif it carries the curated label,squashotherwise.head_commit_idto the commit the review approved.Out of scope
checks.module-evaluatesfails the build if its unit grows one. Execution is the separate extension this repository has named since PR #2.Boundary
head_commit_idis the load-bearing field, not a detail. Approval is of a commit, not of a branch name — without pinning it, a push landing between the approval and the merge gets merged unreviewed, and the steward would have declared it. With it, the merge fails rather than silently taking the wrong tree.Draft pull requests are excluded: a draft is not finished being written, and an approval on one is not a request to land it.
The merge styles the rules emit must stay inside the allow-set declared for the repos (#5 turns
mergeandrebase-mergeoff). A rule that declares an impossible merge is a rule that fails at the forge, so the two declarations must be checked against each other rather than kept consistent by hand.The event kind for an approving review cannot be verified from here — this forge carries no webhook to read the wire name off, and its swagger does not enumerate hook event names. So the mapping belongs in the crystallized parameters, not baked into the rules: getting it wrong must be a Nix edit, not a rebuild. Same for the label name and the two styles.
Acceptance
Do: rebase, naming the repository, the index, and the approved head commit.Do: squash.forgejo.commentalready is.Context
curatedlabel asserts.