v0.1.65
v0.1.65 — 오류 전송 동의 모달 (다시 묻지 않기) + 자동 전송 확장 + 소스 private 전환 완료
요청 1
- "오류 발생 시 전송 시도 시 동의 모달 표시 후 확인되면 전송. 다시 묻지 않기 체크박스 (설정에서 변경 가능 안내)"
요청 2
- "consent='allowed' 면 렌더링 오류 외 기능장애 / 사소한 오류도 자동 전송"
요청 3 (이전 task)
- "Option A + C 진행" → OLD repo private 전환 + PAT 가이드 제공
OLD repo private 전환 (Option A)
gh repo edit gugu9999gu/ViewWork --visibility private --accept-visibility-change-consequences실행 → 소스 코드 즉시 비공개.- NEW repo (
ViewWork-releases) public 유지 — auto-update / 다운로드 계속 정상. - v0.1.64+ 사용자: 영향 0 (NEW repo 에서 update). v0.1.63 이하 사용자: 다음 update 시 viewwork.work 에서 수동 다운로드.
오류 동의 모달 (`CrashConsentModal`)
- 신규 파일
src/components/Common/CrashConsentModal.tsx— 큐의 첫 페이로드 표시. - 본문: 에러 메시지 (mono 박스) + "전송 / 미전송 정보 자세히 보기" details + "다시 묻지 않기" 체크박스 + "설정 → 일반 에서 변경 가능" 푸터 안내.
- 4가지 케이스 (요청 사양 그대로):
- Send + 다시묻지않기 ON → consent='allowed' + 본 페이로드 전송 + 큐 잔여 자동 전송 + 향후 자동
- Send + 다시묻지않기 OFF → 본 페이로드 만 전송, 다음에 또 모달
- Skip + 다시묻지않기 ON → consent='denied' + 큐 폐기 + 향후 전송 안 함
- Skip + 다시묻지않기 OFF → 본 페이로드 만 폐기
- 큐 표시:
+N 대기배지 (남은 페이로드 수). cap 5건 — 폭주 방지.
크래시 리포트 큐 store (`src/store/crashReportStore.ts`)
pending: PendingCrashReport[]+recentlySent(5분 dedup 윈도우).enqueue(payload)— consent='allowed' 면 즉시 자동 전송 (모달 없음), 'denied' 면 폐기, 'unknown' 면 큐 추가.- dedup key:
${trigger}::${errorMessage[:80]}— 같은 에러 폭주 차단. - 큐 cap 5 — 오래된 것 부터 drop.
reportError(payload)— 비-React 컨텍스트 (utility 등) 에서 호출용.
자동 전송 확장 (consent='allowed' 일 때)
App.tsx에window.onerror+unhandledrejectionlistener 추가 → 모든 renderer-side 오류 자동 캡처.ViewportErrorBoundary.componentDidCatch도 reportError 호출 — React 컴포넌트 오류 자동 전송.- 신규 trigger 'handled-error' 추가 (preload + crashReporter) — 향후 IPC try/catch 실패 / fetch 실패 등 비치명 에러 trigger 용.
순환참조 회피
crashReportStore가 viewStore 를 import 하지 않고window.__viewworkCrashConsent에서 consent 읽음.App.tsx에서 viewStore.crashReportConsent 를 window 글로벌에 mirror (useEffect).
기존 CrashReportConsentBanner 폐지
- 한 번만 보여주는 우하단 배너 (실제 오류 컨텍스트 없이 사전 동의 받음) 제거.
- 대체: 실제 오류 발생 시 모달 표시 — 사용자가 informed 결정 가능.
검증
npx tsc --noEmitexit=0.npm run build통과 (renderer 3,169kB, +8kB modal + store).
📦 GitHub 릴리스 노트: v0.1.65