# InsuWiki 정제 progress bar 0% 리셋 버그 수정

## 개요
정제 중 progress가 5% → 0%로 갑자기 떨어지는 버그를 수정한다.

## 원인 분석

**파일**: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py`

진행 흐름에서 progress가 역행하는 지점이 2곳:

### 버그 1: LLM 경로 진입 시 0% 리셋 (Line 969-983)
스레드 분리 완료 후 progress=10%까지 올라갔는데, LLM 경로 진입 시 `progress: 0`으로 덮어씀.
```python
# Line 972-974 — 여기서 0%로 리셋됨
"progress": 0,
"currentStep": "스레드 분리 중",
```

**수정**: 이 블록을 제거하거나, progress를 10 이상으로 유지.
스레드 분리가 이미 아래 `_split_threads_v2()`에서 0~10% 구간을 처리하므로, 이 초기화 블록은 불필요.

### 버그 2: 배치 처리 준비에서 0% (Line 1001-1019)
`skip_threads=0`이면 `progress: int(0/total*100) = 0`으로 씀. 스레드 분리 10%에서 다시 0%로.

**수정**: 배치 처리 시작 시 progress를 최소 10%로 보장.
```python
base_progress = max(10, int(skip_threads / max(original_total, 1) * 90) + 10)
# 배치 처리: 10~100% 구간 사용
```

### 전체 progress 구간 재설계 (권장)
- 0~5%: 메시지 파싱/필터링
- 5~10%: 스레드 분리 (LLM 정밀 분리 포함)
- 10~100%: 배치 처리 (스레드 수 기반 비례)

배치 처리 progress 계산:
```python
# Line 1104 수정
pct = 10 + int(progress.processed_threads / max(progress.total_threads, 1) * 90)
```

이렇게 하면 progress가 단조 증가(monotonically increasing)하며, 절대 역행하지 않음.

## 수정 요약
1. Line 969-983: LLM 경로 진입 시 progress=0 블록 제거 (또는 currentStep만 업데이트, progress는 그대로 유지)
2. Line 1004-1006: `progress: max(10, ...)` 으로 최소 10% 보장
3. Line 1104: 배치 progress를 `10 + (처리수/전체*90)` 으로 계산 (10~100% 구간)

## 검증 시나리오
1. 정제 시작 → 스레드 분리 중 progress 0~10% 점진 증가 → 배치 처리 시작 시 10% 이상 유지 → 배치 완료마다 점진 증가 → 100% 완료. **한 번도 역행하지 않으면 성공**
2. skip_threads > 0인 경우에도 progress가 10% 이상에서 시작하면 성공
3. 기존 테스트 회귀 없으면 성공
