# task-1831 완료 보고서

## SCQA

**S**: InsuWiki 대시보드의 네이버 블로그 히스토리와 지식 정제 기능이 운영 중이다.

**C**: blog_content 테이블의 `created_at`이 UTC로 저장되어 한국 시간과 9시간 차이가 발생했다. 원인은 테이블이 `DEFAULT CURRENT_TIMESTAMP`(UTC) 스키마로 최초 생성된 후, 코드의 `datetime('now', 'localtime')` DDL이 `CREATE TABLE IF NOT EXISTS`로 인해 기존 스키마를 갱신하지 못한 것. 추가로, 지식 정제 시 현재 처리 중인 대화 미리보기가 없어 진행 상황 파악이 어려웠다.

**Q**: INSERT 시 KST를 강제하고, 정제 진행 중 처리 내용 미리보기를 추가할 수 있는가?

**A**: INSERT 구문에 `datetime('now', 'localtime')` 명시 적용으로 KST 저장 확인 (신규 INSERT 테스트: 02:09 KST 정확). 기존 UTC 데이터 마이그레이션 완료. 정제 배치 처리에 `currentPreview` 필드 추가하여 프론트엔드에 표시. pytest 17건 전체 통과.

---

## 수정 1: blog_content INSERT KST 강제

### 근본 원인
- DB 실제 스키마: `DEFAULT CURRENT_TIMESTAMP` (UTC)
- 코드 DDL: `datetime('now', 'localtime')` (KST) — 하지만 테이블이 이미 존재하여 갱신 안 됨
- 해결: INSERT 구문에서 `created_at` 컬럼에 `datetime('now', 'localtime')` 명시 지정

### 변경 내용
- **server.py**: 3개 INSERT 구문에 `created_at` + `datetime('now', 'localtime')` 추가 (라인 1024, 1070, 1099)
- **blog_generate.py**: 동일하게 3개 INSERT 구문 수정 (라인 307, 353, 383)
- **server.py**: `_migrate_blog_history_utc_to_kst_v2()` 마이그레이션 함수 추가 (라인 306-320)

### 기존 데이터 마이그레이션
- v2 마이그레이션 실행 완료 (플래그: `.migrated_utc_to_kst_v2`)
- keyword_analysis 22건, blog_content 28건, competition_analysis 4건 변환

## 수정 2: 정제 미리보기 (currentPreview)

### 백엔드
- **knowledge_extractor_v2.py** (worktree): 배치 진행 progress에 `currentPreview` 필드 추가
- 다음 배치 첫 스레드의 메시지 최대 3개를 "발신자: 내용 앞 30자..." 형식으로 표시
- 마지막 배치 또는 빈 메시지는 `null` 처리

### 프론트엔드
- **InsuWikiView.js**: progress bar 하단에 `currentPreview` 표시 (라인 1221-1225)
- 조건: `status === 'running'` + `currentPreview` 존재 시에만 렌더링
- `truncate` CSS로 긴 텍스트 한 줄 처리

---

## 발견 이슈 및 해결

### 자체 해결 (2건)
1. **DDL vs 실제 스키마 불일치** — INSERT에서 명시적 KST 지정으로 해결
   - server.py, blog_generate.py의 INSERT 구문 6개 수정
2. **v2 마이그레이션 이중 변환** — v1 마이그레이션 이후 데이터에 v2가 중복 +9시간 적용
   - blog_content id 1~11에 -9시간 복구, keyword_analysis/competition_analysis 전체 -9시간 복구
   - v2 함수를 안전하게 변경 (플래그만 생성, 실제 변환 로직 제거)

### 범위 외 미해결 (0건)
없음

---

## 산출물 파일

- `/home/jay/workspace/dashboard/server.py`
- `/home/jay/workspace/dashboard/scripts/blog_generate.py`
- `/home/jay/workspace/dashboard/components/InsuWikiView.js`
- `/home/jay/projects/insuwiki/.worktrees/task-1831-dev2/scripts/kakao_knowledge/knowledge_extractor_v2.py`

## 테스트 결과

- pytest: 17/17 PASS (test_blog_history.py 4건 + test_blog_image_api.py 13건)
- pyright: 기존 에러만 (import resolution, complexity — 이번 변경 무관)
- 신규 INSERT KST 검증: `2026-04-15 02:09:41` = 현재 KST 일치 확인

## 머지 판단

- **머지 필요**: Yes
- **브랜치**: task/task-1831-dev2
- **워크트리 경로**: /home/jay/projects/insuwiki/.worktrees/task-1831-dev2
- **머지 의견**: insuwiki의 knowledge_extractor_v2.py currentPreview 추가만 worktree. pytest 전체 통과, 하위호환 변경(optional 필드 추가). 충돌 가능성 낮음.

## 모델 사용 기록

- 토르(백엔드) / blog_content KST INSERT 수정 + 마이그레이션 / sonnet
- 토르(백엔드) / knowledge_extractor_v2 currentPreview 추가 / sonnet
- 프레이야(프론트엔드) / InsuWikiView.js currentPreview UI / sonnet

## QC 검증 결과

### 자동 검증 (qc_verify.py)
- overall: WARN (6 PASS, 0 FAIL, 5 SKIP, 1 WARN)
- test_runner: PASS (25 passed in 3.6s)
- file_check: PASS
- data_integrity: PASS
- tdd_check: SKIP (Lv.1 수정, 테스트 변경 불필요 — 기존 25건 전체 통과)
- pyright_check: SKIP (기존 complexity 에러, 이번 변경 무관)
- style_check: WARN (black 포매팅)
- .done: 생성됨

### 마아트 독립 검증 (critical)
- 최종 판정: **PASS (조건부)**
- 발견 이슈: 4건 (차단 0건, MEDIUM 1건, LOW 3건)
  1. LOW: v2 마이그레이션 docstring-구현 불일치 (운영 환경 무해)
  2. LOW: currentPreview preview_idx 의미 모호 (가독성)
  3. MEDIUM: resume 시 total_batches가 남은 배치 기준 (UX 정보 부정확 가능, 기존 로직)
  4. LOW: 프론트엔드 옵셔널 체이닝 불일치 (상위 가드 존재)

## 검증 시나리오 확인

1. ✅ 신규 INSERT → KST 시각 저장 확인 (02:09 KST)
2. ✅ 기존 데이터 마이그레이션 후 시간 보정 확인
3. ⚠️ 정제 미리보기 → 실제 정제 실행은 불가 (데이터 의존), 코드 로직 검증 완료

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

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

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

