← ClaudeAtlas

hv-releaselisted

Cut a release — walk the project's per-project release checklist (`.hv/RELEASE.md`) as a preflight gate, bump version (major/minor/patch), generate categorized release notes from commits since the last tag, prepend a section to CHANGELOG.md, create an annotated git tag, push, publish a release on GitHub or GitLab if origin is set, and offer to close any upstream issues still open for shipped items. Use on "release", "cut a release", "tag a release", "ship X.Y.Z".
l4ci/hv-skills · ★ 0 · AI & Automation · score 73
Install: claude install-skill l4ci/hv-skills
**Print the banner below verbatim before any other action — skip if dispatched as a subagent.** See `references/banner-preamble.md`. ``` ════════════════════════════════════════════════════════════════════════ 🏷️ hv-release · bump version, tag, notes, CHANGELOG, publish triggers: "release", "cut release", "ship X.Y.Z" · pairs: hv-ship ═════════════════════════���══════════════════════════════════════════════ ``` # hv-release — Cut a Release ## Configuration Read from `.hv/config.json` (all keys optional — defaults apply if absent): | Key | Default | Notes | |---|---|---| | `release.versionFile` | (auto-detect) | Explicit path override; skips auto-detect search | | `release.changelogPath` | `CHANGELOG.md` | Project-root relative | | `release.checklistPath` | `.hv/RELEASE.md` | Per-project release checklist walked in Step 1.5; absent = offer scaffold | | `release.tagPrefix` | `v` | Set to `""` for unprefixed tags | | `release.draft` | `false` | Pass `--draft` to `gh`/`glab` | | `release.requireCleanTree` | `true` | Set `false` to allow dirty releases (testing only) | | `release.confirmLargePushCommits` | `10` | Threshold (commits) above which auto/loop autonomy still confirms before pushing unpushed HEAD | ## Step 1 — Preflight & Guard ```bash .hv/bin/hv-preflight ``` See `docs/reference/preflight.md` for exit-code handling. Then verify: 1. **Clean tree** — run `git status --porcelain`. If output is non-empty and `release.requireCleanTree` is `true` (default