役割: DRP(意思決定 審査パイプライン)Worker の HTTP API 契約(EDD-001)の正典。機械可読の詳細定義は同ディレクトリの openapi.yaml が持ち、本書は認証・エラーモデル・互換性ポリシーと一覧を定義する。
出典: drp/src/index.ts(2026-06-05 時点・HTTP 19 ルート + 審査 run 実行基盤)。実装が変わったら本書と openapi.yaml を同一 PR で更新する(L3 変更 = ADR 必須。id_conventions.md §3 参照)。
実行基盤(ADR-0120): 審査 run の入口(POST /chat/start?async=true・POST /runs)は feature flag WORKFLOW_ENTRYPOINT_ENABLED で実行基盤を切替える。本番は 2026-06-05 21:45 JST に Workflows(Cloudflare Workflows durable execution)へ切替済み。Queue consumer 経路は flag OFF 時の即時 rollback 先として温存(§4 参照)。HTTP 契約(ルート・スキーマ・status enum)は engine に依存せず不変 — 切替は入口の内部実行基盤のみに影響する。
整合検証: OpenAPI スキーマ ↔ 実 API レスポンス型の diff チェックは CI 化予定(main 分担・ADR-0117 §Confirmation の内容整合指標①)。文書側は openapi.yaml を唯一の機械可読定義とし、本書の表とコード片を二重正典にしない。
1. ベース情報
| 項目 | 値 |
|---|
| ベース URL | https://drp.bizlp.dev |
| 実装 | Hono on Cloudflare Workers(drp/src/index.ts) |
| 認証 | Basic 認証(全ルート必須・例外なし)。AUTH_USER / AUTH_PASSWORD(Workers Secrets)。グローバルミドルウェアで適用 |
| CORS | 明示設定なし(Basic 認証で保護) |
| 共通ヘッダ | GET /chat のみ Cache-Control: no-store |
| 審査 run 実行基盤 | Workflows(WORKFLOW_ENTRYPOINT_ENABLED=true・本番 2026-06-05 切替済み)/ Queue(flag OFF = rollback 先)。POST /runs の engine フィールド・session の engine で現在値を観測可能(ADR-0120) |
認証の将来形(Cloudflare Access service token 化)は ADR-0110(Proposed)。受理されたら本書の認証節を改訂する。
2. 共通エラーモデル
すべてのエラーは JSON { "error": string }(補足がある場合のみ hint を追加)で返す。
| コード | 意味 | 主な発生箇所 |
|---|
| 400 | 入力検証失敗(必須フィールド欠落・不正 ID 形式) | 全 POST 系 |
| 404 | リソース未検出 | session / draft / audit run |
| 409 | ID 重複(?overwrite=1 で上書き可) | POST /drafts |
| 410 | セッション有効期限切れ(24 時間) | /chat/status / /chat/answer |
| 413 | ペイロード超過(draft 1 MB 上限) | POST /drafts |
| 422 | ビジネスロジック違反(retroactive draft からの PR 作成禁止) | POST /chat/create-pr |
| 500 | サーバ内部エラー(LLM 呼出失敗等) | 全般 |
| 502 | pre-graph null(triage/socratic LLM 失敗) | POST /chat/start |
| 503 | 審査 run の起動失敗(Workflows instance create 例外)。無音失敗を作らず fail-loud(ADR-0120 決定 5) | POST /chat/start[?async=true] / POST /runs / POST /debug/workflow-trigger(engine=workflows 時のみ) |
| 507 | KV 容量上限(drafts 100 件) | POST /drafts |
3. ルート一覧(19 ルート)
詳細なリクエスト / レスポンススキーマは openapi.yaml を参照。
3.1 UI・審査実行
| メソッド・パス | 目的 | 成功 | 主エラー |
|---|
GET / | /chat へリダイレクト | 301 | — |
GET /chat | チャット UI(HTML)配信 | 200 | — |
POST /draft | 同期パイプライン実行(旧入口) | 200 | 400 / 500 |
POST /chat/start[?async=true] | 審査開始。async=true で実行基盤(Workflows / Queue)に投入し 202、同期なら完走結果を 200 | 200 / 202 | 400 / 502 / 503 / 500 |
GET /chat/status/:sessionId | 非同期実行の進捗 polling | 200 | 404 / 410 |
POST /chat/cancel/:sessionId | 協調キャンセル(冪等)。engine=workflows は instance terminate + DO cancel-finalize 併用で即時化、engine=queue は gate 境界で consumer が中断(ADR-0101 / ADR-0120) | 200 | 404 |
POST /chat/answer | 質問への回答を反映し再審査 | 200 | 400 / 404 / 410 / 500 |
POST /chat/create-pr | 審査完了後の PR 作成(明示操作。retroactive draft は 422 で拒否) | 200 | 400 / 422 / 500 |
3.2 CI トリガー・診断
| メソッド・パス | 目的 | 成功 | 主エラー |
|---|
POST /runs | CI / API からの審査トリガー(KV draft 読込 → 実行基盤に投入)。応答に現在の engine を含む | 202 | 400 / 404 / 503 |
POST /debug/watchdog-probe | watchdog 発火検証(WATCHDOG_PROBE_ENABLED=true 時のみ有効) | 200 | 404 |
POST /debug/workflow-trigger | Workflows 実機検証用トリガー(WORKFLOW_TRIGGER_ENABLED=true 時のみ有効・本番 dormant=404)。{draft_id} か {author, context} で起動、dry_run 既定 true。応答に workflow_instance_id を含む(ADR-0120 Phase a) | 202 | 400 / 404 / 503 |
3.3 Draft CRUD(KV DRAFTS_KV)
| メソッド・パス | 目的 | 成功 | 主エラー |
|---|
POST /drafts[?overwrite=1] | 起案 draft 保存(最大 100 件・1 MB/件) | 201 | 400 / 409 / 413 / 507 |
GET /drafts | draft 一覧(metadata ベース・mtime 降順) | 200 | — |
GET /drafts/:id | draft 本体取得 | 200 | 404 |
DELETE /drafts/:id | draft 削除(冪等・存在しなくても 204) | 204 | — |
3.4 監査(D1 telemetry_records)
| メソッド・パス | 目的 | 成功 | 主エラー |
|---|
GET /audit/runs | 実行記録一覧(from/to/mode/rejected 等でフィルタ) | 200 | — |
GET /audit/runs/summary | チャーンサマリー集計(4 週レビュー用) | 200 | — |
GET /audit/runs/:sessionId | 実行記録詳細 | 200 | 404 |
GET /audit/scoring-stats | 採点統計(平均・標準偏差・モード分布) | 200 | — |
4. 審査 run 実行基盤の契約(Workflows / Queue)
HTTP ではないが外から観測可能な非同期契約として本書のスコープに含める。入口(/chat/start?async=true・/runs)は WORKFLOW_ENTRYPOINT_ENABLED で次の 2 経路を切替える(ADR-0120)。HTTP 応答・session status・gateProgress の契約はどちらの経路でも同一。
4.1 Workflows(本番 active・2026-06-05 切替済み)
| 項目 | 値 |
|---|
| 実行基盤 | Cloudflare Workflows decision-pipeline-run(binding: PIPELINE_RUN_WORKFLOW・class PipelineRunWorkflow) |
| 投入 | PIPELINE_RUN_WORKFLOW.create({ id: sessionId, params: { sessionId } })。instance id = sessionId(再 create の重複起動を Workflows 側でも拒否・/chat/cancel の terminate が id を別途保存せず引ける) |
| 実行単位 | 1 step.do = 1 gate。LangGraph checkpoint を step 戻り値で持ち回り(durable execution)。冪等性は Workflows ランタイムに委譲(kill/retry 時は完了済み step がキャッシュから返る) |
| 投入失敗 | instance create 例外は 503 + ユーザー可視エラーで fail-loud(無音失敗を作らない・決定 5) |
| キャンセル | instance terminate + DO cancel-finalize(条件付き終端)併用。step 内 1 秒 polling + AbortSignal で in-flight LLM を中断 |
| 監視 | running instance >20 をリアルタイムアラート(1h cron・閾値 RUNNING_ALERT_THRESHOLD)。instance status API 依存はアダプタ層 src/workflows/instance_status.ts に集約し CI が週次アサート |
4.2 Queue consumer(rollback 先・flag OFF 時のみ有効)
| 項目 | 値 |
|---|
| キュー | pipeline-queue(binding: PIPELINE_QUEUE) |
| メッセージ封筒 | { "sessionId": string (UUID) } — 本文は持たず、状態は session DO が正 |
| バッチ設定 | max_batch_size=1 / max_batch_timeout=5s / max_retries=3 |
| DLQ | pipeline-queue-dlq(3 回失敗で隔離) |
封筒・DO・D1 のデータ構造詳細は データ定義書、session のライフサイクルは 状態遷移仕様 を参照。
5. 互換性ポリシー
- 本書のルート・スキーマは 外から観測可能な契約(L3)。フィールド追加を含む変更は外部設計の改訂 + ADR 必須、利用側(
public/chat.html の polling / CI workflow / operator プロンプト)の追従判定を行う(id_conventions.md §3)。
- Web UI とハンドラ間の契約 drift は
src/contracts/chat_api_contract.ts + mocked-route e2e の contract-check が CI で検出する(テスト計画書)。
変更履歴
| 日時 | 変更 |
|---|
| 2026-06-05 | ADR-0120 本番切替(Workflows・2026-06-05 21:45 JST)に追従 — §1 実行基盤注記・base info 行・§2 に 503(fail-loud)・§3 に /debug/workflow-trigger(19 ルート化)・/chat/start//chat/cancel//runs の engine 依存挙動・§4 を実行基盤 2 経路(Workflows / Queue)契約に再編 |
| 2026-06-05 | 初版 — src/index.ts(18 ルート + Queue consumer)から起こす(ADR-0117 Phase 2) |