← ClaudeAtlas

releaselisted

Prepare a release in any git repo that declares its version locations (no .rhiza/ needed) — choose a version from a table, bump, regenerate the changelog, and open a release PR. Tags the merged commit on a second run.
Jebel-Quant/rhiza-claude · ★ 4 · Code & Development · score 70
Install: claude install-skill Jebel-Quant/rhiza-claude
You are running `/release` in the **current working directory's repo**. Goal: land the version bump on the default branch **through a pull request**, like every other change, and then tag the commit that actually merged. **That splits the release into two phases, and the split is forced by squash-merge.** A tag must point at a commit that exists on the branch you publish from; a squash-merge replaces the branch's commits with a new one, so a tag cut before the merge names a SHA that never lands. There is no ordering of one invocation that fixes this — the commit to tag does not exist until the human merges. So: | Phase | You run | It ends with | | --- | --- | --- | | **A — the release PR** | `/rhiza:release` on a clean default branch | a pushed branch and an open PR. **No tag.** | | **B — the tag** | `/rhiza:release` again, after that PR merges | the merged commit tagged and the tag pushed — release CI running | Step 1 works out which phase it's in from the repo's own state; the user does not declare it. **Never push to the default branch, and never move an existing tag.** Phase A pushes one *release branch* — the same thing `/rhiza:init` and `/rhiza:update` do. Phase B pushes one *tag*, onto a commit the user already reviewed and merged. **The human decision is the merge, and there is exactly one of it.** Phase A stops at an open PR precisely so that a person chooses the version, watches the checks, and consents by merging. Everything after that is mechanical, and makin