WIP: chore(recovery): revert prepare v0.30.1 to unblock fresh cut (#460 recovery) #462

Closed
quartermaster wants to merge 1 commit from i/460-recovery-revert-prepare-v0.30.1 into main

Summary

Recovery per operator ratification of Option B (via Bosun 4fa1). Reverts PR#458's chore(release): prepare v0.30.1 commit (7a1e63c) to eliminate the orphan-CHANGELOG residue that #417 safeguard correctly rejected on the recovery-cut attempt @ 3bd3f50f.

Closes the recovery pathway. Next push:main → release-decide → mode=update → release-prep composes fresh v0.30.1 rolling PR bundling all pending fragments (#456 with PR#459's tightened prose + #460 from PR#461).

Context — two consecutive cut failures

  1. v0.30.1 attempt #1 (7a1e63cb, 15:55 CEST)checkout release-toolkit@v0.30.1 failed on not-yet-existent tag. Root cause: #456 A.b floating-pin + release-prep pre-time bake. Fixed by PR#461 (closes #460).

  2. v0.30.1 attempt #2 (3bd3f50f, 16:14 CEST, after PR#461 merge) — checkout succeeded (resolved toolkit ref: main (source=floating-pin-override (release-toolkit#456)) verified via task 16374 log — #460 fix empirically working). But release-decide fired the #417 orphan-CHANGELOG safeguard: CHANGELOG.md top-most released section: v0.30.1 vs manifest.last_released_version: v0.30.0. Correct behavior — the safeguard prevents silent duplicate-emission in a future rolling PR when partial-cut residue accumulates on main.

Recovery mechanism

git revert 7a1e63c restores main to a clean pre-prepare state:

  • CHANGELOG.md v0.30.1 section removed → top released is v0.30.0
  • VERSION back to 0.30.0
  • Reusables' BUILD_BAKED_TOOLKIT_REF reset from 'v0.30.1' back to 'main'
  • Fragment changelog.d/456.fixed.md restored — with PR#459's tightened prose (PR#459 landed on main BEFORE PR#458's compose, so the restored fragment file carries the tightened prose, not the original tech-dense version)

Preserved on main (NOT reverted)

  • PR#457 (e9eca94)#456 A.b floating-pin discipline. Unaffected.
  • PR#459 (2146955) — fragment prose tightening. Restored fragment carries the tightened content.
  • PR#461 (3bd3f50f)#460 resolve-ref override. Preserved (verified — reusable-release.yml still has the floating-pin-override branch).
  • changelog.d/460.fixed.md — the fragment for #460 stays on main; will compose into the fresh v0.30.1 alongside #456's tightened fragment.

Post-merge expected flow

  1. push:main → release-decide fires mode=update (fragments present, no orphan residue since we just reverted)
  2. release-prep --rolling-mode composes fresh v0.30.1 rolling PR bundling #456 + #460 fragments
  3. Rolling PR gets a fresh review + Surveyor stamp
  4. Rolling PR merges → push:main fires mode=cut
  5. resolve-ref override fires (source=floating-pin-override) — empirically verified via PR#461's live log on 3bd3f50f
  6. v0.30.1 tag created + release published (RT_PUBLISH_MODE=immediate first observation)
  7. mirror-on-cut round 4
  8. #448 evidence-point-1 attempt #3 — intended-green this time

Substrate-honesty framing

v0.30.1 = release-with-the-fix, not release-with-the-bug-then-v0.30.2-as-patch (operator ratification per Bosun 4fa1). Adopter-facing artifact matches its shipped substrate; git-log awkwardness (the reverted prep commit + a subsequent fresh prep) confined to dev-facing surfaces.

Verification AC

  • CHANGELOG.md returned to v0.30.0 as top released section (verified)
  • VERSION back to 0.30.0 (verified)
  • Reusables baked to 'main' (verified via grep BUILD_BAKED_TOOLKIT_REF)
  • changelog.d/456.fixed.md restored with tightened prose (verified via diff against PR#459 head)
  • changelog.d/460.fixed.md present (verified)
  • #460 resolve-ref override in reusable-release.yml preserved (verified via grep floating-pin-override)
  • Post-merge release-decide fires mode=update (not mode=cut) — verified via next push:main run
  • Fresh v0.30.1 rolling PR opens with all bundled fragments
  • Fresh v0.30.1 cut succeeds end-to-end
  • #417 — orphan-CHANGELOG safeguard (correctly firing; this PR resolves the orphan state)
  • #456 — A.b floating-pin (closed by PR#457)
  • #460 — AT-CUT resolve-ref override (closed by PR#461)
  • PR#457 / PR#459 / PR#461 — the arc
  • #448 — post-(A) evidence set
## Summary Recovery per operator ratification of Option B (via Bosun `4fa1`). Reverts PR#458's `chore(release): prepare v0.30.1` commit (7a1e63c) to eliminate the orphan-CHANGELOG residue that #417 safeguard correctly rejected on the recovery-cut attempt @ 3bd3f50f. Closes the recovery pathway. Next `push:main` → release-decide → `mode=update` → release-prep composes fresh v0.30.1 rolling PR bundling all pending fragments (#456 with PR#459's tightened prose + #460 from PR#461). ## Context — two consecutive cut failures 1. **v0.30.1 attempt #1 (7a1e63cb, 15:55 CEST)** — `checkout release-toolkit@v0.30.1` failed on not-yet-existent tag. Root cause: [#456](https://git.frankenbit.de/frankenbit/release-toolkit/issues/456) A.b floating-pin + release-prep pre-time bake. Fixed by [PR#461](https://git.frankenbit.de/frankenbit/release-toolkit/pulls/461) (closes [#460](https://git.frankenbit.de/frankenbit/release-toolkit/issues/460)). 2. **v0.30.1 attempt #2 (3bd3f50f, 16:14 CEST, after PR#461 merge)** — checkout succeeded (`resolved toolkit ref: main (source=floating-pin-override (release-toolkit#456))` verified via task 16374 log — #460 fix empirically working). But release-decide fired the [#417](https://git.frankenbit.de/frankenbit/release-toolkit/issues/417) orphan-CHANGELOG safeguard: `CHANGELOG.md top-most released section: v0.30.1` vs `manifest.last_released_version: v0.30.0`. Correct behavior — the safeguard prevents silent duplicate-emission in a future rolling PR when partial-cut residue accumulates on main. ## Recovery mechanism `git revert 7a1e63c` restores main to a clean pre-prepare state: - CHANGELOG.md v0.30.1 section removed → top released is v0.30.0 - VERSION back to 0.30.0 - Reusables' `BUILD_BAKED_TOOLKIT_REF` reset from `'v0.30.1'` back to `'main'` - Fragment `changelog.d/456.fixed.md` restored — with [PR#459](https://git.frankenbit.de/frankenbit/release-toolkit/pulls/459)'s tightened prose (PR#459 landed on main BEFORE PR#458's compose, so the restored fragment file carries the tightened prose, not the original tech-dense version) ## Preserved on main (NOT reverted) - **PR#457 (`e9eca94`)** — #456 A.b floating-pin discipline. Unaffected. - **PR#459 (`2146955`)** — fragment prose tightening. Restored fragment carries the tightened content. - **PR#461 (`3bd3f50f`)** — #460 resolve-ref override. Preserved (verified — reusable-release.yml still has the floating-pin-override branch). - **`changelog.d/460.fixed.md`** — the fragment for #460 stays on main; will compose into the fresh v0.30.1 alongside #456's tightened fragment. ## Post-merge expected flow 1. push:main → release-decide fires `mode=update` (fragments present, no orphan residue since we just reverted) 2. release-prep --rolling-mode composes fresh v0.30.1 rolling PR bundling #456 + #460 fragments 3. Rolling PR gets a fresh review + Surveyor stamp 4. Rolling PR merges → push:main fires `mode=cut` 5. resolve-ref override fires (`source=floating-pin-override`) — empirically verified via PR#461's live log on 3bd3f50f 6. v0.30.1 tag created + release published (RT_PUBLISH_MODE=immediate first observation) 7. mirror-on-cut round 4 8. [#448](https://git.frankenbit.de/frankenbit/release-toolkit/issues/448) evidence-point-1 attempt #3 — intended-green this time ## Substrate-honesty framing **v0.30.1 = release-with-the-fix, not release-with-the-bug-then-v0.30.2-as-patch** (operator ratification per Bosun `4fa1`). Adopter-facing artifact matches its shipped substrate; git-log awkwardness (the reverted prep commit + a subsequent fresh prep) confined to dev-facing surfaces. ## Verification AC - ✅ CHANGELOG.md returned to v0.30.0 as top released section (verified) - ✅ VERSION back to 0.30.0 (verified) - ✅ Reusables baked to `'main'` (verified via `grep BUILD_BAKED_TOOLKIT_REF`) - ✅ `changelog.d/456.fixed.md` restored with tightened prose (verified via `diff` against PR#459 head) - ✅ `changelog.d/460.fixed.md` present (verified) - ✅ #460 resolve-ref override in reusable-release.yml preserved (verified via `grep floating-pin-override`) - ⏳ Post-merge release-decide fires `mode=update` (not `mode=cut`) — verified via next push:main run - ⏳ Fresh v0.30.1 rolling PR opens with all bundled fragments - ⏳ Fresh v0.30.1 cut succeeds end-to-end ## Related - [#417](https://git.frankenbit.de/frankenbit/release-toolkit/issues/417) — orphan-CHANGELOG safeguard (correctly firing; this PR resolves the orphan state) - [#456](https://git.frankenbit.de/frankenbit/release-toolkit/issues/456) — A.b floating-pin (closed by PR#457) - [#460](https://git.frankenbit.de/frankenbit/release-toolkit/issues/460) — AT-CUT resolve-ref override (closed by PR#461) - [PR#457](https://git.frankenbit.de/frankenbit/release-toolkit/pulls/457) / [PR#459](https://git.frankenbit.de/frankenbit/release-toolkit/pulls/459) / [PR#461](https://git.frankenbit.de/frankenbit/release-toolkit/pulls/461) — the arc - [#448](https://git.frankenbit.de/frankenbit/release-toolkit/issues/448) — post-(A) evidence set
Revert "chore(release): prepare v0.30.1"
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 4s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Successful in 3s
fragment-check / changelog fragment-kind (pull_request) Successful in 4s
fragment-check / check (pull_request) Successful in 0s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 10s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 4s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m56s
tests / shellcheck (pull_request) Successful in 7s
4343770c1e
This reverts commit 7a1e63cbe7.

**Recovery per operator ratification of Option B (Bosun 4fa1)**.

The v0.30.1 cut failed twice: first at 7a1e63cb (#460 chain-break,
fixed by PR#461), second at 3bd3f50f (#417 orphan-CHANGELOG
safeguard firing on the residue). The safeguard was doing its job —
CHANGELOG.md documented v0.30.1 as released but manifest never
advanced (because the first cut couldn't finish).

Option B ("release-with-the-fix, not release-with-bug-then-patch"):
revert PR#458's prepare-v0.30.1 commit so main returns to a clean
pre-cut state, then next release-decide fires mode=update →
release-prep --rolling-mode composes a FRESH v0.30.1 rolling PR
bundling all pending fragments (#453 already merged, #456 with
PR#459's tightened prose, and #460 from PR#461). That composed
v0.30.1 tag will point at code including the #460 override fix,
which makes v0.30.1's adopter-facing artifact substrate-honest
w.r.t. its own release-notes attribution.

**Preserved on main (NOT reverted)**:
- PR#457 (e9eca94, #456 A.b floating-pin implementation)
- PR#459 (2146955, fragment prose tightening — restored fragment
  file carries the tightened prose)
- PR#461 (3bd3f50f, #460 resolve-ref override)

**Reverted**:
- 7a1e63cb's compose changes: CHANGELOG v0.30.1 section removed,
  VERSION back to 0.30.0, reusables' BUILD_BAKED_TOOLKIT_REF
  reset from 'v0.30.1' to 'main', 456.fixed.md fragment restored
  (with PR#459's tightened prose).

**Post-merge expected flow**:
1. push:main → release-decide fires mode=update (fragments present + no cut recovery needed)
2. release-prep --rolling-mode composes fresh v0.30.1 rolling PR
3. Rolling PR merges → push:main fires mode=cut
4. resolve-ref override fires (source=floating-pin-override) — verified working via PR#461's live log
5. v0.30.1 tag created + release published (RT_PUBLISH_MODE=immediate)
6. mirror-on-cut round 4
7. #448 evidence-point-1 attempt #3 — this time as intended-green

Refs: frankenbit/release-toolkit#417, #456, #460, PR#461
Bosun-routed operator ratification: 4fa1
Author
Owner

HOLD per Bosun f8b2 (2026-07-07 16:23) — Surveyor sent substantive Option A analysis after operator ratification of B; Bosun routing back to operator for reconsider-or-affirm. Not overriding unilaterally.

Converting to draft while operator re-ratifies. If B affirmed: undraft + merge. If flipped to A: close + fire manual completion path per integration.md § cut-cancellation.

**HOLD** per Bosun `f8b2` (2026-07-07 16:23) — Surveyor sent substantive Option A analysis after operator ratification of B; Bosun routing back to operator for reconsider-or-affirm. Not overriding unilaterally. Converting to draft while operator re-ratifies. If B affirmed: undraft + merge. If flipped to A: close + fire manual completion path per integration.md § cut-cancellation.
quartermaster changed title from chore(recovery): revert prepare v0.30.1 to unblock fresh cut (#460 recovery) to WIP: chore(recovery): revert prepare v0.30.1 to unblock fresh cut (#460 recovery) 2026-07-07 16:23:47 +02:00
quartermaster closed this pull request 2026-07-07 16:33:38 +02:00
Some checks are pending
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 4s
Required
Details
changelog-body-check / check (pull_request) Successful in 0s
Required
Details
check-self-bootstrap / check (pull_request) Successful in 3s
Required
Details
fragment-check / changelog fragment-kind (pull_request) Successful in 4s
fragment-check / check (pull_request) Successful in 0s
Required
Details
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 10s
Required
Details
manifest-check / check (pull_request) Successful in 0s
Required
Details
register-check / register-drift check (pull_request) Successful in 4s
Required
Details
register-check / check (pull_request) Successful in 0s
Required
Details
tests / bats (pull_request) Successful in 1m56s
Required
Details
tests / shellcheck (pull_request) Successful in 7s
Required
Details
ac-closure-check / ac-closure check (pull_request)
Required
ac-closure-check / check (pull_request)
Required
fragment-check / coverage (pull_request)
Required
fragment-check / density (pull_request)
Required
gitea-twin-check / check (pull_request)
Required
go-ci / lint + build + test (pull_request)
Required
prep-order-check / check (pull_request)
Required
readme-pin-check / digest (pull_request)
Required
tests / contract-paths (pull_request)
Required
tests / dated-examples (pull_request)
Required
tests / workflow-schema (pull_request)
Required
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request)
Required
workflow-parse-check / check (pull_request)
Required
workflow-parse-check / toolkit-self parse guard and controls (pull_request)
Required
workflow-parse-check / workflow parse and schema (pull_request)
Required

Pull request closed

Sign in to join this conversation.
No description provided.