# task-1694.1 완료 보고서

## SCQA

**S**: 네이버블로그 대시보드에서 AI가 생성한 블로그 글을 "생성된 블로그 글" 영역에 표시하고 있다.

**C**: 생성된 본문에 이미지프롬프트 텍스트(`[이미지프롬프트: ...]`, `alt text: ...`)가 그대로 노출되고, 마크다운 표가 파이프문자(`|`)로만 표시되며, FAQ의 Q/A 쌍이 줄바꿈 없이 붙어 표시되는 4건의 표시 문제가 있다.

**Q**: 이미지프롬프트 제거, 표 렌더링, 글자수 정확도, FAQ 줄바꿈 4건을 모두 해결할 수 있는가?

**A**: `stripImagePromptText()` 유틸리티 함수를 도입하여 프론트엔드(parseBlogContent, generateCleanHTML, 복사 함수 6곳)와 백엔드(`_analyze_text_metrics`)에 공통 적용. 마크다운 표를 HTML table로 변환하는 파서 추가, FAQ Q/A 패턴에 margin 간격 적용. 수정 파일 2개, 변경 지점 14곳.

---

## 수정 내역

### 1. 이미지 프롬프트 텍스트 본문 제거
- `stripImagePromptText()` 함수 신규 생성 (NaverBlogView.js:511-517)
  - `[이미지프롬프트:...]` 블록 제거 (멀티라인 대응)
  - `alt text:` 라인 제거
  - 연속 빈 줄 정리
- `parseBlogContent()` 진입 시 적용 (line 386)
- `generateCleanHTML()` 진입 시 적용 (line 522)
- 복사 함수 6곳에 모두 적용:
  - handleCopy textBlob (line 797)
  - handleCopy text mode (line 805)
  - handleCopy fallback (line 811)
  - 히스토리 텍스트 복사 (line 1790)
  - 히스토리 블로그용 복사 text blob (line 1794)
  - 히스토리 복사 fallback (line 1795)

### 2. 표(table) HTML 렌더링
- `parseBlogContent()`: 마크다운 표 파싱 + HTML table 변환 (lines 408-501)
  - `|`로 시작/끝나는 연속 줄 감지, separator(`|---|`) 자동 제외
  - 첫 행을 `<th>` (헤더), 나머지를 `<td>` (본문)으로 렌더링
  - isDarkMode() 다크모드 호환 적용
- `generateCleanHTML()`: 동일 로직, 라이트모드 색상 고정 (lines 544-636)

### 3. 글자수 카운트 수정
- **확인 결과**: `_analyze_text_metrics()` (server.py:660)에서 원본 텍스트 전체로 `char_count` 계산 — 이미지프롬프트 텍스트가 포함되어 과다 계산됨
- **수정**: `clean` 변수에 정제된 텍스트 저장 후 `char_count`, `keyword_count` 계산 (server.py:662-665)
- `image_count`, `heading_count`는 원본 `text` 기반 유지 (구조 마커 카운트)

### 4. FAQ Q/A 줄바꿈
- `parseBlogContent()`: `**Q:` / `Q:` 패턴에 margin-top 20px, `**A:` / `A:` 패턴에 margin-bottom 20px 적용 (lines 476-481)
- `generateCleanHTML()`: 동일 로직, 라이트모드 색상 고정 (lines 612-617)

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **복사 시 이미지프롬프트 포함** — handleCopy + 히스토리 복사 6곳에 stripImagePromptText 래핑 적용
2. **generateCleanHTML에 isDarkMode 참조** — generateCleanHTML은 복사용이므로 라이트모드 색상으로 하드코딩 확인 완료
3. **keyword_count도 프롬프트 포함 카운트** — clean 텍스트 기반으로 변경하여 keyword_density 정확도 개선

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

---

## 산출물 파일
- `/home/jay/workspace/dashboard/components/NaverBlogView.js`
- `/home/jay/workspace/dashboard/server.py`

## 다크모드 호환
- parseBlogContent: isDarkMode() 적용 ✓ (테이블 border/bg/text, FAQ 텍스트)
- generateCleanHTML: 라이트모드 고정 ✓ (복사용)
- 기존 다크모드 패턴과 동일한 색상 팔레트 사용

## QC 결과
- overall: WARN (6 PASS, 6 SKIP, 1 WARN)
- test_runner: PASS (pytest 10 passed, 0 failed)
- tdd_check: SKIP (Lv.1 작업 — TDD 불필요)
- pyright_check: SKIP (server.py:1284 기존 복잡도 에러, 우리 변경과 무관)
- style_check: WARN (black 포맷팅 — 기존 스타일)
- TRUST: T✓ R✓ U✓ S✓ T✓

## 모델 사용 기록
- 이쉬타르 / 프론트엔드 4건 수정 (NaverBlogView.js) / sonnet
- 엔키 / 백엔드 charCount 수정 (server.py) / sonnet

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

### 수정 파일 목록
- /home/jay/workspace/dashboard/components/NaverBlogView.js: 7회 (Edit)
- /home/jay/workspace/memory/reports/task-1694.1.md: 2회 (Edit, Write)
- /home/jay/workspace/dashboard/server.py: 1회 (Edit)
- /home/jay/workspace/memory/tasks/task-1694.1.md: 1회 (dispatch)

### 도구 사용 현황
- Edit: 9회
- Write: 1회
- dispatch: 1회

