PlanGate

loop-safety-gates — flow 進入前の非停止プロンプト事前ゲート

対応 issue: #728(loop-safety gates) 適用ドメイン(Phase 1): ①plangate 本体 = docs/workflows/ai-loop/ 配下のみ(dogfooding 域・本番フロー WF-00〜07 非適用。 design-philosophy.md 冒頭)。②導入先リポジトリ = ho-paths 確定 + LoopSpec scope.allowed_paths 宣言を前提に適用可。 思想的根拠: design-philosophy.md I-6「停止できないループはループではない」 (+ サーキットブレーカーによる自律そのものの一時停止という 2 層停止機構)。 発火位置: flow-detect.md §2 flow フェーズへの進入前に置く事前ゲート。 flow-detect.md 本体(boundary / lite / class 判定)は変更しない。本書はその手前の 「ループを始めてよい指示か」を判定する層であり、flow-detect の判定対象を狭めも広げもしない。


1. 位置づけ — なぜ flow フェーズの「前」に置くか

flow-detect.md §2 の flow フェーズは「変更対象ファイルが低リスク帯か」を判定する。 これは変更内容に対する判定であり、指示(プロンプト)そのものの停止可能性は 判定していない。「完璧になるまで改善し続けろ」のような指示は、変更対象が boundary=clean かつ lite=true であっても、flow に乗った後の反復(Generate → Evaluate → Remember → Schedule → Optimize → Recurse サイクル)が終端に到達しない リスクを持ち込む。

したがって本ゲートは flow-detect の判定軸を追加するのではなく、flow に乗せる指示 自体の入場条件として独立に置く:

指示(プロンプト)
    ↓
[本書: loop-safety gates]  ← 非停止リスクの事前検出・再形成
    ↓ 通過
flow-detect.md §2 flow フェーズ(boundary / lite / class 判定)
    ↓
detect / escalate(既存)

いずれかのゲートで拒否された指示は、flow に進入させず「再形成された安全な指示」を 提案するか、feasibility 不能として人間に差し戻す(§3 参照)。


2. 危険パターン集

以下は非停止リスクを内包する典型的な指示パターンである。各パターンについて、 検出観点と再形成テンプレート(安全な書き換え)を定義する。

P-1: 「完璧になるまで」型(無限改善)

P-2: 「全可能性を列挙」型(組み合わせ爆発)

P-3: 「矛盾を認めず解消」型(偽の統合)

P-4: 「通るまで最初から再試行」型(無制限リトライ)

P-5: 「衝突する全制約を満たせ」型(実行不能な目標)


3. 5 ゲート

flow 進入前に、以下 5 ゲートをこの順で通過確認する。いずれか 1 つでも 通過しない場合は flow に進入させず、再形成案または feasibility 不能報告を返す。

Gate 1: explicit stop condition(terminal state への到達可能性)

Gate 2: feasibility check(制約矛盾の事前検出)

Gate 3: budget limit(ラウンド上限・探索資源の soft cap)

Gate 4: contradiction detection(矛盾検出)

Gate 5: failure reporting format(失敗報告の定型)


4. failure reporting format(定型)

Gate 1〜4 のいずれかで停止した場合、以下の定型で報告する。この定型は decision-table.md の provenance 記録とは別レイヤー(loop-safety gate 自身の 出力形式)であり、provenance フィールドを再定義しない。

[問題のある指示]: <元指示の該当部分>
[該当ゲート]: Gate 1-5 のいずれか
[未達/矛盾の内容]: <何が達成できないか、または何と何が矛盾するか>
[理由]: <なぜ非停止・実行不能と判定したか>
[安全な代替案]: <§2 の再形成テンプレートに基づく書き換え案>
[推奨される stop condition]: <最大反復回数・budget・判定基準>

5. unsafe → safe 変換の例

unsafe(元指示):

このコードが完璧になるまで改善し続けて。全部のエッジケースを考慮して、 矛盾する要求があっても両方満たすように何とかして。

safe(変換後):

最大 3 改善サイクルまで実行する。各サイクルで [受入基準] を満たすか判定する。 エッジケースは budget 上限 7 件までを対象とする。要求間に矛盾が見つかった場合は 解消しようとせず、矛盾する要求の組・理由・解消のための選択肢を報告し、 人間の判断を仰ぐ。3 サイクル後も未達なら停止し、未達項目と次の選択肢を報告する。


6. 既存正本との不整合防止(再定義しない事項の一覧)

本書は以下を再定義しない。値・機構の変更が必要になった場合は、当該正本の 版上げ手続き(design-philosophy.md §6.2)に従う。

事項 正本
対応ラウンド上限(3 ラウンド)・terminal state 00_concept.md / adaptive-production-loop.md
escalate 予算・severity 別の昇格上限 arbiter-policy.md §7
サーキットブレーカー(CB-1〜CB-3) decision-table.md §6
boundary / lite / class 判定 flow-detect.md §2
provenance スキーマ decision-table.md §5

7. 関連ドキュメント