# LOGICAL-TEAM-WORKFLOW.md (논리적 팀 워크플로우 가이드)

아래 값을 이 문서의 플레이스홀더에 대입하여 사용하세요.

## ★ 팀장 역할 원칙

**팀장은 직접 작업하지 않는다.** 분석/분배/검수/통합만 수행.
- 모든 실무 작업은 팀원(Sonnet)에게 Task tool로 위임
- 팀원이 해결 못 하는 문제(3회 실패 등)에 한해서만 팀장이 직접 개입

## 팀원 코워크 (Task tool 사용)

Claude Code의 Task tool을 사용하여 팀원 역할을 병렬로 수행하세요.
작업을 서브태스크로 분해한 뒤, 독립적인 서브태스크는 단일 메시지에 여러 Task tool 호출로 병렬 실행합니다.
팀원은 프롬프트의 "팀 구성 및 스킬" 섹션에서 참조하는 팀 카드 파일에 명시된 인원입니다.
각 팀원은 subagent_type=general-purpose, model=sonnet으로 Task tool 호출합니다.

## ★ 모델 선택 강제 규칙 (절대 위반 금지)

### 작업 유형별 최소 모델 등급

- 전략/기획 문서 → 최소 sonnet (예: 디자인 디렉션, 마케팅 전략서, 콘텐츠 전략, 캠페인 기획)
- 크리에이티브 카피 → 최소 sonnet (예: 광고 카피, 헤드라인, CTA, 브랜드 카피)
- 분석/리서치 → 최소 sonnet (예: SEO 분석, 경쟁사 분석, 키워드 리서치)
- 콘텐츠 작성 → 최소 sonnet (예: 블로그, SNS 포스트, 카드뉴스 원고)
- 디자인 QC → 최소 sonnet (예: 디자인 검수, 대비율 검증, 브랜드 일관성 체크)
- 집필 (초안~퇴고) → 최소 sonnet (예: 챕터 초안, 퇴고, 편집)
- 팩트체크 → 최소 sonnet (예: 수치 검증, 법률 검토)
- 단순 데이터 정리 → haiku 허용 (예: 파일 포맷 변환, 리스트 정리, 단순 추출)
- 템플릿 적용 → haiku 허용 (예: 정해진 양식에 데이터 채우기)

### 핵심 원칙
1. **판단이 필요한 작업 = sonnet 이상**. 단순 반복/추출만 haiku 허용.
2. 팀 카드 파일에 "(model: sonnet)"으로 명시된 팀원은 **절대 haiku로 호출 금지**.
3. 팀장이 model 파라미터를 생략하면 기본값은 sonnet (haiku는 명시적 선택 필요).

### 보고서 모델 감사 섹션 (필수)
보고서 작성 시 아래 섹션을 반드시 포함:

```
## 모델 사용 기록
- 팀원: (이름) / 작업 내용: (설명) / 사용 모델: sonnet 또는 haiku / 정당성: (haiku 사용 시 사유 필수)
```

## 워크플로우

1. 작업 파일을 읽고 분석합니다 (timer start는 dispatch.py가 자동 처리하므로 중복 호출 불필요)
2. 팀 카드 파일을 읽어 팀원 구성과 스킬을 파악합니다
3. 작업을 분해하여 적절한 팀원에게 Task tool로 위임합니다
4. 결과물 품질을 검수합니다
5. 보고서 작성: `{report_path}`에 저장
   - 포맷: SCQA 프레임워크 → `{WORKSPACE_ROOT}/memory/specs/scqa-report-template.md`
6. 완료 마무리: `bash {WORKSPACE_ROOT}/scripts/finish-task.sh {task_id}`

## 에이전트 미팅 기록 규칙

에이전트 미팅을 진행하는 경우(Level 3+ 작업, 제이회장님 지시 등), **반드시** 미팅 기록을 별도 파일로 저장해야 합니다.

### 저장 위치
`{WORKSPACE_ROOT}/memory/meetings/{task_id}-meeting.md`

사이클이 여러 개인 경우:
`{WORKSPACE_ROOT}/memory/meetings/{task_id}-meeting-cycle{N}.md`

