Repository navigation
fix(release): let the changelog rollover cut release candidates - #1568
Merged
Merged
Conversation
verify-release-version.sh accepts vX.Y.Z-rc.N tags (ADR-1201) but still requires the full changelog cut for them: a versioned heading, a receipt, no active fragments and no one-shot release-please fields. The rollover that produces those accepted only X.Y.Z and read an -rc.N version marker as its X.Y.Z prefix, so the 1.0.0-rc.1 release PR could merge but never publish. The rollover now accepts the verifier's exact shape and uses its marker extractor. Tests cover an RC cut that the verifier then accepts, the refused prerelease shapes, and the triple/RC boundary. The release guide documents the RC cut and the Release-As footer later candidates need.
A dry-run cut of the 1.0.0-rc.1 release PR failed four pre-commit gates on the cut commit itself: - The archived changelog index ended CHANGELOG.md with a blank line when no older release section exists, which end-of-file-fixer rejects. - check-issue-reference-provenance.py and test_research_digest_ids.py read changelog fragments the cut deletes. The provenance checker now follows consumed fragments and CHANGELOG.md prose into the released changelog once a cut receipt exists; a missing fragment without a receipt still fails. The research-digest test reuses that resolver and checks the legacy link target rather than every mention of the old file name. - Retired ADR-0864 listed a fragment as evidence; its two ADRs remain. With these, pre-commit and verify-release-version.sh pass on the dry-run cut.
10 of 12 tasks
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
The 1.0.0-rc.1 release PR (#1213) could merge but never publish. The tag-time verifier (
scripts/release/verify-release-version.sh) acceptsvX.Y.Z-rc.Ntags since ADR-1201. For an RC tag it still demands the full changelog cut:## [1.0.0-rc.1] - YYYY-MM-DDheading;changelog.d/releases/1.0.0-rc.1.jsonreceipt;release-as/bootstrap-sha.The only tool that produces those,
scripts/release/rollover-changelog-fragments.sh, refused anything butX.Y.Z. It also read an-rc.Nversion marker as itsX.Y.Zprefix, the same extractor bug ADR-1201 fixed in the verifier.This PR:
-beta,-rc,-rc.01,-rc.1.2,-RC.1,-rc.-1);docs/changelog-archivepath the rollover writes for a long body;Release-As: 1.0.0-rc.Nfooter. Withversioning: default, release-please bumps a fix on1.0.0-rc.1to1.0.1-rc.1, becausePatchVersionUpdatekeeps the prerelease tag.A dry-run cut of #1213 exposed four more failures on the cut commit itself, fixed in the second commit:
CHANGELOG.mdwith a blank line when no older release section exists (a first release), which end-of-file-fixer rejects. New rollover test T17 covers this, and it fails against the first commit's script.check-issue-reference-provenance.pyandtest_research_digest_ids.pyread changelog fragments that the cut deletes. The checker's newcontract_text()follows consumed fragments andCHANGELOG.mdprose intoCHANGELOG.mdplusdocs/changelog-archive/. It does this only once a cut receipt exists; a missing fragment with no receipt still fails. The research-digest test reuses that resolver and checks the legacy link target. New provenance tests cover a followed cut, a missing receipt, and prose that is both inline and archived.With both commits overlaid on #1213's head, the dry-run cut passes:
rollover --version 1.0.0-rc.1, which rolls 2,034 sources into a 21-line index and a 32,327-line archive;verify-release-version.sh v1.0.0-rc.1, run against a local-only tag that was deleted afterwards.After this merges, #1213 regenerates. It then gets the
autorelease: cutlabel and the rollover commit, and merges.Type
Checklist
Bug-status hygiene
docs/state.mdupdated in this PR:T-RELEASE-ROLLOVER-RC-VERSION-2026-09-26added under Recently closed.Netflix golden-data gate
assertAlmostEqual(...)value was modified.Deep-dive deliverables
PatchVersionUpdatesource, cited in the release guide).AGENTS.mdinvariant note —scripts/release/AGENTS.md: version shape and marker extractor must match the verifier; later RCs needRelease-As.changelog.d/fixed/release-rollover-rc-versions.md.docs/rebase-notes.mdentry "Release-candidate changelog rollover (2026-09-26)".Reproducer
The verifier suite needs
GIT_CONFIG_GLOBAL=/dev/nullonly on hosts withtag.gpgsign=true, because its fixtures create unsigned tags.