# task-464.1 보고서: 유령 task 생성 + member-status timezone 버그 수정

## 작업 개요
- **레벨**: Lv.2
- **팀**: dev2-team (오딘)
- **담당**: 토르(백엔드), 프레이야(프론트엔드), 미미르(UX/UI)

## 버그 A: 유령 task 생성 방지

### 수정 내용

1. **CLAUDE.md 경고 문구 추가** (`/home/jay/.cokacdir/workspace/autoset/CLAUDE.md`)
   - "작업 기록 규칙" 섹션에 팀장 봇 전용 경고 추가
   - 팀장이 직접 task-timer.py start를 호출하지 않도록 안내

2. **task-timer.py completed 가드 추가** (`/home/jay/workspace/memory/task-timer.py`)
   - `start_task()` 함수에서 `completed` 상태인 동일 task_id가 있으면 새 등록 거부
   - 기존 `running` 중복 거부(line 111-115) 바로 다음에 위치
   - 반환값: `{"status": "error", "reason": "task_id '...' is already completed. Use a new ID."}`

### 테스트 (TDD)
- `TestStartTaskCompletedGuard` 클래스 3개 테스트:
  - `test_start_completed_task_returns_error`: completed ID로 start → error 반환
  - `test_start_completed_task_preserves_original`: 원본 데이터 보존 확인
  - `test_running_task_still_rejected`: 기존 running 중복 거부 동작 유지

## 버그 B: member-status timezone 비교 오류

### 원인 분석
- `member-status.json`의 `since` 필드에 "Z" suffix(UTC) 포함
- `datetime.fromisoformat(since_str)` → timezone-aware datetime 반환
- `datetime.now()` → naive datetime
- 비교 시 `TypeError` → except에서 `return "working"` → 영원히 "작업중"

### 수정 내용

1. **헬퍼 함수 추가** (`/home/jay/workspace/dashboard/server.py`)
   ```python
   def _parse_naive_datetime(dt_str: str) -> datetime:
       dt = datetime.fromisoformat(dt_str)
       if dt.tzinfo is not None:
           dt = dt.replace(tzinfo=None)
       return dt
   ```

2. **전수 수정 적용** - `datetime.fromisoformat()` → `_parse_naive_datetime()` 교체 (7곳):
   - `get_team_stats()` - running task stale 판단
   - `get_team_stats()` - reserved task stale 판단
   - `get_running_tasks_by_team()` - stale task 필터링
   - `get_member_status()` - since 비교 (핵심 버그)
   - `get_tasks_info()` - running task stale 표시
   - `get_tasks_info()` - reserved task stale 표시
   - `get_system_status()` - running count stale 제외

### 테스트 (TDD)
- `TestMemberStatusTimezone` 클래스 2개 테스트:
  - `test_timezone_aware_since_not_stuck_working`: Z suffix + 3시간 전 → stale 판정 정상
  - `test_timezone_aware_since_fresh_still_working`: Z suffix + 5분 전 → working 유지

## 생성/수정 파일 목록

| 파일 | 변경 유형 |
|------|-----------|
| `/home/jay/.cokacdir/workspace/autoset/CLAUDE.md` | 경고 문구 추가 |
| `/home/jay/workspace/memory/task-timer.py` | completed 가드 추가 |
| `/home/jay/workspace/tests/test_task_timer.py` | 테스트 3개 추가 |
| `/home/jay/workspace/dashboard/server.py` | _parse_naive_datetime 헬퍼 + 7곳 교체 |
| `/home/jay/workspace/dashboard/test_server.py` | 테스트 2개 추가 |

## 테스트 결과
- **전체**: 163개 PASS (0 FAIL)
- **신규 테스트**: 5개 (completed 가드 3개 + timezone 2개)
- **기존 테스트**: 158개 전부 PASS (회귀 없음)
- **pyright**: 신규 코드 타입 이슈 없음 (기존 경고만 존재)

## 버그 유무
- 발견된 버그 없음

## QC 결과
- **Overall**: WARN (PASS 수준)
- file_check: PASS
- data_integrity: PASS
- test_runner: PASS (818 passed)
- tdd_check: PASS
- pyright_check: WARN (기존 uvicorn.run() 타입 오류 29건 - 본 작업 범위 외)
- style_check: PASS (black + isort)
- .done 파일: 자동 생성 완료
