# 작업 보고: task-761.1
- 팀: dev1-team (헤르메스)
- 작업 내용: 조직 구조 변경 — dev3→dev4 리네이밍 + 신규 dev3 신설 + 대시보드 4등분
- 레벨: Lv.3 (다수 파일 연쇄 변경)

## SCQA

**S**: 개발실 산하 3개 개발팀(dev1~dev3)이 운영 중이며, dev3-team(라/GLM 워크플로우)이 봇D를 사용하고 있다. 대시보드는 3등분 레이아웃으로 3개 팀을 표시한다.

**C**: 제이회장님 지시로 개발4팀 신설이 필요하다. 기존 dev3(라)를 dev4로 리네이밍하고, 새 dev3(다그다/켈트 신화)를 신설해야 한다. 20개 이상의 활성 코드 파일에 걸친 연쇄 변경이 필요하며, 히스토리 파일은 보존해야 한다.

**Q**: dev3→dev4 리네이밍과 새 dev3 신설을 기존 시스템 무결성을 유지하면서 완료할 수 있는가?

**A**: Phase 1(리네이밍), Phase 2(신설), Phase 3(대시보드)을 순차 완료했다. 총 25개 파일 수정, pytest 238건 통과(기존 버그 2건 제외), pyright 에러 0건. dispatch.py에서 dev3/dev4 모두 정상 라우팅 확인, 대시보드 4등분 레이아웃 적용 완료.

## 생성/수정 파일

### Phase 1: dev3 → dev4 리네이밍
- `/home/jay/workspace/.env.keys` — DEV3→DEV4 키 변수명 변경
- `/home/jay/workspace/dispatch.py` — BOT_KEYS, TEAM_BOT, BOT_TO_KEY, TEAM_TO_BOT_ID, _find_available_bot, argparse choices에 dev4 추가
- `/home/jay/workspace/prompts/team_prompts.py` — dev4-team TEAM_INFO 추가, _build_glm_prompt 동적 경로
- `/home/jay/workspace/orchestrator.py` — dev4-team 항목 추가, TEAM_ORDER 업데이트
- `/home/jay/workspace/config/teams.json` — dev4-team 항목 추가
- `/home/jay/workspace/memory/organization-structure.json` — dev4-team sub_team + dependency_map + engine_summary
- `/home/jay/workspace/memory/specs/bot-team-mapping.md` — 봇E 추가, 매핑 업데이트
- `/home/jay/workspace/teams/dev4/` — dev3에서 이동, CLAUDE.md/GLM-WORKFLOW.md/run-glm.sh 내부 참조 변경
- 13개 스크립트 파일 (inbox_utils.py, sync-check.py, task-router.py, task-timer.py, project-isolation.py, activity-watcher.py, bot-status-watchdog.py, check-dev3.py→check-dev4.py, whisper-compile.py, bot_activity.py, dashboard/server.py, dashboard/test_server.py, done-watcher.py)

### Phase 2: 새 dev3-team 신설 (켈트 신화)
- `/home/jay/workspace/prompts/team_prompts.py` — dev3-team을 다그다/direct 타입으로 교체, TEAM_MEMBER_ROLES 추가
- `/home/jay/workspace/config/teams.json` — dev3-team: dagda + lugh/brigid/aine/morrigan
- `/home/jay/workspace/memory/organization-structure.json` — 새 dev3-team sub_team 블록 삽입
- `/home/jay/workspace/teams/dev3/CLAUDE.md` — 다그다 팀장 + 켈트 팀원 프로필
- `/home/jay/workspace/teams/dev3/qc/` — QC 디렉토리

### Phase 3: 대시보드 4등분
- `/home/jay/workspace/dashboard/server.py` — dev4-team 매핑 추가, 4봇 지원
- `/home/jay/workspace/dashboard/test_server.py` — dev4 fixture/assertion 추가

### 테스트 업데이트
- `/home/jay/workspace/tests/test_dispatch.py` — 3팀→4팀 반영 (TEAM_BOT, TEAM_INFO, busy bot 테스트, dev3→다그다 리더명)
- `/home/jay/workspace/tests/test_team_prompts.py` — dev3=다그다/direct, dev4=라/glm 반영

## 테스트 결과
- dispatch + team_prompts + dashboard: **238 passed** / 2 failed (기존 버그)
- 전체 tests/: **172 passed** / 1 failed (기존 버그: test_chain_manager)
- pyright: **에러 0건, 경고 0건**
- black/isort: **OK**

## 발견 이슈 및 해결

### 자체 해결 (5건)
1. **서브에이전트 파일 미반영** — dispatch.py, team_prompts.py, config/teams.json, org-structure.json의 서브에이전트 편집이 디스크에 미반영됨. 메인 에이전트에서 직접 Edit/Write 도구로 재수정.
2. **bot-team-mapping.md 미업데이트** — 서브에이전트가 업데이트 보고했으나 실제 미변경. 봇E 추가 및 매핑 전면 재작성.
3. **dependency_map 누락** — org-structure.json의 dependency_map에 dev3/dev4 항목 누락. 직접 추가.
4. **테스트 하드코딩** — test_dispatch.py/test_team_prompts.py에 3팀 기준 하드코딩 값 존재. 4팀 체제로 업데이트.
5. **_build_glm_prompt 경로 하드코딩** — teams/dev3/ 경로가 하드코딩. 동적 경로(`teams/{team_short}/`)로 변경하여 향후 확장성 확보.

### 범위 외 미해결 (2건)
1. **test_chain_manager 실패** — Phase 2 지시서 자동생성 로직 버그. 범위 외 사유: chain_manager 모듈 소관.
2. **dashboard 기존 테스트 2건 실패** — _classify_task_project 분류 + 타임존 처리 버그. 범위 외 사유: 대시보드 로직 별도 태스크.

## 검증 결과

| # | 검증 항목 | 결과 |
|---|-----------|------|
| 1 | .env.keys DEV3/DEV4 키 존재 | PASS |
| 2 | dispatch.py --help choices에 dev4-team | PASS |
| 3 | team_prompts dev3=다그다, dev4=라 | PASS |
| 4 | config/teams.json 양팀 존재 | PASS |
| 5 | teams/dev3/ teams/dev4/ 폴더 존재 | PASS |
| 6 | grep dev3-team dispatch.py | PASS (4건) |
| 7 | grep dev4-team dispatch.py | PASS (4건) |
| 8 | pytest tests/ | 172 passed, 1 failed (기존) |
| 9 | dashboard tests | 32 passed, 2 failed (기존) |

## qc_verify.py 결과
- pyright_check: **PASS** (0 errors, 0 warnings)
- style_check: **PASS** (black OK, isort OK)
- test_runner: **PASS** (238 passed, 관련 테스트 모두 통과)
- file_check: FAIL (보고서/.done 미생성 시점)
- data_integrity: FAIL (task-timers.json 미등록 시점)
