# task-1166.1 완료 보고서

## SCQA

**S**: 대시보드 기록 탭에서 .md, 이미지 파일은 클릭하여 조회 가능하지만, .py/.js 파일은 경로 포함 시만 동작하고 파일명만 있는 경우(`dispatch.py`, `inbox_utils.py`) 클릭 불가 상태였다.

**C**: ALLOWED_PREFIXES가 5개 디렉토리만 허용하고, file-search가 output/ 디렉토리만 검색하며, pathPattern이 코드 파일 확장자를 미지원하여 workspace 내 주요 코드 파일 접근이 제한되었다.

**Q**: 보안(workspace 범위 제한)을 유지하면서 모든 파일 타입의 조회를 지원할 수 있는가?

**A**: server.py의 ALLOWED_PREFIXES에 7개 디렉토리 추가, ALLOWED_EXTENSIONS/SEARCH_ALLOWED_EXTENSIONS에 6개 코드 확장자 추가, file-search를 workspace 전체 검색으로 확장(EXCLUDED_DIRS 필터 적용), utils.js의 pathPattern에 코드 확장자 추가 + Pass 3 코드 파일명 패턴 추가 + FileViewerModal에 다크 테마 코드 뷰어 분기를 구현하여 해결.

## 수정 파일 목록

- `/home/jay/workspace/dashboard/server.py`
  - L3103: ALLOWED_PREFIXES에 `utils/`, `scripts/`, `teams/`, `dashboard/`, `hooks/`, `tools/`, `prompts/` 추가
  - L3037-3055: SEARCH_ALLOWED_EXTENSIONS에 `.js`, `.ts`, `.tsx`, `.sh`, `.css`, `.html` 추가
  - L3060-3078: file-search 검색 범위를 output/ → workspace 전체로 확장 (EXCLUDED_DIRS 보안 필터 적용)
  - L3108-3127: ALLOWED_EXTENSIONS에 `.js`, `.ts`, `.tsx`, `.sh`, `.css`, `.html` 추가

- `/home/jay/workspace/dashboard/components/utils.js`
  - L542: pathPattern에 `js|ts|tsx|sh|css|html` 확장자 추가
  - L545-546: codeFilenamePattern 추가 (경로 없는 코드 파일명 매칭)
  - L572-575: Pass 3 링크화 로직 추가
  - L763: isCode 판별 변수 추가
  - L804-808: 코드 파일용 다크 테마 렌더링 분기 추가 (bg-slate-800 + ext 배지)

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **file-search workspace 전체 검색 시 불필요 디렉토리 스캔** — EXCLUDED_DIRS 세트(`{".git", "node_modules", "__pycache__", ".venv", "venv", ".env"}`)로 보안/성능 모두 확보
2. **코드 파일명 패턴 오탐 가능성** — `[\w.\-]+` 패턴으로 제한하고, applyPattern의 `<a>` 태그 내부 스킵 로직이 이중 링크화 방지
3. **json/yaml 파일이 기존 plain pre → 다크 테마 코드 뷰어로 변경** — isCode 목록에 포함시켜 일관된 코드 파일 UX 제공 (의도적 개선)

### 범위 외 미해결 (0건)

## 보안 검증

- path traversal 방지: `..` 체크 유지
- workspace 범위 제한: `str(found_resolved).startswith(str(workspace_resolved))` 유지
- 민감 파일 차단: BLOCKED_EXTENSIONS (`.env`, `.credentials`, `.keys`) + dotfile 차단 유지
- 검색 제외 디렉토리: `.git`, `node_modules`, `__pycache__`, `.venv`, `venv`, `.env`

## 머지 판단
- **머지 필요**: No (시스템 작업, worktree 미사용)

## QC 자동 검증
- **Overall**: WARN (style_check만 WARN, 기능 무관)
- **test_runner**: PASS — pytest 7건 전체 통과 (0.27s)
- **pyright_check**: PASS — 에러 0건
- **file_check**: PASS — server.py 195,598B, utils.js 53,694B
- **data_integrity**: PASS
- **style_check**: WARN — black 포매팅 차이 (기능 무관)
- **critical_gap**: PASS
- **spec_compliance**: PASS
- **duplicate_check**: PASS (최대 유사도 12.2%)
