Skip to content

Accumulate release notes in a version-less NEXT.md (#58) - #59

Merged
craigmcchesney merged 2 commits into
mainfrom
docs/issue-58-next-release-notes
Sep 24, 2026
Merged

craigmcchesney merged 2 commits into
mainfrom
docs/issue-58-next-release-notes

Conversation

@craigmcchesney

Copy link
Copy Markdown
Collaborator

Closes #58

Plan: plan/tickets/58/plan.md.

Adopts the doc/release-notes/NEXT.md convention from osprey-dcs/dp-grpc#156. Release notes now build up during a cycle instead of being written in one sitting at the cut.

Why

  • rel-1.16.0's notes were written and tagged on the same day, so the reasoning behind each change had to be reconstructed after the fact.
  • The next version isn't decided yet: it could be 1.17.0 or 2.0.0. release.yml looks up doc/release-notes/<tag>.md exactly, so notes saved under a guessed version are stranded, and the tag that does ship fails its notes check.

With NEXT.md, the version is written down in one place: the git mv to rel-<version>.md at the cut.

What's here

  • doc/release-notes/NEXT.md (new):
  • .dev/tools/check-release-notes.py: in NEXT.md, the four parts that name the tag are errors: a ## Verifying these artifacts heading, a sigstore verify identity command, a --cert-identity, and a **Full Changelog** line. Only the real forms count, because the checklist mentions all four in prose. The self-test checks both directions: the checklist's prose must pass, and each real form must fail. NEXT.md is now part of the default run; it isn't required to exist.
  • CLAUDE.md: "Cutting a release" describes the workflow. A ticket with user-visible changes adds its NEXT.md section in the same PR.

release.yml is unchanged: it never reads any file except the one named for the tag, so NEXT.md can't be published.

Verification

  • The checker passes on rel-1.16.0.md and NEXT.md.
  • It rejects:
    • NEXT.md with a Full Changelog line appended;
    • NEXT.md renamed to rel-1.17.0.md without the checklist done (10 problems, from the missing verification section onward).
  • The self-test fails if the command pattern loses its line anchor, since the checklist's prose would then be flagged.
  • ruff lint and format are clean, mypy passes on the checker, and the cookbook checker reports OK: 107 snippets.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Bqq8uGF2zNbHW9FU3vfj7Q

The convention dp-grpc adopted in osprey-dcs/dp-grpc#156.  A ticket that changes anything
user-visible adds its section to doc/release-notes/NEXT.md in the same PR; the file is
renamed to rel-<version>.md at the cut, so the version (1.17.0 or 2.0.0) is decided once,
there, and nothing written earlier guesses it.

- NEXT.md: dp-grpc's preamble, sections for #56 and #30 (all that is user-visible since
  rel-1.16.0), and a "Cutting the release" checklist with this repo's two tag-bearing steps:
  the verification section and the Full Changelog line.
- check-release-notes.py: in NEXT.md a verification heading, a sigstore verify command, a
  --cert-identity, or a Full Changelog line is an error, since each names the tag.  Only the
  real forms count, because the checklist names all four in prose; the self-test pins both.
- CLAUDE.md, plan/tickets/58/plan.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bqq8uGF2zNbHW9FU3vfj7Q
Copilot AI lite review requested due to automatic review settings September 24, 2026 21:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

No unresolved issues were identified.

Review effort: Lite
Findings: None

What changed in this PR

Introduces a version-less NEXT.md workflow for accumulating release notes before a release version is chosen.

Changes:

  • Adds the NEXT.md draft and release-cut checklist.
  • Extends release-note validation for draft restrictions.
  • Documents the workflow and records the implementation plan.
File Description
plan/​tickets/​58/​plan.md Documents the design and implementation.
doc/​release-notes/​NEXT.md Adds the accumulating release-notes draft.
CLAUDE.md Documents the release workflow.
.dev/​tools/​check-release-notes.py Validates release notes and draft restrictions.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

…utable (#58 review)

- Add `## Installing` to the draft.  It names no version, and step 4 said to "keep" a section
  the draft never had, so the next release would have shipped without it; step 4 now inserts
  the verification section above it, and step 5 puts the changelog line after it.
- Step 9 gives the command to recover the draft from main: by then steps 1, 2, and 7 have
  moved, rewritten, and deleted the text it said to reuse.
- Preamble: name the tag-bearing parts in prose inside backticks, since the checker treats an
  unquoted --cert-identity followed by a word, or a line starting with the verify command, as real.
- ci.yml: the release-notes step comment covers NEXT.md's inverted check.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bqq8uGF2zNbHW9FU3vfj7Q
@craigmcchesney
craigmcchesney merged commit ff3cc3e into main Sep 24, 2026
6 checks passed
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.

Accumulate release notes in a version-less NEXT.md during a release cycle

2 participants