fix(release): refuse buried prepare commits before merge #719

Closed
lookout wants to merge 1 commit from i/688-premerge-cut-safeguard into main
Member

Closes #688

Adds a pull-request status to the existing release wrapper for release-prep/rolling. The check is deliberately narrower than Layer 2: the generated prepare commit must be HEAD. A later commit fails before merge and names the version, prepare SHA and current head. The release job remains push/dispatch-only.

Verification:

  • exact YAML run: block passes with chore(release): prepare v9.8.7 at HEAD
  • the same block exits 1 after a docs commit is added above it, naming v9.8.7 and both SHAs
  • mutation exit 1 -> exit 0 makes that Bats arm fail
  • all 242 available Bats tests pass

Not checked locally: Go tests; this chamber has no Go toolchain. The change touches YAML, Bash and Bats only.

Boundary with #690: this PR does not touch internal/decide or merged-PR lookup.

Closes #688 Adds a pull-request status to the existing release wrapper for `release-prep/rolling`. The check is deliberately narrower than Layer 2: the generated prepare commit must be HEAD. A later commit fails before merge and names the version, prepare SHA and current head. The release job remains push/dispatch-only. Verification: - exact YAML `run:` block passes with `chore(release): prepare v9.8.7` at HEAD - the same block exits 1 after a docs commit is added above it, naming v9.8.7 and both SHAs - mutation `exit 1 -> exit 0` makes that Bats arm fail - all 242 available Bats tests pass Not checked locally: Go tests; this chamber has no Go toolchain. The change touches YAML, Bash and Bats only. Boundary with #690: this PR does not touch `internal/decide` or merged-PR lookup.
fix(release): refuse buried prepare commits before merge
Some checks failed
check-self-bootstrap / check (pull_request) Successful in 3s
fragment-check / changelog fragment-kind (pull_request) Successful in 8s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 22s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 6s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Failing after 6s
register-check / check (pull_request) Failing after 0s
release / rolling-prep-head (pull_request) Has been skipped
release / decide + act (pull_request) Failing after 8s
release / release (pull_request) Failing after 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
f52d0f68c6
Author
Member

HOLD: the current prepare commit must be HEAD predicate conflicts with #690 and the supported #259/#663 buried-prepare path. An open PR has no merge_commit_sha; I am replacing this with the actual pre-merge Layer-2 invariant before requesting another review. Do not stamp f52d0f68.

HOLD: the current `prepare commit must be HEAD` predicate conflicts with #690 and the supported #259/#663 buried-prepare path. An open PR has no `merge_commit_sha`; I am replacing this with the actual pre-merge Layer-2 invariant before requesting another review. Do not stamp f52d0f68.
Author
Member

Additional hold evidence: the inline prepare regex at f52d0f68 is stricter than the canonical scripts/lib/prep-subject.sh expression. It rejects supported squash-style subjects and trailing (#N) subjects. Any replacement will source the canonical library rather than add a third regex copy. #690 remains open separately because its decline values are recorded but not emitted.

Additional hold evidence: the inline prepare regex at f52d0f68 is stricter than the canonical `scripts/lib/prep-subject.sh` expression. It rejects supported squash-style subjects and trailing `(#N)` subjects. Any replacement will source the canonical library rather than add a third regex copy. #690 remains open separately because its decline values are recorded but not emitted.
Author
Member

Closing this implementation PR. AC1 was retired as refuted by current main, no replacement invariant is specified, and the workflow-level pull_request trigger introduces two CI failures. Issue #688 remains open for safeguard timing semantics.

Closing this implementation PR. AC1 was retired as refuted by current main, no replacement invariant is specified, and the workflow-level pull_request trigger introduces two CI failures. Issue #688 remains open for safeguard timing semantics.
lookout closed this pull request 2026-08-19 07:33:38 +02:00
Some checks are pending
check-self-bootstrap / check (pull_request) Successful in 3s
fragment-check / changelog fragment-kind (pull_request) Successful in 8s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 22s
Required
Details
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 6s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Failing after 6s
register-check / check (pull_request) Failing after 0s
release / rolling-prep-head (pull_request) Has been skipped
release / decide + act (pull_request) Failing after 8s
release / release (pull_request) Failing after 0s
tests / bats (pull_request) Successful in 22s
Required
Details
tests / shellcheck (pull_request) Successful in 7s
pr / gates (pull_request)
Required
tests / checks (pull_request)
Required
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request)
Required

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frankenbit/release-toolkit!719
No description provided.