役割: DRP の非機能要件(NFR-)の正典。README・operator guide・各 ADR に散在していた wall time / コスト / 可用性 / FN=0 等の数値要件を集約する(ADR-0117 Phase 2)。機能要件(SR-)は システム要件定義書数値の出典: 各節に記載。出典側が改訂されたら本書を同一 PR で追従させる。

NFR-001: 長時間審査の完走性

フル審査(10 ゲート)は実測 16〜24 分かかる一方、Cloudflare Workers のエッジ実行は 100 秒(524 timeout)・preGraph 同期部は 30 秒 wall time が上限。審査はこの制約下で完走しなければならない

  • 現行充足手段: 非同期実行(Queues + DO・ADR-0066)+ triage のみ同期の preGraph 縮小(ADR-0071)
  • 無進捗の検知: queued 30 分 / running idle 20 分で watchdog が error 終端(状態遷移仕様 §3)。60 分進捗なし run の扱いは ADR-0116 §2 由来(0116 は ADR-0120 に Superseded・watchdog は 0120 決定 5 で検知機構として流用)
  • Web UI polling timeout: 10 分(exponential backoff 1s→10s)
  • 実行基盤強化: Cloudflare Workflows 移行(ADR-0120・1 step.do = 1 gate の durable execution。ADR-0116 の chunk 化案を Supersede)。Phase a/b 実装済み(本番は flag 既定 OFF・Phase c ステージング検証通過後に切替)。kill の影響は完了済み step のキャッシュ返却で封じ込め

NFR-002: 運用コスト上限

1 人法人の前提(Policy Alignment 優先順位 3「運用コスト < 実装時間」)から、基盤・LLM・維持工数に上限を置く。

  • 基盤: Cloudflare Workers Paid $5/月(CPU 30s 必要のため Free 不可)+ LiteLLM Gateway(Cloud Run、従量)
  • LLM 推論: Anthropic API 実測 月 ~$200(主要 caller は body/scoring/consistency/reviewClaude の Opus 4 ノード。prompt caching 未適用が改善候補)。Scoring N=5 Self-Consistency は約 5 倍トークン(Light は N=1 に cap・ADR-0102)
  • 維持工数: 稼働 3 ヶ月後の維持コストが 3 人日/四半期を超えたら見直し(ADR-0116 撤退条件由来・0116 は ADR-0120 に Superseded)
  • 認証強化(ADR-0110)は Zero Trust Free(50 users)内で追加金銭コストなしが制約

NFR-003: 偽陰性ゼロ(FN=0)

「ADR に残すべき起案を誤って捨てる」ことはゼロを維持する。ブロッキングゲートとして CI 強制される。

  • Gate 0 Triage: golden 26 ケース(tools/triage-eval)で FN=0 必須(ADR-0102)
  • Cross-Validation: 同一盲点の持続却下は round-cap より優先して reject 温存。escalate(goalpost / round-cap)は自動受理でなく人間判断へ送る = FN を作らない(ADR-0109)
  • FN=0 の保証範囲は自動 gate 内のみ。escalate PR 後の判断は人間(merge=受理 / close=却下)

NFR-004: 部分障害への耐性

単一 LLM プロバイダの障害・一時的失敗で ADR 起案が止まらないこと。

  • LLM 呼出: maxRetries=3(exponential backoff・全 ChatOpenAI インスタンス / ADR-0081)
  • LLM 応答パース: safeParseLlmJson<T>()llm/json_utils.ts)で code fence 除去 + try-catch + structured error log。triage / consistency / policy_alignmentJSON.parse を置換(ADR-0081 / PR #1087)
  • Gate 3: Promise.allSettled で 3 ベンダー中 1 つが落ちても残り 2 つで継続
  • Gate 1: DA/PM 片方失敗時は成功側で継続、全失敗時は skip-through、Judge 失敗時は raw findings fallback
  • Cross-Validation: エラー時 fail-open(審査を止めない)
  • 非同期実行: Queues 自動 retry(最大 3 回)→ DLQ 隔離。プロンプト KV 読込失敗は inline fallback(プロンプト仕様書 §1)
  • 最終手段: wrangler rollback + sync モード退避(README §本番運用情報)

NFR-005: 機密保全

  • マスキング fail-fast: すべての LLM 呼出は LiteLLM Gateway 経由とし、送信前に取引先名・金額・scriptId・OAuth を除去。マスキング不能時は送信せず失敗させる(litellm/masking.py
  • 認証: Cloudflare Access(Google SSO)+ Basic 認証(全ルート・例外なし)。静的シークレットの CF Access service token 化は ADR-0110(Proposed)
  • API キー: GCP Secret Manager / Workers Secrets で集中管理(リポにコミットしない)
  • Status 遷移: Accepted / Superseded は Branch Protection で代表取締役のみ

NFR-006: 審査の再現性

同一原稿に対して同一視点・同一盲点を返す(差戻し理由が run ごとに揺れて起案者を消耗させない)。

  • Gate 1 の 3 観点選択は原稿内容シードの決定的 PRNG(FNV-1a + mulberry32。SOCRATIC_DETERMINISTIC 既定 ON / ADR-0109 Part3)
  • 分類系ゲートは低 temperature + seed 固定(triage seed 42、slug temperature 0.0)
  • 採点ばらつきは N=5 Self-Consistency 多数決で抑制(ADR-0056)

NFR-007: 監査証跡の完全性

すべての審査 run は D1 telemetry_records に記録され、後から判定根拠を辿れること(会計領域の監査要件)。

  • 記録範囲: per-gate 所要時間・採点詳細・盲点 findings・cross-validation verdicts・escalate 終端(schema v8。データ定義書
  • 既知ギャップ: フル run が edge kill された場合の telemetry 喪失 — ADR-0120(Workflows 移行・冪等性は Workflows ランタイムへ委譲。ADR-0116 の冪等テーブル + authoritative result フラグ案は Superseded・不採用)で解消する。Phase a/b 実装済み・本番切替は Phase c(kill/retry 注入テスト + ステージング検証)通過後で、「二重実行 0 件・telemetry 喪失 0 件」は Phase c の完了条件
  • run 終端状態(completed / failed / cancelled / stalled)は明示記録し、watchdog 起因は識別可能にする

NFR-008: プラットフォーム容量制限の遵守

制限現状
DO storage 1 key / 1 transaction128 KBgate 出力の実測最大合計 74.9 KB(最大単一フィールドは cross_validation_verdicts 23.9 KB)で制限内(ADR-0116 §Phase 0 調査記録の実測・同記録は Superseded 後も ADR-0120 の決定根拠として参照継続。R2 オフロード不要)
KV drafts100 件・1 MB/件超過時は API が 507 / 413 を返す(API 仕様書
Queues メッセージ無料枠内現行 Queue 経路で枠内(chunk 化による ~10 倍増は ADR-0116 Superseded で消滅)。ADR-0120 本番切替後は入口が Workflows instance create に移行し Queues 依存は縮小(旧経路は rollback 用に温存)

変更履歴

日時変更
2026-06-07safeParseLlmJson<T>() を NFR-004 に追記(旧 README §12.1 から移植・経緯: ADR-0117)
2026-06-05ADR-0116 Superseded → ADR-0120(Workflows 移行・Phase a/b 実装済み)への参照更新 — NFR-001/002/007/008 の 6 箇所(冪等テーブル案の不採用を明記)
2026-06-05初版 — README・operator_guide・ADR-0066/0081/0102/0109/0110/0116 に散在していた非機能記述を NFR-001〜008 に集約(ADR-0117 Phase 2)