# task-2153: Dispatch Quality Gates 통합 테스트 — 8개 핵심 시나리오

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

## 3문서 참조 (필독)
- 프로젝트 계획서: `/home/jay/workspace/memory/plans/system/dispatch-quality-gates/plan.md`
- 체크리스트: `/home/jay/workspace/memory/plans/system/dispatch-quality-gates/checklist.md` — P3 통합 검증 섹션

## 배경
P1(5개 컴포넌트) + P2(finish-task.sh 통합)가 모두 완료됨. 이제 전체 파이프라인이 통합적으로 동작하는지 8개 시나리오를 검증.

## 검증 대상 파일
- `/home/jay/workspace/scripts/finish-task.sh` — Step 2.6, 2.6.5, 2.11, 2.12, Step 3
- `/home/jay/workspace/scripts/impact_scanner.py` — 역방향 영향 범위 스캔
- `/home/jay/workspace/scripts/ci_preflight.sh` — 멀티 러너 CI 게이트
- `/home/jay/workspace/teams/shared/verifiers/l1_smoketest_check.py` — 회피 문구 차단
- `/home/jay/workspace/dispatch.py` — auto_inject + auto_generate (L948-1015, L2968-2971)
- `/home/jay/workspace/config/gate-config.json` — 게이트 설정
- `/home/jay/workspace/utils/gate_config_loader.py` — 설정 로더

## 8개 통합 시나리오

### 시나리오 1: "확인 불가" 보고서 → l1_smoketest FAIL
- 보고서에 "UI 직접 확인 불가" 텍스트 포함
- qc_verify.py --gate 실행
- 기대: l1_smoketest_check FAIL 반환

### 시나리오 2: 수정 파일 심볼 역추적 → 누락 파일 WARN
- 테스트용 Python 파일 2개 작성 (A.py에서 함수 정의, B.py에서 import)
- A.py만 수정한 것으로 가정하고 impact_scanner 실행
- 기대: B.py가 unmodified_references에 포함, gate_result=WARN

### 시나리오 3: pytest FAIL → ci_preflight FAIL → .done 차단 여부
- 실패하는 pytest 파일 임시 생성
- ci_preflight.sh 실행
- 기대: exit code 1 + overall=FAIL

### 시나리오 4: goal_assertions 전부 PASS → .done 생성 가능
- task 파일에 `## goal_assertions`에 `grep -c "def " scripts/impact_scanner.py` 등 확실히 성공하는 command
- finish-task.sh Step 2.12 실행
- 기대: GOAL-GATE PASS

### 시나리오 5: goal_assertions 1건 FAIL → .done 차단
- task 파일에 `grep -c "NONEXISTENT_PATTERN" some_file.py` 포함
- gate-config.json goal_assertions mode=fail
- 기대: GOAL-GATE BLOCKED

### 시나리오 6: 범위 내 미해결 4건 → unresolved_gate BLOCK
- 보고서에 "범위 내 미해결" 4건 포함
- gate-config.json max_in_scope_unresolved=3, mode=fail
- 기대: UNRESOLVED-GATE BLOCKED

### 시나리오 7: gate-config mode=warn → WARNING만 (차단 안 함)
- gate-config.json에서 goal_assertions mode=warn으로 변경
- 실패하는 goal assertion 실행
- 기대: WARNING 출력만, 차단 안 함

### 시나리오 8: 백틱 토큰 자동 추출 → affected_files 자동 주입
- task 파일에 `` `FeatureGate` `` 백틱 토큰 포함
- dispatch.py _auto_inject_affected_files() 실행
- 기대: affected_files (auto-detected) 섹션에 2+개 파일 나열

## 추가 검증
- 모든 시나리오 후 gate-config.json 원본 복원 (테스트로 변경한 값 원복)
- 기존 pytest 전체 회귀 테스트 (2400+ PASS)
- finish-task.sh 기존 Step 0~2.10 동작 정상 확인

## 완료 시그니처
- 8개 시나리오 전체 PASS (테스트 코드 또는 스크립트로 검증)
- 기존 테스트 회귀 없음
- 검증 보고서에 각 시나리오 실행 결과 명시

## 레벨
- Lv.2

## 프로젝트
- dev-system
