# Agent 미팅: .done 프로토콜 + 위스퍼 완료 감지 근본 재설계

**날짜**: 2026-03-16
**소집 이유**: .done 프로토콜 3번 수정(607.1, 609.1, 613.1) 후에도 실패. 아누가 팀 작업 완료를 감지 못함.
**참여 페르소나**: 불칸(백엔드), 헤임달(QA), 로키(레드팀), 야누스(DevOps)
**미팅 모드**: hybrid
**토론 깊이**: thorough
**총 사이클 수**: 2

---

## Cycle 1 (Independent)

### 아누 분석
3번 수정 모두 같은 레이어(파일 조작)에서 같은 방향(상태 추가)으로 수정. 근본 원인인 "크로스 세션 단절"을 해결하지 않음.
- 증거: task-614.1 done-protocol.log — 12:16 .done.notified → 12:17 .done.clear archive. 아누(이 세션)는 전혀 인지 못함.
- 대시보드 녹색 표시등은 Pull 모델(SSE + mtime 감시)로 잘 동작 중.

### 페르소나 의견

**불칸**: task-completions.json (단일 JSON) + check-completions.py (아누 Pull). 파일 삭제/이동 제거, 필드 상태만 변경. done-bridge로 기존 .done 하위호환.

**헤임달**: Push 모델이 근본 실패. "notification sent ≠ acknowledged". Pull(user-prompt-submit.sh)이 이미 존재하는데 .done 파일이 너무 빨리 정리되어 Pull이 빈 손으로 돌아감. .done 보존이 핵심.

**로키**: 파일시스템은 STATE이지 EVENT가 아님. 파일을 메시지 큐로 쓰면서 큐의 기본 보장(원자성, 소비자 등록, 재전송)을 안 구현. 가장 단순한 해법: 외부 프로세스 전부 삭제, 아누가 매번 직접 확인.

**야누스**: .done → .done.processing rename 누락이 현재 zombie .done 반복 트리거 원인. inotifywait로 실시간 감지 가능. SQLite로 상태 추적 권장.

### 합의
- Push 모델(cokacdir --cron 새 세션) 폐기
- Pull 모델(whisper 스캔) 단일화
- .done 파일 아누 ack까지 보존
- 파일 확장자 상태 머신(.done/.done.notified/.done.clear) 폐기 → .done/.done.acked 2단계

### 미해결 항목
- 체인 자율 체이닝이 Pull 전환으로 끊기지 않는가?
- critical 긴급 작업의 실시간성 보장?

---

## Cycle 2 (DA)

### Devil's Advocate
**지정**: 헤임달

1. **실패 시나리오**: 체인 자율 체이닝과 Pull 단일화가 양립 불가. Phase 완료 → 아누 세션 없음 → 다음 Phase 위임 불가 → 체인 단절.
2. **후회 이유**: 조직 확장 시 .done 20개 누적 → whisper가 밀린 보고 처리로 컨텍스트 소진. critical/normal 분리 없이 같은 Pull 파이프라인 사용은 설계 실수.
3. **더 단순한 대안**: Push를 전면 폐기하지 말고 critical만 유지하는 하이브리드.

### 반박
아누 분석: 코드 확인 결과, **체인 중간 Phase는 이미 아누 없이 동작**. notify-completion.py → chain_manager.py next → dispatch.py 직접 호출. 아누 세션 깨우기는 체인 마지막 Phase/독립 작업에서만 발생. 따라서 체인 체이닝은 Pull 전환과 무관하게 정상 작동.

stale 감지(30분 이상 미처리 .done → 텔레그램 에스컬레이션)로 critical 작업 지연 방지. 중복 보고 방지는 .done → .done.acked atomic rename으로 해결.

### 판정
DA 우려 중 "체인 단절"은 코드 근거로 반박됨 (체인 중간은 아누 미개입). "critical 레벨 분리"는 타당 → stale 에스컬레이션으로 대응. 반박 수용, 설계 보완.

---

## 최종 합의 사항

1. **Push(cokacdir --cron 새 아누 세션) 폐기**: 체인 마지막/독립 작업에서 아누 세션 깨우기 제거
2. **Pull 단일화**: whisper-compile.py가 매 대화 시작 시 *.done 스캔 → 아누 브리핑에 포함
3. **.done 보존**: 아누가 보고 완료 후 .done → .done.acked rename. 그 전까지 절대 삭제/이동 금지
4. **체인 중간 Phase**: 기존 메커니즘 유지 (notify-completion → chain_manager → dispatch.py 직접)
5. **텔레그램 텍스트 알림**: 팀 완료 시 텔레그램 메시지만 전송 (참고용, 아누 세션 깨우기 없음)
6. **stale 에스컬레이션**: done-watcher가 30분 이상 미처리 .done → 텔레그램 경보
7. **중간 상태 파일 폐기**: .done.notified, .done.clear, completion-handler-instructions.md 폐기
8. **상태 2단계**: .done (미처리) / .done.acked (처리 완료)

## 수정 대상 파일
1. `notify-completion.py` — 체인 중간은 그대로, 나머지는 텔레그램 텍스트만 + .done 파일 보존
2. `whisper-compile.py` — .done 스캔 → 브리핑 포함 (현재도 있지만 파일 부재로 0건)
3. `done-watcher.sh` — 정리 역할 제거, stale 감지 + 에스컬레이션만
4. `user-prompt-submit.sh` — whisper 결과에 .done 정보 확인
5. 팀 프롬프트(DIRECT-WORKFLOW.md 등) — finish-task.sh가 .done 생성하는 부분은 유지

## 폐기 대상
- `completion-handler-instructions.md`
- `.done.notified` / `.done.clear` 관련 로직 전체
- `cokacdir --cron`으로 아누 세션 깨우는 코드 경로

## 다음 단계
- 이 합의를 기반으로 task dispatch 위임
- Phase 분리: Phase 1 (notify-completion + done-watcher 수정) → Phase 2 (whisper 강화 + 테스트)
