with one click
verify-cross-store-sync
todoStore↔timerStore 간 연동 및 삭제 안전성 SYNC-1~6 검증.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
todoStore↔timerStore 간 연동 및 삭제 안전성 SYNC-1~6 검증.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
세션 변경사항을 분석하여 검증 스킬 누락을 탐지합니다. 기존 스킬을 동적으로 탐색하고, 새 스킬을 생성하거나 기존 스킬을 업데이트한 뒤 CLAUDE.md를 관리합니다.
프로젝트의 모든 verify 스킬을 순차 실행하여 통합 검증 보고서를 생성합니다. 기능 구현 후, PR 전, 코드 리뷰 시 사용.
서버 사이드 타이머 동기화 SYNC-T1~T5 검증. 브라우저 닫아도 타이머 상태 유지, 서버 시간 기준 경과시간 계산.
UX/동작 규칙 E1-E9 검증. 컴포넌트, CSS, App 레이아웃 변경 후 사용.
프론트↔백엔드 API 연동 API-1~7 검증. todoStore, 서버 라우트 변경 후 사용.
프런트엔드·백엔드 빌드 검증 BUILD-1~4. 소스 변경 후 타입 체크와 프로덕션 빌드가 에러 없이 통과하는지 확인.
| name | verify-cross-store-sync |
| description | todoStore↔timerStore 간 연동 및 삭제 안전성 SYNC-1~6 검증. |
todoStore와 timerStore 간 연동 및 삭제 안전성을 검증합니다:
src/stores/todoStore.ts 또는 src/stores/timerStore.ts 수정 후src/components/TodoItem.tsx 삭제/시작 버튼 로직 변경 후| File | Purpose |
|---|---|
src/stores/todoStore.ts | deleteTodo, incrementPomodoro 액션 |
src/stores/timerStore.ts | activeTodoId, reset, onPhaseComplete |
src/components/TodoItem.tsx | 삭제 버튼, ▶ 시작 버튼 UI |
src/components/TodoList.tsx | 삭제 핸들러 (위치에 따라) |
파일: src/stores/todoStore.ts, src/components/TodoItem.tsx
검사: deleteTodo 시 activeTodoId와 비교 후 reset 호출
grep -n "activeTodoId\|timerStore\|useTimerStore" src/stores/todoStore.ts
grep -n "reset\|activeTodoId" src/components/TodoItem.tsx src/components/TodoList.tsx
grep -B2 -A5 "deleteTodo\|handleDelete" src/components/TodoItem.tsx
PASS: 삭제 대상 === activeTodoId 비교 + reset() 호출 존재 FAIL: deleteTodo가 timerStore를 전혀 참조하지 않음
수정 방법: 삭제 핸들러에서 useTimerStore.getState().activeTodoId === id 체크 후 reset() 호출
파일: src/components/TodoItem.tsx
검사: 삭제 전 confirm() 또는 커스텀 모달 존재
grep -n "confirm\|Confirm\|확인\|삭제" src/components/TodoItem.tsx
grep -n "confirm\|Confirm" src/components/TodoList.tsx
PASS: window.confirm() 또는 커스텀 확인 UI 존재 + 취소 시 삭제 미실행
FAIL: 삭제 버튼 클릭 즉시 삭제
수정 방법: if (!window.confirm('정말 삭제하시겠습니까?')) return; 추가
파일: src/stores/timerStore.ts
검사: onPhaseComplete에서 work 페이즈 완료 시 incrementPomodoro 호출
grep -B2 -A10 "onPhaseComplete\|phaseComplete" src/stores/timerStore.ts
grep -n "incrementPomodoro\|todoStore\|useTodoStore" src/stores/timerStore.ts
PASS: phase === 'work' 조건 + incrementPomodoro(activeTodoId) 호출 존재
FAIL: timerStore가 todoStore를 참조하지 않음
수정 방법: onPhaseComplete에 if (phase === 'work' && activeTodoId) useTodoStore.getState().incrementPomodoro(activeTodoId) 추가
파일: src/components/TodoItem.tsx
검사: completed Todo의 리스트 클릭 시 뽀모도로 선택 차단
grep -B2 -A5 "handleItemClick" src/components/TodoItem.tsx
grep -n "todo.completed" src/components/TodoItem.tsx
PASS: todo.completed 체크로 뽀모도로 선택 차단 (return early)
FAIL: 완료된 Todo에서도 뽀모도로 선택 가능
파일: src/components/TodoItem.tsx
검사: 실행 중(active + running)인 TODO의 체크박스 클릭 시 alert 경고 + 확인 후 토글+리셋
grep -n "alert\|window.confirm\|초기화" src/components/TodoItem.tsx
grep -n "handleCheckbox" src/components/TodoItem.tsx
PASS: 실행중 TODO 체크박스에 alert/confirm 경고 + "초기화" 안내 + 확인 시 toggle+reset FAIL: 실행중 TODO도 경고 없이 즉시 완료 토글
수정 방법: handleCheckboxChange에서 isActive + running 체크 → confirm 후 onToggle + reset
파일: src/components/TodoItem.tsx
검사: 타이머 실행 중에 다른 TODO를 클릭하면 confirm 경고 후 전환
grep -B2 -A8 "handleItemClick" src/components/TodoItem.tsx
grep -n "isRunning.*isActive\|!isActive" src/components/TodoItem.tsx
PASS: isRunning && !isActive 조건 + confirm 경고("초기화됩니다") + 취소 시 전환 안 함
FAIL: 실행 중에 다른 TODO 클릭 시 경고 없이 즉시 전환
수정 방법: handleItemClick에서 isRunning && !isActive 체크 → confirm 후 onSelectTodo
| Step | 검사 | 판정 | 비고 |
|------|------|------|------|
| 1 | 삭제→타이머 리셋 | PASS/FAIL | 상세 |
| 2 | 삭제 confirm | PASS/FAIL | 상세 |
| 3 | 카운트 연동 | PASS/FAIL | 상세 |
| 4 | 완료 Todo 차단 | PASS/FAIL | 상세 |
| 5 | 실행중 완료 경고 | PASS/FAIL | 상세 |
| 6 | 실행중 전환 경고 | PASS/FAIL | 상세 |
useXxxStore.getState() 직접 호출 또는 컴포넌트 레벨 조합 모두 허용confirm() 사용 가능node_modules/ 제외