@su-record/vibe 0.1.4 → 0.2.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.
@@ -0,0 +1,280 @@
1
+ ---
2
+ description: Create SPEC document with Specification Agent
3
+ argument-hint: "feature name"
4
+ ---
5
+
6
+ # /vibe.spec
7
+
8
+ SPEC 문서를 작성합니다 (Specification Agent).
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /vibe.spec "기능명"
14
+ ```
15
+
16
+ ## Description
17
+
18
+ 사용자와 질의응답을 통해 요구사항을 수집하고 EARS 형식의 SPEC 문서를 작성합니다.
19
+
20
+ ## Process
21
+
22
+ 1. **프로젝트 타입 확인**:
23
+ - **신규 프로젝트**: `vibe init <프로젝트명>`으로 생성된 경우
24
+ - 소스코드 없음, 기술 스택 선택 필요
25
+ - **기존 프로젝트**: `vibe init`으로 현재 디렉토리에 추가된 경우
26
+ - 소스코드 분석 필요: `package.json`, `pyproject.toml`, `pubspec.yaml`, `go.mod` 등 확인
27
+ - `CLAUDE.md` 파일 있으면 참조 (기술 스택 명시되어 있음)
28
+ - 파일 구조 분석: `src/`, `lib/`, `app/` 등으로 프레임워크 추정
29
+
30
+ 2. **언어 설정 확인**: `.vibe/config.json`의 `language` 확인 (ko/en, 없으면 ko 기본)
31
+
32
+ 3. **자유로운 대화로 요구사항 수집**:
33
+ - 사용자의 요청을 이해하고 **능동적으로** 필요한 질문 진행
34
+ - **질문은 한 번에 하나씩** - 여러 질문을 동시에 던지지 말 것
35
+ - **선택지는 번호로 제시** - 사용자가 번호로 빠르게 선택 가능
36
+ - **선택지 끝에 안내 문구 추가**: "또는 직접 설명해주셔도 됩니다"
37
+ - 고정된 질문 순서 없이, 기능에 맞는 **자연스러운 대화**로 진행
38
+ - 사용자 답변을 받은 후 다음 질문 진행
39
+
40
+ **필수 포함 사항 (반드시 질문해야 함):**
41
+ - **기술 스택 확인 및 제안**
42
+ - **기존 프로젝트인 경우 (`vibe init`):**
43
+ 1. 소스코드 분석:
44
+ - `package.json` → Node.js 프로젝트 (React, Vue, Express 등 확인)
45
+ - `pyproject.toml` / `requirements.txt` → Python (FastAPI, Django 등)
46
+ - `pubspec.yaml` → Flutter/Dart
47
+ - `go.mod` → Go
48
+ - `pom.xml` / `build.gradle` → Java/Kotlin
49
+ 2. CLAUDE.md 파일 확인 (있으면 우선 참조)
50
+ 3. 파일 구조로 프레임워크 추정:
51
+ - `src/components/` → React
52
+ - `lib/screens/` → Flutter
53
+ - `app/models/` → Rails, Django
54
+ 4. 확인한 스택 제시: "현재 [Backend: FastAPI, Frontend: Flutter]를 사용 중이시네요"
55
+ 5. 기능에 필요한 추가 기술 있으면 제안
56
+ - **신규 프로젝트인 경우 (`vibe init <프로젝트명>`):**
57
+ - 기능에 적합한 기술 스택을 구체적으로 제안 (2-3가지 옵션)
58
+ - 각 기술의 장단점과 선택 근거 설명
59
+ - **디자인 레퍼런스 요청 및 제안**
60
+ - 참고할 UI/UX 디자인이 있는지 확인
61
+ - 유사한 앱/서비스의 디자인 레퍼런스 2-3개 제시
62
+ - 디자인 스타일, 컬러, 레이아웃 방향 제안
63
+
64
+ **일반적으로 확인할 사항:**
65
+ - 목적 (Why): 왜 필요한가?
66
+ - 사용자 (Who): 누가 사용하는가?
67
+ - 기능 범위 (What): 어떤 기능들이 필요한가?
68
+ - 제약사항 (Constraints): 기술적/비즈니스적 제약이 있는가?
69
+ - 성공 기준 (Acceptance): 어떻게 되면 성공인가?
70
+
71
+ 3. **SPEC 문서 작성**: `.vibe/specs/{기능명}.md` 생성 (EARS 형식)
72
+
73
+ 4. **Gherkin Feature 파일 생성** (BDD):
74
+ - `.vibe/features/{기능명}.feature` 생성
75
+ - SPEC의 각 요구사항(REQ-XXX)을 Scenario로 변환
76
+ - Given-When-Then 형식으로 작성
77
+ - Acceptance Criteria를 테스트 케이스로 변환
78
+
79
+ 5. **품질 검증**: TRUST 5 기준 자체 평가
80
+
81
+ ## Agent
82
+
83
+ `~/.vibe/agents/specification-agent.md`
84
+
85
+ ## Output
86
+
87
+ - `.vibe/specs/{기능명}.md` - SPEC 문서 (EARS 형식)
88
+ - `.vibe/features/{기능명}.feature` - Gherkin Feature 파일 (BDD)
89
+ - 품질 점수 (0-100점)
90
+ - 개선 제안 사항
91
+
92
+ ## Example 1: 벽돌게임
93
+
94
+ ```
95
+ User: /vibe.spec "벽돌게임"
96
+
97
+ Claude:
98
+ 벽돌게임을 만드시는군요! 어떤 스타일의 게임을 생각하고 계신가요?
99
+
100
+ 1. 클래식 벽돌깨기 (Breakout 스타일)
101
+ 2. 아르카노이드 (파워업 아이템 포함)
102
+ 3. 특별한 게임플레이가 있는 커스텀 스타일
103
+
104
+ 또는 직접 설명해주셔도 됩니다.
105
+
106
+ User: 1
107
+
108
+ Claude:
109
+ 싱글플레이인가요, 멀티플레이인가요?
110
+
111
+ 1. 싱글플레이
112
+ 2. 멀티플레이
113
+ 3. 둘 다
114
+
115
+ 또는 직접 설명해주셔도 됩니다.
116
+
117
+ User: 1
118
+
119
+ Claude:
120
+ 어떤 플랫폼에서 실행하시겠어요?
121
+
122
+ 1. 웹 (브라우저)
123
+ 2. 모바일 (iOS/Android)
124
+ 3. 데스크톱 (Windows/Mac)
125
+
126
+ 또는 직접 설명해주셔도 됩니다.
127
+
128
+ User: 1
129
+
130
+ Claude:
131
+ 웹 게임 개발에 적합한 기술 스택을 제안드립니다:
132
+
133
+ 1. **Phaser.js** (추천)
134
+ - 장점: 게임 프레임워크, 물리엔진 내장, 쉬운 시작
135
+ - 단점: 번들 크기가 큼
136
+ 2. **Canvas + JavaScript**
137
+ - 장점: 가볍고, 세밀한 제어 가능
138
+ - 단점: 물리엔진 직접 구현 필요
139
+ 3. **PixiJS + Matter.js**
140
+ - 장점: 고성능 렌더링, 물리엔진 분리
141
+ - 단점: 학습 곡선 있음
142
+
143
+ 어떤 걸로 하시겠어요?
144
+
145
+ User: Phaser.js로 할게요
146
+
147
+ Claude:
148
+ 좋은 선택입니다! 디자인 스타일은 어떤 걸 선호하시나요?
149
+
150
+ 레퍼런스 제안:
151
+ 1. **Atari Breakout** (1976) - 레트로 픽셀 스타일, 단순한 컬러
152
+ 2. **Arkanoid** (1986) - 네온 그래픽, 파워업 아이템
153
+ 3. **Brick Breaker Hero** (모던) - 3D 효과, 파티클, 생동감
154
+
155
+ 참고하실 디자인이 있으신가요?
156
+
157
+ User: Arkanoid 스타일로 가고 싶어요
158
+
159
+ Claude:
160
+ 완벽합니다! 레벨 클리어 조건은 어떻게 하시겠어요?
161
+
162
+ User: 모든 벽돌을 깨면 다음 레벨로 넘어가요
163
+
164
+ Claude:
165
+ 게임 오버 조건은요?
166
+
167
+ User: 공을 3번 놓치면 게임 오버요
168
+
169
+ Claude:
170
+ 리더보드가 필요한가요?
171
+
172
+ [대화 계속...]
173
+
174
+ ✅ SPEC 문서 작성 완료!
175
+ 📄 .vibe/specs/brick-game.md
176
+ ```
177
+
178
+ ## Example 2: 푸시 알림 설정 (기존 프로젝트)
179
+
180
+ ```
181
+ User: /vibe.spec "푸시 알림 설정"
182
+
183
+ Claude:
184
+ [파일 확인]
185
+ - package.json 없음
186
+ - pyproject.toml 발견
187
+ - pubspec.yaml 발견
188
+ - lib/screens/ 폴더 존재
189
+
190
+ 기존 프로젝트네요! 소스코드를 분석했습니다:
191
+ - Backend: Python (FastAPI로 추정 - pyproject.toml의 fastapi 확인)
192
+ - Frontend: Flutter 3.24+ (pubspec.yaml 확인)
193
+ - Database: PostgreSQL 17 (pyproject.toml의 sqlalchemy, psycopg2 확인)
194
+
195
+ CLAUDE.md도 확인했습니다. 현재 기술 스택이 맞나요?
196
+
197
+ User: 네 맞아요
198
+
199
+ Claude:
200
+ 어떤 종류의 알림들을 관리하고 싶으신가요? (예: 댓글, 좋아요, 팔로우 등)
201
+
202
+ User: 댓글, 좋아요, 팔로우, 공지, 이벤트, 마케팅 이렇게 6가지요
203
+
204
+ Claude:
205
+ 각 카테고리를 ON/OFF만 하면 되나요, 아니면 세부 조정(시간대, 빈도 등)도 필요한가요?
206
+
207
+ User: ON/OFF만 하면 돼요
208
+
209
+ Claude:
210
+ 푸시 알림 전송 서비스는 어떤 걸 사용하시겠어요?
211
+
212
+ 옵션:
213
+ 1. **Firebase Cloud Messaging (FCM)** (추천)
214
+ - 장점: 무료, Flutter와 통합 쉬움
215
+ - 단점: Google 종속
216
+ 2. **OneSignal**
217
+ - 장점: 멀티 플랫폼, 대시보드 제공
218
+ - 단점: 무료 플랜 제한
219
+
220
+ User: FCM 이미 쓰고 있어요
221
+
222
+ Claude:
223
+ 좋습니다! 디자인 레퍼런스는 어떤 걸 참고하시겠어요?
224
+
225
+ 제안:
226
+ 1. **iOS Settings > Notifications** - 토글 스위치 + 그룹핑
227
+ 2. **Slack 알림 설정** - 카테고리별 세부 조정
228
+ 3. **Twitter 알림 설정** - 심플한 리스트 + 우선순위
229
+
230
+ User: iOS Settings 스타일로 할게요
231
+
232
+ Claude:
233
+ 완벽합니다! 성능 요구사항이 있나요? (예: 설정 저장 응답 시간 등)
234
+
235
+ [대화 계속...]
236
+ ```
237
+
238
+ ## Example 3: 신규 프로젝트 (벽돌게임)
239
+
240
+ ```
241
+ User: /vibe.spec "벽돌게임"
242
+
243
+ Claude:
244
+ [파일 확인: .vibe/config.json 없음, CLAUDE.md 없음, package.json 없음]
245
+ 신규 프로젝트로 시작하시는군요!
246
+
247
+ 벽돌게임을 만드시는군요! 클래식 벽돌깨기(Breakout) 스타일인가요, 아니면 특별한 게임플레이를 생각하고 계신가요?
248
+
249
+ User: 클래식 스타일이요
250
+
251
+ Claude:
252
+ 어떤 플랫폼에서 실행되나요? 웹, 모바일, 데스크톱 중에서요.
253
+
254
+ User: 웹이요
255
+
256
+ Claude:
257
+ 웹 게임 개발에 적합한 기술 스택을 제안드립니다:
258
+
259
+ 1. **Phaser.js** (추천)
260
+ - 장점: 게임 프레임워크, 물리엔진 내장, 쉬운 시작
261
+ - 단점: 번들 크기가 큼
262
+ 2. **Canvas + JavaScript**
263
+ - 장점: 가볍고, 세밀한 제어 가능
264
+ - 단점: 물리엔진 직접 구현 필요
265
+ 3. **PixiJS + Matter.js**
266
+ - 장점: 고성능 렌더링, 물리엔진 분리
267
+ - 단점: 학습 곡선 있음
268
+
269
+ 어떤 걸로 하시겠어요?
270
+
271
+ User: Phaser.js로 할게요
272
+
273
+ [대화 계속...]
274
+ ```
275
+
276
+ ## Next Step
277
+
278
+ ```
279
+ /vibe.plan "푸시 알림 설정 기능"
280
+ ```
@@ -0,0 +1,83 @@
1
+ ---
2
+ description: Create TASKS document with Task Agent
3
+ argument-hint: "feature name"
4
+ ---
5
+
6
+ # /vibe.tasks
7
+
8
+ TASKS 문서를 작성합니다 (Task Agent).
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /vibe.tasks "기능명"
14
+ ```
15
+
16
+ ## Description
17
+
18
+ PLAN 문서를 분석하여 Phase별 구체적인 작업 목록(TASKS)을 생성합니다.
19
+
20
+ ## Process
21
+
22
+ 1. **PLAN 문서 읽기**: `.vibe/plans/{기능명}.md` 분석
23
+ 2. **Feature 파일 읽기**: `.vibe/features/{기능명}.feature` 확인 (BDD Scenarios)
24
+ 3. **Phase별 Task 분해**:
25
+ - Phase 1: Backend 개발 (DB, API, Service, Repository, Unit Tests, **Contract Provider**)
26
+ - Phase 2: Frontend 개발 (Model, Service, Provider, UI, Unit Tests, **Contract Consumer**)
27
+ - Phase 3: 통합 및 테스트 (FCM, E2E, **BDD Step Definitions**, **Contract Verification**)
28
+ 4. **각 Task마다 정의**:
29
+ - 상태 (⬜ 대기 / 🟡 진행 중 / ✅ 완료)
30
+ - 담당 Agent
31
+ - 예상 시간
32
+ - 우선순위 (HIGH/MEDIUM/LOW)
33
+ - 의존성 (선행 Task)
34
+ - Acceptance Criteria (검증 기준)
35
+ - 참고 파일 경로
36
+ - 검증 명령어
37
+ 4. **의존성 그래프 생성**: Task 간 실행 순서 시각화
38
+ 5. **체크리스트 생성**: 코드 품질, 테스트, 문서, SPEC 검증
39
+
40
+ ## Agent
41
+
42
+ `~/.vibe/agents/task-agent.md`
43
+
44
+ ## Input
45
+
46
+ - `.vibe/plans/{기능명}.md` (PLAN 문서)
47
+ - `.vibe/specs/{기능명}.md` (SPEC 문서)
48
+ - `.vibe/features/{기능명}.feature` (BDD Feature 파일)
49
+
50
+ ## Output
51
+
52
+ - `.vibe/tasks/{기능명}.md` - TASKS 문서
53
+ - 총 Task 수
54
+ - 의존성 그래프
55
+ - Phase별 체크리스트
56
+
57
+ ## Example
58
+
59
+ ```
60
+ /vibe.tasks "푸시 알림 설정 기능"
61
+ ```
62
+
63
+ **결과:**
64
+ - 23개 Task (Phase 1: 9개, Phase 2: 9개, Phase 3: 5개)
65
+ - **Phase 1:** DB, API, Service, Repository, Unit Tests, **Contract Provider 정의**
66
+ - **Phase 2:** Model, Service, Provider, UI, Unit Tests, **Contract Consumer 정의**
67
+ - **Phase 3:** FCM, E2E, **BDD Step Definitions**, **Contract Verification**
68
+ - 의존성 그래프 포함
69
+ - 각 Task별 Acceptance Criteria
70
+ - BDD Scenarios와 매핑된 Contract Test Tasks
71
+
72
+ ## Next Step
73
+
74
+ ```
75
+ /vibe.run "Task 1-1"
76
+ ```
77
+
78
+ 또는:
79
+
80
+ ```
81
+ /vibe.run --phase 1 # Phase 1 전체 실행
82
+ /vibe.run --all # 모든 Task 실행
83
+ ```
@@ -0,0 +1,133 @@
1
+ ---
2
+ description: Preview UI with ASCII art
3
+ argument-hint: "UI description"
4
+ ---
5
+
6
+ # /vibe.ui
7
+
8
+ UI를 ASCII 아트로 미리보기합니다.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /vibe.ui "로그인 페이지"
14
+ /vibe.ui "대시보드" --layout grid
15
+ ```
16
+
17
+ ## Process
18
+
19
+ ### 1. UI 설명 분석
20
+
21
+ 사용자가 요청한 UI 설명을 분석합니다:
22
+ - 페이지/컴포넌트 이름
23
+ - 필요한 UI 요소 (버튼, 입력, 카드 등)
24
+ - 레이아웃 구조 (header-footer, sidebar, grid 등)
25
+
26
+ ### 2. MCP 도구 사용
27
+
28
+ `mcp__su-record-hi-ai__preview_ui_ascii` 도구를 사용하여 ASCII 아트 생성:
29
+
30
+ ```javascript
31
+ {
32
+ page_name: "로그인 페이지",
33
+ layout_type: "centered",
34
+ components: [
35
+ { type: "header", label: "Welcome", position: "top" },
36
+ { type: "input", label: "Email", position: "center" },
37
+ { type: "input", label: "Password", position: "center" },
38
+ { type: "button", label: "Login", position: "center" }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ ### 3. ASCII 아트 출력
44
+
45
+ 생성된 ASCII 아트를 출력:
46
+
47
+ ```
48
+ ┌─────────────────────────────────────────┐
49
+ │ Welcome │
50
+ ├─────────────────────────────────────────┤
51
+ │ │
52
+ │ ┌─────────────────────┐ │
53
+ │ Email: │ │ │
54
+ │ └─────────────────────┘ │
55
+ │ │
56
+ │ ┌─────────────────────┐ │
57
+ │ Pass: │ │ │
58
+ │ └─────────────────────┘ │
59
+ │ │
60
+ │ ┌─────────────────────┐ │
61
+ │ │ Login │ │
62
+ │ └─────────────────────┘ │
63
+ │ │
64
+ └─────────────────────────────────────────┘
65
+ ```
66
+
67
+ ### 4. 컴포넌트 목록 생성
68
+
69
+ UI에 필요한 컴포넌트 목록 제안:
70
+
71
+ **필요한 컴포넌트:**
72
+ - `Header.tsx` - 헤더 ("Welcome")
73
+ - `LoginForm.tsx` - 폼 컨테이너
74
+ - `Input.tsx` - 재사용 가능한 입력 필드
75
+ - `Button.tsx` - 로그인 버튼
76
+
77
+ **예상 파일 구조:**
78
+ ```
79
+ src/
80
+ ├── components/
81
+ │ ├── common/
82
+ │ │ ├── Input.tsx
83
+ │ │ └── Button.tsx
84
+ │ └── auth/
85
+ │ ├── Header.tsx
86
+ │ └── LoginForm.tsx
87
+ └── pages/
88
+ └── LoginPage.tsx
89
+ ```
90
+
91
+ ## Example
92
+
93
+ ```
94
+ User: /vibe.ui "대시보드 페이지 - 헤더, 사이드바, 메인 콘텐츠 (3개 카드), 푸터"
95
+
96
+ Claude: 대시보드 UI 미리보기를 생성합니다...
97
+
98
+ ┌────────────────────────────────────────────────────────┐
99
+ │ [Logo] Dashboard [User] [Logout] │
100
+ ├────────┬───────────────────────────────────────────────┤
101
+ │ │ │
102
+ │ Home │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
103
+ │ Stats │ │ Card 1 │ │ Card 2 │ │ Card 3 │ │
104
+ │ Users │ │ │ │ │ │ │ │
105
+ │ Settings│ │ 100 │ │ 200 │ │ 50 │ │
106
+ │ │ └──────────┘ └──────────┘ └──────────┘ │
107
+ │ │ │
108
+ │ │ │
109
+ ├────────┴───────────────────────────────────────────────┤
110
+ │ © 2025 Company Privacy | Terms │
111
+ └────────────────────────────────────────────────────────┘
112
+
113
+ **필요한 컴포넌트:**
114
+ 1. Header (로고, 사용자 메뉴)
115
+ 2. Sidebar (네비게이션)
116
+ 3. StatsCard (재사용 카드)
117
+ 4. Footer (저작권, 링크)
118
+ 5. DashboardLayout (전체 레이아웃)
119
+
120
+ **레이아웃 구조:**
121
+ - Layout: sidebar (왼쪽 고정)
122
+ - Main: grid (3열)
123
+ - Responsive: 모바일에서는 1열로 변경
124
+
125
+ 다음 단계:
126
+ vibe spec "대시보드 페이지"
127
+ ```
128
+
129
+ ## Notes
130
+
131
+ - 복잡한 UI는 여러 번 나누어서 요청하세요
132
+ - 레이아웃 옵션: `sidebar`, `header-footer`, `grid`, `centered`, `split`
133
+ - ASCII 아트는 실제 구현 전 빠른 시각화 목적입니다
@@ -0,0 +1,153 @@
1
+ ---
2
+ description: Verify implementation against SPEC requirements
3
+ argument-hint: "feature name"
4
+ ---
5
+
6
+ # /vibe.verify
7
+
8
+ 구현된 코드를 SPEC 요구사항에 대해 검증합니다.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /vibe.verify "기능명"
14
+ ```
15
+
16
+ ## Description
17
+
18
+ SPEC 문서의 모든 요구사항(REQ-001~N)과 비기능 요구사항(NFR)을 구현된 코드가 만족하는지 검증합니다.
19
+
20
+ ## Process
21
+
22
+ 1. **SPEC 문서 읽기**: `.vibe/specs/{기능명}.md`
23
+ 2. **Feature 파일 읽기**: `.vibe/features/{기능명}.feature` (BDD Scenarios)
24
+ 3. **TASKS 문서 확인**: 모든 Task가 ✅ 완료 상태인지 확인
25
+ 4. **BDD Scenarios 검증**:
26
+ - Feature 파일의 모든 Scenario 실행
27
+ - Given-When-Then 각 단계 검증
28
+ - Step Definitions 실행 결과 확인
29
+ 5. **Contract Testing 검증**:
30
+ - Provider Contract 검증 (Backend)
31
+ - Consumer Contract 검증 (Frontend)
32
+ - Contract 일치 여부 확인 (Pact Broker)
33
+ 6. **요구사항별 검증**:
34
+ - REQ-001: 6개 알림 카테고리 정의 → DB 스키마 확인
35
+ - REQ-002: 설정 저장 (P95 < 500ms) → 성능 테스트
36
+ - REQ-003: 설정 조회 (P95 < 300ms) → 성능 테스트
37
+ - REQ-004: 알림 필터링 동작 → 통합 테스트
38
+ - REQ-005: 기본 설정 생성 → 유닛 테스트
39
+ - REQ-006: UI 피드백 → 위젯 테스트
40
+ 7. **비기능 요구사항 검증**:
41
+ - 성능 (Performance): Locust로 부하 테스트
42
+ - 보안 (Security): JWT 인증 확인
43
+ - 접근성 (Accessibility): WCAG AA 기준
44
+ 8. **검증 리포트 생성**: `.vibe/reports/{기능명}-verification.md`
45
+
46
+ ## Agent
47
+
48
+ Quality Reviewer Agent
49
+
50
+ ## Input
51
+
52
+ - `.vibe/specs/{기능명}.md` (SPEC 문서)
53
+ - `.vibe/features/{기능명}.feature` (BDD Feature 파일)
54
+ - `.vibe/tasks/{기능명}.md` (TASKS 문서)
55
+ - 구현된 코드 (backend/, frontend/)
56
+ - BDD Step Definitions (tests/steps/, test/bdd/)
57
+ - Contract 파일 (pacts/, contracts/)
58
+
59
+ ## Output
60
+
61
+ - `.vibe/reports/{기능명}-verification.md` - 검증 리포트
62
+ - 통과/실패 요구사항 목록
63
+ - 성능 테스트 결과
64
+ - 개선 제안 사항
65
+
66
+ ## Verification Checklist
67
+
68
+ ### Functional Requirements
69
+ - [ ] REQ-001: 6개 알림 카테고리 정의
70
+ - [ ] REQ-002: 설정 저장 (P95 < 500ms)
71
+ - [ ] REQ-003: 설정 조회 (P95 < 300ms)
72
+ - [ ] REQ-004: 알림 필터링 동작
73
+ - [ ] REQ-005: 기본 설정 생성
74
+ - [ ] REQ-006: UI 피드백
75
+
76
+ ### Non-Functional Requirements
77
+ - [ ] 성능: P95 응답 시간 목표 달성
78
+ - [ ] 보안: JWT 인증, 권한 검증
79
+ - [ ] 접근성: WCAG AA 기준 (4.5:1 대비, 48x48dp 터치)
80
+ - [ ] 확장성: 새 카테고리 추가 용이
81
+ - [ ] 가용성: 99.9% uptime
82
+
83
+ ### Code Quality (TRUST 5)
84
+ - [ ] Test-first: Contract tests 작성
85
+ - [ ] Readable: Docstring, Type hints
86
+ - [ ] Unified: 일관된 스타일
87
+ - [ ] Secured: 보안 고려
88
+ - [ ] Trackable: Logging, Monitoring
89
+
90
+ ### Tests
91
+ - [ ] **BDD Scenarios 모두 통과** (pytest-bdd, behave, cucumber)
92
+ - [ ] **Contract Tests 모두 통과** (Pact, Spring Cloud Contract)
93
+ - [ ] 유닛 테스트 커버리지 > 80%
94
+ - [ ] 통합 테스트 통과
95
+ - [ ] E2E 테스트 통과 (실제 푸시 수신)
96
+ - [ ] 성능 테스트 통과 (Locust)
97
+
98
+ ## Example
99
+
100
+ ```
101
+ /vibe.verify "푸시 알림 설정 기능"
102
+ ```
103
+
104
+ **결과:**
105
+ ```markdown
106
+ # Verification Report: 푸시 알림 설정 기능
107
+
108
+ ## Summary
109
+ - **전체 요구사항**: 12개
110
+ - **통과**: 12개 ✅
111
+ - **실패**: 0개
112
+ - **품질 점수**: 95/100 (A+)
113
+
114
+ ## BDD Scenarios (5/5 통과)
115
+ ✅ Scenario 1: 알림 설정 조회
116
+ ✅ Scenario 2: 알림 카테고리 활성화
117
+ ✅ Scenario 3: 알림 카테고리 비활성화
118
+ ✅ Scenario 4: 기본 설정 생성
119
+ ✅ Scenario 5: 설정 저장 응답 시간 검증
120
+
121
+ ## Contract Tests (2/2 통과)
122
+ ✅ Provider Contract: Backend API 스키마 검증
123
+ ✅ Consumer Contract: Frontend 호출 규약 검증
124
+
125
+ ## Functional Requirements (6/6 통과)
126
+ ✅ REQ-001: 6개 알림 카테고리 정의
127
+ ✅ REQ-002: 설정 저장 (P95: 420ms < 500ms)
128
+ ✅ REQ-003: 설정 조회 (P95: 280ms < 300ms)
129
+ ✅ REQ-004: 알림 필터링 동작
130
+ ✅ REQ-005: 기본 설정 생성
131
+ ✅ REQ-006: UI 피드백
132
+
133
+ ## Non-Functional Requirements (4/4 통과)
134
+ ✅ 성능: P95 < 500ms
135
+ ✅ 보안: JWT 인증 적용
136
+ ✅ 접근성: WCAG AA 준수
137
+ ✅ 테스트 커버리지: 85%
138
+
139
+ ## 개선 제안
140
+ - 캐시 히트율 80% 달성 (현재 75%)
141
+ ```
142
+
143
+ ## Next Step
144
+
145
+ 검증 통과 시:
146
+ ```
147
+ vibe deploy "푸시 알림 설정 기능" # Staging 배포
148
+ ```
149
+
150
+ 검증 실패 시:
151
+ ```
152
+ /vibe.run "Task X-Y" # 실패한 Task 재구현
153
+ ```
@@ -0,0 +1,19 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(cat:*)",
5
+ "Bash(mv:*)",
6
+ "Bash(sed:*)",
7
+ "Bash(git add:*)",
8
+ "Bash(git commit:*)",
9
+ "Bash(npm publish:*)",
10
+ "Bash(git push:*)",
11
+ "Bash(npm pack)",
12
+ "Bash(npm install:*)",
13
+ "Read(//private/tmp/test-vibe-bdd/.vibe/**)",
14
+ "Read(//private/tmp/test-vibe-bdd/.claude/commands/**)"
15
+ ],
16
+ "deny": [],
17
+ "ask": []
18
+ }
19
+ }