# InsuWiki 카카오톡 정제 UI 3건 수정

## 수정 1: 실패 progress bar 영구 표시 문제

**파일**: `/home/jay/workspace/dashboard/components/InsuWikiView.js` Line 1174 부근

**현재**: `refineStatus.status !== 'idle'`이면 무조건 표시 → 이전 실패가 영구 표시됨

**수정**:
- failed/completed/cancelled 상태일 때 progress bar 우측에 **X 닫기 버튼** 추가
- 닫기 클릭 시 서버에 POST /api/wiki/refine/clear 호출 → refine-status.json을 idle로 리셋
- 서버 측 clear API 추가 필요 (`/home/jay/workspace/dashboard/server.py`)

```javascript
// progress bar 영역 우측 상단에 닫기 버튼
{(refineStatus.status === 'failed' || refineStatus.status === 'completed' || refineStatus.status === 'cancelled') && (
    <button onClick={handleRefineClear} className="text-slate-400 hover:text-slate-600">✕</button>
)}
```

서버 측:
```python
# POST /api/wiki/refine/clear
if self.path == "/api/wiki/refine/clear":
    status_path = Path(__file__).parent / "data" / "refine-status.json"
    status_path.write_text(json.dumps({"status": "idle", "progress": 0, "currentStep": ""}, ensure_ascii=False), encoding="utf-8")
    self.send_api_response({"status": "ok"})
```

## 수정 2: 정제 이력 상태 동적 갱신

**파일**: `/home/jay/workspace/dashboard/server.py` — GET /api/wiki/refine/history (Line 3320 부근)

**현재**: refine-history.json을 그대로 반환 → 프로세스가 죽어도 이력에 "running" 유지

**수정**: history API에서 반환 전에 현재 refine-status.json 상태를 반영

```python
# GET /api/wiki/refine/history 핸들러에서:
# 1. history 로드
# 2. 현재 refine-status.json 로드
# 3. history 중 status=="running"인 항목이 있으면:
#    - 현재 refine-status가 failed/completed/cancelled이면 → history 항목도 동일하게 갱신
#    - lock 파일의 PID가 죽었으면 → "failed"로 갱신
# 4. 갱신된 history를 refine-history.json에 저장하고 반환
```

프론트엔드 표시 (`InsuWikiView.js` Line 1634 부근):
```javascript
// "진행중" → 파란 배지, "실패" → 빨간 배지, "완료" → 녹색 배지
{h.status === 'completed' ? <span className="text-emerald-400">완료</span> :
 h.status === 'running' ? <span className="text-blue-400">진행중</span> :
 h.status === 'failed' ? <span className="text-red-400">실패</span> :
 h.status === 'cancelled' ? <span className="text-amber-400">취소</span> : h.status}
```

이미 이 코드가 있을 수 있음. 핵심은 **서버에서 history 반환 시 상태를 동적으로 갱신**하는 것.

## 수정 3: 통계 카드 "INSUWIKI 반영" → 미반영 건수 추가

**파일**: `/home/jay/workspace/dashboard/server.py` — /api/wiki/stats (Line 3370 부근)
**파일**: `/home/jay/workspace/dashboard/components/InsuWikiView.js` — 통계 카드 (Line 1667 부근)

**현재**: "INSUWIKI 반영: 105" (sync 완료 건수만 표시)

**수정**:
- 서버: `not_synced_count = approved_count - synced_count` (승인됐지만 아직 sync 안 된 건수)
- 프론트엔드: "INSUWIKI 반영" 카드를 2줄로 변경
  - 메인: 반영 완료 건수
  - 서브: "미반영 XX건" (not_synced > 0일 때만 표시, 주황색)
- 또는 기존 "INSUWIKI 반영" 옆에 "미반영" 카드를 하나 더 추가

서버 응답에 `not_synced` 필드 추가:
```python
stats = {
    ...
    "synced": synced_count,
    "not_synced": status_counts.get("approved", 0) - synced_count,
}
```

## 검증 시나리오
1. **실패 닫기**: 실패 progress bar에서 X 버튼 클릭 → progress bar 사라짐 → 새로고침해도 안 보임
2. **정제 이력 동적 갱신**: 프로세스가 죽은 상태에서 정제 이력 로드 → "실패"로 표시 (진행중 아님)
3. **미반영 표시**: 승인 13건 중 sync 안 된 건이 있으면 "미반영 X건" 표시
4. **running 상태 정상**: 실제 정제 실행 중일 때 progress bar 실시간 업데이트 + 이력 "진행중" 정상 표시
5. **SW 캐시**: dashboard-v13 → v14로 bump하여 브라우저 즉시 반영
