# 완료 보고 메시지 포맷 개선 (코드화)

## 태스크 ID: task-927.1
## 한정위임: 완료까지

---

## 배경

팀장봇의 완료 알림 메시지(`format_notification_message()`)가 plain text로 생성되어 가독성이 떨어짐.
제이회장님이 승인한 마크다운 포맷으로 출력되도록 코드를 수정한다.

## 현재 출력 (plain text)

```
✅ task-924.1 완료 (dev1-team, 6분 12초)

[요약] prioritize_results() 함수를 추가하여...

📁 생성/수정: 4개 파일
🧪 테스트: pyright 0 errors
⚠️ 미해결: 2건 (test_runner SKIP, tdd_check SKIP)

📄 상세: memory/reports/task-924.1.md
```

## 목표 출력 (마크다운 포맷)

```
**task-924.1 완료 보고**
**InfoKeyword 키워드 우선순위 평가 기능 추가** (6분 12초)

**핵심 결과**
1. `prioritize_results()` 함수 추가 — 백엔드에서 정렬 후 반환
   - **정보성 키워드**: 검색량 높은 순으로 정렬
   - **홍보성 키워드**: `informational_count` 높은 순 → 동일 시 검색량 순
2. 각 결과에 `priority` + `priority_reason` 필드 추가
3. pytest **28건 통과**, pyright 에러 0건

**발견/해결 이슈 3건**
1. black/isort 일부 불일치 → 재실행으로 해결
2. `total_blogs` 미존재 가능성 → `.get()` 기본값 처리
3. priority=0 falsy 문제 → 해당 없음 확인
```

## 수정 대상

### 1. `/home/jay/workspace/scripts/report_utils.py`

`format_notification_message()` (line 220-283) 수정:

**현재 구조**: header → [요약] → 📁 파일 수 → 🧪 테스트 → ⚠️ 미해결 → 📄 상세
**목표 구조**: **task-ID 완료 보고** → **작업 제목** (소요시간) → **핵심 결과** (번호 리스트) → **발견/해결 이슈 N건** (번호 리스트)

핵심 변경점:
- header를 `**task-XXX.X 완료 보고**`로 변경
- 보고서에서 작업 제목 추출 (보고서 첫 번째 `# ` 헤더에서 task ID 이후 텍스트)
- SCQA의 A(Answer)를 "핵심 결과"로 변환 — 기존 `extract_report_summary()` 활용하되, `**핵심 결과**` 헤더 추가
- "발견 이슈" 섹션 추출 — 보고서에서 `## 발견 이슈` 또는 `### 자체 해결` 섹션 파싱
- 이모지(✅📁🧪⚠️📄) 제거 → 볼드 마크다운으로 대체

### 2. `extract_report_metadata()` 보강 (필요 시)

보고서에서 추가 메타데이터 추출:
- `title`: 보고서 제목 (첫 `# ` 라인에서 task ID 제거한 텍스트)
- `issues_resolved`: 자체 해결 이슈 목록
- `issues_unresolved`: 범위 외 미해결 이슈 목록

### 3. `/home/jay/workspace/scripts/notify-completion.py`

`send_telegram_notification()` (line 167-191) 수정:
- payload에 `"parse_mode": "Markdown"` 추가하여 Telegram에서 볼드/코드 등 마크다운 렌더링

```python
payload = {"chat_id": chat_id, "text": message, "parse_mode": "Markdown"}
```

**주의**: Telegram Markdown 파싱 에러 시 fallback으로 plain text 재전송:
```python
resp = requests.post(url, json=payload, timeout=10)
if resp.status_code == 400:  # Markdown 파싱 에러
    fallback = {"chat_id": chat_id, "text": message}  # parse_mode 없이 재시도
    resp = requests.post(url, json=fallback, timeout=10)
```

## 수정 금지
- `extract_report_summary()` 기존 로직 삭제 금지 (확장만 가능)
- `_save_completion_message()` 로직 변경 금지
- `.done` 프로토콜 변경 금지

## 검증 기준
1. 출력 포맷이 목표 포맷과 일치 (볼드 헤더, 번호 리스트, 이슈 섹션)
2. Telegram `parse_mode: "Markdown"` 적용됨
3. Markdown 파싱 에러 시 plain text fallback 동작
4. 기존 테스트 전체 통과 + 신규 테스트 추가
5. 4096자 제한 준수 유지
6. pyright/black/isort 통과
