Slopper GitHub Action: オープンソースプロジェクトへのAIスロップ投稿を防ぐ
SlopperはGitHub Actionで、AIによる低品質なプルリクエスト(スロップ)を検出しラベル付けします。複数のAIプロバイダーをサポートし、カスタマイズ可能な設定で自動クローズや承認が可能。
オープンソースプロジェクトは現在、AIが生成する「スロップ」投稿——量産されたプルリクエスト(PR)で、一見もっともらしく見えるが、微妙なバグや不必要な複雑さ、ゼロ価値の変更をもたらすもの——に脅かされています。これらのPRはCIテストを通過し、洗練された説明文を備えています。Slopperはこの問題に対処するために開発されたGitHub Actionで、AIを活用して各PRを総合的に分析します。
Slopperは、作成者の評判、コミットパターン、コード品質、行動シグナルを評価し、人間のレビュアーが見逃しがちな問題を浮き彫りにします。マージをブロックすることはなく、代わりに情報提供とラベル付けを行い、最終判断はメンテナーに委ねます。
このツールは5つのAIプロバイダーをサポートしています:OpenAI(デフォルトでgpt-4o)、Anthropic(claude-sonnet-4-6)、Vertex AI、Groq、Gemini。ユーザーは既存のAPIキーに応じて選択できます。デフォルトモデルはmodel入力で上書き可能です。
Slopperの検出パターンは、curl、Linuxカーネル、Godot、Jazzband、Node.jsなどのメンテナーから報告された実際のインシデントに基づいています。品質シグナルには、存在しないバグを修正するPR(偽の修正)、構文的には正しいが論理エラーを含むコード(書式ノイズ)、汎用的なコミットメッセージとPR説明(ボイラープレート膨張)、価値のないリファクタリング、空白やフォーマットの変更を意味のある改善に見せかけるもの(外見的偽装)などがあります。作成者シグナルとしては、短期間に多数の無関係なリポジトリにPRを送るスプレーアンドプレイ、信頼を築いてから重要なインフラを狙うレピュテーションファーミング、新規アカウントの急増、休日や週末のPR burst、レビューコメントへの無応答、説明文と実際の差分の不一致などが含まれます。セキュリティ面では、Base64や16進数エンコード、evalやFunctionコンストラクタの使用、ハードコードされたシークレット、Raw IPへのURL、CIワークフローの改ざん、依存関係のハイジャックなどを監視します。
設定はリポジトリルートの.slopperファイル(YAMLまたはプレーンテキスト)で行います。信頼できる作成者をホワイトリストに登録できるvouchedリスト、自動クローズ/承認のしきい値、リスクレベル境界、無視するパス、PR衛生ルール(説明必須、Issueリンク必須、変更ファイル数の上限、初回投稿者のブロック)を定義できます。
パイプラインは、.slopper設定の読み込み、vouchチェック、データ収集、AI分析、ラベル決定、コメント投稿、自動アクションの順に実行されます。ラベルは分析結果から決定論的に計算され、リスクレベル、承認、vouch、初回貢献者、CI変更、依存関係変更、セキュリティレビューなどがあります。
メンテナーはPRにコメント「/slopper vouch」を投稿することで、信頼できる作成者を永続的にホワイトリストに追加できます。Slopperはコメント投稿者がCODEOWNERSまたは管理者権限を持つことを確認し、.slopperファイルを更新します。高い信頼度の作成者には、Slopperが積極的にvouchを提案します。
PRコメントにはリスクスコア、信頼度、発見の概要、レビュー提案リストが含まれ、折りたたみ可能なセクションで詳細を示します。再実行時にはコメントが更新され、重複は発生しません。
Slopperは4つの出力を提供します:risk-score(0~10)、risk-level、confidence、labels。これらを後続のワークフローステップで使用できます。このプロジェクトはMITライセンスで公開され、TypeScriptで開発されており、GitHub Marketplaceから入手可能です。