Skip to content

docs: add prepare-release-notes skill and document it in the release how-to#1100

Open
tbouffard wants to merge 2 commits into
mainfrom
docs/claude_skill_prepare_release_notes
Open

docs: add prepare-release-notes skill and document it in the release how-to#1100
tbouffard wants to merge 2 commits into
mainfrom
docs/claude_skill_prepare_release_notes

Conversation

@tbouffard

@tbouffard tbouffard commented Jul 8, 2026

Copy link
Copy Markdown
Member

What

Add a prepare-release-notes Claude Code skill (.claude/skills/prepare-release-notes) that drafts the GitHub release notes body for a maxGraph release, and document how to use it in the release how-to page.

Why

Preparing release notes is a manual, error-prone step: gathering breaking changes, deprecations and highlights from the commit history, cross-checking the CHANGELOG, computing the example bundle sizes, and finally updating the GitHub draft release without clobbering its auto-generated content. This skill encodes that workflow so it is repeatable and consistent.

What the skill does

  • Determines the target and previous versions and the commit range.
  • Drafts breaking changes and deprecations, cross-checked against CHANGELOG.md, with before/after migration snippets.
  • Drafts feature highlights from feat commits and their linked PRs (mining the PR body for context, code examples and screenshots), validated with the user before writing.
  • Excludes bug fixes by default, listing them for a case-by-case decision.
  • Drafts the one-line summary reused in the CHANGELOG entry and on the release page.
  • Computes the example bundle size table (current version, plus the previous version for comparison).
  • Wraps prose at 160 characters and never invents PR numbers or content not backed by commits/PRs.
  • Finalizes the GitHub draft release while preserving the Resources section and the actual release date set by the workflow.

Docs

packages/website/docs/development/release.md now documents the two-phase usage: prepare the content during the preparation step, then finalize the GitHub release after the tag is pushed and the npm package is published. A few related anchors and wording were fixed while there.

Notes

The skill was refined against a real dry run of the upcoming 0.24.0 release. The local RELEASE_NOTES_DRAFT.md output is added to .gitignore.

Summary by CodeRabbit

  • Documentation

    • Expanded and reorganized the release process guide, including new “Milestone management” and a detailed “Release notes preparation” workflow.
    • Added clearer instructions for drafting and finalizing GitHub releases, including how to update draft content while preserving the Resources section and the original release date.
  • Chores

    • Added support for a local release-notes draft workflow and updated ignore rules so the draft isn’t committed.

…how-to

Add a Claude Code skill (.claude/skills/prepare-release-notes) that drafts a GitHub release notes body for maxGraph from
the commit history, the CHANGELOG and the linked pull requests, and optionally updates the GitHub draft release.

The skill:
- determines the target and previous versions and the commit range
- drafts breaking changes and deprecations, cross-checked against CHANGELOG.md, with before/after migration snippets
- drafts feature highlights from feat commits and their linked PRs, validated with the user, with real code examples
- excludes bug fixes by default, listing them for a case-by-case decision
- drafts the one-line summary reused in the CHANGELOG and on the release page
- computes the example bundle size table (current version, plus the previous version for comparison)
- wraps prose at 160 characters and never invents PR numbers or content not backed by commits/PRs
- finalizes the GitHub draft release, preserving the Resources section and the actual release date

Also document the two-phase usage in packages/website/docs/development/release.md (prepare the content during
preparation, finalize the GitHub release after tag and npm publish) and ignore the local RELEASE_NOTES_DRAFT.md output.
@tbouffard tbouffard added the chore Build, CI/CD or repository tasks (issues/PR maintenance, environments, ...) label Jul 8, 2026
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 142dc904-5c10-4aad-ac3f-cf6b250f0c9a

📥 Commits

Reviewing files that changed from the base of the PR and between 8e1bf63 and 60b8ec9.

📒 Files selected for processing (1)
  • .claude/skills/prepare-release-notes/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • .claude/skills/prepare-release-notes/SKILL.md

Walkthrough

Adds a Claude Code skill for preparing GitHub release notes, updates release-process documentation to match it, and ignores the local draft file used by the workflow.

Changes

Release notes preparation workflow

