Skip to content

docs: refine creating-version-notes from the 7.3.0 release run - #1828

Merged
lukaszlenart merged 2 commits into
mainfrom
docs/version-notes-skill-refinements
Aug 1, 2026
Merged

docs: refine creating-version-notes from the 7.3.0 release run#1828
lukaszlenart merged 2 commits into
mainfrom
docs/version-notes-skill-refinements

Conversation

@lukaszlenart

Copy link
Copy Markdown
Member

Refinements to the creating-version-notes skill, each traced to something the Struts 7.3.0 release run exposed. Two of them are corrections the release manager had to make by hand.

Corrections

Breaking changes were too long. The skill quoted the paragraph-length 7.2.1 CookieInterceptor entry as its model and asked authors to "say what stops working, and say what replaces it" — guidance that produces prose duplicating the ticket. Now: one sentence plus the ticket link, existing so a reader can judge whether to open the ticket.

Won't Do tickets were dropped. Reconciliation only knew "listed" or "not in the release", so WW-1522 and WW-2635 vanished. They now go under a Rejected requests section — not into Improvement or New Feature, where they read as delivered, and not into the bin, because the decision is the news.

New rules recorded

  • Deprecations gets its own section — nothing stops working yet, so mixing it into Breaking changes overstates the upgrade cost.
  • Full page section order is now explicit: Breaking changes → Deprecations → Rejected requests → issue types → Issue Detail → Issue List → Other resources.
  • Security summaries are truncated at a clause boundary when the ticket itself names the bypass or leak and the bulletin is unpublished. WW-5643 reads "… — maxDepth bypass and cross-request data leak"; the page stops at "concurrent requests". The cut is reported to the release manager rather than decided silently.
  • A ticket with no commit in range is not automatically wrong — check the component first, since IDEA Plugin and Example Applications live in other repositories.

GitHub release

  • Name the previous tag. gh api .../generate-notes -f previous_tag_name=… produces a correct body first time, replacing the old detect-the-bad-range-then-prune advice. The 6.11.0 run needed 88 stale entries removed by hand.
  • Creating a release that does not exist is covered alongside editing one that does — 7.3.0 had no release at all.
  • Verify the split by set-diff of the sorted entry lists; a mixed dependency/CI PR stays in What's Changed.

New: the test-build announcement

The [TEST] Apache Struts X.Y.Z test build is ready mail is now the documented closing step, with its fixed body and four substitutions. The risk clause is keyed to reality — silent when there are no Breaking changes, "but it contains significant changes" when there are, exactly as 6.11.0 and 7.3.0 were sent. The recipient list is flagged as the release manager's call, since dev@ and user@ have both been used.

Also

Section-update verification generalised to any section write (shortening Breaking changes risks swallowing Deprecations, the same trap as the Migration Guide), and a note that content_file is rejected for paths outside the repository — pass the body inline.

🤖 Generated with Claude Code

lukaszlenart and others added 2 commits August 1, 2026 17:06
Seven changes, each from something the 7.3.0 run got wrong or had to invent.

Breaking changes were far too long: the old guidance held up a paragraph-length
example and asked for what replaces the old behaviour, which produces prose the
ticket already carries. It is now one sentence plus the ticket link, whose job is
to tell a reader whether to open the ticket.

Reconciliation knew only "listed" or "dropped", so a ticket resolved Won't Do got
silently dropped. Such tickets now go under a Rejected requests section - not into
a type section, where they would read as delivered. Deprecations get their own
section for the same reason: nothing stops working yet.

Security summaries are no longer reproduced verbatim when the ticket itself names
the bypass or the leak; they are truncated at a clause boundary and the cut is
reported to the release manager.

The GitHub release range is now fixed at source by passing previous_tag_name
rather than generating wrong notes and pruning them, and creating a release that
does not exist yet is covered alongside editing one that does.

Also adds the test-build announcement mail as the closing step, the full page
section order, split verification by set-diff, and the note that content_file is
rejected for paths outside the repository.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The recipient list was left as the release manager's call because 6.11.0 went to
dev@ and 7.3.0 to user@. Both were mistakes: the announcement goes to both lists,
Bcc private@. A build announced to one list reaches half the people who could
find a problem while the vote is open.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@lukaszlenart
lukaszlenart force-pushed the docs/version-notes-skill-refinements branch from 0b981f0 to bd0de02 Compare August 1, 2026 15:06
@sonarqubecloud

sonarqubecloud Bot commented Aug 1, 2026

Copy link
Copy Markdown

@lukaszlenart
lukaszlenart merged commit b1a7c22 into main Aug 1, 2026
11 checks passed
@lukaszlenart
lukaszlenart deleted the docs/version-notes-skill-refinements branch August 1, 2026 15:20
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