最終更新: 2026/06/22 18:56
DRP 実装履歴
役割: 各 Phase の実装内容・完了日・PR 番号を記録する。現在の運用状態(エンドポイント・フィーチャーフラグ等)は 起案者向け運用ガイド。
1. フェーズ計画
Phase 1: プロンプト単体検証(完了 2026-05-07)
- Dify Cloud 単体(GitHub 連携なし)でトリアージ・スコアリングを検証
- TC-01〜08 で判定 / 採点機能を確認(判定 5/5、採点 1/50 → 45/50 → 14/50 の線形性確認)
- プロンプト確定: Triage v0.2 / Scoring v0.1(以降のフェーズで使い回すバージョン)
Phase 2a': LangGraph TS GitHub 連携最小動作版(完了 2026-05-11)
- ADR-0019 で Dify → LangGraph TS に基盤変更。Phase 2a の Dify 連携設計は不採用。
- Gate 0 (Triage) + Gate 4 (Scoring) + 本文生成 + Slug + GitHub PR 自動作成までを E2E で構築
- LiteLLM Gateway (Cloud Run) で 3 プロバイダ統合 + 機密マスキング callback を実装
- TC-01〜07 を
drp/test-tc.mjsで全自動実行可能に - 本番稼働開始 (PR #555〜#585、Cloud Run メモリ 512Mi → 1Gi に引き上げ済)
Phase 2c: Gate 2(過去 ADR 整合性)追加(完了 2026-05-12)
- 既存 ADR との Conflict / Supersede 判定を
src/nodes/consistency.tsで実装。GitHub API でdocs/adr/*.mdを取得し、起案ドラフトとの矛盾・上書き関係を判定(当時claude-sonnet→ 現行claude-opus、ADR-0033。ADR 取得も現行は GraphQL 一括 + KV キャッシュ。詳細はprompts/04_consistency.md)。 - グラフは
triage → body_generation → scoring → consistency → slug → numbering → webhookに再ワイヤリング (PR #589)。CONFLICT 検出 + 起案ドラフトに supersede 宣言なしの場合は END で差戻し。 - PR 本文 (
src/nodes/webhook.ts) に Gate 2 整合性セクションを追加 — レビュアーが過去 ADR との関係を即座に確認可能に。 - テスト: TC-C01〜C05 全合格 (
drp/test-tc-consistency.mjs)。プロンプト + テストケース原本はprompts/04_consistency.md。 - adr-kit (
/adr-kit:lintConsistency ゲート / file:line citations) との棲み分け: LangGraph 側 = 起案時の門番 (PR 化前にブロック)、adr-kit = 代表取締役レビュー時の補強 (Accepted 直前の最終チェック)。
Phase 2b: Gate 1(Socratic 問診)追加(完了 2026-05-12)→ ADR-0071 で盲点検出エンジンに再定義(2026-05-27)
- 起案者ドラフトの情報充足チェックを
src/nodes/socratic.tsで実装。不足項目があれば最大 3 問を返して END で差戻し、起案者がフォームに追記して再送するフロー (PR #591)。 - 方式A (ステートレス) を採用: Durable Objects / セッション保持を使わず、
/draftへの単発再送で対話を成立させる最小設計。方式B (Workers + Durable Objects によるチャット型) は/chatエンドポイント追加で将来移行可能。 - グラフは
triage → socratic → body_generation → scoring → consistency → slug → numbering → webhookに再ワイヤリング (src/graph.ts)。 - State に
socraticPass/socraticQuestionsを追加 (src/state.ts)、LLM Gateway にMODELS.socraticを追加 (src/llm/gateway.ts)(当時gemini-flash、→ ADR-0033 で現行claude-sonnetに upgrade)。 public/index.htmlに Socratic 差戻し時の質問リスト表示 +STEP_MSGS更新を反映 — 起案者は具体的に何を補完すべきか即座に把握可能。- テスト: TC-S01〜S03 全合格 (
drp/test-tc-socratic.mjs)。プロンプト + テストケース原本はprompts/03_socratic.md。
ADR-0071 (2026-05-27, PR #1042): RQ Synthesis 導入により追加質問が毎回 0 件で素通り (dead node 化) したため、Gate 1 を 盲点検出エンジン に再定義。Devil's Advocate (DA, T=0.95) + Pre-mortem (PM, T=0.8) 並列 → Judge/Aggregator (T=0.2) の non-interactive DAG に置換。差戻し型 → 情報提供型に変更 (findings は PR body に表示、pass/fail 判定には不使用)。同時に
buildPreGraph()を triage のみに縮小 (盲点検出 DAG が 30s wall time を超えるため)。
Phase 3: Gate 3(並列レビュー / 3 モデル)追加(完了 2026-05-12)
- Scoring (Gate 4) + Consistency (Gate 2) を通過した高品質 ADR ドラフトに対する付加価値レビューを
src/nodes/parallel_review.tsで実装 (PR #596)。差戻しはせず、レビュー結果を PR 本文に追記する情報提供型ゲートとして位置付け。 - 3 モデル並列実行:
Promise.allSettledで同時呼出 (LangGraph グラフ分岐ではなくノード内で並列) — レイテンシ削減 + Cloudflare Workers の CPU 制約に適合。- Gemini Flash(当時。現行
gemini-pro)— ビジネスインパクト / アーキテクチャ整合性 / 長期負債リスク - Claude Sonnet(当時。現行
claude-opus)— 論理的一貫性 / 問題定義と決定のつながり / 撤退条件の現実性 - GPT-4o(当時。現行
gpt-o3、reasoning_effort=high)— 技術的実現可能性 / コスト試算の妥当性 / 完了条件の検証可能性
- Gemini Flash(当時。現行
- エラー耐性: 各モデルのエラーは個別
catchで吸収 → 残り 2 モデルの結果で PR を生成してパイプラインは継続。LLM プロバイダの単独障害でも ADR 起案が止まらない。 - グラフ最終形:
triage → socratic → body_generation → scoring → consistency → parallel_review → slug → numbering → webhook(src/graph.ts)。Webhook node は 3 モデルのレビュー結果を指定セクションとして PR 本文に転記。- ※ 訂正 (2026-06-01): 上記は Phase 3 (PR #596) 時点の記録。(a) その後
cross_validation(ADR-0076、scoring と consistency の間) とpolicy_alignment(parallel_review と slug の間) が追加され、現行構成は 10 ノード (webhook 含め 11)。(b) モデルは ADR-0033 で gemini-pro / claude-opus / gpt-o3 に刷新。(c) 出力はstrengths/concerns/suggestions配列 → アノテーション (annotations[]、本文引用紐付き) に変更。最新の正は アーキテクチャ図 / 内部実装マップ を参照。
- ※ 訂正 (2026-06-01): 上記は Phase 3 (PR #596) 時点の記録。(a) その後
- 意義: Phase 1〜2c で「ADR 化前のゲート (差戻し型)」を 3 層構築済 (Triage / Socratic / Scoring + Consistency)。Phase 3 はこれら全てを通過した起案に対し、レビュアー (代表取締役) が単一視点でレビューする手間を先回りで複眼化する補助層。差戻し権限を持たないことでパイプラインのレイテンシ・コストを最小化。
2. 全フェーズ完了表
| Phase | Gate | 内容 | ステータス | PR |
|---|---|---|---|---|
| 1 | Gate 0 | Triage (ADR 対象判定 / Light / Standard / Critical) | 完了 (2026-05-07) | Dify Cloud 単体検証 |
| 2a' | — | LangGraph + Hono + LiteLLM Gateway + GitHub Actions E2E | 完了 (2026-05-11) | #555〜#585 |
| 2b | Gate 1 | 完了 (2026-05-12) → 再定義 (2026-05-27) | #591 → #1042 | |
| 2c | Gate 2 | 過去 ADR 整合性 (Conflict / Supersede) | 完了 (2026-05-12) | #589 |
| 2 | Gate 4 | Scoring (50 点 / 40 点未満差戻し) | 完了 (2026-05-11) | #555〜#585 |
| 3 | Gate 3 | 並列レビュー (当時 Gemini Flash / Claude Sonnet / GPT-4o → 現行 gemini-pro / claude-opus / gpt-o3、ADR-0033) | 完了 (2026-05-12) | #596 |
設計時に想定した全ゲートが本番稼働。
ADR-0066: 非同期 Queues + DO(完了 2026-05-26)
- Cloudflare 524 timeout (100s) を回避するための非同期実行基盤を 4 Phase で実装
- Phase A0: Workers Paid plan ($5/月) + Queues namespace 作成
- Phase A1 (PR #980): PipelineSessionDO + wrangler.toml Queues/DO binding
- Phase A2 (PR #988): Producer (
?async=true) + Consumer Worker +GET /chat/status/:sessionId - Phase A3 (PR #989): Web UI Async mode checkbox + exponential backoff polling (1s→10s、10 分 timeout)
- Phase A4 (PR #990): CI workflow (
drp-trigger.yml) + Implementation Status → Done
| Phase | 内容 | ステータス | PR |
|---|---|---|---|
| A0 | Workers Paid + Queues namespace | 完了 (2026-05-26) | (ops) |
| A1 | PipelineSessionDO + wrangler binding | 完了 (2026-05-26) | #980 |
| A2 | Producer + Consumer + status endpoint | 完了 (2026-05-26) | #988 |
| A3 | Web UI async mode + polling | 完了 (2026-05-26) | #989 |
| A4 | CI workflow + status update | 完了 (2026-05-26) | #990 |
ADR-0071: Gate 1 盲点検出エンジン(完了 2026-05-27)
- Gate 1 Socratic (インタラクティブ追加質問) を 盲点検出エンジン (DA+PM+Judge 並列 DAG) に再定義
- Phase 1 (PR #1042): DA (T=0.95) + PM (T=0.8) → Judge (T=0.2) の non-interactive DAG 実装
buildPreGraph()を triage のみに縮小 (盲点検出 DAG が 30s wall time を超えるため)- 情報提供型: findings は PR body の Blind-spot Report に severity 付きで表示、Pipeline pass/fail 判定には不使用
- エラー耐性: DA/PM 片方失敗時は成功側で継続、全失敗時は skip-through、Judge 失敗時は rawFindings fallback
| Phase | 内容 | ステータス | PR |
|---|---|---|---|
| 1 | DA + PM + Judge DAG 実装 + preGraph 縮小 | 完了 (2026-05-27) | #1042 |
| 2 | Adjacent Domain (AD) + web search 連携 | 未着手 | — |
次の投資領域は ADR-0020 §決定 #4 で予告した ADR 事後評価ループ (DORA 指標 / インシデント相関) や、Phase 3 運用後の レビュー品質モニタリング (どのモデルの指摘が PR 本文で実際にレビュアーの判断を変えたか) へと移る。
ADR-0103: 入口統一(案 C′ / shared triage module)+ MVP 卒業(2026-06-03)
- 入口は 2 つのまま (
/chat/start= Web UI //runs= CI)。当初の採択案 (chat も即 enqueue 化) は Phase A-4 で案 C′ に方針転換 — chat UI は同期 triage を維持し即時応答性を保持 (ADR-0066 / ADR-0094 Phase B を supersede せず維持)。 - drift の構造解消: triage 派生フィールドの整形 (chat 応答 / session cache / consumer DO result / telemetry) を
src/triage/shared_triage.tsの共通関数に集約し、handler / consumer が同一定義を呼ぶ (PR #1353)。PR #1200/#1204/#1214/#1217 系の同期漏れを根本解消。 - EC-3 (Queue silent failure) は入口統一と独立した既存ギャップとして分離し、per-session DO alarm watchdog で別途解消 (PR #1354/#1355、運用は operator_guide §7.10)。
- MVP 卒業: EC-1〜6 全充足を 2026-06-03 に達成 (PR #1357)。詳しくは mvp_exit_criteria.md にある。
| 項目 | 内容 | ステータス | PR |
|---|---|---|---|
| EC-2 | 入口統一 = shared triage module (案 C′) | 完了 (2026-06-03) | #1352 / #1353 |
| EC-3 | Queue silent failure = DO alarm watchdog | 完了 (2026-06-03) | #1354 / #1355 / #1356 |
| MVP | EC-1〜6 全充足・卒業記録 | 卒業 (2026-06-03) | #1357 |
変更履歴
| 日時 | 変更 |
|---|---|
| 2026-06-07 | 初版 — README §10・§11 から移植(経緯: ADR-0117) |