# task-113.1 실행 계획: Hook 파일 동시 쓰기 경쟁 조건(Race Condition) 수정

## 작업 요약
4개 hook 파일에서 JSON 동시 쓰기 시 flock을 추가하여 Race Condition 방지

## 서브태스크 분해 및 팀원 배정

### ST-1: pre-tool-use.sh flock 추가 (오딘 직접)
- 대상: /home/jay/.claude/hooks/pre-tool-use.sh (79-89줄)
- member-status.json 쓰기 블록을 flock 서브셸로 감싸기
- LOCK: /home/jay/workspace/memory/events/.member-status.lock

### ST-2: post-tool-use.sh flock 추가 (오딘 직접)
- 대상: /home/jay/.claude/hooks/post-tool-use.sh (70-86줄)
- 기존 서브셸에 flock 추가, 200> redirect 추가
- LOCK: /home/jay/workspace/memory/events/.member-status.lock

### ST-3: user-prompt-submit.sh flock 추가 (오딘 직접)
- 대상: /home/jay/.claude/hooks/user-prompt-submit.sh (26-44줄)
- 기존 서브셸에 flock 추가, 200> redirect 추가
- LOCK: /home/jay/workspace/memory/events/.bot-activity.lock

### ST-4: stop-qc-reminder.sh flock 추가 (오딘 직접)
- 대상: /home/jay/.claude/hooks/stop-qc-reminder.sh (40-56줄)
- 기존 서브셸에 flock 추가, 200> redirect 추가
- LOCK: /home/jay/workspace/memory/events/.bot-activity.lock

### ST-5: 테스트 (헤임달)
- 4개 파일 문법 검증 (bash -n)
- flock 패턴 존재 확인
- 실제 hook 실행 시뮬레이션 테스트

## 실행 순서
1. ST-1~ST-4 병렬 (4개 파일 편집, 독립적)
2. ST-5 (편집 완료 후 테스트)

## 예상 위험 및 대안
- 위험: flock fd 200이 기존 fd와 충돌 → 대안: fd 200은 관례적으로 안전, 충돌 가능성 극히 낮음
- 위험: flock -w 5 타임아웃이 짧음 → 대안: 5초면 JSON 쓰기에 충분. 실패 시 exit 0으로 안전 종료
- 위험: 서브셸 redirect 순서 오류 → 대안: 200>"$LOCK" 2>/dev/null 순서로 배치
- 기각된 대안: lockfile 유틸리티 사용 → flock이 더 표준적이고 atomic

## 수정 패턴
```
( flock -w 5 200 || exit 0; 기존 jq 로직 ) 200>"$LOCK"
```
- flock 실패 시 exit 0으로 hook이 절대 Claude를 차단하지 않음
- 기존 jq + mv atomic write 패턴 유지
