これは何か: ADR の自動審査(DRP の cross-validation)を直すために調べた 3 つの研究を、つながりが分かるように 1 枚にまとめた解説。 元ネタ: RQ-097(粒度)/ RQ-100(ADR 依存グラフ・グラフ衛生)/ ADR-0109・RQ-098(判定のブレ対策)。 位置づけ: なぜこの 3 つが「別々の対策」なのかを理解するための背景説明(Explanation)。手順や規約そのものは各 ADR・各 lint ルールが正。


0. 何のための 3 つなのか(出発点)

すべては 「審査しすぎ問題(過剰審査)」 を直すための話。

審査役の AI(cross-validation の critic)が、いま決めようとしていることの範囲の外まで口を出してくる。 「正本をどこに置くか」だけ決めたいのに、「では障害時の復旧は? 索引の整合は?」と、本来は別の決定が担当すべき心配ごとまで突きつけて差し戻す。

たとえ:確定申告の窓口に「売上の計上方法」だけ相談に行ったのに、窓口の人が「社会保険は? 登記は? 採用計画は?」と全部詰めてきて、肝心の相談が前に進まない。

この 1 つの病気を、効く場所が違う 3 つの治療で同時に治す。 同じ薬を 3 回出すのではない。**3 つは別の軸(角度)**だ ── これが「別軸」の意味。


1. 3 つの軸の地図(先に結論)

何をそろえるか放っておくと元ネタ
A. 粒度審査に入れる「かたまり」の大きさ論点が多すぎて審査役が迷子になるRQ-097
B. グラフ衛生決定どうしのつながりの正しさ「それは別の決定の担当」と言えても、その別の決定を指し示せないRQ-100
C. 判定のブレ対策審査役の答えのブレと安全性同じ入力でも、やるたびに結論が変わるADR-0109 / RQ-098

大事なのは 3 つが互いに独立していること。1 つ直しても、残り 2 つは別途いる。


2. 軸 A:粒度 ── かたまりを正しい大きさに切る(RQ-097)

やること:1 つの ADR には 1 つの決定だけ。 3 つの調査モデル(OpenAI / Gemini / Claude)が、別々に調べて同じ結論にたどり着いた(=確からしさが高い)。

「1 つの決定」かどうかは、4 つのサインで見分ける(どれか 1 つでも分かれたら 2 本に割る):

  1. 元に戻せるか(やり直しのコスト)が違う
  2. 判断の決め手が違う(← 後述)
  3. 承認する人・関係する人が違う
  4. やめる条件・うまくいったか測る物差しが違う

たとえ:お弁当箱の仕切り。 ご飯・おかず・デザートを 1 つの仕切りに全部入れると、味が混ざって何を食べているか分からなくなる。 審査役も同じで、論点が混ざると真ん中の論点を見落としやすくなる(調査では、正しく拾える率が 85〜95% → 76〜82% に落ちると報告)。 仕切りを分ければ、1 品ずつちゃんと味見できる。

なぜ AI 審査に効くか:論点が多い ADR は「ゴールポスト動かし」(← 後述)を起こしやすい。 だから論点が大きすぎるときの最初の手当ては「要約」ではなく「分割」

実運用:この粒度チェックは起案テンプレ _meta/templates/adr-draft.template.md の「採用したい方針」に Y-Statement(「Xで Yに直面し、AでなくZを選び、Bのため、Cを受け入れる」)として実装。1 文に圧縮 → "かつ" が入るor収まらない → 発散シグナルで分割判断、という流れで書きながらチェックする。

③シグナルの注意:承認者で割るときは「決める役割(decider)」で見る。「実行する役割(executor)」が違うだけでは割らない(過剰分割になる)。今 1 人でも decider 役が分かれるなら割る。


3. 軸 B:グラフ衛生 ── 決定どうしの「つながり」をきれいに保つ(RQ-100)

軸 A は「1 個の大きさ」の話。軸 B は「個と個のつながり」の話。まったく別物。

なぜいるか:軸 C の審査役が「その心配ごとは、この決定の担当ではない。別の決定が持つべきだ」と賢く判断できたとする。 でも、その「別の決定」を確実に指し示せなければ、口出しを取り下げられない。「どこかにあるはず」では監査に通らない。

