# task-1874 방지책 Tier 2 구현 (A+B+C)

## 배경
task-1874 원인분석 미팅에서 도출된 방지책 중 Tier 1(Edit grep 검증 + planned/verified) 구현 완료 (task-1881).
이제 Tier 2 방지책 3건 구현.

## 작업 A: Large-File Protocol (2000줄 임계값)

### 목적
2000줄 이상 대형 파일에서 Edit 실패율이 높음. 팀장/팀원에게 대형 파일 작업 시 특별 프로토콜을 강제.

### 구현
1. `prompts/team_prompts.py`에 Large-File Protocol 섹션 추가
   - dispatch.py에서 affected_files의 줄 수를 계산하여 2000줄 초과 파일 목록 전달
   - 프롬프트에 "⚠️ 대형 파일 프로토콜" 섹션 삽입:
     ```
     ⚠️ 대형 파일 프로토콜 (2000줄 초과)
     대상: {파일 목록}
     1. 전체 읽기 금지 → offset/limit으로 수정 대상 ±200줄만 읽기
     2. Edit 전 수정 위치의 정확한 라인 번호 확인
     3. Edit 후 반드시 grep -n으로 변경 반영 확인
     4. 한 번에 50줄 이상 삽입 금지 → 여러 Edit으로 분할
     ```

2. `dispatch.py`에 affected_files 줄 수 계산 함수 추가
   - `_get_large_files(affected_files, threshold=2000)` → 2000줄 초과 파일 리스트 반환
   - `delegate_to_team()` 또는 프롬프트 생성 시 large_files 정보를 team_prompts에 전달

### 영향 파일
- `/home/jay/workspace/prompts/team_prompts.py` — 수정
- `/home/jay/workspace/dispatch.py` — 수정 (줄 수 계산 함수 추가)

## 작업 B: qc_verify.py 심볼 존재 검증기

### 목적
보고서에서 "구현 완료"라고 한 핵심 심볼(함수명, 변수명, 키워드)이 실제 파일에 존재하는지 자동 검증.

### 구현
1. `teams/shared/verifiers/symbol_existence_check.py` 신규 생성
   - 보고서(.md)에서 코드 블록이나 `파일:라인` 패턴으로 언급된 심볼 추출
   - 해당 파일에서 grep으로 심볼 존재 확인
   - 존재하지 않는 심볼 → FAIL
   - 추출 방법:
     1. 보고서에서 "수정 파일" 또는 "산출물" 섹션의 파일 경로 추출
     2. 각 파일에서 보고서에 언급된 함수명/변수명 grep
     3. 보고서에 명시된 라인 번호의 코드가 실제로 존재하는지 확인

2. `teams/shared/qc_verify.py`에 검증기 등록
   - import + ALL_CHECKS 추가

3. 테스트 작성: `tests/test_symbol_existence_check.py`
   - 정상 존재 → PASS
   - 보고서에 있지만 파일에 없는 심볼 → FAIL
   - 보고서에 수정 파일 섹션 없음 → SKIP

### 영향 파일
- `/home/jay/workspace/teams/shared/verifiers/symbol_existence_check.py` — 신규
- `/home/jay/workspace/teams/shared/verifiers/__init__.py` — 수정
- `/home/jay/workspace/teams/shared/qc_verify.py` — 수정
- `/home/jay/workspace/tests/test_symbol_existence_check.py` — 신규

## 작업 C: File-Touch Ratio 메트릭

### 목적
보고서에서 "N개 파일 수정"이라 했는데 실제 git diff에 해당 파일이 없으면 탐지.

### 구현
1. `teams/shared/verifiers/file_touch_ratio_check.py` 신규 생성
   - 보고서의 "수정 파일 목록" 섹션에서 파일 경로 추출
   - `git diff --name-only HEAD~N` 또는 worktree의 실제 변경 파일 목록과 비교
   - File-Touch Ratio = 실제 변경 파일 ∩ 보고서 파일 / 보고서 파일
   - Ratio < 0.5 → WARN ("보고서 파일의 50% 이상이 실제 변경 안 됨")
   - Ratio == 0 → FAIL ("보고서에 명시된 파일 변경 없음")

2. `teams/shared/qc_verify.py`에 등록

3. 테스트: `tests/test_file_touch_ratio_check.py`
   - ratio 1.0 → PASS
   - ratio 0.5 → WARN
   - ratio 0 → FAIL
   - 보고서에 수정 파일 섹션 없음 → SKIP

### 영향 파일
- `/home/jay/workspace/teams/shared/verifiers/file_touch_ratio_check.py` — 신규
- `/home/jay/workspace/teams/shared/verifiers/__init__.py` — 수정
- `/home/jay/workspace/teams/shared/qc_verify.py` — 수정
- `/home/jay/workspace/tests/test_file_touch_ratio_check.py` — 신규

## 전체 검증 시나리오
1. Large-File: 2000줄 초과 파일 목록이 프롬프트에 포함되는지 확인
2. Symbol: 실제 보고서(task-1881.md)에서 심볼 추출 → 파일 존재 확인
3. File-Touch: 보고서 파일 목록 vs git diff 비교
4. 기존 pytest 회귀 없음
5. 시스템3문서 checklist Tier 2-A/B/C 체크

## 주의
- dispatch.py, team_prompts.py 대용량 — offset/limit
- qc_verify.py 수정 시 기존 verifier import 충돌 주의
- 각 verifier는 기존 패턴(verify() 함수 인터페이스) 준수
- 수정 후 즉시 커밋
