# 대시보드 조직뷰 — 팀원 실시간 작업 상태 추적

## 문제
봇이 팀원(프레이야/토르 등)에게 작업을 위임하여 실제 코드 수정이 진행 중인데도, 대시보드 조직뷰에서는 해당 팀이 "대기" 상태로 표시됨.

## 현재 구조
- `bot-activity.json`: 봇 프로세스의 status (processing/idle) 기록
- `task-timers.json`: dispatch.py가 task start/end 기록
- `running_tasks_by_team` API: task-timers에서 running 상태인 task 추출
- 프론트엔드: `has_running_tasks` 기반으로 working/standby 판정

## 원인 분석
1. dispatch.py가 task-timer start를 호출하면 → running_tasks에 등록 → "작업중" 표시
2. 하지만 봇 프로세스가 실제로 작업하는 시간(cokacdir 세션)은 bot-activity.json의 status로 추적
3. **bot-activity.json 업데이트가 제대로 안 되거나, task-timer와 bot-activity가 불일치**하면 "대기"로 표시

## 확인 사항

### 1. task-timer 상태 확인
- 파일: `/home/jay/workspace/memory/task-timers.json`
- task-1815.1 실행 중에 해당 task가 "running" 상태였는지 확인
- dispatch.py의 timer start가 정상 호출되었는지

### 2. bot-activity.json 확인
- 파일: `/home/jay/workspace/dashboard/data/bot-activity.json` 또는 유사 경로
- 봇이 cokacdir 세션에서 작업 중일 때 status가 "processing"으로 변경되는지
- 세션 종료 시 "idle"로 변경되는지

### 3. running_tasks_by_team API 확인
- `/api/running-tasks` 또는 `/api/org` 응답에서 running_tasks_by_team 확인
- task-timer가 running인데 API에서 안 보이면 → 서버 로직 문제

### 4. 프론트엔드 MemberRow 확인
- `/home/jay/workspace/dashboard/components/utils.js` Line 130-173
- `hasRunningTasks` 판정 로직
- App.js Line 228-247: running_tasks_by_team에서 추출

## 수정 방향

### 방안 A: task-timer 기반 강화 (권장)
- dispatch.py가 timer start할 때 bot-activity.json도 동시 업데이트
- 또는 /api/org에서 task-timers.json의 running tasks를 직접 확인하여 팀 상태 결정
- task-timer에 running task가 있으면 해당 팀 = "작업중"

### 방안 B: cokacdir 세션 상태 연동
- cokacdir ai_trace.log에서 봇 세션 활성 여부 감지
- 세션이 활성이면 해당 봇 = "processing"

### 방안 C: heartbeat 기반
- 봇이 작업 중 주기적으로 heartbeat 파일 갱신
- 대시보드가 heartbeat 파일의 mtime으로 활성 판단

**권장**: 방안 A가 가장 단순하고 확실. 이미 task-timer 인프라가 있으므로 이걸 활용.

## 검증 시나리오
1. **작업 위임 시**: dispatch.py로 팀에 작업 위임 → 조직뷰에서 해당 팀 "작업중" 표시 → 성공
2. **작업 완료 시**: .done 파일 생성 + timer end → 조직뷰에서 "대기"로 변경 → 성공
3. **팀원 표시**: 팀 카드에서 프레이야/토르 등 팀원이 "working" 배지 표시 → 성공
4. **동시 작업**: 2개 팀 동시 작업 → 각각 독립적으로 상태 표시 → 성공
5. **비정상 종료**: 봇이 죽어도 task-timer가 running 상태면 "작업중" 유지 (와치독이 처리)