# task-2559 checklist

## Bootstrap
- [x] worktree `.worktrees/task-2559-dev3` 생성 from origin/main
- [x] plan.md / context-notes.md / checklist.md 박제

## Implementation
- [ ] `dashboard/bot_process_collector.py` 신규
  - [ ] Layer 1 — `get_active_lead_bots()`
  - [ ] Layer 2 — `get_subagent_children(lead_pid)`
  - [ ] `_parse_schedule_log(schedule_id)`
  - [ ] `_resolve_bot_identity(cwd, schedule_id, bot_verifier)`
  - [ ] cwd 정규식 (cron + dispatch)
- [ ] `dashboard/data_loader.py` 수정
  - [ ] `get_member_status()` Layer 1+2 결합
  - [ ] hybrid mode (봇 프로세스 primary, task-timers.json 보조)
  - [ ] borrowed_tasks 호환 유지
- [ ] `dashboard/routes_get.py` 또는 `server.py` 확장
  - [ ] 기존 엔드포인트 응답 payload에 source 반영 (필드 추가)

## Tests
- [ ] `dashboard/tests/test_bot_process_collector.py` (8 시나리오)
- [ ] `dashboard/tests/test_traffic_light_layer_signals.py` (spec 2.1~2.4 + hybrid)
- [ ] 5 fixtures (cron / dispatch / subagent / lead_terminated / borrowed)

## Verification
- [ ] pytest dashboard/tests/test_bot_process_collector.py PASS
- [ ] pytest dashboard/tests/test_traffic_light_layer_signals.py PASS
- [ ] pytest 기존 dashboard suite regression PASS
- [ ] static check (pyflakes / py_compile)
- [ ] effective diff == expected_files (dispatch_decision.json authoritative)
- [ ] forbidden path 0 (PR #98~#111, anu_v2, spec §1~§8 등)

## Finalize
- [ ] dispatch_decision.json 박제 (`memory/events/task-2559.dispatch-decision.json`)
- [ ] 보고서 `memory/reports/task-2559.md` 박제
- [ ] PR 생성 (BOT_GITHUB_TOKEN identity)
- [ ] CI 11 checks SUCCESS 어셀션
- [ ] Gemini unresolved 0 어셀션 (FIRST_MISSING 시 owner_trigger_only 자동)
- [ ] BOT squash merge (admin override 0)
- [ ] post-merge smoke + reconcile evidence
- [ ] 라이브 검증 (cron 봇 발사 → 작업중 표시 → 종료 후 유휴 전환)
- [ ] lifecycle markers (`task-2559.dispatch-attempt.json`, `task-2559.merge-result.json`)
