# task-85.1 조사 보고서: task-75.1 봇D 수신 실패 원인 분석

**조사자**: 라 (Ra) - 개발3팀장 (직접 수행, GLM 외주 없음)
**조사일시**: 2026-03-02 15:20~
**대상 사건**: task-75.1이 cron으로 봇D에 전달되었으나 처리되지 않은 건

---

## 1. 조사 결과 요약

**근본 원인**: cokacdir가 workspace 디렉토리를 생성했으나 **Claude Code 세션이 실행되지 않음** (빈 workspace). cron은 정상 소비되었고, dispatch 로그도 정상 기록되었으나, 실제 봇 세션이 스폰되지 않았다.

**상태**: task-75.1은 `reserved` 상태에서 영구 정지. start, end 모두 미기록.

---

## 2. 조사 항목별 상세

### 2-1. 봇D가 task-75.1 메시지를 수신한 적이 있는가?

**결론: 수신하지 못함.**

- `task-timers.json`에서 task-75.1 상태: `"status": "reserved"`, `"reserved_at": "2026-03-02T14:42:08.280814"`
- team_id, description, start_time, end_time 모두 미기록 → 봇D 세션이 시작된 적 없음
- `events/` 디렉토리에 task-75.1 관련 이벤트 파일 없음 (task-73.1.done, task-76.1.done.clear 등은 존재)
- 봇D가 실행했다면 반드시 `task-timer.py start`를 호출하여 status가 `running`으로 변경되어야 하나, 이 호출이 없었음

### 2-2. 최근 처리한 마지막 작업은?

**task-72.1 이후 → task-73.1 (성공 완료)**

| 작업 | 팀 | 시작 | 종료 | 상태 |
|---|---|---|---|---|
| task-72.1 | dev3-team | 14:23:41 | 14:29:19 | completed (5분 38초) |
| task-73.1 | dev3-team | 14:41:38 | 15:17:40 | completed (36분 1초) |
| task-75.1 | dev3-team | - | - | **reserved (영구 정지)** |

- task-72.1: 대시보드 UX/UI 전면 리뷰 및 개선 → 정상 완료
- task-73.1: 대시보드 대규모 업데이트 (중복제거/팀원상태/횡단조직/3팀표현/1초간격) → 정상 완료
- task-75.1: 동일한 "대시보드 대규모 업데이트" 작업 → **실패**

### 2-3. /home/jay/workspace/teams/dev3/ 디렉토리에 task-75.1 관련 파일이 있는가?

**파일 없음.** dev3 디렉토리에는 AGENTS.md, CLAUDE.md 등 팀 설정 파일만 존재. task-75.1 작업 결과물 없음.

단, `/home/jay/workspace/memory/tasks/task-75.1.md`에 스펙 파일이 존재하나, **내용이 task-73.1의 스펙과 동일** (첫 줄: "대시보드 대규모 업데이트 (task-73.1)"). 이는 dispatch 시점에 동일 작업을 이중 위임한 흔적.

### 2-4. cokacdir --cron으로 봇D에 전달될 때 경로

**dispatch 흐름 (정상 케이스)**:
1. 아누 dispatch.py → `cokacdir --cron "<prompt>" --at "1m" --chat ... --once` 실행
2. cokacdir가 cron을 등록하고, 1분 후 Telegram 메시지로 봇D에 전달
3. cokacdir가 새 workspace 디렉토리 생성 (예: `/home/jay/.cokacdir/workspace/XXXXXXXX/`)
4. Claude Code 세션이 해당 workspace에서 실행
5. 봇D가 프롬프트를 수신하고 작업 시작

**task-75.1의 경우 (실패)**:
1. dispatch 14:42:08에 실행 → app.log에 "위임 완료: task-75.1 → 라 (Ra)" 기록 ✓
2. cron 등록 및 소비 ✓ (현재 cron-list: 빈 배열)
3. workspace 생성: 14:42에 두 개 생성 (873F9E71, FBBC4E1A) ✓
4. **Claude Code 세션 실행: ✗ 실패** → 두 workspace 모두 **완전히 비어있음** (파일 0개)
5. 봇D 프롬프트 수신: ✗ 미수신

### 2-5. 로그 분석 (14:42 전후)

