# Phase 1: dispatch.py 모듈화 — 하드코딩 → config 참조 전환

## 목표
dispatch.py 내 모든 하드코딩을 config/loader.py를 통한 단일 소스 참조로 전환.

## 수정 대상 (dispatch.py만)
- `/home/jay/workspace/dispatch.py`

## 수정 항목

### 1. TEAM_BOT / TEAM_TO_BOT_ID dict
- 현재: `TEAM_BOT = {"dev1-team": "dev1", ...}` 하드코딩
- 수정: `config/constants.json`의 `teams` 에서 로딩
- `from config.loader import ConfigManager; cfg = ConfigManager.get_instance()`

### 2. CHAT_ID
- 현재: `CHAT_ID = os.environ.get("COKACDIR_CHAT_ID", "6937032012")`
- 수정: fallback을 `cfg.get_constant("chat_id")`로 변경

### 3. 파일 경로
- 현재: `/home/jay/workspace/` 하드코딩 다수
- 수정: `cfg.get_path("roots.workspace")` 또는 `WORKSPACE_ROOT` 환경변수

### 4. BOT_CHAT_MAPPING
- 현재: 하드코딩 dict
- 수정: `config/constants.json`의 `bots` 에서 로딩

## 절대 건드리면 안 되는 파일
- config/ 디렉토리 (Phase 0 산출물)
- dashboard/ (5팀 영역)
- tools/ (3팀 영역)
- scripts/, tests/ (6팀 영역)
- ThreadAuto, InsuRo (4팀, 7팀 영역)

## config 참조 방법
```python
import sys
sys.path.insert(0, "/home/jay/workspace")
from config.loader import ConfigManager
cfg = ConfigManager.get_instance()

# 경로
workspace = cfg.get_path("roots.workspace")
# 상수
chat_id = cfg.get_constant("chat_id")
teams = cfg.get_constant("teams")
```

## 검증
1. 기존 dispatch.py 테스트 전체 통과 (167건+)
2. 하드코딩 grep: `grep -n "6937032012\|/home/jay/workspace\|TEAM_BOT\s*=" dispatch.py` → 0건
3. 3 Step Why: 왜 config 참조? → 하나 바꾸면 전부 바뀌는 모듈화 원칙

## 산출물
1. dispatch.py 수정
2. 보고서