My Commit Message Filter Only Knew One Way to Say "Written by Claude"

개요

기술 콘텐츠 생성 시 AI 참여 사실을 숨기기 위해 깃 커밋 메시지에서 AI 생성 관련 문구를 필터링하는 스크립트에서, 기존 필터는 특정 AI 관련 문구에만 반응하고 일반적인 Git 표준 트레일러(예: Signed-off-by)를 놓치는 문제점을 발견하고 개선했다.

주요 내용

  • 깃 커밋 메시지 생성 스크립트는 Conventional Commit 메시지 작성을 위해 Claude 모델을 사용하며, AI 관련 문구 및 서명을 제거하기 위한 시스템 프롬프트와 Regex 필터를 갖추고 있다.
  • 기존 Regex 필터는 "co-authored-by:", "generated with/by claude", "claude code", "written by (ai|llm|claude|chatgpt|copilot)", "ai-generated", "🤖" 등 구체적인 AI 관련 문구 유출 사례를 기반으로 구축되었다.
  • 이 필터는 "llm" 또는 "claude"와 같은 단어가 포함된 정상적인 기술적 문장(예: MCP 타임아웃 수정, Claude Code 훅 관련 문서 업데이트)까지 과도하게 필터링하는 문제를 보였다.
  • 기존 필터는 "Signed-off-by:", "Reviewed-by:", "Acked-by:"와 같이 AI가 생성했을 가능성이 있는 표준 Git 트레일러 형식을 감지하지 못해 AI 참여 사실이 노출될 수 있는 잠재적 취약점을 가지고 있었다.
  • 이러한 취약점은 기존 필터 개선 작업이 특정 유출 사례에 대한 반응형으로만 진행되었고, 차단하려는 대상의 일반적인 형태를 역으로 탐색하는 테스트가 부족했기 때문에 발생했다.
  • 문제를 해결하기 위해 "signed-off-by:", "reviewed-by:", "acked-by:" 등 표준 Git 트레일러와 AI 관련 키워드("claude", "anthropic", "ai", "llm" 등)를 결합한 새로운 Regex 패턴과 "noreply@anthropic.com"을 직접 차단하는 패턴이 추가되었다.
  • 추가된 패턴은 기존의 정상적인 Git 트레일러 관련 기술적 문장을 잘못 필터링하는 경우(False Positive)를 방지하면서, AI 참여 문구 누락(False Negative) 문제를 효과적으로 해결했다.

시사점

AI 생성 콘텐츠의 출처를 투명하게 관리하기 위한 기술적 필터링은 특정 유출 사례에 대한 반응뿐만 아니라, 차단하려는 대상의 일반적인 형태와 잠재적인 모든 표현 방식을 고려한 주기적인 역방향 테스트가 필수적이다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions