# task-716.1 완료 보고서

**S**: whisper-compile.py가 팀 상태를 브리핑하지만, 세션 크래시/타임아웃으로 `task-timer.py end`가 호출되지 않은 고스트 태스크(예: task-700.1 25시간째 running)를 감지하지 못해 팀이 실질 유휴임에도 "작업중"으로 잘못 보고된다.

**C**: 고스트 태스크로 인해 아누가 잘못된 팀 상태를 받아 유휴 팀에 작업 배분을 못 하는 문제가 반복 발생. 또한 dev1/dev2 CLAUDE.md에서 "task-timer를 직접 호출하지 마세요"와 "반드시 task-timer 종료" 규칙이 모순되어 혼란 야기.

**Q**: 고스트 태스크를 자동 감지하여 브리핑에 경고하고, CLAUDE.md 규칙 모순을 해소할 수 있는가?

**A**: whisper-compile.py에 `detect_ghost_tasks()` 함수(4h 이상 running = 고스트)와 [고스트경고] 섹션, [팀] 섹션 고스트 마커(⚠️고스트?, 실질유휴)를 추가. dev1/dev2 CLAUDE.md의 작업 규칙을 "start는 자동, end는 수동 필수"로 명확히 분리. pytest 85건 전체 통과(신규 9건), pyright 0 에러.

## 수정 내역

### 수정 1: whisper-compile.py 고스트 감지 추가

**파일**: `/home/jay/workspace/scripts/whisper-compile.py`

- **1-1** (line 36): `GHOST_THRESHOLD_HOURS = 4` 상수 추가
- **1-2** (line 249-280): `detect_ghost_tasks()` 함수 추가 — running 상태 4h 이상 태스크 탐지
- **1-3** (line 447-457): `compile_briefing()`에 [고스트경고] 섹션 추가 — `lines.insert(-1, ...)` 패턴으로 `</whisper-briefing>` 앞에 삽입
- **1-4** (line 325-351): [팀] 섹션에서 고스트 태스크에 `⚠️고스트?` 마커, 고스트만 있는 팀은 `(실질유휴)` 표시

### 수정 2: CLAUDE.md 모순 해소

**파일**: `/home/jay/workspace/teams/dev1/CLAUDE.md`, `/home/jay/workspace/teams/dev2/CLAUDE.md`

- 기존: "task-timer.py를 직접 호출하지 마세요" ↔ "반드시 task-timer 종료" 모순
- 변경 후: "start는 dispatch.py 자동 → 호출 금지", "end는 팀장 수동 필수"로 명확 분리

### 테스트 추가

**파일**: `/home/jay/workspace/scripts/tests/test_whisper_compile.py`

- `TestGhostTasks` 클래스 (9개 테스트 신규 추가)

## 생성/수정 파일 목록

- 수정: `/home/jay/workspace/scripts/whisper-compile.py`
- 수정: `/home/jay/workspace/scripts/tests/test_whisper_compile.py`
- 수정: `/home/jay/workspace/teams/dev1/CLAUDE.md`
- 수정: `/home/jay/workspace/teams/dev2/CLAUDE.md`

## 테스트 결과

- pytest: **85/85 PASSED** (기존 76 + 신규 9건)
- pyright: **0 errors, 0 warnings, 0 informations**
- 실제 실행: exit code 0, 현재 고스트 태스크 없어 [고스트경고] 미출력 (정상)

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **[팀] 섹션 `now` 중복 호출** — 루프 내 `datetime.now(timezone.utc)` 매 반복 호출됨. 작업 지시서 코드 스펙대로 구현했으며, 현재 팀 수(3개) 수준에서 성능 영향 무시 가능하므로 의도적 유지.
2. **`lines.insert(-1, ...)` 패턴 순서 의존성** — `</whisper-briefing>` append 후 insert(-1) 하는 패턴이 추후 다른 섹션에서도 사용될 경우 순서 꼬임 가능. 현재는 [고스트경고]만 사용하므로 문제 없음. 향후 확장 시 주의 필요.
3. **CLAUDE.md 규칙 1과 4의 모순** — "직접 호출하지 마세요" vs "반드시 종료 호출" 모순을 "start 자동/end 수동"으로 분리하여 해소 완료.

## QC 자동 검증 결과

- **overall**: PASS (6 PASS, 4 SKIP)
- file_check: PASS (4파일 모두 존재, 보고서 3511 bytes)
- data_integrity: PASS
- tdd_check: PASS (테스트+구현 파일 모두 존재)
- pyright_check: PASS (0 errors, 0 warnings)
- style_check: PASS (black OK, isort OK)
- critical_gap: PASS
