release · git:20260922.b7a069f · 2026-09-22 · sha256 666422264ded7b45

release git:20260922.b7a069fA

Immutable. This exact content never changes and is served at /api/v1/blob/666422264ded7b45.

---
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 take the last tag from
   `git describe --tags --abbrev=0` and bump minor for a behavior change,
   patch for docs or fixes. A version already set in
   `.claude-plugin/plugin.json` by an earlier commit is the one to release.
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. **Confirm.** If the user's request named the version and asked to
   release, the plan output is the confirmation; proceed. Otherwise show the
   plan and wait: a push and a tag are public.
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.