役割: 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=truePOST /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. ベース情報

項目
ベース URLhttps://drp.bizlp.dev
実装Hono on Cloudflare Workersdrp/src/index.ts
認証Basic 認証(全ルート必須・例外なし)AUTH_USER / AUTH_PASSWORD(Workers Secrets)。グローバルミドルウェアで適用
CORS明示設定なし(Basic 認証で保護)
共通ヘッダGET /chat のみ Cache-Control: no-store
審査 run 実行基盤WorkflowsWORKFLOW_ENTRYPOINT_ENABLED=true・本番 2026-06-05 切替済み)/ Queue(flag OFF = rollback 先)。POST /runsengine フィールド・session の engine で現在値を観測可能(ADR-0120)

認証の将来形(Cloudflare Access service token 化)は ADR-0110(Proposed)。受理されたら本書の認証節を改訂する。

2. 共通エラーモデル

すべてのエラーは JSON { "error": string }(補足がある場合のみ hint を追加)で返す。

コード意味主な発生箇所
400入力検証失敗(必須フィールド欠落・不正 ID 形式)全 POST 系
404リソース未検出session / draft / audit run
409ID 重複(?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 呼出失敗等)全般
502pre-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 時のみ)
507KV 容量上限(drafts 100 件)POST /drafts

3. ルート一覧(19 ルート)

詳細なリクエスト / レスポンススキーマは openapi.yaml を参照。

3.1 UI・審査実行

メソッド・パス目的成功主エラー
GET //chat へリダイレクト301
GET /chatチャット UI(HTML)配信200
POST /draft同期パイプライン実行(旧入口)200400 / 500
POST /chat/start[?async=true]審査開始。async=true で実行基盤(Workflows / Queue)に投入し 202、同期なら完走結果を 200200 / 202400 / 502 / 503 / 500
GET /chat/status/:sessionId非同期実行の進捗 polling200404 / 410
POST /chat/cancel/:sessionId協調キャンセル(冪等)。engine=workflows は instance terminate + DO cancel-finalize 併用で即時化、engine=queue は gate 境界で consumer が中断(ADR-0101 / ADR-0120)200404
POST /chat/answer質問への回答を反映し再審査200400 / 404 / 410 / 500
POST /chat/create-pr審査完了後の PR 作成(明示操作。retroactive draft は 422 で拒否)200400 / 422 / 500

3.2 CI トリガー・診断

メソッド・パス目的成功主エラー
POST /runsCI / API からの審査トリガー(KV draft 読込 → 実行基盤に投入)。応答に現在の engine を含む202400 / 404 / 503
POST /debug/watchdog-probewatchdog 発火検証(WATCHDOG_PROBE_ENABLED=true 時のみ有効)200404
POST /debug/workflow-triggerWorkflows 実機検証用トリガー(WORKFLOW_TRIGGER_ENABLED=true 時のみ有効・本番 dormant=404)。{draft_id}{author, context} で起動、dry_run 既定 true。応答に workflow_instance_id を含む(ADR-0120 Phase a)202400 / 404 / 503

3.3 Draft CRUD(KV DRAFTS_KV

メソッド・パス目的成功主エラー
POST /drafts[?overwrite=1]起案 draft 保存(最大 100 件・1 MB/件)201400 / 409 / 413 / 507
GET /draftsdraft 一覧(metadata ベース・mtime 降順)200
GET /drafts/:iddraft 本体取得200404
DELETE /drafts/:iddraft 削除(冪等・存在しなくても 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実行記録詳細200404
GET /audit/scoring-stats採点統計(平均・標準偏差・モード分布)200

4. 審査 run 実行基盤の契約(Workflows / Queue)

HTTP ではないが外から観測可能な非同期契約として本書のスコープに含める。入口(/chat/start?async=true/runs)は WORKFLOW_ENTRYPOINT_ENABLED で次の 2 経路を切替える(ADR-0120)。HTTP 応答・session statusgateProgress の契約はどちらの経路でも同一。

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 gateLangGraph 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
DLQpipeline-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-05ADR-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)