Skip to content

ガードカタログ — 強制リファレンス

これは claude-forge のすべての強制メカニズムの権威あるリファレンスです。各エントリは何が強制されているか、どのレイヤーが強制しているか、それが決定的かどうかを文書化しています。

強制レイヤー

claude-forge は4つの強制レイヤーを使用しており、最も信頼性の高いものから低いものの順に並んでいます:

レイヤーメカニズム決定性失敗モード
Go MCP ハンドラーtools/guards.go のガード関数が tools/handlers.go のハンドラーから呼び出される。error(ブロッキング)または string(警告)を返す。決定的IsError=true MCP レスポンス;状態は変更されない
Go エンジンorchestrator/engine.go の決定ロジック。フェーズ遷移、auto-approve、リトライ制限、スキップゲートを制御する。決定的特定のアクションタイプを返す;オーケストレーターが従わなければならない
シェルフックscripts/ の Bash スクリプト。Claude Code フックシステム経由でツール呼び出し時に発火する。exit 2 = ブロック。決定的(jq がない場合はフェイルオープン)exit 2 はツール呼び出しをブロック;exit 0 は許可
プロンプト指示SKILL.md またはエージェントの .md ファイル内のテキスト。LLM が非決定的に従う。非決定的LLM がスキップまたは誤解する可能性がある

設計原則: すべての重要な不変条件(データ整合性、人間の承認ゲート、安全性制約)はコード(レイヤー 1–3)によって強制されます。プロンプト指示(レイヤー 4)は、コードによる強制が実用的でないオーケストレーションプロトコルへの準拠のためにのみ使用されます。

ブロッキングガード(状態変更を防止)

これらのガードはエラーを返し、進行を停止させます。条件が満たされるまでパイプラインは進めません。

ID不変条件レイヤーコードの場所トリガー
3aフェーズ完了前にアーティファクトファイルが存在しなければならないMCP ハンドラーguards.go:Guard3aArtifactExists必須アーティファクトがあるフェーズの phase_complete
3bタスクレビューを合格としてマークする前にレビューファイルが存在しなければならないMCP ハンドラーguards.go:Guard3bReviewFileExistsreviewStatus=completed_pass での task_update
3cphase-5 開始前にタスクが初期化されていなければならないMCP ハンドラーguards.go:Guard3cTasksNonEmptyphase-5phase_start
3eチェックポイント完了前に awaiting_human ステータスが必要MCP ハンドラーguards.go:Guard3eCheckpointAwaitingHumancheckpoint-acheckpoint-bphase_complete
3gタスク初期化前にチェックポイント B が完了/スキップされていなければならないMCP ハンドラーguards.go:Guard3gCheckpointBDoneOrSkippedtask_init
3jチェックポイント完了前に保留中のリビジョンがクリアされていなければならないMCP ハンドラーguards.go:Guard3jCheckpointRevisionPendingcheckpoint-acheckpoint-bphase_complete
init は事前の入力バリデーションが必要MCP ハンドラーguards.go:GuardInitValidatedvalidated=false での init
アーティファクトのコンテンツがバリデーションに合格しなければならないMCP ハンドラーpipeline_report_result.goレビューフェーズの pipeline_report_result
R1phase-1/2 中のソース編集ブロック(読み取り専用)シェルフックpre-tool-hook.sh ルール 1ワークスペース外のファイルを対象とする Edit/Write ツール
R2並列 phase-5 実行中の Git コミットブロックシェルフックpre-tool-hook.sh ルール 2並列タスクがアクティブな間の git commit を含む Bash ツール
R5アクティブなパイプライン中の main/master への Git checkout/switch ブロックシェルフックpre-tool-hook.sh ルール 5git checkout main または git switch master を含む Bash ツール
アクティブなパイプライン中の停止シグナルブロックシェルフックstop-hook.shステータスが completedabandonedawaiting_human でない場合の Claude Code 停止

非ブロッキング警告(警告するが許可する)

これらのチェックは会話に警告を挿入しますが、アクションを防止しません。

IDチェックレイヤーコードの場所トリガー
3dフェーズログエントリの重複MCP ハンドラーguards.go:Warn3dPhaseLogDuplicatephase_log
3fフェーズ完了時のフェーズログエントリの欠落MCP ハンドラーguards.go:Warn3fPhaseLogMissingログを必要とするフェーズの phase_complete
3h状態にタスク番号が見つからないMCP ハンドラーguards.go:Warn3hTaskNotFoundtask_update
3i完了時のフェーズステータスが in_progress でないMCP ハンドラーguards.go:Warn3iPhaseNotInProgressphase_complete
エージェント出力が短すぎる(50文字未満)シェルフックpost-agent-hook.shアクティブなフェーズ中の Agent ツールの戻り値
レビューエージェント出力に判定キーワードが欠落シェルフックpost-agent-hook.shphase-3bphase-4b 中の Agent ツールの戻り値
実装レビュー出力に PASS/FAIL キーワードが欠落シェルフックpost-agent-hook.shphase-6 中の Agent ツールの戻り値

エンジン決定(決定的な分岐)

オーケストレーターエンジン(orchestrator/engine.go)は状態に基づいてすべてのフェーズ遷移の決定を決定的に行います。LLM オーケストレーターは実行するアクションを受け取り、次に何をするかを自ら選択しません。

