# task-530: 출판 전문가 조직 시스템 구축 (문서화 + 코딩화)

## 레벨: Lv.2

## 목표
기존 마케팅팀 패턴과 동일하게 "출판팀(publishing)"을 조직도에 추가하고, dispatch 시스템에서 위임 가능하도록 코딩한다.

## 스펙 참조
- 집필 시스템 스펙: `/home/jay/workspace/memory/specs/book-writing-system.md`
- 기존 조직도: `/home/jay/workspace/memory/organization-structure.json`
- 기존 팀 매핑: `/home/jay/workspace/memory/specs/bot-team-mapping.md`

## 출판팀 조직 정의

### 팀 메타
- team_id: `publishing`
- team_name: 출판팀
- type: `publishing` (새 타입)
- 봇 배정: 동적 (marketing과 동일하게 DYNAMIC_BOT_TEAMS)

### 팀원 구성 (그리스 뮤즈 + 이집트 신)
- **토트(Thoth)** — 출판 센터장, 오케스트레이터
- **칼리오페(Calliope)** — 구성작가/아웃라인 설계 (서사의 뮤즈)
- **에라토(Erato)** — 초안 작가/Drafting Assistant (서정의 뮤즈)
- **클리오(Clio)** — 팩트 체커/리서치 전문가 (역사의 뮤즈)
- **테르프시코레(Terpsichore)** — 퇴고/편집자 (리듬의 뮤즈)
- **폴리뮤니아(Polyhymnia)** — 마무리/마케팅 카피 (찬가의 뮤즈)

## 수정 대상 파일 (3개)

### 1. `/home/jay/workspace/memory/organization-structure.json`
횡단조직(CR) 섹션에 "출판 센터" 추가:
```json
{
  "center_id": "publishing-center",
  "center_name": "출판 센터",
  "type": "agent",
  "status": "active",
  "lead": {
    "id": "thoth",
    "name": "토트 (Thoth)",
    "role": "출판 센터장",
    "model": "opus",
    "desc": "이집트 지혜와 기록의 신. 집필 프로젝트 총괄."
  },
  "members": [
    {"id": "calliope", "name": "칼리오페 (Calliope)", "role": "구성작가/아웃라인 설계", "model": "sonnet"},
    {"id": "erato", "name": "에라토 (Erato)", "role": "초안 작가", "model": "sonnet"},
    {"id": "clio", "name": "클리오 (Clio)", "role": "팩트 체커/리서치", "model": "sonnet"},
    {"id": "terpsichore", "name": "테르프시코레 (Terpsichore)", "role": "퇴고/편집", "model": "sonnet"},
    {"id": "polyhymnia", "name": "폴리뮤니아 (Polyhymnia)", "role": "마무리/마케팅 카피", "model": "haiku"}
  ]
}
```

### 2. `/home/jay/workspace/dispatch.py`
기존 마케팅팀 라우팅 패턴을 참고하여 수정:

#### 2-1. TEAM_BOT 매핑 (line 51 부근)
```python
# 기존에 "marketing"이 있는 패턴과 동일하게
"publishing": None,  # 동적 봇 배정
```

#### 2-2. DYNAMIC_BOT_TEAMS (line 80 부근)
```python
DYNAMIC_BOT_TEAMS = {"marketing", "consulting", "publishing"}  # publishing 추가
```

#### 2-3. argparse choices (line 549 부근)
choices 리스트에 "publishing" 추가

### 3. `/home/jay/workspace/prompts/team_prompts.py`

#### 3-1. TEAM_INFO 딕셔너리에 추가 (line 29-60 부근)
```python
"publishing": {
    "leader": "토트 (Thoth)",
    "role": "출판 센터장",
    "type": "publishing",
    "members": "칼리오페(구성/아웃라인), 에라토(초안), 클리오(팩트검증), 테르프시코레(퇴고/편집), 폴리뮤니아(마무리/카피)"
},
```

#### 3-2. `_build_publishing_prompt()` 함수 신규 작성
마케팅 프롬프트(`_build_marketing_prompt()`)를 참고하되, 집필 특화:

```python
def _build_publishing_prompt(team, team_id, task_id, task_file_path, level, timer_start, timer_end, report_path, project_id, chain_id):
    """출판팀 프롬프트 생성"""
```

프롬프트에 포함할 내용:
- 페르소나: "당신은 토트(Thoth), 출판 센터장입니다."
- 팀원 역할 배분 지시 (Task tool 서브에이전트로 실행)
- 집필 품질 관리 규칙:
  - 반환각 3법칙 (논픽션 버전): 아웃라인 준수, 팩트DB 검증, 용어집 등록
  - 6차원 검토: Fact/Consistency/Flow/Tone/Continuity/Readability
  - 콘텐츠 밸런스: 이론 60% / 사례 20% / 실천가이드 20%
- 입력: 작업 지시 파일 경로
- 출력: 산출물 + 보고서
- .done 통보 프로토콜 (기존과 동일)

#### 3-3. `build_prompt()` 함수에 분기 추가
```python
elif team["type"] == "publishing":
    prompt = _build_publishing_prompt(...)
```

## 참고: 기존 마케팅 프롬프트 구조
`_build_marketing_prompt()`의 패턴을 따르되:
- 마케팅: 콘텐츠 제작/카피/SEO
- 출판: 집필/퇴고/팩트검증/출판준비

## 테스트
- dispatch.py가 `--team publishing`을 에러 없이 파싱하는지 확인
- team_prompts.py에서 `build_prompt("publishing", ...)` 호출 시 프롬프트 정상 생성 확인
- 기존 팀(dev1/dev2/dev3/marketing/consulting)의 프롬프트가 영향받지 않는지 확인
- pytest 전체 통과, pyright 0 에러

## 절대 금지
- 기존 팀 프롬프트 변경 금지
- 기존 라우팅 로직 변경 금지 (추가만)
- .env.keys 또는 봇 키 하드코딩 금지

## 산출물
- 수정된 3개 파일
- 보고서: `/home/jay/workspace/memory/reports/task-530.md`