chore(release-prep): dedup refactor-of-X bullets when a fragment covers the refactored PR (sibling to #258) #492
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#492
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?
Finding — this is distinct from #258 (archaeology 2026-07-30)
#258's
changelog_dedup_cc_by_fragment_refswas live in release-toolkit v0.32.0 (tmux-tell v0.33.0's pin, verified). The tmux-tell#803 duplicate bullets described in the original motivation happened DESPITE that fix being live. Reason:#NNN: fragmentNNN.kind.mdfilename suppresses commit-subject... (#NNN)So this tracker is a sibling to #258, not a duplicate. #258 closes the exact-#NNN class; this tracker addresses the refactor-of-X class.
Motivation (revised)
tmux-tell#803 v0.33.0 cut-recovery loop (2026-07-22) revealed 3 bullets that duplicated coverage:
- **observe**: preserve observer across partial teardown← #819 (refactor of #808 already covered by fragment prose)- **ping/809**: extract pingSandboxMsg helper← #810 (refactor of ping fix in fragment)- **mcp/register**: clear ST1005 — errors.New(msg) over fmt.Errorf← #805 (refactor of register fix in fragment)Each bullet's PR (#819, #810, #805) is a refactor of a PR that already has a fragment covering it. No exact-#NNN match, so #258's dedup can't fire. The duplication is at the semantic level (same feature area, different PR#) rather than the reference level.
The 3 duplicated the shape produced by the fragment prose; readers get no new information; the pattern inflated the body toward the length ceiling; the mixed bullet+prose triggered WARN 5 (sibling tracker #491 for the gate-side fix).
The harder problem
Unlike #258 (which reads fragment filenames as authoritative exact-# hints), this dedup class doesn't have a mechanical match. Options:
(a) Commit-trailer discipline — the merge commit for a refactor PR includes
Refactors: #NNNtrailer naming the refactored PR. Compose reads the trailer + suppresses ifNNN.kind.mdfragment exists. Requires PR-time author discipline.(b) Commit-subject conventional-prefix + linked-issue lookup — if commit subject starts with
refactor(...):extract the(#NNN)PR reference, GET the Forgejo PR issue-tracker to find "Closes/Refactors" links, then check if any of those linked issues have fragment coverage. Cross-repo API call at compose time; more automatic but more failure surface.(c) Bullet-vs-prose de-emphasis — accept that the classes may co-exist; instead of dedup, promote WARN 5 (mixed bullet+prose) to FAIL to force author to reconcile at PR-time. This is #491's approach as the gate-side; not truly a dedup fix but closes the observable symptom.
(d) Documentation-only — accept the class as rare + low-cost; document in release-prep contributor guide that refactor PRs should either author fragments OR use
Refactors: #NNNtrailer as opt-in dedup hint.Recommended: (d) as a lightweight first step + revisit if empirical rate of this class rises. (a) is the substantive fix if it becomes worth engineering.
Trade-off
Cost: refactor PRs are relatively rare in release-toolkit itself; higher-frequency in consumer repos (tmux-tell). Solution complexity is disproportionate to the actual failure rate observed.
Benefit: closes a semantic-level duplication class that #258's exact-# dedup structurally cannot catch. Same-file inconsistency at gate-level is #491's territory; this closes the source-level.
Verification AC
If (a) or (b): mechanical dedup implemented + BATS test asserts refactor-of-X duplication no longer emits both bullet + fragment proseRETIRED — option (d) selected; no mechanical dedup was claimed.If (c): #491's gate promotion is the load-bearing fix + this tracker closes as "gate-side handles the symptom, dedup at source is documented"RETIRED — option (d) selected; no gate promotion was claimed.Related
Anchor
Reframed 2026-07-30 by Bosun after archaeology confirmed #258 was live at v0.32.0 tmux-tell pin time. Original tracker filed 2026-07-22 by Quartermaster; body rewrite preserves the anchor incident + reasoning while naming the actual class boundary between #258 and this work.
chore(release-prep): strip commit-subject-dedup bullets when fragment covers the same PRto chore(release-prep): dedup refactor-of-X bullets when a fragment covers the refactored PR (sibling to #258)carpenter referenced this issue2026-08-26 23:37:44 +02:00
Closeout evidence for rt#492 (Pullings, deputy orchestration):
fb6548b064; main advanced to728734b0a9.AC dispositions are now reflected in the body: option (d) DONE; options (a), (b), and (c) RETIRED as not selected. No live cut or unrelated change was included.