changeset-writerlisted
Install: claude install-skill Contexory/skills
# Changeset writer
Two things go wrong with release notes, and both are mechanical enough to fix.
The note describes the diff instead of the consequence — "refactored the parser" tells a
consumer nothing about whether to upgrade. And the bump is chosen by feel: a large diff
gets a minor, a small one gets a patch, when the only question that matters is what
happened to the surface other people depend on.
## Procedure
### 1. Read the change's effect on the public surface
`<skill-dir>` is the directory this SKILL.md was loaded from — the skill installs outside
your project, so its script is named by full path, never relatively.
```
python3 <skill-dir>/scripts/change_surface.py # working tree vs merge-base with main
python3 <skill-dir>/scripts/change_surface.py origin/main # explicit base
```
The script reports which packages the diff touches, whether each is published or private,
the exported symbols **added, removed and signature-changed** per package, and the
repository's existing release convention with an example of a recent entry.
### 2. Pick the bump from the surface, not the diff size
- **major** — an export was removed, renamed, or had its signature narrowed; a default
changed in a way existing callers would notice; a runtime floor was raised
- **minor** — an export was added, and nothing existing changed
- **patch** — no change to the public surface at all
A private package usually needs no changeset. Say so rather than writing an empty one.
**A