# 대시보드 통합 재적용 — 4개 task 변경사항 복구 (Lv.3)

## ★★★ 최우선 규칙 ★★★
- **worktree 사용 금지** — main 브랜치에서 직접 작업
- 이전에 worktree 머지로 변경사항이 반복적으로 덮어쓰여 날아감
- 이번에는 반드시 main에서 직접 수정 + 즉시 커밋

## 복구 대상 (4개 task 변경사항)

### 1. task-1814: 네이버 블로그 히스토리 삭제 기능
**server.py**: DELETE API 2개 추가
- `DELETE /api/naver-blog/history/{type}/{id}` — 개별 삭제
- `DELETE /api/naver-blog/history/{type}` — 전체 삭제
- table_map 화이트리스트 + 파라미터화 쿼리 (SQL injection 방지)
- type 검증 (keywords/contents/competitions), id 숫자 검증

**NaverBlogView.js**: 삭제 UI
- `handleDeleteItem(e, type, id)` — 개별 삭제 (이벤트 전파 차단)
- `handleDeleteAll()` — confirm 다이얼로그 후 전체 삭제
- 각 항목 우측에 ✕ 버튼: `text-slate-400 hover:text-red-500`
- 헤더에 "전체 삭제" 버튼: items가 있을 때만 표시

### 2. task-1815: 히스토리 날짜 정렬 + 봇 알림 수정
**NaverBlogView.js**: 제목 컨테이너에 `flex-1` 추가
- 항목 레이아웃: 제목(flex-1) — 날짜(shrink-0) — ✕(shrink-0)

**notify-completion.py**: .env.keys 로딩 추가
- `main()` 함수에서 `load_env_keys()` 호출하여 ANU_BOT_TOKEN 로드

### 3. task-1816: 인프라 핫 리로드
**server.py**: 정적 파일 ETag + Cache-Control 헤더 추가
- end_headers에서 정적 파일에 ETag(mtime 기반) + `Cache-Control: no-cache`

**sw.js**: Service Worker 제거 또는 Network First 전략
- 기존 SW 캐시 문제 해결

**auto_reload.py**: 파일 변경 감지 → 서버 자동 재시작
- watchdog FileSystemEventHandler
- 2초 디바운스
- data/ 디렉토리 제외

**dashboard-watcher.service**: systemd 서비스 등록

### 4. task-1817: 조직뷰 실시간 작업 상태 추적
**server.py** 또는 **App.js**: task-timer running 상태 기반 팀 작업중/대기 판정

## 구현 참고
각 task의 보고서에 상세 코드 위치와 변경 내용이 기록되어 있음:
- `/home/jay/workspace/memory/reports/task-1814.1.md`
- `/home/jay/workspace/memory/reports/task-1815.1.md`
- `/home/jay/workspace/memory/reports/task-1816.1.md`
- `/home/jay/workspace/memory/reports/task-1817.1.md`

**★ 보고서를 반드시 읽고 동일한 변경을 적용할 것**

## 검증 시나리오
1. **삭제 기능**: 히스토리 항목 ✕ 클릭 → 삭제됨 + 전체 삭제 버튼 동작
2. **날짜 정렬**: 제목-날짜-✕ 순서로 오른쪽 정렬
3. **SW 제거**: F12 → Application → Service Workers → 없음
4. **ETag**: F5만으로 JS 변경 즉시 반영
5. **auto_reload**: server.py 수정 → 2초 후 자동 재시작
6. **조직뷰**: 작업 위임 중인 팀이 "작업중"으로 표시
7. **봇 알림**: 작업 완료 시 Telegram 알림 전송
