# task-1917 완료 보고서: planned 항목 자동 FAIL 검출 로직 추가

## SCQA

**S**: QC 파이프라인에서 보고서의 "수정 파일별 검증 상태" 테이블을 파싱하여 검증하는 g3_independent_verifier.py와 qc_verify.py가 운영 중이다.

**C**: planned 상태 항목이 보고서에 포함되어도 자동 FAIL이 발생하지 않아, 미완료 작업이 QC 게이트를 통과할 수 있는 구멍이 존재했다. g3_independent_verifier.py L140에서 `if entry["status"] != "verified": continue`로 planned를 단순 스킵만 하고 있었다.

**Q**: planned 항목이 보고서에 존재하면 자동으로 FAIL 판정하여 .done 생성을 차단할 수 있는가?

**A**: g3_independent_verifier.py에 `check_planned_items()` 함수를 추가하고, qc_verify.py에 `planned_check` verifier를 MANDATORY로 등록하여 양쪽 모두에서 planned 항목을 검출·차단한다. 테스트 30건 전체 PASS, 기존 테스트 회귀 0건.

## 수정 파일별 검증 상태

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| scripts/g3_independent_verifier.py:117 | check_planned_items 함수 추가 | grep "check_planned_items" OK | verified |
| scripts/g3_independent_verifier.py:304 | main()에서 planned 검출 섹션 1.5 추가 | grep "planned 항목 검출" OK | verified |
| scripts/g3_independent_verifier.py:364 | 결과 JSON에 planned_check 키 추가 | grep "planned_check" OK | verified |
| teams/shared/verifiers/planned_check.py | 신규 verifier 모듈 작성 | grep "planned_check" OK | verified |
| teams/shared/qc_verify.py:28 | planned_check import 추가 | grep "planned_check" OK | verified |
| teams/shared/qc_verify.py:120 | ALL_CHECKS에 planned_check 등록 | grep "planned_check" OK | verified |
| teams/shared/qc_verify.py:137 | MANDATORY_CHECKS에 planned_check 추가 | grep "planned_check" OK | verified |
| teams/shared/qc_verify.py:464 | run_check()에 planned_check elif 분기 추가 | grep "planned_check" OK | verified |
| tests/test_g3_verifier.py | TestCheckPlannedItems 4건 + 통합테스트 2건 추가 | grep "TestCheckPlannedItems" OK | verified |
| tests/test_planned_check.py | 신규 테스트 파일 5건 | grep "TestPlannedCheckVerifier" OK | verified |

## 검증 시나리오 결과

1. planned 항목 포함 테스트 보고서 → FAIL 반환 ✅ (test_fail_with_planned_in_report PASS)
2. verified 항목만 있는 보고서 → PASS 반환 ✅ (test_pass_with_all_verified PASS)
3. 기존 테스트 전체 회귀 없음 ✅ (30개 테스트 전체 PASS, 0.18초)

## 발견 이슈 및 해결

### 자체 해결 (2건)
1. **test_planned_check.py 미사용 import** — `import os`, `import pytest` 미사용 경고 → 해당 import 제거
2. **dev3 qc_verify.py 동기화 불필요 확인** — dev3/qc/qc_verify.py → shared/qc_verify.py 심볼릭 링크, dev3/qc/verifiers → dev1/qc/verifiers 심볼릭 링크로 자동 동기화 확인

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

## 셀프 QC 체크리스트

- [x] 1. 영향 파일: g3_independent_verifier.py, qc_verify.py, planned_check.py (신규), 테스트 2개
- [x] 2. 엣지 케이스: 빈 entries, planned 0건, planned 복수건, 테이블 없는 보고서, 보고서 없음
- [x] 3. 작업 지시와 정확히 일치 (FAIL 메시지에 "planned 항목 N건 발견: [항목명]" 형태 포함)
- [x] 4. 에러 처리 확인 (보고서 없음 → SKIP, 테이블 없음 → SKIP)
- [x] 5. 테스트 30건 전체 PASS (기존 19 + 신규 11)
- [x] 6. 발견 이슈 2건 모두 직접 해결
- [x] 7. SOLID/DRY 위반 없음 (g3 verifier용 함수와 qc verifier 모듈은 역할이 다름 — 의도적 분리)
- [x] 8. 인터페이스 변경: ALL_CHECKS, MANDATORY_CHECKS에 항목 추가 — QC-RULES.md 업데이트는 범위 밖 (규칙 문서는 이미 planned 차단을 명시하고 있음)
- [x] 13. L1 스모크테스트: pytest 30건 전체 PASS 확인

## 모델 사용 기록

- 팀원: 루(Lugh) / 작업: g3_independent_verifier.py 수정 / 사용 모델: sonnet
- 팀원: 루(Lugh) / 작업: planned_check.py 신규 + qc_verify.py 수정 / 사용 모델: sonnet
- 팀원: 모리건(Morrigan) / 작업: 테스트 작성 / 사용 모델: sonnet

## 세션 통계
- 총 도구 호출: 0회

