**task-1224.1 완료 보고** (dev4-team) **완료 보고서: 대시보드 보고서 뷰어 — 이미지 파일 인라인 미리보기** (7분 0초) **핵심 결과** `linkifyFilePaths()`에 이미지 경로 감지 + 미리보기 컨테이너 삽입 로직을 추가하고, `initInlineImagePreviews()` 함수를 구현하여 IntersectionObserver 기반 lazy load로 인라인 이미지를 렌더링하도록 개선. ArchiveView에서 보고서 렌더링 후 자동 초기화. 로딩 중 스피너 표시, 실패 시 기존 링크만 유지(graceful degradation). ## 수정 파일 - `/home/jay/workspace/dashboard/components/utils.js` - `linkifyFilePaths()` (558-572행): 이미지 확장자(png/jpg/jpeg/gif/webp) 감지 시 `` 링크 뒤에 `.inline-image-preview` div 삽입 (Pass 1, Pass 2) - `initInlineImagePreviews()` (582-646행): 신규 함수 — IntersectionObserver로 뷰포트 진입 시 `/api/file?path=...` fetch, base64 `` 생성, DOM API 사용(XSS 방지) - `/home/jay/workspace/dashboard/components/ArchiveView.js` - 11행: `contentRef` useRef 추가 - 13-18행: useEffect로 `initInlineImagePreviews(contentRef.current)` 호출 - 77행: md-render div에 `ref={contentRef}` 연결 - `/home/ja **발견/해결 이슈 3건** 1. **XSS 취약점 — innerHTML에 사용자 경로 삽입** — DOM API(createElement/addEventListener)로 전환하여 해결 2. **TaskDetailModal에 빈 공간 생김** — 미리보기 div 초기 스타일 제거(margin/min-height 없음)하여 `initInlineImagePreviews` 미호출 시 레이아웃 영향 0 3. **filename-only 이미지 경로 검색 실패 가능성** — `/api/file-search` fallback 체인 구현 (검색 → 직접 fetch → 실패 시 숨김)