# task-2054: subagent 작업 완료 후 member-status idle 자동 복원

## 문제
팀장 봇이 팀원(subagent)에게 작업을 위임할 때 `memory/events/member-status.json`에 `"working"` 상태로 기록하지만,
subagent 작업 완료 후 `"idle"`로 복원하지 않아 대시보드에 영구적으로 "작업중"으로 표시됨.

## 현재 흐름 (문제)
1. 팀장이 팀원에게 위임 → member-status.json에 `{name: {status: "working", task: "..."}}`
2. 팀원(subagent) 작업 완료
3. **member-status.json 미업데이트** → "working" 상태 잔존
4. 대시보드에 영구적으로 "작업중" 표시

## 수정 흐름 (목표)
1. 팀장이 팀원에게 위임 → member-status.json에 working 기록 (기존 유지)
2. 팀원(subagent) 작업 완료
3. **팀장이 subagent 결과 수신 후 member-status.json을 idle로 업데이트**
4. 대시보드에 정상적으로 "유휴" 표시

## ★ 먼저 읽을 파일
- `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` — 팀장 워크플로우, subagent 위임/완료 패턴 찾기
- `/home/jay/workspace/prompts/team_prompts.py` — 팀장 프롬프트 생성 로직, member-status 업데이트 코드 찾기
- `/home/jay/workspace/memory/events/member-status.json` — 현재 데이터 구조 확인

## 수정 내용

### 1. member-status idle 복원 유틸 함수
이미 member-status.json에 working을 기록하는 코드가 있을 것임. 그 근처에 idle 복원 함수 추가:
```python
def set_member_idle(member_name: str):
    """subagent 작업 완료 후 idle로 복원"""
    # member-status.json 읽기 → status: idle, task: null, since: now → 쓰기
```

### 2. DIRECT-WORKFLOW.md에 idle 복원 단계 추가
팀장이 subagent 결과를 수신한 후 (Agent tool 반환 후) 반드시:
```bash
python3 -c "
import json
from datetime import datetime, timezone
with open('memory/events/member-status.json') as f:
    data = json.load(f)
data['members']['{{member_name}}'] = {'status': 'idle', 'since': datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'), 'task': None}
with open('memory/events/member-status.json', 'w') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
"
```

### 3. finish-task.sh에 팀원 전원 idle 복원 추가
finish-task.sh의 .done 생성 직전에 해당 팀의 모든 멤버를 idle로 복원:
```bash
# 팀원 전원 idle 복원
python3 -c "
import json
from datetime import datetime, timezone
status_file = '$WORKSPACE/memory/events/member-status.json'
with open(status_file) as f:
    data = json.load(f)
now = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
for name, info in data.get('members', {}).items():
    if info.get('status') == 'working':
        # task가 현재 task_id를 포함하면 idle로 복원
        task_desc = info.get('task', '') or ''
        if '$TASK_ID' in task_desc or not task_desc:
            info['status'] = 'idle'
            info['since'] = now
            info['task'] = None
with open(status_file, 'w') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
" 2>/dev/null || true
```

## 완료 시그니처
- [grep] `idle.*restore\|set_member_idle\|status.*idle` @ `scripts/finish-task.sh`
- [grep] `member.status.*idle\|idle.*복원` @ `prompts/DIRECT-WORKFLOW.md`

## 검증 시나리오
1. finish-task.sh에 팀원 idle 복원 코드 존재
2. 기존 pytest 통과
3. member-status.json에 working 상태 팀원이 finish-task.sh 실행 후 idle로 전환됨

## 레벨
- normal

## 프로젝트
- dev-system
