chore(release): v0.67.0 #1553

Merged
alex merged 1 commit from release-prep/rolling into main 2026-10-06 00:08:11 +02:00
Member

Cut-time changelog gates - clean

  • PASS - register-check: no register drift in [v0.67.0]
  • PASS - check 1 (header): version=0.67.0 date=2026-10-05
  • PASS - check 2 (sections): all standard sections present (Added Changed Fixed Removed Deprecated Upgrade)
  • PASS - check 3 (forward-refs): no version pins above 0.67.0
  • PASS - check 4 (length): body is 257 chars (soft ceiling 5000)
  • PASS - check 5 (style): all sections consistent (all-bullet or all-prose)
  • PASS - check 6 (duplicates): no duplicate version sections in whole CHANGELOG.md; no duplicate ### Section headers in newest section
  • PASS - check 7 (sentence length): all sentences ≤ 25 words. Lists, tables and blockquotes are measured too (#632).
  • PASS - check 8 (paren nesting): all paragraphs ≤ depth 2
  • PASS - check 9 (paragraph length): all paragraphs ≤ 75 words. Lists, tables and blockquotes are measured too (#632).

Advisory mirror of rt compose-verify, the cut-time preflight, run on the CHANGELOG this prep wrote. It carries no authority: the cut re-runs it against the file as it stands then, and this branch is recreated from main on every compose.

Added

None.

Changed

None.

Fixed

None.

Removed

  • pr gates: six single-gate reusables are gone: wire one pr.yml on reusable-pr-gates.yml and require pr / gates (pull_request) (#1542)

Deprecated

None.

Upgrade

None.

<!-- rt:density-verdict --> ### Cut-time changelog gates - clean - **PASS** - register-check: no register drift in [v0.67.0] - **PASS** - check 1 (header): version=0.67.0 date=2026-10-05 - **PASS** - check 2 (sections): all standard sections present (Added Changed Fixed Removed Deprecated Upgrade) - **PASS** - check 3 (forward-refs): no version pins above 0.67.0 - **PASS** - check 4 (length): body is 257 chars (soft ceiling 5000) - **PASS** - check 5 (style): all sections consistent (all-bullet or all-prose) - **PASS** - check 6 (duplicates): no duplicate version sections in whole CHANGELOG.md; no duplicate ### Section headers in newest section - **PASS** - check 7 (sentence length): all sentences ≤ 25 words. Lists, tables and blockquotes are measured too (#632). - **PASS** - check 8 (paren nesting): all paragraphs ≤ depth 2 - **PASS** - check 9 (paragraph length): all paragraphs ≤ 75 words. Lists, tables and blockquotes are measured too (#632). _Advisory mirror of `rt compose-verify`, the cut-time preflight, run on the CHANGELOG this prep wrote._ _It carries no authority: the cut re-runs it against the file as it stands then, and this branch is recreated from `main` on every compose._ <!-- /rt:density-verdict --> ### Added None. ### Changed None. ### Fixed None. ### Removed - **pr gates**: six single-gate reusables are gone: wire one `pr.yml` on `reusable-pr-gates.yml` and require `pr / gates (pull_request)` (#1542) ### Deprecated None. ### Upgrade None.
chore(release): prepare v0.67.0
Some checks are pending
pr / changelog_body (pull_request) Has been skipped
pr / register (pull_request) Has been skipped
pr / ac_closure (pull_request) Has been skipped
pr / workflow_parse (pull_request) Has been skipped
pr / split result (pull_request) Has been skipped
pr / gates (pull_request) Successful in 0s
check-self-bootstrap / check (push) Successful in 5s
gitea-twin-check / check (push) Successful in 4s
go-ci / lint + build + test (push) Successful in 34s
go-ci / record reviewed vs landed commit (push) Successful in 2s
prepared-uncut-check / toolkit-self prepared-uncut controls (push) Successful in 5s
prepared-uncut-check / prepared-but-uncut release (push) Successful in 7s
prepared-uncut-check / check (push) Successful in 0s
release / decide + act (push) Successful in 8s
release / release (push) Successful in 0s
tests / bats (push) Successful in 36s
tests / checks (push) Successful in 9s
go-ci / page landing-tree failure (push) Has been skipped
release / fire-cut (push) Successful in 1s
release-toolkit/manifest-postcondition manifest-postcondition verdict=landed
build-ref-check / check (push) Successful in 6s
goreleaser / build + publish rt asset (push) Successful in 12s
mirror-drift-check / drift no unmirrored asset-bearing release
mirror-drift-check / could-not-grade no unmirrored asset-bearing release
mirror-drift-check / newest-release NOT GRADED: v0.67.0 just published and was excluded from this run; the daily scheduled run grades it
mirror drift check / check (release) Successful in 7s
goreleaser / the release actually holds its assets (push) Successful in 2s
goreleaser / publish the rt image + bake its digest (push) Successful in 26s
goreleaser / adopters can pull the published image (push) Successful in 5s
goreleaser / adopters can fetch the published asset (push) Successful in 4s
901c9fca56
Generated by release-toolkit rt prep.

Tracker: frankenbit/release-toolkit#1
alex approved these changes 2026-10-06 00:02:28 +02:00
claude left a comment

Verdict: APPROVE at 901c9fca56

Summary: the v0.67.0 cut is clean. The bake rewrites exactly the 8 remaining markers, the CHANGELOG carries the one Removed bullet, and the #1540 exemption and the #1541 gates ran live on this rolling PR. On the Upgrade question, I recommend shipping as is, with reasons and the tested alternative below. Verified at source (AGENTS.md section 6).

Head pinned with rt review-submit-check (rc=0, READY) immediately before this review. Base 0de3876 is live main, with #1552 landed. One commit by release-bot.

1. CHANGELOG and VERSION

  • VERSION: 0.66.0 becomes 0.67.0.
  • ## [v0.67.0] - 2026-10-05: ### Removed holds exactly one bullet, - **pr gates**: six single-gate reusables are gone: wire one pr.ymlonreusable-pr-gates.ymland requirepr / gates (pull_request) (#1542). Added, Changed, Fixed, Deprecated and Upgrade read None.
  • The fragment is consumed. changelog.d/1542-remove-single-gate-reusables.removed.md is deleted; it was the only fragment on the base. .keep and .template.md stay.

2. The bake

git diff 0de3876...901c9fc over .forgejo/workflows and .gitea/workflows gives exactly 8 removed and 8 added lines, all the marker going from 'main' to 'v0.67.0', in reusable-pr-gates, reusable-prepared-uncut-check, reusable-recover-pending-cut and reusable-release, on both providers. Nothing else changes. No workflow file at head carries a marker with any other value.

3. Live runs (Axis C)

  • toolkit-self-gates (run 19889, commit 901c9fca56), g10: check-self-bootstrap: EXEMPT on the release-prep rolling PR (release-prep/rolling, #304). Attest reads EXEMPT: g10 recorded an exemption, which EXEMPTABLE_GATE_IDS allows, then 15 of 15.
  • pr / plan, and run every gate when combined (run 19886, job 1): it resolved the toolkit ref to main (source=toolkit-self local invocation, ADR-0013 D6), and the replay passed against 0de3876. The gates logged:
    • manifest: passed;
    • fragments: cut consumed: changelog.d/1542-remove-single-gate-reusables.removed.md (CHANGELOG.md modified), coverage and density PASS;
    • changelog_body: version=0.67.0 date=2026-10-05;
    • register: 0 hits;
    • ac_closure: nothing to check;
    • workflow_parse: PARSED=26 TOTAL=26.
      The tree was unchanged and attest passed.
  • tests / bats: 1..241, no not ok. tests / checks: attest 14 of 14.
  • Statuses: 18, all success. The protection, read back live, holds exactly 5 required contexts, and all 5 posted success here.

4. The Upgrade question: recommendation, ship as is

What the contract says:

  • upgrade is not a fragment kind. valid_kinds is added changed deprecated removed fixed security internal.
  • The changelog-format contract says Upgrade is "a CHANGELOG-only migration-guidance section — it is not a fragment kind and is never produced by fragment folding". It is either authored, or rendered from breaking commits in a release without fragments (ADR-0012).
  • docs/conventions.md for a breaking commit: "bump only; add a fragment, or ### Upgrade prose". This release took the first branch, with a fragment whose rendered summary line is the migration instruction.

The alternative works, and I tested it. I added ### Upgrade prose under [Unreleased] on top of 0de3876, in an LF clone, and ran rt prep --dry-run. It composes into [v0.67.0] as ### Upgrade with the bullet, next to the fragment's Removed entry. So if wanted, the route is a small docs(changelog) PR on main that adds that prose. A fragment cannot do it. The rolling PR then recomposes and needs one more cut review.

Why I would not do it:

  • No adopter needs it. All five adopters' main already wire pr.yml on reusable-pr-gates.yml@v0.66.0 with release.yml@v0.66.0; none calls a removed reusable. I read each repo's .forgejo/workflows live. Bumping any of them to v0.67.0 is a drop-in, so "Upgrade: None." is literally true for every existing adopter.
  • The migration is already in the rendered note. The Removed bullet's summary says what to do. The detail (old tags keep working, the same pin for both files, check_commit_subjects dropped, renamed statuses) lives in the fragment body and the commit footer.
  • Precedent: v0.65.0 (#1529) carried its upgrade advice in a changed fragment with Upgrade: None.

The case for adding it is a future adopter outside frankenbit who scans only ### Upgrade. If Alex wants that covered, the prose route above is the tested one. A durable alternative is a small follow-up so that a fragment's BREAKING CHANGE: body can render under Upgrade. Today #854 renders only summaries, so that detail never reaches CHANGELOG.md.

Next: Alex merges with the admin bypass. Then verify the v0.67.0 tag, its assets and the minisign signature before mirror-release.

Verdict: APPROVE at 901c9fca56b063adc21969536ae44e1311af0129 Summary: the v0.67.0 cut is clean. The bake rewrites exactly the 8 remaining markers, the CHANGELOG carries the one Removed bullet, and the #1540 exemption and the #1541 gates ran live on this rolling PR. On the Upgrade question, I recommend shipping as is, with reasons and the tested alternative below. Verified at source (AGENTS.md section 6). Head pinned with `rt review-submit-check` (rc=0, READY) immediately before this review. Base `0de3876` is live main, with #1552 landed. One commit by release-bot. ## 1. CHANGELOG and VERSION - **`VERSION`:** `0.66.0` becomes `0.67.0`. - **`## [v0.67.0] - 2026-10-05`:** `### Removed` holds exactly one bullet, `- **pr gates**: six single-gate reusables are gone: wire one `pr.yml` on `reusable-pr-gates.yml` and require `pr / gates (pull_request)` (#1542)`. Added, Changed, Fixed, Deprecated and Upgrade read `None.` - **The fragment is consumed.** `changelog.d/1542-remove-single-gate-reusables.removed.md` is deleted; it was the only fragment on the base. `.keep` and `.template.md` stay. ## 2. The bake `git diff 0de3876...901c9fc` over `.forgejo/workflows` and `.gitea/workflows` gives exactly 8 removed and 8 added lines, all the marker going from `'main'` to `'v0.67.0'`, in `reusable-pr-gates`, `reusable-prepared-uncut-check`, `reusable-recover-pending-cut` and `reusable-release`, on both providers. Nothing else changes. No workflow file at head carries a marker with any other value. ## 3. Live runs (Axis C) - **`toolkit-self-gates`** (run 19889, commit 901c9fca56), g10: `check-self-bootstrap: EXEMPT on the release-prep rolling PR (release-prep/rolling, #304).` Attest reads `EXEMPT: g10 recorded an exemption, which EXEMPTABLE_GATE_IDS allows`, then `15 of 15`. - **`pr / plan, and run every gate when combined`** (run 19886, job 1): it resolved the toolkit ref to `main` (source=toolkit-self local invocation, ADR-0013 D6), and the replay passed against `0de3876`. The gates logged: - manifest: passed; - fragments: `cut consumed: changelog.d/1542-remove-single-gate-reusables.removed.md (CHANGELOG.md modified)`, coverage and density PASS; - changelog_body: `version=0.67.0 date=2026-10-05`; - register: 0 hits; - ac_closure: nothing to check; - workflow_parse: `PARSED=26 TOTAL=26`. The tree was unchanged and attest passed. - **`tests / bats`:** `1..241`, no `not ok`. **`tests / checks`:** attest `14 of 14`. - **Statuses:** 18, all success. The protection, read back live, holds exactly 5 required contexts, and all 5 posted success here. ## 4. The Upgrade question: recommendation, ship as is What the contract says: - **`upgrade` is not a fragment kind.** `valid_kinds` is `added changed deprecated removed fixed security internal`. - **The changelog-format contract** says `Upgrade` is "a CHANGELOG-only migration-guidance section — it is **not** a fragment kind and is never produced by fragment folding". It is either authored, or rendered from breaking commits in a release *without* fragments (ADR-0012). - **`docs/conventions.md`** for a breaking commit: "bump only; add a fragment, or `### Upgrade` prose". This release took the first branch, with a fragment whose rendered summary line *is* the migration instruction. The alternative works, and I tested it. I added `### Upgrade` prose under `[Unreleased]` on top of `0de3876`, in an LF clone, and ran `rt prep --dry-run`. It composes into `[v0.67.0]` as `### Upgrade` with the bullet, next to the fragment's Removed entry. So if wanted, the route is a small `docs(changelog)` PR on main that adds that prose. A fragment cannot do it. The rolling PR then recomposes and needs one more cut review. Why I would not do it: - **No adopter needs it.** All five adopters' `main` already wire `pr.yml` on `reusable-pr-gates.yml@v0.66.0` with `release.yml@v0.66.0`; none calls a removed reusable. I read each repo's `.forgejo/workflows` live. Bumping any of them to v0.67.0 is a drop-in, so "Upgrade: None." is literally true for every existing adopter. - **The migration is already in the rendered note.** The Removed bullet's summary says what to do. The detail (old tags keep working, the same pin for both files, `check_commit_subjects` dropped, renamed statuses) lives in the fragment body and the commit footer. - **Precedent:** v0.65.0 (#1529) carried its upgrade advice in a `changed` fragment with `Upgrade: None.` The case for adding it is a future adopter outside frankenbit who scans only `### Upgrade`. If Alex wants that covered, the prose route above is the tested one. A durable alternative is a small follow-up so that a fragment's `BREAKING CHANGE:` body can render under Upgrade. Today #854 renders only summaries, so that detail never reaches CHANGELOG.md. **Next:** Alex merges with the admin bypass. Then verify the `v0.67.0` tag, its assets and the minisign signature before mirror-release.
alex merged commit 901c9fca56 into main 2026-10-06 00:08:11 +02:00
alex deleted branch release-prep/rolling 2026-10-06 00:08:11 +02:00

Landing identity record

  • PR: #1553
  • landed commit (server merge_commit_sha): 901c9fca56b063adc21969536ae44e1311af0129
  • effective official approval(s):
    • @alex, review #7259, stamped commit: 901c9fca56b063adc21969536ae44e1311af0129
  • replay comparison: no identity change (stamped SHA equals landed SHA)

This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.

<!-- release-toolkit:landing-review-record-v1 landed=901c9fca56b063adc21969536ae44e1311af0129 --> ## Landing identity record - PR: #1553 - landed commit (server merge_commit_sha): `901c9fca56b063adc21969536ae44e1311af0129` - effective official approval(s): - @alex, review #7259, stamped commit: `901c9fca56b063adc21969536ae44e1311af0129` - replay comparison: no identity change (stamped SHA equals landed SHA) This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
4 participants
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!1553
No description provided.