# task-607.1: 위스퍼 .done 프로토콜 버그 수정 + WebFetch 429 에러 대응

## 작업 완료
2026-03-16 08:27

---

## 작업 A: 위스퍼 .done 프로토콜 버그 수정

### 수정 파일
- `/home/jay/workspace/scripts/auto_merge.py`

### 변경 내용

#### 1. scan_done_files() (라인 103~110)
```python
# 변경 전: .done.clear만 체크
if not clear_file.exists():
    done_files.append(done_file)

# 변경 후: .done.clear와 .done.merging 모두 체크
clear_file = done_file.with_suffix(".done.clear")
merging_file = done_file.with_suffix(".done.merging")
if not clear_file.exists() and not merging_file.exists():
    done_files.append(done_file)
```

#### 2. try_claim() (라인 115~145)
```python
# 변경 전: .done.clear 생성
clear_file = done_file.with_suffix(".done.clear")

# 변경 후: .done.merging 생성
merging_file = done_file.with_suffix(".done.merging")
```

#### 3. done_file.unlink() 호출 제거 (4개 위치)
- 라인 663: 에러 발생 시
- 라인 691: 테스트 실패 시
- 라인 716: 머지 성공 시
- 라인 732: _finalize_done_file()

모든 위치에서 `.done` 파일 삭제 코드를 제거하고 주석으로 대체:
```python
# .done 파일 삭제하지 않음 - 아누가 보고 후 .done.clear로 변환해야 함
```

### 검증
- ✅ dry-run 실행: `.done` 파일 유지됨
- ✅ merge_needed=False 시 `.done.merging` 생성 안 됨
- ✅ black 포맷팅 통과

---

## 작업 B: WebFetch 429 에러 대응

### 수정 파일
- `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md`

### 추가 내용

"병렬 Tool 호출 안전 규칙" 섹션 다음에 "WebFetch 사용 규칙" 섹션 추가:

```markdown
## WebFetch 사용 규칙

1. **동시 요청 제한**: 같은 도메인에 대한 WebFetch 호출은 동시에 최대 2개까지만 병렬 실행
2. **Rate limit 도메인**: GitHub 등 rate limit이 있는 사이트는 순차 호출 권장
3. **HTTP 429 에러 대응**: 해당 도메인에 대한 요청을 줄이고, WebSearch 또는 gh CLI로 대체
4. **GitHub 리포 분석 시**: WebFetch 대신 아래 도구를 우선 사용:
   - gh repo clone → 로컬 클론 후 분석
   - gh api → API로 파일 내용 조회
   - WebSearch → 관련 문서 검색
   - WebFetch는 최후 수단으로 순차적 사용
```

---

## 영향 범위
- auto_merge.py: `.done` 파일 처리 로직만 변경, 기존 머지 로직 영향 없음
- DIRECT-WORKFLOW.md: 새 섹션 추가, 기존 섹션 영향 없음

---

## 라 팀장 검토 결과 (dev3-team)

### 발견 이슈 및 자체 해결 (1건)

**테스트 회귀 3건** — GLM이 auto_merge.py를 수정했으나 기존 테스트가 구버전 동작(`.done.clear` 생성, `.done` 삭제)을 기준으로 작성되어 실패.

직접 수정한 테스트:
- `test_try_claim_success`: `.done.clear` 생성 검증 → `.done.merging` 생성 확인 + `.done.clear` 미생성 검증 추가
- `test_try_claim_already_claimed`: `.done.clear`로 선점 시뮬레이션 → `.done.merging`으로 변경
- `test_run_full_flow`: `.done` 삭제 검증 → `.done` 유지 검증으로 반전

### 범위 외 미해결 (1건)

`tests/test_group_chat.py` 3건 사전 실패 — 비너스 팀명 org 변경(`디자인 센터` → `Gemini 센터`)으로 인한 것. 본 작업 범위 외.

⚠️ 기존 테스트 실패 3건 (본 작업 범위 외): `test_org_loads_expected_count`, `test_parses_centers`, `test_excludes_planned_teams`

### 최종 QC 결과

| 항목 | 결과 | 증거 |
|------|------|------|
| pytest (auto_merge) | PASS | 30/30 통과 |
| pyright | PASS | 0 errors, 0 warnings |
| black | PASS | 변경 없음 |
| isort | PASS | 변경 없음 |
| 스펙 전수 구현 | PASS | A-1/A-3/B-1/B-2 모두 구현됨 |
| 테스트 회귀 | PASS (직접 수정) | 3개 테스트 갱신 후 30/30 통과 |
