# task-625.1: bot-activity.json 유휴시간 since 타임스탬프 버그 수정

**완료**: 2026-03-17 08:00 (dev3-team / 라 팀장)

---

## SCQA

**S**: bot-activity.json의 `since` 필드가 봇 활동 감시 시스템의 핵심 데이터 소스로, whisper-compile.py가 이 값을 기준으로 각 팀의 유휴 시간을 계산하여 아누에게 경고를 제공한다.

**C**: `since` 값이 봇 작업 시작 시에만 갱신되고, 작업 완료 후 idle 전환 시에는 갱신되지 않았다. 그 결과 dev1은 2일, dev2는 12시간, dev3는 10일 전 타임스탬프가 남아 유휴 경고가 실제보다 극단적으로 과장되어 표시되었다.

**Q**: activity-watcher.py에서 processing→idle 전환 시 `since`를 자동 갱신하도록 수정하고, 현재 잘못된 데이터를 즉시 보정할 수 있는가?

**A**: `update_bot_since()` 함수를 activity-watcher.py에 추가하고, processing→idle 전환 감지 로직(line 309-310)에서 즉시 호출하도록 수정 완료. bot-activity.json 데이터 보정(dev1: 2일 전 → 18:08, dev2: 12시간 전 → 20:12, dev3: 10일 전 → 23:01). 수정 후 whisper-compile.py 실행 시 "1팀 4시간째 유휴"로 정상 계산됨. pytest 26건 전체 통과(신규 3건 포함), pyright 에러 0건.

---

## 원인 분석

### user-prompt-submit.sh (line 35-38)
봇이 작업을 **시작할 때만** `since`를 현재 시각으로 갱신 (`status: processing`). 작업 완료 후 idle 전환 시 `since` 갱신 없음.

### activity-watcher.py (수정 전 main loop)
processing→idle 전환 감지 후 알림만 전송, `since` 갱신 누락.

---

## 수정 내용

### 1. activity-watcher.py

**update_bot_since() 함수 신설 (lines 64-83)**:
- 봇의 `since` 필드를 현재 UTC 시각(`datetime.now(timezone.utc)`)으로 갱신
- 존재하지 않는 봇 이름 → 조용히 return
- 파일 I/O 실패 → `except Exception → log_protocol` 처리

**메인 루프 수정 (lines 306-310)**: processing→idle 전환 감지 즉시 `update_bot_since(bot_name)` 호출

### 2. bot-activity.json 즉시 데이터 보정

| 팀 | 수정 전 | 수정 후 |
|----|---------|---------|
| dev1 | 2026-03-14T03:52:44Z (-2일) | 2026-03-16T18:08:00Z |
| dev2 | 2026-03-16T07:52:15Z (-12h) | 2026-03-16T20:12:00Z |
| dev3 | 2026-03-07T02:53:28Z (-10일) | 2026-03-16T23:01:00Z |

---

## 검증 결과

### pytest
```
26 passed in 0.09s
```
신규 테스트 3건 (TestUpdateBotSince): since 갱신 성공, 없는 봇 무시, 파일 없어도 크래시 없음

### pyright
```
0 errors, 0 warnings, 0 informations
```

### black/isort
```
All done! 2 files would be left unchanged.
```

### whisper-compile.py 실행 결과
```
[유휴경고] 1팀 4시간째 유휴
```
→ 수정 전 dev1 기준 2일이었던 유휴경고가 정상 계산(약 14시간)으로 복원됨

---

## 발견 이슈 및 해결

### 자체 해결 (1건)
1. **GLM 보고서 아티팩트** — 보고서 말미에 `EOF`, `cat /home/jay/workspace/memory/reports/task-625.1.md` 문자열이 삽입됨 → 라 팀장이 SCQA 형식으로 보고서 재작성

### 범위 외 미해결 (3건)
1. **test_notify_completion.py 수집 오류** — `AttributeError: module 'notify_completion' has no attribute 'create_done_clear'`. 최종 커밋 b2fd880 (2026-03-15)에서 이미 존재하는 사전 오류. 본 작업 범위 외.
2. **test_group_chat.py 실패 2건** — 페르소나 카운트 불일치 (20 vs 21), 센터명 불일치. 사전 오류. 본 작업 범위 외.
3. **test_integration.py 실패 1건** — /tmp 임시 경로에서 파일 누락. 사전 오류. 본 작업 범위 외.

⚠️ 기존 테스트 실패 5건 (본 작업 범위 외): test_notify_completion.py::collection error, test_group_chat.py × 2, test_integration.py × 1, test_dispatch.py × 1

---

## QC 자동 검증 결과

- api_health: SKIP
- file_check: PASS (완료 후 재실행 기준)
- data_integrity: PASS
- test_runner: SKIP (별도 pytest 직접 실행: 26 passed)
- tdd_check: PASS (test 1개 + impl 2개)
- schema_contract: SKIP
- pyright_check: PASS (0 errors)
- style_check: PASS (black+isort OK)
- scope_check: SKIP
- 이슈 gap 검사: PASS

**전체 요약: 5 PASS, 4 SKIP**

---

## 수정 파일 목록

| 파일 | 변경 내용 |
|------|-----------|
| `scripts/activity-watcher.py` | `update_bot_since()` 함수 추가 + 메인 루프 호출 |
| `memory/events/bot-activity.json` | since 값 3팀 모두 보정 |
| `scripts/tests/test_activity_watcher.py` | `TestUpdateBotSince` 클래스 3개 테스트 추가 |
