Repository navigation
fix(release): CHANGELOG.md renderer splice contract + 44 k-line drift sweep (ADR-0913) - #406
Merged
Merged
Conversation
… sweep (ADR-0913)
lusoris
marked this pull request as ready for review
May 31, 2026 12:49
lusoris
force-pushed
the
fix/changelog-renderer-and-drift
branch
from
May 31, 2026 12:49
b0ff3bc to
4671bcf
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
scripts/release/concat-changelog-fragments.shused^## [^[]as the "end of Unreleased block" sentinel. 84 of 102 in-tree fragments contained##headers in their bodies (the redundant section name## Fixedor a per-PR descriptive title like## Vulkan submit-pool migration); each tripped the sentinel and the next--writepreserved the post-trip tail as if it were release history. Each cycle inflated CHANGELOG.md by ~3 kB. Master tip544299fae1had drifted to 59 757 lines (~95 % duplicated). PR #332 / #383 / #401 all flagged "pre-existing drift" without rooting it; PR #384 / ADR-0892 identified the section-hygiene angle but explicitly deferred the regeneration.Root cause: the awk pattern in the splice passes used
^## [^[]as the boundary, which matched any## Fooexcept## [Foo]. Fragment bodies legitimately contained## Fooshapes; the regex was lying about its invariant.Fix: boundary regex anchored on
^## \[— release-please's only header shape (## [vX.Y.Z] - YYYY-MM-DDand## [Unreleased]).Per-issue fix count
BOUNDARY_REGEX)##headers normalised### Sectionfirst-line strippedperf/,performance/)perf-<topic>.mdunderchanged/CHANGELOG.md diff size
CHANGELOG.mdlines^##headers in file--writeidempotencyADR-0108 deliverables
docs/research/0913-changelog-renderer-and-drift-2026-05-31.mddocs/adr/0913-changelog-renderer-splice-contract.md§Alternatives consideredAGENTS.mdinvariant note —scripts/AGENTS.md: splice contract plus fragment hygienechangelog.d/fixed/changelog-renderer-and-drift.mddocs/rebase-notes.md(in-flight-branch impact plus resolution)T-CHANGELOG-RENDERER-SPLICE-AND-DRIFT-2026-05-31Test plan
bash scripts/release/concat-changelog-fragments.sh --check→ exit 0 (no drift)bash scripts/release/concat-changelog-fragments.sh --write && bash scripts/release/concat-changelog-fragments.sh --check→ idempotent## [3.0.0-lusoris.1] - 2026-06-01after Unreleased + re-run--write→ release-section preserved unchangedpre-commit run --files <touched>→ all checks passgh pr ready)Relation to PR #384 / ADR-0892
PR #384 introduced the
changelog.d/perf/→changelog.d/changed/perf-*.mdmigration and therevert/security/styleConventional-Commits additions torelease-please-config.json. It explicitly deferred the CHANGELOG.md regeneration sweep. This PR completes the deferred work + roots the actual renderer bug PR #384 missed. If PR #384 lands first, this branch's perf/ renames become a no-op on rebase. If this PR lands first, PR #384's renames become a no-op.Out of scope
--lintmode that fails on stray##in fragment bodies (render-time demoter is enough; lint is incremental polish).docs/adr/README.mddrift (201 rows have no fragment-file backing under_index_fragments/; that's a separate back-fill PR).🤖 Generated with Claude Code