version-bump 手順書
このリポジトリには独立してリリースされる2つのプロダクトがある。
- CLI (
@helpfeel/cosense-cli, npm公開): バージョンはpackage.json - Agent Skill (Claude plugin): バージョンは
.claude-plugin/marketplace.json
それぞれ別の番号・別のタイミングでリリースされる。この手順書は、対象を選んで正しい手順でバージョンを上げる。
このskillがやること・やらないこと
- やる: バージョン番号の更新、commit、tag作成(すべてローカル)
- やらない:
git pushとnpm publish。これらは不可逆な外部公開なので、AIは実行しない。
前提チェック(調査前に必ず確認)
- 現在のbranchが
mainか確認する。git branch --show-currentがmainでなければ、止めてユーザーに確認する。 - working treeがクリーンか確認する。
git status --porcelainに出力があれば止める。無関係な変更をリリースcommitに混ぜない。またnpm versionはダーティなツリーで失敗する。
Step 0: 両方の未リリース変更を調べてから対象を質問する
ユーザーは「どちらに未リリース変更があるか」を材料に対象を決める。質問より先に、CLIとSkillの両方を調べる。
CLIの前回リリース地点を特定する。
git describe --tags --abbrev=0 --match 'v*'Skillの前回リリース地点を特定する。まず
skill-v*タグを探し、終了コードでフォールバックを判断する(fatalの文言に依存しない)。git describe --tags --abbrev=0 --match 'skill-v*'これが失敗(exit≠0)した場合は、旧いcommit規約にフォールバックする。
skill version 0.2.0のような別形式を拾わないよう[0-9]でアンカーする。git log --first-parent --grep='^skill v[0-9]' -1 --format=%Hタグも旧release commitも無い場合は初回リリースとして全履歴を対象にする。
それぞれの未リリース変更を取得する。
<CLI境界><Skill境界>はStep 1・2で得たtagまたはcommit。git log --oneline <CLI境界>..HEAD -- src/ bin/ package.json git log --oneline <Skill境界>..HEAD -- skills/ .claude-plugin/調べた両方の変更一覧を提示した上で、どれをbumpするかユーザーに質問する。選択肢には各対象の現在のバージョンと未リリース変更の件数を含め、変更が0件の対象はそれと分かるようにする。
- CLI — npmパッケージ
- Agent Skill — Claude plugin
- 両方 — CLIフローを完了させてからSkillフローに進む。Skillフローを先にやるとworking treeが汚れ、
npm versionが失敗する
変更が0件の対象が選ばれた場合は、bumpに進まず「対象変更なし。空リリースを作るか」をユーザーに確認する。
CLIフロー
Step 0で提示したCLIの変更一覧を根拠に、ユーザーへ
major/minor/patchのどれにするか質問する。npm run lintを通す。壊れた状態のコードにタグを打たない。失敗したら止めて報告する。これから作るtag
vX.Y.Zが既に存在しないか確認する。存在したら止める(リリース途中/番号衝突の可能性)。git rev-parse -q --verify refs/tags/vX.Y.Zbumpを実行する。
<type>はStep 1でユーザーが選んだもの。npm version <type>これで
package.jsonとpackage-lock.jsonのversionが更新され、commitX.Y.Zと annotated tagvX.Y.Zが作られる(npmが自動で行う)。
Skillフロー
Step 0で提示したSkillの変更一覧を根拠に、ユーザーへ
major/minor/patchのどれにするか質問する。.claude-plugin/marketplace.jsonのplugins[]からnameがcosense-cliのエントリを1件特定し、そのversionを読む(該当が0件または複数件なら止める)。値がX.Y.Z形式でなければ止める。選んだ種別で次の番号を算出する。- major:
X.Y.Z→(X+1).0.0 - minor:
X.Y.Z→X.(Y+1).0 - patch:
X.Y.Z→X.Y.(Z+1)
- major:
そのエントリの
versionを新しい番号に書き換える。manifestを検証する。失敗したら止めて報告する。
claude plugin validate . --strictこれから作るtag
skill-vX.Y.Zが既に存在しないか確認する。存在したら止める。git rev-parse -q --verify refs/tags/skill-vX.Y.Zcommitと annotated tag を作る。CLIのtag(
npm versionが作るannotated tag)と形式を揃えるため-aを付ける。git add .claude-plugin/marketplace.json git commit -m "skill vX.Y.Z" git tag -a skill-vX.Y.Z -m "skill vX.Y.Z"