·
--- name: writing-release-notes-from-git-diffs description: Draft clear, accurate release notes from raw git diffs, merged PRs, commit ranges, tags, changelog fragments, or auto-generated notes. Use this skill whenever the user asks for release notes, a changelog, version highlights, upgrade notes, breaking changes, launch notes, “what changed” summaries, or wants raw technical changes rewritten for users, customers, admins, or developers. Also use it when the input is noisy PR metadata or diffs and the job is to turn that into concise human-facing notes without overclaiming. ---[1] [1]
Turn technical change input into release notes a reader can scan and trust.
Release notes are for humans, not machines. Keep user-facing and upgrade-relevant changes, and do not dump raw commit logs into the final notes.[6][2]
Rewrite implementation detail into user-visible outcome, make upgrade risk obvious, and keep the wording within what the diff, PR text, changelog fragments, and linked docs actually prove.[2][3][4][5]
Identify the exact release range first. Prefer explicit tags or a named previous release over vague time windows. If the user did not provide the range, ask for it or state the assumed range in the notes.[11][4][12]
Use labels as grouping hints, not as proof of impact. GitHub categories depend on repository configuration, exclusions, and catch-all rules, so autogenerated notes are a draft input rather than a canonical summary.[4][12]
Keep changes that affect users, customers, client developers, operators, or administrators. Include new features, bug fixes with visible effects, performance changes users may notice, security fixes, API changes, configuration changes, deprecations, removals, and migrations.[2][6]
Exclude refactors, technical-debt cleanup, test-only changes, build or CI cleanup, internal tooling, docs-only edits that do not reflect a shipped behavior change, experiments, and regressions introduced and fixed within the same release cycle.[2][7]
Write for a zero-context reader. If a short bullet becomes too vague, add context about where the change appears or what broke, but do not fall back into implementation detail.[2]
Prefer the result over the mechanism.
Refactor cache invalidation around search index sync.Fix stale search results after bulk updates.Add support for config-driven retry backoff via new parser path.Add configurable retry backoff for failed webhook deliveries.Use Added, Changed, Deprecated, Removed, Fixed, Security, and Performance as the default sections unless the project already has a stronger house style. Collapse sparse sections when the release is small. Split by product area when the release is broad.[6][5][9][4]
Never bury breaking changes inside ordinary feature bullets. Create a dedicated section such as Breaking Changes, Backwards Incompatible Changes, Potentially Breaking Changes, or Upgrade Notes.[3][6][9]
For each risky change, state what changed, who is affected, what is incompatible, what action is required, and where to find more detail. If the change replaces or removes something, name the old thing, the replacement, and the required upgrade action.[3][14]
When defaults, config keys, supported versions, API behavior, or migration assumptions change, add concrete upgrade guidance. Name the old behavior, the new behavior, prerequisites, whether the change is enabled by default, and the migration steps when known.[8][10]
For end-user product notes, prefer plain language and emphasize visible behavior. For developer notes, name endpoints, fields, methods, flags, and version constraints precisely. For admin or operator notes, emphasize defaults, rollout prerequisites, migration steps, compatibility caveats, and rollback considerations.[1][7][8][13]
Use this default shape unless the project already has a better established format.[9][8][4]
Keep bullets parallel. Start each bullet with a strong verb. Prefer one concrete claim per bullet. In operator-facing or rollout-heavy releases, include prerequisites, rollout status, caveats, or fallback actions when the source material supports them.[7][2][8][13]
If the source set is incomplete, add a short scope note only when the gap changes how the notes should be read. Keep the caveat specific to the missing evidence instead of adding boilerplate.[12][1][4]
Input
v2.3.0...v2.4.0Refactor webhook retry scheduler and add exponential backoff parserFix nil deref when org slug missing in invite acceptance flowbreaking-changeretry_delay_ms replaced by webhook.retry.initial_delay and webhook.retry.max_delayaddedOutput
## Highlights - Add configurable retry backoff for failed webhook deliveries. - Fix a crash when accepting an invitation with a missing organization slug. ## Changed - Add `webhook.retry.initial_delay` and `webhook.retry.max_delay` to control webhook retry timing. ## Breaking Changes - Replace `retry_delay_ms` with `webhook.retry.initial_delay` and `webhook.retry.max_delay`. Update existing configuration before upgrading or webhook delivery settings may no longer load as expected.
This rewrite keeps the proven crash fix, removes refactor language, and names the exact configuration keys users must update.[2][7][3]
Input
1.8.0...1.9.0nftables backend beta default ondocs: migration guide for iptables userslinux kernel gate check >= 5.13plugin compatibility follow-upOutput
## Highlights - Enable the nftables backend by default in beta for Linux clusters. ## Upgrade Notes - The nftables backend is available only on Linux nodes and requires kernel 5.13 or later. - Some network plugins may not yet be compatible with nftables mode. - NodePort behavior is not identical to iptables mode in all cases. Review the migration guide before switching existing clusters. ## Changed - Add beta support for the nftables backend with Linux and kernel-version prerequisites.
This rewrite keeps the compatibility and migration facts operators need without inventing benefits that the raw inputs do not prove.[8][14]
Input
v4.6.0 and v4.7.0enhancement to New Features and breaking-change to Breaking ChangesReturn 409 instead of 500 when duplicate API token name is submittedenhancement — Remove legacy token create endpointPOST /v2/tokensOutput
## Highlights - Improve duplicate token creation errors by returning a conflict response instead of an internal server error. ## Breaking Changes - Remove the legacy token creation endpoint. Update clients to use `POST /v2/tokens` before upgrading. ## Fixed - Return HTTP 409 for duplicate token names instead of HTTP 500.
This rewrite overrides a misleading label, preserves the uncategorized user-facing fix, and converts raw API details into upgrade-ready notes.[4][12][3][2]
Use imperative instructions, keep the body compact, and rely on worked examples to show the pattern rather than encoding brittle rules for every edge case.[1]
Made with Webhound · Ask questions about this research, build on it, or start your own
15 sources · $15 spent · Ask Webhound about this research, build on it, or start your own
Start free