
GitHub 上のフェイクエンゲージメントを自動検出・追跡 — 日次 CI、インフラ不要
GitHub 上での偽エンゲージメントの自動検出と追跡
JS Labs プロジェクト —
AI Slop Intelligence イニシアチブの一部。
毎日実行。不審なアカウントをすべてスコアリング。協調的なボットキャンペーンを検出。
侵害されたリポジトリに直接 issue を登録し、メンテナーが対処できるようにします。
このプロジェクトを支援する
BTC 3QjWqhQbHdHgWeYHTpmorP8Pe1wgDjJy54
ETH 0x5851e6145F4773d1585b8686095FB16E368a4dA1
ZEC t1KSR5YkNPbjqRSCoLKo5AddFWdm9Kzxh1B
GitHub のスターは信頼のシグナルです。開発者はそれを頼りに、何を評価し、何に依存し、何を推奨するかを決めます。そのシグナルは、組織的に改ざんされています。
2024年から2026年にかけてのAIブームの最中に、低品質でしばしば悪意のあるリポジトリのために信頼性を製造するボットファーム産業が出現しました。48時間で800スターを獲得したプロジェクトは、検索結果をスキャンする開発者には正当なものに見えます。そこがポイントです。偽エンゲージメントの目的はスターそのものではなく、そのスターが生み出す社会的証明(ソーシャルプルーフ)と、その社会的証明が影響を与える下流の意思決定です。
そのパターンは識別可能です。同じ週に作成され、自己紹介(bio)がなく、フォロワーもおらず、オリジナルのリポジトリもないアカウント群が、2時間の間に同じ15のリポジトリにスターを付けています。1つのキャンペーンではなく、毎日、何千ものアカウントにわたって、数十のキャンペーンが同時に実行されています。データは、185人中185人のエンゲージャーがボットであるリポジトリを示しています。100%の偽装率です。トレンド入りした全体が、何の根拠もなく構築されています。
phantomstars は、この問題が解決可能(tractable)だからこそ構築されました。GitHub の公開 API の信号対雑音比は、今のところ、協調キャンペーンが明確な指紋を残すほど十分に高いままです。このプロジェクトはその指紋を読み取り、生データを公開し、影響を受けたリポジトリのメンテナーに直接通知します。
これは、JS Labs におけるより広範な AI Slop Intelligence の取り組みの一部であり、低品質のAI生成コンテンツが開発者エコシステムに氾濫することの仕組みと測定可能な影響に関する継続的な研究です。偽エンゲージメントは周辺的な問題ではありません。それは、スロップ(低品質AI生成コンテンツ)を実際のユーザーの目に届ける流通メカニズムなのです。
phantomstars は、毎日の GitHub Actions ジョブを実行します。そのジョブは以下を行います:
r/osinttools と r/coolgithubprojects の最近の Reddit 投稿から、直近 2日間 の GitHub リポジトリリンクを抽出して、追加の候補リポジトリをシードしますサーバー不要。データベース不要。インフラ費用なし。
はい。
リポジトリの偽装率が40%を超えるか、協調キャンペーンが検出された場合、phantomstars はそのリポジトリに直接 issue を開きます。issue には、完全な被疑者テーブル、キャンペーンへの参加状況、複合スコア、アカウント作成日が含まれます。メンテナーが調査して GitHub に報告するために必要なすべてが揃っています。
標的のリポジトリで issue が無効になっている場合、通知は静かにスキップされ、スキャンログに記録されます。
はい。
owner/repo 形式でリポジトリを提出し、対象を絞ったスキャンを実行します。なぜ分けているのか:
はい。自分のアカウントが data/suspects.jsonl に表示され、分類が正しくないと思われる場合は、提供されているテンプレートを使用して 誤検知の issue を開いて ください。報告は、許可リストへの追加前に手動でレビューされます。許可リストは data/allowlist.txt に保存されており、そこにリストされたアカウントは、将来のすべてのスキャンと被疑者台帳から除外されます。
キャンペーンID(例:c-a3f9b2e1)は、そのキャンペーンのメンバーログインのソート済みセットの SHA-256 ハッシュから導出される決定論的な8文字の16進数フィンガープリントです。同じアカウントグループは、独立したスキャン実行間で同じキャンペーンIDを生成するため、長期的な追跡が可能です。これはリポジトリ名でも、ユーザー名でも、外部識別子でもありません。
安定性: ID は、キャンペーンのメンバーセットが変わらない限り安定しています。スキャンの合間にボットが追加されたり停止されたりすると、メンバーシップが変わったため ID も変わります。これは想定どおりであり、ボットファーム構成の現実世界での変化を反映しています。
はい。すべてのアカウントの作成日は GitHub GraphQL API(createdAt フィールド)から取得され、各被疑者レコードに account_created_at として保存されます。また、これはアカウント年齢スコアへの主要な入力であり、偽アカウントにとって最も強力な単一シグナルです。エンゲージメントから2日以内に作成されたアカウントは、年齢だけでスコア1.0になります。
個々のスコアには、意味のある誤検知率が伴います。プロフィールが乏しい新しい開発者は、正当に0.75以上になることがあります。このツールは、issue を登録する前にキャンペーンレベルの証拠を要求することでこれを考慮しています。単一の不審なアカウントでは不十分です。同じ週に作成され、すべて0.75以上でスコアリングされ、90分以内にすべてエンゲージした40以上のアカウントの協調クラスタは、別物です。そこで確信が実行可能になります。
データは常に確率的です。issue の本文にもその旨が明示されています。目標は、メンテナーにシグナルと生の証拠を提供し、彼ら自身が判断できるようにすることです。
| 日付 | スキャン数 | 偽装の可能性 | 不審 | キャンペーン | 新規偽装 (24h) |
|---|---|---|---|---|---|
| 2026-06-16 | 1846 | 221 | 1625 | 56 | 190 |
| 2026-06-15 | 2274 | 418 | 1856 | 61 | 397 |
| 2026-06-14 | 1953 | 355 | 1598 | 44 | 310 |
| 2026-06-13 | 2012 | 301 | 1711 | 47 | 251 |
| 2026-06-12 | 2298 | 336 | 1962 | 57 | 300 |
| 2026-06-11 | 1957 | 385 | 1572 | 42 | 356 |
| 2026-06-10 | 2043 | 687 | 1356 | 50 | 665 |
| 2026-06-09 | 2199 | 690 | 1509 | 44 | 632 |
| 2026-06-08 | 1913 | 450 | 1463 | 50 | 424 |
| 2026-06-07 | 1797 | 658 | 1139 | 30 | 618 |
| 2026-06-06 | 2625 | 712 | 1913 | 40 | 620 |
| 2026-06-05 | 2403 | 673 | 1730 | 53 | 617 |
| 2026-06-04 | 2237 | 441 | 1796 | 41 | 367 |
| 2026-06-03 | 2331 | 488 | 1843 | 53 | 431 |
| 2026-06-02 | 2795 | 773 | 2022 | 37 | 616 |
| 2026-06-01 | 2490 | 533 | 1957 | 39 | 355 |
| 2026-05-31 | 2302 | 458 | 1844 | 32 | 280 |
| 2026-05-30 | 2576 | 530 | 2046 | 20 | 356 |
| 2026-05-29 | 2838 | 733 | 2105 | 42 | 369 |
| 2026-05-28 | 2748 | 694 | 2054 | 39 | 396 |
| 2026-05-27 | 2193 | 560 | 1633 | 32 | 491 |
| 2026-05-26 | 1930 | 236 | 1694 | 43 | 190 |
| 2026-05-25 | 1526 | 214 | 1312 | 32 | 158 |
| 2026-05-24 | 2170 | 358 | 1812 | 39 | 265 |
| 2026-05-23 | 2548 | 426 | 2122 | 43 | 317 |
| 2026-05-22 | 2318 | 340 | 1978 | 47 | 247 |
| 2026-05-21 | 1981 | 348 | 1633 | 25 | 277 |
| 2026-05-20 | 1613 | 268 | 1345 | 23 | 163 |
| 2026-05-19 | 5463 | 630 | 4121 | 67 | 442 |
| 2026-05-18 | 8838 | 670 | 7950 | 128 | 340 |