release-notes
Skill2 starsChanged 38 days agoMITView on GitHub
Write or update a release note: entry format, required sections, the Fixed rule, and regenerating the release index.
176 other projects use a version of this.
Adopted by
Most recently taken up by
- facebook/bpfiltertheir own version, first seen Nov 9, 2026
- openfrontio/OpenFrontIOtheir own version, first seen Nov 8, 2026
- microsoft/agent-frameworktheir own version, first seen Nov 8, 2026
- paulocsb/worldcup-fifa-pooltheir own version, first seen Nov 8, 2026
- OldemarJesus/connectlife-mcp-servertheir own version, first seen Nov 8, 2026
- op3616windows/skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use brainstorm-experiments-existing, brainstorm-ideas-new and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
skytiger6724Skillbrainstorm-experiments-existing
Design experiments to test assumptions for an existing product — prototypes, A/B tests, spikes, and other low-effort validation methods. Use when validating assumptions, testing feature ideas cheaply, or planning product experiments.
Also in 6 projects that use this
skytiger6724Skillbrainstorm-ideas-new
Brainstorm feature ideas for a new product in initial discovery from PM, Designer, and Engineer perspectives. Use when starting product discovery for a new product, exploring features for a startup idea, or doing initial ideation.
Also in 6 projects that use this
45ckSkillpestle-analysis
Also in 6 projects that use this
About-IntelligenceSkillpositioning-ideas
Brainstorm product positioning ideas differentiated from competitors.
Also in 6 projects that use this
About-IntelligenceSkillproduct-name
Brainstorm 5 unique, memorable product names with rationale aligned to brand values and target audience.
Also in 6 projects that use this
- +7 more from skytiger6724
Other versions176 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 176
- tw93/Mole★ 74ksame name
- makeplane/plane★ 62ksame name
- tabler/tabler★ 42ksame name
- pnpm/pnpm★ 37ksame name
- quasarframework/quasar★ 27ksame name
- dotnet/core★ 22ksame name
- zauberzeug/nicegui★ 16ksame name
- adobe/react-spectrum★ 16ksame name
- espanso/espanso★ 15ksame name
- microsoft/agent-framework★ 15ksame name
166 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository16 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- codebase-researchSkill
- context-transferSkill
- feature-pr-descriptionSkill
- how-it-worksSkill
- human-voice-writingSkill
- i18n-translateSkill
- impact-checkSkill
- memory-reviewSkill
- orchestrateSkill
- promotion-pr-descriptionSkill
- pr-review-triageSkill
- qa-testerSkill
- thorough-diff-reviewSkill
- walkthroughSkill
- writeups-cleanupSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 4 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 162 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 10
A repo's own copy wins: If the repo ships its own release-notes skill (for example .claude/skills/release-notes/SKILL.md), follow that file …
- Very specific: line 15
Look each fact up in the repo's CLAUDE.md (or AGENTS.md) and the files it points to, then in local.md next to this file.
- Distinctive: line 43
Run the index command, then commit both the note and the index.
- Very specific: line 100
Write every field as if a customer could read it.
- Distinctive: line 103
No library, package or tool names, internal query languages, rendering jargon, or anything in the "Jargon banned" row.
- Very specific: line 105
No code identifiers, API, schema or type names (GET schema, nullable, enum, PATCH), and no UI-component jargon (entity, data-table, …
- Very specific: line 107
No developer abbreviations (auth, UX, localization): say "sign-in", "experience", "translations".
- Very specific: line 158
If the file doesn't exist there, the feature is new and nothing about it belongs in Fixed.
- Distinctive: line 167
Commit the note and the regenerated index with the release-note commit type: writing a note and promoting a release are different acts.
- Distinctive: line 170
Never add an AI co-author, to a note's commit or anything else.
- Very specific: line 172
If local.md exists next to this file, read it.
“Common” is measured: kept by at least 6 in 10 of the 162 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release notes
A repo's own copy wins. If the repo ships its own release-notes skill (for example
.claude/skills/release-notes/SKILL.md), follow that file instead of this one.
Repo facts
Look each fact up in the repo's CLAUDE.md (or AGENTS.md) and the files it points to, then in
local.md next to this file. If neither has it, ask the user once and suggest the CLAUDE.md line
that records it.
| Fact | Example |
| Where release notes live (folder and contract doc) | releases/release-<semver>.md, with the contract in releases/README.md |
| Where uncommitted drafts go | a gitignored writeups/ folder in the main checkout |
| Branch flow | feature → release-<semver> → staging → main |
| Validator and index commands | scripts/release-index.sh regenerates the index, scripts/release-index.sh --check verifies it |
| What CI generates from release notes | the index check on every PR; a change-management record when a PR merges to main |
| Who reads the notes | customers through a public changelog, auditors, the internal team |
| Entry format and field limits | frontmatter fields, their limits and the required body sections, from the validator or the releases README |
| Paths whose changes never get an entry | test/**, e2e/**, .storybook/**, test runner configs |
| Where the notes are rendered and which fields readers see | a marketing site that shows title, summary, highlights and tags, never the body |
| Jargon banned from reader-facing text | library names, internal query languages, rendering terms |
| Commit type for release notes | docs(release): …, with release: reserved for promotion merges |
| Version bump convention | the package.json bump as its own chore: commit |
| Does the repo tag releases? | no: the version lives in package.json, the filename and the branch name |
| Which note a hotfix's entry goes in | the fixed version's own note, or a new patch version's |
What CI generates on its own is not written into the note. If this skill, the releases README and the validator disagree, the validator wins.
Steps
- Copy the newest note to keep the frontmatter shape, as
release-<semver>.md(valid semver). - Edit the frontmatter and the body (rules below).
- Run the index command, then commit both the note and the index.
- The index check must pass.
When a note is written
A note is written on the release branch while the release is prepared for production, or when the user asks for one. Feature and fix work never touches the note or its index, even on a branch cut from a release branch, and never reports a missing note as unfinished work. The user decides when a release is assembled.
While preparing the release, list every commit the release branch holds that its target lacks, and give each one an entry or a reason it has none. Write each entry from that commit's own message and diff: an entry reconstructed from the combined diff is how invented ones get in. Check the list, don't recall it:
git fetch origin
git log --oneline origin/<target>..HEAD<target> is the branch this one merges into, from the branch flow. Never start the list at the
note's last commit: a commit that touches the note without adding an entry hides every commit
before it.
A new file or capability is Added, a change to something shipped is Changed, and Fixed only
if it was broken in the previous released version. A hotfix's entry goes in the note Repo facts
names for it, and is Fixed only when the bug reached a released version. Only two kinds of commit need no entry: test
infrastructure, stories and CI-only changes (the "never get an entry" row; specs that pin what the
release is about still earn an Added entry), and commits that only edit the note or its index.
Entry format
The validator rejects a note missing a required field; the body is not indexed.
typejudges significance, not the digit that moved: a patch-numbered release with a capability people will notice isminor, a minor-numbered one that opens a new area ismajor.breakingis independent: amajorrelease that removes nothing isbreaking: false.- A visibility flag, if the contract has one (for example
hidden): set it for tooling, CI, dependency and audit work, and leave it off for releases readers would notice. Keep it accurate even if no public surface reads it yet. A hidden note shows no fields, so the wording rules below don't apply to it.
---
version: 1.4.0
date: 2026-07-20
title: Short human-readable title
summary: One or two sentences describing the release for readers.
type: minor
breaking: false
highlights: [Export invoices as CSV]
tags: [invoices, export]
---Reader-facing fields
Write every field as if a customer could read it. For a note readers can see, title, summary,
highlights and tags are plain customer language:
- No library, package or tool names, internal query languages, rendering jargon, or anything in the "Jargon banned" row.
- No code identifiers, API, schema or type names (
GET schema,nullable,enum,PATCH), and no UI-component jargon (entity,data-table,combobox,modal). - No developer abbreviations (
auth,UX,localization): say "sign-in", "experience", "translations". No CI, tooling or dependency-patch detail; that goes in the body.
Body sections
## Added, ## Changed, ## Fixed, ## Removed and ## Security are all required, in any order,
with - None. when empty. Every change goes in one of them by category, CI, tooling and workflow
fixes included. An optional ## Notes may follow, only for what fits none of them: upgrade or
migration steps, a caveat about something left undone, why a breaking change breaks, context about
the commit history. No other sections: no commit or SHA listing, no generated records, no "lint
passes".
What an entry says
A bold lead that names the change, then at most one plain sentence on its effect. A list of changes, not the story of the work.
- **Table headers announce their sort order to screen readers.**
- **Links to app pages in the invoices list open in the same tab.** A link to a page that does not exist shows as plain text.
- **The invoices page can export its rows as CSV.** Set `EXPORT_BUCKET` in the hosting settings to turn it on.A Fixed entry names the defect as people met it and what happens now. Name a file, command, flag
or setting only when the reader must act on it. A change to agent skills, hooks, lint rules or CI
gets one line.
Never in an entry: how, when or by whom a problem was found, how often it happened or what it
cost; incidents, near misses, anything that happened only on one machine or in one session; branch
names, PR numbers, SHAs, dates of work; investigation, rejected alternatives, measurements of the
work itself; verification (tests, gates, "checked in the browser"); mechanism (function and file
names, call order); drafts and working notes, which go to the drafts folder, as
releases/<version>/.
A measurement stays when it compares this release with the previous one and a reader would care
(sign-in page JavaScript 2.50 → 0.86 MB). Before committing, reread every entry you touched and
cut each sentence a reader would not miss.
Fixed means broken in the previous released version
Something broken and repaired inside this release never reached a reader: its Added entry already
states what ships. The question is never "did I fix something" but "was it broken in the last
release". The last release is the tip of the last promoted branch (main, or staging when it is
ahead and promoted), from the remote. Check, don't recall:
git fetch origin
git cat-file -e origin/main:<path> && echo "existed before" # was the feature even live?
git grep -i "<old wording>" origin/main -- '<source folder>' # for copy, was the old text live?If the file doesn't exist there, the feature is new and nothing about it belongs in Fixed. The
same test covers the words: shipped, in production, used to, was returning, readers saw,
regression and every before/after pairing are claims about the last release, and need the check.
Inventing a defect misrepresents a release as much as hiding one. Removed likewise means removed
from the last release, and a size comparison is measured against the last release, never against
the value before your own edit.
Commits
- Commit the note and the regenerated index with the release-note commit type: writing a note and promoting a release are different acts.
- Bump the version and tag (or not) as the repo facts say; add no tags of your own.
- Never add an AI co-author, to a note's commit or anything else.
If local.md exists next to this file, read it; where it disagrees with this file, it wins.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

