| id | review-criteria-integrity |
| name | Review Criteria Integrity レビュー基準・品質ゲートの自己弱体化検出 |
| description | 差分が「その差分自身を審査するレビュー基準・品質ゲート」を弱めていないかを diff-time で検出する。Check 1 レビュールールの削除・弱体化(.river/rules.md / .river/rules.d/*)、Check 2 実行時コンフィグの閾値・ゲート緩和(.river-review.{json,yaml,yml} の review.severity 引き下げ / exclude 拡大 / memory.suppressionEnabled 無効化 / selection.skills.exclude 追加)、Check 3 suppression entry の新規追加、Check 4 lint・静的解析設定からのルール削除や無効化、Check 5 branch protection・required check の緩和、の 5 Check を対象とし、これらが機能変更と同一 PR に混在し、かつ意図の宣言が無い場合に指摘する。report-only。workflow の permissions / action pin は gha-workflow-security、既存 suppression entry の使い分けは suppression-feedback、設定ファイルの一般的妥当性は config-json、.only / .skip / @ts-ignore / @ts-nocheck は heuristic-review.mjs の決定論検出器、リファクタと機能追加の混在は behavior-structure-separation へ委譲する |
| version | 0.1.0 |
| category | midstream |
| phase | midstream |
| applyTo | [".river/rules.md",".river/rules.d/**/*.md",".river-review.{json,yaml,yml}",".river/**/*.{json,yaml,yml}","**/.eslintrc*","eslint.config.{js,mjs,cjs,ts}",".textlintrc*","**/*textlintrc*","**/.textlintignore",".markdownlint*","**/tsconfig*.json",".github/workflows/**/*.{yml,yaml}",".github/**/*.{yml,yaml,json}"] |
| tags | ["review-criteria-integrity","review-definition","quality-gate","rules-provenance","self-weakening","suppression","midstream"] |
| severity | major |
| inputContext | ["diff","prDescription","fullFile"] |
| outputKind | ["findings","questions"] |
| modelHint | high-accuracy |
| dependencies | ["code_search"] |
Origin / 由来
inspired by https://zenn.dev/nnku/articles/f6c7a62b78a47e
上記はレビュー基準の出所を固定する設計の紹介であり、本文の転載や著者による endorsement を含まない(nominative fair use)。
取り込むのは 「差分が自分のレビュー基準を弱めている」ことをレビュー観点として指摘する という一点に限る。記事が提示する仕組み(二層 Definition・blob SHA 記録・fallback 規則)は移植しない。それらは config schema と run record の変更を伴う別スライスであり、docs/adr/005-review-learning-loop-incremental-extension.md の「外部記事の自動化度をそのまま持ち込まない」前例に従って設計から分離する。
命名は skills/README.md Naming Q0–Q5 に従う。Q0 で「概念の再実装」に分類されるためリネームが既定となり、Q1 では原語 Review Definition が本リポジトリの既存語彙(.river/rules.md / rules / policy)と衝突する。Q2 で役割が変わる(記事は基準解決アルゴリズムの設計、本 skill はレビュー観点)ため、Q2 でリネーム確定とし、既存の *-integrity 命名ファミリ(fix-scope-integrity / plangate-plan-integrity)に揃えた review-criteria-integrity を付与した。原語は tags の review-definition に残す。
Pattern declaration
Primary pattern: Reviewer
Secondary patterns: Inversion
Why: 基準の弱体化はパターンとして拾えるが、「弱体化かどうか」と「正当な緩和か」の判定は意味的であり、比較基準(弱体化前の基準・宣言された意図)が discover できない差分では実行を止めるゲートが必要である。
Goal / 目的
レビュー基準・品質ゲートは被レビューエージェントの書込権限内にあり、PR 内で .river/rules.md を弱めた変更は、その PR 自身のレビュー基準に即時反映される(pages/explanation/security-model.md §「レビュー基準の出所」)。この信頼境界を diff-time の観点として可視化する。
次の 5 Check のいずれかに該当する変更が、機能変更と同一 PR に混在し、かつ意図の宣言が無い場合に指摘する。
- Check 1(レビュールール):
.river/rules.md / .river/rules.d/* の基準の削除・条件の弱体化。
- Check 2(実行時コンフィグの閾値・ゲート):
.river-review.{json,yaml,yml} の review.severity 引き下げ(strict → normal / relaxed)、exclude.files の拡大、exclude.prLabelsToIgnore の追加、memory.suppressionEnabled: false、selection.skills.exclude への追加、selection.packs からの削除。
- Check 3(suppression entry): suppression entry の新規追加(
river suppression add 相当の登録差分)。
- Check 4(lint・静的解析設定): lint / 型チェック設定からのルール削除・無効化(ESLint rule の
off 化や削除、tsconfig の strict 系フラグの無効化、textlint / markdownlint のルール削除)。