# task-439.1: 팀장 자기체이닝 인프라 강화 + 보안 조치

## 배경
에이전트 미팅 결과(2026-03-10), done_watcher 데몬(별도 Python 프로세스) 방식은 기존 인프라와 중복·충돌 위험으로 폐기됨.
대신 기존 인프라(notify-completion.py + completion-handler + chain_manager.py)를 강화하여:
1. 팀장이 Phase 완료 시 다음 Phase 지시서를 직접 작성하는 "자기체이닝" 구조
2. 중간 Phase에서 아누 Opus 세션을 깨우지 않는 토큰 절약 분기
3. 보안 취약점 즉시 수정

미팅 기록: `/home/jay/workspace/memory/meetings/2026-03-10-done-watcher-design-review.md`

## 작업 1: 팀장 자기체이닝 워크플로우 추가

### 1-1. DIRECT-WORKFLOW.md 수정
파일: `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md`

기존 워크플로우의 "완료" 단계에 아래 규칙을 추가:

```
## 자기체이닝 규칙 (Phase 작업 시)
chain_manager.py에 등록된 체인 작업(memory/chains/*.json)에 소속된 Phase인 경우:
1. 현재 Phase 완료 후, 마스터플랜을 참조하여 **다음 Phase 지시서를 직접 작성**
   - 경로: memory/tasks/task-{다음task_id}.md
   - 내용: 이번 Phase 결과물 기반 + 마스터플랜의 다음 Phase 정의 참조
   - 반드시 포함: 참고 문서 경로, 이번 Phase 산출물 경로, 테스트 기준
2. 지시서 작성 후 보고서에 "다음 Phase 지시서: <경로>" 명시
3. notify-completion.py 호출 → chain_manager.py가 자동으로 다음 Phase dispatch
```

### 1-2. GLM-WORKFLOW.md 수정
파일: `/home/jay/workspace/teams/dev3/GLM-WORKFLOW.md`

동일한 자기체이닝 규칙을 3팀 워크플로우에도 추가.

## 작업 2: 토큰 절약 — 중간 Phase 아누 스킵

### 2-1. notify-completion.py 수정
파일: `/home/jay/workspace/scripts/notify-completion.py`

현재: 모든 완료 → cokacdir --cron으로 아누 세션 깨움 (Opus 토큰 소모)
변경: 체인 중간 Phase → 아누 세션 안 깨우고 직접 처리

수정 흐름:
```python
def main():
    # 1. task_id 파싱
    # 2. chain_manager.py로 이 task가 체인 소속인지 + 마지막 Phase인지 확인
    #    - 신규 서브커맨드: python3 chain_manager.py check --task-id <id>
    #    - 출력: {"in_chain": true, "is_last": false, "chain_id": "...", "next_task_id": "..."}
    # 3. 분기:
    #    (a) 체인 아님 OR 마지막 Phase → 기존대로 아누 세션 깨움
    #    (b) 체인 중간 Phase →
    #        - .done.clear 원자적 생성 (선점)
    #        - chain_manager.py next 직접 호출 (다음 Phase dispatch)
    #        - task-timer end 호출
    #        - 텔레그램 알림만 전송 (아누 세션 안 깨움)
    #        - 알림: "task-XXX.X Phase N 완료, Phase N+1 자동 위임됨"
```

### 2-2. chain_manager.py에 check 서브커맨드 추가
파일: `/home/jay/workspace/chain_manager.py`

```
python3 chain_manager.py check --task-id task-436.2
→ {"in_chain": true, "is_last": false, "chain_id": "remotion-migration", "next_task_id": "task-436.3"}
```

기존 chain_manager.py의 `next` 커맨드 로직을 참고하여, 체인 소속 여부와 마지막 Phase 여부만 확인하는 읽기 전용 커맨드.

### 2-3. 텔레그램 알림 함수
notify-completion.py에 텔레그램 텍스트 알림 함수 추가:
```python
def send_telegram_notification(chat_id, anu_key, message):
    """아누 세션 안 깨우고 텔레그램 텍스트만 전송"""
    # cokacdir --cron "<message>" --at "10s" --chat <id> --key <key> --once
    # 이 메시지는 단순 알림이므로 최소 모델로 실행됨
```

## 작업 3: 보안 조치

### 3-1. ANU_KEY 하드코딩 제거
파일들:
- `/home/jay/workspace/prompts/team_prompts.py` 18행: `ANU_KEY = os.environ.get("COKACDIR_KEY_ANU", "c119085addb0f8b7")` → fallback 제거
- `/home/jay/workspace/chain_manager.py` 37행: 동일
- `/home/jay/workspace/scripts/notify-completion.py` 28행: `default=os.environ.get("COKACDIR_KEY_ANU", "c119085addb0f8b7")` → fallback 제거

변경 후:
```python
ANU_KEY = os.environ.get("COKACDIR_KEY_ANU", "")
if not ANU_KEY:
    raise EnvironmentError("COKACDIR_KEY_ANU 환경변수가 설정되지 않았습니다. source /home/jay/workspace/.env.keys 필요.")
```

### 3-2. 디렉토리 권한 강화
```bash
chmod 700 /home/jay/workspace/memory/events/
chmod 700 /home/jay/workspace/memory/tasks/
chmod 700 /home/jay/workspace/memory/chains/
```

## 테스트

1. **자기체이닝 흐름**: chain_manager.py에 테스트 체인 등록 → 가짜 .done 생성 → notify-completion 호출 → 다음 Phase dispatch 확인
2. **토큰 절약 분기**: 중간 Phase 완료 시 아누 세션이 **생성되지 않음** 확인 (cokacdir --cron 호출 안 됨)
3. **마지막 Phase**: 마지막 Phase 완료 시 아누 세션 정상 생성 확인
4. **보안**: ANU_KEY 환경변수 없이 실행 → EnvironmentError 발생 확인
5. **기존 호환성**: 체인 아닌 일반 작업 완료 → 기존대로 아누 세션 깨워 보고 확인

## 수정 대상 파일 목록
1. `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` (수정)
2. `/home/jay/workspace/teams/dev3/GLM-WORKFLOW.md` (수정)
3. `/home/jay/workspace/scripts/notify-completion.py` (수정)
4. `/home/jay/workspace/chain_manager.py` (수정 — check 서브커맨드 추가)
5. `/home/jay/workspace/prompts/team_prompts.py` (수정 — 키 제거)

## 절대 건드리지 말 것
- dispatch.py (정상 동작 중)
- chain.py (Phase 기반 멀티팀 체이닝, 별도 도구)
- completion-handler-instructions.md (아누 세션용, 기존 유지)

## 레벨: Lv.2
기존 코드 수정 + 새 서브커맨드 1개. 미팅 불필요.