chore(ci): exempt rolling PRs from check-self-bootstrap between-cuts red #304

Closed
opened 2026-07-02 23:38:19 +02:00 by quartermaster · 0 comments

Why

Rolling PRs (release-bot's release-prep/rolling branch, opened by reusable-release.yml in mode=update) always show a red check-self-bootstrap between cuts. That's the design contract of #124 mechanism-of-touch — whenever a compose-script changes on main, the pinned ref lags until the next cut fires #283 auto-re-pin. On rolling PRs specifically, "the mechanism that would fix the drift IS the drift" — the red is genuine but non-actionable on that PR.

Operator directive verbatim (bosun f9b0):

"It would be genuinely great to have such PRs without any failing runs — whatever the reasons may be. But I guess we're already on the way to that."

The between-cuts red on rolling PRs is exactly the class the operator's preference names: a failing run on a PR that isn't actionable AT that PR.

Scope

Add a condition on the head branch in the check-self-bootstrap job or the changelog-body-check reusable that skips the check when the head is release-prep/rolling (or a broader pattern covering any release-bot-opened rolling PR).

Two shapes to weigh:

  • Skip on rolling head (simpler): if: !startsWith(github.head_ref, 'release-prep/') on the job. Zero-cost, matches operator preference of no failing runs on rolling PRs.
  • Fail-info (heavier): keep the check but emit a warning-not-error when detected on a rolling head. Preserves the diagnostic surface for cases where the rolling PR ALSO has an actual misalignment (rare but possible).

The former matches the operator's stated preference exactly; the latter preserves more information but reintroduces the failing-runs class the operator wants to eliminate. Simplest lean: shape 1.

What this does NOT do

  • Does NOT change check-self-bootstrap.sh's logic — the check itself is correct + should keep firing on regular PRs (its purpose is exactly to fail-loud when compose-scripts changed but pin didn't update).
  • Does NOT skip alignment-check on rolling — single-ref-alignment across the 4 wrappers is a different invariant (per #163) and stays enforced. Only the compose-script-differs-from-pin surface gets rolling-PR exemption.
  • Does NOT touch #124's mechanism-of-touch design contract for regular PRs.

Refs

  • Empirical anchor: post-#302 v0.23.0 rolling PR #303 red on check-self-bootstrap due to sidecar-elimination compose-script touch + retirement-transition (.release-toolkit-release-notes.md file deletion staged on rolling); this is the class where the design contract fires but is not actionable on the rolling PR.
  • Meta-shape: same class as release-toolkit#295 ergonomics-not-safety (detector fires loud, no substrate risk, just annoyance).
  • Bosun f9b0 operator relay routing this to my discretion post-Set-F.
## Why Rolling PRs (release-bot's `release-prep/rolling` branch, opened by `reusable-release.yml` in `mode=update`) always show a red `check-self-bootstrap` between cuts. That's the design contract of [#124 mechanism-of-touch](https://git.frankenbit.de/frankenbit/release-toolkit/issues/124) — whenever a compose-script changes on `main`, the pinned ref lags until the next cut fires `#283` auto-re-pin. On rolling PRs specifically, "the mechanism that would fix the drift IS the drift" — the red is genuine but non-actionable on that PR. Operator directive verbatim ([bosun `f9b0`](chat)): > "It would be genuinely great to have such PRs without any failing runs — whatever the reasons may be. But I guess we're already on the way to that." The between-cuts red on rolling PRs is exactly the class the operator's preference names: a failing run on a PR that isn't actionable AT that PR. ## Scope Add a condition on the head branch in the `check-self-bootstrap` job or the `changelog-body-check` reusable that skips the check when the head is `release-prep/rolling` (or a broader pattern covering any release-bot-opened rolling PR). Two shapes to weigh: - **Skip on rolling head** (simpler): `if: !startsWith(github.head_ref, 'release-prep/')` on the job. Zero-cost, matches operator preference of no failing runs on rolling PRs. - **Fail-info** (heavier): keep the check but emit a warning-not-error when detected on a rolling head. Preserves the diagnostic surface for cases where the rolling PR ALSO has an actual misalignment (rare but possible). The former matches the operator's stated preference exactly; the latter preserves more information but reintroduces the failing-runs class the operator wants to eliminate. Simplest lean: shape 1. ## What this does NOT do - Does NOT change `check-self-bootstrap.sh`'s logic — the check itself is correct + should keep firing on regular PRs (its purpose is exactly to fail-loud when compose-scripts changed but pin didn't update). - Does NOT skip alignment-check on rolling — single-ref-alignment across the 4 wrappers is a different invariant (per [#163](https://git.frankenbit.de/frankenbit/release-toolkit/issues/163)) and stays enforced. Only the compose-script-differs-from-pin surface gets rolling-PR exemption. - Does NOT touch [#124](https://git.frankenbit.de/frankenbit/release-toolkit/issues/124)'s mechanism-of-touch design contract for regular PRs. ## Refs - Empirical anchor: post-#302 v0.23.0 rolling PR #303 red on check-self-bootstrap due to sidecar-elimination compose-script touch + retirement-transition (`.release-toolkit-release-notes.md` file deletion staged on rolling); this is the class where the design contract fires but is not actionable on the rolling PR. - Meta-shape: same class as [release-toolkit#295](https://git.frankenbit.de/frankenbit/release-toolkit/pulls/299) ergonomics-not-safety (detector fires loud, no substrate risk, just annoyance). - Bosun `f9b0` operator relay routing this to my discretion post-Set-F.
Sign in to join this conversation.
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#304
No description provided.