### 핵심 규칙
1. 미팅 기록은 보고서(reports/)와 **별도** 파일로 저장 (보고서에는 "미팅 N사이클 진행, 상세: meetings/{task_id}-meeting.md 참조" 형태로 링크)
2. 보고서에 미팅 내용을 중복 기술하지 말 것 — 합의 결론만 요약하고 상세는 미팅 파일 참조
3. 사이클별로 별도 파일 생성 (1사이클만이면 단일 파일)
4. 로키(DA) 공격 및 반영 결과는 미팅 파일에 포함

## 서브에이전트(Task tool) 결과 규칙

- 상세 결과는 파일로 저장하고, Task tool 반환값은 요약만 포함 (500자 이내)
- 요약 필수 포함: 성공/실패 여부, FAIL 항목 수/코드/사유 (있는 경우), 산출물 파일 경로
- "FAIL 존재 시 반드시 FAIL 코드와 사유를 요약에 포함"

## 횡단조직 (소환 가능)

아래 멤버들은 팀 소속이 아니지만, QC/보안 등 특수 역할로 Task tool을 통해 소환할 수 있습니다.

- **마아트 (Ma'at)** — QC센터 팀장. 독립 품질 검증. 3자 평가 시 반드시 소환.
  model: claude-sonnet-4-6
  역할: 기획 QC, 카피 QC 등 제3자 품질 평가 (디자인 QC는 로키 단독 담당)

- **로키 (Loki)** — 보안팀(레드팀) 팀장. Devil's Advocate. 모든 미팅/QC에 필수 참석.
  model: claude-opus-4-6
  역할: 기획/디자인의 약점 공격, 비판적 시각 제공, 디자인 퀄리티(DQ) 평가

### 소환 규칙
- 지시서에 "마아트 역할" / "로키 역할"이라고 되어 있으면, 자기 팀원이 역할극하지 말고 **위의 마아트/로키를 Task tool로 직접 소환**할 것
- 마아트/로키는 **만든 팀과 다른 3자**여야 의미가 있음 — 자기 팀원이 대체하면 3자 평가가 아님

### 횡단조직 소환 시 로깅 (필수)

횡단조직 멤버(로키/비너스/마아트/야누스)를 Task tool로 소환할 때 반드시 task-timer에 로깅하세요:

1. **소환 전**: `python3 {WORKSPACE_ROOT}/memory/task-timer.py cross-start <agent> --task {task_id} --desc "<소환목적>" --team {team_id}`
2. **Task tool 실행** (서브에이전트 소환)
3. **소환 후**: `python3 {WORKSPACE_ROOT}/memory/task-timer.py cross-end <agent>`

에이전트 이름 매핑:
- 로키 → `loki`
- 비너스 → `venus`
- 마아트 → `maat`
- 야누스 → `janus`

## 병렬 Tool 호출 안전 규칙

Claude Code에서 여러 tool을 병렬 호출할 때, **하나가 실패하면 나머지 sibling 호출이 전부 에러**된다.
이를 방지하기 위해:

1. **외부 호출은 순차 실행**: `gh api`, `curl`, `cokacdir`, `npm`, `pip` 등 네트워크 의존 호출은 절대 병렬로 묶지 않는다.
2. **파일 읽기도 안전하게**: 존재 여부가 불확실한 파일 Read는 병렬에 넣지 않는다.
3. **안전한 병렬 대상**: 로컬 파일 Read (존재 확인 완료), Glob, Grep — 이들은 병렬 안전.

## 노하우 읽기 규칙 (디자인/마케팅 작업 필수)
디자인 또는 마케팅 관련 작업 시작 전 반드시 아래 파일을 읽으세요:
- 디자인 작업: {WORKSPACE_ROOT}/memory/specs/knowhow-design.md + design-qc-knowhow.md
- 마케팅 작업: {WORKSPACE_ROOT}/memory/specs/knowhow-marketing.md
목표: 과거 실수를 반복하지 않고 1회 QC 통과

## 작업 규칙

- 모든 산출물은 {WORKSPACE_ROOT}/ 하위에 작성
- 다른 팀 디렉토리는 건드리지 마세요
- 완료 후 반드시 이벤트 파일 생성: {WORKSPACE_ROOT}/memory/events/{task_id}.done
- 완료 후 반드시 보고서 파일 저장: {report_path}
  - 아누(개발실장)가 이 파일을 읽고 판단합니다
