# All Stop API — 제외 패턴 보강 + 테스트 방법 수정

## ★★★ 절대 금지 ★★★
**`curl -X POST /api/system/all-stop`을 절대 실행하지 마라.**
**이 API를 실제 호출하면 모든 claude 봇이 죽는다. 너 자신도 죽는다.**
**코드 리뷰와 문법 검증만으로 검증하라. 실제 호출은 제이회장님이 직접 버튼으로 한다.**

## 개요
All Stop API의 프로세스 제외 패턴을 보강한다.

## 현재 문제
1. `cokacdir` 프로세스가 제외 대상에 빠져있음 → cokacdir 봇 관리 서비스가 함께 kill됨
2. cokacdir이 관리하는 봇 프로세스(`/home/jay/.cokacdir/` 경로 포함)도 kill됨 → 이 봇들은 cokacdir이 알아서 관리하므로 All Stop에서 kill하면 안 됨

## 수정 요구사항

### kill 대상 정의 (화이트리스트 방식)
All Stop은 **cokacdir 밖에서 직접 실행한 claude 프로세스만** kill해야 함.

kill 대상:
- `claude` 키워드가 args에 포함된 프로세스
- 단, 아래 제외 패턴에 해당하지 않는 것만

제외 패턴:
```python
EXCLUDE_PATTERNS = [
    "dashboard/server.py",     # 대시보드 자체
    "cokacdir",                # cokacdir 서비스 및 관련 프로세스
    ".cokacdir/",              # cokacdir 관리하는 봇 세션 (system_prompt 경로)
    "systemd",                 # systemd 프로세스
    "grep",                    # grep 자체
    "dispatch.py",             # dispatch 프로세스
    "task-timer",              # timer 프로세스
]
# + os.getpid() (대시보드 PID)
# + os.getppid() (대시보드 부모 PID)
```

핵심: `.cokacdir/` 경로가 args에 포함된 프로세스는 **전부 제외**. 이것이 cokacdir이 관리하는 봇.

### 파일 수정
**파일**: `dashboard/server.py` — `/api/system/all-stop` 핸들러 (약 line 5816)

### 검증 방법 (★ 실제 호출 금지 ★)
1. `bash -n` 아닌 Python 문법 검증: `python3 -c "import ast; ast.parse(open('dashboard/server.py').read())"`
2. grep으로 제외 패턴이 코드에 존재하는지 확인
3. **절대 `curl -X POST /api/system/all-stop` 호출하지 않는다**
4. 대시보드 재시작 후 서비스 정상 동작 확인: `systemctl --user restart dashboard && curl -s http://localhost:8000/api/system/watchdog`
5. all-stop 핸들러 코드를 보고서에 첨부하여 리뷰

## 검증 시나리오
1. **코드 리뷰**: EXCLUDE_PATTERNS에 `.cokacdir/`가 포함되어 있으면 성공
2. **문법 검증**: `python3 -c "ast.parse(...)"` 통과하면 성공
3. **대시보드 정상 기동**: 재시작 후 watchdog API 응답하면 성공
4. **API 호출은 하지 않는다** — 제이회장님이 직접 대시보드 버튼으로 테스트
