LLM triage 精度 (Light / Standard / Critical の 3 mode 分類) を GT (人手 verdict) と突き合わせて評価する mini app。ADR-0102 (Tier pipeline review depth) と ADR-0135 (layer review depth by mode) の accepted rate と label 精度を継続観測する手段。

決定根拠: ADR-0102 (docs/adr/0102-tier-pipeline-review-depth.md) と ADR-0135 (docs/adr/0135-layer-review-depth-by-mode-in-decision-pipeline.md)。実装 SSoT: drp/src/adr_triage_eval/ (drp session 54-55 shipping · PR #4221 skeleton · PR #4229 Phase 2 本実装)。

目的

  • LLM triage の 3 mode 分類が代表取締役の判断 (= GT) と一致しているか、confusion matrix + overall accuracy で可視化する
  • ADR-0180 の起案漏れ検知 mini app (adr_omission_report/) と同型の pattern で、月次 export を PR 起票して SSoT 化する

前提

項目
本番 URLhttps://drp.bizlp.dev/adr-triage-eval/
feature flagADR_TRIAGE_EVAL_ENABLED=true (drp secret)
GitHub PATGITHUB_PAT_ADR_EVAL (= adr-eval と共用 · repo scope)
認証Cloudflare Access (代表取締役 email 経由)
KVKV_ADR_TRIAGE_EVAL (key format: adr-triage-eval:{ADR-NNNN})
実装 shippingPR #4229 (5022fff2 · deploy success 2026-07-03T06:13:14Z)

GT 記入手順

  1. https://drp.bizlp.dev/adr-triage-eval/ に browser access (代表取締役 email · Cloudflare Access 経由)
  2. UI 上部の filter checkbox で「保存済み ADR を非表示」を on → 未記入 ADR に集中
  3. accepted ADR 一覧 (adr-index.json から自動取得) の各行で 正解 mode dropdown (Light / Standard / Critical) を選択
  4. POST /save が KV に自動保存 (行単位 progressive save · KV loss しても adr-index SSoT は無傷)
  5. 全件記入後、下部の「export → PR 起票」button で月次 export PR を起票

confusion matrix 解釈

3×3 の confusion matrix を UI 上部の metrics card に表示する。

意味
行 (LLM)実際に LLM が下した mode 判定
列 (GT)代表取締役が下した正解 mode
対角要素一致 (TP)
非対角不一致 (FP = LLM 過剰 / FN = LLM 過少)

派生指標:

  • precision by mode = 対角要素 / row 合計 (例: LLM が Light と判定した中で GT=Light の率)
  • recall by mode = 対角要素 / col 合計 (例: GT=Light の中で LLM が Light と当てた率)
  • overall accuracy = 対角合計 / 全 sample

閾値と目標は本 mini app 稼働 3 ヶ月分のデータが揃った後に別 ADR で決める (現状 draft 未起票のため明示不要)。

export 手順

  1. UI 下部の「export → PR 起票」button を押す
  2. POST /export が 4 step で実行される (drp/src/adr_triage_eval/github_api.ts createTriageExportPr)
    1. contents GET (docs/_internal/06_ops/adr_triage_eval_report/YYYY-MM.md の現状取得 · 無ければ空扱い)
    2. 内容更新 (KV から全 GT を読み出して markdown table に反映)
    3. branch 作成 (docs/adr-triage-eval-export-YYYY-MM)
    4. PR 起票 (gh api 経由)
  3. 起票された PR は doc 側で review + merge

障害時 fallback

症状原因対応
410 Gonefeature flag offwrangler secret put ADR_TRIAGE_EVAL_ENABLED true (drp/ で実行)
500 Internal Server ErrorPAT missing または adr-index.json 取得失敗GITHUB_PAT_ADR_EVAL 再登録 · adr-index.json 存在確認
401 / 403CF Access token 期限切れ or CF-Access header 未付与CF Access で再認証
POST /save で KV write 失敗KV namespace 未 bindingdrp/wrangler.toml の [[kv_namespaces]] binding = "KV_ADR_TRIAGE_EVAL" を確認

撤退条件 (draft 起票時に §8 として本 doc から引用予定)

  • 記入時間 > 25 分 (50 件基準) が 2 ヶ月連続
  • KV loss が 3 ヶ月に 1 回以上
  • GitHub API rate limit (5000/h) 超過
  • drp workers CPU time 10ms 平均を 2 週間連続で超過
  • 撤退時: /adr-triage-eval endpoint 削除 · KV namespace purge · markdown 版 (adr_triage_eval_report/YYYY-MM.md の手編集) に戻す

関連

  • ADR-0102 (docs/adr/0102-tier-pipeline-review-depth.md) — LLM triage の 3 mode 分類根拠
  • ADR-0135 (docs/adr/0135-layer-review-depth-by-mode-in-decision-pipeline.md) — layer review depth の mode 別配分
  • drp/src/adr_triage_eval/ (6 file · router / ui / fetch_adrs / compute_metrics / kv_store / github_api)
  • 先行類似 mini app (docs/_internal/06_ops/adr_omission_report/README.md) — adr-eval (ADR-0180 refined_by) mini app の月次 GT 記入 手順
  • docs/_internal/05_how-to/observability.md §4 GT 評価画面 — 兄弟 mini app の観測性 SSoT