release: generate GitHub Release notes from the compiled CHANGELOG section - #126
Merged
Merged
Conversation
…ction The hardcoded one-line NOTES boilerplate went stale (still 'Darwin-arm64' on the first dual-architecture release). Notes are now the release's own compiled CHANGELOG section behind a fail-closed extractor; the activation summary line is architecture-neutral.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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.
Outcome
GitHub Release notes are now generated from the release's own compiled
CHANGELOG.mdsection (operator direction 2026-08-19), replacing the hardcoded one-line boilerplate that went stale — v6.1.1's notes still said "Darwin-arm64 native runtime" on the first dual-architecture release.Change
scripts/extract_changelog_section.py: extracts one version's section from the compiled changelog. Grammar anchored tobuild-changelog.pyoutput (### agent-collab <version>heading, word-boundary guard so6.1.1can't match6.1.10, first-match-wins because historical duplicate headings exist deeper in the file). Fails closed on a missing section, empty body, or non-semver input.release.yml: NOTES = one-line mode summary (activation wording now architecture-neutral: "for every architecture in the shipped runtime manifest") + the extracted section, composed viaprintf. Extraction runs beforegh release create, so failure blocks publication instead of shipping empty notes.cut_release.pyalready refuses to tag with out-of-sync fragments, so the section is guaranteed present — the extractor is defense in depth.Post-merge (separate, editable metadata only): published releases' notes backfilled via
gh release editusing the same extractor; tags and assets untouched.Verification
Both suites 177 + 380 OK; release-consistency OK; export-safety SAFE; workflow YAML parses;
git diff --checkclean.Compliance trace
author: claude
standing_directives: operator direction 2026-08-19 (release notes = changelog description); reliable/simple/elegant baseline; Tier-2 process
tier: 2
cross_check: PROCEED (round 1 of 1) — verbatim "VERDICT: PROCEED", no concerns (execution receipt request_sha256 3793e0bcecdc5099…)
post_condition: next release's notes carry its compiled changelog section; extraction failure blocks publication; published notes backfilled
mcp_coverage_gap: NONE
plugin_affected: NONE (release tooling only; no packaged content or version change)
readme_refresh_status: README unaffected
contributor_rights: OWNER-AUTHORED
operator_reserved: no