いまのつながりは“汚れている”

  • 片側だけ:A が「B を置き換えた」と書いても、B 側は何も言っていない
  • 行き先が消えている(dangling):もう廃止された ADR を指したまま
  • 文章の中に埋もれている:本文の散らかった文章にだけ書いてあって、機械が追えない

ここでこのプロジェクトにぴったりのたとえ:複式簿記。 借方に書いたら、必ず貸方に同じ額の相手がいる。片側だけの記帳は帳簿が合わない=エラー。 グラフ衛生のチェック(双方向の整合)はまさにこれ。 「A が B を置き換えた」なら「B 側にも『A に置き換えられた』が必ず立つ」。片側しかなければエラーで止める。 いわば 決定の世界の複式簿記

直し方(3 モデル合意)

  • つながりの正本(SSoT)を、本文の文章ではなく **frontmatter(ファイル先頭の構造データ)**に置く
  • つながりの種類(型付き辺)を 7 種だけに絞る
  • チェック(lint)で強制:行き先が実在する/両側がそろっている/置き換えと状態が食い違わない/ぐるぐる循環しない
  • 機械が使う一覧(_graph.json)は自動で吐き出す(手で書かない)

「衛生」の本当の意味 = 軽くし続けること: 現場の知見では、重い依存グラフは誰も手で保守しない=やがて形だけになる。 だから「最小限のチェック + 自動生成」を死守する。

たとえ:台所の掃除。毎日サッと拭く仕組み(自動化)なら清潔が続く。月 1 の大掃除(手作業の重い棚卸し)に頼ると、結局やらなくなって汚れがたまる。


4. 軸 C:判定のブレ対策 ── 「気分屋の審査役」を御す

軸 A は大きさ、軸 B はつながり。軸 C は審査役の答えそのものがブレる問題。さらに別物。

問題:AI は同じ入力でも、やるたびに違う答えを出す。今の合否ゲートは 1 回だけだと 約 6% が間違って不合格になる(元のプロンプトでもブレる)。

たとえ:気分屋の審査員。同じ料理を出しても、今日は 85 点、明日は 78 点。1 回の採点を信じると事故る。

手当ては重ねて使う

  1. 多数決(何回か回して多い方を採る)

    体重計に 5 回乗って平均を取る。あるいは、複数の医者にセカンドオピニオンを聞く。

  2. 後ろに「ブレない厳格なルール」を置き、迷ったら安全側に倒す

    気分屋の審査員の後ろに、機械的なルール係を置く。「少しでも怪しければ、全部“差し戻し側(捨てない)”にする」。 見落とし(拾うべきものを取りこぼすこと)をゼロにするための、わざと片側に傾けた設計。「迷ったら捨てない」。

  3. やり直し回数に上限を付ける(ADR-0109)

    「2 回連続で新しい重大な指摘が出なければ打ち切り」「3〜4 回で終了」。← 次のゴールポスト動かしへの蓋。

  4. 採点表を固定する(閉じた採点表)(← 後述)

    「問題を自由に探せ」ではなく、決まったチェック項目を渡す。


5. 3 つはどうかみ合うか(ここが核心)

別の軸=独立だが、互いを強め合うのが面白いところ。

  • A が C を助ける:かたまりを小さくする(A)と、何回回しても同じ結論に収束しやすい。入力を整えるとブレ(C)が減る
  • B と C で「賢い取り下げ」が成り立つ:審査役が「これは範囲外」と判断(その判断の安全性は C が担保)→「ではどの決定の担当か」をつながりの一覧で確認(B)→ 本当にその決定が持つべきものだと分かって初めて、口出しを取り下げる。
    • つながりが汚れていれば確認に失敗する → C の「迷ったら捨てない」で安全側に倒れる。つまり B が未整備でも事故は起きないが、取り下げの効き目(審査しすぎの解消)が出ない。
    • だから B は C の前提

だから着手の順番が決まる

(先) 軸 B グラフ衛生 ── 低リスク(文書・ツールだけ)・前提になる
  ↓
(後) 範囲を意識する審査役の本実装 ── 本番審査に影響する(FN-critical)ので慎重に

