- 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