diff --git a/.claude/agents/ops-runner.md b/.claude/agents/ops-runner.md index 0810b52..2d66bf8 100644 --- a/.claude/agents/ops-runner.md +++ b/.claude/agents/ops-runner.md @@ -35,7 +35,8 @@ 1. **手順書が唯一の根拠**: 最初に,指示で指定された手順書(reference.md 等)と規約ファイルを読む.手順書に書かれていない操作はしない 2. **判断しない**: 手順書が「ユーザーに確認」としている分岐や,想定外の状態(コンフリクト・権限エラー・対象が見つからない等)に遭遇したら,作業を安全な状態にして停止し,「確認事項」として状況・選択肢・推奨を報告する.自分で判断して先に進まない.停止する前に,確認不要で完了できる残りの作業は済ませ,他にも確認が要りそうな点があればまとめて洗い出す(上位との往復を減らす) 3. **破壊的操作の禁止**: force push・`git reset --hard`・`main` への直接コミット・ファイル削除は,手順書に明記されている場合を除き行わない.`.env` やクレデンシャルファイルはステージングしない -4. **正確な報告**: 成功・失敗を装飾なく報告する.失敗したコマンドは出力の要点を添える +4. **分類器ブロックはそのまま報告**: auto mode のセキュリティ分類器によりコマンドが**実行される前に**ブロックされた場合は,リポジトリ設定や権限の問題と混同せず,「分類器ブロック」として表示された文言をそのまま報告して停止する.別のコマンドや手順で迂回しない +5. **正確な報告**: 成功・失敗を装飾なく報告する.失敗したコマンドは出力の要点を添える ## 報告書式 (Report Format) diff --git a/.claude/settings.json b/.claude/settings.json index 3b0ffd7..b06d6ff 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,4 +1,9 @@ { + "permissions": { + "allow": [ + "Bash(gh pr merge:*)" + ] + }, "hooks": { "PreToolUse": [ { diff --git a/.claude/skills/commit/reference.md b/.claude/skills/commit/reference.md index 0e650ab..fc7d289 100644 --- a/.claude/skills/commit/reference.md +++ b/.claude/skills/commit/reference.md @@ -143,6 +143,15 @@ git push --force-with-lease origin feature/new-function ``` +### gh コマンドが実行される前にブロックされた場合 + +`gh pr merge` 等が実行される前に遮断され,`gh` の出力が返ってこない場合は,auto mode のセキュリティ分類器によるブロックである.リポジトリ側の制約(ブランチ保護・必須レビュー・権限不足)とは原因が異なるため,混同して報告しない. + +- **見分け方**: リポジトリ側の制約ならコマンドは実行され `gh` がエラーメッセージを返す.分類器ブロックではコマンド自体が実行されない. +- **対処**: `.claude/settings.json` の `permissions.allow` に `Bash(gh pr merge:*)` があるか確認する.無ければ**ユーザーが手で追加**し,セッションを再起動する(permissions の変更は再起動後に反映される.Claude 自身が `settings.json` の permissions を編集することは分類器にブロックされるため,自分では追加できない). + - auto mode では `Bash(gh *)` のような広い allow ルールは分類器に回されるため効かない.`Bash(gh pr merge:*)` のように**操作を特定した狭いルール**にする必要がある. +- **やってはいけないこと**: 別コマンドでの迂回(`main` への直接 push 等)や,設定を緩めての強行.ブロックされた事実と対処法をそのままユーザーに伝えて停止する. + ### 間違えて main にコミットしてしまった場合 **まだプッシュしていない場合** diff --git a/.claude/skills/deps-update/SKILL.md b/.claude/skills/deps-update/SKILL.md index 53bb2c8..86e9610 100644 --- a/.claude/skills/deps-update/SKILL.md +++ b/.claude/skills/deps-update/SKILL.md @@ -99,4 +99,5 @@ - 作業ツリーがクリーンでない/`gh` 未認証/リモートが GitHub でない → フェーズ 1 の停止報告を受けて,開始せずに報告 - ローカル検証中にコンフリクト・環境エラーで検証が成立しない → その PR は Tier C として分析行きに回し,他の PR の処理は続ける -- `gh pr merge` が失敗(ブランチ保護・権限不足) → その PR は報告に回し,失敗理由を伝える.team モードで「他メンバー Approve 必須」のブランチ保護が効いている場合は,本スキルはマージ可と判定した PR の一覧を提示するにとどめる +- `gh pr merge` が**リポジトリ側の制約**で失敗(ブランチ保護・必須レビュー・必須チェック未完了・権限不足) → その PR は報告に回し,失敗理由を伝える.team モードで「他メンバー Approve 必須」のブランチ保護が効いている場合は,本スキルはマージ可と判定した PR の一覧を提示するにとどめる +- `gh pr merge` が **auto mode の分類器にブロック**された(コマンドが実行される前に遮断され,`gh` の出力が返らない) → **環境側の制約であって,リポジトリ設定の問題ではない**(ブランチ保護と混同して報告しない).`.claude/settings.json` の `permissions.allow` に `Bash(gh pr merge:*)` があるか確認し,無ければ「ユーザーが手で追加してセッションを再起動する必要がある」と報告する(Claude 自身は permissions を編集できず,設定変更はセッション再起動後に反映される).該当 PR は「マージ可と判定したが未実行」として報告し,`main` への直接 push 等でマージを迂回しない diff --git a/.claude/skills/deps-update/reference.md b/.claude/skills/deps-update/reference.md index 588dd2d..715cc48 100644 --- a/.claude/skills/deps-update/reference.md +++ b/.claude/skills/deps-update/reference.md @@ -163,7 +163,13 @@ git checkout main && git pull origin main # ローカル main を追従(開始時のブランチが main でない場合は戻す) ``` -- ブランチ保護(必須レビュー)で拒否された場合は,その PR を「マージ可と判定したが権限不足」として報告する +マージできなかった場合は,次の 2 つの失敗モードを区別して報告する(どちらの場合もマージを迂回しない). + +| 失敗モード | 兆候 | 対処・報告内容 | +| --- | --- | --- | +| リポジトリ側の制約 | `gh` が実行され,ブランチ保護・必須レビュー・必須チェック未完了・権限不足でエラーを返す | その PR を「マージ可と判定したが権限・保護設定で拒否された」として報告し,人間の対応(Approve・設定変更)を促す | +| auto mode 分類器によるブロック | コマンドが**実行される前に**遮断され,`gh` の出力が返らない | `.claude/settings.json` の `permissions.allow` に `Bash(gh pr merge:*)` があるか確認する.無ければユーザーが手で追加してセッションを再起動する必要がある旨を報告する(Claude 自身は permissions を編集できず,設定変更はセッション再起動後に反映される).その PR は「マージ可と判定したが未実行」として報告する | + - `--delete-branch` が「既に削除済み」で失敗しても無視してよい(Dependabot 側の設定でブランチが自動削除されることがある) ## Dependabot へのコメント指示 (Dependabot Commands) diff --git a/.claude/skills/set-mode/SKILL.md b/.claude/skills/set-mode/SKILL.md index 51ca579..484e430 100644 --- a/.claude/skills/set-mode/SKILL.md +++ b/.claude/skills/set-mode/SKILL.md @@ -81,7 +81,9 @@ ] ``` -Edit 後に `git diff .claude/settings.json` で結果を確認する. +`hooks` 以外のキー(`permissions` 等)は**追加も削除もせずそのまま保持する**.特に `permissions.allow` の `Bash(gh pr merge:*)` は auto mode で ops-runner にマージを実行させるために必要なため,モード切替で落とさない. + +Edit 後に `git diff .claude/settings.json` で結果を確認する(`SessionStart` の追加以外の差分が出ていないことを確認する). ### 3-A.3 CLAUDE.md を team 化 @@ -115,7 +117,7 @@ ### 3-B.2 settings.json から SessionStart(check_sync) を除去 -`.claude/settings.json` を Read し,`check_sync.sh` を呼ぶ `SessionStart` フックのみを除去する.`PreToolUse`(`restrict_repo_access.py`)は保持する.他に個別追加された `SessionStart` フックがあれば残す(`check_sync.sh` の配線だけを外す).Edit 後に `git diff .claude/settings.json` で確認する. +`.claude/settings.json` を Read し,`check_sync.sh` を呼ぶ `SessionStart` フックのみを除去する.`PreToolUse`(`restrict_repo_access.py`)は保持する.他に個別追加された `SessionStart` フックがあれば残す(`check_sync.sh` の配線だけを外す).`hooks` 以外のキー(`permissions` 等)は**そのまま保持する**(`permissions.allow` の `Bash(gh pr merge:*)` は auto mode でマージを実行するために必要).Edit 後に `git diff .claude/settings.json` で確認する(`SessionStart` の除去以外の差分が出ていないことを確認する). ### 3-B.3 CLAUDE.md を solo 化 diff --git a/.claude/skills/sync-template/SKILL.md b/.claude/skills/sync-template/SKILL.md index c4af4ca..55d1311 100644 --- a/.claude/skills/sync-template/SKILL.md +++ b/.claude/skills/sync-template/SKILL.md @@ -23,7 +23,7 @@ | `CLAUDE.md` | プロジェクト名・開発進捗・固有規約を保持する必要がある | テンプレートで変更された共通セクション(必須ルール,エージェントチーム,ドキュメント構成等)のみを Edit で更新.プロジェクト固有セクションは触らない | | `docs/PROGRESS.md` | プロジェクト固有の進捗ログを保持する必要がある | 既存ファイルがある場合は内容を上書きしない.テンプレート側の骨組み(タイトル・案内コメント)に差分があれば通知のみ行い手動マージを促す | | `.gitattributes` | プロジェクトによって設定が異なる可能性がある | 差分を表示し,ユーザーに「上書き / マージ / スキップ」を問う | -| `.claude/settings.json` | team モードで SessionStart(check_sync) 配線を追加している等,プロジェクト固有の hook 設定を保持する必要がある | 既存の hooks を保持しつつ,テンプレート側で追加・変更された hook のみ統合.差分を表示しユーザーに確認 | +| `.claude/settings.json` | team モードで SessionStart(check_sync) 配線を追加している等,プロジェクト固有の hook 設定・permissions を保持する必要がある | 既存の hooks・`permissions` を保持しつつ,テンプレート側で追加・変更された hook・allow ルールのみ統合.差分を表示しユーザーに確認 | | `.claude/template-overrides.md` | プロジェクト固有の「テンプレート改変台帳」.登録内容はプロジェクト固有 | 既存ファイルがある場合は内容を上書きしない.テンプレート側の骨組み(説明文・記入例)に差分があれば通知のみ行い手動マージを促す(`docs/PROGRESS.md` と同じ扱い) | マージ処理の対象は **既存ファイルが存在する場合のみ**.初回同期(`.claude/template-sync-sha` がない状態)では全ファイルが A 扱いとなるが,これらのファイルはフレームワーク初期化(`flutter create` / `npm init` 等)や `/init` で既にプロジェクトに存在するのが通常なので,そのままマージ処理に入る.既存ファイルがない稀なケースに限り通常の `cp` で配置する. @@ -152,7 +152,7 @@ - `CLAUDE.md`(既存にプロジェクト固有セクションが {L} 行.テンプレート更新セクションのみマージ) - `docs/PROGRESS.md`(プロジェクト固有の進捗ログ.既存があれば内容を保持し,差分があれば通知のみ) - `.gitattributes`(差分 {D} 行.処理方針をユーザーに確認) -- `.claude/settings.json`(既存の hooks を保持し,テンプレート側で追加・変更された hook のみ統合) +- `.claude/settings.json`(既存の hooks・`permissions` を保持し,テンプレート側で追加・変更された hook・`permissions.allow` のルールのみ統合.permissions を更新した場合はセッション再起動が必要な旨を伝える) - `.claude/template-overrides.md`(台帳の行を保持し,骨組みの差分があれば通知のみ) **📒 台帳登録済みのプロジェクト固有改変ファイルに変更があります(方針に従って処理します):** diff --git a/.claude/skills/sync-template/reference.md b/.claude/skills/sync-template/reference.md index f8c4e65..355b38c 100644 --- a/.claude/skills/sync-template/reference.md +++ b/.claude/skills/sync-template/reference.md @@ -336,7 +336,8 @@ - プロジェクト固有の hook(team の SessionStart `check_sync.sh` 等)は残す - 同一 hook の command 変更(例: `restrict_repo_access.py` の起動方法変更)はテンプレート版に合わせる - solo モードで SessionStart(check_sync) が無い場合は,team 専用の配線を勝手に追加しない -4. `git diff .claude/settings.json` で結果を表示しユーザーに確認する +4. `hooks` 以外のキーも同じ方針でマージする.特に `permissions.allow` は,テンプレート側に追加されたルール(`Bash(gh pr merge:*)` 等.auto mode で ops-runner にマージを実行させるために必要)を既存へ追加し,プロジェクトが独自に足したルールは残す(削除しない) +5. `git diff .claude/settings.json` で結果を表示しユーザーに確認する.**permissions の変更はセッション再起動後に反映される**ため,追加があった場合は再起動が必要な旨をユーザーに伝える ### `.claude/template-overrides.md` diff --git "a/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" "b/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" index 5605c3b..04fb9fc 100644 --- "a/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" +++ "b/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" @@ -58,6 +58,7 @@ - **AI に依頼できること**: 環境構築手順書の作成,設定ファイルの生成,`.gitignore` の作成,Dockerfile や devcontainer.json 等の構築用ファイルの作成,GitHub リポジトリのセキュリティ設定・`.github/dependabot.yml` の生成(後述) - **GitHub リポジトリのセキュリティ設定**: GitHub の Settings → Code security にある **Dependabot alerts**(既知脆弱性の検出."Vulnerabilities" として表示される)と **Dependabot security updates** はリポジトリごとに既定で OFF のため,リポジトリを作成したら必ず有効化する.モードに関わらず `/setup` が `gh api` で有効化・検証する(コマンド・検証・トラブル対応は `.claude/skills/setup/reference.md`「GitHub リポジトリのセキュリティ設定」).`/setup` 時点でリポジトリが無い場合は,`ENV_03_管理者用環境構築手順.md` に転記した同じコマンドをリポジトリ作成後に実行する. - **依存バージョン更新(Dependabot version updates)**: 上記とは別に,依存パッケージを定期的に最新化する PR を作らせるため,`/setup` が技術スタックに合わせて `.github/dependabot.yml` を必ず生成する(週 1 回・マイナー/パッチをまとめる・`[update]` プレフィックス.エコシステム対応表と雛形は `.claude/skills/setup/reference.md`「依存バージョン更新の設定」).Dependabot が作る PR と alert の処理は `/deps-update` で行う(ゲートを満たす PR を自動マージし,メジャー更新等は分析付きで報告.GUIDE_02「コミットルール」の例外). +- **Claude Code の権限設定(`.claude/settings.json`)**: auto mode では,`permissions.allow` の広いルール(`Bash(gh *)` 等)は無効化されてセキュリティ分類器に回されるが,操作を特定した狭いルールは分類器より先に解決される.そのため ops-runner(サブエージェント)に `/commit merge`・`/deps-update` のマージを実行させるには `permissions.allow` に `Bash(gh pr merge:*)` が必要である(テンプレート同梱の `settings.json` に含まれる).**permissions の変更はセッション再起動後に反映される**.また Claude 自身が permissions を編集することは分類器にブロックされるため,追加・変更は人間が手で行う(参考: [auto mode の設定](https://code.claude.com/docs/en/auto-mode-config.md)). - **成果物**: - `ENV_02_環境構築手順.md` — メンバーの参加時や環境の再構築時に使う手順 - `ENV_03_管理者用環境構築手順.md` — プロジェクト作成時に一度だけ行う初期設定(リポジトリ作成,GitHub リポジトリのセキュリティ設定,外部サービスの設定等)