# task-914.1: pyright_check.py 구조적 개선 — 전 팀 동기화

## SCQA

**S**: `pyright_check.py`가 5개 팀(dev1/4/5/6/7)에 독립 복사본으로 존재하며, task-909.1에서 dev5에만 `_find_project_root()` + `cwd=project_root` 수정이 적용됨.

**C**: 확인 결과 dev1/4/6/7에도 이미 핵심 수정이 적용되어 있었으나, dev5와 사소한 포맷 차이(빈 줄 1개, `all_minor` 줄 바꿈 스타일)가 존재. 근본적으로 14개 verifier 파일이 5개 팀에 독립 복사본으로 존재하여 DRY 위반 상태.

**Q**: 5개 팀의 verifier 파일을 byte-level 동일하게 정규화하고, 향후 동기화 이탈을 자동 감지할 수 있는가?

**A**: 포맷 정규화 완료(MD5 일치 확인) + `sync_verifiers.py` 동기화 검사 스크립트 생성. 14개 verifier 파일 전부 5개 팀 간 동일성 확인. pyright 0 에러, black/isort 준수.

---

## 작업 내용

### 1단계: 포맷 정규화 (dev5 → dev1/4/6/7)

dev5를 정본으로 dev1/4/6/7에 복사하여 byte-level 동일하게 정규화.

변경 내용:
- import 블록 뒤 빈 줄 추가 (line 5)
- `all_minor` 할당문: 3줄 분리 → 1줄로 통합 (line 104)

### 2단계: 근본 원인 분석 + 재발 방지

**근본 원인**: 동일 코드가 5개 팀에 독립 복사본 → DRY 위반

**방안 선택**: 방안 B (동기화 검사 스크립트)
- 방안 A (공유 모듈): sys.path 조작 필요, import 구조 변경 위험 → 탈락
- **방안 B (동기화 검사)**: 기존 구조 무변경, 안전, 즉시 적용 → 채택
- 방안 C (심볼릭 링크): git 관리 복잡 → 탈락

### 3단계: sync_verifiers.py 구현

`teams/shared/sync_verifiers.py` — 14개 verifier 파일을 5개 팀 간 비교하는 도구.

기능:
- `--canonical TEAM`: 정본 팀 지정 (기본: dev1)
- `--file FILENAME`: 특정 파일만 비교
- `--fix`: 차이 있는 파일을 정본으로 자동 복사
- 차이 발견 시 unified diff 출력 + exit code 1

---

## 수정/생성 파일 목록

- `teams/dev1/qc/verifiers/pyright_check.py` — 포맷 정규화 (dev5 정본 복사)
- `teams/dev4/qc/verifiers/pyright_check.py` — 포맷 정규화 (dev5 정본 복사)
- `teams/dev6/qc/verifiers/pyright_check.py` — 포맷 정규화 (dev5 정본 복사)
- `teams/dev7/qc/verifiers/pyright_check.py` — 포맷 정규화 (dev5 정본 복사)
- `teams/shared/sync_verifiers.py` — 신규 생성 (동기화 검사 스크립트, 233줄)

---

## 검증 결과

- MD5 동일성: 5개 팀 모두 `8defe516f942fbbeb47ce7139e71f084` (PASS)
- verify([]) 호출: 5개 팀 모두 SKIP 정상 반환 (PASS)
- sync_verifiers.py: 14개 파일 x 5개 팀 = 전부 [OK] (PASS)
- pyright: 0 errors, 0 warnings (PASS)
- black + isort: OK (PASS)

---

## 발견 이슈 및 해결

### 자체 해결 (3건)

1. **dev1/4/6/7 이미 수정됨** — task 작성 시점과 현재 상태 차이. 핵심 수정은 이미 반영되어 있어 포맷 정규화만 수행.
2. **sync_verifiers.py 경로 중복 버그** — `get_verifiers_dir()`이 `teams/teams/` 중복 경로 생성. `workspace_root`가 이미 `teams/`를 포함하므로 `team` 서브디렉토리만 연결하도록 수정.
3. **dev5 vs dev1/4/6/7 포맷 차이** — `all_minor` 줄 바꿈 스타일 + 빈 줄 차이. dev5 정본으로 통일.

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

없음.

---

## 재발 방지 메커니즘

`sync_verifiers.py`를 QC 파이프라인에서 주기적으로 실행하면 verifier 파일 이탈을 자동 감지:

```bash
# 차이 감지 (CI/cron)
python3 teams/shared/sync_verifiers.py --canonical dev5

# 자동 수정
python3 teams/shared/sync_verifiers.py --canonical dev5 --fix
```

---

## QC 자동 검증 결과

```json
{
  "task_id": "task-914.1",
  "overall": "아래 재실행 결과 참조",
  "checks": {
    "pyright_check": "PASS (0 errors, 0 warnings)",
    "style_check": "PASS (black: OK, isort: OK)",
    "file_check": "보고서 생성 후 재검증",
    "data_integrity": "PASS",
    "test_runner": "SKIP (관련 테스트 파일 0개)",
    "spec_compliance": "PASS"
  }
}
```
