# 논리적 팀 dispatch 프롬프트 토큰 최적화

## 목적
논리적 팀(marketing, consulting, publishing, design) dispatch 프롬프트를 개발팀(dev1~dev7)과 동일한 **파일 참조 패턴**으로 경량화한다.

## 현황 (문제)
- dev1/dev2팀: **149 토큰** (DIRECT-WORKFLOW.md 파일 참조 방식)
- marketing: **501 토큰** (전부 인라인)
- consulting: **312 토큰** (전부 인라인)
- publishing: **720 토큰** (전부 인라인)
- design: **642 토큰** (전부 인라인)

논리적 팀은 동일한 섹션이 4곳에 복붙되어 있음:
1. 에이전트 미팅 기록 규칙 (~150 토큰) × 4팀
2. 서브에이전트 결과 규칙 (~50 토큰) × 2팀
3. 보고서 + finish-task.sh (~40 토큰) × 4팀
4. 횡단조직 소환 규칙 (~200 토큰) × design

## 작업 내용

### Step 1: 공통 워크플로우 파일 생성
**파일**: `/home/jay/workspace/prompts/LOGICAL-TEAM-WORKFLOW.md`

아래 섹션을 team_prompts.py의 4개 논리적 팀 프롬프트에서 추출하여 통합:
- 워크플로우 기본 패턴 (4단계: 작업 분석 → Task tool 위임 → 품질 검수 → 보고)
- 에이전트 미팅 기록 규칙 (저장 위치, 핵심 규칙 4개)
- 서브에이전트(Task tool) 결과 규칙 (500자 이내 요약, FAIL 코드 포함)
- 횡단조직 소환 가능 멤버 (마아트, 로키) + 소환 규칙
- 보고서 작성 + 완료 마무리 (finish-task.sh)

플레이스홀더 사용: `{task_id}`, `{WORKSPACE_ROOT}`, `{report_path}` — 프롬프트에서 전달받은 변수를 치환.

**참고**: DIRECT-WORKFLOW.md 스타일을 따르되, 논리적 팀 특성에 맞게 (코딩 관련 규칙 제외).

### Step 2: 팀별 카드 파일 생성
디렉토리: `/home/jay/workspace/prompts/teams/`

각 파일에 해당 팀의 고유 정보만 포함:

**marketing.md**:
- 팀원 상세 (아폴론, 페이토, 에이레네 + model + 스킬)
- 필수 참조 문서 3개 (brand-guidelines.md, marketing-context.md, marketing-content-guide.md)
- 사용 가능 스킬 10개
- 브랜드 정보 (SNS 활동명, 톤앤매너, AI 자동 게시 금지)

**consulting.md**:
- 팀원 상세 (아스클레피오스, 테미스 + model)
- 사용 가능 스킬 2개 (pdf, supabase-postgres-best-practices)

**publishing.md**:
- 팀원 상세 (칼리오페, 에라토, 클리오, 테르프시코레, 폴리뮤니아, 세쉬아트 + model)
- 팀원 역할 프롬프트 파일 참조 규칙
- 필수 참조 문서 6개
- 집필 품질 관리 규칙 (반환각 3법칙, 6차원 검토, 콘텐츠 밸런스)
- 3대 엔진 합의도출 모드 (역할 배분, 5단계 요약)

**design.md**:
- 팀원 상세 (벤자이텐, 이나리, 카구야, 비너스 + model + 스킬)
- 사용 가능 스킬 5개
- 라우팅 규칙 (한글→벤자이텐, 포토리얼→비너스, 하이브리드→이나리, 아트→카구야)
- 필수 참조 문서 1개 (design-team.json)
- 비너스 소환 시 주의사항

### Step 3: team_prompts.py 리팩토링
4개 함수를 dev팀 `_build_direct_prompt` 패턴으로 경량화:

**변경 대상**:
- `_build_marketing_prompt()` (lines 305-371)
- `_build_consulting_prompt()` (lines 374-418)
- `_build_publishing_prompt()` (lines 421-504)
- `_build_design_prompt()` (lines 507-580)

**변경 패턴** (각 함수 동일):
```python
def _build_marketing_prompt(...) -> str:
    placeholder_lines = (
        f"- task_id: {task_id}\n"
        f"- team_id: {team_id}\n"
        f"- WORKSPACE_ROOT: {WORKSPACE_ROOT}\n"
        f"- report_path: {report_path}\n"
    )
    return (
        f"당신은 마케팅 팀장입니다. 다음 마케팅 작업을 수행하세요.\n\n"
        f"## 작업 지시\n"
        f"- 작업 ID: {task_id}\n"
        f"- 작업 상세는 {task_file_path}를 읽고 파악하세요.\n\n"
        f"## 팀 구성 및 스킬\n"
        f"{WORKSPACE_ROOT}/prompts/teams/marketing.md를 읽고 파악하세요.\n\n"
        f"## 워크플로우\n"
        f"{WORKSPACE_ROOT}/prompts/LOGICAL-TEAM-WORKFLOW.md를 읽고 따르세요.\n"
        f"아래 값을 워크플로우에서 사용하세요:\n"
        f"{placeholder_lines}"
    )
```

**주의사항**:
- 각 팀의 `팀장 정체성 문구`는 기존 그대로 유지 (마케팅 팀장, 컨설팅 팀장, 토트 출판 센터장, 아마테라스 디자인 팀장)
- publishing의 워크플로우 상세 참조 (`PUBLISHING-WORKFLOW.md`)는 팀 카드 파일에 포함
- design의 비너스 소환 + 횡단조직은 LOGICAL-TEAM-WORKFLOW.md에 통합 (다른 팀도 소환 가능하므로)

### Step 4: 검증
1. 기존 테스트 실행: `cd /home/jay/workspace && python3 -m pytest tests/test_team_prompts.py -v`
2. 토큰 비교 측정:
```python
COKACDIR_KEY_ANU=test python3 -c "
from prompts.team_prompts import build_prompt, _count_tokens
for t in ['marketing','consulting','publishing','design']:
    p = build_prompt(t, 'task-test', '테스트', level='normal', task_type='research')
    print(f'{t}: {_count_tokens(p)} 토큰')
"
```
3. 각 팀 프롬프트가 ~100-130 토큰 이내인지 확인
4. 생성된 워크플로우/카드 파일이 기존 인라인 내용과 동일한지 diff 비교

## 목표 토큰
- marketing: 501 → ~120 (76% 절감)
- consulting: 312 → ~100 (68% 절감)
- publishing: 720 → ~120 (83% 절감)
- design: 642 → ~120 (81% 절감)

## 변경 대상 파일
- 신규: `prompts/LOGICAL-TEAM-WORKFLOW.md`
- 신규: `prompts/teams/marketing.md`
- 신규: `prompts/teams/consulting.md`
- 신규: `prompts/teams/publishing.md`
- 신규: `prompts/teams/design.md`
- 수정: `prompts/team_prompts.py` (4개 함수 경량화)

## 절대 변경 금지
- `_build_direct_prompt()` — 개발팀 프롬프트 (이미 최적화됨)
- `_build_mcp_prompt()`, `_build_glm_prompt()` — dev8 전용
- `build_composite_prompt()`, `_assemble_composite_prompt()` — 복합업무 (별도 최적화 예정)
- `CRITICAL_SET`, `TOKEN_LIMITS`, `MODEL_MAP` — 상수
- `TEAM_INFO`, `TEAM_MEMBER_ROLES` — 팀 정보 상수
