# 작업 보고서: task-251.1

## 작업 내용
입력 키워드(topic)를 AI 생성 키워드 리스트의 첫 번째 위치에 반드시 포함시키는 기능 구현.

## 수정 파일
- `/home/jay/projects/InfoKeyword/worker/generator/keyword_generator.py` (140~144행)

## 변경 내역
`generate_keywords()` 함수의 반환 직전에 다음 로직 추가:
1. 입력 키워드와 동일한 항목이 생성 목록에 있으면 제거
2. 입력 키워드를 `{"keyword": topic, "tier": tier}` 형태로 리스트 맨 앞에 삽입
3. 30개 제한 유지 (`validated[:_TARGET_COUNT]`)

## 테스트 결과

### 테스트 1: "가공육 암" + tier 2
- keywords[0] = "가공육 암" ✅
- 총 키워드 수 = 30개 ✅

### 테스트 2: "강아지 사료 추천" + tier 3
- keywords[0] = "강아지 사료 추천" ✅
- 총 키워드 수 = 30개 ✅

## 버그
- 발견된 버그 없음

## 셀프 QC
- [x] 1. 영향 범위: `keyword_generator.py`만 수정, 반환 형식 변경 없음
- [x] 2. 엣지 케이스: topic이 리스트에 있는/없는 경우 모두 처리, 빈 주제는 기존 early return
- [x] 3. 작업 지시 일치: topic이 항상 keywords[0], 30개 유지, 2단/3단 모두 적용
- [x] 4. 에러 처리/보안: 기존 에러 핸들링 유지, 새 로직은 리스트 조작만 수행
- [x] 5. 테스트 커버리지: 2단, 3단 키워드 모두 실제 API 호출로 검증 완료
- 1-B 데이터 계약 체크리스트: 해당 없음 (workers/ 하위 파일 변경 아님, 데이터 모델 변경 없음)

## 자동 검증 (qc_verify.py)
```json
{
  "task_id": "task-251.1",
  "verified_at": "2026-03-04T13:40:26",
  "overall": "WARN",
  "checks": {
    "api_health": "SKIP (--skip flag)",
    "file_check": "PASS (2/2)",
    "data_integrity": "WARN (task-timer end 전 검증, .done 파일 존재 확인됨)",
    "test_runner": "SKIP",
    "schema_contract": "SKIP (workers/ 하위 models.py 없음)"
  }
}
```

## 비고
- Worker 재시작 완료 (port 8100)
- 프론트엔드 변경 없음 (첫 번째 키워드 시각적 구분은 선택사항으로 미구현)
