# task-2076 완료 보고서: Codex 게이트 실제 AI 리뷰 동작 보장

**팀**: dev7-team (이참나 팀장)
**일시**: 2026-04-22
**레벨**: critical
**프로젝트**: dev-system

---

## SCQA

**S**: codex_gate_check.py는 Codex AI 리뷰를 통해 설계 게이트(G1)를 검증하는 스크립트로, companion 실패 시 마아트 폴백(규칙 기반 파일 존재 체크)으로 전환된다.

**C**: 봇 세션에서 Codex 게이트가 항상 마아트 폴백으로 통과하고 있어, 실질적으로 AI 리뷰 없이 형식적 PASS만 발행되고 있었다. 근본 원인은 3가지: (1) OPENAI_API_KEY가 ChatGPT 소비자 계정 키로 API 플랫폼에서 401 에러, (2) subprocess.run에 env 미전달, (3) 폴백 전환 사유가 결과에 기록되지 않아 추적 불가.

**Q**: 코드 레벨에서 env 전달/API 키 검증/폴백 사유 추적을 보장할 수 있는가?

**A**: 4가지 수정으로 해결: (1) `_ensure_env_keys_loaded()` 함수로 .env.keys 직접 파싱 폴백 추가, (2) `subprocess.run`에 `env=os.environ.copy()` 명시적 전달, (3) API 키 미설정 시 즉시 마아트 폴백 전환 (불필요한 companion 호출 방지), (4) 결과에 `fallback_reason` 필드 추가로 폴백 사유 추적. pytest 54건 PASS(기존 48 + 신규 6), L1 스모크테스트 확인 완료.

---

## 수정 파일

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| scripts/codex_gate_check.py:21 | _ensure_env_keys_loaded() 함수 추가 | grep "_ensure_env_keys_loaded" OK (2건) | verified |
| scripts/codex_gate_check.py:195 | subprocess.run에 env=os.environ.copy() 추가 | grep "env=os.environ.copy" OK (1건) | verified |
| scripts/codex_gate_check.py:98 | _maat_fallback_check에 fallback_reason 파라미터 추가 | grep "fallback_reason" OK (8건) | verified |
| scripts/codex_gate_check.py:309 | API 키 미설정 시 즉시 폴백 전환 | grep "OPENAI_API_KEY 미설정" OK (1건) | verified |
| scripts/codex_gate_check.py:376 | 성공 결과에도 fallback_reason: None 추가 | grep "fallback_reason.*None" OK | verified |
| scripts/tests/test_codex_gate_check.py:728 | TestApiKeyValidation 테스트 클래스 추가 | grep "TestApiKeyValidation" OK | verified |
| scripts/tests/test_codex_gate_check.py:770 | TestSubprocessEnvPassing 테스트 클래스 추가 | grep "TestSubprocessEnvPassing" OK | verified |
| scripts/tests/test_codex_gate_check.py:801 | TestFallbackReason 테스트 클래스 추가 | grep "TestFallbackReason" OK | verified |

---

## L1 스모크테스트 결과

- 서버 재시작: 해당없음 (CLI 스크립트)
- API 응답 확인: `python3 scripts/codex_gate_check.py --task-id task-2072` 실행
  - 결과: `source=maat_fallback, fallback_reason="codex-companion 실행 실패 ..."` 정상 출력
- API 키 미설정 테스트: `OPENAI_API_KEY="" python3 scripts/codex_gate_check.py --task-id task-2072`
  - 결과: `fallback_reason="OPENAI_API_KEY 환경변수 미설정"` 즉시 폴백 확인
- 스크린샷: 해당없음 (백엔드 스크립트)

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **env_loader ImportError 시 조용한 스킵** — `_ensure_env_keys_loaded()` 함수로 직접 .env.keys 파싱 폴백 추가
2. **subprocess에 env 미전달** — `env=os.environ.copy()` 명시적 전달
3. **폴백 사유 추적 불가** — `fallback_reason` 필드를 결과 dict에 추가

### 범위 외 미해결 (1건)
1. **OPENAI_API_KEY가 ChatGPT 소비자 계정 키** — 범위 외 사유: 인프라/운영 이슈. API 플랫폼 키로 교체 필요. codex-companion은 Codex API 전용 모델(`gpt-5.2-codex`)을 사용하므로 ChatGPT 계정으로는 동작 불가. 아누(개발실장) 판단 요청.

---

## 테스트 결과

- pytest 54건 전부 PASS (기존 48건 + 신규 6건)
- 신규 테스트: TestApiKeyValidation(2), TestSubprocessEnvPassing(1), TestFallbackReason(3)
- 테스트 회귀: 0건

---

## 모델 사용 기록

- 팀원: 카마소츠 / 작업: 테스트 선행 작성 (TDD RED) / 모델: sonnet
- 팀원: 쿠쿨칸 / 작업: codex_gate_check.py 구현 / 모델: sonnet

---

## Codex 게이트

- 소스: maat_fallback (현재 API 키 무효로 companion 사용 불가)
- PASS

---

## 3문서

- plan.md: status → completed
- context-notes.md: 3 Step Why + 근본 원인 분석 기록
- checklist.md: 17/17 항목 완료 (100%)

## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회

