hv-releaselisted
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