.claude/skills/launch-final/SKILL.md
dev-beta の安定版を final/ へプロモートするローンチスキル。 beta → final のコード同期、ビルド検証、差分レビュー、コミット、VM配布検証、 人間の確認を経て main マージまでを一貫して扱う。 以下の場面でトリガーする: - 「/launch-final」「finalに反映」「finalへローンチ」「final更新」「betaをfinalに」と言われたとき - devM3E の Wrap-up フェーズで final 反映が議題になったとき - 「finalとbetaの差分」「final同期」「migrate」と言われたとき - scripts/final/ のスクリプトについて聞かれたとき final/ への変更は必ずこのスキル経由で行う。直接編集は禁止。
npx skillsauth add akaghef/M3E launch-finalInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
beta/ で検証済みのコードを final/ へ同期し、本番品質で固定するフロー。
差分プレビュー → コピー + ビルド → 既存テスト(tsc, vitest)
→ コミット(dev-beta) → push(dev-beta)
→ main マージ(ローカル)
→ vm_test.bat ──────────┐
→ 手動確認(ブラウザ等) ──┤ 並行
↓
→ ✋「両方OK?origin/main に push する?」
→ origin/main push → タグ付与 + push
FINAL_POLICY.md 等)は同期対象外として保護する現在の状態を確認する。
git branch --show-current # dev-beta であること
git status # clean であること
git log --oneline -5 -- final/ # final/ の最終更新を確認
dev-beta 以外のブランチにいる場合は checkout する。 uncommitted changes がある場合はユーザーに確認する。
beta/ と final/ の差分を把握する。何が変わるか先にユーザーに見せる。
# ソースの差分サマリー(除外対象を除く)
diff -rq beta/ final/ \
--exclude node_modules --exclude dist \
--exclude .env --exclude Beta_Policy.md --exclude FINAL_POLICY.md \
--exclude prompts --exclude tmp --exclude public \
--exclude e2e_test_server.js --exclude playwright.e2e.config.js \
--exclude backups --exclude audit --exclude conflict-backups \
--exclude .m3e-launched --exclude M3E_dataV1.sqlite \
| head -40
差分がない場合は「final/ は最新です」と報告して終了。
差分がある場合、変更サマリーをユーザーに提示する:
## Final ローンチ差分
変更ファイル: {n}件
主な変更:
- {概要1}
- {概要2}
...
beta/ を丸ごと final/ にコピーし、除外リストに該当するものだけスキップする。
| 対象 | 理由 |
|------|------|
| node_modules/ | 再インストールする |
| dist/ | 再ビルドする |
| .env | 開発用シークレット |
| Beta_Policy.md | beta 固有ドキュメント |
| prompts/ | 開発用プロンプト |
| tmp/ | 一時ファイル |
| public/ | 開発用アセット |
| e2e_test_server.js | E2Eテスト専用 |
| playwright.e2e.config.js | 同上 |
| data/M3E_dataV1.sqlite | 作業DB(final 側は初期化済み) |
| data/backups/ | ランタイム生成物 |
| data/audit/ | 同上 |
| data/conflict-backups/ | 同上 |
| data/.m3e-launched | 初回起動フラグ |
rsync -a --delete \
--exclude node_modules \
--exclude dist \
--exclude .env \
--exclude Beta_Policy.md \
--exclude prompts \
--exclude tmp \
--exclude public \
--exclude e2e_test_server.js \
--exclude playwright.e2e.config.js \
--exclude 'data/M3E_dataV1.sqlite' \
--exclude 'data/backups' \
--exclude 'data/audit' \
--exclude 'data/conflict-backups' \
--exclude 'data/.m3e-launched' \
beta/ final/
# final/ 固有ファイルを保護(rsync --delete で消えた場合は復元)
git checkout -- final/FINAL_POLICY.md 2>/dev/null || true
robocopy beta\ final\ /MIR /NFL /NDL /NJH /NJS ^
/XD node_modules dist prompts tmp public backups audit conflict-backups ^
/XF .env Beta_Policy.md e2e_test_server.js playwright.e2e.config.js ^
M3E_dataV1.sqlite .m3e-launched
REM robocopy returns 0-7 for success
if %errorlevel% GTR 7 goto :error
REM Restore final-only files
git checkout -- final\FINAL_POLICY.md 2>nul
以下は final/ にのみ存在し、同期で消えてはいけない:
final/FINAL_POLICY.mdfinal/README.md(final 独自の内容がある場合)rsync --delete / robocopy /MIR で消える可能性があるので、同期後に git checkout で復元する。
cd final
npm ci
npm run build
ビルド失敗時は同期内容を確認し、beta/ 側の問題か同期漏れかを切り分ける。
cd final
npx tsc --noEmit
npx vitest run
テスト失敗時は修正してから先へ進む。
git add final/
git commit -m "chore(final): sync from beta ({変更の要約})"
git push origin dev-beta
コミットメッセージは chore(final): sync from beta を prefix とし、
主な変更内容を括弧内に簡潔に記載する。
git checkout main
git merge dev-beta -m "merge: dev-beta → main (beta promotion to final)"
git checkout dev-beta
マージ方針: 通常マージ(fast-forward ではなくマージコミットを残す)。 コンフリクトが発生した場合はユーザーに報告して判断を仰ぐ。
この時点ではまだ push しない。
VM テストと手動確認を並行で実施する。
scripts\ops\vm_test.bat
VirtualBox の clean snapshot から配布パッケージを検証する。
結果は C:\M3E_test_reports\ に出力される。
VM テスト実行中に、ローカルでブラウザ確認等を行う。
ここが唯一の人間確認ポイント。
VM テストの結果と手動確認の結果をユーザーに報告する:
## リリースゲート
VM テスト: {PASS / FAIL}
結果: C:\M3E_test_reports\test_*\report.txt
手動確認: ユーザー判断
origin/main に push してよいですか?
ユーザーが承認 → Step 10 へ
ユーザーが却下 → main マージを git reset で巻き戻し、修正してやり直し
git checkout main
git push origin main
# vYYMMDD タグを付与
TAG="v$(date +%y%m%d)"
if git tag -l "$TAG" | grep -q .; then
N=2
while git tag -l "${TAG}-${N}" | grep -q .; do
N=$((N + 1))
done
TAG="${TAG}-${N}"
fi
git tag "$TAG"
git push origin "$TAG"
git checkout dev-beta
タグ付与後、dev-docs/00_Home/Version_Registry.md を更新する。
| タグ | data schema | 主な変更 |
|------|-------------|---------|
| {TAG} | v{N} | {変更サマリー} |
data schema version は beta/src/shared/types.ts の SavedDoc.version で確認する。
# Inno Setup でインストーラーを生成
$ISCC = "$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe"
& $ISCC install\windows\m3e.iss
成果物: install\artifacts\M3E-Setup-{version}.exe
install/description.md(固定テンプレート)と自動生成の変更ログを結合する。
# 前回タグからの変更ログを自動生成
PREV_TAG=$(git tag --sort=-creatordate | head -2 | tail -1)
CHANGELOG=$(git log --oneline ${PREV_TAG}..${TAG} -- final/)
リリースノートのドラフトをユーザーに提示して確認を取る:
## Release {TAG}
{install/description.md の内容}
---
## 変更点
{自動生成の変更ログ}
gh release create "$TAG" \
"install/artifacts/M3E-Setup-${TAG}.exe" \
--title "M3E $TAG" \
--notes-file <(cat install/description.md && echo -e "\n---\n\n## 変更点\n" && git log --oneline ${PREV_TAG}..${TAG} -- final/)
スキーマ変更なし(通常):
Final 更新完了。データ移行は不要です。
起動: scripts/final/launch.bat
スキーマ変更あり:
Final 更新完了。スキーマ変更があります。
初回起動前に migration を実行してください:
scripts/final/update-and-launch.bat
beta/ に新しい開発専用ファイル/ディレクトリが追加された場合:
scripts/final/migrate-from-beta.sh の rsync 除外に追加scripts/final/migrate-from-beta.bat の robocopy 除外に追加3つの場所を同期させることを忘れないこと。
| やりたいこと | コマンド / Step |
|-------------|----------------|
| 差分だけ見たい | Step 2 のみ |
| フル同期 + リリース | Step 1-12 を順に |
| ビルド確認だけ | Step 3-4 |
| VM テストだけ | scripts\ops\vm_test.bat |
| main マージ + タグのみ | Step 7, 10 |
| ユーザーが手動で同期 | scripts/final/migrate-from-beta.bat |
| 起動のみ | scripts/final/launch.bat |
devM3E Core Loop における位置づけ:
tools
会話中のアイデア・判断・思いつきをbacklog/にmdファイルとして即座に書き出す。 フォーマットチェック不要、速度優先。エージェント間の非同期コミュニケーションプールとして機能する。 以下の場面でトリガーする: - 「tomd」「backlogに書いて」「mdに残して」「書き下して」と言われたとき - 会話中に設計判断やアイデアが出て「残しておいて」「プールして」と言われたとき - 「backlogに突っ込んで」「メモっといて(backlog)」と言われたとき
development
M3Eプロジェクトでエージェントが作業開始時にロールを確定するスキル。 ワークツリーで起動した各エージェントは、最初にこのスキルを実行して 担当ロール・ブランチ・作業範囲・割り当てタスクを確認する。 以下の場面でトリガーする: - 「/setrole」「setrole」「ロール設定」と言われたとき - エージェントがワークツリーで起動された直後 - 「自分の担当は?」「何をすればいい?」と聞かれたとき - ブランチや作業範囲の確認が必要なとき devM3E の Execute フェーズでサブエージェントを起動する際に自動実行される。
development
M3E開発でPR(Pull Request)のレビュー・マージ・事後処理を行うスキル。 pr-beta(PR作成)の対になるスキルで、マネージャー側のワークフローを担う。 以下の場面でトリガーする: - 「/pr-review」「PRレビューして」「PR見て」「マージして」と言われたとき - PR URLやPR番号が提示されたとき - devM3E の Integrate フェーズでマージ判断が必要なとき - 「PRどうなってる」「PR状況」と聞かれたとき dev-beta ブランチ(統合ロール)で使うことを想定。部下ブランチから呼ばれた場合でも動作するが、マージ権限は統合ロールのみ。
development
M3E開発で作業ブランチから dev-beta へのPR(Pull Request)を作成するスキル。 subworker(codex1/codex2/feature branch)が作業完了後に統合マネージャーへ マージ依頼を出すワークフローを自動化する。 以下の場面でトリガーする: - 「/pr-beta」「PRを作って」「dev-betaにマージ」「統合して」と言われたとき - 作業ブランチでの実装が完了し、統合フローに進むとき - devM3E の Integrate フェーズでPR作成が必要なとき dev-beta 以外のブランチにいるときに使う。dev-beta 上で呼ばれた場合はエラーにする。