# task-1800 완료 보고서: InsuWiki탭 3건 수정

## SCQA

**S**: InsuWiki 대시보드의 정제결과리뷰 기능이 125건의 데이터를 처리하며 운영 중이다. 백엔드 추출기는 H1/H2 월 필터를 지원하고, 승인/제외 API가 정상 동작한다.

**C**: 세 가지 프론트엔드/백엔드 불일치가 발견되었다. (1) 승인 후 항목이 리스트에서 사라지지 않음 — 필터가 `excluded`만 제외하고 `approved`를 제외하지 않았음. (2) wiki_entries.json 219건 중 45건의 source_date가 빈 문자열 — _split_thread_at()에서 sub-thread에 start_time을 전달하지 않음. (3) H1/H2 월 분할이 프론트엔드에 미반영 — task-1780 worktree 정리 시 프론트엔드 변경이 유실됨.

**Q**: 세 가지 불일치를 수정하여 정제결과리뷰, 날짜 데이터, H1/H2 월 필터가 정상 동작하도록 할 수 있는가?

**A**: 3건 모두 수정 완료. (1) 필터를 `reviewStatus === 'pending'`으로 변경하여 승인/제외 시 즉시 리스트에서 제거. (2) _split_thread_at()에서 sub-thread 첫 메시지 날짜를 start_time으로 설정 + 기존 45건 인접 날짜 기반 백필로 빈 source_date 0건 달성. (3) upload API에 H1/H2 월 분할 반환 + --month 파라미터 subprocess 전달 + 프론트엔드 드롭다운 라벨 변환.

---

## 수정 상세

### 수정 1: 승인/제외 후 리스트에서 항목 제거
- `InsuWikiView.js` line 1250: `.filter(item => item.flagged && item.reviewStatus === 'pending')`
- `InsuWikiView.js` line 1419: `.filter(item => !item.flagged && item.reviewStatus === 'pending')`
- 기존: `reviewStatus !== 'excluded'` → approved 항목이 리스트에 남음
- 수정: `reviewStatus === 'pending'` → pending만 표시, approved/excluded 모두 제거

### 수정 2: source_date 빈 문자열 수정
- `knowledge_extractor_v2.py` line 384-399: `_split_thread_at()` 수정
  - 기존: non-first sub-thread의 start_time을 빈 문자열로 설정
  - 수정: sub-thread 첫 메시지의 date/time으로 start_time 설정
- `wiki_entries.json`: 45건 빈 source_date 백필 완료 (인접 항목 날짜 기반 추론)
  - 수정 전: 219건 중 45건 빈 source_date
  - 수정 후: 219건 중 0건 빈 source_date

### 수정 3: H1/H2 월 분할 프론트엔드 반영
- `server.py` line 5617-5621: upload API에서 months를 H1/H2로 분할 반환
  - 예: `["2026-03"]` → `["2026-03-H1", "2026-03-H2"]`
- `server.py` line 5622-5625: dateRange은 원래 YYYY-MM 형식 유지 (H1/H2 오염 방지)
- `server.py` line 5706-5707: refine/start subprocess에 `--month` 파라미터 전달
- `InsuWikiView.js` line 1145-1150: 드롭다운 라벨 변환
  - `"2026-03-H1"` → `"2026-03 상반기 (1~15일)"`
  - `"2026-03-H2"` → `"2026-03 하반기 (16~말일)"`

---

## 산출물 파일

