Can your verify gate actually fail?

개요

기술 블로그는 AI 에이전트가 코드 변경 사항을 직접 커밋하도록 허용한 후, 자동화된 검증 게이트(verify gate)가 제대로 작동하는지에 대한 저자의 경험을 공유합니다.

주요 내용

* 자동화된 검증 게이트의 신뢰성 문제: 저자는 린트, 타입 체킹, 빌드, 테스트를 포함하는 결정론적 검증 게이트 스크립트를 구축했으며, 이 스크립트가 녹색(성공)으로 통과하면 PR이 자동으로 병합되도록 설정했습니다. 하지만 실제로는 에이전트가 완전히 잘못된 코드를 푸시해도 게이트가 녹색으로 표시되는 경우가 많았으며, 4개의 저장소 중 3개에서 이 문제가 발생했습니다.
* 구조적 결함: 빈 게이트의 기본값: 검증 게이트 스크립트는 리포지토리별 정책 JSON 파일을 참조하여 실행 단계를 결정합니다. 만약 특정 리포지토리에 대한 정책이 없으면 기본값([])으로 설정된 빈 단계를 실행하게 됩니다. 이 경우, 스크립트는 "GREEN (no gate steps configured for '<RepoName>')" 메시지를 출력하고 종료 코드 0으로 종료되어, 테스트가 전혀 실행되지 않았음에도 불구하고 코드가 성공적으로 통과되는 구조적 결함이 존재했습니다.
* 4개 리포지토리의 실제 검증 현황:
* app (러너 자체): npm run lint는 실행되지만, tsconfig가 러너 디렉토리를 제외하여 핵심 코드의 타입 체킹이 이루어지지 않았습니다. Next.js build가 게이트에 포함되지 않아 클라이언트/서버 경계 오류가 발생할 수 있었습니다. Vitest.test.tsx 파일을 제외한 특정 테스트 파일만 실행했습니다.
* product (Next.js 앱): ESLint, tsc --noEmit, Vitest, next build가 패키지.json에 준비되어 있었으나 게이트 설정에 포함되지 않아 실제로는 0% 커버리지를 가졌습니다.
* notes (Markdown 볼트): 설정되지 않아 손상된 위키링크나 잘못된 프론트매터 등을 검사하는 기본 스크립트조차 실행되지 않아 모든 변경이 자동 승인되었습니다.
* portfolio (Vite 사이트): 설정되지 않았으며, 디렉토리가 유효한 Git 워크트리도 아니었습니다. 작업이 게이트 실행 전에 실패했음에도 불구하고, 만약 게이트까지 도달했다면 즉시 통과되었을 것입니다.
* 잘못된 게이트 수정 방법:
* 빈 게이트 알림: 정책에 설정된 실행 단계가 없을 경우, 오류를 반환하거나 명시적인 "UNGATED" 상태를 표시해야 합니다.
* 기본적인 검증 절차 연결: product 리포지토리의 경우, policy.jsonnpm run build 한 줄을 추가하는 것으로 수정되었습니다.
* 실제 빌드 검증 추가: 번들러나 프레임워크 오류를 잡기 위해 npm run build와 같은 실제 빌드 단계를 게이트에 포함시켜야 합니다.
* 숨겨진 제외 설정 수정: tsconfig에서 중요한 코어 디렉토리에 대한 제외 설정을 제거하고, Vitest의 파일 검색 패턴을 수정하여 모든 테스트 파일이 실행되도록 해야 합니다.

시사점

AI 에이전트를 코드베이스에 적용하고 코드 리뷰를 건너뛸 경우, 검증 게이트의 실제 작동 여부를 반드시 테스트해야 하며, 그렇지 않으면 단순히 잘못된 코드를 자동 승인하는 스크립트에 불과하다는 점을 강조합니다.

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

댓글

GitHub Discussions