skills/devops/release-notes-writer/SKILL.md
Transforms a changelog or commit range into user-friendly release notes with highlights, upgrade guidance, and narrative framing. Use when publishing a release announcement, when the changelog is too dense for users to read, or when the user needs a blog-post-shaped summary of a version.
npx skillsauth add santosomar/general-secure-coding-agent-skills release-notes-writerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Release notes are marketing for engineering. The changelog lists everything; release notes tell a story about the 2–3 things that matter.
Preferably the output of → change-log-generator. If not available, the raw commit range — but you'll need to do the classification yourself first.
<One-sentence headline — what is this release about?>
<One paragraph of context — why these changes, what problem do they solve>
## Highlights
<2–4 items, each with a before/after>
## Upgrade notes
<Only if there's something to do. "No breaking changes" if clean.>
## Full changelog
<link to CHANGELOG.md — don't duplicate it>
What is this release about? Usually one of:
| Release type | Headline pattern |
| ------------------- | ----------------------------------------------------------- |
| One big feature | "<product> <ver> introduces <feature>" |
| Many small features | "<product> <ver>: <theme connecting the features>" |
| Mostly fixes | "<product> <ver>: stability and fixes" — short notes, no highlights section |
| Breaking/major | "<product> <ver>: <what changed> — upgrade guide inside" |
| Security patch | "<product> <ver>: security update" — lead with this, nothing else matters |
If you can't find a headline, the release doesn't have a story. That's fine — write two sentences and link the changelog.
From a 20-item changelog, pick 2–4. Criteria:
Everything else is "…and many other improvements — see the full changelog."
A highlight with no before/after is an assertion. A highlight with before/after is a demonstration.
Bad: "Added timeout support to the Client."
Good:
Request timeouts. Previously, a hung server would hang your client forever. Now:
client = Client(timeout=5.0) # raises TimeoutError after 5s
Only write this section if there's something to do:
<prev>." so readers know the absence is intentional.Changelog input (from → change-log-generator):
## [2.4.0]
### Breaking
- Dropped Python 3.8 support (#94)
### Added
- Client() accepts timeout parameter (#92)
- New retry_on parameter for selective retry (#97)
### Fixed
- Connection pool leak under concurrent close (#891)
- 7 other fixes
Release notes output:
# httpx-thing 2.4.0 — Timeouts and selective retry
2.4.0 closes out the two most-requested reliability features: per-call
timeouts and the ability to retry only on the errors you care about.
## Highlights
**Request timeouts.** Previously, a hung server hung your client. Now:
client = Client(timeout=5.0)
**Selective retry.** Retrying everything wastes time on unrecoverable
errors. `retry_on` lets you pick:
client = Client(retries=3, retry_on=[ConnectionError, Timeout])
## Upgrade notes
**Python 3.8 is no longer supported.** Minimum is 3.9. If you're on
3.8, stay on httpx-thing 2.3.x until you can upgrade.
Otherwise: drop-in upgrade from 2.3.
## Full changelog
See [CHANGELOG.md](./CHANGELOG.md#240).
The pool-leak fix and 7 other fixes are omitted from highlights — they're in the changelog link.
Markdown, structured as above. Length: a patch release is 3 sentences; a major release with breaking changes might be 50 lines.
development
Extracts human-readable pseudocode from a verified formal artifact (Dafny, Lean, TLA+) while preserving the verified properties as annotations, so the proof-carrying logic can be reimplemented in a production language. Use when porting verified code to an unverified target, when documenting what a formal spec actually does, or when handing a verified algorithm to an implementer.
development
Translates natural-language or pseudocode descriptions of concurrent and distributed systems into TLA+ specifications ready for the TLC model checker. Identifies state variables, actions, type invariants, safety properties, and liveness properties from the description. Use when formalizing a protocol, when the user describes a distributed algorithm to verify, when designing a consensus or locking scheme, or when starting formal verification of a concurrent system.
testing
Reduces a TLA+ model so TLC can actually check it — shrinks constants, adds state constraints, abstracts data, or applies symmetry — when the state space is too large to enumerate. Use when TLC runs out of memory, when checking takes hours, or when a spec works at N=2 and you need confidence at larger scale.
development
TLA+-specific instance of model-guided repair — reads a TLC error trace, identifies the enabling condition that should have been false, strengthens the corresponding action, and maps the fix to source code. Use when TLC reports an invariant violation or deadlock and you have the code-to-TLA+ mapping from extraction.