コミット集計に作者の絞り込みがなかった
概要ページのヒートマップのコミット数が 412 から 376 に下がり、いくつかの日は段も一つ下がった。この期間に他人のコミット 39 件を除外し、新たに 3 件が加わったため、差し引き 36 件の減少となる。除外された分は、作者で絞り込んでいない集計によるもので、別のエージェントが Bingu リポジトリに残したコミットがブログ主の活動として計上されていた。
スクリプトはコミット日付のみで集計し、作者の条件を持っていなかった。ここではリポジトリ単位の分離が成立しない。集計の単位はアカウントであり、アカウントは複数のリポジトリにまたがる。
作者メールの許可リストを導入し、記載されたアドレスのコミットのみを数えるようにした。
直感で決められない境界が一つある。許可リストは「アドレスがアカウントで検証済みか」から導けない。ブログ主の過去のコミット 292 件は、アカウントで一度も検証されていないアドレスを使っている。検証状態で絞ると、これらもまとめて落ちる。
スクリプトは実行後に除外した作者と件数を出力する。新しい機械の身元は黙って消えず、可視状態になる。
同種の問題は以前にも一度起きている。集計範囲に第三者のミラーリポジトリ bilibili-api-collect が含まれていた時期があった。ブログ主のコミットは 0 件で、全履歴には 1219 件のコミット、239 人の外部作者、523 のアクティブ日がある。
全履歴で数えるとアクティブ日は 76 から 597 に増え、差は 521 日になるが、描画されるのは直近 52 週だけで、その 521 日の大部分は図に現れたことがない。ヒートマップの窓の内側では 11 件のコミットが 6 日に分散し、うち 4 日はマスが完全に空になり(2025-11-06、11-16、2026-01-11、01-21)、2 日は段が一つ下がった(01-19、01-22)。影響は 6 マスであり、521 マスではない。
fork かどうかでは判定できない。このリポジトリは fork が false で parent も upstream もなく、2026-01-29 に一度にアップロードされた再投稿である。
現行の規則で正しさを保っているのは一つだけで、コミットの作者メールをアカウント本人と突き合わせる処理である。ミラーリポジトリの 1219 件はこの段階で全部ゼロになる。リポジトリの許可リスト(アカウント所有の四つのリポジトリだけを取得する)は統計の範囲とコストを限定するもので、正しさには関与しない。ミラーを範囲に残したままメールの許可リストだけで回しても、窓内の日ごとの数は現状と完全に一致する。二つのリストの関係は逆に書かれやすい。「それぞれ別の失敗を防ぎ、両方必要」と書くと、どちらかを外すと結果が変わるように読めるが、そうではない。