---
description: "7단계 검증 루프(린트/타입체크/빌드/테스트/보안/diff/보고서점검) — 코드 작업을 \"완료\"로 보고하기 직전 자동 발동.\nTRIGGER when: 코드 변경 후 사용자에게 작업 완료/PR 준비/커밋 가능 상태로 보고하려는 직전. \"끝났다\"/\"done\"/\"완료\"/\"ready\" 표현을 출력하기 전에 반드시 한 번 실행.\nSKIP: 읽기 전용 작업(스캔/검토/조사), 문서만 수정한 변경, 의도적 임시 스크래치, 사용자가 명시적으로 \"검증 생략\"을 지시한 경우."
---

# /verify — 7단계 검증 루프

> 예시 스킬 파일. 어떤 반복 절차를 한 줄 슬래시 커맨드로 응고할 수 있는지 보여주는 템플릿이다.
> 자신의 프로젝트에 맞게 빌드/테스트 명령과 보안 패턴을 교체해 사용한다.

현재 프로젝트 변경사항에 대해 7단계 검증을 순차 실행하고 구조화된 리포트를 출력한다.
값싼 단계(린트·타입)를 먼저 돌려 대부분의 실패를 일찍 잡고, 비싼 단계는 뒤에 둔다. 각 단계는 실패 시 즉시 명확한 메시지로 보고한다.

## 실행 절차

### Step 0: 프로젝트 감지 (준비 — 검증 단계 아님)
- git diff로 변경된 파일 목록 확인
- 파일 확장자로 언어/프로젝트 자동 판별:
  - `.rs` → Rust (cargo)
  - `.cpp/.h/.c` → C++ (MSBuild/cmake)
  - `.ts/.tsx` → TypeScript (tsc/eslint)
  - `.py` → Python (pyright/ruff)
  - `.cs` → C# (dotnet build)

### Step 1: Lint (정적 분석)
- Rust: `cargo clippy -- -D warnings 2>&1`
- TypeScript: `npx eslint --no-warn-ignored . 2>&1`
- Python: `ruff check . 2>&1`
- 가장 빠르고 가장 자주 잡힌다. 먼저 돌려 뒤 단계 시간을 아낀다.
- 결과: PASS / FAIL + 위반 수

### Step 2: TypeCheck (정적 타입 검사)
- Rust: `cargo check 2>&1`
- TypeScript: `npx tsc --noEmit 2>&1`
- Python: `pyright` 또는 `mypy` (설치된 것)
- 린트가 못 잡는 더 깊은 오류를 잡는다.
- 결과: PASS / FAIL + 경고/에러 수

### Step 3: Build
- Rust: `cargo build 2>&1`
- TypeScript: `npm run build 2>&1` 또는 `next build`
- Python: 구문 검사 `python -m py_compile`
- C#: `dotnet build`
- 컴파일러가 통과 못 시키는 변경이 머지되는 것을 막는다.
- 결과: PASS / FAIL + 에러 요약

### Step 4: Test
- Rust: `cargo test 2>&1`
- TypeScript: `npm test 2>&1` 또는 `npx vitest run`
- Python: `pytest 2>&1`
- C#: `dotnet test`
- 통합 테스트는 mock이 아닌 실제 리소스를 친다 (mock 통과 후 prod 마이그레이션이 깨진 사고가 이 규칙을 만들었다).
- 결과: PASS / FAIL + 통과/실패 수

### Step 5: Security Scan
변경 파일에서 다음 패턴 검색 (Grep 사용):
- 하드코딩된 시크릿: `(password|secret|api_key|token)\s*=\s*["'][^"']+["']`
- SQL injection 패턴: 문자열 연결 쿼리 (파라미터 바인딩 미사용)
- 운영자 실명/개인정보 누출: 자신의 privacy 정책에 정의한 실명 패턴 (컨텐츠/코드/메타데이터 어디에도 금지)
- console.log/println 잔재: `console\.log|println!|printf\(` (테스트 파일 제외)
- TODO/FIXME 잔재: `TODO|FIXME|HACK|XXX`
- 결과: PASS (0건) / WARN (발견 시) + 파일:줄번호 목록. 시크릿·개인정보 적중은 즉시 중단(FAIL).

### Step 6: Diff Review
- `git diff --stat`로 변경 규모 확인
- 의도치 않은 파일 포함 여부 (빌드 산출물, .env, node_modules 등)
- 변경 줄 수 이상치 (단일 파일 500줄+ 변경 경고)
- 변경 줄이 작업 의도와 일치하는지 — 마지막 사람 눈 게이트
- 결과: PASS / WARN

### Step 7: Report-output check
보고서 텍스트 자체가 누출 위험을 담고 있는지 — 보고 직전 한 번 더 grep.
- 시크릿/토큰 값이 보고 본문에 인용됐는지
- 내부 식별자·내부 절대경로 노출
- 운영자 실명/개인정보 — 보고 텍스트에 등장 금지
- 결과: PASS (0건) / FAIL (적중 시 보고 차단). 적중하면 해당 표현을 마스킹/제거 후 재검사.

## 출력 형식

```
═══════════════════════════════════════
  VERIFICATION REPORT
═══════════════════════════════════════
  프로젝트: {프로젝트명}
  언어: {감지된 언어}
  변경 파일: {N}개
───────────────────────────────────────
  1. Lint            : ✓ PASS / ✗ FAIL
  2. TypeCheck       : ✓ PASS / ✗ FAIL
  3. Build           : ✓ PASS / ✗ FAIL
  4. Test            : ✓ PASS (N/N) / ✗ FAIL
  5. Security        : ✓ PASS / ⚠ WARN (N건) / ✗ FAIL
  6. Diff Review     : ✓ PASS / ⚠ WARN
  7. Report-output   : ✓ PASS / ✗ FAIL
───────────────────────────────────────
  Overall: ✓ READY / ✗ NOT READY
═══════════════════════════════════════
```

## 규칙
- FAIL이 1개라도 있으면 Overall은 NOT READY
- WARN만 있으면 Overall은 READY (경고 표시)
- 도구가 설치되지 않은 단계는 SKIP 표시 (FAIL 아님)
- 모든 단계 실행 후 결과를 한 번에 보고 (중간에 멈추지 않음)
- Step 0(감지)은 준비 단계 — 7단계 검증 카운트에 포함되지 않음
