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

# 계획서: task-2414 — 3문서 context-notes/checklist blank fix

**task**: task-2414
**목표**: ArchiveView.js의 silent blank 버그 fix (404/400 응답 시 명확한 메시지 표시) + has_X=false 탭 비활성화로 회장이 본 blank 화면 제거
**승인**: 제이회장 2026-05-03 명시 "context-notes, checklist는 blank임"
**근거**: `/home/jay/workspace/memory/tasks/task-2414.md`

---

## 목표

1. **silent blank 버그 fix**: `fetch().then(r => r.ok ? r.json() : null)` 구조에서 404/400 응답이 null로 변환되어 `*${data.error}*` 메시지조차 표시되지 않음 → 항상 r.json() 호출 + status별 분기 처리
2. **has_X=false 탭 비활성화**: 단독 .md 파일(system)이나 일부 누락 케이스에서 사용자가 존재하지 않는 탭을 클릭하지 못하도록 disabled + tooltip
3. **회귀 테스트**: 백엔드 단위 테스트(404 응답 형식) + Playwright E2E (3 탭 모두 의미있는 텍스트 표시)
4. **회장 4대 규칙**: 빌드 + 배포 + 실 브라우저 + 회장 confirm

## 범위

### 포함
- `dashboard/components/ArchiveView.js` — fetch 응답 처리 강화 + 탭 disabled 로직
- `tests/dashboard/test_three_docs_doc_endpoint.py` — 404 응답 + blank 응답 회귀 단위 테스트 (없으면 신규)
- `tests/e2e/dashboard-three-docs-tabs.spec.ts` — Playwright E2E (선택, 시간 허락 시)

### 제외 (다음 페이즈 이후)
- `dashboard/routes_get.py` 수정 (백엔드는 이미 정확한 JSON 응답 반환)
- 다른 컴포넌트 수정
- task 파일에 명시된 forbidden 21개 파일

## 위임 계획

- **Phase 1 (구현)**: 이쉬첼(프론트, Sonnet) — ArchiveView.js fetch 응답 처리 fix + has_X=false 탭 disabled
- **Phase 2 (테스트)**: 카마소츠(테스터, Haiku) — pytest 신규 + Playwright E2E
- **Phase 3 (검증)**: 이참나(팀장) — 빌드 + 서버 재시작 + L1 듀얼 MCP

## 검증 기준

- pytest: `pytest tests/dashboard/test_three_docs_doc_endpoint.py -v` → PASS
- Playwright E2E: 임의 task에서 plan/context-notes/checklist 3 탭 모두 텍스트 표시 (blank 없음)
- 단독 .md 파일 케이스: context-notes/checklist 탭 disabled 또는 명확한 "파일 없음" 메시지
- L1: 서버 재시작 후 회장 시나리오 재현 → blank 화면 0건
