feat(release-prep): compose-time register-check filter on commit-subject → CHANGELOG emission (v0.28.1 must-fix — #403 long-term follow-up) #442
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#442
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 named a long-term fix-path for the register-drift class: a compose-time filter that scrubs chamber-name attribution from commit subjects before they emit into CHANGELOG bullets, at the
cc_categorize_commits_sinceboundary.Current state (post-#403):
register-check --git-log): catches drift in subjects at PR review. Consumer opts in viacheck_commit_subjectsinput.register-check --stdin): scrubs composed content post-compose, pre-CHANGELOG-write. Always-on inrelease-prep.sh.Gap surfaced by PR#438: the compose-time scrub FATALs on drift but does not itself sanitize — the operator has to trace back to source (fragment or commit subject) and edit. For fold-commit subjects on merged PRs (like PR#436 iteration commits carrying
Surveyor 3664attributions), that means either history rewrite (invasive) or manual bullet-drop on the rolling PR (Option A per QM Option C plan, taken for PR#438).Scope
Add a compose-time REGISTER_PATTERNS-aware filter to
cc_categorize_commits_since(or its downstream —changelog_dedup_cc_by_fragment_refsis a natural extension point given tracker #441 already extends it).Design options:
(a) Drop-emission: skip emitting bullets whose subject matches REGISTER_PATTERNS. Bullet disappears from CHANGELOG entirely.
(b) Scrub-emission: emit bullets with the matched pattern replaced by a placeholder (e.g.,
[reviewer]) or dropped from the description. Preserves the bullets substrate contribution while sanitizing the register.(c) Fail-loud-emission: refuse to compose if any subject matches; require author to reword source subject via
git rebase -ibefore release-prep succeeds. Symmetric with the existing--stdinFATAL but at earlier layer.Recommended: (b) — preserves substrate-of-record for the change while sanitizing register. Loudness gap vs (c) is filled by the pre-existing
--stdinFATAL if the scrub misses anything.Consideration: this interacts with the follow-up-tracker on adopter-overridable REGISTER_PATTERNS (release-toolkit#435). Adopters overriding the pattern set should have the same filter behavior for their custom patterns.
Verification AC
--stdinscrub still FATALs as a defense-in-depth layer if compose-time filter misses anythingRelated
Anchor
Surveyor review 3668 on PR#438 (2026-07-06). QM Option C manual bullet-drop for PR#438 executed this filter by hand — the mechanism should catch the class at compose-time going forward.
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.