# Phase 1: .done 감지 인프라 (Layer 2) 구현

## 태스크 ID: task-902.1
## 한정위임: 구현 → 검증까지 전부 진행

## 배경
자동화 오케스트레이터 통합 구현 계획서(task-901.1)의 Phase 1.
토큰 0 즉시 알림 + 기존 버그 수정.

## 필독 자료
- 구현 계획서: `/home/jay/workspace/memory/specs/automation-impl-plan.md` (Phase 1 섹션)
- .done 감지 설계서: `/home/jay/workspace/memory/specs/done-polling-spec.md`
- 체크리스트: `/home/jay/workspace/memory/specs/automation-impl-checklist.md`
- 맥락노트: `/home/jay/workspace/memory/specs/automation-impl-context.md`

## 산출물 (계획서 Phase 1 그대로)
1. `scripts/notify-completion.py` — cokacdir --cron → requests.post() 직접 Telegram API 교체
1b. `scripts/activity-watcher.py` — 동일 교체
2. `scripts/activity-watcher.py` — find_done_file 팀 기반 매칭 수정 + BOT_TEAM_MAP dev4-8 추가 + check_already_notified → .done.notified 마커 기반 교체
3. `~/.config/systemd/user/activity-watcher.service` — systemd user service 신규
4. `scripts/done-watcher.sh` — 미알림 .done 감지 + flock + O_EXCL + 배치 알림

## 검증 기준 (계획서 그대로)
- T1: 단일 팀 완료 → Telegram 1건 수신 (즉시)
- T3: Layer 1 실패 → Layer 2 fallback 30초 이내
- T6: symlink .done → 처리 거부
- pyright 0 에러, pytest 전건 통과

## ⚠️ 주의
- task-900.1에서 notify-completion.py에 shell=False 패치 + load_env_keys() + _validate_dispatch_args()가 이미 적용됨. 이 변경을 보존할 것
- Telegram Bot Token은 .env.keys에서 로드. 코드에 하드코딩 금지

## 파일 경계 (다른 팀과 충돌 방지)
- 이 작업에서 수정 가능: `scripts/` 하위 파일, systemd user 서비스
- 수정 금지: `orchestrator/` (2팀 담당), `dashboard/` (5팀 담당)

## 작업 후 처리
- 보고서: `memory/reports/task-902.1.md`
- task-timer end: `python3 /home/jay/workspace/memory/task-timer.py end task-902.1`
- .done: `touch /home/jay/workspace/memory/events/task-902.1.done`
