# task-2141: finish-task.sh member-status 복원 시 standby 누락 버그 수정

## ★ 프로젝트: `/home/jay/workspace/`

## 문제
finish-task.sh의 member-status.json 복원 코드(L277~304)에서:
1. `status == 'working'`만 체크 → **standby 팀원은 영원히 idle로 복원되지 않음**
2. `TASK_ID in task_desc` 조건이 있어서 → **task 설명이 없거나 TASK_ID와 다른 standby 팀원도 누락**

### 근본 원인
- 봇이 작업 시작 시: 팀장 → working, 팀원 → standby (data_loader.py L842-843 enrichment)
- 봇이 작업 완료 시: finish-task.sh가 working만 idle로 복원 → **standby 팀원 잔존**
- 4팀은 정상인데 6팀이 standby 잔존 → finish-task.sh가 standby를 처리 못 해서

## 수정 (1건, surgical)

### 파일: `/home/jay/workspace/scripts/finish-task.sh` L288

**현재 코드 (L288):**
```python
        if info.get('status') == 'working':
```

**수정:**
```python
        if info.get('status') in ('working', 'standby'):
```

이것 하나만 수정하면 됩니다. working과 standby 모두 → idle로 복원.

### L290 TASK_ID 매칭 조건도 완화

**현재 코드 (L290):**
```python
            if '$TASK_ID' in task_desc or not task_desc:
```

**수정:**
```python
            if '$TASK_ID' in task_desc or not task_desc or info.get('status') == 'standby':
```

standby 팀원은 task 설명에 TASK_ID가 없을 수 있으므로 (팀원은 보통 task 없이 standby 상태), standby면 무조건 idle 복원.

## 전체 수정 후 코드 (L277~304)
```bash
# 2.7. 팀원 전원 idle 복원 (member-status.json)
python3 -c "
import json
from datetime import datetime, timezone
status_file = '$WORKSPACE/memory/events/member-status.json'
try:
    with open(status_file) as f:
        data = json.load(f)
    now = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
    changed = False
    for name, info in data.get('members', {}).items():
        if info.get('status') in ('working', 'standby'):
            task_desc = info.get('task', '') or ''
            if '\$TASK_ID' in task_desc or not task_desc or info.get('status') == 'standby':
                info['status'] = 'idle'
                info['since'] = now
                info['task'] = None
                changed = True
    if changed:
        data['updated_at'] = now
        with open(status_file, 'w') as f:
            json.dump(data, f, indent=2, ensure_ascii=False)
        print('[INFO] member-status.json: working/standby → idle 복원 완료')
    else:
        print('[INFO] member-status.json: 복원 대상 없음')
except Exception as e:
    print(f'[WARN] member-status idle 복원 실패: {e}')
" 2>&1 || echo "[WARN] member-status idle 복원 스킵"
```

## ★ 먼저 읽을 파일
- `/home/jay/workspace/scripts/finish-task.sh` — L277~304 (member-status 복원 블록)

## 검증 시나리오

### 시나리오 1: standby 복원 테스트
1. member-status.json에 임의로 2명을 standby로 설정
2. finish-task.sh 실행 (TASK_ID=test-standby)
3. 결과: 전원 idle 복원됨

### 시나리오 2: working 복원 (기존 동작 유지)
1. member-status.json에 1명을 working(task="test-task") 설정
2. finish-task.sh 실행 (TASK_ID=test-task)
3. 결과: working → idle 복원됨

### 시나리오 3: 관계없는 팀 영향 없음
1. member-status.json에 1명을 working(task="OTHER-TASK") 설정
2. finish-task.sh 실행 (TASK_ID=test-task)
3. 결과: OTHER-TASK의 working은 유지됨 (건드리지 않음)

### 시나리오 4: print 메시지 변경 확인
- "[INFO] member-status.json: working/standby → idle 복원 완료" 메시지 출력

## 완료 시그니처
- L288: `in ('working', 'standby')` 조건
- L290: standby면 무조건 복원
- print 메시지에 "working/standby" 포함
- 기존 working 복원 동작 유지

## 레벨
- normal

## 프로젝트
- dev-system
