# task-761.1: 조직 구조 변경 — dev3→dev4 리네이밍 + 신규 dev3 신설 + 대시보드 4등분

## 배경
제이회장님 지시로 개발팀 확장:
- 기존 3팀(라+GLM, 봇D) → 4팀으로 리네이밍 (봇E)
- 새 3팀(다그다, 1팀/2팀과 동일 구조) 신설 (봇D)
- 대시보드 3등분 → 4등분

## 작업 레벨: Lv.3 (다수 파일 연쇄 변경, 에이전트 미팅 후 실행 권장)

## 반드시 지켜야 할 순서 (Phase 분리)

### Phase 1: dev3 → dev4 리네이밍

#### 1-1. .env.keys 정리
파일: `/home/jay/workspace/.env.keys`
- 기존 `COKACDIR_KEY_DEV3` 라인의 주석을 `# 개발4팀 (라+GLM) - 봇E`로 변경
- 변수명 변경: `COKACDIR_KEY_DEV3` → `COKACDIR_KEY_DEV4`
- 아래에 있는 임시 `COKACDIR_KEY_DEV4="${COKACDIR_KEY_DEV3}"` 라인 삭제
- `COKACDIR_KEY_DEV3_NEW` → `COKACDIR_KEY_DEV3`로 변경 (값은 그대로 유지)
- 주석을 `# 개발3팀 (다그다) - 봇D`로 변경

#### 1-2. dispatch.py
파일: `/home/jay/workspace/dispatch.py`

**KEY_MAP** (line ~52):
```python
# 변경 전
"dev3": os.environ.get("COKACDIR_KEY_DEV3"),  # 봇D 라

# 변경 후 (2줄로)
"dev3": os.environ.get("COKACDIR_KEY_DEV3"),  # 봇D 다그다
"dev4": os.environ.get("COKACDIR_KEY_DEV4"),  # 봇E 라
```

**TEAM_TO_KEY** (~59):
```python
# 변경 전
"dev3-team": "dev3",
# 변경 후
"dev3-team": "dev3",
"dev4-team": "dev4",
```

**BOT_ALIASES** (~74):
```python
# 변경 전
"bot-d": "dev3",
# 변경 후
"bot-d": "dev3",
"bot-e": "dev4",
```

**TEAM_TO_BOT** (~81):
```python
# 변경 전
"dev3-team": "bot-d",
# 변경 후
"dev3-team": "bot-d",
"dev4-team": "bot-e",
```

**get_available_bot()** (~91~123):
- 우선순위에 `bot-e` 추가: `bot-b > bot-c > bot-d > bot-e`
- for loop에 `"bot-e"` 추가

**TEAM_META** 또는 메타데이터 매핑:
- dev4-team 메타데이터 추가: `{'role': 'dev4', 'bot': 'bot-e'}`

**argparse choices** (~581):
- `"dev4-team"` 추가

#### 1-3. team_prompts.py
파일: `/home/jay/workspace/prompts/team_prompts.py`

**기존 dev3 프롬프트를 dev4로 복사** (dev3 프롬프트는 GLM 워크플로우용이므로 내용 유지):
- `dev3-team` 프롬프트 → `dev4-team`으로 복사
- 프롬프트 내용에서 "개발3팀" → "개발4팀", "dev3" → "dev4" 변경
- 기존 `dev3-team` 키는 **그대로 유지** (Phase 2에서 새 내용으로 교체)

#### 1-4. 폴더 이동
```bash
mv /home/jay/workspace/teams/dev3 /home/jay/workspace/teams/dev4
```
- `teams/dev4/CLAUDE.md` 내용에서 dev3 → dev4 변경
- `teams/dev4/GLM-WORKFLOW.md` 내용에서 dev3 → dev4 변경
- `teams/dev4/run-glm.sh` 내용에서 dev3 → dev4 변경

#### 1-5. organization-structure.json
파일: `/home/jay/workspace/memory/organization-structure.json`
- `sub_teams` 배열에서 기존 3팀(라 팀장) 항목의:
  - `team_id`: `dev3-team` → `dev4-team`
  - `team_name`: `개발3팀` → `개발4팀`
  - 기타 dev3 참조 → dev4

#### 1-6. config/teams.json
파일: `/home/jay/workspace/config/teams.json`
- `dev3-team` 키 → `dev4-team`으로 변경
- `name`: `개발3팀` → `개발4팀`

