Merging a release-labeled PR should BE the release — auto-tag + publish on merge, version transition as the interlock #96
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:cli
scope:drill
scope:host
scope:installer
scope:templates
scope:tiers
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/box#96
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?
Anchor issue for the three repos (rig and cast twins linked below), from the 0.7.0 ceremony retro.
The gap, as lived
box#95 merged with four approvals — and nothing happened, correctly:
release.ymlfires on a tag push that is a separate, manual, silent-when-forgotten step. The operator expected a release; the system delivered an absence. A forgotten tag produces no error and no red X — the worst failure shape. Meanwhile automation's failure shape (a red workflow run on main) is loud and retryable. When choosing between two unreliabilities, pick the loud one.The ship decision doesn't need the tag to stay human: it already lives in the release PR — the one PR whose whole diff is "the version leaves
-dev", carrying three bot reviews and the maintainer's. Merging it IS "hell yeah lfg". After that, tagging is transcription, and transcription is exactly where humans err and machines don't.Design
The label is the intent; the version is the interlock. The agent opens the ceremony PR labeled
release(already the hand-set convention in all three repos) with the bumped version and stamped changelog. On merge, the release happens.pull_request: closedtargeting main, gated onmerged == trueAND thereleaselabel. Closed-unmerged never fires.-dev;-devtransition as a safety check, so a mislabeled ordinary PR fails here loudly;release-notes.sh;cast-X.Y.Z.tgz). Same-job matters: aGITHUB_TOKEN-created tag does not trigger other workflows, which both forces the one-job shape and guarantees the legacy tag-push workflow cannot double-publish.Non-goals
No release-please, no auto-generated notes, no schedule — the curated-changelog culture and the PR-shaped decision stay exactly as #83 built them.
Twins: heavy-duty/rig (VERSION file, same shape) and heavy-duty/cast (version in
package.json, plus the prebuilt asset step).🤖 From the release-ceremony retro with the operator.