Restore 51 orphaned changelog fragments into their true release sections#9152
Merged
Conversation
Between the towncrier migration (#7488, 2026-02-25) and the fragment path-validation check (2026-05-27), 50 PRs merged fragments at paths towncrier and bump_version.py silently ignore: 47 in type subdirectories (changelog.d/added/, changelog.d/fixed/) and 4 top-level files missing the .<type>. suffix. None of those PRs shipped a valid fragment alongside, so 52 entries for changes released in May 2026 never appeared in any published CHANGELOG.md (#9149). One-time scripted historical repair (deterministic and idempotent; rerun inserts nothing): each orphan was mapped to the release that first contained its merge — walking main's first-parent chain to the first "Update PolicyEngine US" bump commit and reading the version it stamped — and inserted as a bullet under the correct type heading of that existing section, preserving heading order and formatting. Sections that said "No significant changes." and gained content had that line removed. Also fixed 32 pre-existing "- - " double-bullet artifacts (fragments that carried their own leading dash). The type classification of each entry is the original author's (the subdirectory name); restoring an "Added" entry does not retroactively change any released version number. The orphaned fragment files are deleted. Full fragment-to-release mapping is in the PR description. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The existing check only inspects files changed by the PR, so fragments at ignored paths could accumulate unnoticed (they did: #9149). With the tree now clean, enforce the invariant: any tracked file under changelog.d/ that is not .gitkeep or a top-level <name>.<type>.md fails the check. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Fixes #9149.
What this does
Commit 1 — historical repair. Restores the 52 changelog entries from the 51 orphaned
changelog.d/fragments (47 in type subdirectories + 4 top-level missing the.<type>.suffix; one file carried two entries) into theCHANGELOG.mdsections of the releases that actually first shipped them, then deletes the orphans. Also fixes 32 pre-existing- -double-bullet artifacts (fragments that carried their own leading dash, doubled by towncrier). Formatting-only for existing entries — no released entry's text was altered.Commit 2 — enforcement. Adds a tree-state step to the
Check changelog fragmentjob: any tracked file underchangelog.d/that isn't.gitkeepor a top-level<name>.<type>.mdnow fails CI. The existing check only inspects PR-changed files, which is how the orphans accumulated between the towncrier migration (#7488) and the path-validation check (2026-05-27). Landing enforcement in the same PR as the cleanup makes the invariant atomic.Why historical repair (vs. dumping into the next release, or writing off)
All 50 orphan-adding commits shipped only the orphan — none had a valid fragment alongside — so these entries are the sole changelog record of ~51 changes released in May 2026 (verified: sampled orphan content appears nowhere in any released CHANGELOG.md). Renaming them into live fragments would misdate them ~2 months and force a spurious minor bump from the 13
addedentries; deleting them would preserve a permanent gap in the public record. Adjudicated with a second-model review (sol) concurring on repair + same-PR enforcement.Method and verification
Update PolicyEngine USbump commit on main's first-parent chain → the version stamped in that commit'spyproject.toml. Entry type = the original author's declaration (the subdirectory name; the 4 suffixless classified from content, noted below).No significant changes.from any section gaining content.inserted=52; reruninserted=0 already-present=52); post-repair structure checks: 0 sections with heading-order violations or duplicate headings, 0 sections mixingNo significant changes.with content, 0 remaining- -artifacts;towncrier build --draftrenders normally against the repaired file (prepend pipeline unaffected).alphabetize-tanf-gross-income-limits→ Changed,chip-age-unit-package-description→ Fixed,ct-eitc-bonus-eligibility→ Fixed,pure-leaf-inputs→ Changed.Full fragment → release mapping (51 files, 52 entries)
changelog.d/added/7548.mda4be56977cchangelog.d/added/7946.md20927f088echangelog.d/added/8188.md07acc70c80changelog.d/added/8194.md3830c85a8cchangelog.d/added/8271.md6ef6346b3cchangelog.d/added/8294.md29affcd12cchangelog.d/added/8349.md07be47bda1changelog.d/added/8355.md96c878259bchangelog.d/added/8397.mdf397006735changelog.d/added/8441.mda339a03a5fchangelog.d/added/8442.mdd3c35b978dchangelog.d/added/issue-8267-medicaid-ce-pass-through.mdd5b8379b2fchangelog.d/added/ssa-disability-screen.mdfa2594a08fchangelog.d/fixed/1030.md6c5eaa554bchangelog.d/fixed/1272.md7857196824changelog.d/fixed/6035.md17f66dd22bchangelog.d/fixed/6975.mde2a06f4d25changelog.d/fixed/7321.mdf6b062c420changelog.d/fixed/7391.mdd6ddcd7991changelog.d/fixed/7492.mdcb3625f94fchangelog.d/fixed/7920.md6a1b962176changelog.d/fixed/7968.mdca6f5a6b66changelog.d/fixed/7985.md53089b51bcchangelog.d/fixed/8097.md510dfab734changelog.d/fixed/8187.mddc37dbb601changelog.d/fixed/8239.md1e187b5567changelog.d/fixed/8241.md886022254bchangelog.d/fixed/8336.mdf2b90af06achangelog.d/fixed/8343.mdeb27050230changelog.d/fixed/8344.mdeb27050230changelog.d/fixed/8376.mdc55e08465cchangelog.d/fixed/8379.md203913f016changelog.d/fixed/8388.md9013c73de8changelog.d/fixed/8389.mdf261de7bfachangelog.d/fixed/8395.md00e0f0e62fchangelog.d/fixed/8401.md571740b137changelog.d/fixed/8405.md26310eb13echangelog.d/fixed/8406.md742d9e4f04changelog.d/fixed/8443.md887bed9cc9changelog.d/fixed/8496.mdd613be6605changelog.d/fixed/dc-ptc-state-gate.mdb0f124abfbchangelog.d/fixed/fsla-overtime-input.mdc5a4dfbf2fchangelog.d/fixed/medicaid-ce-exclusions.mde71157a6a0changelog.d/fixed/snap-work-requirement-issues.mdeb6ff02979changelog.d/fixed/ssi-disability-input-only.md1c0bd159a5changelog.d/fixed/ssi-disability-sga.md99f65ffd4dchangelog.d/fixed/state-payroll-wage-base-organization.md6671586661changelog.d/alphabetize-tanf-gross-income-limits.md2b01631b62changelog.d/chip-age-unit-package-description.mdf66aba808cchangelog.d/ct-eitc-bonus-eligibility.md4ff151180echangelog.d/pure-leaf-inputs.mde58b53d3b3Repair script (one-time, run from repo root)
🤖 Generated with Claude Code