• Status: Accepted
  • Mode: Standard
  • Kruchten Type: Executive/Property
  • Scope: platform
  • Implementation Status: Not Started
  • 起案者: [email protected]
  • 起案日時 (JST): 2026-05-29 21:24
  • 承認日時 (JST): 2026-05-29 21:43 (Pipeline 通常 flow Standard 41/50 通過 + Cross-Validation INFO、PR #1143 マージ)
  • Deciders: [email protected] (単独)

コンテキスト

§1.1 背景

ADR 起案の再投入 churn が高止まりしている (14 ADR に 32 run = 2.3 倍、却下率 52%)。review-tiering の spike で前提が崩れた際の telemetry 再分析 (2026-05-29) において、churn の最大ドライバが「コスト試算の欠落」であることが手動コーディングで判明したのが本 ADR の発端である。

§1.2 現状 (As-Is)

  • 却下 19 run のうち「起案品質不足」起因が 8 件。この 8 件すべてが却下理由に「コスト試算欠落」を含む(最大の単一ドライバ)。
  • 残り 11 件は Cross-Validation 毀損 (盲点 × Must) で、その大半は一点ものの正当リスク (盲点 269 件中 92% がユニーク dedupeGroup)。審査を浅くしても減らず、減らすべきでもない。
  • 構造的事実: パイプラインはコスト試算を Gate4 (採点)で初めて検査する。それ以前 (Gate0 triage / Gate1 盲点検出 / Gate3 並列レビュー)に内容完全性の関門が無く、コスト欠落の起案でも重い審査をフルに通してから Gate4 で初めて落ちる。
  • 起案テンプレ (operator_guide §4.1) にコスト試算は必須項目として存在しない
  • 却下理由コーディングは現時点で手動である。

§1.3 課題

コスト欠落の起案でも、Gate1 盲点検出 + Gate3 3 モデルレビュー + Gate4 採点 (~6.7 分 + Opus コスト)をフルに通してから初めて却下される。この無駄なパイプライン 1 周を源流で防げていない。

§1.4 制約・要件

  • 起案者負担は最小化する (粗い数値 1 つで可、30〜60 秒/起案)。
  • Light 経路は免除可。Standard 以上のみ適用。
  • 既存の差戻しフロー (needsAdr=false 系) を再利用。
  • adr-lint は既存パターン (decision-drivers-mcda) を踏襲。
  • 追加 LLM コストはゼロ。GAS 実行時間の増分なし。

§1.5 目標 (To-Be)

Standard 以上の ADR 起案では、コスト試算 (数値 1 つ以上)が起案段階で必須となり、欠落起案は Gate1 以前で差し戻される。Non-Goals: コスト試算の「正確さ」検査、Light 経路の審査軽量化、KV 結果整合性の起案チェック (別 follow-up)。

決定

コスト試算を起案必須にする。単一の決定を 3 層で強制する: (1) 起案前ゲート (Gate1 より前で Standard 以上のコスト欠落を差し戻す、churn 削減の本体)、(2) operator_guide §4.1 起案テンプレへの必須項目追加、(3) scripts/adr-lint.mjs への cost-estimation-section ルール追加 (merged 品質の CI backstop)。設計原則は「粗くてよい・数値 1 つでよい」を徹底し、完璧な試算でなく「数値で考えた痕跡」を必須化する。実装順序は (0) telemetry 自動書込 (cost-missing コード) → ③adr-lint → ②テンプレ → ①起案前ゲート とする。telemetry 自動書込を先行させるのは、撤退判定の観測ループが手動コーディングに依存すると破綻するため (盲点 #8 / Policy Alignment 指摘)。各段で telemetry 観測する。

判断基準 (Decision Drivers)

3.1 評価軸

#重要度 (係数)案件特有の解釈
1#efficient[Must] (×2.0)churn 削減効果。コスト欠落起案を源流で弾き、無駄な Gate1〜Gate4 通過 (~6.7 分 + Opus) を削減できるか
2#maintainable[High] (×1.0)pipeline 改修の保守負担、adr-lint ルールの単純性、撤退容易性
3#reliable[High] (×1.0)誤判定 (正当起案の誤ブロック、形式充足のすり抜け)の少なさ、観測ループが破綻しないこと
4#usable[Medium] (×0.5)起案者負担、差戻しメッセージの分かりやすさ、新規・外部コントリビューターへの摩擦
5#operable[Medium] (×0.5)telemetry での効果測定可能性、撤退条件の判定が機能すること

K.O. criterion: Must 軸 #efficient の score < 3 は不採用。

3.2 評価軸 × 案スコア表

係数採択案 (3 層)案 A (テンプレのみ先行)案 B (adr-lint のみ)
#efficient×2.0421
#maintainable×1.0355
#reliable×1.0344
#usable×0.5345
#operable×0.5332
加重和 (正規化)0.6800.6200.540
K.O. 通過 (Must ≥3)

加重和は K.O. 通過候補のタイブレーク用 (Suhr 1999 CBA 準拠)。案 A/B は Must 軸 #efficient が K.O. ライン未満のため不採用候補。ただし盲点 #3 の指摘 (テンプレ単体先行検証) を踏まえ、実装順序を ③→②→①の段階化とし、各段で効果を分離測定する (盲点 #13 対応で 2 週間のベースライン観測期間を挿入)。

検討した代替案 (Alternatives Considered)

  • 案 A: §4.1 起案テンプレ必須化のみ (工数 0.25 人日): 最小コスト・最小リスク。書き漏れ予防効果はあるが、書き漏らした起案は依然として Gate4 まで通ってから却下される (churn 削減効果が弱い)。Must 軸 #efficient を K.O. 通過しない。盲点 #3 の指摘どおり段階化①として先行実装し、2 週間の観測でベースラインを更新してから残り 2 層の必要性を再判断する。
  • 案 B: adr-lint backstop のみ: パイプライン後にしか効かず、churn 削減には寄与しない (merged 品質保証のみ)。Must 軸 K.O. 不通過。
  • 案 C: 現状維持 (Gate4 で落とし続ける): churn 52% を放置。却下 8/8 のコスト欠落由来を改善できないため棄却。
  • 案 D: Gate4 採点ルーブリックを厳格化: 採点段階の改善であり源流対策にならない。むしろ churn を増やす方向。

影響 (Consequences)

§5.1 正の影響 (Good)

  • churn 最大ドライバ (コスト欠落 8/8) を起案前に源流カット。無駄な審査 1 周 (~6.7 分 + Opus)を削減。
  • 起案テンプレに項目があることで書き漏れ自体が減る (予防効果)。
  • adr-lint backstop で merged ADR のコスト記述が保証され、横断的な品質が向上。
  • 役割分担が明確: churn 削減は起案前ゲート、merged 品質は adr-lint。

§5.2 負の影響 (Bad)

  • 起案前ゲートが pipeline コードに分岐を 1 つ増やす (保守対象増)。
  • 「数値 1 つあれば通る」ため、内容の薄いコスト試算をすり抜けさせるリスク (数値の質は Gate1/Gate4 に委ねる割り切り)。盲点 #6 のとおり、'コスト試算: 1人日' 等の形式的 1 行で通過し得る。
  • 正規表現判定の false negative (コスト記述があるのにキーワード不一致で誤って弾く)リスク。
  • 起案前ゲートと Gate4 cost_estimate 採点ルーブリックの判定基準乖離により、「ゲート通過後 Gate4 で低評価却下」という新たな churn パターンが発生し得る (盲点 #7)。
  • 緊急・時間制約のある起案 (インシデント・規制対応)で 30〜60 秒の追加負担がプロセス不信感を生み、非公式チャネル迂回を招くリスク (盲点 #10)。
  • 新規・外部コントリビューターへのオンボーディング摩擦増大 (盲点 #4)。
  • ゲート通過後の起案のみが計測対象に残り、サバイバーバイアスにより「品質向上」と誤解されるリスク (盲点 #12)。

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

  • コスト試算は「粗くてよい・数値 1 つでよい」を徹底し、内容妥当性は Gate1/Gate4 に委ねる割り切り。
  • サンプルサイズ 8 件からの単一ドライバ断定の脆弱性 (盲点 #1): 本プロジェクトは個人開発 (起案者は代表取締役 1 名) のため起案者属性 (新規/既存・チーム) の分散は無く、「特定起案者への集中」起因ではない。「テンプレ周知のみでの試行」との比較は段階化②(テンプレ先行) がそれに相当し、②単独効果を 2 週観測してから①③の必要性を判断する設計で代替する。チーム拡大時 (Jr 入社) には起案者属性別の再分析を行う。
  • 「欠落」と「不十分」の内訳 (盲点 #5): 8 件は手動コーディング上「却下理由にコスト試算を含む」で括っており、コスト試算セクション自体が無い「欠落」と数値はあるが粗すぎる「不十分」の厳密分離は未実施。本 ADR の存在チェックは「欠落」に直接効き、「不十分」は Gate4 §8 に委ねる割り切り。両者の比率は telemetry 自動コーディング (実装順序 0) 導入後に計測する。
  • Gate4 cost_estimate 採点基準と起案前ゲート通過条件 (数値 1 つ) の乖離 (盲点 #7): 通過条件は Gate4 §8 合格を保証しない。両者の対応表を実装時に作成し、起案前ゲートの差戻しメッセージに Gate4 観点 (工数人日 + 運用コストの両軸) を例示して乖離を縮める。
  • /draft 等の自動生成起案では「数値 1 つあれば通る」が形骸化リスクとなる (盲点 #4)。生成プロンプトへのコスト試算指示組み込みは follow-up。
  • Light/Standard 判定境界の曖昧性 (盲点 #9): 境界ケースは Standard として扱うフェイルセーフを採用。判定基準の明文化は実装前タスクとする。
  • 将来の監査・コンプライアンス要件で「粗い数値 1 つ」が不十分と判定された場合: adr-lint ルールをセマンティックバージョニングし、基準引き上げ時は既存 ADR を遡及修正せず新規起案から適用する (ADR-0031 immutable パターン準拠)。既存 ADR は corrigendum 注記で対応。

コスト試算 (Cost Estimate)

採択案 (3 層 + telemetry 先行) の実装工数を作業単位で内訳する (個人開発: 代表取締役 + Claude Code 補助)。

作業工数 (人日)改修対象ファイル
(0) telemetry 自動書込 (cost-missing コード)0.5drp/src/audit/types.ts / src/audit/persistence.ts
(0') 観測ダッシュボード (事前定義クエリ)0.25src/index.ts (/audit/runs 拡張) + クエリ集
③ adr-lint cost-estimation-section ルール0.5scripts/adr-lint.mjs (既存 decision-drivers-mcda パターン) + ルールドキュメント
② §4.1 起案テンプレ必須化0.25docs/_internal/05_how-to/operator_guide_langgraph.md
① 起案前ゲート + テスト0.5〜1.0src/nodes/triage.ts (or src/index.ts/draft) + テスト
合計約 2.0〜2.5 人日
  • 追加 LLM コスト: ゼロ。むしろ削減方向 — コスト欠落起案を Gate1 前に弾けば、その起案にかかる Gate1 盲点検出 (DA+PM+Judge) + Gate3 3 モデルレビュー + Gate4 採点 (~6.7 分 + Opus) が丸ごと節約される。spike の 8 件分が該当 (≈ 8 × 6.7 分 + Opus 8 起案分)。
  • GAS 実行時間: 増分なし。本パイプラインは Cloudflare Workers 上で動作し GAS ではない (ADR-0019)。Workers の CPU time 制限に対し、起案前ゲートは正規表現 1 回のため影響は無視できる (数 ms オーダー)。
  • 起案者負担: コスト欄に粗い数値 1 つ (30〜60 秒/起案)。

撤退条件 (Rollback Plan)

判定: 4 週ごとのレビュー (担当: 起案者)、初回判定は 8 週時点。

観測指標 (盲点 #2, #8, #12 を踏まえ再設計):

  1. Total churn rate = 却下 run / (全 run + ゲートブロック件数)。分母を固定し、ゲートブロックを除外したサバイバーバイアスを防ぐ。
  2. ゲートブロック件数のうち起案者異議申し立て件数/比率 (誤ブロック率の代理指標)。
  3. 「ゲート通過後 Gate4 cost_estimate 低スコア却下」件数 (盲点 #7 の新 churn パターン専用カウンタ)。
  4. 「形式充足・Gate4 却下」件数 (盲点 #6 の形骸化早期検出指標)。
  5. 却下理由コーディングの自動化: Gate1 前差し戻し時に却下理由コード ('cost-missing' 等)を telemetry_records に自動書き込みする仕組みを起案前ゲート実装と同時に組み込む (盲点 #8)。

撤退トリガ:

  • 8 週時点で total churn rate が低下しない → 起案前ゲートの判定ロジックを見直し、または撤回。
  • 異議申し立て率 > 20% (4 週中間レビュー閾値) → ゲートを警告のみ (ソフト)に切替、または adr-lint backstop のみに縮退。
  • 「ゲート通過後 Gate4 却下」件数が導入前の Gate4 コスト欠落却下件数を上回る → 通過条件と Gate4 採点基準の対応付けドキュメントを作成し、必要なら基準を統一。
  • telemetry 自動書き込みが実装されない場合は本 ADR を撤回 (観測不能のため判定不能)。

段階的撤退 (盲点 #13 対応):

  • (0) telemetry 自動書込 → ③adr-lint 実装 → 2 週間観測 (ベースライン更新) → ②テンプレ実装 → 2 週間観測 (テンプレ単独効果のベースライン更新、pre-registration)→ ①起案前ゲート実装。各段で却下率変化を独立測定。telemetry 先行により全段階で観測ループが機能する。

Confirmation

  • 検証手段:
    • adr-lint ルール cost-estimation-section (CI で全 ADR をチェック、merged 品質保証)。
    • 起案前ゲートの自動 telemetry 書き込み ('cost-missing' コード)。
    • 4 週ごとの観測指標ダッシュボード (事前定義クエリ、手動コーディング依存ゼロ)。
  • 実行頻度: adr-lint は全 PR の CI で実行。telemetry 集計は 4 週ごとレビュー。
  • 違反時対応: adr-lint 違反は CI failure で merge ブロック。観測指標が撤退トリガに該当した場合は本 ADR 起案者がレビューし、ソフト化または撤回を判定。

参照 (References)

  • 関連 ADR:
    • ADR-0024 (ADR テンプレートの構造化) — 正規構造に「コスト試算」を必須セクションとして位置づける運用を追加 (lint/テンプレでの存在チェックに留める)。
    • section-alignment ADR (draft id align) / review-tiering ADR (差し戻し済) — 別軸。review-tiering の spike で「コスト欠落が churn 最大ドライバ」と判明したのが本 ADR の発端。
  • 関連 PR/Issue: -
  • 外部資料:
    • operator_guide §4.1 起案テンプレ
    • scripts/adr-lint.mjs (既存 decision-drivers-mcda パターン)
    • Gate4 scoring rubric §8 cost_estimate
    • D1 telemetry_records 却下 run 手動コーディング結果 (2026-05-29)
  • follow-up 候補: KV 結果整合性の起案チェック + read-once キャッシュ (KV 読込コスト ~30% 減の副次効果)、/draft 自動生成プロンプトへのコスト試算指示組み込み、adr-lint ルールバージョニング方針。

11. 参照: Pipeline 審査履歴 (2026-05-29 実行時, 通常 flow)

本セクションは Decision Pipeline (LangGraph TS on Cloudflare Workers) で本 ADR 草案を通常 flow (retroactive=false) で審査した結果のログ。Gate4 41/50 (Standard 閾値 40 + 1pt 余裕) 通過 + Cross-Validation INFO (Must 毀損なし)。本 ADR 系列で初めて Gate4 と Cross-Validation の両方を一度に通過した適用例。デフォルトでは折りたたまれており、 をクリックで展開する。

📋 Pipeline 審査履歴 全 Gate 結果 (合格 Score 41 / 50) — クリックで展開

Gate 0-4 結果

  • Gate 0 Triage: needsAdr=true / triageMode=Standard
  • Gate 1 Socratic: 盲点 13 件検出 (情報提供型、§5 / §撤退条件 に反映)
  • Gate 2 Consistency: INFO (既存 ADR と矛盾なし、ADR-0036/0038/0053/0077 の延長線上)
  • Gate 3 Parallel Review: 3 vendor (Gemini / Claude / o3) 出力は §5・撤退条件・コスト試算へ反映
  • Cross-Validation (盲点 × Must): INFO (Must 軸毀損なし)
  • Gate 4 Scoring: 41 / 50 (scoringMean 41, stdDev 0)
#採点項目点数コメント
1問題定義5却下 8/8 のコスト欠落を spike で定量化
2代替案5テンプレのみ / adr-lint のみ / 現状維持 / Gate4 厳格化 の 4 案 + K.O.
3判断基準5Q42 5 軸 + 係数 + K.O. + 正規化加重和
4過去 ADR 整合性3ADR-0036/0038/0053/0077 の参照明記で改善余地 (本 PR で §参照 補強)
5影響範囲3pipeline 改修ファイル名が不明瞭だった (本 PR で §コスト試算 表に改修対象ファイルを明記)
6運用上の罠513 盲点を §5.2/5.3 に反映
7ロールバック性5観測指標 5 種 + 撤退トリガ 4 種 + 段階的撤退
8コスト試算2採択案の作業別工数内訳が欠落 (本 PR で ## コスト試算 節新設、作業別 ~2.0-2.5 人日に内訳化)
9完了条件4Confirmation 3 要素
10長期影響4段階導入 + 4 週レビュー + follow-up

合計: 41 / 50 (Standard 閾値 40 → PASS, Cross-Validation INFO)

Status 遷移

  • 本 PR で Status: Proposed → Accepted に更新。採点時の改善余地を同時反映:
    • Scope: platform 追加 (ADR-0049 / adr-lint scope-meta 解消)
    • ## コスト試算 節新設 (§8 2/5 対応: 作業別工数 + 改修ファイル名 + LLM 削減/Workers 制約)
    • §5.3 の (要追記) 3 点充足 (サンプル属性 / 欠落 vs 不十分 / 将来の基準上方修正)
    • 実装順序を (0) telemetry 自動書込 先行に変更 (循環論法 rollback の観測ループ確保)