グラフ衛生を先にやる理由は 2 つ。審査役がそれに頼ること。そして、グラフ衛生は壊しても本番審査を壊さない低リスクだから。

全体のたとえ:図書館のリニューアル

  • 軸 A = 1 冊 1 テーマに本を整理し直す(蔵書の粒度)
  • 軸 B = 相互参照カードを複式簿記式に整える(蔵書のつながり = 先にやる土台)
  • 軸 C = 司書(審査役)の判断を、チェックリスト + 複数人確認 +「迷ったら貸さない」で安定させる 3 つは別作業だが、全部そろって初めて「正確で、ブレず、関連書もちゃんと辿れる図書館」になる。

6. よく出る言葉の意味(プレーン版)

判断の決め手(ドライバー)が同じか?

その決定を**「最後に何で決めたか」の理由**のこと(業界用語で Decision Drivers)。 たとえば「保守しやすさ」「事業の継続性」「コスト」など。 2 つのサブ決定で、決め手にしている理由が違うなら、別々の決定として割る。 理由が違うと、重視するものが違い、評価のしかたも変わるから。 (参考: arc42 Q42 の品質タグ。詳しくは adr_decision_drivers_guide.md

ゴールポスト動かし(ゴールポスト現象)とは?

審査を繰り返すうちに、審査役が合格ラインをジリジリ上げていくこと。 「ここ直して」→直す→「じゃあここも」→直す→…と終わらなくなる。 論点が多い ADR ほど起きやすく、繰り返すほど効き目が落ちていく(学術的にも報告あり: in-context reward hacking)。 対策が「やり直し回数の上限」と「採点表の固定」。

閉じた採点表(閉じたルーブリック)とは?

チェック項目があらかじめ決まっている採点表のこと。 「問題があれば何でも自由に書いて」だと、審査役が毎回ちがう観点を思いつき、答えがブレる。 決まったチェックリストにすると、毎回同じ土俵で採点でき、上の「ゴールポスト動かし」も起きにくい。


7. 出典についての正直な注記(どこまでが根拠か)

質問された 2 点を正直に切り分ける。

  • 「型付き辺を 7 種だけ」は論文どおりか?完全な既製品ではない。3 モデル調査の合意(OpenAI 6 種・Gemini 7 種・Claude 8 種)と、既存ツール(adr-tools の双方向リンク、EventCatalog、MADR)を土台にしつつ、当社の文章語彙(complements / inherits-from / parallel)に合わせて 7 種に整えた当社版。土台は外部にあるが、数の「7」は当社の取捨選択。詳細は docs/research/rq-100-adr-dependency-graph-synthesis.md

  • 「最小の型 + 自動生成 + lint 強制」は論文どおりか?2 つの根拠の合わせ技。① RQ-100 の 3 モデル合意(frontmatter を正本にし、機械向け一覧は自動生成、クロスファイルのチェックだけ自前で約 200 行)。② 日本企業 5 社の技術ブログの現場知見(重い依存グラフは誰も保守せず形だけになる/ツール導入が目的化して失敗)。 → 学術論文より、現場の運用失敗談が「軽くしろ」の主な根拠。出典は adr_operational_lessons_ja.md。単一企業の体験談なので、当社の特殊事情(AI 自動パイプライン・ひとり・監査要件)に合わせて部分的に取り入れるもの。


8. 関連ドキュメント

  • docs/research/rq-097-adr-decision-granularity-synthesis.md — 軸 A(粒度)の調査本体
  • docs/research/rq-100-adr-dependency-graph-synthesis.md — 軸 B(グラフ衛生)の調査本体
  • docs/research/rq-098-scope-aware-critique-synthesis.md — 範囲を意識する審査役の設計(軸 C と B のつなぎ)
  • _internal/05_how-to/adr_operational_lessons_ja.md — 現場知見(「軽くし続けろ」の根拠)
  • _internal/05_how-to/adr_decision_drivers_guide.md — 判断の決め手(ドライバー)の書き方
  • ADR-0109 — 審査しすぎループの根本対策(やり直し回数の上限)
  • ADR-0107(Proposed)— ADR 索引 + 依存グラフ整備(グラフ衛生はこの具体化)