@su-record/vibe 0.4.8 → 1.0.0
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/.claude/agents/explorer.md +48 -0
- package/.claude/agents/implementer.md +53 -0
- package/.claude/agents/tester.md +49 -0
- package/.claude/commands/vibe.run.md +130 -5
- package/.claude/commands/vibe.spec.md +66 -4
- package/.claude/commands/vibe.verify.md +102 -114
- package/.claude/{settings.local.json → settings.json} +3 -1
- package/CLAUDE.md +17 -0
- package/README.md +10 -3
- package/bin/vibe +287 -21
- package/package.json +1 -1
- package/templates/feature-template.md +22 -211
- package/templates/hooks-template.json +90 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Explorer Agent (Haiku 4.5)
|
|
2
|
+
|
|
3
|
+
코드베이스 탐색 전문 서브에이전트입니다.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- 코드베이스 분석
|
|
8
|
+
- 파일/패턴 검색
|
|
9
|
+
- 의존성 확인
|
|
10
|
+
- 관련 코드 수집
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Haiku 4.5** - 빠른 탐색에 최적화
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
Task 도구로 호출:
|
|
19
|
+
```
|
|
20
|
+
Task(model: "haiku", subagent_type: "Explore")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Process
|
|
24
|
+
|
|
25
|
+
1. 프로젝트 구조 파악
|
|
26
|
+
2. 관련 파일 검색 (Glob, Grep)
|
|
27
|
+
3. 코드 읽기 및 분석
|
|
28
|
+
4. 패턴/컨벤션 파악
|
|
29
|
+
5. 결과 요약 반환
|
|
30
|
+
|
|
31
|
+
## Output
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
## 탐색 결과
|
|
35
|
+
|
|
36
|
+
### 관련 파일
|
|
37
|
+
- src/components/Button.tsx (UI 컴포넌트)
|
|
38
|
+
- src/hooks/useAuth.ts (인증 훅)
|
|
39
|
+
|
|
40
|
+
### 발견된 패턴
|
|
41
|
+
- 컴포넌트: 함수형 + TypeScript
|
|
42
|
+
- 상태관리: Zustand 사용
|
|
43
|
+
- 스타일: Tailwind CSS
|
|
44
|
+
|
|
45
|
+
### 의존성
|
|
46
|
+
- react: ^18.2.0
|
|
47
|
+
- zustand: ^4.4.0
|
|
48
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Implementer Agent (Sonnet 4)
|
|
2
|
+
|
|
3
|
+
핵심 구현 전문 서브에이전트입니다.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- 코드 구현
|
|
8
|
+
- 파일 생성/수정
|
|
9
|
+
- 리팩토링
|
|
10
|
+
- 버그 수정
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Sonnet 4** - 구현 품질과 속도의 균형
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
Task 도구로 호출:
|
|
19
|
+
```
|
|
20
|
+
Task(model: "sonnet", prompt: "SPEC에 따라 구현하세요")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Rules Reference
|
|
24
|
+
|
|
25
|
+
반드시 `.vibe/rules/` 규칙을 따릅니다:
|
|
26
|
+
- `core/development-philosophy.md` - 수술적 정밀도
|
|
27
|
+
- `standards/complexity-metrics.md` - 함수 ≤20줄, 중첩 ≤3단계
|
|
28
|
+
- `quality/checklist.md` - 품질 체크리스트
|
|
29
|
+
|
|
30
|
+
## Process
|
|
31
|
+
|
|
32
|
+
1. SPEC 및 탐색 결과 확인
|
|
33
|
+
2. 구현 계획 수립
|
|
34
|
+
3. 코드 작성 (Edit/Write)
|
|
35
|
+
4. 자체 검증
|
|
36
|
+
5. 결과 반환
|
|
37
|
+
|
|
38
|
+
## Output
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
## 구현 결과
|
|
42
|
+
|
|
43
|
+
### 생성된 파일
|
|
44
|
+
- src/components/LoginForm.tsx ✅
|
|
45
|
+
- src/hooks/useLogin.ts ✅
|
|
46
|
+
|
|
47
|
+
### 수정된 파일
|
|
48
|
+
- src/App.tsx (라우트 추가)
|
|
49
|
+
|
|
50
|
+
### 검증
|
|
51
|
+
- TypeScript 컴파일: ✅
|
|
52
|
+
- 린트: ✅
|
|
53
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Tester Agent (Haiku 4.5)
|
|
2
|
+
|
|
3
|
+
테스트 작성 전문 서브에이전트입니다.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- 테스트 코드 작성
|
|
8
|
+
- BDD Feature 기반 테스트
|
|
9
|
+
- 엣지 케이스 검증
|
|
10
|
+
- 테스트 실행
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
**Haiku 4.5** - 빠른 테스트 생성
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
Task 도구로 호출:
|
|
19
|
+
```
|
|
20
|
+
Task(model: "haiku", prompt: "구현된 코드의 테스트를 작성하세요")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Process
|
|
24
|
+
|
|
25
|
+
1. `.vibe/features/{기능명}.feature` 확인
|
|
26
|
+
2. 구현된 코드 분석
|
|
27
|
+
3. 테스트 케이스 작성
|
|
28
|
+
4. 테스트 실행
|
|
29
|
+
5. 결과 반환
|
|
30
|
+
|
|
31
|
+
## Output
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
## 테스트 결과
|
|
35
|
+
|
|
36
|
+
### 생성된 테스트
|
|
37
|
+
- src/__tests__/LoginForm.test.tsx
|
|
38
|
+
- src/__tests__/useLogin.test.ts
|
|
39
|
+
|
|
40
|
+
### 커버리지
|
|
41
|
+
- Statements: 85%
|
|
42
|
+
- Branches: 80%
|
|
43
|
+
- Functions: 90%
|
|
44
|
+
|
|
45
|
+
### 실행 결과
|
|
46
|
+
✅ 12 passed
|
|
47
|
+
⏭️ 0 skipped
|
|
48
|
+
❌ 0 failed
|
|
49
|
+
```
|
|
@@ -5,7 +5,7 @@ argument-hint: "feature name" or --phase N
|
|
|
5
5
|
|
|
6
6
|
# /vibe.run
|
|
7
7
|
|
|
8
|
-
SPEC을 기반으로 구현합니다 (Implementation Agent).
|
|
8
|
+
SPEC을 기반으로 구현합니다 (Implementation Agent with Multi-Model Orchestration).
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
@@ -28,9 +28,92 @@ PTCF 구조의 SPEC 문서를 읽고 바로 구현을 실행합니다.
|
|
|
28
28
|
|
|
29
29
|
> **PLAN, TASKS 문서 불필요** - SPEC이 곧 실행 가능한 프롬프트
|
|
30
30
|
|
|
31
|
+
## 모델 오케스트레이션
|
|
32
|
+
|
|
33
|
+
작업 유형에 따라 최적의 모델을 자동 선택합니다:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
37
|
+
│ Opus 4.5 (오케스트레이터) │
|
|
38
|
+
│ - 전체 흐름 조율 │
|
|
39
|
+
│ - 최종 결정/검토 │
|
|
40
|
+
└─────────────────────────┬───────────────────────────────────┘
|
|
41
|
+
│
|
|
42
|
+
┌─────────────────────┼─────────────────────┐
|
|
43
|
+
↓ ↓ ↓
|
|
44
|
+
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
45
|
+
│ Haiku │ │ Sonnet │ │ Haiku │
|
|
46
|
+
│ (탐색) │ │ (구현) │ │(테스트) │
|
|
47
|
+
└─────────┘ └─────────┘ └─────────┘
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 역할별 Task 호출
|
|
51
|
+
|
|
52
|
+
| 작업 유형 | 모델 | Task 파라미터 |
|
|
53
|
+
|----------|------|---------------|
|
|
54
|
+
| 코드베이스 탐색 | Haiku 4.5 | `model: "haiku"` |
|
|
55
|
+
| 핵심 구현 | Sonnet 4 | `model: "sonnet"` |
|
|
56
|
+
| 테스트 작성 | Haiku 4.5 | `model: "haiku"` |
|
|
57
|
+
| 아키텍처 결정 | Opus 4.5 | 메인 세션 |
|
|
58
|
+
| 최종 검토 | Opus 4.5 | 메인 세션 |
|
|
59
|
+
|
|
60
|
+
### 외부 LLM 활용 (활성화 시)
|
|
61
|
+
|
|
62
|
+
`.vibe/config.json`에서 외부 LLM이 활성화된 경우:
|
|
63
|
+
|
|
64
|
+
| 역할 | 모델 | 조건 |
|
|
65
|
+
|------|------|------|
|
|
66
|
+
| 아키텍처/디버깅 | GPT 5.2 | `vibe gpt <key>` 실행 시 |
|
|
67
|
+
| UI/UX 설계 | Gemini 3 | `vibe gemini <key>` 실행 시 |
|
|
68
|
+
|
|
69
|
+
외부 LLM 활성화 시 해당 역할은 MCP를 통해 자동 호출됩니다:
|
|
70
|
+
- `mcp__vibe-gpt__chat` - GPT 5.2 아키텍처 자문
|
|
71
|
+
- `mcp__vibe-gemini__chat` - Gemini 3 UI/UX 자문
|
|
72
|
+
|
|
73
|
+
## 시맨틱 코드 분석 (hi-ai MCP)
|
|
74
|
+
|
|
75
|
+
구현 전 코드베이스를 정확히 파악하기 위해 hi-ai MCP의 시맨틱 도구를 활용합니다:
|
|
76
|
+
|
|
77
|
+
| MCP 도구 | 용도 | 활용 시점 |
|
|
78
|
+
|----------|------|----------|
|
|
79
|
+
| `mcp__vibe__find_symbol` | 심볼 정의 찾기 | 클래스/함수 위치 파악 |
|
|
80
|
+
| `mcp__vibe__find_references` | 참조 찾기 | 영향 범위 분석 |
|
|
81
|
+
| `mcp__vibe__analyze_complexity` | 복잡도 분석 | 리팩토링 필요 여부 판단 |
|
|
82
|
+
| `mcp__vibe__validate_code_quality` | 품질 검증 | 구현 후 품질 확인 |
|
|
83
|
+
|
|
84
|
+
### 시맨틱 분석 흐름
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
구현 시작
|
|
88
|
+
│
|
|
89
|
+
├─→ find_symbol: 수정할 함수/클래스 정확한 위치 파악
|
|
90
|
+
│
|
|
91
|
+
├─→ find_references: 해당 심볼을 사용하는 모든 곳 확인
|
|
92
|
+
│
|
|
93
|
+
├─→ analyze_complexity: 기존 코드 복잡도 확인
|
|
94
|
+
│
|
|
95
|
+
↓
|
|
96
|
+
구현 (영향 범위를 정확히 파악한 상태에서)
|
|
97
|
+
│
|
|
98
|
+
↓
|
|
99
|
+
validate_code_quality: 구현 후 품질 검증
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 컨텍스트 관리 (세션 연속성)
|
|
103
|
+
|
|
104
|
+
| MCP 도구 | 용도 |
|
|
105
|
+
|----------|------|
|
|
106
|
+
| `mcp__vibe__start_session` | 세션 시작, 이전 컨텍스트 복원 |
|
|
107
|
+
| `mcp__vibe__auto_save_context` | 현재 상태 자동 저장 |
|
|
108
|
+
| `mcp__vibe__restore_session_context` | 이전 세션 컨텍스트 복원 |
|
|
109
|
+
| `mcp__vibe__save_memory` | 중요 결정사항/패턴 저장 |
|
|
110
|
+
|
|
111
|
+
**세션 시작 시**: `mcp__vibe__start_session`으로 이전 컨텍스트 자동 복원
|
|
112
|
+
**세션 종료 시**: Hook이 `mcp__vibe__auto_save_context` 자동 실행
|
|
113
|
+
|
|
31
114
|
## Process
|
|
32
115
|
|
|
33
|
-
### 1. SPEC 읽기
|
|
116
|
+
### 1. SPEC 및 설정 읽기
|
|
34
117
|
|
|
35
118
|
`.vibe/specs/{기능명}.md` 파싱:
|
|
36
119
|
|
|
@@ -43,18 +126,60 @@ PTCF 구조의 SPEC 문서를 읽고 바로 구현을 실행합니다.
|
|
|
43
126
|
| `<output_format>` | 생성/수정할 파일 |
|
|
44
127
|
| `<acceptance>` | 검증 기준 |
|
|
45
128
|
|
|
129
|
+
`.vibe/config.json` 확인:
|
|
130
|
+
- 외부 LLM 활성화 여부 (`models.gpt.enabled`, `models.gemini.enabled`)
|
|
131
|
+
|
|
46
132
|
### 2. Feature 파일 확인
|
|
47
133
|
|
|
48
134
|
`.vibe/features/{기능명}.feature`:
|
|
49
135
|
- BDD Scenarios 확인
|
|
50
136
|
- 테스트 케이스로 활용
|
|
51
137
|
|
|
52
|
-
### 3. Phase별 구현
|
|
138
|
+
### 3. Phase별 구현 (Task 병렬 호출)
|
|
53
139
|
|
|
54
140
|
`<task>` 섹션의 Phase 순서대로:
|
|
55
141
|
|
|
56
|
-
|
|
57
|
-
|
|
142
|
+
```
|
|
143
|
+
Phase 시작
|
|
144
|
+
│
|
|
145
|
+
├─→ Task(haiku): 코드베이스 분석
|
|
146
|
+
│ "관련 파일과 패턴을 분석하세요"
|
|
147
|
+
│
|
|
148
|
+
├─→ [GPT 활성화 시] MCP(vibe-gpt): 아키텍처 검토
|
|
149
|
+
│ "이 설계가 적절한지 검토해주세요"
|
|
150
|
+
│
|
|
151
|
+
├─→ [Gemini 활성화 시] MCP(vibe-gemini): UI/UX 자문
|
|
152
|
+
│ "UI 구현 방향을 제안해주세요"
|
|
153
|
+
│
|
|
154
|
+
↓
|
|
155
|
+
Opus: 분석 결과 종합, 구현 방향 결정
|
|
156
|
+
│
|
|
157
|
+
↓
|
|
158
|
+
Task(sonnet): 핵심 구현
|
|
159
|
+
"SPEC에 따라 코드를 구현하세요"
|
|
160
|
+
│
|
|
161
|
+
↓
|
|
162
|
+
Task(haiku): 테스트 작성
|
|
163
|
+
"구현된 코드의 테스트를 작성하세요"
|
|
164
|
+
│
|
|
165
|
+
↓
|
|
166
|
+
Opus: 최종 검토 및 다음 Phase
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**병렬 실행 예시:**
|
|
170
|
+
```javascript
|
|
171
|
+
// 독립적인 작업은 병렬로 Task 호출
|
|
172
|
+
Task(haiku) - 코드 분석
|
|
173
|
+
Task(haiku) - 의존성 확인
|
|
174
|
+
// → 동시 실행
|
|
175
|
+
|
|
176
|
+
// 순차적 작업
|
|
177
|
+
Task(sonnet) - 구현 (분석 완료 후)
|
|
178
|
+
Task(haiku) - 테스트 (구현 완료 후)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
1. **관련 코드 분석**: Task(haiku)로 `<context>`의 관련 코드 탐색
|
|
182
|
+
2. **파일 생성/수정**: Task(sonnet)로 `<output_format>` 기준 구현
|
|
58
183
|
3. **제약 조건 준수**: `<constraints>` 확인
|
|
59
184
|
4. **검증 실행**: 검증 명령어 실행
|
|
60
185
|
|
|
@@ -26,6 +26,34 @@ SPEC 문서를 작성합니다 (Specification Agent).
|
|
|
26
26
|
|
|
27
27
|
> **PTCF**: Persona, Task, Context, Format - Google Gemini 프롬프트 최적화 프레임워크
|
|
28
28
|
|
|
29
|
+
## 외부 LLM 연동 (선택적)
|
|
30
|
+
|
|
31
|
+
`.vibe/config.json`에서 외부 LLM이 활성화된 경우 SPEC 작성 시 자동 활용:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
/vibe.spec "복잡한 기능"
|
|
35
|
+
↓
|
|
36
|
+
[Claude Opus] SPEC 초안 작성
|
|
37
|
+
↓
|
|
38
|
+
[GPT 활성화?] → MCP(vibe-gpt)로 설계 교차 검토
|
|
39
|
+
↓
|
|
40
|
+
[Gemini 활성화?] → MCP(vibe-gemini)로 UI/UX 자문
|
|
41
|
+
↓
|
|
42
|
+
[Claude] 최종 SPEC 확정
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
| 외부 LLM | 역할 | 활용 시점 |
|
|
46
|
+
|----------|------|----------|
|
|
47
|
+
| GPT 5.2 | 아키텍처/설계 검토 | SPEC 초안 완성 후 |
|
|
48
|
+
| Gemini 3 | UI/UX 자문 | 디자인 레퍼런스 논의 시 |
|
|
49
|
+
|
|
50
|
+
**활성화 방법:**
|
|
51
|
+
```bash
|
|
52
|
+
vibe gpt <api-key> # GPT 활성화
|
|
53
|
+
vibe gemini <api-key> # Gemini 활성화
|
|
54
|
+
vibe status # 현재 설정 확인
|
|
55
|
+
```
|
|
56
|
+
|
|
29
57
|
## Process
|
|
30
58
|
|
|
31
59
|
### 1. 프로젝트 분석
|
|
@@ -134,11 +162,45 @@ SPEC 문서를 작성합니다 (Specification Agent).
|
|
|
134
162
|
</acceptance>
|
|
135
163
|
```
|
|
136
164
|
|
|
137
|
-
### 4. Feature 파일 생성 (BDD)
|
|
165
|
+
### 4. Feature 파일 생성 (BDD) - 필수
|
|
166
|
+
|
|
167
|
+
**반드시** `.vibe/features/{기능명}.feature` 파일을 생성합니다.
|
|
138
168
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
169
|
+
**생성 규칙:**
|
|
170
|
+
1. SPEC의 각 Acceptance Criteria → 하나의 Scenario로 변환
|
|
171
|
+
2. Happy Path (정상 케이스) + Edge Case (예외 케이스) 포함
|
|
172
|
+
3. Given-When-Then 형식 준수
|
|
173
|
+
|
|
174
|
+
**Feature 구조:**
|
|
175
|
+
```markdown
|
|
176
|
+
# Feature: {기능명}
|
|
177
|
+
|
|
178
|
+
**SPEC**: `.vibe/specs/{기능명}.md`
|
|
179
|
+
|
|
180
|
+
## User Story
|
|
181
|
+
**As a** {사용자}
|
|
182
|
+
**I want** {기능}
|
|
183
|
+
**So that** {가치}
|
|
184
|
+
|
|
185
|
+
## Scenarios
|
|
186
|
+
|
|
187
|
+
### Scenario 1: {Happy Path}
|
|
188
|
+
\`\`\`gherkin
|
|
189
|
+
Scenario: {제목}
|
|
190
|
+
Given {전제}
|
|
191
|
+
When {행동}
|
|
192
|
+
Then {결과}
|
|
193
|
+
\`\`\`
|
|
194
|
+
**검증 기준**: SPEC AC #1
|
|
195
|
+
|
|
196
|
+
### Scenario 2: {Edge Case}
|
|
197
|
+
...
|
|
198
|
+
|
|
199
|
+
## Coverage
|
|
200
|
+
| Scenario | SPEC AC | Status |
|
|
201
|
+
|----------|---------|--------|
|
|
202
|
+
| 1 | AC-1 | ⬜ |
|
|
203
|
+
```
|
|
142
204
|
|
|
143
205
|
### 5. 품질 검증
|
|
144
206
|
|
|
@@ -5,7 +5,7 @@ argument-hint: "feature name"
|
|
|
5
5
|
|
|
6
6
|
# /vibe.verify
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Feature 시나리오 기반으로 구현을 검증합니다.
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
@@ -16,145 +16,133 @@ argument-hint: "feature name"
|
|
|
16
16
|
## Rules Reference
|
|
17
17
|
|
|
18
18
|
**반드시 `.vibe/rules/` 규칙을 따릅니다:**
|
|
19
|
-
- `quality/checklist.md` - 코드 품질 체크리스트
|
|
19
|
+
- `quality/checklist.md` - 코드 품질 체크리스트
|
|
20
20
|
- `standards/complexity-metrics.md` - 복잡도 기준
|
|
21
|
-
- `standards/anti-patterns.md` - 안티패턴 검출
|
|
22
21
|
|
|
23
|
-
##
|
|
22
|
+
## Process
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
### 1. Feature 파일 로드
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
`.vibe/features/{기능명}.feature` 읽기
|
|
27
|
+
|
|
28
|
+
### 2. 시나리오별 검증
|
|
29
|
+
|
|
30
|
+
각 Scenario에 대해:
|
|
31
|
+
|
|
32
|
+
1. **Given** (전제 조건) - 상태 확인
|
|
33
|
+
2. **When** (행동) - 기능 실행
|
|
34
|
+
3. **Then** (결과) - 예상 결과 검증
|
|
35
|
+
|
|
36
|
+
### 3. 검증 방법
|
|
37
|
+
|
|
38
|
+
**코드 검증:**
|
|
39
|
+
- 해당 기능이 구현되어 있는지 확인
|
|
40
|
+
- Given/When/Then 각 단계가 동작하는지 확인
|
|
41
|
+
|
|
42
|
+
**테스트 실행 (있는 경우):**
|
|
43
|
+
- `npm test`, `pytest`, `flutter test` 등 실행
|
|
44
|
+
- BDD 테스트 프레임워크 결과 확인
|
|
28
45
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
46
|
+
**수동 검증:**
|
|
47
|
+
- 테스트 코드가 없으면 코드 리뷰로 검증
|
|
48
|
+
- 각 시나리오의 로직이 구현되었는지 확인
|
|
49
|
+
|
|
50
|
+
### 4. 결과 리포트
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
# Verification Report: {기능명}
|
|
54
|
+
|
|
55
|
+
## Summary
|
|
56
|
+
- **총 시나리오**: N개
|
|
57
|
+
- **통과**: N개 ✅
|
|
58
|
+
- **실패**: N개 ❌
|
|
59
|
+
- **품질 점수**: XX/100
|
|
60
|
+
|
|
61
|
+
## Scenario Results
|
|
62
|
+
|
|
63
|
+
### ✅ Scenario 1: {제목}
|
|
64
|
+
- Given: 확인됨
|
|
65
|
+
- When: 구현됨
|
|
66
|
+
- Then: 동작함
|
|
67
|
+
- **검증**: AC-1 충족
|
|
68
|
+
|
|
69
|
+
### ❌ Scenario 2: {제목}
|
|
70
|
+
- Given: 확인됨
|
|
71
|
+
- When: 구현됨
|
|
72
|
+
- Then: **실패** - {이유}
|
|
73
|
+
- **수정 필요**: {구체적 내용}
|
|
74
|
+
|
|
75
|
+
## Code Quality
|
|
76
|
+
- 복잡도: ✅ 적정
|
|
77
|
+
- 테스트 커버리지: XX%
|
|
78
|
+
- 에러 처리: ✅
|
|
79
|
+
|
|
80
|
+
## Next Steps
|
|
81
|
+
- {실패한 시나리오 수정 방법}
|
|
82
|
+
```
|
|
56
83
|
|
|
57
84
|
## Input
|
|
58
85
|
|
|
59
|
-
- `.vibe/
|
|
60
|
-
- `.vibe/
|
|
61
|
-
-
|
|
62
|
-
- 구현된 코드 (backend/, frontend/)
|
|
63
|
-
- BDD Step Definitions (tests/steps/, test/bdd/)
|
|
64
|
-
- Contract 파일 (pacts/, contracts/)
|
|
86
|
+
- `.vibe/features/{기능명}.feature` - BDD 시나리오
|
|
87
|
+
- `.vibe/specs/{기능명}.md` - SPEC 문서 (참조)
|
|
88
|
+
- 구현된 소스 코드
|
|
65
89
|
|
|
66
90
|
## Output
|
|
67
91
|
|
|
68
|
-
-
|
|
69
|
-
- 통과/실패
|
|
70
|
-
-
|
|
71
|
-
- 개선 제안 사항
|
|
72
|
-
|
|
73
|
-
## Verification Checklist
|
|
74
|
-
|
|
75
|
-
### Functional Requirements
|
|
76
|
-
- [ ] REQ-001: 6개 알림 카테고리 정의
|
|
77
|
-
- [ ] REQ-002: 설정 저장 (P95 < 500ms)
|
|
78
|
-
- [ ] REQ-003: 설정 조회 (P95 < 300ms)
|
|
79
|
-
- [ ] REQ-004: 알림 필터링 동작
|
|
80
|
-
- [ ] REQ-005: 기본 설정 생성
|
|
81
|
-
- [ ] REQ-006: UI 피드백
|
|
82
|
-
|
|
83
|
-
### Non-Functional Requirements
|
|
84
|
-
- [ ] 성능: P95 응답 시간 목표 달성
|
|
85
|
-
- [ ] 보안: JWT 인증, 권한 검증
|
|
86
|
-
- [ ] 접근성: WCAG AA 기준 (4.5:1 대비, 48x48dp 터치)
|
|
87
|
-
- [ ] 확장성: 새 카테고리 추가 용이
|
|
88
|
-
- [ ] 가용성: 99.9% uptime
|
|
89
|
-
|
|
90
|
-
### Code Quality (TRUST 5)
|
|
91
|
-
- [ ] Test-first: Contract tests 작성
|
|
92
|
-
- [ ] Readable: Docstring, Type hints
|
|
93
|
-
- [ ] Unified: 일관된 스타일
|
|
94
|
-
- [ ] Secured: 보안 고려
|
|
95
|
-
- [ ] Trackable: Logging, Monitoring
|
|
96
|
-
|
|
97
|
-
### Tests
|
|
98
|
-
- [ ] **BDD Scenarios 모두 통과** (pytest-bdd, behave, cucumber)
|
|
99
|
-
- [ ] **Contract Tests 모두 통과** (Pact, Spring Cloud Contract)
|
|
100
|
-
- [ ] 유닛 테스트 커버리지 > 80%
|
|
101
|
-
- [ ] 통합 테스트 통과
|
|
102
|
-
- [ ] E2E 테스트 통과 (실제 푸시 수신)
|
|
103
|
-
- [ ] 성능 테스트 통과 (Locust)
|
|
92
|
+
- 검증 결과 리포트 (터미널 출력)
|
|
93
|
+
- 통과/실패 시나리오 목록
|
|
94
|
+
- 수정이 필요한 항목
|
|
104
95
|
|
|
105
96
|
## Example
|
|
106
97
|
|
|
107
98
|
```
|
|
108
|
-
/vibe.verify "
|
|
109
|
-
```
|
|
99
|
+
User: /vibe.verify "로그인"
|
|
110
100
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
# Verification Report: 푸시 알림 설정 기능
|
|
101
|
+
Claude:
|
|
102
|
+
# Verification Report: 로그인
|
|
114
103
|
|
|
115
104
|
## Summary
|
|
116
|
-
-
|
|
117
|
-
- **통과**:
|
|
118
|
-
- **실패**:
|
|
119
|
-
- **품질 점수**:
|
|
120
|
-
|
|
121
|
-
##
|
|
122
|
-
|
|
123
|
-
✅ Scenario
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
✅
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- 캐시 히트율 80% 달성 (현재 75%)
|
|
105
|
+
- **총 시나리오**: 4개
|
|
106
|
+
- **통과**: 3개 ✅
|
|
107
|
+
- **실패**: 1개 ❌
|
|
108
|
+
- **품질 점수**: 85/100
|
|
109
|
+
|
|
110
|
+
## Scenario Results
|
|
111
|
+
|
|
112
|
+
### ✅ Scenario 1: 유효한 자격증명으로 로그인
|
|
113
|
+
- Given: 사용자가 로그인 페이지에 있다 → ✅ LoginPage 컴포넌트 존재
|
|
114
|
+
- When: 유효한 이메일/비밀번호 입력 → ✅ handleSubmit 구현됨
|
|
115
|
+
- Then: 대시보드로 이동 → ✅ router.push('/dashboard')
|
|
116
|
+
|
|
117
|
+
### ✅ Scenario 2: 잘못된 비밀번호로 로그인 시도
|
|
118
|
+
- Given: 로그인 페이지 → ✅
|
|
119
|
+
- When: 잘못된 비밀번호 → ✅
|
|
120
|
+
- Then: 에러 메시지 표시 → ✅ "비밀번호가 일치하지 않습니다"
|
|
121
|
+
|
|
122
|
+
### ✅ Scenario 3: 이메일 형식 검증
|
|
123
|
+
- Given: 로그인 페이지 → ✅
|
|
124
|
+
- When: 잘못된 이메일 형식 → ✅
|
|
125
|
+
- Then: 유효성 에러 → ✅ zod validation
|
|
126
|
+
|
|
127
|
+
### ❌ Scenario 4: 비밀번호 찾기 링크
|
|
128
|
+
- Given: 로그인 페이지 → ✅
|
|
129
|
+
- When: "비밀번호 찾기" 클릭 → ❌ 링크 없음
|
|
130
|
+
- Then: 비밀번호 찾기 페이지로 이동 → ❌
|
|
131
|
+
|
|
132
|
+
## Next Steps
|
|
133
|
+
Scenario 4 수정 필요:
|
|
134
|
+
- LoginPage에 "비밀번호 찾기" 링크 추가
|
|
135
|
+
- /forgot-password 라우트 구현
|
|
148
136
|
```
|
|
149
137
|
|
|
150
138
|
## Next Step
|
|
151
139
|
|
|
152
140
|
검증 통과 시:
|
|
153
141
|
```
|
|
154
|
-
|
|
142
|
+
완료! 다음 기능을 진행하세요.
|
|
155
143
|
```
|
|
156
144
|
|
|
157
145
|
검증 실패 시:
|
|
158
146
|
```
|
|
159
|
-
/vibe.run "
|
|
147
|
+
/vibe.run "기능명" --fix # 실패한 시나리오 수정
|
|
160
148
|
```
|