jun-claude-code 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -83
- package/dist/cli.js +40 -0
- package/dist/copy.js +92 -11
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/init-context.d.ts +4 -0
- package/dist/init-context.js +143 -0
- package/dist/init-project.js +4 -4
- package/dist/validate.d.ts +4 -0
- package/dist/validate.js +105 -0
- package/package.json +2 -2
- package/{.claude → templates/global}/CLAUDE.md +50 -21
- package/{.claude → templates/global}/agents/architect.md +23 -11
- package/{.claude → templates/global}/agents/code-reviewer.md +17 -7
- package/{.claude → templates/global}/agents/code-writer.md +27 -15
- package/{.claude → templates/global}/agents/context-collector.md +11 -3
- package/{.claude → templates/global}/agents/context-manager.md +21 -9
- package/{.claude → templates/global}/agents/designer.md +32 -20
- package/{.claude → templates/global}/agents/director.md +43 -31
- package/{.claude → templates/global}/agents/explore.md +13 -5
- package/{.claude → templates/global}/agents/git-manager.md +39 -22
- package/{.claude → templates/global}/agents/impact-analyzer.md +17 -7
- package/{.claude → templates/global}/agents/qa-tester.md +22 -8
- package/{.claude → templates/global}/agents/simple-code-writer.md +13 -5
- package/{.claude → templates/global}/agents/task-planner.md +18 -10
- package/{.claude → templates/global}/hooks/skill-forced.sh +56 -56
- package/{.claude → templates/global}/hooks/workflow-enforced.sh +49 -31
- package/{.claude → templates/global}/skills/Backend/SKILL.md +38 -9
- package/{.claude → templates/global}/skills/Coding/SKILL.md +69 -29
- package/{.claude → templates/global}/skills/Director/SKILL.md +9 -5
- package/{.claude → templates/global}/skills/Documentation/SKILL.md +68 -1
- package/{.claude → templates/global}/skills/Git/SKILL.md +8 -4
- package/{.claude → templates/global}/skills/Git/git.md +60 -28
- package/{.claude → templates/global}/skills/Git/pr-apply.md +18 -6
- package/{.claude → templates/global}/skills/Git/pr-review.md +4 -0
- package/templates/global/skills/PromptStructuring/SKILL.md +67 -0
- package/templates/global/skills/PromptStructuring/positive-phrasing.md +206 -0
- package/templates/global/skills/PromptStructuring/xml-tags.md +330 -0
- package/{.claude → templates/global}/skills/React/SKILL.md +28 -8
- package/{.claude → templates/global}/skills/React/react-hook-form.md +20 -12
- package/{.claude → templates/global}/skills/React/tailwind-styled.md +29 -7
- package/{.claude → templates/global}/skills/React/tanstack-router.md +21 -9
- package/templates/project/agents/context-generator.md +66 -0
- package/{.claude → templates/project}/agents/project-task-manager.md +19 -7
- package/templates/project/skills/ContextGeneration/SKILL.md +160 -0
- package/templates/project/workflows/context-gen.yml +75 -0
- /package/{.claude → templates/global}/settings.json +0 -0
- /package/{.claude → templates/project}/hooks/task-loader.sh +0 -0
- /package/{.claude → templates/project}/project.env.example +0 -0
|
@@ -7,29 +7,31 @@ estimated_tokens: ~500
|
|
|
7
7
|
|
|
8
8
|
# 공통 코딩 원칙
|
|
9
9
|
|
|
10
|
+
<rules>
|
|
11
|
+
|
|
10
12
|
## 단일 책임 원칙 (SRP)
|
|
11
13
|
|
|
12
14
|
> **하나의 모듈/컴포넌트는 하나의 책임만 가진다.**
|
|
13
15
|
|
|
14
16
|
### 백엔드 레이어별 책임
|
|
15
17
|
|
|
16
|
-
| 레이어 | 책임 |
|
|
17
|
-
|
|
18
|
-
| **Entity** | 데이터 구조 정의 |
|
|
19
|
-
| **Repository** | 데이터 접근 |
|
|
20
|
-
| **Service** | 비즈니스 로직 |
|
|
21
|
-
| **Controller** | 요청 라우팅 |
|
|
22
|
-
| **DTO/Schema** | 데이터 전송 구조 |
|
|
18
|
+
| 레이어 | 책임 | 전담 영역 |
|
|
19
|
+
|--------|------|----------|
|
|
20
|
+
| **Entity** | 데이터 구조 정의 | 구조 정의에 집중 |
|
|
21
|
+
| **Repository** | 데이터 접근 | 데이터 접근에 집중 |
|
|
22
|
+
| **Service** | 비즈니스 로직 | 비즈니스 로직에 집중 |
|
|
23
|
+
| **Controller** | 요청 라우팅 | 요청/응답 처리에 집중 |
|
|
24
|
+
| **DTO/Schema** | 데이터 전송 구조 | 데이터 전송에 집중 |
|
|
23
25
|
|
|
24
26
|
### 프론트엔드 컴포넌트별 책임
|
|
25
27
|
|
|
26
|
-
| 유형 | 책임 |
|
|
27
|
-
|
|
28
|
-
| **Page** | 레이아웃, 데이터 fetch |
|
|
29
|
-
| **Container** | 상태 관리, API 호출 |
|
|
30
|
-
| **Presentational** | UI 렌더링 |
|
|
31
|
-
| **Hook** | 특정 로직 캡슐화 |
|
|
32
|
-
| **Store** | 전역 상태 |
|
|
28
|
+
| 유형 | 책임 | 전담 영역 |
|
|
29
|
+
|------|------|----------|
|
|
30
|
+
| **Page** | 레이아웃, 데이터 fetch | 레이아웃과 fetch에 집중 |
|
|
31
|
+
| **Container** | 상태 관리, API 호출 | 상태/API에 집중 |
|
|
32
|
+
| **Presentational** | UI 렌더링 | UI 렌더링에 집중 (props로 데이터 수신) |
|
|
33
|
+
| **Hook** | 특정 로직 캡슐화 | 단일 로직에 집중 |
|
|
34
|
+
| **Store** | 전역 상태 | 상태 관리에 집중 |
|
|
33
35
|
|
|
34
36
|
---
|
|
35
37
|
|
|
@@ -41,31 +43,45 @@ estimated_tokens: ~500
|
|
|
41
43
|
|
|
42
44
|
| 규칙 | 설명 |
|
|
43
45
|
|------|------|
|
|
44
|
-
|
|
|
45
|
-
| **상위
|
|
46
|
-
|
|
|
46
|
+
| **단방향 의존 유지** | A → B 단방향으로 유지 (순환 구조 대신) |
|
|
47
|
+
| **상위 모듈은 독립적으로 유지** | shared는 도메인 모듈과 독립 유지 |
|
|
48
|
+
| **인터페이스에 의존** | 구체 클래스 대신 추상화에 의존 |
|
|
47
49
|
| **공개 API 통해 접근** | index.ts를 통한 export만 사용 |
|
|
48
50
|
|
|
49
51
|
### 백엔드
|
|
50
52
|
|
|
53
|
+
<examples>
|
|
54
|
+
<example type="good">
|
|
51
55
|
```typescript
|
|
52
56
|
// 토큰 기반 주입 / 인터페이스 의존
|
|
53
57
|
@Inject(PRODUCT_REPOSITORY)
|
|
54
58
|
private readonly repository: IProductRepository
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
```
|
|
60
|
+
</example>
|
|
61
|
+
<example type="bad">
|
|
62
|
+
```typescript
|
|
63
|
+
// ❌ 구체 클래스 직접 의존
|
|
57
64
|
private readonly repository: ProductRepository
|
|
58
65
|
```
|
|
66
|
+
</example>
|
|
67
|
+
</examples>
|
|
59
68
|
|
|
60
69
|
### 프론트엔드
|
|
61
70
|
|
|
71
|
+
<examples>
|
|
72
|
+
<example type="good">
|
|
62
73
|
```typescript
|
|
63
74
|
// props로 의존성 전달
|
|
64
75
|
function ProductCard({ product, onAction }: Props) { ... }
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
```
|
|
77
|
+
</example>
|
|
78
|
+
<example type="bad">
|
|
79
|
+
```typescript
|
|
80
|
+
// ❌ Presentational에서 전역 상태 직접 접근
|
|
67
81
|
const action = useStore(s => s.action);
|
|
68
82
|
```
|
|
83
|
+
</example>
|
|
84
|
+
</examples>
|
|
69
85
|
|
|
70
86
|
---
|
|
71
87
|
|
|
@@ -99,7 +115,7 @@ src/
|
|
|
99
115
|
│ │ ├── product.dto.ts
|
|
100
116
|
│ │ └── product.module.ts
|
|
101
117
|
│ └── order/
|
|
102
|
-
└── shared/ # 공통 (
|
|
118
|
+
└── shared/ # 공통 (도메인 모듈과 독립 유지)
|
|
103
119
|
```
|
|
104
120
|
|
|
105
121
|
```
|
|
@@ -109,20 +125,26 @@ src/
|
|
|
109
125
|
│ │ ├── ProductCard.tsx
|
|
110
126
|
│ │ ├── ProductList.tsx
|
|
111
127
|
│ │ └── index.ts
|
|
112
|
-
│ └── common/ # 공통 (
|
|
128
|
+
│ └── common/ # 공통 (도메인과 독립 유지)
|
|
113
129
|
├── hooks/ # 도메인별 hook
|
|
114
130
|
├── store/ # 전역 상태
|
|
115
131
|
└── shared/ # 유틸리티
|
|
116
132
|
```
|
|
117
133
|
|
|
134
|
+
</rules>
|
|
135
|
+
|
|
118
136
|
---
|
|
119
137
|
|
|
138
|
+
<rules>
|
|
139
|
+
|
|
120
140
|
## 가독성 규칙
|
|
121
141
|
|
|
122
142
|
### try-catch vs then-catch
|
|
123
143
|
|
|
124
144
|
> **Promise 처리 시 `then-catch` 패턴을 사용한다.**
|
|
125
145
|
|
|
146
|
+
<examples>
|
|
147
|
+
<example type="bad">
|
|
126
148
|
```typescript
|
|
127
149
|
// ❌ try-catch (가독성 저하)
|
|
128
150
|
async function fetchUser(id: string) {
|
|
@@ -133,7 +155,10 @@ async function fetchUser(id: string) {
|
|
|
133
155
|
throw new NotFoundException('User not found');
|
|
134
156
|
}
|
|
135
157
|
}
|
|
136
|
-
|
|
158
|
+
```
|
|
159
|
+
</example>
|
|
160
|
+
<example type="good">
|
|
161
|
+
```typescript
|
|
137
162
|
// ✅ then-catch (가독성 향상)
|
|
138
163
|
function fetchUser(id: string) {
|
|
139
164
|
return userService.findById(id)
|
|
@@ -143,17 +168,24 @@ function fetchUser(id: string) {
|
|
|
143
168
|
});
|
|
144
169
|
}
|
|
145
170
|
```
|
|
171
|
+
</example>
|
|
172
|
+
</examples>
|
|
146
173
|
|
|
147
174
|
### 삼항연산자 규칙
|
|
148
175
|
|
|
149
|
-
> **삼항연산자에서 인자가 2개 이상인
|
|
176
|
+
> **삼항연산자에서 인자가 2개 이상인 함수 호출은 변수로 분리한다.**
|
|
150
177
|
|
|
178
|
+
<examples>
|
|
179
|
+
<example type="bad">
|
|
151
180
|
```typescript
|
|
152
181
|
// ❌ 삼항연산자 내 복잡한 함수 호출
|
|
153
182
|
const result = isAdmin
|
|
154
183
|
? processAdminData(data, options, config)
|
|
155
184
|
: processUserData(data, options);
|
|
156
|
-
|
|
185
|
+
```
|
|
186
|
+
</example>
|
|
187
|
+
<example type="good">
|
|
188
|
+
```typescript
|
|
157
189
|
// ✅ 변수로 분리 후 사용
|
|
158
190
|
const processor = isAdmin ? processAdminData : processUserData;
|
|
159
191
|
const result = processor(data, options, config);
|
|
@@ -166,19 +198,27 @@ if (isAdmin) {
|
|
|
166
198
|
result = processUserData(data, options);
|
|
167
199
|
}
|
|
168
200
|
```
|
|
201
|
+
</example>
|
|
202
|
+
</examples>
|
|
169
203
|
|
|
170
204
|
**삼항연산자 허용 케이스:**
|
|
171
205
|
- 단순 값 선택: `const name = isKorean ? '홍길동' : 'John';`
|
|
172
206
|
- 인자 없는/1개 함수: `const value = isValid ? getValue() : getDefault();`
|
|
173
207
|
|
|
208
|
+
</rules>
|
|
209
|
+
|
|
174
210
|
---
|
|
175
211
|
|
|
212
|
+
<checklist>
|
|
213
|
+
|
|
176
214
|
## 코드 작성 시 체크리스트
|
|
177
215
|
|
|
178
216
|
- [ ] 이 파일의 책임은 하나인가?
|
|
179
|
-
- [ ] 다른 모듈에
|
|
217
|
+
- [ ] 다른 모듈에 불필요한 의존이 있는가? (있다면 제거)
|
|
180
218
|
- [ ] 관련 파일들이 같은 폴더에 있는가?
|
|
181
|
-
- [ ]
|
|
219
|
+
- [ ] 단방향 의존이 유지되는가?
|
|
182
220
|
- [ ] 공개 API(index.ts)를 통해 접근하는가?
|
|
183
221
|
- [ ] Promise 처리에 then-catch 패턴을 사용했는가?
|
|
184
|
-
- [ ] 삼항연산자에서 복잡한 함수 호출을
|
|
222
|
+
- [ ] 삼항연산자에서 복잡한 함수 호출을 변수로 분리했는가?
|
|
223
|
+
|
|
224
|
+
</checklist>
|
|
@@ -74,14 +74,16 @@ keywords: [관련 키워드]
|
|
|
74
74
|
|
|
75
75
|
| 축 | 검증 질문 | 예시 |
|
|
76
76
|
|----|----------|------|
|
|
77
|
-
| **기능 범위** | 기존 기능과 겹치거나
|
|
78
|
-
| **비즈니스 규칙** | 기존 규칙과 충돌하는 조건이
|
|
77
|
+
| **기능 범위** | 기존 기능과 겹치거나 모순되는 부분이 있는가? | 결제 기능이 이미 존재하는데 별도 결제 모듈 추가 |
|
|
78
|
+
| **비즈니스 규칙** | 기존 규칙과 충돌하는 조건이 있는가? | "주문 최소 금액 1만원" vs "0원 주문 허용" |
|
|
79
79
|
| **데이터 모델** | 기존 모델 구조와 호환되는가? | 필수 필드 제거, 타입 변경 |
|
|
80
80
|
| **UX 플로우** | 기존 사용자 플로우와 일관되는가? | 로그인 후 리다이렉트 경로 변경 |
|
|
81
|
-
| **기술 제약** | 아키텍처/기술 스택 제약을
|
|
81
|
+
| **기술 제약** | 아키텍처/기술 스택 제약을 준수하는가? | REST API에 GraphQL 엔드포인트 혼용 |
|
|
82
82
|
|
|
83
83
|
---
|
|
84
84
|
|
|
85
|
+
<checklist>
|
|
86
|
+
|
|
85
87
|
## 충돌 탐지 체크리스트
|
|
86
88
|
|
|
87
89
|
스펙 변경 시 아래 4가지 유형의 충돌을 확인합니다.
|
|
@@ -92,16 +94,18 @@ keywords: [관련 키워드]
|
|
|
92
94
|
|
|
93
95
|
### 2. 의존성 파괴
|
|
94
96
|
- 변경이 다른 기능의 전제 조건을 깨뜨리는 경우
|
|
95
|
-
- 예: 사용자 테이블 구조 변경
|
|
97
|
+
- 예: 사용자 테이블 구조 변경 -> 인증 모듈 파괴
|
|
96
98
|
|
|
97
99
|
### 3. 암묵적 충돌
|
|
98
100
|
- 명시되지 않았지만 전제가 변경되어 발생하는 충돌
|
|
99
|
-
- 예: 응답 포맷 변경
|
|
101
|
+
- 예: 응답 포맷 변경 -> 프론트엔드 파싱 실패
|
|
100
102
|
|
|
101
103
|
### 4. 데이터 불일치
|
|
102
104
|
- 같은 데이터를 다른 문서에서 다르게 정의
|
|
103
105
|
- 예: A 문서에서 "status: string", B 문서에서 "status: enum"
|
|
104
106
|
|
|
107
|
+
</checklist>
|
|
108
|
+
|
|
105
109
|
---
|
|
106
110
|
|
|
107
111
|
## 심각도 분류
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: Documentation
|
|
3
3
|
description: .claude 폴더 내 문서 생성/수정 시 사용. frontmatter 형식, Context/Skill/Agent 템플릿, 파일 분리 기준 제공.
|
|
4
4
|
keywords: [문서, 작성, CLAUDE.md, context, skill, agent, frontmatter, 템플릿]
|
|
5
|
-
estimated_tokens: ~
|
|
5
|
+
estimated_tokens: ~1200
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# .claude 문서 작성 스킬
|
|
@@ -119,10 +119,19 @@ estimated_tokens: ~300
|
|
|
119
119
|
|
|
120
120
|
(필요시 코드 블록, 상세 설명)
|
|
121
121
|
|
|
122
|
+
## 제약 사항
|
|
123
|
+
|
|
124
|
+
<constraints>
|
|
125
|
+
- 제약 1
|
|
126
|
+
- 제약 2
|
|
127
|
+
</constraints>
|
|
128
|
+
|
|
122
129
|
## 관련 파일
|
|
123
130
|
|
|
131
|
+
<reference>
|
|
124
132
|
- `path/to/related.md` - 설명
|
|
125
133
|
- `src/module/` - 관련 소스 코드
|
|
134
|
+
</reference>
|
|
126
135
|
```
|
|
127
136
|
|
|
128
137
|
### Skill 템플릿
|
|
@@ -139,25 +148,33 @@ estimated_tokens: ~400
|
|
|
139
148
|
|
|
140
149
|
## 핵심 역할
|
|
141
150
|
|
|
151
|
+
<instructions>
|
|
142
152
|
- 역할 1
|
|
143
153
|
- 역할 2
|
|
154
|
+
</instructions>
|
|
144
155
|
|
|
145
156
|
## 필수 준수 사항
|
|
146
157
|
|
|
158
|
+
<rules>
|
|
147
159
|
| 규칙 | 올바른 예 | 잘못된 예 |
|
|
148
160
|
|------|----------|----------|
|
|
149
161
|
| ... | ... | ... |
|
|
162
|
+
</rules>
|
|
150
163
|
|
|
151
164
|
## 코드 예제
|
|
152
165
|
|
|
166
|
+
<examples>
|
|
153
167
|
\`\`\`typescript
|
|
154
168
|
// 올바른 패턴
|
|
155
169
|
\`\`\`
|
|
170
|
+
</examples>
|
|
156
171
|
|
|
157
172
|
## 체크리스트
|
|
158
173
|
|
|
174
|
+
<checklist>
|
|
159
175
|
- [ ] 확인 항목 1
|
|
160
176
|
- [ ] 확인 항목 2
|
|
177
|
+
</checklist>
|
|
161
178
|
|
|
162
179
|
## 관련 문서
|
|
163
180
|
|
|
@@ -179,16 +196,19 @@ color: blue
|
|
|
179
196
|
|
|
180
197
|
# Agent 이름
|
|
181
198
|
|
|
199
|
+
<role>
|
|
182
200
|
## 역할
|
|
183
201
|
|
|
184
202
|
1. 첫 번째 역할
|
|
185
203
|
2. 두 번째 역할
|
|
204
|
+
</role>
|
|
186
205
|
|
|
187
206
|
## 언제 사용하는가
|
|
188
207
|
|
|
189
208
|
- 사용 시점 1
|
|
190
209
|
- 사용 시점 2
|
|
191
210
|
|
|
211
|
+
<instructions>
|
|
192
212
|
## 프로세스
|
|
193
213
|
|
|
194
214
|
### Step 1: 준비
|
|
@@ -196,7 +216,16 @@ color: blue
|
|
|
196
216
|
|
|
197
217
|
### Step 2: 실행
|
|
198
218
|
...
|
|
219
|
+
</instructions>
|
|
220
|
+
|
|
221
|
+
<constraints>
|
|
222
|
+
## 제약 사항
|
|
199
223
|
|
|
224
|
+
- 이 Agent는 A만 전담한다
|
|
225
|
+
- B 작업은 other-agent에 위임한다
|
|
226
|
+
</constraints>
|
|
227
|
+
|
|
228
|
+
<output_format>
|
|
200
229
|
## 출력 형식
|
|
201
230
|
|
|
202
231
|
\`\`\`markdown
|
|
@@ -205,6 +234,7 @@ color: blue
|
|
|
205
234
|
## 요약
|
|
206
235
|
...
|
|
207
236
|
\`\`\`
|
|
237
|
+
</output_format>
|
|
208
238
|
```
|
|
209
239
|
|
|
210
240
|
## 인덱스 파일 작성법
|
|
@@ -272,6 +302,43 @@ keywords:
|
|
|
272
302
|
- frontmatter 누락
|
|
273
303
|
- 모호한 keywords
|
|
274
304
|
|
|
305
|
+
## 프롬프트 구조화 (XML 태그)
|
|
306
|
+
|
|
307
|
+
문서에 XML 태그를 사용하면 Claude가 지시/규칙/제약을 정확히 구분하여 준수율이 높아집니다.
|
|
308
|
+
|
|
309
|
+
### 파일 유형별 권장 XML 태그
|
|
310
|
+
|
|
311
|
+
| 파일 유형 | 필수 태그 | 선택 태그 |
|
|
312
|
+
|----------|----------|----------|
|
|
313
|
+
| Agent | `<role>`, `<instructions>`, `<constraints>`, `<output_format>` | `<rules>`, `<examples>`, `<reference>` |
|
|
314
|
+
| Skill | `<instructions>`, `<rules>`, `<checklist>` | `<examples>`, `<constraints>`, `<reference>` |
|
|
315
|
+
| CLAUDE.md | `<workflow>`, `<delegation_rules>`, `<constraints>` | `<rules>`, `<reference>` |
|
|
316
|
+
| Hook | `<phase name="...">`, `<checklist>` | `<delegation_rules>`, `<rules>` |
|
|
317
|
+
|
|
318
|
+
### 긍정 표현 원칙
|
|
319
|
+
|
|
320
|
+
프롬프트는 부정 표현 대신 긍정 표현으로 작성합니다.
|
|
321
|
+
|
|
322
|
+
| 부정 표현 (비권장) | 긍정 표현 (권장) |
|
|
323
|
+
|-------------------|-----------------|
|
|
324
|
+
| "직접 수정하지 마라" | "모든 수정은 code-writer가 전담한다" |
|
|
325
|
+
| "Git 명령어 실행 금지" | "Git 작업은 git-manager에 위임한다" |
|
|
326
|
+
| "3개 이상 파일 수정 금지" | "파일 수정은 2개 이하만 직접 수행한다" |
|
|
327
|
+
|
|
328
|
+
- 제약은 "~만 한다", "~전용", "~전담" 형태로 표현
|
|
329
|
+
- 대안 행동을 구체적으로 명시 (무엇을 대신 해야 하는지)
|
|
330
|
+
|
|
331
|
+
### XML 태그 사용 규칙
|
|
332
|
+
|
|
333
|
+
1. **섹션 경계를 명확히**: 태그는 논리적 블록 단위로 감싼다
|
|
334
|
+
2. **중첩 최소화**: 2단계 이상 중첩은 지양한다
|
|
335
|
+
3. **태그 이름 통일**: 위 테이블의 태그명을 일관되게 사용한다
|
|
336
|
+
4. **Markdown과 병행**: 태그 안에서 Markdown 서식을 그대로 사용한다
|
|
337
|
+
|
|
338
|
+
> 상세 가이드: `.claude/skills/PromptStructuring/`
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
275
342
|
## 체크리스트
|
|
276
343
|
|
|
277
344
|
### 새 파일 작성 시
|
|
@@ -14,6 +14,8 @@ estimated_tokens: ~100
|
|
|
14
14
|
- PR/MR 코드 리뷰
|
|
15
15
|
- 리뷰 피드백 반영
|
|
16
16
|
|
|
17
|
+
<reference>
|
|
18
|
+
|
|
17
19
|
## 관련 문서
|
|
18
20
|
|
|
19
21
|
| 주제 | 위치 | 설명 |
|
|
@@ -22,6 +24,8 @@ estimated_tokens: ~100
|
|
|
22
24
|
| PR 리뷰 | `pr-review.md` | 체크리스트 기반 코드 리뷰 워크플로우 |
|
|
23
25
|
| PR 피드백 적용 | `pr-apply.md` | 리뷰 피드백 분류 및 반영 방법 |
|
|
24
26
|
|
|
27
|
+
</reference>
|
|
28
|
+
|
|
25
29
|
## 빠른 참조
|
|
26
30
|
|
|
27
31
|
### Commit PREFIX
|
|
@@ -45,10 +49,10 @@ estimated_tokens: ~100
|
|
|
45
49
|
|
|
46
50
|
| 섹션 | 설명 |
|
|
47
51
|
|------|------|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
+
| Summary | 핵심 변경 1-2문장 요약 |
|
|
53
|
+
| 주요 변경사항 | 파일별 변경 내용 |
|
|
54
|
+
| 사이드 이펙트 | 다른 영역 영향 분석 |
|
|
55
|
+
| 변경 흐름 | mermaid 다이어그램 (선택) |
|
|
52
56
|
|
|
53
57
|
### PR 워크플로우
|
|
54
58
|
|
|
@@ -7,6 +7,8 @@ estimated_tokens: ~600
|
|
|
7
7
|
|
|
8
8
|
# Git 작업 가이드
|
|
9
9
|
|
|
10
|
+
<rules>
|
|
11
|
+
|
|
10
12
|
## Commit 메시지
|
|
11
13
|
|
|
12
14
|
### 형식
|
|
@@ -34,7 +36,7 @@ Co-Authored-By: Claude <noreply@anthropic.com>
|
|
|
34
36
|
### 작성 원칙
|
|
35
37
|
|
|
36
38
|
- **한글 사용**, 50자 이내
|
|
37
|
-
- **현재형**: "추가함"
|
|
39
|
+
- **현재형**: "추가함" 대신 "추가"
|
|
38
40
|
- **Why 중심**: 무엇보다 왜 변경했는지
|
|
39
41
|
|
|
40
42
|
### Commit 단위
|
|
@@ -43,6 +45,8 @@ Co-Authored-By: Claude <noreply@anthropic.com>
|
|
|
43
45
|
- 각 커밋 후 빌드 에러 없음
|
|
44
46
|
- 되돌리기 용이한 단위
|
|
45
47
|
|
|
48
|
+
</rules>
|
|
49
|
+
|
|
46
50
|
---
|
|
47
51
|
|
|
48
52
|
## 브랜치 전략
|
|
@@ -56,6 +60,8 @@ chore/{작업명} # 설정/빌드
|
|
|
56
60
|
|
|
57
61
|
---
|
|
58
62
|
|
|
63
|
+
<instructions>
|
|
64
|
+
|
|
59
65
|
## PR (Pull Request) 생성
|
|
60
66
|
|
|
61
67
|
### Step 1: 변경사항 분석
|
|
@@ -121,11 +127,11 @@ grep -r "import.*변경된함수명" --include="*.ts" --include="*.tsx"
|
|
|
121
127
|
### Step 4: PR 본문 작성
|
|
122
128
|
|
|
123
129
|
```markdown
|
|
124
|
-
##
|
|
130
|
+
## Summary
|
|
125
131
|
|
|
126
132
|
> 이 PR이 해결하는 문제와 접근 방식을 1-2문장으로 설명
|
|
127
133
|
|
|
128
|
-
##
|
|
134
|
+
## 주요 변경사항
|
|
129
135
|
|
|
130
136
|
### [변경 제목 1]
|
|
131
137
|
**파일:** `path/to/file.ts`
|
|
@@ -135,7 +141,7 @@ grep -r "import.*변경된함수명" --include="*.ts" --include="*.tsx"
|
|
|
135
141
|
**파일:** `path/to/file.ts`
|
|
136
142
|
- 변경 내용 설명
|
|
137
143
|
|
|
138
|
-
##
|
|
144
|
+
## 사이드 이펙트
|
|
139
145
|
|
|
140
146
|
> 이 변경으로 인해 다른 부분에 발생할 수 있는 영향
|
|
141
147
|
|
|
@@ -143,7 +149,7 @@ grep -r "import.*변경된함수명" --include="*.ts" --include="*.tsx"
|
|
|
143
149
|
|---------------|----------|--------|
|
|
144
150
|
| 없음 | - | - |
|
|
145
151
|
|
|
146
|
-
##
|
|
152
|
+
## 변경 흐름
|
|
147
153
|
|
|
148
154
|
```mermaid
|
|
149
155
|
graph LR
|
|
@@ -166,20 +172,24 @@ EOF
|
|
|
166
172
|
)"
|
|
167
173
|
```
|
|
168
174
|
|
|
175
|
+
</instructions>
|
|
176
|
+
|
|
169
177
|
---
|
|
170
178
|
|
|
171
|
-
|
|
179
|
+
<rules>
|
|
172
180
|
|
|
173
|
-
|
|
181
|
+
## Git 명령어 안전 규칙
|
|
174
182
|
|
|
175
|
-
|
|
183
|
+
### 사용 제한 명령어
|
|
184
|
+
|
|
185
|
+
| 명령어 | 대안 |
|
|
176
186
|
|--------|------|
|
|
177
|
-
| `git add -A`, `git add .` |
|
|
178
|
-
| `git push --force` |
|
|
179
|
-
| `git reset --hard` |
|
|
180
|
-
| `--no-verify` | hook
|
|
187
|
+
| `git add -A`, `git add .` | 파일을 지정하여 `git add path/to/file` 사용 |
|
|
188
|
+
| `git push --force` | `git push` 또는 `--force-with-lease` 사용 |
|
|
189
|
+
| `git reset --hard` | `git stash` 또는 `git checkout -- file` 사용 |
|
|
190
|
+
| `--no-verify` | hook을 통과하도록 코드 수정 |
|
|
181
191
|
|
|
182
|
-
### 권장
|
|
192
|
+
### 권장 패턴
|
|
183
193
|
|
|
184
194
|
```bash
|
|
185
195
|
# 파일 지정하여 add
|
|
@@ -196,8 +206,12 @@ EOF
|
|
|
196
206
|
)"
|
|
197
207
|
```
|
|
198
208
|
|
|
209
|
+
</rules>
|
|
210
|
+
|
|
199
211
|
---
|
|
200
212
|
|
|
213
|
+
<checklist>
|
|
214
|
+
|
|
201
215
|
## PR 생성 전 체크리스트
|
|
202
216
|
|
|
203
217
|
- [ ] `lint` 통과
|
|
@@ -207,8 +221,12 @@ EOF
|
|
|
207
221
|
- [ ] 영향 범위 분석 완료
|
|
208
222
|
- [ ] Breaking change 명시 (해당시)
|
|
209
223
|
|
|
224
|
+
</checklist>
|
|
225
|
+
|
|
210
226
|
---
|
|
211
227
|
|
|
228
|
+
<instructions>
|
|
229
|
+
|
|
212
230
|
## PR 생성 후 워크플로우
|
|
213
231
|
|
|
214
232
|
### Step 6: Self PR Review
|
|
@@ -227,15 +245,19 @@ gh pr view <PR번호>
|
|
|
227
245
|
|
|
228
246
|
| 항목 | 확인 |
|
|
229
247
|
|------|------|
|
|
230
|
-
| 불필요한 코드/주석 제거 |
|
|
231
|
-
| 디버그 코드 제거 (console.log 등) |
|
|
232
|
-
| 하드코딩된 값
|
|
233
|
-
| 타입 안전성 확인 |
|
|
234
|
-
| 에러 핸들링 적절함 |
|
|
235
|
-
| 네이밍 컨벤션 준수 |
|
|
248
|
+
| 불필요한 코드/주석 제거 | |
|
|
249
|
+
| 디버그 코드 제거 (console.log 등) | |
|
|
250
|
+
| 하드코딩된 값 확인 | |
|
|
251
|
+
| 타입 안전성 확인 | |
|
|
252
|
+
| 에러 핸들링 적절함 | |
|
|
253
|
+
| 네이밍 컨벤션 준수 | |
|
|
254
|
+
|
|
255
|
+
<reference>
|
|
236
256
|
|
|
237
257
|
> 상세 체크리스트: `.claude/skills/Git/pr-review.md`
|
|
238
258
|
|
|
259
|
+
</reference>
|
|
260
|
+
|
|
239
261
|
**Self Review 이슈 발견 시:**
|
|
240
262
|
|
|
241
263
|
```bash
|
|
@@ -287,30 +309,40 @@ git push
|
|
|
287
309
|
gh pr comment <PR번호> --body "리뷰 피드백 반영 완료. 재확인 부탁드립니다."
|
|
288
310
|
```
|
|
289
311
|
|
|
312
|
+
<reference>
|
|
313
|
+
|
|
290
314
|
> 상세 가이드: `.claude/skills/Git/pr-apply.md`
|
|
291
315
|
|
|
316
|
+
</reference>
|
|
317
|
+
|
|
318
|
+
</instructions>
|
|
319
|
+
|
|
292
320
|
---
|
|
293
321
|
|
|
294
322
|
## 전체 PR 워크플로우 요약
|
|
295
323
|
|
|
296
324
|
```mermaid
|
|
297
325
|
graph TD
|
|
298
|
-
A[
|
|
299
|
-
B --> C[
|
|
300
|
-
C --> D[
|
|
301
|
-
D --> E[
|
|
302
|
-
E --> F[
|
|
303
|
-
F -->|이슈 발견| G[
|
|
326
|
+
A[변경사항 분석] --> B[영향 범위 분석]
|
|
327
|
+
B --> C[영향 판단]
|
|
328
|
+
C --> D[PR 본문 작성]
|
|
329
|
+
D --> E[PR 생성]
|
|
330
|
+
E --> F[Self PR Review]
|
|
331
|
+
F -->|이슈 발견| G[수정 & Push]
|
|
304
332
|
G --> F
|
|
305
|
-
F -->|OK| H[
|
|
306
|
-
H -->|피드백| I[
|
|
333
|
+
F -->|OK| H[팀원 리뷰 대기]
|
|
334
|
+
H -->|피드백| I[PR Apply Mode]
|
|
307
335
|
I --> H
|
|
308
|
-
H -->|Approve| J[
|
|
336
|
+
H -->|Approve| J[Merge]
|
|
309
337
|
```
|
|
310
338
|
|
|
339
|
+
<reference>
|
|
340
|
+
|
|
311
341
|
### 관련 Skill 참조
|
|
312
342
|
|
|
313
343
|
| 단계 | Skill |
|
|
314
344
|
|------|-------|
|
|
315
345
|
| PR Review | `.claude/skills/Git/pr-review.md` |
|
|
316
346
|
| PR Apply | `.claude/skills/Git/pr-apply.md` |
|
|
347
|
+
|
|
348
|
+
</reference>
|
|
@@ -10,6 +10,8 @@ user-invocable: true
|
|
|
10
10
|
|
|
11
11
|
PR 리뷰 피드백을 코드에 반영하는 가이드.
|
|
12
12
|
|
|
13
|
+
<instructions>
|
|
14
|
+
|
|
13
15
|
## Apply Workflow
|
|
14
16
|
|
|
15
17
|
### Step 1: 리뷰 피드백 확인
|
|
@@ -58,6 +60,10 @@ git push origin feature/branch-name
|
|
|
58
60
|
gh pr comment <PR번호> --body "리뷰 피드백 반영 완료했습니다. 재확인 부탁드립니다."
|
|
59
61
|
```
|
|
60
62
|
|
|
63
|
+
</instructions>
|
|
64
|
+
|
|
65
|
+
<rules>
|
|
66
|
+
|
|
61
67
|
## 피드백 대응 원칙
|
|
62
68
|
|
|
63
69
|
### 수용할 때
|
|
@@ -77,11 +83,17 @@ gh pr comment <PR번호> --body "리뷰 피드백 반영 완료했습니다. 재
|
|
|
77
83
|
- 해당 코멘트에 직접 답변
|
|
78
84
|
- 필요시 코드에 주석 추가
|
|
79
85
|
|
|
86
|
+
</rules>
|
|
87
|
+
|
|
88
|
+
<checklist>
|
|
89
|
+
|
|
80
90
|
## 체크리스트
|
|
81
91
|
|
|
82
|
-
- [ ] 모든 Critical
|
|
83
|
-
- [ ] Suggestion
|
|
84
|
-
- [ ] Question
|
|
85
|
-
- [ ] `lint`
|
|
86
|
-
- [ ] `build`
|
|
87
|
-
- [ ] 리뷰어에게
|
|
92
|
+
- [ ] 모든 Critical 피드백을 반영했는가?
|
|
93
|
+
- [ ] Suggestion을 검토하고 결정했는가?
|
|
94
|
+
- [ ] Question에 답변을 완료했는가?
|
|
95
|
+
- [ ] `lint` 통과하는가?
|
|
96
|
+
- [ ] `build` 성공하는가?
|
|
97
|
+
- [ ] 리뷰어에게 재확인을 요청했는가?
|
|
98
|
+
|
|
99
|
+
</checklist>
|
|
@@ -10,6 +10,8 @@ user-invocable: true
|
|
|
10
10
|
|
|
11
11
|
체크리스트 기반 Pull Request 리뷰.
|
|
12
12
|
|
|
13
|
+
<instructions>
|
|
14
|
+
|
|
13
15
|
## Review Workflow
|
|
14
16
|
|
|
15
17
|
### Step 1: Review Plan 작성
|
|
@@ -58,6 +60,8 @@ user-invocable: true
|
|
|
58
60
|
### Highlights (좋은 점)
|
|
59
61
|
```
|
|
60
62
|
|
|
63
|
+
</instructions>
|
|
64
|
+
|
|
61
65
|
## PR 타입별 Focus
|
|
62
66
|
|
|
63
67
|
| Type | Focus Areas |
|