# task-1321.1 완료 보고서

## SCQA

**S**: dispatch.py의 main() 함수(line 1413-1419)에서 이미지/광고 작업을 `--workflow image-qc-gate` 없이 dispatch할 때 WARNING만 출력하고 실행을 허용하는 구조였다.

**C**: 아누가 경고를 무시하여 배너 18장이 QC 없이 생성되는 사고가 발생했다. WARNING은 강제력이 없어 사실상 무방비 상태였다.

**Q**: 이미지/광고 작업의 QC 게이트를 강제 차단으로 전환하되, 의도적 우회 경로를 제공할 수 있는가?

**A**: WARNING을 `sys.exit(1)` 차단으로 변경하고, `--skip-qc-gate` 플래그를 통한 의도적 우회 경로를 추가했다. 영문 키워드("banner", "image")도 보강했다. pytest 149건 전체 통과, pyright 에러 0건.

## 변경 내용

### 1. argparse에 --skip-qc-gate 플래그 추가
- 위치: `dispatch.py:1342-1347` (`--workflow` 뒤, `--agent-type` 앞)
- `action="store_true"`, `default=False`

### 2. 이미지 QC 게이트 로직 변경
- 위치: `dispatch.py:1419-1430`
- 키워드 목록: `["이미지", "광고", "배너", "디자인"]` → `["이미지", "광고", "배너", "디자인", "banner", "image"]`
- `--skip-qc-gate` 있으면: `logger.warning()` + 통과
- `--skip-qc-gate` 없으면: `logger.error()` + `sys.exit(1)` 차단

### 3. 테스트 8건 추가
- 위치: `tests/test_dispatch.py:2751-2883` (TestImageQcGateBlock 클래스)
- 한국어 키워드 4건(이미지/광고/배너/디자인) 차단 테스트
- 영문 키워드 2건(banner/image) 차단 테스트
- `--skip-qc-gate` 우회 통과 테스트
- `--workflow image-qc-gate` 적용 시 통과 테스트
- 일반 작업(키워드 없음) 영향 없음 테스트

## 산출물

- `/home/jay/workspace/dispatch.py` (수정)
- `/home/jay/workspace/tests/test_dispatch.py` (테스트 추가)

## 테스트 결과

- pytest: 149 passed in 0.93s (기존 141 + 신규 8)
- pyright: 0 errors, 0 warnings (신규 코드 대상)
- 회귀: 없음

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **black 포맷 불일치** — `black dispatch.py tests/test_dispatch.py`로 수정
2. **영문 키워드 미탐지** — 기존 `["이미지", "광고", "배너", "디자인"]`에 `"banner"`, `"image"` 추가
3. **dev2 팀 qc_verify.py 부재** — dev1 팀 qc_verify.py로 대체 실행 (동일 로직)

## 모델 사용 기록

- 토르 / dispatch.py argparse + QC 게이트 로직 수정 / sonnet / -
- 헤임달 / 이미지 QC 게이트 테스트 8건 작성 / sonnet / -

## QC 셀프 체크

- [x] 1. 영향 파일: dispatch.py, tests/test_dispatch.py (2개만)
- [x] 2. 엣지 케이스: 키워드 부분 매치는 기존 `in` 연산자 동작과 동일
- [x] 3. 작업 지시와 정확히 일치
- [x] 4. 에러 처리: sys.exit(1) 차단, 보안 위험 없음
- [x] 5. 테스트: 차단/우회/통과 모든 경로 커버 (8건)
- [x] 6. 이슈 3건 모두 자체 해결
- [x] 7. 아키텍처 원칙 준수 (기존 패턴 유지)
- [x] 8. CLI 인터페이스 추가 (--skip-qc-gate), 하위 호환 유지 (기본값 False)
