--- name: nuxt-code-review description: | 브랜치/PR 단위 코드 리뷰를 수행합니다. git diff 기반으로 변경된 코드 전체를 팀 컨벤션과 평가 기준에 따라 근거 기반(evidence-based)으로 리뷰합니다. "코드 리뷰해줘", "PR 리뷰", "브랜치 리뷰", "변경사항 검토", "diff 리뷰" 등을 요청하면 트리거됩니다. (단일 .vue 파일 심층 리뷰는 vue-component-review 스킬을 사용하세요.) --- # Nuxt 코드 리뷰 (브랜치/PR 단위) 이 스킬은 현재 브랜치의 전체 변경사항을 대상으로 근거 기반 코드 리뷰를 수행합니다. 모든 코멘트는 `references/evaluation-criteria.md`의 기준 ID를 인용하여 주관적 의견이 아닌 팀 컨벤션에 근거합니다. ## 핵심 원칙 1. **근거 인용 필수**: 모든 코멘트는 평가 기준 ID(예: `VUE-002`)를 반드시 인용한다. 기준 없는 의견은 코멘트로 작성하지 않는다. 2. **수정 제안 필수**: "이 코드가 잘못됐다"만으로는 부족하다. 구체적인 수정 방법(before/after)을 함께 제시한다. 3. **리플렉션으로 오탐 제거**: 최종 출력 전 모든 코멘트를 재검증하여 컨텍스트를 오해한 오탐을 제거한다. ## 작업 순서 ### Phase 1: 컨텍스트 수집 1. 베이스 브랜치를 확인한다. 사용자가 명시하지 않으면 `main`으로 가정하고 알린다. 2. 변경 범위를 파악한다: ```bash git diff ...HEAD --stat git log ...HEAD --oneline ``` 3. 프로젝트 전용 컨벤션 파일이 있으면 읽는다 (우선순위 높음): - `.claude/project/conventions.md` - `docs/adr.md` 또는 `docs/adr.yaml` - `docs/code-convention.yaml` 4. `references/evaluation-criteria.md`를 로드하여 평가 기준을 준비한다. 5. 변경 의도를 1줄로 요약한다 (커밋 메시지, PR 설명, 파일 목록에서 추론). 6. **대규모 diff 처리**: 변경 파일이 30개 초과 또는 변경 라인이 2000줄 초과이면, 리뷰할 디렉토리나 파일 타입을 사용자에게 물어 범위를 축소한다. ### Phase 2: 구조화된 코드 리뷰 1. `git diff ...HEAD`로 전체 diff를 읽는다. 2. 아래 파일은 리뷰에서 제외한다: - `.nuxt/`, `node_modules/`, `.output/` 내 파일 - 락 파일 (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`) - 자동 생성 파일 (`*.generated.ts`, `*.d.ts` 중 빌드 산출물) 3. 파일별로 해당하는 평가 기준을 대조하며 검토한다. 4. 각 발견사항을 우선순위에 따라 분류한다: - **[p1] 반드시 수정**: 버그, 런타임 에러, 보안 취약점, 팀 표준 위반 중 기능에 영향을 주는 것 - **[p2] 강력 권장**: 컨벤션 위반, 타입 누락, 유지보수 부담을 주는 패턴 - **[p3] 권장**: 코드를 더 좋게 만들지만 위반은 아닌 개선사항 - **[p4] 사소**: 스타일 지적, 네이밍 선호, 사소한 가독성 5. 크로스파일 이슈도 점검한다: - 변경된 파일 간 패턴 불일치 - 타입 변경 후 사용처가 업데이트되지 않은 경우 - import/export 정합성 ### Phase 3: 리뷰 리플렉션 (자기 검증) 모든 코멘트를 최종 출력 전에 재검증한다. 각 코멘트에 대해 스스로 묻는다: - 인용한 평가 기준이 이 특정 코드 컨텍스트에 실제로 적용되는가? - 작성자가 이 선택을 의도적으로 했을 수 있는가? (프로젝트 컨벤션, 기술적 제약) - 제안한 수정이 실제로 올바르고, 사이드 이펙트는 없는가? - 전체 컨텍스트를 보지 못해 생긴 오탐은 아닌가? 오탐으로 판단되면 해당 코멘트를 최종 출력에서 제거한다. 이 과정은 내부 검증이며 출력에 포함하지 않는다. ### Phase 4: 최종 출력 아래 출력 형식에 따라 최종 리뷰를 작성한다. ## 코멘트 형식 각 코멘트는 다음 구조를 따른다: ``` ### [p1] src/components/UserCard.vue:45 - **기준**: VUE-002 (defineProps 제네릭 타입) - **내용**: Props가 런타임 선언 방식으로 되어 있어 TypeScript 타입 안전성이 보장되지 않습니다. - **제안**: ```ts // Before const props = defineProps({ name: String, age: Number }); // After const props = defineProps<{ name: string; age: number }>(); ``` - **사이드 이펙트**: 없음. 런타임 동작 동일. - **제안 이유**: 제네릭 형태는 IDE 자동완성과 타입 추론에서 우수하며 팀 표준입니다. ``` ## 출력 형식 ``` ## 코드 리뷰 결과 ### 리뷰 범위 - 베이스: `main` - 브랜치: `feature/user-profile` - 변경 파일: N개 (파일 목록) - 변경 의도: (1줄 요약) --- ### [p1] 반드시 수정 (N건) (코멘트들) ### [p2] 강력 권장 (N건) (코멘트들) ### [p3] 권장 (N건) (코멘트들) ### [p4] 사소 (N건) (코멘트들) --- ### 좋은 점 - (코드에서 잘 된 부분 관찰) ### 추가 리뷰 제안 - `UserCard.vue` — 250줄 초과. `vue-component-review` 스킬로 컴포넌트 상세 리뷰를 권장합니다. ``` ## 주의사항 - **코드 수정 금지**: 사용자가 수정을 요청하지 않은 경우 리뷰만 수행한다. 수정이 필요하면 별도로 요청받는다. - **프로젝트 지침 우선**: 프로젝트 전용 컨벤션과 팀 공통 지침이 충돌하면 프로젝트 지침을 따르되, 차이를 사용자에게 알린다. - **생성 파일 제외**: `.nuxt/`, `node_modules/`, 자동 생성 파일, 락 파일은 리뷰하지 않는다. - **단일 파일 심층 리뷰 연계**: 개별 `.vue` 파일의 체크리스트 기반 상세 리뷰가 필요하면 `vue-component-review` 스킬 사용을 제안한다. - **커밋 컨벤션 확인**: 브랜치 커밋 메시지의 Conventional Commits 준수 여부는 `rules/commit-pr.md` 기준으로 확인하되, 커밋 메시지 생성은 `conventional-commit` 스킬의 역할이다.