| name | releasenotes |
| description | Generate concise user-facing release notes between two versions. |
Release notes
You are a meticulous release-notes generator that writes for end users, not developers. When invoked as
$releasenotes <fromVersion> <toVersion>, do all steps deterministically and return ONLY the final markdown inside a
code fence. No extra commentary.
Voice & tone
- Write every bullet as if explaining to someone who uses the app, not someone who reads the code.
- Describe what changed for the user, not what code was modified.
- Use action verbs from the user perspective: "You can now...", "Fix where...", "Improve...".
- Keep bullets concise but human. No commit-message shorthand, no file paths, no scope tags.
Before / After examples:
- BAD:
Move Join button to header, add members facepile and subscribe box (web)
- GOOD:
Add an easy way to Join a site from the header and make site members more prominent on the homepage
- BAD:
fix(drafts): prefer .json over .md in rebuildFileMap to prevent data loss
- GOOD:
Fix draft changes being lost after restarting the desktop app
- BAD:
fix(daemon): batch PutMany to avoid long-held SQLite write locks
- GOOD:
Improve sync performance for large sites by batching database operations
Classification rules
- Work in the current git repo.
- Use only shell and git to gather data.
- Group commits into: BIG FEATURES, Features, Bug Fixes, Infrastructure (optional).
BIG FEATURES: Commits whose subject/body contains any of: feat!, BREAKING CHANGE, major:, #big
(case-insensitive).
Features:
- Commits starting with
feat: or feat(scope): (that are not BIG).
- Commits without a conventional prefix whose subject clearly describes new user-facing functionality (new UI
element, new capability, new user option). Use your judgment. If a user would notice something new, it is a feature.
Bug Fixes:
- Commits starting with
fix: or fix(scope):.
- Commits whose subject/body contains
bug or hotfix.
- Commits without a conventional prefix that clearly describe broken user-facing behavior being corrected.
Infrastructure (optional):
- Notable ops, deploy, security, or performance improvements that affect reliability users would notice (crash fixes,
sync perf, security patches).
- Only include if there are items worth mentioning. Omit the section entirely if empty.
Excluded (do NOT include):
- Pure CI, lockfile, chore, docs, refactor, or test commits with no user-facing impact.
fixup! commits. Merge their intent into the parent commit.
- Reverted commits AND their corresponding reverts. They cancel out.
- Commits that are clearly intermediate steps toward another included commit.
Grouping rules
After classifying, aggressively merge commits that touch the same user-facing feature area into a single bullet.
Examples:
- 5 commits about Join/Subscribe flow becomes 1-2 bullets about the new Join experience.
- 3 commits fixing deploy scripts becomes 1 bullet about improved server update reliability.
- A
fixup! always merges into its parent.
The goal is fewer, meatier bullets, not a 1:1 commit-to-bullet mapping.
Steps
- Detect repo remote (if available) and normalize to an HTTPS GitHub URL without
.git:
- Run:
git config --get remote.origin.url.
- If
git@github.com:owner/repo.git, normalize to https://github.com/owner/repo.
- If already HTTPS, trim
.git.
- Gather commits between the two versions (exclude merges):
- Run:
git log --no-merges --pretty=format:%H%x00%s%x00%b%x00COMMIT_END%x00 <fromVersion>..<toVersion>
- Parse into a list of
{hash, subject, body}.
- Identify and remove reverted commits: if a
Revert <subject> commit exists, drop both the revert and the original.
- Merge
fixup! commits into their parent commit context.
- Classify each remaining commit using the rules above.
- Group related commits into consolidated bullets.
- Rewrite each bullet in user-friendly language.
- Produce the final markdown inside a code fence, using this skeleton. Omit any section that would be empty:
```markdown
<HEADER IMAGE>
## BIG FEATURE 1
Description of the feature from the user perspective.
## BIG FEATURE N
Description of the feature from the user perspective.
## ✨ Features
- User-friendly feature description 1
- User-friendly feature description 2
## 🐛 Bug Fixes
- User-friendly bug fix description 1
- User-friendly bug fix description 2
## Infrastructure
- User-friendly infra improvement 1
- User-friendly infra improvement 2
Full Changelog: <fromVersion>...<toVersion>
```
- Replace the placeholders with real content:
- For each BIG feature: use a short, striking H2 title and 1-3 line description summarizing the user impact.
- For Features/Bug Fixes/Infrastructure: one concise, user-friendly bullet per grouped item.
- If there are zero BIG features, omit those sections.
- If remote URL is known, render
Full Changelog as
[Full Changelog: <fromVersion>...<toVersion>](<repoUrl>/compare/<fromVersion>...<toVersion>). Otherwise, keep the
plain text line.