# 3회 재시도-에스컬레이션 프로토콜
> 버전: 1.0 | 작성일: 2026-03-12 | 참조: Agency-Agents Dev-QA 루프

---

## 기본 흐름

```
Sonnet 팀원 구현 → 테스터 검증 → PASS → 완료
                              → FAIL → Sonnet 재시도 (attempt +1)
                                      → 3회 실패 → Opus 팀장 직접 개입
```

## 재시도 규칙

### Attempt 카운터
- task_metadata에 `"attempt": N` 필드 기록
- 초기값: 1 (첫 시도)
- FAIL 시 +1 (최대 3)
- task-timers.json의 해당 task에 attempt 필드 추가 방안:
  ```json
  {"task_id": "task-100.1", "attempt": 2, "status": "running", ...}
  ```

### 재시도 조건
- QC FAIL: 테스트 실패, pyright 에러, 스타일 위반 등
- Attempt 1~3: Sonnet 팀원이 FAIL 원인 분석 → 수정 → 재검증
- 각 attempt마다 수정 내역을 보고서에 기록

### 에스컬레이션 조건
- Attempt 3 FAIL → 자동 에스컬레이션
- Opus 팀장이 직접 개입

## 에스컬레이션 결정 트리

```
3회 실패
├─ 원인: 단순 구현 실수 → Opus 팀장 직접 수정
├─ 원인: 작업 범위 과대 → 작업 분해 (서브태스크로 재분배)
├─ 원인: 기술적 한계 → 다른 팀원에게 재배정 (또는 다른 팀)
└─ 원인: 요구사항 불명확 → 보류 + 아누에게 보고 (요구사항 재정의 요청)
```

## 기존 규칙과의 연동

- DIRECT-WORKFLOW.md의 "Sonnet이 3회 실패한 경우에만 팀장이 직접 코딩 개입 허용" 규칙과 일치
- QC-RULES.md의 "qc_verify.py → FAIL → 수정 후 재검증 (최대 3회)" 규칙과 일치
- 3회 실패 후 보고서에 "QC FAIL" 기록 → .done 생성 → 에스컬레이션

## Evidence Collector 규칙 (테스터용)

### 기본 원칙
- "기본값 = NEEDS WORK, 증거로 뒤집어야 PASS"
- "Zero Issue = Red Flag" (첫 구현에서 이슈 0건은 비현실적)

### 필수 증거 유형
- 테스트 결과: pytest 출력 전문
- 타입 체크: pyright 결과
- 스타일 체크: black + isort 결과
- UI 검증 시: browser.py 활용 스크린샷 (Desktop 1920x1080)

### 금지 표현
- "모든 것이 완벽합니다", "A+ 품질", "이상 무"
- 반드시 정량적 데이터로 뒷받침
