# task-662.1 완료 보고서

## SCQA

**S**: ThreadAuto 텍스트 파이프라인에 task-660.1에서 분석한 MASTER_BRIEF/HOOK_BANK/LOGIC_MAP 방법론이 data/ 디렉토리 JSON 파일과 pipeline_prompts.py 로딩/주입 로직으로 이미 반영되어 있다.

**C**: 그러나 인간 가독용 마스터 브리프 문서(prompts/master_brief.md)가 없고, 훅/논리맵의 CRUD 유틸리티(hook_bank_manager.py, logic_map_manager.py)가 미구현이어서 파이프라인 외부에서 데이터 관리가 불가능하며, 논리맵이 단일 파일에 모여 있어 토픽별 독립 관리가 어렵다.

**Q**: 매니저 모듈과 토픽별 분리 파일을 구현하여 파이프라인 외부에서도 HOOK_BANK/LOGIC_MAP을 CRUD 관리할 수 있는가?

**A**: HookBankManager(6개 메서드, 44개 테스트), LogicMapManager(4개 메서드, 15개 테스트), 토픽별 JSON 6개, master_brief.md를 구현 완료. 기존 90개 + 신규 59개 = 149개 테스트 전체 통과, pyright 에러 0건.

## 생성/수정 파일 목록

### 신규 생성 (11개)
- `/home/jay/projects/ThreadAuto/content/hook_bank_manager.py` — HookBankManager CRUD 유틸리티
- `/home/jay/projects/ThreadAuto/content/logic_map_manager.py` — LogicMapManager 로드/검색 유틸리티
- `/home/jay/projects/ThreadAuto/tests/test_hook_bank_manager.py` — 44개 테스트
- `/home/jay/projects/ThreadAuto/tests/test_logic_map_manager.py` — 15개 테스트
- `/home/jay/projects/ThreadAuto/prompts/master_brief.md` — 인간 가독용 마스터 브리프 (289행)
- `/home/jay/projects/ThreadAuto/content/logic_maps/수수료.json` — 토픽별 논리맵
- `/home/jay/projects/ThreadAuto/content/logic_maps/자유도.json`
- `/home/jay/projects/ThreadAuto/content/logic_maps/성장.json`
- `/home/jay/projects/ThreadAuto/content/logic_maps/이직절차.json`
- `/home/jay/projects/ThreadAuto/content/logic_maps/정착지원.json`
- `/home/jay/projects/ThreadAuto/content/logic_maps/AI마케팅.json`

### 수정 (1개)
- `/home/jay/workspace/teams/shared/run_pyright.sh` — 절대 경로 파일 지정 시 pyrightconfig.json이 있는 프로젝트 루트 자동 감지 버그 수정

## 구현 상세

### 1. MASTER_BRIEF
- `prompts/master_brief.md`: data/master_brief.json의 인간 가독 버전. 3개 브랜드(서울대보험쌤/연금쌤/보험그룹)의 정체성, 톤, 금지사항, 핵심 메시지를 체계적으로 정리
- 코드 수정: 불필요 (pipeline_prompts.py가 이미 data/master_brief.json을 로드하여 각 단계에 주입)

### 2. HOOK_BANK
- `content/hook_bank_manager.py`: HookBankManager 클래스
  - `add()`: 새 훅 추가, 중복 방지 (동일 text 시 기존 반환)
  - `get_top(n, category, technique)`: 성과 기반 상위 N개 반환 (verified 우선)
  - `update_performance()`: engagement_rate/saves/comments 업데이트, verified 자동 설정
  - `save()`: JSON 파일 영구 저장
  - `count()`: 총 훅 개수
  - `find_by_text()`: 텍스트 정확 매칭 검색
- 기존 data/hook_bank.json(21개 시드)과 완전 호환

### 3. LOGIC_MAP
- `content/logic_map_manager.py`: LogicMapManager 클래스
  - 이중 소스 로딩: content/logic_maps/*.json (토픽별) 우선, data/logic_map.json (통합) fallback
  - `get_topic()`: 특정 토픽 조회
  - `search(query)`: 키워드 검색 (topic_id, claims, evidence 대상)
  - `list_topics()`: 토픽 키 목록
  - `get_for_prompt()`: 프롬프트 주입용 텍스트 (pipeline_prompts.py _format_logic_map() 호환)
- `content/logic_maps/`: 6개 토픽별 JSON (counter/rebuttal 필드 추가)

## 테스트 결과

- 신규 테스트: 59개 (hook_bank_manager 44개 + logic_map_manager 15개)
- 기존 테스트: 90개 (test_five_stage_pipeline.py)
- **전체 149개 PASSED** (0.26s)
- pyright: 에러 0건, 경고 0건
- black/isort: 스타일 준수

## 발견 이슈 및 해결

### 자체 해결 (2건)
1. **run_pyright.sh 절대 경로 버그** — 절대 경로 파일 전달 시 pyrightconfig.json을 찾지 못해 프로젝트 전체에서 reportMissingImports 에러 발생
   - 수정: 파일 경로에서 pyrightconfig.json이 있는 프로젝트 루트를 자동 감지하여 cd 후 실행

2. **pipeline_prompts.py lru_cache와 manager 모듈 독립성** — pipeline_prompts.py의 `_load_hook_bank()`는 lru_cache로 캐시되어 HookBankManager의 변경을 반영하지 않는 구조
   - 판단: HookBankManager는 독립 인스턴스로 운영되므로 cache 무관. 파이프라인 실행 중 동적 반영이 필요할 경우 별도 cache invalidation 로직이 필요하나, 현재 요구사항 범위 밖

### 범위 외 미해결 (1건)
1. **test_cta_linebreak.py::test_fact_db_contains_business_page** — fact_db.md에 '사업단 페이지' 표기 없음 (기존 테스트 실패). 범위 외 사유: fact_db.md 콘텐츠 변경은 본 작업 범위가 아니며 콘텐츠 팀 소관

## QC 자동 검증 결과

3회 실행, 유일한 FAIL 원인: 기존 테스트 `test_cta_linebreak.py::test_fact_db_contains_business_page` (본 작업 범위 외)

```
file_check: PASS (6/6 checks)
data_integrity: PASS
tdd_check: PASS (테스트 2개 + 구현 3개)
pyright_check: PASS (0 errors, 0 warnings)
style_check: PASS (black OK, isort OK)
critical_gap: PASS
test_runner: FAIL — 426 passed, 1 failed (기존 범위 외 실패 1건)
  ⚠️ 기존 테스트 실패 1건 (본 작업 범위 외): test_cta_linebreak.py::test_fact_db_contains_business_page
  원인: fact_db.md에 '사업단 페이지' 문자열 없음 (콘텐츠 팀 소관)
```

## 하위 호환성
- `five_stage_pipeline.py`: 수정 없음 (기존 코드 그대로)
- `pipeline_prompts.py`: 수정 없음 (기존 로딩/주입 로직 유지)
- data/ 디렉토리 JSON 파일: 수정 없음
- master_brief/hook_bank/logic_map 없어도 파이프라인 정상 동작 (graceful fallback)
