ワンクリックで
verify-timer-sync
서버 사이드 타이머 동기화 SYNC-T1~T5 검증. 브라우저 닫아도 타이머 상태 유지, 서버 시간 기준 경과시간 계산.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
서버 사이드 타이머 동기화 SYNC-T1~T5 검증. 브라우저 닫아도 타이머 상태 유지, 서버 시간 기준 경과시간 계산.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
세션 변경사항을 분석하여 검증 스킬 누락을 탐지합니다. 기존 스킬을 동적으로 탐색하고, 새 스킬을 생성하거나 기존 스킬을 업데이트한 뒤 CLAUDE.md를 관리합니다.
todoStore↔timerStore 간 연동 및 삭제 안전성 SYNC-1~6 검증.
프로젝트의 모든 verify 스킬을 순차 실행하여 통합 검증 보고서를 생성합니다. 기능 구현 후, PR 전, 코드 리뷰 시 사용.
UX/동작 규칙 E1-E9 검증. 컴포넌트, CSS, App 레이아웃 변경 후 사용.
프론트↔백엔드 API 연동 API-1~7 검증. todoStore, 서버 라우트 변경 후 사용.
프런트엔드·백엔드 빌드 검증 BUILD-1~4. 소스 변경 후 타입 체크와 프로덕션 빌드가 에러 없이 통과하는지 확인.
| name | verify-timer-sync |
| description | 서버 사이드 타이머 동기화 SYNC-T1~T5 검증. 브라우저 닫아도 타이머 상태 유지, 서버 시간 기준 경과시간 계산. |
뽀모도로 타이머 상태가 서버에 저장되어 브라우저를 닫고 다시 열어도 이어지는지 검증합니다:
server/src/models/timer.ts 추가/변경 후server/src/routes/timer.ts 추가/변경 후server/src/models/db.ts의 timer_state 테이블 변경 후src/stores/timerStore.ts의 서버 동기화 로직 변경 후| File | Purpose |
|---|---|
server/src/models/db.ts | timer_state 테이블 정의 |
server/src/models/timer.ts | TimerModel — get/upsert 메서드 |
server/src/routes/timer.ts | GET /api/timer, PUT /api/timer |
server/src/index.ts | timerRouter 등록 |
src/stores/timerStore.ts | 서버 동기화 + 복원 로직 |
파일: server/src/models/db.ts
검사: timer_state 테이블 존재 + 필수 컬럼
grep -n "timer_state" server/src/models/db.ts
grep -A10 "timer_state" server/src/models/db.ts | grep -i "phase\|status\|remainingSeconds\|startedAt\|completedCycles\|activeTodoId\|activeSessionId"
PASS: timer_state 테이블에 phase, status, remainingSeconds, startedAt, completedCycles, activeTodoId, activeSessionId 컬럼 존재 FAIL: 테이블 또는 필수 컬럼 누락
수정 방법: db.ts의 initDb()에 CREATE TABLE IF NOT EXISTS timer_state 추가
파일: server/src/models/timer.ts
검사: TimerModel 파일 존재 + get/upsert 메서드
ls server/src/models/timer* 2>/dev/null || echo "TIMER MODEL NOT FOUND"
grep -n "get\b\|upsert" server/src/models/timer.ts 2>/dev/null || echo "NO TIMER METHODS"
PASS: timer.ts 존재 + get() (현재 상태 조회), upsert() (상태 저장/갱신) 메서드 정의 FAIL: 파일 또는 메서드 부재
수정 방법: server/src/models/timer.ts 생성. get()은 단일 행 조회, upsert()는 INSERT OR REPLACE
파일: server/src/routes/timer.ts, server/src/index.ts
검사: GET /api/timer + PUT /api/timer + 서버 시간 기준 경과 계산
ls server/src/routes/timer* 2>/dev/null || echo "TIMER ROUTE NOT FOUND"
grep -n "router\.get\|router\.put" server/src/routes/timer.ts 2>/dev/null || echo "NO TIMER ENDPOINTS"
grep -n "Date.now\|new Date\|elapsed\|경과" server/src/routes/timer.ts 2>/dev/null || echo "NO SERVER TIME CALC"
grep -n "timer" server/src/index.ts
PASS 조건:
startedAt과 현재 서버 시간의 차이로 남은 시간을 계산하여 반환FAIL: 엔드포인트 부재, 서버 시간 계산 없음, 라우트 미등록
파일: src/stores/timerStore.ts
검사: 앱 로드 시 서버에서 타이머 상태 복원
grep -n "fetchTimer\|restoreTimer\|loadTimer\|GET.*timer\|/api/timer" src/stores/timerStore.ts
grep -n "export.*useTimerStore" src/stores/timerStore.ts
PASS: 서버에서 타이머 상태를 가져와 스토어에 반영하는 함수 존재 (fetchTimerState 등) FAIL: 서버에서 타이머 상태를 복원하는 로직 없음
수정 방법: fetchTimerState() 액션 추가. GET /api/timer 호출 → 응답값으로 set(). running이었으면 서버가 계산한 remainingSeconds로 즉시 tick 재개
파일: src/stores/timerStore.ts
검사: start/pause/reset/onPhaseComplete에서 서버에 상태 전송
grep -n "PUT.*timer\|fetch.*timer\|TIMER_API\|/api/timer" src/stores/timerStore.ts
grep -B2 -A5 "start\|pause\|reset\|onPhaseComplete" src/stores/timerStore.ts | grep -i "fetch\|put\|api"
PASS: 4개 액션(start, pause, reset, onPhaseComplete) 모두에서 PUT /api/timer 호출 FAIL: 서버 전송 없는 액션이 있음
수정 방법: 각 액션 끝에 syncToServer() 헬퍼 호출 추가. PUT /api/timer에 현재 스토어 상태 전송
| # | 검사 | 대상 | 상태 |
|---|------|------|------|
| SYNC-T1 | 타이머 테이블 | 백엔드 DB | PASS / FAIL |
| SYNC-T2 | 타이머 모델 | 백엔드 모델 | PASS / FAIL |
| SYNC-T3 | 타이머 API | 백엔드 라우트 | PASS / FAIL |
| SYNC-T4 | 클라이언트 복원 | 프런트 스토어 | PASS / FAIL |
| SYNC-T5 | 클라이언트 동기화 | 프런트 스토어 | PASS / FAIL |
다음은 문제가 아닙니다: