役割: 審査 run / pipeline session のライフサイクル契約(EDD-004)の正典。状態名・遷移条件・終端の意味は 外から観測可能な契約(polling API の status / gateProgress、PR 起票の有無)であり、変更は L3(id_conventions.md §3)。旧 README §アーキテクチャ の State 図(mermaid)から移設(strangler-fig Phase 2 / ADR-0117)。 図の集約原則との関係: アーキテクチャビュー層(文書カタログ 第 5 層)は「図はビュー層集約・各層から参照のみ」が原則だが、本 State 図は状態機械そのものが外部契約の正典であるため例外的に本書(第 3 層)が原図を持ち、ビュー層・README からは参照リンクとする(移設先判断の記録は 文書カタログ)。

1. State 図(Pipeline session lifecycle、ADR-0066 実装済)

各 Gate の進捗を session DO で持つ、ADR-0066(実装済)の async polling 構造。状態名・遷移・終端の意味は 実行基盤(Workflows / Queue)に依存せず同一。下図の queued → running 駆動と retry/失敗の機構のみが engine で異なる(§3 注記・ADR-0120)。本番は 2026-06-05 に Workflows へ切替済み

stateDiagram-v2
    [*] --> queued: POST /chat/start ?async=true
    queued --> running_triage: pickup (Workflows step.do / Queue consumer)
    running_triage --> rejected: needsAdr=false
    running_triage --> running_pregate: needsAdr=true
    running_pregate --> rejected: 塊の混在/対症療法/行き先なし前提を検出 (ADR-0142)
    running_pregate --> running_socratic: PASS / INVALID(評価不能は通す)
    running_socratic --> running_body: 盲点注記のみ・差戻しなし (ADR-0071)
    running_body --> running_scoring
    running_scoring --> rejected: score < threshold
    running_scoring --> running_cross_validation
    running_cross_validation --> rejected: critical 盲点×Must×undermines (持続却下は reject 温存)
    running_cross_validation --> running_consistency
    running_cross_validation --> running_finalize: escalate (Part4 bounded rounds)
    note right of running_cross_validation
        Part4 (ADR-0109): trailing 連続却下で盲点が移動 (goalpost) or
        連続却下が round-cap (CROSSVAL_ROUND_CAP 既定3) 到達 →
        rejected=false で PR 起票 (slug+numbering+webhook 実行)、
        本文に「Known Limitations / Escalated Residual Risks」節
        (HITL マーカー) を付与。人間の merge=受理 / close=却下 が終端。
        crossValidationEscalated / crossvalStopReason / crossvalRoundCount /
        residualRiskTitles を telemetry に記録 (schema v8)
    end note
    running_consistency --> rejected: CONFLICT 検出
    running_consistency --> running_review
    running_review --> running_finalize
    running_finalize --> complete: numbering + webhook 完了
    rejected --> [*]
    complete --> [*]
    note right of running_review
        3 vendor 並列実行
        (Promise.all、差戻しなし)
    end note
    state error_handling <>
    running_triage --> error_handling: LLM error
    running_socratic --> error_handling: LLM error
    running_body --> error_handling: LLM error
    error_handling --> retry_gate: step/Queues retry
    error_handling --> failed_terminal: 上限到達 / schemaVersion 不一致
    retry_gate --> running_triage: gate 別 retry (完了済み step はキャッシュ返却)
    failed_terminal --> [*]

凡例:

  • running_* = Gate 実行中、client polling で gate_progress を取得可能
  • running_pregate = ② 受付プリゲート (Gate 0a / ADR-0142) 実行中。triage 通過後・socratic の前に起案の分析破れ (塊の混在・対症療法・行き先のない前提) を検査し、FAIL は rejected で差戻し、PASS と INVALID (評価不能) は socratic へ進める。graph 分岐で OFF 可能・本番稼働 2026-06-15
  • rejected = Gate 0 / 受付プリゲート / 4 / Cross-Validation / 2 の差戻し条件 (起案者にフィードバック返却)。Gate 1 は ADR-0071 で情報提供型に変更され差戻ししない
  • Cross-Validation 却下のうち goalpost ループ (trailing 連続却下・盲点が毎回移動) または round-cap (CROSSVAL_ROUND_CAP 既定3 到達) と判定されたものは Part4 (ADR-0109)rejected=false に降ろされ、slug+numbering+webhook を実行して PR として起票される (complete)。本文に「Known Limitations / Escalated Residual Risks」節 (HITL マーカー) が付与され、人間の merge=受理 / close=却下 が最終終端crossValidationEscalated / crossvalStopReason / crossvalRoundCount / residualRiskTitlestelemetry に記録。同一盲点の持続却下は round-cap より優先して rejected を温存 (FN=0 維持)
  • ⚠️ 旧記述訂正: Part2 単独時は rejected のまま escalate フラグを付与する挙動だったが、Part4 で PR 起票 (rejected=false) に変更された。escalate は現在「新しい成果物終端」である
  • error_handling / retry_gate / failed_terminal = engine 別の再実行・失敗終端機構(§3 注記)。Workflows(本番 active): step の durable retry — 完了済み step はキャッシュから返り再実行されない(LLM 多重課金が構造的に発生しない)。checkpoint schemaVersion 不一致は retry せず即 failed 終端 + telemetry 記録(ADR-0120 決定 1)。Queue(rollback 先): ADR-0066 の Cloudflare Queues 自動 retry(< 3)+ 3 回失敗で Dead Letter Queue(pipeline-queue-dlq

2. session status の規範定義(polling API の契約)

GET /chat/status/:sessionId が返す statusAPI 仕様書 / openapi.yamlSessionStatus):

status意味遷移元終端?
queued実行基盤に投入済・未開始(Workflows instance 起動待ち / Queue consumer 未 pickup)POST /chat/start ?async=true / POST /runs
runningいずれかの Gate 実行中(gateProgress で gate 単位の pending/running/done/failed を露出)queued
complete全ゲート完了(差戻しによる完了を含む。result に最終 state)running
errorgate 失敗(step/retry 上限超過・schemaVersion 不一致)または watchdog 発火。error.gate / error.message + partialResults(ADR-0089)を露出running / queued
cancelled協調キャンセル成立(POST /chat/cancel)。engine=workflows は instance terminate + DO cancel-finalize、engine=queue は consumer が gate 境界で中断(ADR-0101 / ADR-0120)queued / running
  • session は TTL 24 時間(expiresAt)。期限後の polling は 410。
  • complete であっても審査結果が差戻し(result.rejected=true)の場合がある。HTTP/session の終端と審査判定は別軸

3. Watchdog(無進捗検知 / ADR-0103 EC-3)

per-session DO alarm が無進捗を検知し status: errorwatchdog-timeout)へ強制遷移させる:

監視対象閾値定義
queued のまま放置(Workflows: instance 起動待ち滞留 / Queue: consumer pickup 不全)30 分QUEUED_STUCK_MSsrc/do/session_watchdog.ts
running のまま更新なし(gate 進行停止)20 分RUNNING_IDLE_MS同上。健全な run は gate ごとに updatedAt 書込 → alarm リセットされるため、単一 gate 所要が閾値未満なら誤発火しない

検証プローブは POST /debug/watchdog-probe(フラグ有効時のみ)。運用手順は operator_guide §7.10。 Workflows engine 固有の運用(リアルタイムアラート running instance >20・instance status API の週次アサート・本番切替/rollback 手順)は operator_guide §7.13、入口切替 flag は §7.12 を参照。

4. 終端セマンティクス(人間承認との接続)

  • complete + PR 起票 = ADR は Status: ProposedAccepted / Superseded への遷移は代表取締役のみ(Branch Protection で強制)。
  • Cross-Validation escalate 終端(ADR-0109 Part4)= 残余リスク節 + HITL マーカー付き PR。人間の merge=受理 / close=却下が最終終端であり、自動 reject はしない(同一盲点の持続却下のみ reject 温存 = FN を作らない)。

変更履歴

日時変更
2026-06-16② 受付プリゲート(running_pregate / Gate 0a・ADR-0142)を State 図に追加 — running_triage→running_pregate→running_socraticrunning_pregate→rejected の遷移・凡例を追記、EDD-004 covers に SR-012 を追加。本番稼働 2026-06-15 を反映
2026-06-05ADR-0120 本番切替(Workflows・2026-06-05)に追従 — State 図と status/watchdog を engine 非依存に明記し、queued→running 駆動・retry/失敗終端(Workflows durable retry + schemaVersion 不一致即 failed / Queue retry+DLQ)・キャンセル機構を engine 別に併記
2026-06-05初版 — 旧 README §8.1 図 3 State 図 + 凡例(2026-06-05 時点 L167-218)を移設し、session status / watchdog / 終端セマンティクスの規範定義を追加(ADR-0117 Phase 2)