description: "사이트 콘텐츠 검증. 예: /rpd-check, /rpd-check week 5, /rpd-check all, /rpd-check showme, /rpd-check --fix. DO NOT use for: 코드 품질 검증(/quality 사용), 배포 확인(/deploy 사용)" allowed-tools: Read, Glob, Grep, Bash(ls:), Bash(wc:), Bash(stat:), Bash(npx serve:), Bash(git diff:*), Agent, Write, Edit
Context
- 워크트리 위치: !
git worktree list 2>/dev/null | head -3 - 전체 주차 수: !
python3 -c "import json; d=json.load(open('course-site/data/curriculum.json')); print(len(d))" 2>/dev/null || echo "?" - 이미지 파일 수: !
find course-site/assets/images -type f ! -name '.gitkeep' 2>/dev/null | wc -l | tr -d ' ' - ShowMe 카드 수: !
ls course-site/assets/showme/*.html 2>/dev/null | grep -v _template | wc -l | tr -d ' ' - Registry 항목 수: !
grep -c "\"label\"" course-site/assets/showme/_registry.js 2>/dev/null || echo 0 - Supplement 항목 수: !
python3 -c "import json; d=json.load(open('course-site/assets/showme/_supplements.json')); print(len(d))" 2>/dev/null || echo "?"
Task
인자: $ARGUMENTS
모드 분기
| 인자 | 동작 |
|------|------|
| (없음) | Phase 1 전체 데이터 검증 (Smart Scoping 적용) |
| week {N} | Phase 1 + Phase 2 해당 주차 |
| all | Phase 1 + Phase 2 전체 (15주) |
| showme | ShowMe 카드 시스템만 집중 검증 |
| --fix | 검증 + 자동 수정 가능 항목 수정 (다른 인자와 조합 가능) |
Smart Scoping (인자 없을 때)
인자 없이 /rpd-check 실행 시, 최근 변경 파일 기반으로 관련 검증을 우선 실행:
git diff --name-only HEAD~3
| 변경 패턴 | 우선 검증 |
|----------|----------|
| course-site/assets/showme/ | 1.3 ShowMe 카드 체인 |
| course-site/assets/images/ | 1.1 이미지 검증 |
| course-site/data/curriculum* 또는 overrides.json | 1.4 데이터 구조 + 1.8 동기화 |
| 변경 없음 | Phase 1 전체 |
우선 검증 결과를 먼저 출력한 뒤, 나머지 Phase 1 항목도 실행.
Phase 1: Data Audit
curriculum.json을 읽고 아래 7개 카테고리를 검증한다.
결과를 내부 리스트에 수집하며, 각 이슈에 severity를 부여한다: critical / warning / info.
1.1 이미지 검증 (critical)
curriculum.json읽기- 각 week → 각 step에서
image(string) 또는images(array) 필드 추출 - 각 경로에 대해
course-site/기준으로 Glob 또는 Read로 파일 존재 확인 - 파일 없으면 →
[CRITICAL] 이미지 누락: {path} ← week {N} step "{title}" - 파일 크기 0이면 →
[CRITICAL] 빈 이미지: {path}
1.2 텍스트 완전성 (warning)
- 각 step:
title과copy필드가 존재하고 빈 문자열이 아닌지 - 각 task:
label필드가 존재하고 빈 문자열이 아닌지 - 깨진 문자 패턴 감지:
□,\ufffd,???포함 여부 - 문제 시 →
[WARNING] 빈 텍스트: week {N} step "{title}" → {field}
1.3 ShowMe 카드 체인 (critical/warning)
전체 체인 검증 — 4단계:
- curriculum.json에서 모든 showme ID 수집 (step.showme + step.widgets[].id)
- 각 ID에 대해:
_registry.js의 SHOWME_REGISTRY에 키 존재? → 없으면[CRITICAL]course-site/assets/showme/{id}.html파일 존재? → 없으면[CRITICAL]_supplements.json에 키 존재? → 없으면[WARNING]- supplement에 필수 필드 (analogy, before_after, confusion, takeaway) 모두 존재? → 없으면
[WARNING]
_catalog.json의 categoryMap에서 모든 registry ID가 최소 1개 카테고리에 포함되어 있는지 → 없으면[INFO]
1.4 데이터 구조 (critical)
- 각 week 객체:
week,title,steps필드 존재 - 각 step 객체:
title,copy필드 존재 (tasks는 없을 수 있음) - task가 있으면:
id,label필드 존재 - task ID 형식:
/^w\d+-t\d+$/패턴 매칭 - 전체 task ID 유니크 확인 (중복 시
[CRITICAL]) - week 번호 1~15 연속 확인 (빠진 주차 시
[WARNING])
1.5 링크/URL (warning)
docs[].url,videos[].url→https://시작하는지 형식 확인task.url필드 존재 시 형식 확인downloads필드의 파일 경로 → 파일 존재 확인- 주의: 외부 URL에 실제 HTTP 요청은 보내지 않는다 (속도 문제). 형식만 검증.
1.6 클립/비디오 (warning)
clips필드 → 파일 경로 존재 확인video필드 → URL 형식 유효 확인
1.7 Orphan 감지 (info)
course-site/assets/images/week*/내 모든 파일 목록 수집 (.gitkeep제외)- curriculum.json에서 참조되는 이미지 경로 목록과 비교
- 참조 안 되는 파일 →
[INFO] Orphan 이미지: {path} course-site/assets/showme/*.html중_template.html제외, registry에 없는 ID →[INFO]_supplements.json키 중 registry에 없는 ID →[INFO]
1.8 동기화 상태 검증 (warning/critical)
-
curriculum-notion.json파일의 마지막 git commit 시간 확인:git log -1 --format="%ci" -- course-site/data/curriculum-notion.json- 30분 이상 경과 시 →
[INFO] Notion snapshot이 오래됨 — /curriculum sync 권장 - 24시간 이상 경과 시 →
[WARNING] Notion snapshot이 매우 오래됨
- 30분 이상 경과 시 →
-
overrides.json의 week/step 인덱스가 curriculum-notion.json 구조와 매칭되는지:
- curriculum-notion.json 읽기 → 각 week의 steps 배열 길이 확인
- overrides.json 읽기 → 각 week의 steps 키(인덱스) 확인
- step 인덱스가 curriculum-notion.json의 steps 범위를 초과하면
→
[CRITICAL] overrides step 인덱스 불일치: week {N} step {idx} — Notion에서 step이 추가/삭제됨
-
curriculum-notion.json + overrides.json을 수동 merge한 결과와 현재 curriculum.json 비교:
- 두 파일을 읽고 merge 로직 적용 (overrides 필드가 notion 필드를 덮어씀)
- 현재 curriculum.json과 비교
- 불일치 시 →
[WARNING] curriculum.json이 stale — /curriculum sync 필요
Phase 2: Browser Verify
상세 내용: references/browser-verify.md
실행 조건: week {N}, all 인자가 있을 때만 실행.
Phase 3: Report + Fix
리포트 출력
모든 이슈를 severity별로 정렬하여 터미널에 출력:
=== RPD Check Report ===
스캔: 전체 15주 / 2026-03-31
[CRITICAL] 이미지 누락 (3건)
week 5 step "AI 메쉬 정리" → assets/images/week05/mesh-cleanup.png
week 5 step "Sculpt 브러시 심화" → assets/images/week05/sculpt-brushes.png
week 5 step "Remesh와 마무리" → assets/images/week05/remesh.png
[WARNING] ShowMe supplement 누락 (N건)
sculpt-brushes: _supplements.json에 없음
[INFO] Orphan 파일 (N건)
assets/images/week03/unused-image.png
──────────────────────────
Summary: X critical / Y warning / Z info
최종 판정
PASS: critical 0건 → "✅ PASS (0 critical / N warning / N info)"
WARN: critical 0 + warning ≤5 → "⚠️ WARN (0 critical / N warning / N info)"
FAIL: critical ≥1 → "❌ FAIL (N critical / N warning / N info)"
판정 결과를 리포트 맨 마지막 줄에 출력.
JSON 리포트 저장
claudedocs/rpd-check-report.json에 구조화된 결과 저장:
{
"timestamp": "2026-03-31T...",
"mode": "full | week:5 | showme",
"issues": [...],
"summary": { "critical": 3, "warning": 2, "info": 1 }
}
--fix 자동 수정
--fix 플래그가 있을 때만 실행. 상세: references/fix-rules.md
실행 로그
echo "[$(date '+%Y-%m-%d %H:%M')] mode=$MODE result=$RESULT quality=$QUALITY critical=$CRITICAL warning=$WARNING info=$INFO" >> .claude/skill-logs/rpd-check.log
result:success/partial/failquality:pass/warn/fail
Gotchas ⚠️ (자동 축적)
스킬 실행 중 예상치 못한 실패/우회가 발생하면:
-
이 섹션 하단에 한 줄 추가
-
형식:
N. [날짜] 증상 → 원인 → 해결 -
같은 실수 반복 시 해당 항목에 빈도 카운터 추가
-
curriculum.json은 ~3800줄이므로 전체를 한 번에 읽는다 (분할 불필요)
-
_registry.js는 JS 파일이므로 JSON 파싱 불가 — Grep으로 키 추출 -
Phase 2 브라우저 검증 시 서버가 이미 떠 있으면 재기동하지 않는다
-
외부 URL에 HTTP 요청을 보내지 않는다 (속도/안정성)
-
showme 모달 클릭 시 iframe 로드 시간이 필요하므로 짧은 대기 필요
-
이미지 테마 검증 시 iframe cross-origin 제한 — 배경색만 확인
금지 사항
- 테스트 결과를 조작하거나 이슈를 무시하지 말 것
- Phase 1에서 발견된 critical 이슈가 있으면 반드시 리포트에 포함
--fix로 이미지를 플레이스홀더로 생성하지 말 것 (품질 저하)- curriculum.json 구조를 임의로 변경하지 말 것
TDD Red-Green-Refactor
Testing
Skill that guides Claude through the complete TDD cycle.
Web Accessibility Audit
Testing
Performs a comprehensive web accessibility audit following WCAG standards.
UAT Test Case Generator
Testing
Generates structured and comprehensive user acceptance test cases.