[STK8-02] pre-push 훅 Codex fallback 추가

작업 내용 (설계 의도)

변경 사항

.githooks/pre-push의 code-reviewer(Claude) 호출 이후에 Codex fallback 로직을 추가한다.

Claude 실패 조건:

  • exit non-zero
  • 출력이 비어있음
  • 출력에 context length / token limit / rate limit / maximum context 포함

실패 시 동일 diff를 Codex로 재리뷰한다. Codex도 실패하면 경고를 출력하고 push를 허용한다(AI 인프라 장애가 push를 막으면 안 됨).

REQUEST_CHANGES 감지는 Claude/Codex 동일하게 적용한다.

다이어그램

처리 흐름

sequenceDiagram
    participant D as Developer
    participant PP as pre-push
    participant CL as Claude code-reviewer
    participant CO as Codex CLI

    D->>PP: git push
    PP->>PP: main 차단, 테스트 실행
    PP->>CL: code-reviewer 호출
    alt Claude 성공
        CL-->>PP: 리뷰 결과
        alt REQUEST_CHANGES 포함
            PP-->>D: exit 1 (push 거부)
        else
            PP-->>D: exit 0 (push 허용)
        end
    else Claude 실패 (토큰/오류)
        PP->>CO: Codex fallback 호출
        alt Codex 성공
            CO-->>PP: 리뷰 결과
            alt REQUEST_CHANGES 포함
                PP-->>D: exit 1 (push 거부)
            else
                PP-->>D: exit 0 (push 허용)
            end
        else Codex 실패
            PP-->>D: exit 0 (경고 출력 후 허용)
        end
    end

테스트 케이스

  • Claude 성공 + APPROVED → push 허용
  • Claude 성공 + REQUEST_CHANGES → push 거부
  • Claude 실패(빈 출력) → Codex 호출됨
  • Claude 토큰 한도 감지 → Codex fallback 호출됨
  • Codex fallback + REQUEST_CHANGES → push 거부
  • Claude·Codex 둘 다 실패 → 경고 출력 후 push 허용