Part 1 · Ch05 · TDD

TDD hook 실물 — 1번 hook을 코드로

plugin/hooks/tdd-guard.sh · PreToolUse[Edit|Write]
# 구현 코드 작성 시, 테스트 파일이 먼저 있는지 체크
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path')

# 테스트·설정·타입·프레임워크 파일은 통과 (화이트리스트)
case "$FILE_PATH" in
  *test*|*spec*|*__tests__*)        exit 0 ;;
  *.json|*.css|*.md|*.config.*)     exit 0 ;;
  */types/*|*/page.tsx|*/layout.tsx) exit 0 ;;
esac

# 소스 파일이면 대응 테스트 존재 확인
if [ "$TEST_FOUND" = false ]; then
  cat <<EOF
{ "hookSpecificOutput": {
    "permissionDecision": "deny",
    "permissionDecisionReason":
      "TDD GUARD: 테스트 파일이 없습니다.
       구현 전에 테스트를 먼저 작성하세요." } }
EOF
fi
exit 0
동작 흐름
PASS테스트·설정·타입·프레임워크 파일 → 그냥 통과
DENY소스 파일인데 테스트 없음 → deny JSON 반환
FIXagent가 reason 읽고 "테스트부터" 방향 전환
HOOK 설계의 황금률
  • 빠를 것 — 파일 존재 체크라 즉시 끝
  • 다음 행동을 알려줄 것 — 차단 메시지에
  • 오탐이 적을 것 — 화이트리스트로 제외