chore(release): v0.19.1 #261
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!261
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/259-cut-detect-range"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixed
Fragment-vs-conventional-commit duplicate suppressed at generation layer: when a
changelog.dfragment and a conventional-commit subject reference the same issue number ((#NNN)),release-prep.shnow suppresses the CC-subject bullet in favour of the fragment prose. Previously both entries appeared (the v0.1 behaviour), and any manual dedup was silently wiped when the rolling prep PR regenerated on rebase (tmux-tell#630 — deduped twice in one session; surfaces #258). Fragment prose is richer; the CC-subject bullet is a mechanical extract — the richer source wins. A[changelog-dedup]line is logged to stderr for auditability. (#258)changelog: dedup fragment-vs-CC-subject at generation layer (#258)
APPROVED — head
5c309edRan the suite + reproduced both the fix and the mutation-anchor at source. The refinement-1 catch is baked in and empirically pinned.
Verified by running it (scratch clone @
5c309ed)--first-parentinto the range scan → only test 37 (merge-commit) flipped tonot ok; the linear buried cases (35/36) stayed green because they are on the first-parent chain. That isolates the subtlety exactly — the full-walk is load-bearing precisely for the merge-commit second-parent case, and test 37 is the tripwire if anyone ever reintroduces--first-parent. Reverted → 6/6 green.shellcheckshows only SC1091 (can't-follow-sourced-lib, info) — a cwd artifact of my scratch run, not a finding.Logic — sound
CUT_VERSION-nonempty guard replaces the old HEAD-subject-onlyif, so HEAD-match and range-match both flow through the same Layer 2/3 gate. The gate is keyed onHEAD_SHA(resolves the merged PR regardless of which commit carries the subject) — so the fail-loud invariant holds by construction: a prepare-in-range always enters the gate, and any decline isSAFEGUARD_FAIL-loud. The new silentelsefires only when no prepare exists anywhere (genuine non-cut). Exactly the AC. ✓git log LAST_SHA..HEAD --format='%H %s', no--first-parent);${prep_line#* }/%% *parse subject/SHA correctly; newest-match-wins via first-matchbreakon git-log default reverse-chron order. ✓The two design calls — both fine
prep_sourceemit (head|range): additive observability key; reusable-release reads emits by name, so an extra key is harmless. Useful for debugging which path fired. ✓--date-orderwould make "newest" explicit rather than leaning on git-log's default ordering — but it doesn't change behavior for any realistic range, so take it or leave it.)Scope — correctly drawn
Squash-merge explicitly out (subject is gone; needs Layer-2-as-primary, the #259 follow-up) and the #257 CI-trigger coupling framed as complementary-not-chained — both match the diagnosis-review framing. The decision-tree-in-the-comment is exactly the right place to record why full-walk.
One cross-PR adjacency note (not blocking)
This adds a
fix(release-decide):commit and a259.fixed.mdfragment — the double-render-prone pair. It's harmless once #262 (the CHANGELOG-gen dedup) lands, but a release-toolkit cut in the window between #261 and #262 would double-render #259. Worth landing #262 first or together. (Flagging since both are in my queue.)Clean implementation of the diagnosis. Clear to merge.
fix(release-decide): detect buried prepare commit in merged range (#259)to chore(release): v0.19.15c309edd784283932f92APPROVED — rebased head
4283932(re-pin; supersedes the stale5c309edstamp)Re-stamp after the post-#262 rebase. Verified the byte-identity claim at source rather than taking it on assertion.
release-decide.sh,release-decide.bats,259.fixed.mdat both5c309edand4283932and diffed — identical (23256 / 29504 / 1056 bytes, zero diff). Pure base-move, no content change. ✓f7de7d9(the merged dedup) is an ancestor of4283932; base readsf7de7d9. ✓Since the content is byte-identical, my prior verification carries forward in full — the 6 #259 bats and the reproduced mutation-anchor (inject
--first-parent→ only the merge-commit test flips) all hold at4283932. My approval is now pinned to the live merge target, so #261 won't merge on a stale-SHA stamp.Clear to merge (per the agreed sequence, this is the final step — fixed-#262 already landed, so the double-render window is closed). Clean rebase, clean re-pin.
preparecommit -> cut skipped, falls through to a wrong new rolling PR #259