# task-2138 완료 보고서: dispatch.py member-status write 로직 원복

## SCQA

**S**: task-2126에서 dispatch.py에 `_update_member_status_on_dispatch()` 함수를 추가하여 dispatch 시점에 member-status.json을 standby/working으로 변경하는 로직이 도입되었다. 이후 task-2134에서 `_schedule_status_rollback()` 롤백 보호 함수도 추가되었다.

**C**: dispatch.py가 member-status를 write하면, 봇(팀장)이 wake-up에 실패할 경우 cleanup 주체가 없어 standby/working 상태가 영구 잔존하는 버그가 반복 발생하였다. 4/21 정상 상태에서는 봇만이 member-status의 유일한 write 주체였다.

**Q**: dispatch.py에서 member-status write 로직을 제거하여 4/21 정상 상태로 원복할 수 있는가?

**A**: dispatch.py에서 member-status 관련 함수 2개와 호출부 4곳, timezone import를 삭제하여 원복 완료. pytest 2455건 전체 통과, 회귀 없음.

## 수정 내역

### 삭제 항목 (총 5건)

1. **`_update_member_status_on_dispatch()` 함수 전체** (구 L2704-2794, 약 90줄)
   - dispatch 시 member-status.json에 working/standby 기록하던 함수
2. **`_schedule_status_rollback()` 함수 전체** (구 L2796-2926, 약 130줄)
   - 5분 후 롤백 체크 백그라운드 프로세스를 생성하던 함수
3. **composite dispatch 호출부** (구 L2409-2410, 2줄)
   - `_update_member_status_on_dispatch("composite", ...)` + `_schedule_status_rollback(...)` 호출
4. **일반 dispatch 호출부** (구 L3445-3446, 2줄)
   - `_update_member_status_on_dispatch(team_id, ...)` + `_schedule_status_rollback(...)` 호출
5. **`timezone` import** (L22)
   - `from datetime import datetime, timedelta, timezone` → `from datetime import datetime, timedelta`

### 유지 항목
- `dashboard/data_loader.py` L831-843의 `_enrich_member_status()` 내 "팀원 idle→standby" 분기
  - task-timers.json 기반 enrichment이므로 봇 생명주기와 무관, 정상 유지

## 수정 파일
- `/home/jay/workspace/dispatch.py` — member-status write 로직 전체 삭제

## 테스트 결과
- pytest: **2455 passed**, 0 failed, 2 warnings (94.25s)
- grep 검증:
  - `_update_member_status_on_dispatch` → 0건
  - `_schedule_status_rollback` → 0건
  - `timezone` → 0건

## L1 스모크테스트

- dispatch 모듈 import 성공 확인
- `_update_member_status_on_dispatch` 함수 부재 확인 (hasattr → False)
- `_schedule_status_rollback` 함수 부재 확인 (hasattr → False)
- member-status.json 정상 로드 (90개 멤버)
- **결과: PASS**

## 완료 시그니처
- dispatch.py에서 member-status 관련 코드 0건 (grep 확인 완료)
- pytest 전체 통과 (회귀 없음)
- data_loader.py enrichment 로직 정상 유지

## 로키 보안 감사

로키(보안팀)의 보안 감사 결과: **PASS**
- 코드 삭제로 공격면 순감소
- `_schedule_status_rollback`의 임시 .py 파일 생성 + `start_new_session=True` 백그라운드 실행 패턴(코드 인젝션/고아 프로세스 위험) 제거
- `member-status.json` write 주체 감소로 파일 무결성 개선
- 보안상 이점만 있음

## 모델 사용 기록
- 불칸(Sonnet): dispatch.py 코드 삭제 작업
- 팀장(Opus): 태스크 분석, 검증, 보고서 작성
