# circuit_breaker 통합: post-tool-use.sh 마이그레이션 + chain_manager 통합

## 한정승인

## 배경
task-1643.1에서 `utils/circuit_breaker.py` 범용 모듈을 구현 완료. 그러나 기존 에러 감지 코드 2곳이 아직 범용 모듈과 통합되지 않음:

1. **post-tool-use.sh** — bash Hook에서 에러 카운터 관리 중 (circuit_breaker.py와 중복)
2. **chain_manager.py** — `_trigger_circuit_breaker()` 자체 구현 사용 중 (circuit_breaker.py와 중복)

## 선행 참조 (필수 읽기)
- circuit_breaker.py: `/home/jay/workspace/utils/circuit_breaker.py`
- 테스트: `/home/jay/workspace/tests/test_circuit_breaker.py`
- post-tool-use.sh: `/home/jay/.claude/hooks/post-tool-use.sh`
- chain_manager.py: `/home/jay/workspace/chain_manager.py`
- task-1643.1 보고서: `/home/jay/workspace/memory/reports/task-1643.1.md`

## 작업 1: post-tool-use.sh 마이그레이션

### 현재 상태
- post-tool-use.sh에 bash로 구현된 에러 카운터 로직:
  - Edit/Write 후 tool_output에서 error/failed/exception 패턴 감지
  - retry-counters/{task_id}.count 카운터 증가
  - 3회 이상 시 stderr 에스컬레이션 경고

### 마이그레이션 방안
- bash에서 Python circuit_breaker CLI를 호출하는 방식으로 전환
- **성능 측정 필수**: 현재 Hook 실행 시간 vs Python 호출 추가 후 실행 시간
  - 목표: PostToolUse Hook 실행 시간 50ms 이하 (fireauto PRD 합의)
  - Python cold start가 50ms 초과하면: circuit_breaker CLI를 백그라운드(`&`)로 실행
- 기존 bash 카운터 로직 제거, circuit_breaker.py의 `check_and_act()` 호출로 대체
- fallback: Python 호출 실패 시 기존 bash 로직으로 graceful degradation

### 성능 측정 방법
```bash
# Hook 실행 시간 측정 (수정 전)
time bash post-tool-use.sh (mock input)
# Hook 실행 시간 측정 (수정 후)
time bash post-tool-use.sh (mock input with python call)
```

## 작업 2: chain_manager.py 통합

### 현재 상태
- chain_manager.py에 자체 구현:
  - `MAX_RETRY = 2` 상수
  - `_audit_retry()`: 재위임 이벤트 audit-trail 기록
  - `_trigger_circuit_breaker()`: escalation 파일 생성
  - `_do_next()` 내 QC FAIL 처리 블록

### 통합 방안
- chain_manager의 `_trigger_circuit_breaker()`를 `utils/circuit_breaker.py`의 `CircuitBreaker` 클래스 호출로 교체
- 영향 범위 분석:
  - chain_manager의 retry 로직은 chain 전용 (dispatch 재호출)
  - circuit_breaker.py의 retry 로직은 범용 (RecoveryStrategy)
  - 둘을 어떻게 연결할지 설계:
    - Option A: chain_manager가 circuit_breaker를 내부적으로 사용 (어댑터 패턴)
    - Option B: chain_manager의 MAX_RETRY를 circuit_breaker.max_failures로 위임
    - Option C: chain_manager는 기존 유지, escalation 파일 생성만 circuit_breaker로 위임
- 기존 테스트 56건 회귀 없음 확인 필수

## 테스트
1. post-tool-use.sh 성능 측정: 수정 전후 비교, 50ms 목표
2. post-tool-use.sh 에러 3회 → circuit_breaker 동작 확인
3. chain_manager.py 기존 테스트 56건 전체 통과
4. chain_manager QC FAIL → circuit_breaker 연동 확인
5. Python 호출 실패 시 graceful degradation 확인

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`