# task-683.1 완료 보고서

**S**: whisper-compile.py가 팀 상태를 bot-activity.json에서 읽어 표시하는데, 작업 완료 후에도 bot-activity.json이 갱신되지 않아 dev2/dev3이 실제로는 유휴임에도 "processing"으로 잘못 표시되고 있었다.

**C**: 아누가 브리핑을 받을 때 팀 상태가 부정확하여 작업 분배 판단에 혼란을 초래할 수 있다. running task가 없는데 "processing"으로 보이면 유휴 팀에 작업을 할당하지 못하는 문제가 발생한다.

**Q**: whisper-compile.py의 상태 판단 로직을 개선하고, task-timer.py end 시 bot-activity.json을 자동 갱신하여 팀 상태를 정확하게 표시할 수 있는가?

**A**: 3가지 수정을 완료. (1) whisper-compile.py에서 processing+no running task = 유휴로 표시하도록 로직 개선, (2) task-timer.py end_task()에 bot-activity.json 자동 갱신 메서드 추가, (3) bot-activity.json의 dev2/dev3을 idle로 즉시 교정. pytest 76건 전체 통과, pyright 에러 0건.

## 수정 파일 목록

- `/home/jay/workspace/scripts/whisper-compile.py` — 팀 상태 판단 로직 수정 (lines 294, 303, 402, 406)
- `/home/jay/workspace/memory/task-timer.py` — `_update_bot_activity()` 메서드 추가 (lines 302-350), `end_task()`에서 호출 (lines 244-245)
- `/home/jay/workspace/memory/events/bot-activity.json` — dev2, dev3 status를 idle로 교정
- `/home/jay/workspace/scripts/tests/test_whisper_compile.py` — 5개 테스트 케이스 추가 (TestProcessingButNoRunningTasks 클래스)

## 변경 내용 상세

### 1. whisper-compile.py 상태 판단 로직 개선
- **브리핑 출력** (line 294): `elif status == "idle"` → `elif status == "idle" or (status == "processing" and not running_tasks)`
- **status_dict** (line 402): 동일 로직 적용
- **else 분기** (lines 303, 406): raw status 대신 "상태불명" 표시

### 2. task-timer.py end_task() bot-activity 자동 갱신
- `_update_bot_activity(team_id)` 메서드 신규 추가
- team_id에서 bot_key 추출 (dev2-team → dev2)
- 동일 팀에 다른 running task가 남아있으면 갱신 스킵
- NamedTemporaryFile + os.replace 원자적 쓰기
- 예외 발생 시 best-effort 로깅 후 계속 진행

### 3. bot-activity.json 즉시 교정
- dev2: processing → idle (since: 2026-03-18T05:10:18Z)
- dev3: processing → idle (since: 2026-03-18T05:10:18Z)

## 테스트 결과

- **pytest**: 76 passed, 0 failed (기존 71건 + 신규 5건)
- **pyright**: 0 errors, 0 warnings, 0 informations
- **실행 검증**: whisper-compile.py 직접 실행하여 3팀이 "유휴(0h)"로 정상 표시 확인

### 추가된 테스트 (5건)
1. `test_processing_no_running_shows_idle_in_briefing` — processing+no running → "유휴" 표시
2. `test_processing_with_running_shows_working` — processing+running → "작업중" 표시
3. `test_processing_no_running_status_dict_idle_count` — teams_idle 카운트 정확성
4. `test_unknown_status_shows_unknown` — 미정의 상태 → "상태불명" 표시
5. `test_mixed_teams_status` — 혼합 상태 정확성 (active=1, idle=2)

## 발견 이슈 및 해결

### 자체 해결 (2건)
1. **bot-activity.json since 시간대 오류** — 서버 로컬시간(KST)을 UTC로 잘못 입력하여 -8h 표시됨. `date -u` 확인 후 UTC 시각으로 교정.
2. **status_dict 로직 누락** — 브리핑 출력(lines 285-303)뿐 아니라 status_dict 생성 로직(lines 394-406)에도 동일 버그 존재. 양쪽 모두 수정.

### 범위 외 미해결 (1건)
1. **detect_idle_teams()는 task 정보 미참조** — 유휴경고 함수는 bots 데이터만 받으므로 "processing+no running"을 직접 감지 불가. compile_briefing()에서 이미 유휴로 처리하므로 현재 동작에 문제없음. 추후 구조 개선 필요 시 별도 작업으로 분리 가능.

## QC 검증

```json
{
  "overall": "WARN",
  "summary": "6 PASS, 3 SKIP, 1 WARN",
  "checks": {
    "file_check": "PASS",
    "data_integrity": "PASS",
    "test_runner": "PASS (967 passed, 0 failed)",
    "tdd_check": "PASS",
    "style_check": "PASS (black OK, isort OK)",
    "pyright_check": "WARN (기존 utils.logger import 미해결 — 본 작업 범위 외)",
    "critical_gap": "PASS"
  }
}
```

- pyright WARN: task-timer.py의 `utils.logger` import 경고는 기존 코드의 기존 이슈 (본 작업 변경과 무관)
- pytest: 전체 967건 통과 (scripts/tests 디렉토리 전체), whisper-compile 테스트 76건 통과