- `/home/jay/workspace/dashboard/components/InsuWikiView.js`
- `/home/jay/workspace/dashboard/server.py`
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py`
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/wiki_entries.json`
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/wiki_entries.json.bak`

---

## 테스트 결과

- knowledge_extractor_v2 테스트: **47/47 PASS** (0.21s)
- server.py 테스트: 12 passed, **1 failed** (기존 이슈: test_fixed_project_order, 본 작업 범위 외)
- API 검증: `/api/wiki/refine/results` 정상 응답 (totalCount=125, pendingCount=0, approvedCount=114, excludedCount=11)
- 대시보드 서비스 재시작: 성공 (port 8000)

⚠️ 기존 테스트 실패 1건 (본 작업 범위 외): `test_server.py::TestGetProjectClassifiedTasks::test_fixed_project_order` — 프로젝트 순서 변경으로 인한 assert 실패 (BlogAuto vs Dashboard 순서)

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **dateRange에 H1/H2 포함 버그** — upload API에서 dateRange.start/end가 "2026-03-H1" 형태가 되는 문제를 sorted_dates 사전 분리로 해결
2. **마지막 sub-thread start_time 누락** — _split_thread_at() 루프 후 마지막 sub-thread에도 start_time 설정 로직 추가
3. **server.py에 --month 미전달** — refine/start subprocess cmd에 --month 파라미터 조건부 추가

### 범위 외 미해결 (1건)
1. **test_fixed_project_order 테스트 실패** — 범위 외 사유: 프로젝트 목록 순서 변경은 다른 작업에서 발생한 것으로, InsuWiki 수정과 무관

---

## 셀프 QC 체크리스트

- [x] 1. 영향 파일: InsuWikiView.js, server.py, knowledge_extractor_v2.py, wiki_entries.json
- [x] 2. 엣지 케이스: 빈 results 배열, H1/H2 미포함 기존 월 형식, sub-thread 메시지 없는 경우, dates 빈 세트
- [x] 3. 작업 지시 일치: 3건 수정 모두 지시대로 완료
- [x] 4. 에러 처리/보안: 필터 변경으로 보안 영향 없음
- [x] 5. 테스트 커버리지: extractor 47/47 PASS, server 기존 실패 1건
- [x] 6. 이슈 직접 해결: 3건 발견, 3건 자체 해결 (dateRange 오염, 마지막 sub-thread, --month 미전달)
- [x] 7. 코드 아키텍처: 단순 버그 수정으로 SOLID/DRY 위반 없음
- [x] 8. 인터페이스 변경: upload API months 형식 변경 (YYYY-MM → YYYY-MM-H1/H2), 내부용 API
- [x] 9. HTML/PNG: 해당 없음
- [x] 10. CLAUDE.md: 해당 없음

---

## 마아트 독립 검증 (critical)

**최종 판정: PASS**
- 수정 1: 필터 변경 정확 확인 (line 1250, 1419)
- 수정 2: _split_thread_at() 방어 로직 확인, wiki_entries.json 빈 source_date 0건
- 수정 3: H1/H2 분할/라벨/dateRange 분리/--month 전달 모두 정확
- 회귀: 47/47 테스트 통과
- 경고: line 1260, 1428의 approved 배지 코드는 pending 필터로 인해 dead-code (기능 무해, 후속 정리 권고)

---

## QC 자동 검증 결과

**Overall: FAIL (에스컬레이션)** — 3회 시도 후 FAIL

- file_check: PASS (4/4 파일 존재)
- data_integrity: PASS
- test_runner: PASS (62 passed, 0 failed)
- tdd_check: **FAIL** — Lv.1 버그 수정 3건으로 TDD 미적용 대상이나 자동 레벨 판별 불가
- pyright_check: **FAIL** — server.py line 1610, 5208 기존 복잡도 에러 (본 작업 변경 line 5617, 5706과 무관)
- style_check: WARN (black 포맷팅 차이)
- critical_gap: PASS
- spec_compliance: PASS
- duplicate_check: PASS

TRUST 5: T(false) R(false) U(true) S(true) T(true)

---

## 모델 사용 기록

- 프레이야 / 프론트엔드 수정 3건 / sonnet / -
- 토르 / 백엔드 수정 3건 / sonnet / -
- 토르 / source_date 백필 / sonnet / -

## 세션 통계
- 총 도구 호출: 17회

### 수정 파일 목록
- bash_cmd: 4회 (Bash)
- /home/jay/workspace/dashboard/components/InsuWikiView.js: 3회 (Edit)
- /home/jay/workspace/dashboard/server.py: 3회 (Edit)
- /home/jay/workspace/memory/reports/task-1800.md: 3회 (Edit, Write)
- /home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py: 2회 (Edit)
- /home/jay/.cokacdir/workspace/58590242/backfill_source_date.py: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1800.md: 1회 (dispatch)

### 도구 사용 현황
- Edit: 10회
- Bash: 4회
- Write: 2회
- dispatch: 1회

