for-real - GitHub組織を丸ごと消し飛ばした末に作った削除防止Chrome拡張
(github.com/bssm-oss)テスト用リポジトリを消そうとして、9人のGitHub組織を丸ごと消し飛ばしてしまいました。
Discord Webhookボットのend-to-endテスト中、テスト用リポジトリのSettingsだと思い込んでDanger Zoneまでスクロールし、"Delete this repository" を押しました。削除直後にリダイレクトされたページがリポジトリの404ではなく組織の404で、そのときになって初めて、ずっと組織のSettingsにいたことに気づきました。
決定打は、確認テキストをちゃんと読んでいなかったことです。削除対象は当然テスト用リポジトリだと信じてコピペしてしまい、実際に入力欄へ入っていたのは組織名でした。コピペ一発でそのまま通過。リポジトリ、Issue、PR、Discussion、CI履歴がすべて一撃で消えました。
チームメンバーに緊急でカカオトークを送り、GitHubサポートにもメールして、7営業日待ちました。
その間はpushもIssueの確認もできません。
でも、考えれば考えるほどおかしかったのです。
リポジトリ削除でも組織削除でも、復旧経路は同じく「サポートへのメール」です。なのに組織はメンバー数十人、リポジトリ数十個が丸ごと吹き飛ぶのに、UIはリポジトリ削除フローをそのまま使い回し、コピペもでき、破壊力に対する警告もありません。100倍大きい被害を出せるボタンが、まったく同じ弱いガードレールで守られているわけです。
そこで for-real を作りました。
登録しておいたリポジトリ/組織で削除ボタンを押すとクリックを横取りし、20文字のランダムコードを自分でタイプしてはじめて5分間アンロックされます。コピペはできません。本気なら、打てばいいだけです。
GitHubがすでにDanger Zoneで警告していることはわかっています。でも、たった一人でも私のようなミスを防げるなら、少しの手間には十分価値があると思いました。
Web Storeの審査中なので、現時点ではunpackedでのインストールのみ可能です。インストールガイドとソースはリポジトリにあります。フィードバック歓迎です。
10件のコメント
YouTubeチャンネルを削除しようとしてGoogleアカウントを削除してしまった、という話を聞いたことがありますが(幸い復旧できたそうです)
その方もこういう手順があれば、あんな惨事は防げたのでしょうか……?
Delete this repositoryとDelete this organizationを取り違えることもあるんですね。思ったより Settings UI が似ていて、ぼんやりした状態で操作していると紛らわしかったんですよね;;
GitHub も Danger Zone として分けてはいるんですが、結局ヒューマンエラーはその中でも起きるんですよね,,
気をつけないとですね..
https://httpie.io/blog/stardust 以前、似たような理由で 54k star が初期化されたこともありましたが、そのときも UI の問題が指摘されていて、もう 4 年も経っていたんですね。
背筋が凍る思いをされたことでしょう。体験談を共有し、問題を防ぐ解決策まで提示されている姿が素晴らしいです。
こうした大規模な削除には、猶予期間のようなものが必要ではないかと思います。コンピューターのごみ箱のように、実際の削除は数日後に行われるようにして、再び復旧できる仕組みが必要に見えます。
うわ、ぞっとしますね..
コピー&ペーストだけ防げばよさそうですね
私も何も考えずにコピペして消してしまったので……このプロジェクトではコピペも防止するようにしてあります。読んでいただきありがとうございます
良いプログラムを共有してくださってありがとうございます。GitHub側で組織またはアカウントの削除を24〜72時間ほど自動的に遅延してくれると良いですね。