---
task_id: task-2414
type: checklist
scope: task
created: 2026-05-03
updated: 2026-05-03
status: in-progress
---

# 체크리스트: task-2414

**task**: task-2414

---

## Phase 0 — 진단 (이참나)

- [x] A. 백엔드 curl 직접 테스트 (3 doc HTTP 200 확인)
- [x] B. Playwright 실 브라우저 검증 (task-2417/2405에서 3 탭 모두 정상 표시)
- [x] C. 코드 정밀 분석 → silent blank 패턴 발견 (ArchiveView.js line 97-99)
- [x] D. 3문서 업데이트 (plan/context-notes/checklist)

## Phase 1 — 구현 (이쉬첼, 프론트)

- [ ] A. ArchiveView.js fetch 응답 처리 fix
  - r.json()을 r.ok 무관하게 항상 호출
  - status별 분기: 200=content, 404=`*파일 없음: {expected_path}*`, 400=`*에러: {data.error}*`, 그 외=`*불러오기 실패 (HTTP {status})*`
- [ ] B. has_X=false 탭 disabled 처리
  - 카드의 topic 객체에서 has_plan/has_context_notes/has_checklist 활용
  - 탭 버튼 disabled + cursor-not-allowed + opacity-50 + title="이 문서는 존재하지 않습니다"
  - disabled 탭 클릭 시 setActiveDocTab 호출 안 되게
- [ ] C. 카드 펼침 시 activeDocTab 초기값 결정 — has_plan이 true면 'plan', 아니면 has_context_notes ? 'context-notes' : 'checklist'
- [ ] D. Edit 직후 grep으로 변경 반영 확인

## Phase 2 — 테스트 (카마소츠)

- [ ] A. tests/dashboard/test_three_docs_doc_endpoint.py 신규 또는 보강 — 404 응답이 JSON body + expected_path 포함 확인 (3-4 시나리오)
- [ ] B. pytest 실행 → PASS
- [ ] C. (선택) Playwright E2E spec — 3 탭 정상 표시 + 단독 .md 케이스 disabled 동작

## Phase 3 — L1 검증 (이참나)

- [ ] A. 빌드 검증: `python3 -c "import dashboard.server"`
- [ ] B. 서버 재시작: dashboard.service restart
- [ ] C. Playwright 스크린샷: 3 탭 모두 텍스트 표시 + 단독 .md 케이스 disabled 표시 확인
- [ ] D. 회귀: task-2410 plan 탭 정상 보존 확인

## 검증

- [ ] pytest 신규 시나리오 PASS
- [ ] 빌드 검증 PASS
- [ ] L1 스크린샷 첨부 (blank 화면 0건)
- [ ] 보고서 작성 + finish-task.sh 호출
