# task-194.1 완료 보고서

## 작업: 대시보드 팀 진행 상태와 팀원 상태 불일치 분석 및 수정

## 문제 요약
- 대시보드에서 팀에 "진행 N건" 배지가 표시되지만, 해당 팀의 모든 팀원이 "유휴"로 표시
- 상단 요약의 "작업중 0"이 실제 진행중 작업과 모순

## 원인 분석

### 근본 원인 1 (Backend)
`server.py`의 `get_member_status()` 메서드(line 454)에서 member-status.json의 `"idle"` 상태가 truthy로 판단되어 running_tasks 체크 이전에 즉시 반환됨.

```python
# 수정 전 (버그)
elif explicit_status:        # "idle"도 truthy → 바로 return
    return explicit_status

# 수정 후
elif explicit_status and explicit_status != "idle":
    return explicit_status   # "idle"은 fall through하여 running_tasks 체크
```

### 근본 원인 2 (Frontend)
`index.html`의 `MemberRow` 컴포넌트에서 member-status.json의 raw "idle" 값이 서버 계산 결과를 덮어씀. 팀의 진행 작업 여부를 고려하지 않는 단순 우선순위 로직 사용.

## 수정 내용

### 1. Backend - server.py
- `get_member_status()`: "idle" 상태일 때 fall through하여 running_tasks 기반 상태 결정
- 영향: /api/stats, /api/teams 엔드포인트가 올바른 상태 반환

### 2. Frontend - index.html (4건)
- `MemberRow`: `hasRunningTasks` prop 추가, 팀 진행작업 기반 상태 결정 로직 구현
- `TeamCard`: MemberRow에 `hasRunningTasks={runningCount > 0}` 전달
- `running` 필터: stale task 제외 (`!t.is_stale`)

## 생성/수정 파일 목록
- `/home/jay/workspace/dashboard/server.py` (수정) - get_member_status() 로직 수정
- `/home/jay/workspace/dashboard/index.html` (수정) - MemberRow, TeamCard, running 필터 수정
- `/home/jay/workspace/teams/dev1/test_task_194_1.py` (생성) - 테스트 파일

## 테스트 결과
6 passed, 0 failed / 6 total

- test_get_member_status_idle_with_running_task: PASSED (팀장→working, 팀원→standby)
- test_get_member_status_idle_without_running_task: PASSED (idle 유지)
- test_get_member_status_break_preserved: PASSED (break 유지)
- test_get_member_status_working_preserved: PASSED (working 유지)
- test_get_team_stats_with_running_tasks: PASSED (running 2건, working 2건 일치)
- test_consistency_running_vs_member_status: PASSED (팀 일관성 확인)

## 버그 유무
- 발견된 추가 버그 없음

## 비고
- 프론트엔드 CenterCard/RedTeam 섹션의 유사 패턴도 존재하나, 해당 섹션은 현재 running task가 할당되지 않으므로 영향 없음. 추후 필요시 동일 패턴 적용 가능.
