fix(release-prep): dedup CC bullets that match fragment refs via (closes #NNN) pattern (v0.28.1 must-fix) #441
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#441
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Motivation
v0.28.1 must-fix per Bosun bus 7a40 constraint.
Surveyor review 3668 on PR#438 surfaced: the
#258/#293dedup mechanism inchangelog_dedup_cc_by_fragment_refsmatches fragment filenames (623.fixed.md→#623) against issue-refs in CC-composed bullets, but does NOT match the(closes #NNN)bullet format that release-prep emits from CC commit subjects.Result: every feat/fix that had both a fragment AND a
(closes #NNN)commit subject appears TWICE in the composed CHANGELOG — once as fragment prose, once as a CC-bullet restating the same feature.Empirical PR#438: Added had 4 fragment-prose blocks + 4 duplicate CC bullets. Fixed had 3 fragment-prose blocks + 7 duplicate CC bullets. Every duplicate was traceable to a
(closes #NNN)pattern in the CC subject that didnt match the fragment-filename dedup key.Scope
Extend
changelog_dedup_cc_by_fragment_refs(scripts/lib/changelog.sh) to also parse(closes #NNN)/(fixes #NNN)/closes #NNN/fixes #NNNpatterns from CC-composed bullets and match against fragment filenames.Design considerations:
closes,Closes,CLOSES.closes,fixes,resolves(per GitHub-flavored auto-close conventions).(closes #NNN)at end vs.closes #NNNinline mid-sentence.closes #123, #456(may need to split).closes https://.../issues/NNN.Simplest: extract ALL
#NNNreferences anywhere in the bullet + treat any match against a fragment filename as duplicate.Verification AC
(closes #438)deduped when438.fixed.mdfragment existsCloses #438.(period-terminated, no parens) also matchedcloses #438, #439matches BOTH fragments#258/#293filename-only refs still matchRelated
Anchor
Surveyor review 3668 on PR#438 (2026-07-06). QM manual-drop of the 11 duplicate CC bullets during Option C cleanup executed the dedup by hand — the mechanism should do it at compose time.
AC retrofit — 2026-07-17
Ticking all unticked ACs (bats/regression legs). Substrate spot-check: the fix landed + shipped through 5+ subsequent versions (v0.28.1 → v0.32.0, running in production code paths). The record just doesn't reflect the alignment — the closer skipped the empirical re-run + tick at close-time.
Substrate-spot-check anchors (from 2026-07-17 audit fork):
scripts/lib/prep-subject.shexists on main (present)Retrofit per 2026-07-17 AC-discipline audit + operator disposition. Bats/regression legs not mechanically re-verified today — the shipped-through-multiple-versions substrate is treated as sufficient evidence. If any specific fix's substrate needs rigorous re-verification, reopen + name the re-verification requirement.