# task-801.1: MktingAuto 프로젝트 대시보드 뷰 추가

## SCQA

**S**: 대시보드(`server.py` + `index.html`)가 조직뷰, 프로젝트뷰, 시스템뷰 등 6개 탭으로 운영 중이며, MktingAuto 프로젝트가 Phase 0(준비/기획) 단계에서 신규 시작되었다.

**C**: MktingAuto는 Phase 0~5까지 42개 Todo 항목을 가진 대형 프로젝트이나, 진행 상황을 한눈에 파악할 수 있는 전용 뷰가 대시보드에 없어 제이회장님이 todo-master.md를 직접 읽어야 했다.

**Q**: 대시보드에 MktingAuto 전용 뷰를 추가하여 Phase 진행 상태, Todo 체크리스트, P0/P1/P2 우선순위, D/A/R 태그 현황을 실시간으로 파악할 수 있는가?

**A**: `/api/mktingauto` 엔드포인트 + `MktingAutoView` 컴포넌트를 추가하여 6가지 섹션(헤더+전체진행률, Phase 스테퍼, Phase별 카드, P0/P1/P2 진행률, D/A/R 태그, Phase별 할일 목록)을 구현했다. pytest 40건 + 기존 91건 전체 통과, pyright 에러 0건, black/isort 준수.

## 생성/수정 파일

- **수정**: `/home/jay/workspace/dashboard/server.py` — `parse_mktingauto_todo()` 메서드 + `/api/mktingauto` 엔드포인트 추가 (약 120줄)
- **수정**: `/home/jay/workspace/dashboard/index.html` — `MktingAutoView` 컴포넌트 + 탭/state/fetchData 추가 (약 265줄)
- **생성**: `/home/jay/workspace/dashboard/tests/test_mktingauto_api.py` — 40건 테스트 케이스

## 구현 상세

### 백엔드 (`server.py`)
- `DataLoader.parse_mktingauto_todo()`: todo-master.md를 매 요청마다 새로 읽어 파싱 (캐시 없음)
  - `## Phase N:` 헤더로 Phase 구분 (0~5)
  - `(현재)` 텍스트로 현재 Phase 판별
  - `- [x]`/`- [ ]` 체크박스 정규식 파싱 (들여쓰기 포함)
  - D/A/R 태그 판별 (`D\d+.`, `A\d+.`, `R\d+.`)
  - P0=Phase1, P1=Phase2, P2=Phase3 매핑
  - 비 Phase 섹션(미결 사항, 스킬 매핑 등) 제외
  - 파일 없을 때 빈 결과 반환
- `/api/mktingauto` 엔드포인트 (Simple HTTP + FastAPI 양쪽)

### 프론트엔드 (`index.html`)
- `MktingAutoView` 컴포넌트 (약 260줄):
  - 프로젝트 헤더 카드 + 전체 진행률 바
  - Phase 0~5 시각적 스테퍼 (현재=파란색+pulse, 완료=녹색, 미래=회색)
  - Phase별 카드 그리드 (현재 Phase 강조 테두리)
  - P0/P1/P2 우선순위 프로그레스 바 (빨강/주황/파랑)
  - D/A/R 태그 배지 (emerald/amber/violet)
  - Phase별 할일 목록 (접기/펼치기, 현재 Phase 기본 펼침)
- 탭 배열에 `mktingauto` 추가 (project 뒤)
- fetchData에 `/api/mktingauto` 추가

## 테스트 결과

- **신규 테스트**: `tests/test_mktingauto_api.py` — 40/40 통과 (0.10s)
  - 반환 구조, Phase 구분, 체크박스 파싱, 현재 Phase, P0/P1/P2 매핑, 태그 카운트, 파일 없을 때 방어, 비 Phase 섹션 제외
- **기존 테스트**: 91/91 통과 (0.44s) — 회귀 0건
- **pyright**: 0 errors, 0 warnings
- **black/isort**: 준수

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **Phase 이름에 부가 정보 포함** — Phase 이름에서 괄호 내 시간 정보("(48시간)") 제거하여 깔끔한 표시
2. **서브항목 들여쓰기 구분** — 체크박스 없는 일반 들여쓰기 텍스트(`- 설명`)를 카운트에서 제외하는 정규식 로직 적용
3. **모바일 Phase 스테퍼 가독성** — 모바일에서 Phase 6개 가로 배열 시 좁아지는 문제를 현재 Phase 중심 축소 표시로 해결

## QC 자동 검증

```json
{
  "overall": "PASS",
  "checks": {
    "pyright_check": "PASS (0 errors)",
    "style_check": "PASS (black OK, isort OK)",
    "test_runner": "PASS (91 passed)",
    "spec_compliance": "PASS"
  }
}
```
