# Absorption 중복 해소 구현: 에러 감지/수정 병합 + 롤백 메커니즘

## 한정승인

## PRD 참조
- 분석 보고서: `/home/jay/workspace/memory/reports/task-1640.1.md`
- 계획서: `/home/jay/workspace/memory/tasks/task-1640.1-plan.md`
- 맥락노트: `/home/jay/workspace/memory/tasks/task-1640.1-context-notes.md`
- 체크리스트: `/home/jay/workspace/memory/tasks/task-1640.1-checklist.md` — Phase 3 Item 4

## 배경
fireauto의 circuit_breaker(에러 3회→중단)와 gstack의 CRITICAL GAP detector(에러 감지+수정)가 중복. Agent Meeting에서 **A(병합)** 결정: 범용 circuit_breaker 모듈로 통합.

## 구현 내용

### 1. 범용 circuit_breaker 모듈
- 위치: `/home/jay/workspace/utils/circuit_breaker.py` (신규)
- RecoveryStrategy 인터페이스 정의 (전략 패턴)
- fireauto 전략: 자동수정 (기존 post-tool-use.sh의 에러 카운터 로직)
- gstack 전략: 에스컬레이션 (CRITICAL GAP → 보고)
- 에러 카운터 영속 저장 (현재 /tmp/ → 영속 경로로 전환)
- 점진적 롤아웃: hook별 opt-in

### 2. ★ 에러 감지 롤백 메커니즘 설계 (미해결 항목 — 필수)
- 에러 감지 후 자동수정이 실패한 경우의 **롤백 전략** 상세 설계
- git stash/checkout 기반 파일 복원? 아니면 diff 기반 역적용?
- 롤백 범위: 마지막 Edit/Write만? 아니면 task 시작 시점까지?
- 롤백 실패 시 안전 장치 (human-in-the-loop 에스컬레이션)
- 설계 결과를 `utils/circuit_breaker.py` 내에 RollbackStrategy로 구현

### 3. 기존 코드 마이그레이션
- pyright_check를 첫 마이그레이션 대상으로 circuit_breaker 모듈에 연결
- 기존 post-tool-use.sh 에러 카운터 → circuit_breaker 호출로 전환
- qc_verify.py의 재시도 로직 → circuit_breaker 통합

### 참조 파일
- 현재 에러 카운터: `/home/jay/.claude/hooks/post-tool-use.sh`
- QC 재시도: `/home/jay/workspace/teams/shared/qc_verify.py`
- chain_manager retry: `/home/jay/workspace/chain_manager.py` (MAX_RETRY=2)
- fireauto 리서치: `/home/jay/workspace/memory/research/fireauto-analysis.md`
- gstack 리서치: `/home/jay/workspace/memory/research/gstack-deep-analysis.md`

## 테스트
1. circuit_breaker 모듈 단위 테스트 (전략 패턴, 카운터, 롤백)
2. pyright_check 마이그레이션 후 회귀 테스트
3. 에러 3회 → circuit break 동작 확인
4. 롤백 메커니즘 동작 테스트

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