# task-2145: l1_smoketest_check.py 강화 — "확인 불가" 패턴 차단 + 증거 필수

## ★ 프로젝트: `/home/jay/workspace/`

## 3문서 참조 (필독)
- 프로젝트 계획서: `/home/jay/workspace/memory/plans/system/dispatch-quality-gates/plan.md`
- 맥락노트: `/home/jay/workspace/memory/plans/system/dispatch-quality-gates/context-notes.md`
- 미팅 기록: `/home/jay/workspace/memory/meetings/2026-04-24-dispatch-quality-automation.md` (Cycle 2 이잠나 의견)

## 문제
현재 `l1_smoketest_check.py`가 "UI 직접 확인 불가", "해당없음" 등의 회피 문구를 허용하여, 봇이 실동작 검증 없이 .done을 생성할 수 있음.
실제 사례: task-2140 — "인증 필요 환경으로 UI 직접 확인 불가"인데 완료 처리됨.

## 수정

### 파일: `/home/jay/workspace/teams/shared/verifiers/l1_smoketest_check.py`

#### 1. BLOCK_PATTERNS 추가
```python
BLOCK_PATTERNS = [
    r"UI 직접 확인 불가",
    r"서버 기동 불가",
    r"환경 제약으로 확인 불가",
    r"해당없음.*스모크",
    r"N/A.*L1",
]
```
보고서에 위 패턴 매칭 시 FAIL 반환.

#### 2. EXEMPT_PATTERNS 추가
```python
EXEMPT_KEYWORDS = ["UI", "컴포넌트", "화면", "페이지", "프론트", "frontend", "component"]
```
task 파일에 위 키워드가 **없으면** → 스크린샷 요구 면제 (유틸리티/백엔드 작업).
task 파일에 위 키워드가 **있으면** → EXEMPT 무효화, 스크린샷 필수.

#### 3. 증거 필수 체크
스크린샷 경로 OR curl 200 응답 OR pytest passed 중 하나 이상 있어야 PASS.
```python
has_screenshot = bool(re.search(r'(screenshot|스크린샷|\.png|\.jpg)', report_content, re.I))
has_curl = bool(re.search(r'(curl.*200|HTTP/.*200|응답 코드.*200)', report_content, re.I))
has_test_output = bool(re.search(r'(pytest.*passed|PASSED|tests passed)', report_content, re.I))
```

## ★ 먼저 읽을 파일
- `/home/jay/workspace/teams/shared/verifiers/l1_smoketest_check.py` — 기존 전체 코드
- `/home/jay/workspace/teams/shared/QC-RULES.md` — l1_smoketest_check 설명 섹션

## 검증 시나리오

### 시나리오 1: BLOCK 매칭
보고서에 "UI 직접 확인 불가" 포함 → verify() FAIL 반환

### 시나리오 2: EXEMPT 매칭
task 파일에 "UI" "컴포넌트" 없는 백엔드 작업 → "해당없음" 허용 → PASS

### 시나리오 3: 증거 누락
보고서에 스크린샷 경로, curl 결과, test 결과 모두 없음 → FAIL

### 시나리오 4: 정상 케이스
보고서에 "스크린샷: /path/to/screenshot.png" 포함 → PASS

### 시나리오 5: 기존 verifier 회귀
qc_verify.py --gate 실행 시 기존 21개 verifier 전체 정상 동작

## 완료 시그니처
- BLOCK_PATTERNS 5개 구현
- EXEMPT 조건 동작
- 증거 필수 체크 동작
- 단위 테스트 3건+ PASS
- 기존 verifier 회귀 없음

## 레벨
- critical

## 프로젝트
- dev-system