**app.log 14:42 시점 주요 기록**:
```
[14:41:38] 태스크 시작: task-73.1 (team=dev3-team)    ← 이미 실행 중
[14:41:39] 태스크 시작: task-74.1 (team=dev1-team)
[14:42:08] WARNING: task ID 파싱 실패 (multibot-setup, test-botd, botd-openclaw-test 등 7건)
[14:42:08] 위임 시작: team=dev3-team, task_id=task-75.1
[14:42:08] 위임 완료: task-75.1 → 라 (Ra)
[14:42:25] 위임 시작: team=dev1-team, task_id=task-76.1  ← task-76.1은 정상 처리
```

**주목할 점**: task-75.1 dispatch 직전에 task ID 파싱 실패 WARNING이 7건 발생. 이는 task-timers.json에 비표준 키(multibot-setup, test-botd 등)가 존재하여 발생한 경고이며, 직접적 원인은 아닐 수 있으나 dispatch 처리 중 영향을 줬을 가능성 있음.

---

## 3. 근본 원인 분석

### 핵심 원인: cokacdir 세션 스폰 실패

14:42에 생성된 두 workspace(873F9E71, FBBC4E1A) 중 하나가 task-75.1용이나, 해당 workspace에 Claude Code 프로세스가 정상 기동되지 않았다. 결과적으로:
- cron 메시지는 소비됨 (일회성이므로 재전송 불가)
- workspace 디렉토리만 생성되고 내부 파일 없음 (CLAUDE.md, .session_info 등 미생성)
- task-timer.py start가 호출되지 않아 `reserved` 상태 영구 유지

### 기여 요인

1. **동시 실행 경합**: task-73.1이 14:41:38에 이미 dev3-team으로 실행 중인 상태에서, 30초 후 task-75.1이 동일 팀으로 dispatch됨. cokacdir 또는 Telegram 봇 레벨에서 동시 세션 생성 시 경합 발생 가능.

2. **이중 위임**: task-73.1과 task-75.1은 **동일한 작업** (대시보드 대규모 업데이트). dispatch 시스템이 같은 작업에 대해 두 개의 task ID를 생성하여 동일 팀에 할당함. task-73.1이 이미 작업 중이므로 task-75.1은 사실상 불필요한 중복이었다.

3. **빈 workspace 2개**: 14:42에 빈 workspace가 2개나 생성된 것은 cokacdir 레벨에서 세션 생성 시도가 있었으나 Claude Code API 호출이 실패했음을 시사. (timeout, rate limit, 또는 동시 요청 충돌 가능)

---

## 4. 영향 범위

- task-75.1은 task-73.1과 동일 작업이었으므로, **실질적인 작업 누락은 없음**
- task-73.1이 15:17에 정상 완료됨으로써 해당 작업은 이미 처리됨
- 아누가 15:17에 3팀 실패를 감지하고 task-83.1/84.1로 2팀에 재배정했으나, 이는 task-73.1 완료를 인지하기 전의 조치였음

---

## 5. 재발 방지 제안

1. **dispatch 전 팀 가용성 확인**: dispatch 시점에 해당 팀에 이미 running 작업이 있는지 task-timers.json을 확인하고, 있으면 대기하거나 다른 팀에 배정
2. **이중 위임 방지**: 동일 작업에 대해 여러 task ID가 생성되지 않도록 중복 검사 로직 추가
3. **reserved 상태 타임아웃**: reserved 후 일정 시간(예: 5분) 내 start가 호출되지 않으면 알림 발생 + 자동 재배정
4. **빈 workspace 모니터링**: workspace 생성 후 일정 시간 내 파일이 없으면 세션 스폰 실패로 간주하고 재시도

---

## 6. 결론

task-75.1 수신 실패의 직접 원인은 **cokacdir 세션 스폰 실패** (workspace 생성되었으나 Claude Code 미실행)이다. 기여 요인으로 task-73.1과의 **동시 실행 경합** 및 **이중 위임**이 있다. task-73.1이 동일 작업을 이미 정상 완료했으므로 실질적 작업 손실은 없다.

---

**보고자**: 라 (Ra) 개발3팀장
**보고일시**: 2026-03-02
