# task-2536 IDLE_BASE_LABEL_PASS

- 작업: 신호등 sync fix D — 유휴(Nh) 라벨에 base 시각/task 명시 + spec 박제
- Track: traffic_light_fix_d / idle_base_explicit_label
- 일시: 2026-05-10
- 봇: dev2-team 오딘
- 회장 결정: 2026-05-10 — task-2532 audit fix D 채택

## 변경 요약 (4 expected_files)

1. `dashboard/data_loader.py` (MODIFY, +64)
   - `_compute_team_idle_base(team_id) -> Optional[Dict]` 신규.
   - task-timers.json `status="completed"` 엔트리 중 가장 최근 `end_time` 추출.
   - 반환: `{"task_id": "task-2470", "ts": "...", "idle_hours": N}` 또는 None.
   - `get_teams_info()` — running 0건 팀에 `idle_base` 부착 (logical/dedicated + dev sub_team 모두).
   - `_enrich_member_status()` — 팀에 running 0건이면 멤버에 `idle_base` 부착.
   - **시그널 병합 로직 0 수정** (task-2534 영역 격리 — 부착 only, 병합 X).

2. `dashboard/components/SystemView.js` (MODIFY, +78)
   - `/api/teams` 폴링 (60s) → `teamsForIdleBase` state.
   - `formatIdleBaseLabel(idleBase)` — `"85h since task-2470 13:59"` 포맷. base 누락 시 `"?"` graceful.
   - `idleTeamRows` (useMemo) — running 0 + idle_base 부착된 팀 목록.
   - 위스퍼 카드 `briefing_summary` 아래에 `유휴 base (since 마지막 완료 task)` 섹션 렌더.
   - **HistoryView/AutomationView/ArchiveView 직접 변경 0** (SystemView 단독).

3. `memory/specs/traffic-light-spec.md` (MODIFY, +50)
   - `## 8. 유휴 base 명시 규칙` 섹션 신규 박제 (8.1~8.7).
   - idle_base 정의 / 데이터 형식 / 라벨 표시 규칙 / stale 처리 / 구현 매핑 / 절대 금지.
   - 헤더 메타 갱신: 최종 수정 = 2026-05-10 (task-2536), 근거 = 회장 §결정 2026-05-10 fix D.

4. `tests/dashboard/test_idle_base_label_2536.py` (NEW, 5 회귀)
   - `test_compute_team_idle_base_returns_latest_completed` — 가장 최근 end_time 정확.
   - `test_get_teams_info_attaches_idle_base_to_idle_subteam` — dev sub_team에 idle_base 부착.
   - `test_compute_team_idle_base_returns_none_when_no_completed` — graceful None (signal 안 깨짐).
   - `test_enrich_member_status_attaches_idle_base_to_idle_member` — idle 멤버 idle_base.
   - `test_spec_idle_base_section_is_pinned` — spec §8 박제 일관성.
   - chat=6937032012 격리 어설션 포함.

## 회귀 결과

- 신규 5 회귀: **5/5 PASS** ✅
- `tests/dashboard/test_signal_pid_aggregation.py` (task-2422 기존 13 회귀): **13/13 PASS** (sync fix C 영역 무영향).
- `dashboard/tests/test_active_skills.py` (`_build_team_display_map`): 5 PASS / 1 SKIP / 1 FAIL — 1 FAIL은 task-2536 이전부터 main 브랜치에서 실패하는 fixture 의존 케이스(`task-2470 team_display`), 본 task 무관.
- 영역 격리: data_loader 시그널 병합(task-2534), cron upsert(task-2533), freshness(task-2535) **0 수정**. 회장 §명시 절대 금지 항목 0 위반.

## production smoke (참고)

```
dev1-team: idle_base={'task_id': 'task-2419', 'idle_hours': 164}
dev2-team: idle_base={'task_id': 'task-2422', 'idle_hours': 87}
dev4-team: idle_base={'task_id': 'task-2318', 'idle_hours': 256}
dev7-team: idle_base={'task_id': 'task-2414', 'idle_hours': 165}
content-team: idle_base=None  ← graceful (completed task 0건)
```

회장이 audit에서 본 "1팀:유휴(85h)" / "7팀:유휴(173h)" 사례에 대해 **base task와 since 시각**을 명시.

## Critical 7종

- 0건 (token raw 0 / chat=6937032012 격리 / owner_pat·admin override·force·rebase·manual `.done` 0).
