# 정제 파이프라인 — selectedMonth 필터링 구현

## Lv.2 작업

## 문제 (원인 분석 완료)
대시보드에서 정제 시작 시 `selectedMonth: "2026-03"`을 선택하지만, 파이프라인은 **전체 기간 데이터를 처리**한다.

### 원인
1. `server.py`의 정제 시작 API(`/api/wiki/refine/start`, 5637줄)에서 `cmd` 배열에 `selectedMonth`를 **전달하지 않음**
2. `kakao_knowledge` 모듈(`__main__.py`, `knowledge_extractor_v2.py`)에 month 필터링 파라미터/로직이 **존재하지 않음**
3. `selectedMonth`는 lock 파일과 history 메타데이터에만 저장됨 — 파이프라인이 사용하지 않음

결과: 132,721줄(2025.8~2026.4) 전체가 2935개 스레드로 분리되어 LLM 정밀 분리에 1시간 이상 소요.

## 수정

### 1. `kakao_knowledge/__main__.py` — `--month` CLI 파라미터 추가
```python
parser.add_argument("--month", type=str, default="",
    help="처리할 월 (YYYY-MM 형식). 해당 월의 메시지만 필터링")
```
`pipeline-v2` 서브커맨드에 추가하고, `extract_knowledge_v2()`에 전달.

### 2. `knowledge_extractor_v2.py` — 메시지 월 필터링
`extract_knowledge_v2()` 함수에 `month: str = ""` 파라미터 추가.

카카오톡 메시지 파싱 후, 스레드 분리 전에 **월 필터링** 적용:
```python
if month:
    # ChatMessage.date 형식: "2026년 3월 4일" 또는 "2026. 3. 4."
    # YYYY-MM에서 year, month 추출
    year_str, month_str = month.split("-")
    messages = [m for m in messages if _matches_month(m.date, year_str, month_str)]
    logger.info(f"월 필터: {month} → {len(messages)}개 메시지 (원본 {original_count}개)")
```

`_matches_month` 헬퍼 함수 추가:
```python
def _matches_month(date_str: str, year: str, month: str) -> bool:
    """카카오톡 날짜 문자열이 지정 월과 일치하는지 확인"""
    # "2026년 3월 4일" 패턴
    # "2026. 3. 4." 패턴  
    # 두 패턴 모두 처리
```

### 3. `server.py` — 정제 시작 API에 `--month` 전달
`/api/wiki/refine/start` (5637줄) cmd 배열에 추가:
```python
if selected_month:
    cmd.extend(["--month", selected_month])
```

`/api/wiki/refine/resume` (6004줄) cmd 배열에도 동일하게 추가:
```python
if selected_month:
    cmd.extend(["--month", selected_month])
```

## 참조
- `server.py` 정제 시작: 5637줄 (cmd 배열)
- `server.py` resume: 6004줄 (cmd 배열)
- `__main__.py`: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/__main__.py`
- `knowledge_extractor_v2.py`: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py`
- ChatMessage 타입: `knowledge_extractor_v2.py`에서 `ChatMessage` dataclass 확인
- 날짜 파싱: `_parse_kakao_export()` 함수 내 날짜 형식 참조

## 테스트
- `--month 2026-03` 옵션으로 실행 시 3월 메시지만 필터링되는지 확인
- `--month` 없이 실행 시 기존과 동일하게 전체 처리 (하위 호환)
- pytest 기존 테스트 전부 통과
- progress 업데이트가 정상 동작하는지 확인

## 수정 후
- 빌드/푸쉬 불필요 (백엔드 스크립트)
- 대시보드 재시작: `systemctl --user restart dashboard`

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