feat(release-prep): compile-time paragraph normalization for CHANGELOG fragments (v1.0.0 must-fix) #420
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#420
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?
Empirical finding
PR#406 (v0.27.0 rolling release-prep) required manual paragraph unwrap by Herald because
changelog.d/*.mdfragments authored with hard-wraps at ~72 col carried those wraps through release-prep.sh's compile step into the compiled CHANGELOG.md section. Forgejo/Codeberg then rendered the hard-wraps as visible line-breaks (not word-wrap), producing choppy release notes + PR body prose.Specific paragraphs required unwrap on PR#406:
### AddedForgejo API resilience paragraph (#334)### Addedpublish_mode layered resolution paragraph (#408)### Fixedpush-during-cut recovery paragraph (#417)Broader concern
Two adopter authoring cultures exist for prose:
release-toolkit currently forces adopters into the second culture by preserving hard-wraps through compile. Without a compile-time normalizer, every adopter who authors fragments with hard-wraps hits this same rendering issue in their release notes.
Operator directive 2026-07-05: v1.0.0 must-fix per class-completeness reasoning — the friendliest fix layer is the compile mechanism, not adopter discipline (option 1) or a PR-time gate error (options 3+4). Compile-time normalization means adopters can author however they like; the compiler produces render-clean output.
Fix path
Extend release-prep.sh's fragment-compile pass with a paragraph-unwrap transform. Reference implementation: Herald's manual transform on PR#406 (commit
e8a078f) covers the essentials:-,*,1.), fenced code blocks (```), inline code, blockquotes (>), headers (#) NOT joined[a-z]- [a-z]pattern (hyphenated word split across former wrap boundaries → space-join fuses incorrectly). Rejoin the split.Herald caught + fixed exactly one hyphen-split (
pre-resilience) on PR#406e8a078f— grep-guard for this pattern is essential.Verification AC
e8a078ftransform outputs match the automated transform's outputs on the same input fragments (empirical verification: run the new transform on pre-4d7ea41 CHANGELOG source, compare to Herald'se8a078foutput)Related
feedback_release_prelude_renderingpin (hand-authored preludes need the same treatment; this generalizes to fragment-compiled paragraphs)changelog-body-check.shtransition-window blind spot (Herald finding, in #403 body); worth considering whether the normalization + the transition-window fix land as one systematic fix at the compile boundaryAnchor
Operator ratified 2026-07-05 evening as v1.0.0 must-fix per class-completeness reasoning. Empirical anchor: PR#406 required manual per-cut cleanup by Herald. Without codified normalization, every adopter release hits this. QM's substrate lane (release-prep.sh); Herald's PR#406
e8a078ftransform is directly reusable as reference implementation.bosun referenced this issue2026-07-05 23:59:04 +02:00
quartermaster referenced this issue2026-07-06 09:54:48 +02:00