Fix release-note extraction, add PR validation and preview#129
Merged
Conversation
Collect every bounded note from squash-merge bodies, group notes by category, and validate categorized PR notes in the existing lint job with an exact step-summary preview. Release-Notes: Internal: Release tooling now bounds squash-merge notes, previews grouped output, and validates categorized entries before merge.
SamGalanakis
force-pushed
the
samuel-release-notes
branch
from
July 25, 2026 10:54
3e497ca to
683d5d9
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.
v0.1.0-alpha.112published a mangled release body — raw squash-merge commit subjects, internal implementation prose and literalRelease-Notes:markers leaked into the public notes, and the most important entry in the release (a PostgreSQL claim-fence durability fix) got no note at all. It had to be hand-rewritten after publish.Root cause (
scripts/release_notes.py::extract_note): it returned on the firstRelease-Notes:marker — silently dropping every later trailer in the same body — and took everything to end of body, swallowing all subsequent content. Both bugs are invisible for single-commit PRs and fire on every squash merge, which is how 100% of work lands here. It failed silently and produced plausible-looking garbage.Changes
extract_notes()collects every marker in a body and terminates each note at a squash subject bullet (^\*\s), the next marker, or end of body. Notes are grouped under## Breaking / Added / Fixed / Changed / Internal, with uncategorized history preserved under## Other(never dropped). LegacyFixed -/Changed -forms still recognized.check-prmode in the existinglintjob (no new required check): a PR touchingcrates/must produce at least one well-formed, categorized note. Tooling/docs-only PRs are exempt but any note present must still be well-formed.$GITHUB_STEP_SUMMARY, so a reviewer sees the exact published text before merge instead of discovering it post-publish.Verification
Replayed the real
v0.1.0-alpha.111..v0.1.0-alpha.112range: the old collector leaked ~40 lines of commit subjects and prose and emitted 4 notes; the fixed one emits all 7 authored notes, grouped and clean. New regression tests fail against the old parser. Existingrelease.ymlcontract (collect --require,collect --end --out) unchanged.Follow-ups deliberately out of scope: requiring a migration line on
Breaking:notes, and a dry-run assembly gate in the release workflow.