• Status: Accepted (accepted-with-residual-risks — 本 ADR 自身が Part4 の escalate 起票・末尾の HITL 残余リスク節参照。merge = 受理の規約により 2026-06-03 受理)
  • Mode: Standard
  • Kruchten Type: Executive/Property
  • Scope: platform
  • Implementation Status: Done (Part1-4 = PR #1303 / #1305 / #1311 / #1331・本番稼働中。§5.2 #1/#7 緩和 = §実装時の記録 参照)
  • 起案者: [email protected]
  • 起案日時 (JST): 2026-06-03 00:56
  • 承認日時 (JST): 2026-06-03 (PR merge = HITL 受理)
  • Deciders: [email protected] (単独)

決定の早わかり(Y-statement)

本節は ADR-0140 の方針で遡及追加された本文の要約で、新しい意味は加えていない (意思決定内容は不変)。「文脈で問題に直面し、対抗案でなくこの案を選び、目的のため代償を受け入れる」と読む。詳細はコンテキスト以降の本文に展開する。

  • 文脈: Decision PipelineCross-Validation ゲート (ADR-0076) は、盲点検出 (socratic / ADR-0071) が挙げた critical 盲点を根拠に draft を差し戻す。3 モデル deep research (3/3 合意) で、オラクル無しの反復 LLM 自己批評は構造上収束しない既知の失敗モードと確立された。
  • 問題: 良質な ADR draft が制度的に過剰却下される。多重却下 7/7 ケースで goalpost 移動が発生し、再投入の収束率は 0%。本来通すべき ADR が機械的に塞き止められ、起案者が pipeline を迂回する誘因となっていた。
  • 問題点と課題(直せる原因 → 発生を止めるためにやること):
    • Proposed 段階で実装時にしか検証できない前提が却下根拠になる → 本文に具体的緩和機構があれば undermines=false を許容するライフサイクル整合バーを置く (Part1)。
    • 盲点に対応すると別の critical 盲点が出て却下根拠が移動する → 2 連続却下かつ盲点移動を検知する loop-breaker を入れる (Part2)。
    • socratic の 3 観点選択が Math.random で非決定 → 原稿内容シード (FNV-1a + mulberry32) で視点選択を決定化する (Part3)。
    • LLM ループ内に停止条件と外部検証器がない → 終端判定を LLM ループの外 (人間の PR レビュー) に移す (Part4)。
  • 前提(解決を課題に立てない与件):
    • golden eval FN=0 (本来却下すべきは却下) を絶対条件とする。
    • ソロ運用前提で全件人手レビューは不可、自動化価値を維持する。
    • ADR-0076 の fail-closed 方針 (PR #1300) と矛盾させない。
  • 決定(対応策): prompt の bar 調整のみ (案 B)・閾値緩和 (案 C)・全面人手移行 (案 E) でなく、4 つの直交した構造的修正 (Part1-4) を feature flag 付き・既定 ON で採用する。goalpost 検知 or round-cap (既定 3) 到達時は自動 reject を止め、残余リスク節付きで ADR を PR 起票する。人間の merge = 受理 / close = 却下 が最終終端となる。persist (同一盲点の持続) は round-cap より優先して reject を継続する。
  • 目的: 過剰審査ループを断ち、収束しないケースを人間の PR レビューに逃がして停止性を確保する。safety (FN=0) と自動化価値は両立して維持する。
  • 代償: persist 判定の言い換え脆弱性や HITL escalate の起案者バイアスなどの残余リスクを、緩和策と KPI 監視付きで受け入れる。定常運用コストは月 ~2 人時未満 + CI LLM 従量 (月数千円規模)。
  • 詳細は本文の影響・撤退条件セクションを参照のこと

コンテキスト

§1.1 背景

Decision Pipeline の Cross-Validation ゲート (ADR-0076) が、良質な ADR draft を制度的に過剰却下するループに陥っていた。盲点検出 (socratic / ADR-0071) が挙げた critical 盲点を「Must 軸を undermine する」と判定して差し戻すが、起案者が当該盲点に対応すると socratic が別の critical 盲点を生成し、それが再び却下根拠になる。goalpost が動き続けて収束しない構造である。

3 モデル deep research (OpenAI / Gemini / Claude を同一設問で実行、3/3 合意) により、これが既知・予測可能な失敗モードであることが確立された。オラクル無しの反復 LLM 自己批評は構造上収束せず劣化し (Huang et al., ICLR 2024, arXiv:2310.01798 "Large Language Models Cannot Self-Correct Reasoning Yet"; Stechly et al., 2024, arXiv:2402.08115)、LLM-judge は temperature=0 でも非決定的でバイアスを持ち、修正のたびに別 input になるため per-input 決定化 (Part3) では収束しない (Zheng et al., NeurIPS 2023, arXiv:2306.05685, MT-Bench)。批評者は「批評役」に sycophantic で prompt のフィルタは spec-gaming で回避される (Krakovna et al., DeepMind specification gaming)。文献の処方は一致して「収束には LLM ループ外の健全な検証器 (= 人間の PR レビュー) と bounded rounds が必須」(Kambhampati et al., ICML 2024, arXiv:2402.01817, LLM-Modulo Framework)。

§1.2 現状 (As-Is)

定量根拠 (実測):

  • 多重却下 7/7 ケースで goalpost 移動が発生 (前回指摘を直すと別 critical が出る)。
  • 収束率 0%: 無改変の同一 draft を再投入しても盲点が fuzzy 重複 ~6% で揺れ、別の却下根拠に化ける。
  • 非決定性の根: socratic の 3 観点選択が Math.random ベースで、同一原稿でも視点が変動し盲点が ~6% 揺れる。

§1.3 課題

本来通すべき ADR が機械的に塞き止められ、起案者が pipeline を迂回する誘因となっていた。本 ADR は ADR-0076 (Cross-Validation) を supersede/extend し、Part1-3 (実装済・症状対処) と Part4 (根本治療) を 1 件の意思決定として統合記録する。

§1.4 制約・要件

  • safety (本来却下すべきは却下) を破綻させない: golden eval FN=0 を絶対条件とする。
  • ソロ運用前提: 全件人手レビューは不可、自動化価値を維持する。
  • 即時 rollback 可能: 全機構を feature flag 化、問題時は flag OFF で原状復帰。
  • ADR-0076 の fail-closed 方針 (PR #1300) と矛盾させない。

§1.5 目標 (To-Be)

過剰審査ループを 4 つの直交した構造的修正で断ち、収束しないケースを LLM ループ外の人間 PR レビューに逃がして停止性を確保する。Non-Goals: socratic の盲点品質そのものの再設計、ADR-0097 の翻訳層リスクの解決、全件人手レビューへの移行。

決定

過剰審査ループを 4 つの直交した構造的修正で断つ。いずれも feature flag 付き・既定 ON で、問題時は即 OFF できる。Part1-3 は症状対処 (実装済)、Part4 が文献の処方に基づく根本治療。

  1. Part1 — ライフサイクル整合バー (Cross-Validation judge prompt): Proposed 段階で実装時にしか検証できない前提 (決定性・コスト削減・CI 挙動など) は、本文に防止/検出の具体的な緩和機構があれば undermines=false を許容する。単なる言及・コスト計上・関連記述は addressed と認めない。Cross-Validation prompt の SSoTprompts/production/cross-validation/ に新設 (ADR-0085 の gap 解消)。
  2. Part2 — goalpost loop-breaker: 同一 draft で Cross-Validation 却下が 2 連続かつ盲点が「移動」した場合を検知する純粋ロジック (src/nodes/crossval_loopbreaker.ts)。同一盲点が持続する正当な却下は温存する。
  3. Part3 — socratic 視点選択の決定化: 3 観点選択を Math.random から原稿内容シード (FNV-1a + mulberry32) に変更。同一原稿 → 同一視点 → 同一盲点とし、非決定性を断つ。
  4. Part4 (根本治療) — bounded rounds + 残余リスク付き Accept で停止性を確保: 文献が「単一 LLM ループには停止条件が無く、終端には外部検証器が必須」と示すため、終端判定を LLM ループの外 (人間の PR レビュー) に移す。goalpost 検知 or round-cap (既定 3、flag CROSSVAL_ROUND_CAP) 到達時、自動 reject を止めて ADR を成果物として起票 (PR 作成) し、本文に機械可読マーカー付き「Known Limitations / Escalated Residual Risks」節 (未解決 critical 盲点) を追記する。人間の merge = 受理 / close = 却下 が最終終端となる。安全性: persist (同一盲点が持続 = 起案者未対応の正当却下) は round-cap より優先して reject 継続するため FN=0 を維持。

ADR-0076 の Cross-Validation を「safety (本来却下すべきは却下) を維持しつつ、制度的 goalpost ループは必ず成果物で終端し人間が外部検証する」方針に再定義する。

審査ポリシー補記 (golden 厳格化 / PR #1348): Part1 ライフサイクル整合バーの判定基準を golden eval で固定化するため、golden #11/12/13/18 のラベルを false → true に厳格化訂正した (FP=0 / FN=0 を維持)。判定は 「この盲点の risk を実際に防止/検出する具体的緩和機構 (具体設計・Confirmation fitness function・撤退条件) があるか」 を要求し、次は addressed認めない: ①計画・将来対応の言及のみ / ②Consequences での単なる言及・コスト計上・関連記述 / ③未採択 option への参照 / ④目的の再定義による回避 / ⑤concrete-but-partial (一部のみ具体で残りが未カバー)。この審査の厳しさ自体を独立 ADR として規定すべきかは継続検討 (現状は本 ADR Part1 + golden で担保)。

判断基準 (Decision Drivers)

3.1 評価軸

#重要度 (係数)案件特有の解釈
1#reliable[Must] (×2.0)同一 draft 再投入で同一判定 (収束性) を担保し、過剰却下 (false positive) を排除する。同時に本来却下すべきを通す false negative を出さない
2#maintainable[High] (×1.0)loop-breaker と PRNG を純粋ロジックに分離し CI unit test 可能にする (パイプライン初の CI unit)
3#operable[High] (×1.0)feature flag で即時 rollback 可能、telemetry で escalate/却下を後追い観測できる
4#suitable[Medium] (×0.5)正当な却下 (同一盲点の持続・別ゲートの正しい判定) は温存し、ゲートの審査価値を毀損しない

K.O. criterion: #reliable で golden eval の FN>0 (本来却下すべきを通す safety 破綻) が発生する案は不採用。

3.2 評価軸 × 案スコア表

係数採択案 (Part1-4)案 B (prompt のみ)案 C (閾値緩和)案 D (escalate=block)案 E (全面人手)
#reliable×2.042134
#maintainable×1.043332
#operable×1.043221
#suitable×0.542123
加重和 (正規化)0.8000.4670.3000.5000.567
K.O. 通過 (Must ≥3)

検討した代替案 (Alternatives Considered)

  • 採択案 (Part1-4): lifecycle bar + loop-breaker + socratic 決定化 + bounded rounds/残余リスク付き Accept。それぞれ別の失敗モードに対応し独立に flag 制御できる。Part4 が「必ず成果物で終端し人間が外部検証する」停止性を与える。golden eval で FN=0 (safety gate) を維持。
  • 案 B (prompt の bar 調整だけで収束させる): undermines プロンプトをさらに精緻化して過剰却下を抑える。却下理由: 文献上、フィルタ式ルーブリックは critic に reframe (spec-gaming) され必ず回避される (Krakovna; 実 dry-run でも run3 が「design defect」と言い換えて lifecycle bar を突破)。prompt だけでは halting problem は解けない。
  • 案 C (undermines 閾値を一律に緩める / fail-open 化): 判定を甘くする・ゲートを弱める。却下理由: safety (FN) が悪化し欠陥 ADR を通すリスク。ADR-0076 の fail-closed 方針 (PR #1300) と矛盾。
  • 案 D (escalate を block のまま=現 Part2): goalpost を検知しても reject のまま人手に「迂回」を促すだけ。却下理由: 成果物 (PR) が出ず、人間が Accept する対象が無い (実 dry-run で確認)。終端しても意思決定が記録されない。Part4 は escalate を「成果物付き受理」に変える。
  • 案 E (人手レビューに全面移行): pipeline 自動審査を捨て全件人手。却下理由: ソロ運用の自動化価値を失う。Part4 は「収束しないケースだけ」人手 (PR レビュー) に逃がし、自動化を保ったまま停止性を確保する (LLM-Modulo の最小適用)。

影響 (Consequences)

§5.1 正の影響 (Good)

  • 過剰却下ループの解消、同一 draft の判定収束性、CI unit test の導入 (回帰検知)。
  • 影響範囲: src/nodes/cross_validation.ts / src/nodes/crossval_loopbreaker.ts / src/nodes/socratic.ts / prompts/production/cross-validation/ / test/crossval_loopbreaker.test.ts / tools/crossval-eval/

§5.2 負の影響 (Bad)

  • persist 判定の言い換え脆弱性 (盲点 #1/#7, critical): normalizeTitle_ (trim + lowercase + 空白除去) の文字列一致は LLM が生成する意味的同一の言い換え (「決定性の欠如」vs「非決定的動作リスク」/「パフォーマンス劣化」vs「スループット低下」) を「移動」と誤判定し、本来 persist で温存すべき正当却下が escalate に流れる FN 経路となる。temperature=0 でも語彙レベルの揺れが残ることは Zheng et al. 2023 が示しており、Part3 決定化は視点選択のみで盲点テキスト生成 (DA temp 0.95 / PM temp 0.8) は据え置きである。緩和: 採択前に golden eval へ「同一盲点・表現が異なる」ペア最低 5 件を追加して回帰テスト化し、必要なら埋め込み cosine 類似度 (≥ 0.85) を OR 条件で persist 判定に組み込む設計変更を Review After までに検討する。FN=0 の保証範囲は「golden 26 件 + 言い換え追加分の範囲内」に限定されることを明示する。
  • HITL escalate の起案者バイアス (盲点 #2, high): LLM-Modulo が要求する「外部検証器」は LLM とは独立した知識軸を持つエージェントだが、ソロ運用では PR レビュアーが実質的に起案者本人となり、Krakovna らが指摘する sycophancy 問題の人間版が発生する。「本来却下すべきを通す」FN は自動 gate ではなく人間判断ステップに移転されただけで根絶ではない。緩和: (a) escalate PR には「自己 merge 禁止」または「起票から 48 時間クーリングオフ後に再読必須」の手続き的ガードを設ける、(b) KPI として「escalate PR の merge 後 ADR が後続ゲートで問題を起こした件数」を追跡、(c) Confirmation 節で FN=0 保証範囲が「自動 gate 内のみ」であることを明示。
  • ADR-0097 未採択による翻訳層リスク (盲点 #3, high): 収束性は「バイト同一の draft 再投入」に対する保証だが、socratic への入力が body-gen パイプライン (LLM 呼び出し含む) 経由なら同一原稿でも中間表現がバイト変動し、FNV-1a シードが変わって「異なる 3 視点」が選択され、起案者は何も変更していないのに loop-breaker が「偽の goalpost 移動」として escalate する経路がある。緩和: 採択前に socratic の実入力が raw テキストか body-gen 出力かを確認し、後者の場合は FNV-1a シード計算対象を「起案者が直接入力した raw テキストのハッシュ」に固定する設計変更を検討。ADR-0097 の未採択が収束性保証に与える影響を本節に明示する。
  • シード衝突による永続的視点固着 (盲点 #6, critical): FNV-1a 32bit は短い・類似ヘッダ構造の ADR 群で衝突確率が高まり、「同一テーマの ADR」(例: データパイプライン系) ではシード空間がクラスタリングして特定の 3 視点に固着、「セキュリティ」「コスト」軸が組織的に未選択になる可能性がある。観点網羅率 KPI が全体集計のため、カテゴリ別の 0 回出現を見逃す。緩和: (a) シード計算に ADR カテゴリタグ・軸インデックスを XOR 混合、(b) 観点網羅率を「ADR カテゴリ別」に分解計測し、特定カテゴリで特定軸の出現率 < 50% を早期アラート閾値とする、(c) 視点選択分布を定期的にヒートマップで可視化。
  • round-cap=3 の根拠不在 (盲点 #4, medium): 既定 ON で本番適用される設計定数だが、7 件の goalpost 移動が「何ラウンド目に発生したか」の分布も、正当却下 persist が何ラウンド継続するかの上限も示されていない。LLM-Modulo 論文も具体的 round 数を規定しない。緩和: (a) 既存 7 件の goalpost 発生ラウンドを実測分析、(b) cap=2/3/4 での FN/FP 感度分析、(c) 撤退条件に「FN>0 の原因が cap 到達である場合は cap 値を引き上げる」を追加。
  • escalate 採択 ADR の品質保証穴 (盲点 #5, medium): 「Known Limitations 節付き PR」が merge された ADR が通常採択 ADR と区別されないと、後続 ADR がそれを参照する LLM ノードが「通過済み = 問題なし」と解釈し、既知の未解決リスクが downstream に無症状で伝播する (ADR-0076 fail-closed と暗黙矛盾)。緩和: (a) ステータスタグ status: accepted-with-residual-risks を付与、(b) Known Limitations 節を corpus 参照時に downstream ノードへ渡す/除外する仕組みを明示、(c) Review After 時に残余リスク解消を再評価するプロセスを長期的影響節に追記。
  • PRNG 決定化で「毎回同じ 3 視点」になり別観点の盲点を逃す可能性: Gate1 cap (critical/high max5) と 3 モデル並列で部分緩和。
  • loop-breaker が正当な持続却下を誤って escalate する可能性: 同一盲点判定で抑制 (上記 #1/#7 の言い換え脆弱性が残るため監視対象)。

§5.3 中立・トレードオフ (Neutral / Trade-offs)

  • escalate PR の積滞リスク (盲点 #8, high): ソロ運用で escalate PR が open のまま放置されると、後続作業がブロックされ「pipeline 迂回」が再発する誘因となる。緩和: (a) escalate PR に SLA (起票から 5 営業日以内ラベル付与) を設定、(b) 期限超過時に自動リマインダー issue を起票、(c) escalate PR 一覧を dashboard 化し週次 telemetry に未対応件数を含める、(d) SLA 超過が月 3 件超で round-cap 引き上げ or エスカレーション基準見直しをトリガー化。
  • feature flag 組み合わせ爆発 (盲点 #9, high): 3 フラグ独立 ON/OFF は 8 通りの状態空間を生み、障害時の切り分けコストが「月 2 人時未満」見積に含まれていない。緩和: (a) 全 telemetry イベントに 3 フラグの現在状態スナップショットを付与、(b) フラグ組み合わせ別 runbook (「FN 発生時は Part1→Part2→Part3 順に単独 OFF して golden eval 再実行」等) を ADR 付属ドキュメントとして整備、(c) フラグ変更操作を audit log に記録。
  • 形式的承認の慣行化リスク (盲点 #10, high): 「2 回却下されたら自分でマージできる迂回路」として制度化し、6 ヶ月後には escalate PR の大多数が形式的レビュー (1 分未満) でマージされる懸念。緩和: (a) escalate PR マージには「残余リスク節の各 critical 盲点に対し起案者が明示的に対応方針を記載した返信コメント」を必須化する PR テンプレート、(b) KPI に「escalate PR の平均レビュー所要時間」を追加し、5 分未満が全体の 50% を超えた場合に形骸化アラート発報。
  • golden eval 26 件の小サンプル過信 (盲点 #11, high): 全カテゴリ・全ライフサイクル段階・全複雑度を網羅するには統計的に不十分で、Part1/2/3 の境界値・エッジケースは未カバー。緩和: (a) golden を「現 26 件 + 各 Part のエッジケース専用テスト」に分離管理、(b) golden 26→50 件拡張を Review After 時の必須アクションとして格上げ (本ADRスコープ外オプションから昇格)、(c) FN=0 主張に「golden 26 件の範囲内で」という限定を明示。
  • 3 モデル合意のアンカリング (盲点 #12, medium): 「OpenAI / Gemini / Claude 3/3 合意」は同一学習データ・同一問題フレーミングに基づく相関出力であり、独立検証ではない。緩和: (a) 「問題の診断については合意 / 解決策の妥当性は人間レビューが必要」と分離記述、(b) レビューチェックリストに「3 モデル合意を根拠に採択判断を省略していないか」を追加、(c) Review After 時に「3 モデル予測のうち実際に発生したもの・しなかったものの追跡」を実施。
  • sunk cost アンカリング (盲点 #13, medium): 「実装完了済 (sunk cost)」「記録専用」という記述が Part1-3 の設計再評価を心理的に阻害する。緩和: (a) 本 ADR の位置づけを「記録専用」から「設計決定の承認」に改め、設計上の問題発見時は当該 PR を revert して再設計する意思決定権限を明示、(b) Part2 同一性判定は採択前に「言い換えパターン含む golden」での検証を必須条件化、(c) コスト試算欄から「sunk cost」表現を撤回し「実装状況」として中立記述。

信頼性メカニズム (収束性の検証可能性)

#reliable (収束性) の前提を、防止/検出の具体的機構として明示する。

  1. 決定性の正確な主張範囲: 収束性は「バイト同一の draft 再投入」に対する保証である。socratic の 3 視点選択は FNV-1a でシード化した mulberry32 PRNG で行い Math.random を一切使わないため、同一入力 → 同一シード → 同一 3 視点 → 同一盲点が決定的に再現する。golden の無改変再投入で盲点 fuzzy 重複率 < 5% (目標 0%) を検証する。
  2. 微小編集によるシード変動の検出機構: 原稿を編集すればシードが変わり視点が変動しうる (異なる原稿 = 異なる視点は設計通り)。これが「修正 → 別 critical 盲点」= goalpost 移動を生む懸念に対しては Part2 loop-breaker が検出機構として働く。同一 draft_id の直近 2 却下ラウンドの却下盲点 (critical × Must × undermines) タイトル集合を正規化比較し、重複なし (移動) かつ 2 連続却下なら自動 reject を止めて HITL escalate に逃がす。よってシード変動による実質 goalpost は silent に FN 化せず、人手判断に回る。
  3. loop-breaker 同一性判定の具体仕様 (検証可能性): analyzeCrossValHistorynormalizeTitle_ (trim + lowercase + 空白除去) で正規化したタイトル集合を比較する。直近 2 ラウンドで 1 件でも共有 → 持続 = 正当却下を温存 (FN を作らない)、共有ゼロ → 移動 = escalate。純粋関数として test/crossval_loopbreaker.test.ts で goalpost 7 系列 + 持続却下 2 系列 = 9/9 を回帰検証する。ただし §5.2 #1/#7 の通り言い換え脆弱性が残るため、採択前に言い換えペア最低 5 件の追加と埋め込み類似度導入を要検討
  4. ハッシュ衝突の影響範囲の限定: FNV-1a 衝突は「固定視点集合からどの 3 つを選ぶか」にのみ影響し、盲点判定そのものの正誤には関与しない。衝突が起きても cross-validation の最終判定は golden eval (FN=0 を絶対 gate) が独立に担保するため、FN 経路を生まない。ただし §5.2 #6 の通り同一カテゴリでのクラスタリングは別途緩和が必要
  5. 「永続的盲点死角の固着」リスクの防止/検出機構: 決定化により特定原稿で同じ 3 視点しか選ばれず、ある観点が恒常的に未検査になる懸念に対し、(a) 防止 = 視点選択のみ決定的で、各視点内の盲点探索は DA (temp 0.95) + PM (temp 0.8) の 2 系統で多様性を保ち、さらに Gate3 の 3 モデル並列レビュー (Gemini/Claude/o3) が socratic と独立な観点を供給する (単一視点に依存しない多重防護)。(b) 検出 = Review After に golden 全件で「観点網羅率」(Q42 9 軸が socratic findings に最低 1 回出現する割合) を計測する固定 fitness-function を置き、網羅率 < 80% (= 特定軸の恒常的未出現) を観測したら視点プール拡張またはシード関数を見直す。カテゴリ別分解計測は §5.2 #6 緩和で追加

コスト試算

実装は完了済 (Part1-3 = PR #1303 / #1305 / #1311、Part4 = PR #1331)、加えて 3 モデル deep research (~$6.5)。概算 計 3〜4 人日。本 ADR は設計決定の承認として記録する (sunk cost 表現は §5.3 #13 緩和で撤回)。継続運用コスト (定期・概算):

項目頻度工数 / コスト
HITL escalate 対応 (loop-breaker 発火時の人手再評価 + Accept/迂回判断)想定 月 0〜2 件1 件 ~20〜30 分 → 月 ~0〜1 人時
telemetry 監視 (escalate / 却下 / 収束率の週次クエリ)週次~10 分/回 → 月 ~0.7 人時
golden eval CI 実行 (26 cases × LLM gateway)prompts/production/ 変更 PR ごと~数分 + LLM 従量 ~数百円/run
unit test (9 系列) CI 実行CI 毎~数秒・無償
四半期 golden レビュー (golden の妥当性確認)四半期~2〜3 人時/回
flag 組み合わせ障害対応 (§5.3 #9 緩和の runbook 適用)障害発生時~1〜2 人時/件
golden 26→50 件 拡張 (Review After 時の必須アクション、§5.3 #11 で格上げ)Review After 時 1 回~1 人日

定常運用コストは 月 ~2 人時未満 + CI LLM 従量 (月数千円規模) で、3 つの feature flag 管理を含めても増分は軽微。flag 組み合わせ障害は telemetry スナップショット + runbook で切り分けコストを抑制する。

撤退条件 (Rollback Plan)

各 flag を wrangler secret put <FLAG> false で即時 OFF にできる (SOCRATIC_DETERMINISTIC / CROSSVAL_LOOPBREAKER、Part1 は prompt revert)。

撤退基準:

  • (i) golden eval で FN>0 (safety 破綻) が 1 件でも発生したら該当 Part を OFF + 該当 PR revert。
  • (ii) loop-breaker の誤 escalate が月 5 件を超えたら判定条件を見直し。
  • (iii) 再投入収束率が依然 50% 未満なら Part3 を再設計。
  • (iv) FN>0 の原因が round-cap 到達である場合は cap 値を引き上げ (§5.2 #4 緩和)。
  • (v) escalate PR の SLA 超過が月 3 件超なら round-cap 引き上げ or エスカレーション基準見直し (§5.3 #8 緩和)。
  • (vi) escalate PR の平均レビュー所要時間 < 5 分が全体の 50% を超えたら形骸化アラート発報・PR テンプレート強化 (§5.3 #10 緩和)。

Confirmation

  • 検証手段:
    1. tools/crossval-eval の golden eval で FN=0 を gate (保証範囲は「golden 26 件 + 言い換え追加分の範囲内」に限定、§5.2 #1/#7/#11)。
    2. test/crossval_loopbreaker.test.ts の unit (round-cap / persist 優先 / 残余節 含め 10 pass)。
    3. telemetry の構造化列 cross_validation_escalated / crossval_stop_reason / crossval_round_count で escalate・終端理由・連続却下数を追跡 (migrate-v8)。全イベントに 3 flag の現在状態スナップショットを付与 (§5.3 #9)。
  • 実行頻度: golden eval は prompts/production/ 変更 PR ごと (手動 pre-push)、unit は CI 毎、telemetry は週次観測。
  • 違反時対応: FN>0 で該当 flag を OFF + 該当 PR を revert。FN=0 の保証範囲は「自動 gate 内のみ」であり HITL ステップでの FN は別途 §5.2 #2 緩和の KPI で追跡する。
  • KPI (観測可能・閾値確定):
    • golden eval FN = 0 (safety、絶対条件、保証範囲は明示限定)
    • 過剰却下 (false positive) = 0
    • 同一 draft 無改変再投入の盲点 fuzzy 重複率 < 5% (決定化前 ~6% → 目標 0%)
    • loop-breaker 誤 escalate < 月 5 件 (撤退条件 ii と連動)
    • escalate 承認率: 初回 8 週で baseline を確立し、以降の目標値を設定 (それまでは監視のみ)
    • 観点網羅率 (Q42 9 軸が socratic findings に最低 1 回出現する割合) ≥ 80%、かつ ADR カテゴリ別分解でも特定軸の出現率 ≥ 50% (§5.2 #6)
    • escalate PR の merge 後に後続ゲートで問題を起こした件数 (§5.2 #2 / HITL FN 追跡)
    • escalate PR の SLA (5 営業日以内ラベル付与) 超過件数 (§5.3 #8)
    • escalate PR の平均レビュー所要時間 (5 分未満比率) (§5.3 #10)
    • escalate PR の残余リスクへの起案者対応コメント有無 (§5.3 #10)

長期的影響

  • 観点固定化リスク: socratic 決定化により「同一原稿 = 同一 3 視点」となり、別観点の盲点を恒常的に見逃す可能性。Gate1 cap (critical/high max5) と 3 モデル並列で部分緩和し、Review After 時に golden 拡張で観点網羅性を再点検する。
  • golden eval 陳腐化: ルール進化で 26 cases が現実を代表しなくなる負債。四半期レビューで更新する。Review After 時の golden 26→50 件拡張は §5.3 #11 で必須アクションに格上げ。
  • 形骸化リスク: loop-breaker の escalate が常態化すると「2 回却下 = 自動迂回」と運用が形骸化する恐れ。escalate 件数を監視し、月 5 件超で判定条件を見直す。§5.3 #10 緩和の PR テンプレートと平均レビュー時間 KPI で抑止する。
  • escalate 採択 ADR の残余リスク追跡: §5.2 #5 緩和で導入する status: accepted-with-residual-risks タグ付き ADR は、Review After 時に残余リスクが解消されたか・新規問題を引き起こしていないかを必ず再評価する。
  • 3 モデル予測の事後検証: §5.3 #12 緩和として、Review After 時に「3 モデルが合意した予測のうち実際に発生したもの・しなかったものの追跡」を実施し、deep research の予測精度自体を評価する。
  • Review After: 2026-12-02 (採択 6 ヶ月後)。golden eval の FN / 収束率、escalate 件数、誤 escalate 率、カテゴリ別観点網羅率、HITL FN、SLA 超過、レビュー所要時間、3 モデル予測精度を再評価し、各 feature flag の存続を判断する。

実装時の記録 (§5.2 #1/#7 緩和・2026-06-04)

残余リスク「persist 判定の言い換え脆弱性」への緩和実装と、埋め込み類似度の検討結果:

  1. 言い換えペア golden の追加 (本緩和の Must): test/crossval_loopbreaker.test.ts に 2 系統 10 ペアを追加した。
    • (A) 表記揺れ 5 ペア (全角/半角・句読点・引用符・括弧): normalizeTitle_NFKC 正規化 + 記号除去に強化し、persist 判定できることを固定。表記揺れ起因の persist 取りこぼしは正規化レベルで解消。
    • (B) 意味的言い換え 5 ペア (§5.2 #1 の実例「決定性の欠如 vs 非決定的動作リスク」等): 文字列正規化では捕捉できない現行挙動 (= escalate に流れる) を既知の限界として機械可読に固定。FN=0 保証の範囲外であることがテストで明示される。意味類似判定を導入する際は (B) の期待値を反転させる運用。
  2. 埋め込み cosine ≥0.85 OR 条件の検討結果: 現段階では見送り。根拠:
    • (i) escalate は fail-safe: 言い換え誤判定の帰結は「自動 reject が HITL (人間の PR merge/close) 判断に変わる」ことであり auto-accept ではない。FN 化には人間の merge を要し、それは §5.2 #2 の KPI (escalate PR の merge 後問題件数) で追跡される設計に既に含まれる。
    • (ii) 文字レベル類似度では代替不能: 実例ペアの文字 bigram Dice は ~0.15 で閾値設計が成立しない (実測)。導入するなら埋め込みが必須。
    • (iii) 埋め込み導入のコスト: Workers AI binding 追加・loop-breaker の純粋関数性の喪失 (CI unit test 構成の破壊)・escalate 判定パスへのレイテンシ/コスト追加。現状の誤 escalate 観測値 (撤退条件 ii: 月 5 件閾値) を超えていない段階では過剰投資。
    • 再検討トリガー: 撤退条件 (ii) 誤 escalate 月 5 件超過、または Review After (2026-12-02) で意味的言い換え起因の escalate が観測された場合、埋め込み cosine の OR 条件導入を再評価する。
  3. FN=0 保証範囲の明示: 「golden 26 件 + 言い換え追加分 (A) の範囲内・自動 gate 内のみ」。意味的言い換え (B) と HITL ステップは保証範囲外 (Confirmation 節と整合)。

参照 (References)

  • 関連 ADR:
    • ADR-0076: Cross-Validation ゲート — Supersede/Extend (判定基準に lifecycle bar、制御に loop-breaker + bounded rounds、終端を人間 PR レビューへ移す方針変更)
    • ADR-0071: 盲点検出エンジン (socratic) — 補完 (視点選択の決定化)
    • ADR-0085: Prompt KV Lifecycle — 補完 (Cross-Validation prompt の SSoT 化で gap 解消)
    • ADR-0102: 審査深度の mode 階層化 — 並立 (Light cap と直交)
    • ADR-0097: 起案者生テキストの構造整合 — 相補 (socratic は生テキスト、Cross-Validation は body-gen 出力を見る非対称の翻訳層リスクが残る。未採択。§5.2 #3 でリスク明示)
  • 関連 PR/Issue: #1300 (ADR-0076 fail-closed) / #1303 (Part1) / #1305 (Part2) / #1311 (Part3) / #1331 (Part4)
  • 外部資料:
    • Huang et al., ICLR 2024, arXiv:2310.01798 "Large Language Models Cannot Self-Correct Reasoning Yet"
    • Stechly et al., 2024, arXiv:2402.08115
    • Zheng et al., NeurIPS 2023, arXiv:2306.05685 (MT-Bench, LLM-judge bias)
    • Kambhampati et al., ICML 2024, arXiv:2402.01817 (LLM-Modulo Framework)
    • Krakovna et al., DeepMind specification gaming

Known Limitations / Escalated Residual Risks (HITL ratification required)

本 ADR は Cross-Validation で goalpost ループ検知 (2 連続却下・却下盲点が毎回移動) のため、自動審査を打ち切り「残余リスク付き Accept」として起票された (ADR-0109 Part4)。以下の未解決 critical 盲点は、人間レビュー (この PR の merge = 受理 / close = 却下) で最終判断すること。LLM critic による反復審査では収束しないと判定されたものであり、PR レビューが外部検証器となる。

未解決 critical 盲点:

  • 「persist 優先で FN=0」の保証は loop-breaker の同一性判定精度に全面依存しており、その精度自体が未検証
  • FNV-1a シードの衝突による「永続的視点固着」がsilentに発生し、特定カテゴリの重大欠陥を恒常的に見逃す
  • persist 判定の正規化ロジック(normalizeTitle_)が LLM の言い換えに対して脆弱で、FN=0 保証が崩壊する