Layer / File(s) Summary
Skill metadata and core rules
.claude/skills/prepare-release-notes/SKILL.md
Defines skill metadata and rules for sourcing release-note facts, preserving ## Resources, and formatting generated prose.
Version and content workflow
.claude/skills/prepare-release-notes/SKILL.md
Specifies version detection, template loading, one-line summary generation, breaking-change and feature-highlight collection, and fix-commit selection.
Bundle-size steps
.claude/skills/prepare-release-notes/SKILL.md
Defines current-version bundle-size generation and previous-version bundle-size recovery or manual computation.
Draft update and checks
.claude/skills/prepare-release-notes/SKILL.md
Defines the draft update flow, ## Resources preservation, release-date handling, and success criteria for the generated notes.
Release docs and local draft ignore
packages/website/docs/development/release.md, .gitignore
Updates release documentation for the new workflow, renames the GitHub release step, adds finalization instructions, and ignores RELEASE_NOTES_DRAFT.md.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • maxGraph/maxGraph#593: Updates the release-notes workflow and template structure around ## Resources and related release content.
  • maxGraph/maxGraph#1038: Changes the GitHub release body template and bundle-size sections that this skill workflow references.

Suggested labels: documentation

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the change well, but it does not follow the repository template's checklist and overview requirements. Add the PR checklist items, an Overview section with issue linkage and merge-summary text, and note tests/screenshots or why they are unnecessary.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: adding the prepare-release-notes skill and documenting it.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: dc8066fc-a166-4352-a816-3dab4c7151fa

📥 Commits

Reviewing files that changed from the base of the PR and between 9e573d4 and 8e1bf63.

📒 Files selected for processing (3)
  • .claude/skills/prepare-release-notes/SKILL.md
  • .gitignore
  • packages/website/docs/development/release.md

Comment on lines +66 to +93
- List commits whose title contains `!` per semver (`type!:` or `type(scope)!:`):
`git log v<previous>..HEAD --oneline | grep -E '^[a-f0-9]+ [a-z]+(\([^)]+\))?!:'`
- Cross-check `CHANGELOG.md` (the `## Unreleased` section, plus the target version section if already
added): verify every breaking change **and** every deprecation notice from the commits has a
matching CHANGELOG entry. **Flag any missing entry** to the user rather than silently filling it.
- Fill the "Breaking changes", "Removal of deprecated API", and "Deprecated APIs" sections. Drop a
section entirely if it has no content.
- Add a before/after migration snippet for any breaking change that alters call sites (see Core rules).
- Read the linked PR for the full rationale and impact, not just the commit message (see Core rules).

### 4. Features (validate with the user first)

- Extract `feat` commits: `git log v<previous>..HEAD --oneline | grep -E '^[a-f0-9]+ feat(\([^)]+\))?!?:'`
- For each candidate, read the linked PR (see Core rules): its description often has context, code
examples and screenshots not in the commit message, which can be reused directly in the highlight.
- Produce a **pre-list** of candidate highlights and present it to the user to validate the level of
detail **before** writing the prose. Do not write the Highlights section until the user approves.
- Link each highlight to its real PR (`For more details, see #<PR_NUMBER>.`), taken from the commit
(merge commits and squashed commits usually carry the `(#NNNN)` suffix). No PR number found → leave
a `TODO`.
- For API-facing highlights (new helper, new option), include a before/after code example (see Core
rules).

### 5. Bug fixes (excluded by default)

- Do **not** document bug fixes by default.
- Still present the list of `fix` commits to the user so they can decide, case by case, which (if any)
deserve a mention: `git log v<previous>..HEAD --oneline | grep -E '^[a-f0-9]+ fix(\([^)]+\))?!?:'`

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Make the commit filters non-fatal when they match nothing.

These grep pipelines return exit 1 for valid releases with no breaking/feature/fix commits, which can abort the workflow before the draft is assembled. Please make the lookups tolerate empty results.

Possible fix
- git log v<previous>..HEAD --oneline | grep -E '...'
+ git log v<previous>..HEAD --oneline | grep -E '...' || true

GitHub renders a single newline in release notes as a visible line break, so hard-wrapping paragraphs shows
mid-sentence breaks in the published notes. Reverse the earlier 160-character wrap rule: keep each paragraph and list
item on a single line (code fences and tables are naturally multi-line and unaffected).
@sonarqubecloud

sonarqubecloud Bot commented Jul 8, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Build, CI/CD or repository tasks (issues/PR maintenance, environments, ...)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants