# task-2122: 대시보드 시스템뷰 — 프로세스 상세 정보 표시

## SCQA

**S**: 대시보드 시스템뷰에서 프로세스 목록(Top 15)이 PID, 이름, CPU/MEM 사용률만 표시하고 있다.

**C**: claude, python3, cokacdir 등 프로세스가 **무엇을 하고 있는지** 알 수 없어, 리소스 사용의 원인 파악이 어렵다.

**Q**: 프로세스 목록에 작업 내용(detail)을 추가하여 각 프로세스의 역할을 한눈에 파악할 수 있는가?

**A**: 백엔드(routes_get.py + server.py SSE)에 detail 필드를 추가하고, 프론트엔드(SystemView.js)에서 프로세스명 아래에 작은 글씨로 표시하여 구현 완료. claude 프로세스는 cwd의 `.task_id` 파일에서 task ID를 읽어 running 태스크와 매핑, python3은 실행 스크립트 경로, cokacdir은 "봇 서버"로 표시.

## 수정 파일

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| dashboard/routes_get.py:1415-1505 | handle_get_server_stats에 running_tasks 로드 + detail 필드 생성 로직 추가 | grep "task_id_from_cwd" OK (6건) | verified |
| dashboard/server.py:583-660 | SSE server-stats 이벤트에 detail 필드 추가 (sse_running_tasks + cwd 기반 매핑) | grep "sse_running_tasks" OK (4건) | verified |
| dashboard/components/SystemView.js:265-270 | 프로세스명 아래 proc.detail 조건부 표시 (10px 회색 텍스트) | grep "proc.detail" OK (2건) | verified |

## 상세 구현

### 백엔드 (routes_get.py)
- task-timers.json에서 `status == "running"` 태스크를 task_id 키로 매핑
- claude 프로세스: `proc.cwd()/.task_id` 파일 → task_id → running_tasks 매핑 → `[task-2122] 설명` 형태
- python3 프로세스: cmdline에서 스크립트 경로 추출, `/home/jay/workspace/` 경로 단축
- cokacdir: "봇 서버" 고정 표시
- 기타: cmdline 80자 단축

### SSE (server.py)
- process_counter >= 10 사이클마다 프로세스 데이터 갱신 시 동일한 detail 로직 적용
- API endpoint와 SSE 양쪽 모두 detail 필드 포함

### 프론트엔드 (SystemView.js)
- 프로세스명 `<span>` → `<div class="truncate">` 래퍼로 변경
- `proc.detail`이 있으면 아래에 `text-[10px] text-slate-400` 서브텍스트 표시
- `title` 속성으로 hover 시 전체 내용 확인 가능

## L1 스모크테스트 결과
- 서버 재시작: 성공 (PID 743284)
- API 응답 확인: curl `/api/server-stats` → 200 OK, 15개 프로세스 각각 detail 필드 포함
  - claude: `[task-2122] 대시보드 시스템뷰 — 프로세스 상세 정보 표시`
  - python3: `dashboard/server.py`
  - cokacdir: `봇 서버`
- 스크린샷: `/home/jay/workspace/memory/reports/task-2122-screenshot.png`
  - python3 아래 "dashboard/server.py" 표시 확인
  - claude 아래 "[task-2122] 대시보드 시스템뷰..." 표시 확인

## 발견 이슈 및 해결

1. **bot ID 매핑 실패 (발견 → 해결)**: 초기 설계에서 claude cmdline의 `--append-system-prompt-file`에서 `/bots/bot-a/` 패턴으로 봇 ID를 추출하려 했으나, 실제 경로는 `/home/jay/.cokacdir/system_prompt_<hash>_<pid>` 형태였음. → cwd의 `.task_id` 파일 기반 매핑으로 변경하여 정확한 태스크 매핑 달성.

2. **SSE detail 누락 (발견 → 해결)**: `/api/server-stats` API endpoint에만 detail을 추가하고 SSE 이벤트의 인라인 프로세스 수집 코드에는 미적용. SSE가 주 데이터 소스이므로 UI에 반영되지 않았음. → server.py의 SSE 코드에도 동일 로직 추가.

3. **서버 auto_reload 미동작 (발견 → 수동 해결)**: server.py 수정 후 auto_reload가 자동 재시작하지 않아 수동 kill + 재시작 수행.

## 모델 사용 기록
- 불칸(백엔드): Sonnet — routes_get.py 수정
- 이리스(프론트): Sonnet — SystemView.js 수정
- 헤르메스(팀장): Opus — 설계, 검증, SSE 코드 직접 수정 (Sonnet 미수행 범위)

## 셀프 QC 체크리스트
- [x] 1. 영향 파일: routes_get.py, server.py, SystemView.js (3파일)
- [x] 2. 엣지 케이스: psutil.AccessDenied, .task_id 파일 미존재, running 태스크 0건 — 모두 빈 detail("")로 처리
- [x] 3. 작업 지시와 일치: claude에 task ID+설명, python3에 스크립트 경로, 기타에 cmdline 표시
- [x] 4. 에러 처리: 모든 detail 추출 로직에 try/except 래핑
- [x] 5. 테스트: curl API 확인 + Playwright 스크린샷 + DOM 검증
- [x] 6. 이슈 모두 해결: 3건 발견, 3건 해결
- [x] 13. L1 스모크테스트: 서버 재시작 + API curl + 스크린샷 확인 완료
- [x] 14. 듀얼 MCP: Playwright 스크린샷 + DOM 검증 완료

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


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

