chore(release): v0.12.0 #165

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

Added

  • auto-prune superseded -rc.N tags after cut (closes #153)

Fixed

  • prune-rc-tags: self-pin exclusion (closes #167)
### Added - auto-prune superseded -rc.N tags after cut (closes #153) ### Fixed - **prune-rc-tags**: self-pin exclusion (closes #167)
forgejo-actions force-pushed release-prep/rolling from 3a160ddcfc
Some checks failed
check-self-bootstrap / check (pull_request) Failing after 3s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 4s
manifest-check / check (pull_request) Successful in 0s
to 7fec2474e1 2026-06-27 10:41:47 +02:00
Compare
forgejo-actions force-pushed release-prep/rolling from 7fec2474e1 to d64b2c68bf
All checks were successful
check-self-bootstrap / check (push) Successful in 3s
release / decide + act (push) Successful in 5s
release / release (push) Successful in 0s
2026-06-27 10:44:09 +02:00
Compare
surveyor approved these changes 2026-06-27 10:52:04 +02:00
surveyor left a comment

APPROVED (§6 pre-merge) — rolling PR ships v0.12.0 cleanly — with a fragment-hygiene finding

The cut content is correct: VERSION=0.12.0, title chore(release): v0.12.0, FF onto post-#169 main (7acba0a). The CHANGELOG v0.12.0 section matches the walk window — Added "auto-prune… (#153)" + Fixed "self-pin exclusion (#167)" — both traceable to the feat:/fix: commits since v0.11.0. Mergeable. So the cut itself is good to go.

But verify-at-source surfaced a real hygiene issue worth fixing — and I root-caused it at source rather than guessing.

🔶 Finding — the two changelog.d fragments are mis-named and silently skipped

changelog.d/153.feat.md and 164-fix-self-pin.fix.md persist at the rolling head (and on main) — not deleted by release-prep's delete_fragments. I reproduced why locally:

list_fragments → warning: 153.feat.md does not match `<id>.<kind>.md` (unknown kind) - skipping
                 warning: 164-fix-self-pin.fix.md does not match `<id>.<kind>.md` (unknown kind) - skipping
delete_fragments → remaining: both files

They use conventional-commit types (feat/fix) as the kind, but the fragment convention wants changelog kinds (added/fixed). So list_fragments skips them → they're never folded AND never consumed. The v0.12.0 CHANGELOG is correct only because the feat:/fix: commits independently supplied those entries — the fragments contributed nothing.

Impact (why this is a finding, not a blocker):

  • No duplication (they're never folded), so the cut ships correctly.
  • But they're dead cruft that persists across every future cut, emitting "unknown kind" warnings each time.
  • The deeper risk is the warn-and-skip: a mis-named fragment is silently dropped. Here it was masked by backing commits; a fragment with no matching commit would silently lose its CHANGELOG entry — a content-loss class.

Recommendations

  1. Delete the two fragments (not rename) — the feat:/fix: commits already cover the entries, so renaming to .added.md/.fixed.md would duplicate. Best folded into this rolling branch (or a quick commit) so main is clean post-cut and the warnings stop.
  2. Consider fail-loud on unknown-kind fragments (vs warn+skip) — a typo'd kind should break the prep, not silently drop content. That's the durable fix for the content-loss class; worth a tracker (foldable into the Sprint wave).

None of this blocks the v0.12.0 cut — content is correct. Clean to self-merge for the cut; clean the fragments before/with it if quick. I'll still verify at the cut: the #168 self-pin-exclusion proof (excluding live pin v0.12.0-rc.1 log + tag survives), the #139 paths-ignore observation, and v0.12.0 tag/release resolution. 🎯

## APPROVED (§6 pre-merge) — rolling PR ships v0.12.0 cleanly — with a fragment-hygiene finding The cut content is correct: VERSION=0.12.0, title `chore(release): v0.12.0`, FF onto post-#169 main (7acba0a). The CHANGELOG v0.12.0 section matches the walk window — Added "auto-prune… (#153)" + Fixed "self-pin exclusion (#167)" — both traceable to the `feat:`/`fix:` commits since v0.11.0. Mergeable. So the cut itself is good to go. But verify-at-source surfaced a real hygiene issue worth fixing — and I root-caused it at source rather than guessing. ### 🔶 Finding — the two changelog.d fragments are mis-named and silently skipped `changelog.d/153.feat.md` and `164-fix-self-pin.fix.md` persist at the rolling head (and on main) — *not* deleted by release-prep's `delete_fragments`. I reproduced why locally: ``` list_fragments → warning: 153.feat.md does not match `<id>.<kind>.md` (unknown kind) - skipping warning: 164-fix-self-pin.fix.md does not match `<id>.<kind>.md` (unknown kind) - skipping delete_fragments → remaining: both files ``` They use **conventional-commit types** (`feat`/`fix`) as the kind, but the fragment convention wants **changelog kinds** (`added`/`fixed`). So `list_fragments` skips them → they're **never folded AND never consumed**. The v0.12.0 CHANGELOG is correct *only* because the `feat:`/`fix:` **commits** independently supplied those entries — the fragments contributed nothing. **Impact** (why this is a finding, not a blocker): - *No duplication* (they're never folded), so the cut ships correctly. ✅ - But they're **dead cruft** that persists across every future cut, emitting "unknown kind" warnings each time. - The deeper risk is the **warn-and-skip**: a mis-named fragment is silently dropped. Here it was masked by backing commits; a fragment with *no* matching commit would **silently lose its CHANGELOG entry** — a content-loss class. ### Recommendations 1. **Delete the two fragments** (not rename) — the `feat:`/`fix:` commits already cover the entries, so renaming to `.added.md`/`.fixed.md` would *duplicate*. Best folded into this rolling branch (or a quick commit) so main is clean post-cut and the warnings stop. 2. **Consider fail-loud on unknown-kind fragments** (vs warn+skip) — a typo'd kind should break the prep, not silently drop content. That's the durable fix for the content-loss class; worth a tracker (foldable into the Sprint wave). None of this blocks the v0.12.0 cut — content is correct. Clean to self-merge for the cut; clean the fragments before/with it if quick. I'll still verify at the cut: the #168 self-pin-exclusion proof (`excluding live pin v0.12.0-rc.1` log + tag survives), the #139 paths-ignore observation, and v0.12.0 tag/release resolution. 🎯
Sign in to join this conversation.
No description provided.