**task-1870 완료 보고** (dev2-team) **task-1870: 와치독 .done 경합(race condition) 버그 수정** (3분 19초) **핵심 결과** 3중 방어 로직을 추가하여 race condition을 완전 차단. (1) .done/.acked/.clear 파일 확인 확장, (2) STALLED 판정 직전 status 재확인, (3) end_time 존재 시 스킵. 테스트 55/55 전체 통과, 문법 검증 통과. 기존 재위임 기능에 대한 회귀 없음. ## 수정 내용 ### 수정 1: .done 파일 확인 확장 (session-watchdog.sh:79) - 기존: `.done` 파일만 확인 - 변경: `.done`, `.done.acked`, `.done.clear` 3종 모두 확인 - 효과: 완료 처리 과정의 모든 상태 파일을 인식 ### 수정 2: STALLED 판정 전 status 재확인 (session-watchdog.sh:151-156) - 추가: task-timers.json에서 현재 status를 재조회 - status가 `running`이 아니면 (completed/done 등) 스킵 - 효과: timer end가 status를 변경한 직후의 race window 차단 ### 수정 3: end_time 존재 시 스킵 (session-watchdog.sh:158-163) - 추가: end_time 필드가 존재하면 이미 timer end가 완료된 task - .done 파일이 아직 생성되지 않았어도 스킵 - 효과: timer end → .done 생성 사이 가장 중요한 방어선 ### 테스트 업데이트 (test_session_watchdog.sh) - `judge_task` 함수에 동일한 3중 방어 로직 반영 - TC3a: `.done **발견/해결 이슈 3건** 1. **기존 .done 확인이 불완전** — `.acked`와 `.clear` 파일을 OR 조건에 추가하여 완료 과정 전체를 커버 2. **STALLED 판정에 status 재확인 없음** — jq로 status를 재조회하는 guard 추가 3. **end_time 존재 시에도 STALLED 판정** — end_time 확인 guard 추가