# Phase 2: 모듈화 린터/훅 + module-registry 완성

## 목표
새로운 하드코딩이 코드에 추가되면 자동으로 감지+차단하는 방어 체계 구축.
"모듈화를 까먹어도 시스템이 강제한다"

## 생성할 파일

### 1. hooks/modularity-lint.sh (pre-commit hook)
하드코딩 패턴을 감지하여 커밋 차단:
- ChatID `6937032012` 직접 사용 (env/config 외)
- 절대경로 `/home/jay/workspace` 직접 사용 (config 외)
- DQ 폰트 사이즈 `84px, 64px, 40px` 직접 사용 (dq_rules import 외)
- 팀명 `dev1-team` 등 직접 사용 (config 외)

패턴 감지 시:
```
❌ 모듈화 위반 감지!
파일: scripts/new-script.py:15
위반: ChatID "6937032012" 하드코딩
수정: os.environ.get("COKACDIR_CHAT_ID") 또는 config.loader 사용
```

### 2. config/module-registry.json 완성
Phase 0에서 초기 5개 소스 등록됨. Phase 1~1.5 완료 후:
- 실제로 config 참조로 전환된 모든 항목 등록
- used_by 파일 목록 업데이트
- 누락된 단일 소스 추가 등록

### 3. tools/modularity-check.py (수동 검증 도구)
```bash
python3 tools/modularity-check.py scan  # 전체 스캔
python3 tools/modularity-check.py verify  # registry vs 실제 코드 정합성
```
- registry에 등록된 값이 다른 파일에 하드코딩되어 있으면 FAIL
- 새로 추가된 config 값이 registry에 미등록이면 WARNING

### 4. .pre-commit-config.yaml 업데이트
기존 pre-commit 훅에 modularity-lint 추가

## 오탐(false positive) 방지
- 주석/문서에서의 값 언급은 허용 (코드 라인만 체크)
- config 파일 자체는 제외
- 테스트 fixture의 하드코딩은 허용 (단, env fallback 권장)

## 검증
1. 의도적으로 하드코딩 추가 → 커밋 시 차단 확인
2. 정상 코드 → 커밋 통과 확인
3. modularity-check.py scan 결과 0건 (현재 코드 기준)

## 절대 건드리면 안 되는 파일
- dispatch.py, image_workflow.py, dashboard/, scripts/, tests/ (이미 수정 완료)

## 산출물
1. hooks/modularity-lint.sh
2. config/module-registry.json (업데이트)
3. tools/modularity-check.py
4. .pre-commit-config.yaml (업데이트)
5. 보고서