Skip to content

Release notes: a PR can replace the notes of the PRs it renames or changes (Supersedes release note:) - #1015

Merged
ccoventry merged 1 commit into
devfrom
chore/release-notes-supersedes
Oct 24, 2026
Merged

ccoventry merged 1 commit into
devfrom
chore/release-notes-supersedes

Conversation

@ccoventry

Copy link
Copy Markdown
Owner

Release note: none

Summary

v0.2.0's notes carried the Release note: lines of PRs whose feature a later PR in the same release renamed (the dodstudio_* commands after #719 renamed them to ds_*). A PR body can now say which earlier notes it replaces:

Supersedes release note: #710, #731

release_notes.py drops every listed PR that is in the same release range from the grouped notes and from the full PR list, and the superseding PR's own note stands for it.

  • Matched like Release note:: case-insensitive, notes too, bold / list forms; numbers with or without #, commas or spaces; several lines add up; HTML comments ignored (so the template hint never counts).
  • A listed PR outside the range (already shipped): ignored, with a notice: line saying its note is already out.
  • Chains (A supersedes B supersedes C): only A's note shows.
  • Every drop is logged to stderr (the job log): release notes: #731 dropped: superseded by #1013, plus N superseded in the summary line.
  • Docs: a paragraph in docs/versioning_and_releases.md, a commented hint under the Release note: line in .github/pull_request_template.md, one sentence in CLAUDE.md's Release note: bullet. No workflow changes.

Test done

  • python -m unittest discover -s .github/scripts -p "test_*.py" (the CI step's command): Ran 45 tests ... OK. New: ExtractSuperseded (line forms, several lines, comments / mid-line mentions, does not count as the release note, the repo template's hint is not a line) and Supersedes (drop + log + render, out-of-range notice, chain, no-note warning for both none and a missing line, full list, cycle, self-reference).
  • Real run, read-only: python .github/scripts/release_notes.py --target origin/dev --output <scratch> printed release notes: v0.2.0..42a3bd1829: 70 PRs, 53 with a release note (no PR on dev carries the new line yet, so nothing dropped).

Decisions

  • Superseding PR with no note of its own (or none): still drops the listed PRs (the author chose that, e.g. a PR that removes a feature), and prints a warning: naming only the dropped PRs that actually had a note. The script has no existing convention that fits better.
  • Logs go to stderr, beside the script's existing summary line; stdout is the release body when --output isn't given.
  • Two PRs superseding the same PR: it is dropped once, credited to the later PR.
  • Cycle (A supersedes B, B supersedes A): keeps the highest-numbered (latest) PR with a warning, rather than losing both.
  • A PR listing itself: ignored.

🤖 Generated with Claude Code

A PR that renames or changes a feature an earlier PR in the same release
added can list those PRs; the collector drops their notes (and their
entries in the full list) so the release never names a feature that no
longer exists. Chains collapse, out-of-range PRs get a notice, every
drop is logged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ccoventry
ccoventry merged commit c0c5579 into dev Oct 24, 2026
6 checks passed
@ccoventry
ccoventry deleted the chore/release-notes-supersedes branch October 24, 2026 23:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant