# task-1841 완료 보고서: 조직뷰 신호등 — 논리적/복합팀 봇 차용 시 표시 복원

## SCQA

**S**: 대시보드 조직뷰에서 dev팀 봇 신호등, 팀 카드, 인원 현황 바를 통해 조직 내 봇 가동 상태를 실시간 모니터링하고 있다.

**C**: 논리적 팀(marketing, content 등) 또는 복합팀이 dev팀 봇을 동적으로 차용하여 작업할 때, 대시보드에 아무 표시도 안 됨. 원인: 프론트엔드에서 `runningCount`를 `team_id === team.sub_team_id`로만 필터링하여 논리적 팀(team_id='marketing')의 running task가 dev팀 카드에 반영되지 않음.

**Q**: 논리적/복합팀이 dev팀 봇을 차용할 때 대시보드에서 봇 상태, 팀 카드, 인원 현황을 정확히 표시할 수 있는가?

**A**: 백엔드(`_enrich_bot_activity`)에 `borrowed_tasks` 필드를 추가하고, 프론트엔드에서 이를 dev팀 카드와 인원 현황 바에 병합하여 3가지 요구사항 모두 복원 완료. 10/10 테스트 통과, pyright 에러 0건.

---

## 수정 내용

### 백엔드 (data_loader.py)
- `_enrich_bot_activity()` 함수에 `borrowed_tasks` 필드 추가 (line 757-790)
- 논리적 팀이 봇 차용 시 task 정보(task_id, team_id, description, start_time, bot) 기록
- 동일 봇을 복수 논리팀이 동시 차용 시 `logical_team_using`에 `"+"` 결합으로 모든 팀 표시

### 프론트엔드 (App.js)
- 인원 현황 바 (line 267-269): `borrowedTasks.length > 0` 반영하여 차용 중 멤버도 "작업중/대기"로 카운트
- dev팀 카드 (line 762-778): `ownTasks + borrowedTasks`를 병합한 `allTasks`를 `runningCount`/`runningTasks`로 전달

### 프론트엔드 (utils.js)
- TeamCard 내 차용 task에 보라색 도트(`bg-violet-400`)로 시각 구분 (line 203-206)

### 테스트 (test_server.py)
- `test_borrowed_tasks_populated_for_logical_team`: 단일 논리팀 차용 시 borrowed_tasks 검증
- `test_borrowed_tasks_populated_for_composite_team`: composite 팀 차용 시 borrowed_tasks 검증
- `test_no_borrowed_tasks_for_dev_team`: dev팀 자체 작업 시 borrowed_tasks 없음 검증
- `test_multiple_logical_teams_same_bot_combines_labels`: 복수 논리팀 동시 차용 시 logical_team_using 결합 검증

---

## 산출물 파일

- `/home/jay/workspace/dashboard/data_loader.py`
- `/home/jay/workspace/dashboard/components/App.js`
- `/home/jay/workspace/dashboard/components/utils.js`
- `/home/jay/workspace/dashboard/test_server.py`

---

## 발견 이슈 및 해결

### 자체 해결 (4건)
1. **dev팀 카드 runningCount 미반영** — borrowed_tasks를 ownTasks와 병합하여 allTasks로 전달
2. **인원 현황 바 카운트 누락** — borrowedTasks.length > 0 조건 추가
3. **동일 봇 복수 논리팀 차용 시 logical_team_using 덮어쓰기** — 기존 값에 "+" 결합 방식으로 수정 (마아트 검증에서 발견)
4. **isBorrowed 판별 하드코딩** — `t.team_id.startsWith('dev')` → `t.bot` 존재 여부로 변경 (마아트 검증에서 발견)

### 범위 외 미해결 (1건)
1. **test_fixed_project_order 테스트 실패** — 범위 외 사유: 프로젝트 순서 변경(BlogAuto vs Dashboard)에 의한 기존 이슈. 본 작업과 무관.

---

## 검증 시나리오 확인

1. 논리적 팀(content)에 작업 위임 → bot-b 배정:
   - 1팀 카드: bot-b 신호등 "작업중" ✅ (has_running_tasks=True)
   - 1팀 카드: "{팀명} 작업중" 배지 ✅ (logical_team_using)
   - content팀 카드: 우상단 "1팀봇 사용" 배지 ✅ (usedBots)
2. 작업 완료 후 → borrowed_tasks 비워짐 → 유휴 복귀 ✅
3. dev팀 자체 작업 시 → borrowed_tasks 없음, 기존과 동일 ✅

---

## 마아트 독립 검증

- **판정**: NEEDS WORK → 수정 후 PASS
- 발견 이슈 4건 중 Critical 1건, High 1건을 즉시 수정
- Low 1건(인원현황바 리드/멤버 카운팅 비대칭)은 기존 설계 의도로 유지

---

## QC 증거

- pytest: TestEnrichBotActivity 10/10 PASS
- pyright: 0 errors, 0 warnings (check-files 대상)
- 구문 검증: data_loader.py OK, server.py OK
- ⚠️ 기존 테스트 실패 1건 (본 작업 범위 외): test_fixed_project_order

---

## 모델 사용 기록

- 토르(백엔드): sonnet — data_loader.py borrowed_tasks 필드 추가
- 프레이야(프론트엔드): sonnet — App.js, utils.js 차용 상태 표시 로직
- 마아트(QC): sonnet — 독립 검증 수행, Critical/High 이슈 발견

## 머지 판단

- **머지 필요**: No (git repo 없음, 직접 수정)
- **브랜치**: N/A
- **워크트리 경로**: N/A
- **머지 의견**: dashboard 프로젝트에 .git 미존재. 직접 파일 수정 완료.

## 세션 통계
- 총 도구 호출: 17회

### 수정 파일 목록
- bash_cmd: 7회 (Bash)
- /home/jay/workspace/dashboard/components/App.js: 2회 (Edit)
- /home/jay/workspace/dashboard/components/utils.js: 2회 (Edit)
- /home/jay/workspace/dashboard/data_loader.py: 2회 (Edit)
- /home/jay/workspace/dashboard/test_server.py: 2회 (Edit)
- /home/jay/workspace/memory/reports/task-1841.md: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1841.md: 1회 (dispatch)

### 도구 사용 현황
- Edit: 8회
- Bash: 7회
- Write: 1회
- dispatch: 1회