#### 1-7. bot-team-mapping.md
파일: `/home/jay/workspace/memory/specs/bot-team-mapping.md`
- 봇D → 봇E로 변경 (라/4팀)
- 봇E 항목 추가
- dev3-team → dev4-team 변경 (라 관련)

#### 1-8. 기타 파일 일괄 교체
아래 파일들에서 `dev3-team`을 `dev4-team`으로 변경해야 하는 **활성 코드** 파일들 (daily 로그, 보고서는 건드리지 말 것):
- `/home/jay/workspace/orchestrator.py`
- `/home/jay/workspace/inbox_utils.py`
- `/home/jay/workspace/report_parser.py`
- `/home/jay/workspace/sync-check.py`
- `/home/jay/workspace/memory/task-router.py`
- `/home/jay/workspace/memory/task-timer.py`
- `/home/jay/workspace/memory/project-isolation.py`
- `/home/jay/workspace/scripts/activity-watcher.py`
- `/home/jay/workspace/scripts/bot-status-watchdog.py`
- `/home/jay/workspace/scripts/check-dev3.py` → `check-dev4.py`로 리네이밍
- `/home/jay/workspace/scripts/done-watcher.py`
- `/home/jay/workspace/scripts/whisper-compile.py`
- `/home/jay/workspace/scripts/whisper-save-guidance.py`
- `/home/jay/workspace/utils/bot_activity.py`
- `/home/jay/workspace/dashboard/server.py`
- `/home/jay/workspace/dashboard/test_server.py`

**주의**:
- `memory/daily/`, `memory/reports/`, `memory/tasks/`는 히스토리이므로 **변경 금지**
- `memory/task-timers.json`의 기존 기록도 **변경 금지** (히스토리)
- 테스트 파일은 코드 참조가 있으면 변경

---

### Phase 2: 새 dev3-team 신설 (켈트 신화)

#### 새 3팀 구성
- **팀장**: 다그다 (Dagda) — 켈트 최고신, claude-opus-4-6, 봇D
- **백엔드**: 루 (Lugh) — 빛의 신, 만능 전사, claude-sonnet-4-6
- **프론트**: 브리짓 (Brigid) — 시와 대장장이의 여신, claude-sonnet-4-6
- **UX/UI**: 에인 (Áine) — 여름과 부의 여신, claude-sonnet-4-6
- **테스터**: 모리건 (Morrigan) — 전쟁의 여신, claude-haiku-4-5

#### 2-1. team_prompts.py
- 기존 `dev3-team` 키의 프롬프트를 **1팀/2팀과 동일한 구조**로 교체
- 팀장: 다그다 (Dagda), 팀원: 루/브리짓/에인/모리건
- 워크플로우: `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` (1팀/2팀과 동일)
- ⚠️ GLM 워크플로우가 아닌 DIRECT-WORKFLOW 사용

#### 2-2. organization-structure.json
- `sub_teams` 배열에 새 dev3-team 추가 (dev1-team과 dev2-team 사이 또는 후)
- 1팀/2팀과 동일한 구조:
```json
{
  "team_id": "dev3-team",
  "team_name": "개발3팀",
  "status": "active",
  "lead": {
    "id": "dagda",
    "name": "다그다 (Dagda)",
    "role": "개발3팀 팀장",
    "model": "claude-opus-4-6",
    "engine": "anthropic",
    "invoke": "cokacdir (봇D 경유)",
    "status": "active",
    "persona": "켈트 최고신. 만능의 솥을 가진 대지의 아버지. 팀의 풍요와 균형을 책임진다.",
    "expertise": {
      "primary": "시스템 설계 및 태스크 분배",
      "skills": ["아키텍처 설계", "코드 리뷰", "팀원 멘토링", "기술 의사결정"]
    }
  },
  "members": [
    {
      "id": "lugh",
      "name": "루 (Lugh)",
      "role": "백엔드 개발자",
      "model": "claude-sonnet-4-6",
      "engine": "anthropic",
      "invoke": "Task (subagent_type: general-purpose, model: sonnet)",
      "caller": "dagda",
      "status": "active",
      "persona": "빛의 신이자 만능 전사. 모든 기술에 능통한 다재다능함."
    },
    {
      "id": "brigid",
      "name": "브리짓 (Brigid)",
      "role": "프론트엔드 개발자",
      "model": "claude-sonnet-4-6",
      "engine": "anthropic",
      "invoke": "Task (subagent_type: general-purpose, model: sonnet)",
      "caller": "dagda",
      "status": "active",
      "persona": "시와 대장장이의 여신. 아름다운 것을 만들어내는 창조의 불꽃."
    },
    {
      "id": "aine",
      "name": "에인 (Áine)",
      "role": "UX/UI 설계자",
      "model": "claude-sonnet-4-6",
      "engine": "anthropic",
      "invoke": "Task (subagent_type: general-purpose, model: sonnet)",
      "caller": "dagda",
      "status": "active",
      "persona": "여름과 부의 여신. 사용자 경험에 풍요로운 빛을 비춘다."
    },
    {
      "id": "morrigan",
      "name": "모리건 (Morrigan)",
      "role": "테스터",
      "model": "claude-haiku-4-5",
      "engine": "anthropic",
      "invoke": "Task (subagent_type: general-purpose, model: haiku)",
      "caller": "dagda",
      "status": "active",
      "persona": "전쟁의 여신. 가차없는 검증으로 코드의 약점을 파고든다."
    }
  ]
}
```

#### 2-3. config/teams.json
- 새 `dev3-team` 항목 추가:
```json
"dev3-team": {
  "name": "개발3팀",
  "type": "수직조직",
  "status": "active",
  "lead": "dagda",
  "parent": "development-office",
  "members": ["lugh", "brigid", "aine", "morrigan"]
}
```

#### 2-4. teams/dev3/ 폴더 생성
- `/home/jay/workspace/teams/dev3/` 디렉토리 생성
- `CLAUDE.md` 작성 (1팀의 teams/dev1/CLAUDE.md 참고하되, 팀명/팀원명만 변경)
- 테스트 폴더 등 필요 구조 생성

#### 2-5. bot-team-mapping.md 업데이트
- 새 봇D → 개발3팀(다그다) 매핑 추가

#### 2-6. engine_summary 업데이트
- organization-structure.json의 `engine_summary` 섹션에 새 팀원 5명 반영 (총 인원수 업데이트)

---

### Phase 3: 대시보드 4등분

#### 3-1. dashboard/server.py
- 개발팀 그리드: 3등분 → 4등분
- 새 dev3-team (다그다) 카드 추가
- dev4-team (라) 카드 추가
- 레이아웃: 개발1팀 | 개발2팀 | 개발3팀 | 개발4팀

#### 3-2. dashboard/test_server.py
- 대시보드 테스트에 dev4-team 추가

---

## CLAUDE.md / MEMORY.md 업데이트
**이 작업에서는 건드리지 말 것** — 아누가 별도로 업데이트합니다.

## 검증 (모든 Phase 완료 후)
1. `source .env.keys && python3 -c "import os; print(os.environ.get('COKACDIR_KEY_DEV3','MISSING'), os.environ.get('COKACDIR_KEY_DEV4','MISSING'))"` — 두 키 모두 존재
2. `python3 dispatch.py --help` — choices에 dev3-team, dev4-team 모두 표시
3. `python3 -c "from prompts.team_prompts import get_team_prompt; print('dev3:', get_team_prompt('dev3-team')[:50]); print('dev4:', get_team_prompt('dev4-team')[:50])"` — 두 팀 프롬프트 정상 로드
4. `python3 -c "import json; d=json.load(open('config/teams.json')); assert 'dev3-team' in d['teams']; assert 'dev4-team' in d['teams']; print('OK')"` — teams.json 검증
5. `ls teams/dev3/ teams/dev4/` — 두 폴더 모두 존재
6. `grep -r 'dev3-team' dispatch.py` — 새 3팀(다그다) 매핑 확인
7. `grep -r 'dev4-team' dispatch.py` — 4팀(라) 매핑 확인
8. 기존 테스트 실행: `cd /home/jay/workspace && python3 -m pytest tests/ -x --timeout=30`
9. 대시보드 서버 기동 테스트

## 완료 조건
- dev3→dev4 리네이밍 전체 완료 (활성 코드 파일 모두)
- 새 dev3-team 완전 신설 (dispatch/프롬프트/조직도/폴더)
- 대시보드 4등분 정상 표시
- 기존 테스트 회귀 없음
- 히스토리 파일(daily, reports, tasks, task-timers.json 기존 기록) 미변경