# [feedback] 봇 종결 = finish-task foreground 1회 + 즉시 세션종료 · terminal-marker/callback wait 금지 (좀비 박멸)

**분류**: feedback (workflow doctrine)
**확립**: 2026-07-23 (회장 지시 — task-2841 dev1 3시간 좀비 사고 박제)

## 사고 (박제)
task-2841(PR-E1 테스트갭) dev1 봇: 8:04 push(29ee990) 완료 → 8:05 finish-task FINALIZE_ONLY=1 실행 → **8:06 finish-task를 background 로 돌리고 "[Task: Wait for finish-task terminal marker then tail log]" 로 terminal-marker 를 대기** → 8:09 QC 통과(8 PASS·14 SKIP·1 WARN, TRUST 전 카테고리 passed) → 그 후 **후속(.done→timer end→ANU callback) terminal-marker 를 3시간+ 무한 대기하며 hang** → 11:42 회장이 직접 /stop 강제종료.
- 그 사이 ANU(아누)는 push 된 29ee990 을 독립검증(pytest 67)하고 **이미 PR #121 을 머지 완료** — 봇의 finish-task 후속 단계는 **가치 0, 좀비만 유발**.

## Why (원인)
1. **좀비 근원 = QC 아님**. QC(full_suite_check/G4)는 8:09 에 정상 통과. hang 은 그 **이후** 봇이 **background finish-task 의 terminal-marker/callback 완료를 기다린** 데서 발생.
2. finish-task FINALIZE_ONLY 의 worktree/background terminal-callback 은 알려진 hang 패턴([[feedback_finish_task_finalize_only_merge_forbidden_260721]] · [[feedback_finish_task_worktree_p0b_inbox_and_manual_timer_end_260722]]).
3. merge_policy=none 이면 **머지는 원래 ANU 권한** — 봇의 finish-task QC/callback-wait 는 ANU 독립검증과 **중복** + 세션 수명만 늘려 좀비화.
4. team_prompts.py:1336-1340 는 원래 "finish-task.sh 실행 → **세션 종료**"(foreground+즉시종료) 지향. 봇이 **background+wait 로 스스로 이탈**한 것 → harness 코드 수정 불필요, 규약으로 못박음.

## How to apply (순서 B — 다음 발주부터 dispatch task.md 완료 섹션에 명시)
**봇 종결 규약**:
1. 코드 작성 → 커밋 → **push** (원격 브랜치 반영).
2. `finish-task.sh` 는 **foreground 1회** 실행(background 금지). QC 통과 + `.done` 생성되면 **즉시 세션 종료**.
3. ★ **finish-task 를 background 로 돌리고 terminal-marker 를 기다리지 마라** — 이게 좀비 원인.
4. ★ **ANU callback 완료를 봇이 대기하지 마라**. .done 만 남기고 exit. ANU 가 `.done` 디스크마커 폴링([[feedback_anu_disk_marker_polling_over_callback_wired_260623]])으로 감지.
5. merge_policy=none task 는 봇이 머지 안 함 → **ANU 가 원격 브랜치서 독립검증(테스트+Codex+CI) 후 머지**.

**ANU 측**:
- 봇 push + .done 감지 즉시 원격 브랜치서 독립검증 → 머지. 봇의 finish-task callback 을 세션-bound 로 기다리지 마라(감시 background 는 세션 teardown 에 죽음 — 회장 prod/notification 때마다 즉시 disk 상태 확인·전진).

## 실증
- PR #120·#121: 봇 push → ANU 독립검증(vitest 380 / pytest 67) → ANU 머지. 봇 finish-task callback 무관하게 완결됨. 봇 finish-task 후속 = 잉여.
- 즉 **봇은 push+.done 까지, 검증·머지는 ANU** 가 lowest-zombie·no-dup 경로.

## 관련
[[feedback_finish_task_finalize_only_merge_forbidden_260721]] · [[feedback_anu_disk_marker_polling_over_callback_wired_260623]] · [[feedback_dispatch_completion_verification]] · [[feedback_executor_completion_callback_mandatory_260518]](callback 은 보조·봇이 wait 하지는 마라로 조정)
