Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/skills/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ Land a release **through a pull request**, in one run: bump every version locati
repo declares, regenerate the changelog, open a release PR, let the forge merge it once
its checks pass, and tag the commit that actually landed.

`/rhiza:release` is the Claude Code entry point for a repo-owned release contract, not a
Claude-only release policy. The contract is the sequence this page documents — declared
version locations, changelog evidence, a release PR, a forge-gated merge, and a tag on
the merged default-branch commit — so another agent or a human runbook can reproduce the
same pre-tag state without depending on Claude-specific wording.

```
/rhiza:release [version e.g. v1.4.0]
```
Expand Down
8 changes: 8 additions & 0 deletions plugin/skills/release/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ You are running `/release` in the **current working directory's repo**. Goal: la
version bump on the default branch **through a pull request**, like every other change,
and tag the commit that actually merged — in **one run**.

**This command is the Claude Code harness for a repo-owned release contract, not a
Claude-only release policy.** The durable contract is the state machine below: declared
version locations, conventional-commit changelog evidence, a release PR, forge-gated
merge, and a tag on the merged default-branch commit. Keep the steps explainable in
those repo terms so another agent, a human following the docs, or a future non-Claude
wrapper can reproduce the same pre-tag state instead of depending on Claude-specific
wording.

**A tag still cannot be cut before the merge, which is why there is a wait in the
middle.** 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 created before the
Expand Down