release · git:20261001.de36cdf · 2026-10-01 · sha256 63a2fd4e77a31238

release git:20261001.de36cdfA

Immutable. This exact content never changes and is served at /api/v1/blob/63a2fd4e77a31238.

---
name: release
description: >
  Cut a claude-jev release: changelog entry, version bump, tagged commit,
  push, GitHub release. Use when the user asks to release, ship, tag, or
  publish a version of this plugin, or runs /release. Not for an ordinary
  version bump or changelog edit without a release.
argument-hint: "<X.Y.Z>"
---

# Release

Maintainer workflow for this repository. It is a project skill, not part of
the shipped plugin.

`python3 .claude/skills/release/release.py X.Y.Z`, run from the repository
root, does the mechanical part.
Its docstring is the authoritative list of what it checks and changes. It
plans by default and writes nothing until `--execute`.

## Do

1. **Version.** Use the one the user named. Otherwise bump automatically:
   take the last tag from `git describe --tags --abbrev=0`, minor for a
   behavior change, patch for docs or fixes. A version already set in
   `.claude-plugin/plugin.json` and root `plugin.json` by an earlier commit
   is the one to release. Those two versions stay the same.
2. **Notes.** `## [Unreleased]` in `CHANGELOG.md` must hold the user-facing
   changes since the last tag, one `-` bullet each, with numbers where a
   run produced them. Source: `git log --format='%h %s' <last-tag>..HEAD`.
   The first sentence of the first bullet becomes the commit and tag title.
   Commit the changelog edit; the script needs a clean tree.
3. **Plan.** Run the script without `--execute` and read the output. It
   stops on any failed check and names it.
4. **Check the plan.** Running `/release` is the confirmation to release;
   do not stop to ask. Read the plan only to catch a wrong version, a
   missing note, or a failed check, and fix those before executing.
5. **Execute.** Re-run with `--execute`. Add `--trailer "Claude-Session: <url>"`
   when this session's commit attribution requires that line.

## Done when

`gh-axi release view vX.Y.Z` shows the notes and `git status -sb` prints
`## main...origin/main` with nothing ahead or behind. Report the release URL.

## If

- **The script fails after the push but before the release exists,** the
  tag is already public. Run
  `gh-axi release create vX.Y.Z --notes-file <notes> --verify-tag` by hand.
  Do not re-run the script.
- **The release changes `scripts/compactor.py`,** run the compaction gate
  first as AGENTS.md describes, and quote its three gate lines in the notes.