# codex_gate_check.py — 워크트리 인식 fix

## 작업 레벨: Lv.2 (인프라 안정성)

## 프로젝트
- 인프라: `/home/jay/workspace/scripts/codex_gate_check.py`
- 또는 의존하는 codex companion 모듈

## 배경

2026-05-02 task-2354 Phase 1 진행 중 발견:

페룬이 워크트리(`feat/task-2354-phase1`)에서 fix 16건 작성했으나, **`codex_gate_check.py`가 main 브랜치 기준으로 Codex 재검증 → 매번 FAIL** 보고. 페룬이 무한 follow-up 루프에 빠져 13:47 멈춤.

Codex 출력 인용:
- "현재 코드베이스에는 그 상태가 반영되어 있지 않아"
- "현재 백엔드는 ohmy_user_views 등 구 구조만 사용"
- "PII 평문 저장 금지 결정이 현재 CRM 스키마와 쓰기 경로에서 지켜지지 않습니다"

→ 모두 **main 기준** 진단. 워크트리 변경분은 평가 안 됨.

## 진단 항목

### 1. 현재 codex_gate_check.py 동작
- 어떤 경로/브랜치를 Codex에게 전달하는가?
- task-id로부터 워크트리 경로 자동 탐지 가능한가?
- task-timers.json의 worktree_path 활용 여부

### 2. Codex API 입력 방식
- Codex companion에 어떤 형식으로 코드를 전달하는가? (파일 경로 / 코드 스니펫 / git diff)
- 워크트리 차이를 명시적으로 보낼 수 있는 옵션 있는가?

### 3. 영향받는 다른 task 식별
- 본 버그로 인해 false negative 진단 받은 다른 task 사례
- task-2354 외 동일 패턴 검토

## 수정 방안

### A. task-id → 워크트리 자동 탐지 (1순위)
```python
def _resolve_codex_target_dir(task_id: str) -> Path:
    # 1. task-timers.json의 worktree_path
    timers = load_task_timers()
    if task_id in timers and timers[task_id].get("worktree_path"):
        return Path(timers[task_id]["worktree_path"])
    # 2. 표준 워크트리 경로 추정
    for project in ["InsuRo", "insuwiki", ...]:
        candidates = Path(f"/home/jay/projects/{project}/.worktrees").glob(f"{task_id}-*")
        for c in candidates:
            if c.is_dir(): return c
    # 3. 폴백: 메인 프로젝트 디렉토리
    return Path("/home/jay/projects/InsuRo")  # 또는 task에서 추정
```

### B. CWD 기반 동작 강화 (2순위)
- codex_gate_check.py 호출 시 환경변수 `CODEX_TARGET_DIR` 또는 인자 `--target-dir` 추가
- 봇이 워크트리 cwd에서 호출 시 그 디렉토리 자동 사용

### C. git diff 기반 검증 (3순위, 더 정확)
- main과 워크트리 브랜치 간 diff 추출
- Codex에게 "이 변경이 회장 결정사항을 정확히 반영하는가?" 질문
- 변경 없는 부분(자동 push 등)은 main 기준으로 평가하되 구분 표시

### D. dispatch.py 통합 (보조)
- dispatch.py가 task 위임 시 worktree_path를 codex_gate_check.py에 명시적 전달
- 봇이 워크트리에서 작업하므로 자동 매칭

## 검증 시나리오

1. **워크트리 변경 인식**: task-2354 같은 사례에서 `codex_gate_check.py --task-id task-2354` → 워크트리 자동 탐지 + 변경분 기반 검증 → PASS 정확 보고
2. **워크트리 미존재**: 메인 프로젝트 fallback 정상 동작
3. **다중 워크트리**: 같은 task-id 여러 워크트리(예: 재시도) → 가장 최근 사용
4. **회귀**: 기존 main 기준 검증 사례 동작 보존
5. **dispatch.py 통합**: 위임 시 워크트리 경로 자동 전달 + 봇이 명시적 환경변수 안 줘도 정확

## affected_files

**수정:**
- `/home/jay/workspace/scripts/codex_gate_check.py` (워크트리 탐지 + 환경변수 지원)
- `/home/jay/workspace/dispatch.py` (위임 시 worktree_path 전달, 옵션)
- `/home/jay/workspace/utils/codex_companion_runtime.py` 또는 유사 (Codex API 호출 부분)

**신규 (선택):**
- `/home/jay/workspace/utils/worktree_resolver.py` (워크트리 경로 탐지 헬퍼)

## 보고

- `memory/reports/codex-gate-worktree-fix.md`
- 진단 결과 + 시뮬레이션 (task-2354 사례 재현 → PASS 전환 확인)
- 수정 적용 + 회귀 검증
- 영향받은 다른 task 식별 (있으면)

## 운영 메모

- task-2354와 병렬 진행 — 다른 영역 (인프라 vs InsuRo 코드)이라 충돌 없음
- task-2354 페룬 결과(워크트리 16커밋)는 본 fix 적용 후 재검증으로 진짜 PASS/FAIL 판정
- 본 fix 후 다른 task의 false negative escalate도 줄어듦 (task-2353 비슷한 사례 등)

## 참조

- 사례 task: task-2354
- task-2354 codex-gate 보고서: `memory/events/task-2354.codex-gate`
- 페룬 fix 16건: `feat/task-2354-phase1` 브랜치 (워크트리)