원클릭으로
verify-timer-sync
서버 사이드 타이머 동기화 SYNC-T1~T5 검증. 브라우저 닫아도 타이머 상태 유지, 서버 시간 기준 경과시간 계산.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
서버 사이드 타이머 동기화 SYNC-T1~T5 검증. 브라우저 닫아도 타이머 상태 유지, 서버 시간 기준 경과시간 계산.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
세션 변경사항을 분석하여 검증 스킬 누락을 탐지합니다. 기존 스킬을 동적으로 탐색하고, 새 스킬을 생성하거나 기존 스킬을 업데이트한 뒤 CLAUDE.md를 관리합니다.
todoStore↔timerStore 간 연동 및 삭제 안전성 SYNC-1~6 검증.
프로젝트의 모든 verify 스킬을 순차 실행하여 통합 검증 보고서를 생성합니다. 기능 구현 후, PR 전, 코드 리뷰 시 사용.
UX/동작 규칙 E1-E9 검증. 컴포넌트, CSS, App 레이아웃 변경 후 사용.
프론트↔백엔드 API 연동 API-1~7 검증. todoStore, 서버 라우트 변경 후 사용.
프런트엔드·백엔드 빌드 검증 BUILD-1~4. 소스 변경 후 타입 체크와 프로덕션 빌드가 에러 없이 통과하는지 확인.
SOC 직업 분류 기준
| 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 |
다음은 문제가 아닙니다: