# impact_analyzer.py — 정적 변경 영향 분석기

## Lv.2 작업

## 목적
변경된 파일 목록을 입력받아, 영향받는 함수/endpoint/모듈을 자동 추출. 시나리오 게이트에서 "어떤 시나리오를 실행할지" 필터링하는 데 사용.

## 구현

### 파일 위치
`/home/jay/workspace/teams/shared/qc/impact_analyzer.py`

### 입력
```bash
python3 impact_analyzer.py --files "server.py,knowledge_extractor_v2.py" --output impact.json
```

### 출력 (impact.json)
```json
{
  "changed_files": ["server.py", "knowledge_extractor_v2.py"],
  "affected_functions": ["extract_knowledge_v2", "_write_progress", "handle_refine_start"],
  "affected_endpoints": ["/api/wiki/refine/start", "/api/wiki/refine/resume"],
  "affected_imports": ["kakao_knowledge", "knowledge_extractor_v2"],
  "dependency_chain": {
    "server.py": ["knowledge_extractor_v2.py", "__main__.py"],
    "knowledge_extractor_v2.py": ["__main__.py"]
  }
}
```

### 구현 방법
1. **함수 추출**: Python `ast` 모듈로 각 변경 파일의 함수/클래스 정의 파싱
2. **import 추적**: `ast.Import`, `ast.ImportFrom` 노드로 의존성 그래프 구축
3. **endpoint 매핑**: `self.path == "/api/..."` 패턴을 grep으로 추출 (server.py 전용)
4. **역방향 추적**: "이 파일을 import하는 다른 파일" 찾기 (grep -r "from X import\|import X")

### 제약
- LLM 호출 없음 (AST + grep만)
- 실행 시간 30초 이내
- Python 파일만 대상 (.py). TypeScript는 Phase 2에서 확장

## 검증 시나리오
1. `--files server.py` → affected_endpoints에 `/api/wiki/refine/start` 포함 확인
2. `--files knowledge_extractor_v2.py` → affected_functions에 `extract_knowledge_v2` 포함 확인
3. `--files` 빈 값 → graceful 처리 (빈 impact.json 반환)
4. 존재하지 않는 파일 → 에러 없이 무시
5. 30초 이내 완료 확인 (time 명령으로 측정)

## 참조
- 3문서: `/home/jay/workspace/memory/plans/scenario-verification/`
- 미팅 기록: `/home/jay/workspace/memory/meetings/2026-04-13-scenario-verification-system.md`
- 기존 qc_verify.py: `/home/jay/workspace/teams/shared/qc_verify.py` (624줄)

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`
