Skip to main content

harness-release

Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.

Source facts

Repository
Chachamaru127/claude-code-harness
Last source activity
September 6, 2026 at 02:09
Detected SKILL.md language
Japanese
Stars
3,159
Forks
301

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
7 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
harness-release
description
Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.
# Harness Release (汎甚) Keep a Changelog + GitHub を䜿う**あらゆるプロゞェクト向け**の汎甚リリヌス自動化スキル。 **蚭蚈原則**: 単䞀確認ゲヌト。ナヌザヌは 1 回だけ党䜓蚈画を芋お承認する。承認埌はファむル曞き換え → commit → branch push → PR 䜜成/曎新 → default branch ぞ merge → default branch 䞊で tag → GitHub Release たでを䞭断なく実行する。 **Release complete の定矩**: release は「tag ず GitHub Release を䜜った」だけでは完了ではない。察象 work ず release bump が default branch通垞 `main`に merge 枈みで、release tag が default branch 到達可胜 commit を指し、GitHub Release がその tag を公開しおいる状態を完了ずする。 ## PR ready vs release ready Harness V2 では PR closeout ず release closeout を混同しない。 | Gate | 意味 | 必須条件 | 停止 lane | |------|------|----------|-----------| | **PR ready** | ブランチが review 可胜で merge 刀断できる | `harness-review` `APPROVE`、focused tests PASS、evidence pack 完備accepted/rejected findings、tests、release-preflight warnings 凊理、residual risk | `[lane:fast]` / `[lane:gate]` はここで停止可 | | **release ready** | 公開配垃 path が preflight を通過 | PR ready 条件 + version surface sync + tag + GitHub Release + CI/public artifact 怜蚌 | `[lane:release]` のみ | - PR ready は `harness-review` APPROVE + evidence pack で刀定する。`harness-review` から push / PR / merge はしない。 - release ready は `harness-release` の Preflight / Post-Gate だけが刀定する。version bump / tag / GitHub Release は release lane 専甚。 - local tests passed だけでは PR ready でも release ready でもない`not_observed != absent`。 > **Literal invocation note**: この skill の入口は `harness-release`, `/release`, `/release patch`, `/release --dry-run` のような literal command をそのたた䜿う。 ## CC runtime hard floor ずの関係 Claude Code 2.1.183+ の runtime hard floor は GitHub CLI release publish 系コマンドを構造的に deny する (Anthropic 補品仕様、`settings.json` の `permissions.ask` で芆せない)。本 skill は publish 自䜓を実行せず、`.github/workflows/release.yml` (tag push trigger) に委譲する。skill は tag push たでで責務を完了し、その埌 `scripts/release-verify-publish.sh` で workflow による公開を verify する。 **Revert 条件**: CC が runtime hard floor に user explicit approval path を提䟛したら、Post-Gate に盎接 publish step を戻すこずを怜蚎する。 ## Bare invocation contract if $ARGUMENTS == "": → 「今たでの䜜業をコミットし、PR/main 反映たで完了しおリリヌスしたい」ず解釈し、Review Gate 怜出を実行する → 察象 work が 1 ぀に確定できる堎合だけ Step 0 (Review Gate) ぞ自動進行する → 察象が䞍明たたは review state が無い堎合は AskUserQuestion で遞択肢を出しおから進める 匕数なし呌び出し時の最初の応答で必ず次の literal marker を出力する: `RELEASE_AUTOSTART: target=<work-summary>, base_ref=<ref>, mode=<patch|minor|major|auto>` 「タスクが䞍明確」「指瀺を埅ちたす」「タスクがありたせん」「远加の指瀺をお埅ちしたす」は犁止行動。 <!-- 䞊蚘ブロックは AUTO-START CONTRACT。skill-editing.md「最冒頭 3 行以内」ルヌル準拠。patterns.md P27 解法 3 点セット (機械可読条件 + 犁止行動 literal + AUTOSTART marker) --> ### 自䞻停止の犁止 (140.3、2026-08-22 の release run で 2 回発生した停止パタヌンの再発防止) 以䞋は犁止行動。literal に列挙する (AUTOSTART pattern ず同じ方匏): - background 埅ちで turn を終えお停止しない (turn を終えるず background 子プロセスは残らない) - 「怜蚌を埅ちたす」「確認したす」「完了を埅機したす」で turn を終えない - 埅぀なら同期実行 (foreground / Monitor) で埅ち切る。埅おないものは保留ずしお報告し、次のタスクぞ進む ### Output Contract (P35: 「止たったように芋える」UX 察策) `<local-command-stdout>` で host ぞ結果を䞭継する堎合だけ、output の **最埌の 1 行**に次の literal を含める: `↑この結果は Claude が芁玄したす。Enter キヌで次ぞ進むか、新芏 prompt で別の指瀺を出しおください。` これは `<local-command-stdout>` 経由で text response ずしお衚瀺されるず user が「止たった」ず感じる UX 問題ぞの明瀺的な instruction (patterns.md P35)。 host の最終回答は実行枈み操䜜、公開の怜蚌結果、残る gate を返す。芁玄や怜蚌の予告だけで終了しない。 `harness-release` / `/release` だけが入力された堎合、これは **「今たでの䜜業をコミットし、PR/main 反映たで完了しおリリヌスしたい」** ずいう意味ずしお扱う。 旧衚珟の **「今たでの䜜業をコミットしおリリヌスしたい」** も同じ意図だが、完了条件には PR/main 反映を必ず含める。 「タスクがありたせん」「指瀺を埅ちたす」で止たっおはいけない。 bare release では、通垞の release preflight の前に **Review Gate** ず **Work Commit Gate** を実行する。 Review Gate は **release ready** 向け。`[lane:fast]` / `[lane:gate]` の PR ready だけが必芁な work には、ナヌザヌが release を明瀺しない限り `harness-release` を起動しない。 1. `git status --porcelain` ず `git log @{upstream}..HEAD` / `main..HEAD` を確認し、「今たでの䜜業」の察象を特定する 2. `.claude/state/review-result.json` ず `.claude/state/review-approved.json` を確認し、察象 work に `APPROVE` 枈み review ず evidence pack があるか確認する 3. APPROVE 枈み review が無い堎合は `AskUserQuestion` で確認する 4. ナヌザヌが「レビュヌから開始」を遞んだら、`harness-review` を起動し、`APPROVE` になるたで release ぞ進たない 5. `harness-review` が `REQUEST_CHANGES` を返した堎合は release を保留し、`harness-work` で修正しおから `harness-review` を再実行する。これを `APPROVE` たでルヌプする 6. `harness-review` が `APPROVE` を返した埌、working tree の䜜業 commit を䜜る 7. working tree clean になっおから通垞の release preflight / confirmation gate / PR merge / tag / GitHub Release ぞ進む ### Review Gate AskUserQuestion `harness-release` 実行時に review approval が確認できない堎合は、掚枬で release しない。 次の Ask を出す。 ```text question: "harness-release は今たでの䜜業をコミットしおリリヌスしたすが、この䜜業の APPROVE review が芋぀かりたせん。どう進めたすか" options: - label: "レビュヌから開始 (Recommended)" description: "harness-review を実行し、APPROVE になった堎合だけ commit/release ぞ進みたす。" - label: "release dry-run" description: "ファむルを曞き換えず、release 蚈画ず䞍足 gate だけ確認したす。" - label: "äž­æ­¢" description: "review も release も行わず止めたす。" ``` ナヌザヌが「レビュヌから開始」を遞んだ堎合は、同じセッション内で `harness-review` から始める。 `harness-review` の察象決定は `harness-review` 偎の bare review contract に埓う。 review が `APPROVE` なら、そのたた `harness-release` の Work Commit Gate ぞ戻る。 review が `REQUEST_CHANGES` なら release は保留し、`harness-work` で修正しおから `harness-review` を再実行する。 この修正埌再レビュヌ loop は `APPROVE` たで継続する。 ナヌザヌに戻しおよいのは次の堎合だけ。 1. 修正に仕様正本 / Plans.md / API / permission / migration / billing などの意思決定が必芁で、`AskUserQuestion` が必芁 2. 修正方針が耇数あり、どれを採るかでナヌザヌ䟡倀や互換性が倉わる 3. ナヌザヌが Ask で `release dry-run` たたは `äž­æ­¢` を遞んだ `REQUEST_CHANGES` 単䜓を最終停止理由にしおはいけない。 ### Work Commit Gate bare release で working tree に未コミット倉曎がある堎合、release version bump commit ずは別に、 review 枈み work commit を先に䜜る。 ```bash git status --short git diff --stat git add <reviewed files> git commit -m "<type>: <summary>" ``` commit message は review summary / Plans.md task / branch name から短く生成する。 衚珟だけが未決なら既存の commit 芏玄に沿っお生成する。review 枈みの察象そのものが曖昧な堎合だけ、その察象を確認する。 work commit 䜜成埌に `.claude/state/review-result.json` の `commit_hash` を確認たたは曎新し、 release preflight ぞ進む。 通垞の release preflight に入った埌は、これたで通り working tree dirty を fail ずする。 dirty tree のたた version bump / tag / GitHub Release に進たない。 ## Quick Reference ```bash /release # 今たでの䜜業を review gate → commit → PR/main merge → release する /release patch # bump を patch に明瀺指定 /release minor # bump を minor に明瀺指定 /release major # bump を major に明瀺指定 /release --dry-run # 蚈画の衚瀺のみ、実行しない ``` ## 前提条件 このスキルが動くプロゞェクトは以䞋を満たす必芁がありたす: 1. `CHANGELOG.md` が [Keep a Changelog](https://keepachangelog.com/) 圢匏 2. `[Unreleased]` セクションが存圚する 3. 以䞋のいずれかの version file を持぀: - `VERSION` (単独ファむル) - `package.json` (npm) - `pyproject.toml` (Python, `[project]` たたは `[tool.poetry]`) - `Cargo.toml` (Rust, `[package]`) 4. `gh` CLI がむンストヌル枈みで、認蚌枈み 5. git リモヌト `origin` が GitHub を指す 6. Claude Code plugin project の堎合は、`claude` CLI が `plugin validate` をサポヌトしおいる これらが満たされない堎合、Preflight で detect しお abort したす。 `prUrlTemplate` による multi-host review URL は将来候補ずしお認識するが、 このスキルの release automation は今も `gh` CLI ず GitHub remote を primary path ずする。 owner / branch / release asset / CI metadata の自動取埗は host ごずの差が倧きいため、Phase 56.2.3 では docs-only に留める。 ## 単䞀ゲヌトフロヌ Bare release0. Review Gate → 0.5 Work Commit Gate→ Pre-Gate1. Preflight → 2. Version file 怜出 → 3. バヌゞョン読み取り → 4. plugin version sync preflight → 5. bump 掚定 → 6. 新バヌゞョン算出 → 7. CHANGELOG ドラフト → 8. CHANGELOG release body preview→ **単䞀確認ゲヌト**䞋蚘「Confirmation Gate」参照、`yes` / `<修正指瀺>` / `cancel` の 3 択→ Post-Gate9. Version file 曞き換え → 10. CHANGELOG 昇栌 → 11. commit → 12. branch push → 13. PR 䜜成/曎新 → 14. default branch merge → 15. 到達可胜性確認 → 16. semver tag → 17. tag push → 18. workflow publish verify → 19. 完了報告 の 3 段階で進む。各段の詳现は「Pre-Gate 詳现」「Confirmation Gate」「Post-Gate 詳现」を参照。 ## Pre-Gate 詳现 ### 1. Preflight release ready gate: PR ready 条件に加え、version / tag / GitHub Release / CI artifact path を確認する。 ```bash # 必須ツヌル command -v gh >/dev/null || { echo "gh CLI がありたせん"; exit 1; } command -v python3 >/dev/null || { echo "python3 が必芁です"; exit 1; } # working tree if [ -n "$(git status --porcelain)" ]; then echo "working tree に未コミット倉曎がありたす"; exit 1; fi # CHANGELOG [ -f CHANGELOG.md ] || { echo "CHANGELOG.md がありたせん"; exit 1; } grep -q "^## \[Unreleased\]" CHANGELOG.md || { echo "[Unreleased] セクションがありたせん"; exit 1; } # plugin/mirror projects scripts/release-preflight.sh ``` この working tree clean check は通垞 release preflight の gate である。 bare release で「今たでの䜜業」を commit したい堎合は、この check の前に Review Gate ず Work Commit Gate を完了させる。 未レビュヌの dirty tree をこの check だけで abort しお終わらせおはいけない。 `scripts/release-preflight.sh` は tag 䜜成前に `opencode/`, `skills-codex/`, `codex/.codex/skills/` の mirror drift も怜出する。`node scripts/build-opencode.js` が差分を生成した堎合は release を止め、その差分を commit しおから tag に進む。 release preflight は host workflow smoke を `REQUIRED=1`fail-closedで党 dist host に察しお実行する。1 host でも FAIL なら release を止める。これは multi-host bar H7release-preflight consumes host gates fail-closedの充足配線である。`scripts/release-preflight-host-smoke.sh` 参照。fail-closed の正本は operator マシンの preflight であり、GitHub runner`GITHUB_ACTIONS=true`では CLI 未 provision の host を明瀺 SKIP 行぀きで飛ばすtag-triggered workflow の再実行が党 release を塞がないため。v5.3.0 run 29679591686 の regression 察応。 ### 2. Version File 自動怜出 `VERSION` → `package.json` → `pyproject.toml``[project]` / `[tool.poetry]`→ `Cargo.toml` の優先順で探玢し、最初に芋぀かったものを正本ずする。 怜出スニペット・読み取りロゞックの詳现: [version-files.md](${CLAUDE_SKILL_DIR}/references/version-files.md) ### 3. Claude Plugin Version Sync Preflight `.claude-plugin/plugin.json` が存圚する project では、semver tag を切る前に plugin manifest の validation ず党 version surface の同期を確認する。 > **plugin tag (`{plugin-name}--v{version}`) は 2026-08-17 に廃止**。`marketplace.json` の `source` が盞察パス (`"./"`) で install は tag を参照しないため、実効性が無いたた v5.6.0 以降 3 リリヌス連続で欠番になっおいた。GitHub Release 甹 semver tag `vX.Y.Z` に䞀本化する (decisions.md D69)。 Pre-Gate ではファむルを曞き換えず、以䞋を確認する。 version sync は `grep` / `sed` で拟わず、JSON は structured parser で読む: ```bash command -v claude >/dev/null || { echo "claude CLI がありたせん"; exit 1; } claude plugin validate .claude-plugin/plugin.json HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}" python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root . ``` `${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py` は、存圚する release surface をすべお読み取り、canonical を `VERSION > package.json > .claude-plugin/plugin.json > .codex-plugin/plugin.json` の順で決める。 そのうえで、以䞋の䞍䞀臎・欠萜が 1 ぀でもあれば tag / release に進たない: - `VERSION` - `package.json` の `.version` - `.claude-plugin/plugin.json` の `.version` - `.codex-plugin/plugin.json` の `.version` - `.claude-plugin/marketplace.json` の `.metadata.version` - `.claude-plugin/marketplace.json` の `.plugins[].version`配列内の各 plugin entry 䞍䞀臎時は、どの surface が canonical ず違うか、たたはどの field が missing / invalid かを衚瀺する。 機械凊理や CI で読む堎合は `--json` を䜿う: ```bash python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root . --json ``` この check は 3 ぀の事故を防ぐためにある: - `VERSION` ず `.claude-plugin/plugin.json` の version がずれたたた tag を切る事故 - `package.json` / marketplace entry の version が叀いたた release workflow に進む事故 - plugin manifest / marketplace entry の validation を通さず、あずで plugin install / update 偎で詰たる事故 この check の結果 (canonical version ず各 surface の䞀臎) を Confirmation Gate の plan に含める。 ### 4. Bump 自動掚定 `[Unreleased]` 盎䞋の芋出し`### Breaking Changes`/`### Removed` → major、`### Added` → minor、`### Fixed`/`### Changed`/`### Security` のみ → patch、空セクション → errorを解析しお bump level を決定する。 ナヌザヌが `/release patch|minor|major` で明瀺指定した堎合はそちらを優先。 詳现: [bump-detection.md](${CLAUDE_SKILL_DIR}/references/bump-detection.md) ### 5. CHANGELOG ドラフト䜜成 (メモリ䞊) `[Unreleased]` の内容を切り出し、`[<new>] - YYYY-MM-DD` セクションず compare link を組み立おるただ曞き蟌たない。 詳现: [release-notes.md](${CLAUDE_SKILL_DIR}/references/release-notes.md#changelog-ドラフト䜜成メモリ䞊pre-gate-ステップ-7) ### 6. CHANGELOG release body preview (メモリ䞊) tag-triggered workflow が公開する本文は、昇栌埌の `## [<new>]` セクション本文そのもの。 別の英蚳・芁玄・フッタヌを生成せず、workflow ず同じ抜出境界の本文をそのたた preview する。 抜出方法・怜蚌チェックの詳现: [release-notes.md](${CLAUDE_SKILL_DIR}/references/release-notes.md) ## Confirmation Gate すべおのドラフトが揃ったら、ナヌザヌに 1 回だけ提瀺: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Release Plan: v<old> → v<new> (<bump>) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Version file: <detected file> Bump reason: <why this level was chosen> CHANGELOG changes: [Unreleased] に <N> 項目の倉曎を怜出 [<new>] - YYYY-MM-DD ずしお確定 Compare link を远加 CHANGELOG release body preview (workflow が公開する本文): <workflow が公開する本文の党行> Files to modify: - <version file> - CHANGELOG.md Final actions: - git commit -m "chore: release v<new>" - git push origin <release-branch> - gh pr create/update + gh pr merge into <default-branch> - git fetch origin <default-branch> && git checkout <default-branch> - git tag -a v<new> # GitHub Release 甹 semver tag。default branch 䞊で䜜成 - git push origin <default-branch> --tags - (tag push 埌は GitHub Actions release workflow が自動で release 公開) Proceed? [yes / cancel / <修正指瀺>] ``` ## Post-Gate 詳现 承認埌は䞭断なしで実行。倱敗時は以䞋の方針: | 倱敗箇所 | 埩旧 | |---------|------| | ファむル曞き換え倱敗 | そこで abort、ロヌカルは dirty なたた人間が刀断 | | commit 倱敗 | hook 拒吊等。ナヌザヌに原因を提瀺しお修正を促す | | PR 䜜成/merge 倱敗 | release を未完了ずしお停止。tag / GitHub Release には進たない | | plugin version sync 倱敗 | `VERSION` / `.claude-plugin/plugin.json` / marketplace entry の䞍䞀臎を修正し、tag 䜜成には進たない | | push 倱敗 | リモヌト偎の問題。ロヌカル commit/tag は残す | ### PR / Main Merge Gate、semver tag、Verify Publish Post-Gate の release commit 埌、tag を䜜る前に GitHub PR を default branch ぞ merge する`gh pr create` → `gh pr merge --merge` → default branch fetch/checkout で release commit の到達可胜性を確認。release branch 䞊だけに存圚する commit を指す tag で GitHub Release を䜜っおはいけない。 `.claude-plugin/plugin.json` がある project では、merge 埌に default branch 䞊で version sync を再確認しおから semver tag `vX.Y.Z` を䜜る (plugin tag は 2026-08-17 廃止、D69)。 tag push 埌は `bash scripts/release-verify-publish.sh` で `.github/workflows/release.yml` の公開結果を verify する5 秒間隔 × 60 回 polling、exit 0=PASS / 2=WARN(timeout) / 3=ERROR。 コマンド党文・倱敗時の刀断基準は [post-gate-detail.md](${CLAUDE_SKILL_DIR}/references/post-gate-detail.md) を参照。 ## `--dry-run` モヌド Pre-Gate 党おを実行し、Confirmation Gate たでの内容を衚瀺するが、**gate で止たり Post-Gate に進たない**。 Claude plugin project の堎合、dry-run でも `python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .` を実行し、canonical version ず各 surface の䞀臎を衚瀺する。ここで `VERSION` / `package.json` / `.claude-plugin/plugin.json` / `.codex-plugin/plugin.json` / `.claude-plugin/marketplace.json` の version surface が䞍䞀臎たたは欠萜しおいれば、dry-run の時点で止める。 ## 環境倉数 プロゞェクトごずの調敎に䜿甚: | 倉数 | 説明 | |------|------| | `HARNESS_RELEASE_PROJECT_ROOT` | リポゞトリルヌト (デフォルト: `$(pwd)`) | | `HARNESS_RELEASE_BRANCH` | push 察象ブランチ (デフォルト: 珟圚のブランチ) | | `HARNESS_RELEASE_DEFAULT_BRANCH` | PR merge 先 default branch (デフォルト: `main`) | | `HARNESS_RELEASE_HEALTHCHECK_CMD` | Preflight で远加実行するコマンド | | `HARNESS_RELEASE_SKIP_GH` | `1` で GitHub publication verification をスキップ | ## CHANGELOG 曞き方ルヌル `[Unreleased]` セクションは KaCL 暙準サブセクション`### Added`=minor / `### Changed`・`### Fixed`・`### Security`=patch / `### Deprecated`=minor / `### Removed`・`### Breaking Changes`=majorのいずれかを持぀必芁がある。 このスキルはこれらの芋出しを機械的に解析するため、衚蚘揺れ`### Fix` / `### Bug Fixes` 等は認識できない。 CHANGELOG release body の preview 契玄・CHANGELOG の曞き方・merge 方匏squash 䞍採甚の詳现は [github-release.md](${CLAUDE_SKILL_DIR}/references/github-release.md) を参照。 SemVer 刀定基準・バッチリリヌス方針・Release Train Proposal の詳现は
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub