メインコンテンツまでスキップ

決定論的検出器の評価レポート(再現可能)

River Review の決定論的(LLM 非依存)なヒューリスティック検出器が「何を検出するか」「何を誤検出しないか」を、再現可能な fixture 回帰で示すレポートです。掲載する結果は、誰でも同じコマンドで再現できます。

LLM 駆動のレビューは実行ごとに結果がぶれます。一方、決定論的な検出器は同じ入力に対して同じ結果を返すため、fixture の回帰テストで品質を機械的に担保できます。River Review はこの層を canary(誤検出パターン集)で守り、修正した誤検出が再発しないようにしています。

対象と方法

  • 検出器: security-basic / logging-observability / test-existence / coverage-gap である。いずれもオフライン(--offline / rules-only)で動き、API キーを必要としない。
  • fixture: 検出できるべきケース(true positive)と、誤検出してはならない guard ケース(false-positive 防止)の両方を含む。
  • 判定: 各 fixture の期待値(mustIncludemaxFindings)を満たすかを機械的に検証する。
  • 出典: ケース定義は tests/fixtures/review-eval/cases.json にある。

結果(2026-07-05 時点)

13 件中 13 件が PASS しました。内訳は次のとおりです。

カテゴリ検出器検出ケースguard(誤検出防止)
secretssecurity-basic314
observabilitylogging-observability213
teststest-existence coverage-gap516
合計10313

guard ケースは、安全なパターン(例: 秘密情報ではなく process.env 参照、ログ付きの catch、テストファイルも変更済み)を誤って指摘しないことを確認します。これらは既知の誤検出の再発を防ぐ canary として機能します(#1070)。

再現方法

次のコマンドで、上記の結果をそのまま再現できます。決定論的なので何度実行しても同じ結果となり、API キーも不要です。

npm run eval:fixtures

各ケースは [PASS] または [FAIL] として出力されます。ケースを追加・変更したい場合は tests/fixtures/review-eval/cases.json を編集してください。

このレポートの範囲(正直な限定)

  • 対象は決定論的な検出器のみである。LLM 駆動スキルの精度(precision / recall)はここでは測定していない。
  • 掲載値は品質の一部に過ぎず、実運用では自分のリポジトリの実際の PR で試して確かめることを推奨する。
  • ベンダーが自己申告するベンチマークとは異なり、第三者が同じコマンドで検証できる点を重視している。

関連ドキュメント