# 인슈위키 정제 UI 상시 표시 + Stop 버튼

## 배경
1. 정제 영역(progress bar, 실시간 로그)이 idle일 때 숨겨져서, 정제 시작 후 새로고침해야 보임
2. 정제 프로세스를 멈추는 Stop 버튼이 없음

## 작업 A: 정제 현황 영역 상시 표시

### 현재 동작
- `refineStatus.status !== 'idle'`일 때만 progress bar/로그 패널 렌더링
- idle일 때 폴링 안 함 (1회 초기 로드만)

### 수정
파일: `/home/jay/workspace/dashboard/components/InsuWikiView.js`

1. **progress bar + 로그 영역 항상 렌더링**
   - 조건 `refineStatus.status !== 'idle'` 제거
   - idle일 때: "대기 중 — 정제 작업 없음" 텍스트 + progress bar 0% (회색)
   - running일 때: 기존대로 실시간 데이터
   - cancelled일 때: "취소됨" + 이어서 정제 버튼
   - completed일 때: "완료" + 결과 요약

2. **idle 상태에서도 느린 폴링**
   - 현재: running일 때만 2초 폴링
   - 수정: idle/cancelled일 때 10초 간격 폴링 추가
   - running 감지되면 2초 빠른 폴링으로 전환

### 수정 코드 위치
- 1228행: `refineStatus && refineStatus.status !== 'idle'` → `refineStatus` (idle 조건 제거)
- 458~473행: useEffect 폴링 로직에 idle 10초 폴링 추가:
```javascript
useEffect(() => {
    if (refineStatus?.status === 'running') {
        const timer = setInterval(pollRefineStatus, 2000);
        return () => clearInterval(timer);
    }
    // idle/cancelled/completed에서도 느린 폴링
    const slowTimer = setInterval(pollRefineStatus, 10000);
    return () => clearInterval(slowTimer);
}, [refineStatus?.status, pollRefineStatus]);
```

## 작업 B: Stop 버튼 추가

### 프론트엔드
파일: `/home/jay/workspace/dashboard/components/InsuWikiView.js`

- running 상태일 때 progress bar 옆에 "정제 중단" 빨간 버튼 표시
- 클릭 시 `POST /api/wiki/refine/stop` 호출
- 호출 후 상태를 cancelled로 변경

### 백엔드 API
파일: `/home/jay/workspace/dashboard/routes_post.py`

- `handle_post_wiki_refine_stop()` 핸들러 추가
- lock 파일에서 PID 읽기 → `os.kill(pid, signal.SIGTERM)` → status를 cancelled로 업데이트
- lock 파일 메타데이터 보존 (이어서 정제 가능하도록)

파일: `/home/jay/workspace/dashboard/server.py`

- 라우팅 테이블에 `POST /api/wiki/refine/stop` 추가

## 영향 파일
- `/home/jay/workspace/dashboard/components/InsuWikiView.js` — 수정
- `/home/jay/workspace/dashboard/routes_post.py` — 수정 (stop 핸들러 추가)
- `/home/jay/workspace/dashboard/server.py` — 수정 (라우팅 추가)

## 검증 시나리오
1. idle 상태에서 대시보드 진입 → "대기 중" 텍스트 + 0% bar 보임
2. 백그라운드에서 정제 시작 → 10초 이내 자동으로 running 감지 + 실시간 표시
3. running 중 Stop 버튼 클릭 → 프로세스 종료 + cancelled 상태 전환
4. Stop 후 "이어서 정제" 버튼 표시
5. 기존 정제 시작/이어서/완료 기능 회귀 없음

## 주의
- InsuWikiView.js 대용량 — offset/limit
- server.py 라우팅 테이블 패턴 사용 (712줄로 리팩토링됨)
- os.kill 시 SIGTERM 사용 (SIGKILL 아님)
- 수정 후 즉시 커밋
- 서버 재시작 필요