releaselisted
Install: claude install-skill A/claude-booping
# release — cut a booping plugin release
Releases the `booping` plugin from a `release/X.Y.Z` branch: verifies the version, drafts public release notes, merges to `master`, tags `vX.Y.Z`, and publishes the GitHub release.
Run from the repo root with the `release/X.Y.Z` branch checked out. Default branch is **`master`**. Version is single-source in `.claude-plugin/plugin.json`.
## Preflight — gather facts
Run these read-only; report the resolved values back before doing anything that writes:
```bash
git rev-parse --abbrev-ref HEAD # current branch — expect release/X.Y.Z
jq -r .version .claude-plugin/plugin.json # the version to ship
gh release list --limit 1 # last published release
git status --porcelain # working tree must be clean
git remote # remote name — this repo uses `gh`, NOT origin
```
Resolve: `VERSION` (from plugin.json), `TAG = v$VERSION`, `LAST_TAG` (newest existing `v*` tag), `BRANCH`, and `REMOTE` (the single remote — do not assume `origin`; use whatever `git remote` reports). Substitute `$REMOTE` into every push/fetch/log-range below.
## Phase 0 — Verify version + previous release
Gate every check; if any fails, stop and report — do not proceed to merge.
1. **Clean tree** — `git status --porcelain` is empty. Dirty tree → stop.
2. **On the release branch** — `BRANCH` is `release/$VERSION`. If it is `master` or a mismat