# task-84.1 작업 보고서

**작업명**: 대시보드 대규모 업데이트 (task-83.1 실패 → dev2팀 재배정)
**팀**: dev2-team
**팀장**: 오딘 (Odin)
**완료일**: 2026-03-02

---

## 작업 내용

### 1. History/최근작업 중복 제거
- TaskHistory 컴포넌트 타이틀 `최근 작업` → `작업 히스토리` 변경
- 15건 표시, 완료(✓)/진행중(▶) 상태 구분 유지
- `/api/recent-tasks` 엔드포인트 limit 10 → 15 동기화

### 2. get_member_status() 로직 개선 (server.py)
- **변경 전**: 팀에 running task가 있으면 모든 팀원 일괄 'working'
- **변경 후**: `is_lead` 파라미터 추가
  - 팀장 + running task 있음 → `working`
  - 팀원 + running task 있음 → `standby` (대기)
  - 팀에 작업 없음 → `idle` (유휴)
  - break 명시 → `break` (유지)
- `get_team_stats()`, `get_teams_info()` 내 모든 호출에 is_lead 인자 전달
- stats 딕셔너리에 `standby`, `idle` 카운터 추가
- team_id None 방어 코드 추가: `bool(team_id) and team_id.startswith("dev")`

### 3. 횡단조직(CR) 활동 표시 추가
- 새 `CenterDetailCard` 컴포넌트 추가 (색상 테마: design→pink, devops→blue, qc→amber, finance→slate)
- Section 2 이후에 '횡단조직 (Cross-functional)' 전용 섹션 신규 추가 (grid-cols-4)
- 4개 센터 전체 표시: 비너스(디자인), 야누스(DevOps), 마아트(QC), Finance(계획중)
- Finance센터: '계획중' 배지로 별도 표시
- Section 3에서 기존 횡단조직 카드 제거 → 2-col (기술부채 + CI)으로 변경

### 4. 개발3팀 표현 변경
- ModelBadge 개선: opus/sonnet/haiku/GLM/Gemini 키워드 기반 명확한 레이블
- TeamCard에 GLM 외주팀 감지 로직 추가 (`engine === 'z.ai'` or `model.includes('glm')`)
- GLM 팀원(아누비스/이시스/토트): 주황색 외주팀 그룹 박스로 별도 표시
- 라(Ra) 팀장: "Claude Sonnet · 검토/오케스트레이션" 레이블 추가
- 워크플로우 시각화: "OpenClaw MCP → GLM → 팀장 검토"

### 5. 업데이트 간격 변경
- `setInterval(fetchData, 3000)` → `setInterval(fetchData, 1000)` (3초 → 1초)
- **캐싱 추가**: `reload_all(max_age_seconds=1.0)` - 1초 TTL 캐시로 과도한 파일 I/O 방지
  - `_last_reload` 타임스탬프 기반, 1초 이내 재요청 시 파일 읽기 스킵

---

## 생성/수정 파일 목록

| 파일 | 변경 유형 | 내용 |
|------|----------|------|
| `/home/jay/workspace/dashboard/server.py` | 수정 | get_member_status 개선, 캐싱, limit 변경 |
| `/home/jay/workspace/dashboard/index.html` | 수정 | 5가지 UI/기능 변경 전체 |

---

## 테스트 결과

헤임달(Heimdall) QA 검증 결과: **전체 통과 ✅**

- server.py: 9개 항목 전체 ✅
- index.html: 10개 항목 전체 ✅
- 엣지 케이스: 3개 항목 전체 ✅ (team_id None 방어 코드 추가 완료)

### 실제 API 검증
```json
GET /api/stats → {
  "total": 20,
  "working": 2,    ← 팀장만 working (이전: 전원 working)
  "standby": 8,    ← 팀원 대기
  "idle": 10,      ← 작업 없는 팀
  "active": 10,
  "running_tasks": 4
}
```

---

## 버그 유무

**버그 없음**

헤임달이 발견한 minor 권고사항(team_id None 방어, engine optional 체이닝)은 모두 적용 완료.

---

## 비고

- task-83.1 실패 후 재배정된 작업. 기존 코드 분석 후 5개 항목 모두 신규 구현
- 기존 StatusBadge의 `waiting`/`available` 상태는 하위 호환성 유지 (삭제 안 함)
- `stats.waiting`은 standby 상태도 포함 집계하여 기존 대시보드 stat card 호환성 유지
- 서버 재시작 완료 (PID 확인, /api/status 응답 OK)