ID決定条件動作コードの場所
D14フェーズスキップフェーズが skippedPhases にあるskip: プレフィックスの done アクションを返す;オーケストレーターが phase_complete を呼び出すengine.go NextAction の先頭
D20Auto-approve(チェックポイントバイパス)autoApprove == true かつ判定が APPROVE または APPROVE_WITH_NOTESチェックポイントをバイパスして次のフェーズエージェントを起動engine.go phase-3b/4b ハンドラー
D21リトライ制限(2×)designRevisions >= 2 または taskRevisions >= 2 または implRetries >= 2人間チェックポイント(承認または破棄)を強制engine.go phase-3b/4b/6 ハンドラー
D22並列タスクディスパッチ最初の保留タスクが executionMode == "parallel"連続するすべての並列タスクを同時に起動engine.go phase-5 ハンドラー
D23実装レビュー判定ルーティングreview-N.md から解析された判定FAIL → implementer を再起動;PASS → 次のタスクengine.go phase-6 ハンドラー
D24PR スキップskipPr == truedone アクションを返し、PR 作成をバイパスengine.go pr-creation ハンドラー
D26ソースへの投稿ディスパッチrequest.md フロントマターの source_typeGitHub → gh コマンド;Jira → チェックポイント;テキスト → doneengine.go post-to-source ハンドラー

アーティファクトバリデーション(決定的なコンテンツチェック)

validation/artifact.go パッケージは pipeline_report_result 呼び出し時にアーティファクトのコンテンツを検証します。バリデーション失敗はフェーズの進行をブロックします。

フェーズ必須アーティファクトコンテンツルール
phase-1analysis.md## 見出しを含まなければならない
phase-2investigation.md## 見出しを含まなければならない
phase-3design.md## 見出しを含まなければならない
phase-3breview-design.mdAPPROVEAPPROVE_WITH_NOTES、または REVISE を含まなければならない
phase-4tasks.md## Task 見出しを含まなければならない
phase-4breview-tasks.mdAPPROVEAPPROVE_WITH_NOTES、または REVISE を含まなければならない
phase-6review-N.mdPASSPASS_WITH_NOTES、または FAIL を含まなければならない
phase-7comprehensive-review.md空でなければならない
final-summarysummary.md存在しなければならない

所見マーカー([CRITICAL][MINOR])はカウントされ、履歴分析のためのパターン知識ベースに蓄積されます。これは非ブロッキングです。

自動化された副作用(決定的なアクション)

アクションレイヤーコードの場所トリガー
最終コミット:summary.md + state.json を最後のコミットに amend してから force-pushシェルフック(v1)/ エンジン exec アクション(v2)post-bash-hook.sh(v1 レガシー)/ engine.go final-commit アクション(v2)post-to-source フェーズ完了後;state.json がコミット時に "completed" 状態になるよう pipeline_report_result を先に呼び出す
リビジョンカウンターのインクリメントMCP ハンドラーpipeline_report_result.goレビューフェーズの REVISE 判定
パターン知識の蓄積MCP ハンドラーpipeline_report_result.go所見を伴う任意のレビューフェーズ完了

プロンプトのみの指示(非決定的)

これらの動作は LLM 指示のみによって強制されます。オーケストレーションレベルの決定を含み、状態ガードとして表現することが実用的でないため、コードによる保証はできません。

指示場所コードで強制しない理由
Agent 呼び出しに isolation: "worktree" を渡さないSKILL.mdClaude Code の Agent ツールパラメータ;Agent ツール引数のフックインターセプトポイントがない
spawn_agentexecwrite_file の後に常に pipeline_report_result を呼び出すSKILL.md省略は no-op(メトリクス欠落)であり、状態の破損ではない;タイムアウトガードを追加するとリスクに対して不釣り合いな複雑さが加わる
チェックポイントで Dashboard または terminal の応答を待つSKILL.mdpipeline_next_action がチェックポイントの状態遷移を吸収し、Dashboard 承認をロングポーリング(50 秒)する。LLM は still_waiting 時に pipeline_next_action を再呼び出しする必要がある;ロングポーリングにより反復回数を削減し非決定性を最小化
done アクションの skip: プレフィックスを解析して phase_complete を呼び出すSKILL.mdエンジンがスキップシグナルを返す;オーケストレーターが解析に失敗した場合、pipeline_next_action は同じスキップシグナルを再び返す(自己修正ループ)

デュアルレイヤー強制マップ

一部の不変条件は、シェルフックレイヤーと Go MCP ハンドラーレイヤーの両方で強制されます。これにより多層防御が提供されます:MCP ハンドラーは MCP ツール呼び出し時に最初に発火し、シェルフックは Bash/Edit/Write ツール呼び出し時に独立して発火します。

不変条件シェルフックMCP ハンドラー
フェーズ進行前にアーティファクトが存在しなければならないガード 3a(phase_complete)+ pipeline_report_result バリデーション
チェックポイントには人間の承認が必要ガード 3e(phase_complete には awaiting_human が必要)
Phase 1-2 読み取り専用ルール 1(pre-tool-hook.sh—(エージェントはファイル編集に MCP ツールを呼び出さない)
並列 git コミットなしルール 2(pre-tool-hook.sh—(git コミットは MCP ではなく Bash ツールを経由)
main/master への checkout なしルール 5(pre-tool-hook.sh—(ブランチ操作は Bash ツールを経由)
レビュー判定の抽出シェル警告(post-agent-hook.shアーティファクトコンテンツバリデーション(validation/artifact.go

フェイルオープン保証

すべてのシェルフックはフェイルオープンです:jq がインストールされていないか state.json が読み取れない場合、フックは exit 0(許可)します。これにより、プラグインが正当な非パイプライン作業をブロックしないことが保証されます。

bash
# すべてのフックはこのパターンで始まる:
command -v jq >/dev/null 2>&1 || exit 0

Released under the MIT License.