Git의 --author 플래그로 GitHub 저장소의 AI 봇 스팸을 막은 방법

3 weeks ago 6
  • Archestra 저장소는 AI 기반 기여가 늘어나면서 무의미한 댓글·PR이 몰리며 실제 논의가 묻히고 유지관리 부담이 커짐
  • $900 바운티 이슈는 실제 기여자 논의 공간이었지만 AI 봇 댓글로 253개 댓글까지 불어났고, 공격적 태도도 나타남
  • x.ai provider 지원 이슈에는 닫히고 병합되지 않은 27개 PR이 들어왔으며, 대부분 기여자가 테스트하지 않았음
  • GitHub의 prior contributor 제한은 신규 실제 개발자와 AI 봇을 구분하지 못해, Git --author로 승인 사용자를 main 커밋 author에 추가함
  • 온보딩은 윤리적 AI 규칙과 CAPTCHA 뒤 GitHub Action으로 화이트리스트 커밋을 만들며, 부풀려진 활동 지표보다 품질을 우선함

AI 봇 스팸이 오픈소스 저장소를 잠식한 방식

  • Archestra 저장소는 GitHub의 AI 기반 기여 지표 성장과 달리, 실제 현장에서는 기여 품질 저하와 유지관리 부담이 커짐
  • $900 바운티를 건 이슈는 실제 기여자들이 계획을 제안하고 질문하며 작업을 시도하던 공간이었지만, AI 봇이 몰려들며 총 253개 댓글로 불어남
  • AI 계정들은 무의미한 구현 계획을 남기고 유지관리자에게 공격적인 태도까지 보이며 논의를 오염시킴
  • 저장소를 지켜보던 팀원들은 AI 댓글마다 알림을 받았고, @ethanwater, @developerfred, @Geetk172 같은 실제 기여자들의 대화가 묻힘
  • x.ai provider 지원 이슈에는 닫히고 병합되지 않은 27개 pull request가 들어왔고, 대부분은 기여자가 테스트조차 하지 않았음
  • 팀원 한 명이 매주 반나절을 들여 테스트되지 않은 PR과 환각성 이슈를 정리해야 했고, 정리를 놓치면 저장소가 실제 기여자에게 불친절한 공간으로 빠르게 바뀜

GitHub 제한을 우회한 화이트리스트 방식

  • 초기 대응의 한계

    • Archestra는 먼저 기여자의 평판을 계산하기 위해 London-Cat이라는 작은 봇을 만듦
    • London-Cat은 병합된 PR과 몇 가지 신호를 바탕으로 기여자 평판을 계산했으며, 예시처럼 기여자 식별에는 도움이 됨
    • 이 방식은 스팸 차단 자체에는 실패함
    • 다음 단계로 만든 AI sheriff는 예시처럼 실제 PR도 일부 닫아버림
  • 온보딩 없는 활동 차단

    • 무의미한 AI 댓글과 제안이 계속되며 실제 기여자들이 떠났고, 바운티로 기여를 유도하는 방식과 채용 후보자에게 테스트 과제를 주는 방식까지 재검토하게 됨
    • Archestra는 실제 기여자, 책임 있는 AI 사용자, 초보자, 숙련 엔지니어 모두에게 편안하고 안전한 저장소를 만들기 위해 대응을 강화함
    • 온보딩을 거치지 않은 사용자는 이제 이슈 생성, PR 열기, 댓글 작성을 할 수 없도록 막힘
    • VC 투자를 받은 스타트업에게 GitHub 활동 지표는 민감하지만, Archestra는 AI slop으로 부풀린 지표보다 품질을 더 중요하게 봄
  • GitHub 설정의 한계

    • GitHub에는 오픈소스 저장소에서 댓글 작성자나 PR 생성자를 직접 화이트리스트로 관리하는 간단한 방법이 없음
    • “Limit to prior contributors” 설정은 main에 이전에 커밋한 적이 없는 사용자의 이슈·PR 댓글 작성을 막음
    • 이 설정은 AI 봇과 바운티 작업을 위해 새로 온 실제 개발자를 구분하지 못하며, 둘 다 기존 기여자가 아닌 사용자로 처리함
  • --author 플래그를 이용한 화이트리스트

    • GitHub는 main 브랜치 커밋의 author로 연결된 GitHub 계정을 prior contributor로 판단함
    • Git 커밋에는 authorcommitter라는 두 신원 필드가 있고, 두 값은 서로 다를 수 있음
    • Git의 --author 플래그를 사용하면 다른 사람에게 귀속된 커밋을 만들 수 있으며, 이메일이 해당 GitHub 계정과 일치하면 GitHub가 커밋을 그 프로필에 연결하고 기여자 상태를 부여함
    • 모든 GitHub 계정에는 <id>+<username>@users.noreply.github.com 형식의 noreply 이메일이 있음
    • 사용자 ID를 API로 조회한 뒤 해당 이메일 형식으로 커밋 author를 지정함
    gh api users/their-username --jq '.id' git commit \ --author="their-username <ID+their-username@users.noreply.github.com>" \ -m "chore: add their-username to external contributors"
    • 이 커밋을 main에 푸시하면 외부 사용자는 author, Archestra 계정은 committer로 표시되고, GitHub는 해당 사용자를 prior contributor로 간주해 즉시 댓글 권한을 부여함
  • 실제 온보딩 흐름

    • https://archestra.ai/contributor-onboard - 웹사이트에서 윤리적 AI 규칙과 CAPTCHA를 포함한 온보딩을 진행함
    • GitHub Action - 제출 시 사용자의 GitHub ID를 조회하고, EXTERNAL_CONTRIBUTORS.md 파일에 핸들을 추가한 뒤 해당 사용자 계정이 author인 커밋을 main에 푸시함
    • 사용자 - 화이트리스트에 올라 저장소 접근 권한을 얻음
    • GitHub가 AI 생성 활동을 포함한 대규모 지표 성장을 보고하는 동안, 오픈소스 프로젝트 팀은 저장소의 AI slop을 직접 치우고 실제 참여자 수준을 유지하기 위한 우회책까지 만들어야 함
    • AI slop은 좋은 기여를 하려는 사람을 소음 속으로 밀어 넣어 동기를 떨어뜨릴 뿐 아니라, LiteLLM repo에서처럼 공격자가 AI 봇으로 대화를 유도하려 한 보안 위험도 가져옴
Read Entire Article