# finish-task.sh 후속 — 워크트리 백그라운드 프로세스 cleanup

## 작업 레벨: Lv.1 (인프라 안정성, 작은 추가)

## 프로젝트
- 인프라: `/home/jay/workspace/scripts/finish-task.sh`

## 배경

2026-05-02 회장 점검에서 InsuWiki 워크트리에 **next-server 좀비 dev 서버 발견**:

- PID 623943 (next-server v16.2.3)
- CWD: `/home/jay/projects/insuwiki/.worktrees/task-2334-dev1/nextapp`
- 시작: 2026-05-01 06:10 → **1일 16시간 가동 + CPU 112%**
- 원인: dev1 봇이 task-2334(keyword_pool 마이그레이션) 검증 후 `npm run dev` 띄우고 **종료 안 함**
- 결과: 좀비 dev 서버가 file watcher/HMR로 1.5일째 CPU 갈아먹음

task-2348(이참나)에서 finish-task.sh 루프 fix는 끝났지만, **백그라운드 프로세스 cleanup은 미포함**. 회장 지시로 후속 추가.

## 요구사항

finish-task.sh의 마지막 단계(또는 신규 단계)에 **워크트리에서 봇이 띄운 백그라운드 프로세스를 자동 종료**하는 cleanup 로직 추가.

### 종료 대상 패턴

봇이 검증 중 자주 띄우는 프로세스들:
- `node ... .worktrees/<task-id>-<team>/.../next dev` (Next.js dev 서버)
- `node ... .worktrees/<task-id>-<team>/.../vite` (Vite dev 서버)
- `python ... uvicorn` (FastAPI dev 서버, 워크트리 CWD)
- `playwright` 또는 `chromium` (E2E 테스트 잔존)
- `npm run dev` 등 자식 프로세스

### 안전 가드

⚠️ **반드시 워크트리 경로 매칭으로만 종료**. 시스템 전역 dev 서버를 죽여서는 안 됨:
- `~/.config/systemd/user/` 등록된 서비스는 절대 건드리지 않음
- `/home/jay/projects/InsuRo/server` (운영 uvicorn 등)는 워크트리 경로에 없으면 보존
- 워크트리 경로 매칭: `/.worktrees/<task-id>-<team>/` 부분 문자열 정확 매칭

### 구현 방향

```bash
# finish-task.sh 마지막 단계 (Step N)
WORKTREE_PATH="/home/jay/projects/<project>/.worktrees/${TASK_ID}-${TEAM_SHORT}"

# 1. 해당 워크트리 CWD 갖는 프로세스 PID 수집
PIDS=$(ps -eo pid,cwd 2>/dev/null | awk -v wt="$WORKTREE_PATH" '$2 ~ wt {print $1}')

# 2. 프로세스 트리 단위로 SIGTERM (부모 → 자식)
for pid in $PIDS; do
  pkill -TERM -P "$pid" 2>/dev/null
  kill -TERM "$pid" 2>/dev/null
done

# 3. 5초 대기 → SIGKILL 폴백
sleep 5
for pid in $PIDS; do
  ps -p "$pid" --no-headers >/dev/null 2>&1 && kill -KILL "$pid" 2>/dev/null
done

# 4. 로그
echo "[cleanup] 워크트리 백그라운드 프로세스 N개 종료" >> "$LOG"
```

## 검증 시나리오

1. 봇이 워크트리에서 `npm run dev` 띄움 → finish-task.sh 실행 → dev 서버 자동 종료 확인
2. 봇이 `uvicorn` 띄움 → 종료 확인
3. 시스템 전역 dev 서버(`~/.config/systemd/user/`) → **건드리지 않음** 확인
4. 정상 task에서 부수효과(다른 task의 dev 서버 종료) 0건

## affected_files

**수정:**
- `/home/jay/workspace/scripts/finish-task.sh` (cleanup 단계 추가)

## 보고

- `memory/reports/finish-task-bg-cleanup.md`
- 종료 대상 PID 패턴 매칭 결과
- 안전 가드 시뮬레이션 (워크트리 외 프로세스 보존 확인)
- 사례: PID 623943 (insuwiki/.worktrees/task-2334-dev1) 같은 케이스 재현 + 자동 종료 확인

## 운영 메모

- task-2348(이참나)와 같은 finish-task.sh 파일 수정 — 머지 후 적용
- 8팀 모두 영향 (심볼릭 링크 구조 동일)
- 본 fix 적용 후 InsuWiki 워크트리 16개 누적 cleanup은 **별도 운영 작업** (본 task 범위 외)

## goal_assertions (patched task-2350)
- `grep -q "2.6.10" /home/jay/workspace/scripts/finish-task.sh`
- `grep -q "WORKTREE_SUBSTR" /home/jay/workspace/scripts/finish-task.sh`

## 운영 메모

원래 auto-generated 항목이 dev 서버 명령(무한 대기 부작용)이었으나, 본 task 작업 중 의미있는 검증 명령으로 교체. goal_assertions 자동 생성기 개선 필요 (별도 운영 task 권장).

