What this prompt does
This prompt takes raw change data — git log output, PR titles, ticket references — and structures it into a complete release document with seven distinct sections. The template does not summarize blindly; it separates executive prose from technical detail, which means a VP and a backend engineer can both read the same release notes and find what they need without wading through the other's content.
The breaking changes section is the design decision that earns trust. Most changelog generators lump breaking changes with other updates. This template isolates them with an explicit migration guide, which is the single most important thing for any team running zero-downtime deployments or managing API consumers. The [tone] and [audience] variables let you produce the same version for an enterprise changelog and a developer-facing CHANGELOG.md without rewriting from scratch.
Performance improvements are kept separate with a placeholder for metrics. That forces you to supply real numbers rather than vague prose — leave the field empty and the model will either skip the section or generate generic filler, which is exactly why the "not measured" workaround in Pro tips matters.
When to use it
- Drafting public release notes for a SaaS product before pushing to a status page or blog.
- Generating CHANGELOG.md entries from a sprint's PR descriptions before merging to main.
- Producing customer-facing upgrade guides when a library releases a major version with deprecations.
- Writing internal release summaries for stakeholders who do not read commit history.
- Automating changelog drafts inside a CI pipeline by piping
git logoutput into the[raw_changes]variable. - Preparing app store release notes by targeting
[audience]as end users and[tone]as plain English.
Example output
Version 2.4.0 — Payment Service (released 2026-06-19)
Executive Summary
This release introduces webhook retry logic and resolves a race condition
in concurrent checkout sessions. No database migrations required to upgrade
from 2.3.x.
Breaking Changes
- `PaymentClient::charge()` now throws `PaymentDeclinedException` instead of
returning false. Update any boolean checks in your integration layer.
Migration: replace `if (!$client->charge(...))` with a try/catch block.
Bug Fixes
- #1042 Fixed session lock timeout causing duplicate charge events under load.
- #1055 Corrected currency rounding for JPY (zero-decimal currency).
Performance
- Webhook delivery p99 latency reduced from 4.2s → 0.8s after adding
exponential backoff with jitter.
Pro tips
- Feed the prompt real
git log --onelineoutput, not manually written summaries — the AI is better at categorizing raw commit messages than you expect, and it surfaces patterns you might miss. - Set
[changelog_format]toKeep a Changelog 1.0.0when targeting open-source projects; most maintainers recognize that structure immediately. - If you have no metrics for the performance section, put "not measured" in
[raw_changes]for those items — it keeps the section honest rather than producing generic filler where a real number should go. - Use
[tone]: terse, imperativefor developer-facing docs and[tone]: conversational, reassuringfor end-user announcements. The same underlying changes read very differently. - Pair this with a PR template that requires commit authors to tag changes as
feat,fix,perf, orbreak— that structured input makes the[categories]variable far more effective.