세션 변경사항을 분석하여 검증 스킬 누락을 탐지합니다. 기존 스킬을 동적으로 탐색하고, 새 스킬을 생성하거나 기존 스킬을 업데이트한 뒤 CLAUDE.md를 관리합니다.
현재 세션에서 변경된 내용을 분석하여 검증 스킬의 드리프트를 탐지하고 수정합니다:
현재 프로젝트에 등록된 검증 스킬 목록입니다. 새 스킬 생성/삭제 시 이 목록을 업데이트합니다.
| 스킬 | 설명 | 커버 파일 패턴 |
|---|---|---|
verify-entity-parity | Entity/Type/Schema 정합성, 5-stat, 필드 네이밍 검증 |
backend/game-app/src/main/kotlin/com/opensam/entity/*.kt, frontend/src/types/index.ts, backend/game-app/src/main/resources/db/migration/*.sql |
verify-command-parity | 레거시 PHP 93개 커맨드(55 장수 + 38 국가) 구현 상태 추적 | legacy-core/hwe/sammo/Command/**/*.php, backend/game-app/src/main/kotlin/com/opensam/command/**/*.kt, backend/game-app/src/main/kotlin/com/opensam/controller/CommandController.kt, backend/game-app/src/main/kotlin/com/opensam/service/CommandService.kt, backend/game-app/src/main/kotlin/com/opensam/dto/CommandDtos.kt, frontend/src/components/game/*.tsx, frontend/src/app/(game)/commands/page.tsx |
verify-resource-parity | 레거시 게임 리소스(시나리오, 맵, 도시, 관직, 병종) 존재 확인 | backend/game-app/src/main/resources/data/**/*, legacy-core/hwe/sammo/CityConstBase.php, legacy-core/hwe/sammo/Scenario.php, legacy-core/hwe/sammo/GameUnitConstBase.php |
verify-logic-parity | 레거시 PHP 대비 게임 로직 동일 결과 확인 (같은 입력 → 같은 출력) | legacy-core/hwe/sammo/**/*.php, backend/game-app/src/main/kotlin/com/opensam/command/**/*.kt, backend/game-app/src/main/kotlin/com/opensam/engine/**/*.kt, backend/game-app/src/test/kotlin/com/opensam/qa/parity/**/*.kt |
verify-game-tests | 백엔드/프론트엔드 테스트 러너와 커밋 전 검증 파이프라인 확인 | backend/game-app/src/test/kotlin/com/opensam/**/*.kt, backend/gateway-app/src/test/kotlin/com/opensam/gateway/**/*.kt, frontend/src/**/*.test.ts, frontend/vitest.config.ts, verify, scripts/verify/*, .githooks/pre-commit |
verify-frontend-parity | 레거시 PHP 대비 프론트엔드 페이지, 출력 정보, UI, parity 스크립트 확인 | legacy-core/hwe/{index.php,a_*.php,b_*.php,v_*.php,ts/**}, frontend/src/app/**/*, frontend/src/components/**/*, frontend/e2e/parity/**/*.ts, scripts/verify/frontend-parity.mjs |
verify-docs-parity | README.md와 CLAUDE.md의 개발/검증/아키텍처 설명이 현재 구현과 일치하는지 확인 | README.md, CLAUDE.md, verify, scripts/verify/*, .github/workflows/*.yml, backend/**/*, frontend/**/* |
verify-daemon-parity | NPC AI와 턴 데몬이 레거시 PHP 기준대로 동작하는지 확인 | legacy-core/hwe/sammo/{TurnExecutionHelper.php,GeneralAI.php,AutorunNationPolicy.php,AutorunGeneralPolicy.php}, backend/game-app/src/main/kotlin/com/opensam/engine/**/*.kt, backend/game-app/src/main/kotlin/com/opensam/engine/ai/**/*.kt, backend/game-app/src/main/kotlin/com/opensam/controller/TurnController.kt |
verify-npc-data | 시나리오 NPC 장수 삼국지14 기준 5-stat(통무지정매) 최신화 확인 | legacy-core/hwe/scenario/scenario_*.json, legacy-core/hwe/sammo/Scenario/GeneralBuilder.php, 삼국지14 무장정보.xlsx, backend/game-app/src/main/resources/data/**/* |
verify-architecture | 백엔드 TDD/DDD/클린-레이어드 아키텍처, 레포지토리 패턴 준수 검증 | backend/game-app/src/main/kotlin/com/opensam/{controller,service,repository,entity,dto}/**/*.kt, backend/game-app/src/test/kotlin/com/opensam/**/*.kt |
verify-api-parity | 풀스택 1:1 메서드-레벨 패러티 (Controller-Service-Repo 체인, FE API-BE 엔드포인트, 스텁/데드코드, 타입 호환) | backend/game-app/src/main/kotlin/com/opensam/controller/*.kt, backend/game-app/src/main/kotlin/com/opensam/service/*.kt, frontend/src/lib/gameApi.ts, frontend/src/app/(game)/*/page.tsx, frontend/src/types/index.ts |
verify-type-parity | FE TypeScript 타입 ↔ BE Kotlin DTO/Entity 간 strict 타입 매칭 검증 | frontend/src/types/index.ts, frontend/src/lib/gameApi.ts, backend/game-app/src/main/kotlin/com/opensam/dto/*.kt, backend/game-app/src/main/kotlin/com/opensam/entity/*.kt, backend/game-app/src/main/kotlin/com/opensam/controller/*.kt |
현재 세션에서 변경된 모든 파일을 수집합니다:
# 커밋되지 않은 변경사항
git diff HEAD --name-only
# 현재 브랜치의 커밋 (main에서 분기된 경우)
git log --oneline main..HEAD 2>/dev/null
# main에서 분기된 이후의 모든 변경사항
git diff main...HEAD --name-only 2>/dev/null
중복을 제거한 목록으로 합칩니다. 선택적 인수로 스킬 이름이나 영역이 지정된 경우 관련 파일만 필터링합니다.
표시: 최상위 디렉토리(첫 1-2 경로 세그먼트) 기준으로 파일을 그룹화합니다:
## 세션 변경사항 감지
**이 세션에서 N개 파일 변경됨:**
| 디렉토리 | 파일 |
| -------------- | ------------------------------ |
| src/components | `Button.tsx`, `Modal.tsx` |
| src/server | `router.ts`, `handler.ts` |
| tests | `api.test.ts` |
| (루트) | `package.json`, `.eslintrc.js` |
위의 등록된 검증 스킬 섹션에 나열된 스킬을 참조하여 파일-스킬 매핑을 구축합니다.
등록된 검증 스킬 테이블에서 각 스킬의 이름과 커버 파일 패턴을 읽습니다.
등록된 스킬이 0개인 경우, Step 4 (CREATE vs UPDATE 결정)로 바로 이동합니다. 모든 변경 파일이 "UNCOVERED"로 처리됩니다.
등록된 스킬이 1개 이상인 경우, 각 스킬의 .claude/skills/verify-<name>/SKILL.md를 읽고 다음에서 추가 파일 경로 패턴을 추출합니다:
Step 1에서 수집한 각 변경 파일에 대해, 등록된 스킬의 패턴과 대조합니다. 파일이 스킬과 매칭되는 조건:
### 파일 → 스킬 매핑
| 스킬 | 트리거 파일 (변경된 파일) | 액션 |
| ----------- | ------------------------------ | --------- |
| verify-api | `router.ts`, `handler.ts` | CHECK |
| verify-ui | `Button.tsx` | CHECK |
| (스킬 없음) | `package.json`, `.eslintrc.js` | UNCOVERED |
영향받은(AFFECTED) 각 스킬(매칭된 변경 파일이 있는 스킬)에 대해, 전체 SKILL.md를 읽고 다음을 점검합니다:
발견된 각 갭을 기록합니다:
| 스킬 | 갭 유형 | 상세 |
| ----------- | --------- | ------------------------------------------------- |
| verify-api | 파일 누락 | `src/server/newHandler.ts`가 Related Files에 없음 |
| verify-ui | 새 패턴 | 새 컴포넌트가 검사되지 않는 규칙을 사용 |
| verify-test | 오래된 값 | 설정 파일의 테스트 러너 패턴이 변경됨 |
다음 결정 트리를 적용합니다:
커버되지 않은 각 파일 그룹에 대해:
IF 기존 스킬의 도메인과 관련된 파일인 경우:
→ 결정: 기존 스킬 UPDATE (커버리지 확장)
ELSE IF 3개 이상의 관련 파일이 공통 규칙/패턴을 공유하는 경우:
→ 결정: 새 verify 스킬 CREATE
ELSE:
→ "면제"로 표시 (스킬 불필요)
결과를 사용자에게 제시합니다:
### 제안 액션
**결정: 기존 스킬 UPDATE** (N개)
- `verify-api` — 누락된 파일 참조 2개 추가, 탐지 패턴 업데이트
- `verify-test` — 새 설정 패턴에 대한 탐지 명령어 업데이트
**결정: 새 스킬 CREATE** (M개)
- 새 스킬 필요 — <패턴 설명> 커버 (X개 미커버 파일)
**액션 불필요:**
- `package.json` — 설정 파일, 면제
- `README.md` — 문서, 면제
AskUserQuestion을 사용하여 확인합니다:
사용자가 업데이트를 승인한 각 스킬에 대해, 현재 SKILL.md를 읽고 대상 편집을 적용합니다:
규칙:
예시 — Related Files에 파일 추가:
## Related Files
| File | Purpose |
| -------------------------- | ----------------------------------- |
| ... 기존 항목 ... |
| `src/server/newHandler.ts` | 유효성 검사가 포함된 새 요청 핸들러 |
예시 — 탐지 명령어 추가:
### Step N: 새 패턴 검증
**파일:** `path/to/file.ts`
**검사:** 검증할 내용에 대한 설명.
```bash
grep -n "pattern" path/to/file.ts
```
**위반:** 잘못된 경우의 모습.
중요: 새 스킬을 생성할 때, 반드시 사용자에게 스킬 이름을 확인받아야 합니다.
새로 생성할 각 스킬에 대해:
탐색 — 관련 변경 파일을 읽어 패턴을 깊이 이해합니다
사용자에게 스킬 이름 확인 — AskUserQuestion을 사용합니다:
스킬이 커버할 패턴/도메인을 제시하고, 사용자에게 이름을 제공하거나 확인하도록 요청합니다.
이름 규칙:
verify-로 시작해야 합니다 (예: verify-auth, verify-api, verify-caching)verify- 접두사 없이 이름을 제공하면 자동으로 앞에 추가하고 사용자에게 알립니다verify-error-handling, verify_error_handling 아님)생성 — .claude/skills/verify-<name>/SKILL.md를 다음 템플릿에 따라 생성합니다:
---