# task-1148.1 완료 보고서: task-1142.1 피드백 5건 버그 수정

## SCQA

**S**: task-1142.1에서 에이전트 이름→ID 매핑 동적 로드를 구현하며 4건의 버그를 자체 해결했고, server.py timezone 파싱 버그 1건은 범위 외로 미해결 상태였다.

**C**: task-1142.1 자체 해결 4건(isis→bastet, PCRE 경계, dev5 호환성, Ma'at 따옴표)의 실제 수정 상태를 검증하지 않으면 재발 가능하고, server.py timezone 버그는 대시보드 70개 테스트 중 1건 (`test_timezone_aware_since_not_stuck_working`) 지속 실패를 유발한다. Python 3.12에서 `datetime.fromisoformat("...Z")`가 timezone-aware datetime을 반환하여 naive `datetime.now()`와 뺄셈 시 TypeError 발생 → except 처리로 stale member가 "working"으로 오표시.

**Q**: 5건 모두를 검증 및 수정하여 대시보드 테스트 70/70 통과를 달성할 수 있는가?

**A**: Bug 1-4는 기존 수정이 정상 동작함을 dev4 12/12, dev5 4/4 pytest + bash E2E로 검증 완료. Bug 5는 `_parse_timestamp_naive()` helper 함수를 server.py에 추가하여 "Z" 접미사를 안전하게 처리하도록 수정. server.py 내 `datetime.fromisoformat()` 호출 11곳 중 10곳을 helper로 교체. 결과: 대시보드 테스트 70/70 통과 (이전 69/70), pyright 0 errors.

## 수정 내용

### Bug 1: isis→bastet 불일치 — 검증 완료 (수정 불필요)
- 동적 로드 캐시(`.member-map-cache.sh`)에 `bastet` 정상 포함, `isis` 없음
- 활성 `.sh` 파일에 `isis` 참조 0건 (`.bak` 파일에만 잔존, 비활성)

### Bug 2: PCRE 경계 과잉 적용 — 검증 완료 (수정 불필요)
- `generate-member-map.py`의 `_kr_needs_boundary()`/`_en_needs_boundary()` 독립 판단 정상 동작
- bash 검증: `parse_member_id "토르가 개발을 시작했습니다"` → `thor` ✅

### Bug 3: dev5 테스트 호환성 — 검증 완료 (수정 불필요)
- `get_mapped_ids()`가 `parse-member-id.sh` + `.member-map-cache.sh` 양쪽 참조
- dev5 pytest 4/4 통과

### Bug 4: Ma'at 작은따옴표 이스케이프 — 검증 완료 (수정 불필요)
- `DOUBLE_QUOTE_PATTERNS`으로 double-quote grep 분리 처리 정상
- bash 검증: `parse_member_id "Ma'at가 검증했습니다"` → `maat` ✅

### Bug 5: server.py timezone 파싱 버그 — 코드 수정 완료
- **수정 파일**: `/home/jay/workspace/dashboard/server.py`
- **추가**: `_parse_timestamp_naive(ts_str)` helper 함수 (line 40-61)
  - "Z" → "+00:00" 치환 후 파싱
  - tzinfo 존재 시 UTC 변환 후 strip → naive datetime 반환
- **교체**: `datetime.fromisoformat()` → `_parse_timestamp_naive()` 10곳 적용
  - line 420 (get_stats running stale)
  - line 434 (get_stats reserved stale)
  - line 459 (get_running_tasks_by_team stale)
  - line 519 (get_composite_tasks stale)
  - line 621 (bot stale)
  - line 724 (member since stale) ← 핵심 버그 위치
  - line 928 (get_tasks_for_member running stale)
  - line 937 (get_tasks_for_member reserved stale)
  - line 963 (maybe_trigger_token_scan last_scan)
  - line 1218 (get_skill_usage_stats cutoff)
- **제외**: line 1317 — `.timestamp()` 변환 후 `time.time()` 비교, aware datetime 정상 동작

## 수정/생성 파일 목록
- 수정: `/home/jay/workspace/dashboard/server.py` (helper 함수 추가 + 10곳 교체)

## 테스트 결과
- dashboard pytest: **70/70 통과** (이전: 69/70, timezone 1건 실패 → 해소)
- dev4 pytest: 12/12 통과 (동적 매핑 검증)
- dev5 pytest: 4/4 통과 (매핑 완전성 검증)
- pyright: **0 errors, 0 warnings** (server.py)
- bash E2E: Bug 2 (토르 PCRE) ✅, Bug 4 (Ma'at 따옴표) ✅

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **server.py fromisoformat Z suffix TypeError** — `_parse_timestamp_naive()` helper로 timezone-naive 변환 처리
2. **동일 패턴 10곳 산재** — helper 함수 1개로 DRY 적용, 향후 timezone 이슈 재발 방지
3. **timezone import 추가 필요** — `from datetime import timezone` 추가 (line 31)

## QC 자동 검증 결과

```
pyright_check: PASS (0 errors, 0 warnings)
style_check: PASS (black 포매팅 적용 후 재검증)
file_check: PASS (187828 bytes)
data_integrity: PASS
test_runner: PASS (7 passed in 0.22s)
critical_gap: PASS
spec_compliance: PASS
duplicate_check: PASS
Overall: Gate PASS — .done 파일 자동 생성
```
