releaselisted
Install: claude install-skill rudi193-cmd/willow-2.0
# /release
> **Authorization gate.** Do not push the tag without USER's explicit approval. The tag triggers the public GitHub Release workflow — this is a one-way action.
---
## When to use this skill
- USER says "cut the release", "tag it", or "ship v…"
- The CHANGELOG `[Unreleased]` section has content ready to ship
- CI is green on master
---
## Pre-flight checks (run before any action)
```
git -C $WILLOW_ROOT pull origin master
cat $WILLOW_ROOT/VERSION # current version string
gh pr list --repo rudi193-cmd/willow-2.0 --state open # no open PRs blocking the release?
gh pr checks <most-recent-pr> --repo rudi193-cmd/willow-2.0 # CI green?
```
Surface the results. If CI is not green on master, stop and report.
---
## Steps
**1. Verify CHANGELOG is ready**
Read `CHANGELOG.md`. The `[Unreleased]` section must have content. If it is empty or absent, stop — the CHANGELOG update PR must go first.
**2. CHANGELOG PR**
Open a worktree (`feat/release-vX.Y.Z`) — **pull master first**.
Update `CHANGELOG.md`:
- Rename `## [Unreleased]` → `## [X.Y.Z] - YYYY-MM-DD`
- Leave an empty `## [Unreleased]` above it for the next cycle
- Fold any existing stub entry for `[X.Y.Z]` into the new section
Commit, push, open PR. Title: `chore(release): CHANGELOG for vX.Y.Z`.
**3. Wait for CI + USER approval**
Do not proceed until:
- All CI jobs on the CHANGELOG PR are green
- USER approves or merges the PR
**4. Pull master after merge**
```
git -C $WILLOW_ROOT pu