差分が「その差分自身を審査するレビュー基準・品質ゲート」を弱めていないかを 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-sec...
Scanned 9/2/2026
Install to Claude Code
npx -y skills add s977043/river-review --skill review-criteria-integrity --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Review Criteria Integrity?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/s977043-review-criteria-integrity)More formats (shields.io, HTML) on the badges page.
---
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 のルール削除)。
- **Check 5(branch protection・required check)**: branch protection / required status check の緩和(required check の削除、`strict` の無効化、必須レビュー人数の引き下げ)。
report-only(ADR-005)。finding / question のみを出力し、自動修正・自動マージはしない。
## Non-goals / 扱わないこと(委譲表)
- **workflow の権限・供給網**: GitHub Actions workflow の `permissions` 拡大、third-party action の未ピン留め、`pull_request_target` と untrusted checkout の組み合わせは `gha-workflow-security` が担う。本 skill が workflow ファイルを見るのは **required check の定義や品質ゲート job の削除**という文脈のみで、権限・pin・トリガーには触れない。
- **suppression entry の使い分け判断**: 既存 suppression entry を使うべきか(`accepted_risk` / `false_positive` / `wont_fix` のどれを選ぶか、HIGH_SEVERITY guard の扱い)は `suppression-feedback` が担う。本 skill は **entry が新規追加された事実と機能変更との混在**のみを見る。
- **設定ファイルの一般的妥当性**: JSON / YAML の構文・型・ベストプラクティス違反は `config-json` が担う。本 skill は **基準を弱める方向の差分**のみを見る。
- **決定論検出器がカバー済みの抑制**: `.only` / `.skip` / `xit` / `xdescribe` / `@ts-ignore` / `@ts-nocheck` は `src/lib/heuristic-review.mjs` の決定論検出器が既に検出する。本 skill はこれらを**重複指摘しない**(`.claude/rules/review-core.md` §「カスタム静的解析の False-positive 責務分界(#1070)」)。
- **AI レビュー結果の扱いそのもの**: レビュー自動化の境界(AI の指摘をどこまで自動適用するか)は `review-automation-boundary` が担う。本 skill は基準の変更差分のみを見る。
- **スコープ逸脱一般**: 指摘対応ループの scope creep / premise break は `fix-scope-integrity` が担う。本 skill は**混在の対象が「レビュー基準・品質ゲート」である場合**に限定する。
- **振る舞い変更と構造変更の混在**: リファクタ(構造変更)と機能追加(振る舞い変更)が同一 diff に混在していないかは `behavior-structure-separation` が担う。本 skill が扱う混在は**「レビュー基準・品質ゲートを弱める変更」と機能変更の組み合わせ**に限る。したがって、リファクタと機能追加が混ざっているだけで基準・ゲートに触れていないケースは本 skill の対象外であり、指摘しない。
- **rules の出所固定の実装**: blob SHA 記録・base pin・provenance 記録は skill の責務ではなく、config schema と run record の設計課題である(#1669 スライス3)。
## Pre-execution Gate / 実行前ゲート
このスキルは以下の条件がすべて満たされない限り `NO_REVIEW` を返す。
- [ ] inputContext に `diff` が含まれている。
- [ ] 差分が Check 1〜5 の対象パス(`.river/rules.md` / `.river/rules.d/*` / `.river-review.{json,yaml,yml}` / suppression store / lint・型チェック設定 / branch protection・required check 定義)のいずれかに触れている。
- [ ] **弱体化の判定基準**が discover できる。すなわち削除・変更された基準の変更前の値が差分(`-` 行)から読み取れる、または参照設定から特定できる。特定できない場合は finding を出さず question に留める。
- [ ] ビルド成果物・生成物(`dist/**`・`*.map`・lockfile・自動生成 manifest)は Gate 判定からもレビュー対象からも除外する。
ゲート不成立時の出力: `NO_REVIEW: review-criteria-integrity — レビュー基準・品質ゲートに触れる差分が無い、または弱体化の判定基準が discover できない`
## False-positive guards / 抑制条件
正当な基準変更を FP にしないため、次を厳守する。
- **基準変更のみの PR は指摘しない**: 機能変更(`src/**` 等の挙動を変える差分)が同一 PR に無く、基準の見直しそのものが PR の目的である場合は指摘しない。本 skill が問題視するのは**混在**である。
- **強化方向の変更は指摘しない**: 基準の追加、`review.severity` の引き上げ、required check の追加、lint ルールの追加は弱体化ではない。
- **意図が宣言されていれば指摘しない**: PR 本文・issue・コミットメッセージ・設定内コメントで緩和の理由と適用範囲が明示され、期限や再強化の条件が示されている場合は指摘しない。
- **リネーム・移設は指摘しない**: ルールの別ファイルへの移動、`rules.d/` への分割、required check 名の変更に伴う登録差し替えなど、**基準の総量が減っていない**変更は弱体化ではない。差分の削除側だけを見て判断しない。
- **上流由来の変更は指摘しない**: 依存パッケージの preset 更新や自動生成物の追随でルール集合が変わった場合は、意図的な緩和ではない。
- **委譲先の領分は指摘しない**: `.only` / `.skip` / `@ts-ignore` / `@ts-nocheck`・workflow の permissions / action pin・suppression entry の種別選択は、それぞれ決定論検出器・`gha-workflow-security`・`suppression-feedback` の責務であり、本 skill からは指摘しない。
- **discover できなければ question**: 変更前の基準・宣言された意図を差分・PR 本文・参照設定から特定できない場合は、finding ではなく question とする(false-positive-first)。
- **指摘上限**: Check ごとに finding と question の合算で最大 2 件、全体で最大 5 件とする。保持の優先順は findings(severity 降順)→ questions(info 相当)とし、上限超過分は優先度の低い側(questions → 低 severity findings)から切り捨てる。
## Rule / ルール
### 検出ロジック
1. **Check の特定**: 差分が Check 1〜5 のどれに該当するかを判定する。該当 Check のみ調査する。
2. **方向の判定**: 変更前後を比較し、基準が**弱まる方向**かを判定する。削除行と追加行の両方を読み、移設・リネームによる見かけ上の削除を除外する。
3. **混在の確認**: 同一 PR に機能変更(実行されるコードの挙動を変える差分)が含まれるかを確認する。含まれない場合は指摘しない。
4. **正当化の棄却**: 緩和の理由・適用範囲・再強化条件が PR 本文・issue・コミットメッセージ・設定内コメントに残っていないことを確認する。残っていれば指摘しない。棄却の可否が判断できなければ question とする。
5. **resolution の付与**: 各 finding に解消手順を添える。「基準変更を別 PR へ分離する」「緩和の理由・適用範囲・再強化条件を PR 本文に明記する」「緩和ではなく suppression entry として記録する」のいずれかを明示する。
### severity 較正
- 品質ゲートの無効化(`memory.suppressionEnabled: false`・required check の削除・skill の一括除外)が機能変更と混在し、その PR 自身の審査を素通りさせるものは `blocker`。
- 個別のルール削除・閾値引き下げ・`exclude` 拡大が機能変更と混在し、merge 前に分離または宣言すべきものは `warning`。
- 影響範囲が狭く(単一ファイルの lint ルール 1 件の `off` 化など)、merge 後の follow-up で足りるものは `nit`。
- 変更前の基準や意図の宣言が discover できず確証が持てないものは question(`info` 相当)。
## Evidence / 根拠の取り方
- finding の `file:line` は差分内にアンカーする。差分外の推測に基づく指摘は question として返す。
- 弱体化の判断に使った変更前の値(削除された `-` 行・変更前の設定値)と、混在を確認した機能変更側の `file:line` を併記し、再現可能にする。
- 「基準を弱める意図があった」と断定しない。混在という構造と、宣言が見当たらない事実のみを述べる(`.claude/rules/review-core.md`)。
## Output / 出力フォーマット
すべて日本語。標準の finding フォーマットに従い、各指摘に `check`(1〜5)と `resolution` を含める。
```text
(review-criteria-integrity):1: [要約] 最も影響の大きい弱体化は〈1文〉
<file>:<line>: [Review criteria weakening] <タイトル>
check: 1 | 2 | 3 | 4 | 5
変更前の基準: <削除・変更された基準の変更前の値>(アンカー: `<file>:<line>`)
弱体化内容: <どの方向にどれだけ弱まったか>
混在する機能変更: <同一 PR の機能変更側 file:line>
Severity: blocker | warning | nit(較正基準に従う)
resolution: <解消手順>(別 PR へ分離 / 緩和理由と再強化条件を明記 / suppression entry として記録 のいずれか)
```
## Good / Bad Examples
### Good
```text
.river/rules.md:12: [Review criteria weakening] レビュー基準の削除が機能変更と同一 PR に混在している
check: 1
変更前の基準: 「外部入力を扱う関数には入力検証を必須とする」(アンカー: .river/rules.md:12 の削除行)
弱体化内容: 入力検証を必須とする基準が削除され、同 PR で追加された外部入力の受け口が本基準の審査対象から外れる
混在する機能変更: src/api/webhook.mjs:31(新規の外部入力ハンドラを追加)
Severity: blocker
resolution: 基準の削除を別 PR へ分離するか、削除理由と代替の担保(既存の検証層など)を PR 本文に明記する
```
### Bad
```text
レビュー基準を勝手に緩めています
```
(Check の特定なし、変更前の値のアンカーなし、混在の確認なし、resolution なし、意図の断定と攻撃的な口調)
## 評価指標(Evaluation)
- 合格基準: Check が特定され、変更前の基準が差分内のアンカーで示され、機能変更との混在が具体的な `file:line` で確認され、正当化(宣言・移設・強化方向・上流由来)の可能性が棄却され、resolution が示されている。基準変更のみの PR や強化方向の変更では指摘しない。
- 不合格基準: 混在を確認せずに基準の変更だけで指摘している、移設・リネームを削除と誤認している、委譲先の領分(`.only` / `@ts-ignore`・workflow permissions・suppression entry の種別選択)を重複指摘している、意図を断定している、resolution が無い。
## 人間に返す条件(Human Handoff)
- 緩和が意図的か事故かの判別に、PR 作成者の説明や運用上の合意が必要な場合。
- 品質ゲートの緩和が組織の運用ポリシー(branch protection の管理主体など)に関わり、merge 可否の判断がチーム / 管理者を要する場合。
## References
- `skills/downstream/gha-workflow-security/SKILL.md` — workflow の権限・供給網(委譲先)
- `skills/midstream/suppression-feedback/SKILL.md` — suppression entry の使い分け(委譲先)
- `skills/midstream/config-json/SKILL.md` — 設定ファイルの一般的妥当性(委譲先)
- `skills/midstream/fix-scope-integrity/SKILL.md` — 指摘対応ループのスコープ逸脱(隣接)
- `skills/midstream/behavior-structure-separation/SKILL.md` — 振る舞い変更と構造変更の混在(委譲先)
- `pages/explanation/security-model.md` §「レビュー基準の出所」 — rules の信頼境界(SSoT・#1669 スライス1)
- `src/lib/heuristic-review.mjs` — `.only` / `.skip` / `@ts-ignore` / `@ts-nocheck` の決定論検出器(重複指摘しない境界)
- `src/lib/rules.mjs` — `.river/rules.md` と `.river/rules.d/*` の読み込み実装
- `pages/reference/config-schema.md` — `.river-review.json` の項目とデフォルト
- `.claude/rules/review-core.md` §「カスタム静的解析の False-positive 責務分界(#1070)」 — 意味的判断と静的解析の分界
- `docs/review/output-format.md` — 重要度ラベルと出力形式(SSoT)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!