---
name: release
description: Prepare or publish a cargo-coupling version when the user requests a release. Distinguish local preparation from authorized commit, tag, push, and publication.
argument-hint: "[version] [prepare or publish]"
---

# Release cargo-coupling

Match the requested version and publication scope. A preparation request ends with
verified local artifacts; a publish request includes the authorized release commit,
tag, push, and publication verification. Carry existing authorization forward.
Resolve a missing version before changing release metadata; meanwhile inspect the
branch, remote, status, and current release workflow.

Update `Cargo.toml` and refresh `Cargo.lock` without upgrading unrelated dependencies.
Run the required checks against the final release state:

```bash
rtk cargo fmt --all -- --check
rtk cargo clippy --locked --all-targets --all-features -- -D warnings
rtk cargo test --locked --all-features
rtk cargo build --locked --release
```

Before publication, verify the staged diff, intended branch and remote, matching
manifest/lockfile versions, and that the tag does not already identify a different
release. Preserve unrelated work. Use an annotated `vX.Y.Z` tag on the verified
release commit; the commit message is `chore: release vX.Y.Z`. Push only the intended
branch and tag to the verified remote; never replace an existing release tag.

Pushing a `v*` tag triggers [.github/workflows/release.yml](../../../.github/workflows/release.yml),
which publishes to crates.io and creates a GitHub release. Check both outcomes
before reporting publication complete. If publication fails or is uncertain,
inspect the workflow and registry state before retrying; do not create another
version or move a tag to bypass the failure.

The optional Claude hook in [.claude/settings.json](../../../.claude/settings.json) checks
formatting and lint for matching commit commands. It does not establish that all
release checks ran in another host. Reuse successful current checks while the
release state is unchanged.
