# task-1762.1 완료 보고서

## S - Situation
QC 자동 검증(qc_verify.py)에 시나리오 기반 테스트 게이트가 없어, YAML로 정의된 통합 시나리오를 자동 실행하고 검증하는 파이프라인이 부재했다.

## C - Complication
수동 시나리오 검증은 누락 위험이 크고, Lv.3+ 작업에서 시나리오 부재를 감지할 게이트가 없어 코드 품질 보증에 공백이 있었다. data-flow, integration 시나리오의 자동 실행이 필요했다.

## Q - Question
시나리오 YAML 실행기를 구현하여 qc_verify.py의 CHECK_ORDER에 통합하고, 레벨별 빈 시나리오 정책(Lv.3+ 필수 / Lv.1-2 허용)을 적용할 수 있는가?

## A - Answer
scenario_runner.py를 신규 구현하여 qc_verify.py에 scenario_gate로 통합 완료. pytest 6건 전체 통과, qc_verify.py 스모크 테스트 PASS. 실행 시간 0.09초(4분 제한 대비 충분).

---

## 산출물 파일 목록

### 신규 생성
- `/home/jay/workspace/teams/shared/qc/__init__.py`
- `/home/jay/workspace/teams/shared/qc/scenario_runner.py`
- `/home/jay/workspace/teams/shared/qc/scenarios/insuwiki/refine.yaml`
- `/home/jay/workspace/teams/shared/qc/scenarios/dashboard/polling.yaml`
- `/home/jay/workspace/teams/shared/qc/tests/test_scenario_runner.py`

### 수정
- `/home/jay/workspace/teams/shared/qc_verify.py` — ALL_CHECKS에 scenario_gate 추가, --scenarios-dir/--level 파라미터 추가, run_check()에 scenario_gate 분기 추가

---

## 테스트 결과

### pytest (6/6 PASS)
```
test_run_scenarios_all_pass ............. PASSED
test_must_fail_triggers_gate_fail ...... PASSED
test_empty_scenarios_level3_fail ....... PASSED
test_empty_scenarios_level1_skip ....... PASSED
test_impact_filtering .................. PASSED
test_execution_within_timeout .......... PASSED
(0.09s)
```

### 검증 시나리오 매핑
1. scenario_runner.py → result.json gate: "PASS" 확인 — PASS
2. must 시나리오 FAIL → gate: "FAIL" 확인 — PASS
3. 시나리오 0건 + level 3 → FAIL 반환 확인 — PASS
4. 시나리오 0건 + level 1 → SKIP 반환 확인 — PASS
5. qc_verify.py 통합 실행 → scenario_gate PASS 확인 — PASS
6. 실행 시간 0.09초 (4분 이내) — PASS

### qc_verify.py 스모크 테스트
- `--scenarios-dir qc/scenarios/insuwiki --level 2` → scenario_gate: PASS

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **verify() 매개변수 미사용** — check_files를 affected 필터 fallback으로 활용, task_id를 결과 메시지에 포함 (scenario_runner.py:233-259)
2. **테스트 미사용 import** — `import pytest` 제거 (test_scenario_runner.py:7)
3. **Pyright import 해석 불가** — `from qc import scenario_runner`가 런타임 sys.path 조작 의존. 기존 `from verifiers import ...` 패턴과 동일하므로 런타임 정상. Pyright reportMissingImports는 기존 경고와 동일 패턴 (범위 외)

### 범위 외 미해결 (1건)
1. **Pyright reportMissingImports 경고** — qc_verify.py의 verifiers, utils.circuit_breaker, qc 모듈 import가 Pyright에서 해석 불가. 런타임 sys.path 조작 패턴이라 Pyright 한계. 해결 시 pyrightconfig.json extraPaths 설정 필요 (다른 팀 소관)

---

## 구현 상세

### scenario_runner.py 아키텍처
- `_load_impact()` — impact.json에서 affected 파일 목록 추출
- `_load_scenarios()` — 디렉토리 재귀 탐색하여 YAML 시나리오 로드
- `_matches_affected()` — 파일명 부분 매칭으로 시나리오 필터링
- `_run_curl_step()` / `_run_subprocess_step()` / `_run_pytest_step()` — type별 실행기
- `_run_scenario()` — 단일 시나리오의 모든 step 순차 실행
- `run_scenarios()` — ThreadPoolExecutor(max_workers=5) 병렬 실행 + 결과 집계
- `verify()` — qc_verify.py 통합 인터페이스 (레벨별 빈 시나리오 정책 포함)
- `main()` — CLI 독립 실행 인터페이스

### qc_verify.py 변경 범위
- `ALL_CHECKS`: "scenario_gate" 항목 추가 (1줄)
- `parse_args()`: --scenarios-dir, --level 파라미터 2개 추가
- `run_check()`: scenarios_dir, level 매개변수 + scenario_gate elif 분기 추가
- `main()`: run_check 호출 시 scenarios_dir, level 전달

---

## 모델 사용 기록
- 토르(백엔드) / scenario_runner.py 구현 + qc_verify.py 통합 / sonnet / -
- 헤임달(테스터) / 시드 YAML + 테스트 작성 / sonnet / -
- 오딘(팀장) / Pyright 이슈 수정, verify() 매개변수 활용 / opus / 팀원 미수정 이슈 직접 개입

---

## QC 자동 검증 결과
- **overall**: WARN (Gate PASS)
- 7 PASS, 6 SKIP, 1 WARN
- WARN: tdd_check — 병렬 위임으로 구현/테스트 동시 작성. audit-trail 타이밍 순서 WARN
- pyright_check: SKIP — pyright JSON 파싱 실패 (기존 verifier 이슈, 범위 외)
- style_check: PASS (black+isort 적용 후 재검증)
- test_runner: 28 passed in 1.32s
- .done 파일 생성: `/home/jay/workspace/memory/events/task-1762.1.done`

---

## 머지 판단
- **머지 필요**: No (시스템 작업, worktree 미사용)
- **브랜치**: N/A
- **워크트리 경로**: N/A
- **머지 의견**: shared/qc/ 디렉토리에 직접 작성. 기존 qc_verify.py 하위 호환 유지.

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

### 수정 파일 목록
- /home/jay/workspace/teams/shared/qc_verify.py: 5회 (Edit)
- /home/jay/workspace/memory/reports/task-1762.1.md: 2회 (Edit, Write)
- /home/jay/workspace/teams/shared/qc/scenario_runner.py: 2회 (Edit, Write)
- /home/jay/workspace/teams/shared/qc/tests/test_scenario_runner.py: 2회 (Edit, Write)
- bash_cmd: 2회 (Bash)
- /home/jay/workspace/memory/tasks/task-1762.1.md: 1회 (dispatch)
- /home/jay/workspace/teams/shared/qc/__init__.py: 1회 (Write)
- /home/jay/workspace/teams/shared/qc/scenarios/dashboard/polling.yaml: 1회 (Write)
- /home/jay/workspace/teams/shared/qc/scenarios/insuwiki/refine.yaml: 1회 (Write)

### 도구 사용 현황
- Edit: 8회
- Write: 6회
- Bash: 2회
- dispatch: 1회

