# 모듈화 전수조사 — 사전 리서치 (dev4 스캔 기반)

## 출처
- task-1423.1 (dev4 비슈누): DQ 규칙 단일 소스 모듈화 완료
- dev4 하드코딩 스캔: 1,859건 발견

## 1. 하드코딩 카테고리별 현황

### HIGH — 즉시 수정 필요
- **폰트 사이즈**: 50+파일, `84px/64px/40px` 직접 기입. 수정: `dq_rules.py` import
- **폰트 비율 1.3**: 40+파일 `line-height: 1.3` 하드코딩. 수정: `dq-rules.json` 참조
- **파일 경로**: 1,859건 `/home/jay/workspace` 하드코딩. 수정: `WORKSPACE_ROOT` 환경변수

### MEDIUM — 정비 필요
- **팀명 하드코딩**: dispatch.py `TEAM_BOT` dict. 수정: `config/teams.json` 로딩
- **ChatID**: 83건 `6937032012`. 10+곳에 env fallback 없음. 수정: `os.environ.get("COKACDIR_CHAT_ID")`
- **색상코드**: 50+파일 JS/generator에 hex 색상 산재. 수정: `config/design-system.json`

### LOW — 후순위
- **Gap threshold 1000**: dispatch.py 1곳
- **Idle/Ghost threshold**: whisper 스크립트 3곳
- **폰트명**: 50+곳 `Pretendard` 등 산재

## 2. 이미 모듈화 완료된 것 (task-1423.1)
- `memory/specs/dq-rules.json` — DQ 규칙 단일 소스 ✓
- `tools/dq_rules.py` — Python import 모듈 ✓
- `tools/validate-design-brief.py` — 모듈 참조 전환 ✓
- `teams/design/CLAUDE.md` — 인라인 수치 제거, 참조 전환 ✓
- `teams/marketing/CLAUDE.md` — 인라인 수치 제거, 참조 전환 ✓

## 3. 아직 미수정 (잔존 하드코딩)
- `prompts/image_workflow.py` — DQ 기준 인라인
- `tools/ai-image-gen/gen_*.py` (20+파일) — 폰트사이즈, 색상, 경로 하드코딩
- `output/meta-ads/pilot-v1/qc_check.py` — 폰트 기준 하드코딩
- `dashboard/components/*.js` — 색상 하드코딩
- `scripts/*.py` — ChatID, 경로 하드코딩
- `tests/*.py` — 경로, 팀명 하드코딩

## 4. 팀별 파일 경계 (충돌 방지용 초안)

| 영역 | 주요 파일 | 담당 후보 |
|------|----------|----------|
| DQ 모듈 + image_workflow | image_workflow.py, dq-rules.json | 2팀 |
| 이미지 생성기 20+ | tools/ai-image-gen/gen_*.py | 3팀+4팀 분할 |
| dispatch.py | dispatch.py (TEAM_BOT, 경로) | 8팀 |
| 대시보드 JS | dashboard/components/*.js | 5팀 |
| 스크립트 | scripts/*.py (ChatID, 경로) | 6팀 |
| 테스트 | tests/*.py (경로, 팀명) | 7팀 |
| 린터/훅 신규 | hooks/modularity-lint.sh | 1팀 |
| 모듈화 레지스트리 | config/module-registry.json | 1팀 |

## 5. 방어 체계 설계 초안
- **린터/훅**: pre-commit hook에서 하드코딩 패턴 감지 → 차단
- **레지스트리**: 단일 소스 목록 관리 (`config/module-registry.json`)
- **자동 테스트**: 레지스트리에 등록된 단일 소스가 다른 파일에 복제되면 FAIL
