# task-1135.1 보고서: 대시보드 기록탭 보고서/파일 조회 기능 전수조사

## SCQA

**S**: 대시보드에 FileViewerModal 컴포넌트(utils.js:668)와 ArchiveView(기록 탭)가 구현되어 있으며, `/api/file` 엔드포인트가 정상 동작 중이다.

**C**: 1) 기록 탭에서 보고서 열람 시 렌더링된 마크다운 내 파일 경로가 클릭 불가능. 2) `/api/tasks` 응답에 `bot`과 `composite_teams` 필드가 누락되어 LogicalTeamCard(마케팅팀 등)에서 "1팀봇 사용" 대신 항상 "진행 N건"으로 표시됨.

**Q**: 기록 탭의 파일 뷰어 연동과 마케팅팀 카드의 봇 표시를 정상화할 수 있는가?

**A**: 서버 API에 2개 필드를 추가하고 ArchiveView에 파일 경로 클릭 핸들러를 추가하여 두 문제를 모두 해결. 변경 파일 2개, 총 수정량 약 20줄.

---

## 전수조사 결과

### 1. API 확인
- `GET /api/file?path=...` 엔드포인트: 정상 동작 (server.py:2857-2884)
- 화이트리스트 경로: `memory/reports/`, `memory/tasks/`, `memory/specs/`, `memory/meetings/`
- 허용 확장자: `.md`, `.txt`, `.json`, `.yaml`, `.yml`, `.py`
- Path traversal 방어: `..` 차단, 민감 파일 차단 적용됨

### 2. 프론트엔드 전수조사
- `FileViewerModal`: utils.js:668에 구현됨 (마크다운 렌더링 지원)
- `window._showFileViewer`: App.js:53에 설정됨
- `FileViewerModal` 렌더링: App.js:796에 조건부 렌더링됨
- **TaskDetailModal** (utils.js:627-632): 파일 경로 클릭 → FileViewer 연동 **있음**
- **ArchiveView** (ArchiveView.js:69): 파일 경로 클릭 → FileViewer 연동 **없었음** → 수정
- **RecentReportsWidget** (utils.js:522): 클릭 시 기록 탭 이동만 (개별 보고서 직접 열기 미지원 — 기존 UX 패턴 유지)

### 3. 마케팅팀 카드 "진행 1건" 문제
- **근본 원인**: `get_tasks_info()` (server.py:886)에서 `bot`, `composite_teams` 필드 미포함
- LogicalTeamCard의 `usedBots` 로직(utils.js:301-306)은 정상 — `t.bot`을 `botToLabel`로 매핑
- 단, `/api/tasks` 응답에 `bot`이 없어 `t.bot === undefined` → `filter(Boolean)`에서 모두 제거 → 빈 배열
- `composite_teams`도 누락되어 복합업무 팀 매칭 필터도 동작하지 않았음

---

## 수정 파일 목록

### 수정 (2건)
1. **`/home/jay/workspace/dashboard/server.py`** (라인 895-896)
   - `get_tasks_info()`에 `"bot": task.get("bot")`, `"composite_teams": task.get("composite_teams")` 추가

2. **`/home/jay/workspace/dashboard/components/ArchiveView.js`** (라인 69-89)
   - 마크다운 렌더링 div에 onClick 핸들러 추가 (파일 경로 패턴 감지 → FileViewerModal 호출)
   - 보고서 타입일 때 "보고서 원문 보기" 버튼 추가

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **`/api/tasks`에 `bot` 필드 누락** — server.py:895에 `"bot": task.get("bot")` 추가
2. **`/api/tasks`에 `composite_teams` 필드 누락** — server.py:896에 `"composite_teams": task.get("composite_teams")` 추가
3. **ArchiveView에서 마크다운 내 파일 경로 클릭 불가** — ArchiveView.js:71-78에 onClick 핸들러 + 보고서 원문 보기 버튼 추가

### 범위 외 미해결 (0건)
없음.

---

## 테스트
- server.py 변경: 단순 필드 추가 (하위 호환). 기존 프론트엔드 코드 깨뜨리지 않음
- ArchiveView.js 변경: onClick 핸들러 추가. 매치 실패 시 무동작 (안전)
- pyright 진단: server.py의 기존 미사용 변수 경고 8건 (본 작업 범위 외)
- ArchiveView.js: 기존 TS 경고 1건 (script 태그 로딩 방식으로 인한 미참조 경고, 범위 외)
