操作と止まる層
左の操作を1つ選んでください。
書く前に止まる
Claudeがファイルを書く直前に、guard_pathsが.claude/protected-pathsの一覧と照らします。db/schema.sqlは一覧にあるので、書く前に止まり、ファイルは変わりません。
BLOCKED by guard_paths: db/schema.sql is protected確認なしで止まる
強制pushは禁止(deny)の一覧にあり、確認のダイアログも出さずに拒否されます。block-destructiveのフックも、同じコマンドを止めます。
[block-destructive] force-push: force pushes. Published history is rewritten and nobody can recover it from their clone.人に聞く
ふつうのpushは確認(ask)の一覧にあり、ダイアログにコマンドが出ます。ブランチ名を見て、人が許可するか拒否するかを決めます。
Push the branch to origin の run を許可しますか書いた直後に知らせる
書いた後のフックcheck-phpverが、PHP 7.4で動かない書き方を見つけてClaudeに返します。Claudeが直さなくても、GitLabのlint-phpverが赤にして止めます。
[check-phpver] code that PHP 7.4 cannot run:コミットの前に止まる
pre-commitがCLAUDE.mdの行数を数え、80行を超えているのでコミットを止めました。
NG CLAUDE.md: 85 lines (max 80) The commit was stopped.GitLabで止まる
手元の検査は--no-verifyで素通りしますが、GitLabのcheck-rulesが同じ約束を見て赤にします。赤のMRには、マージのボタンが出ません。
Merge blocked: 1 check failed Pipeline must succeed.保護されたmainが拒否する
mainに直接pushできる人は、誰もいない設定です。講師もMaintainerも、変更はMRで入れます。
remote: GitLab: You are not allowed to push code to protected branches on this project.実装の直前に止まる
順番が来たジョブは、Claudeを呼ぶ前にIssueを読み直します。承認のラベルが無いので、実装しません。
承認のラベル ai::approved が外れていたので、実装しませんでした。実装せずに質問を返す
Claudeは決められないことを自分で決めず、質問を書いて終えます。スクリプトがai::stoppedを付け、質問をコメントに書きます。
受け入れ条件が決まっていないため、実装しませんでした。Claude が挙げた点は次のとおりです。確認なしで拒否される
夜のClaudeには、pushの権限を渡していません。許可の外の操作は確認を出さずに拒否され、ログに記録が残ります。pushは、ジョブのスクリプトだけが行います。
DENIED: Bash {"command":"git push origin HEAD"}MRを出す前に止まる
ci/は手元のフックの一覧には無いので、書くことはできます。ただし実装ジョブが、MRを出す前にci/の変更を見つけて止めます。
触らない場所に変更があったので、MR を出しませんでした。ai_scopeが止める
REVIEW.mdは実装ジョブの一覧に無いので、MRまで出ます。MRのパイプラインでai_scopeがmainの側の一覧と照らし、赤にします。
NG REVIEW.md AI を止める仕組みか約束の文書です(ci/ai_scope.paths)注意を付けて人に渡す
ai_scopeは止めずに、注意で知らせます。表示だけの変更のように、テストが無くてもよい場合があるからです。マージするかは、注意の行を読んだ人が決めます。
注意 app/ を変えたのに tests/ を変えていません。テストで確かめていない変更です判断は人に残す
ai_gateはP0とP1の指摘で赤になりますが、研修の時点では失敗を許す設定です。黄色の注意で終わり、マージを止めるかは人が決めます。本当に止めるようにするのが、レベル3の課題です。
判定は ai_gate ジョブが行います層ごとの役割
| 層 | 止めるもの | 飛ばせるか |
|---|---|---|
| 1権限の設定 | 強制push、git reset --hard、.envの読み出し。夜はpushとcurlも | 手元は設定を書き換えれば外せる。夜のジョブは外せない |
| 2書く前のフック | 触らない場所への書き込み、壊すコマンド | 手元は外せる。本体を消すと素通りするので、プチ演習8でラッパー(run_hook)に替え、止まる形を確かめる |
| 3書いた後のフック | PHP 7.4で動かない書き方 | 手元は外せる。GitLabのlint-phpverが拾う |
| 4コミットの前 | CLAUDE.mdの行数の超過 | --no-verifyで飛ばせる。GitLabのcheck-rulesが拾う |
| 5実装ジョブの確かめ | 承認の無いIssue、決まっていないことの残るIssue、触らない場所の変更 | 受講者からは外せない |
| 6 MRのパイプライン | 構文、テスト、AIの止め金の書き換え | 受講者からは外せない |
| 7 mainの保護 | 直接のpush、赤のMRのマージ | 外せるのは管理者の設定だけ |
| 8人の判断 | 受け入れ条件と合わない変更 | ここは人にしか置けない |
上の層ほど速く止まり、下の層ほど外しにくい作りです。手元のフックは飛ばせる速報で、飛ばされても6と7で止まります。
