@su-record/vibe 2.3.0 β†’ 2.3.2

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.
Files changed (98) hide show
  1. package/.claude/settings.json +35 -35
  2. package/.claude/settings.local.json +24 -25
  3. package/.claude/vibe/constitution.md +184 -184
  4. package/.claude/vibe/rules/core/communication-guide.md +104 -104
  5. package/.claude/vibe/rules/core/development-philosophy.md +52 -52
  6. package/.claude/vibe/rules/core/quick-start.md +120 -120
  7. package/.claude/vibe/rules/languages/dart-flutter.md +509 -509
  8. package/.claude/vibe/rules/languages/go.md +396 -396
  9. package/.claude/vibe/rules/languages/java-spring.md +586 -586
  10. package/.claude/vibe/rules/languages/kotlin-android.md +491 -491
  11. package/.claude/vibe/rules/languages/python-django.md +371 -371
  12. package/.claude/vibe/rules/languages/python-fastapi.md +386 -386
  13. package/.claude/vibe/rules/languages/rust.md +425 -425
  14. package/.claude/vibe/rules/languages/swift-ios.md +516 -516
  15. package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -441
  16. package/.claude/vibe/rules/languages/typescript-node.md +375 -375
  17. package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -521
  18. package/.claude/vibe/rules/languages/typescript-react-native.md +446 -446
  19. package/.claude/vibe/rules/languages/typescript-react.md +525 -525
  20. package/.claude/vibe/rules/languages/typescript-vue.md +353 -353
  21. package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
  22. package/.claude/vibe/rules/quality/checklist.md +276 -276
  23. package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
  24. package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
  25. package/.claude/vibe/rules/standards/code-structure.md +291 -291
  26. package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
  27. package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
  28. package/.claude/vibe/setup.sh +31 -31
  29. package/.claude/vibe/templates/constitution-template.md +184 -184
  30. package/.claude/vibe/templates/contract-backend-template.md +517 -517
  31. package/.claude/vibe/templates/contract-frontend-template.md +594 -594
  32. package/.claude/vibe/templates/feature-template.md +96 -96
  33. package/.claude/vibe/templates/spec-template.md +199 -199
  34. package/CLAUDE.md +345 -323
  35. package/LICENSE +21 -21
  36. package/README.md +744 -724
  37. package/agents/compounder.md +261 -261
  38. package/agents/diagrammer.md +178 -178
  39. package/agents/e2e-tester.md +266 -266
  40. package/agents/explorer.md +48 -48
  41. package/agents/implementer.md +53 -53
  42. package/agents/research/best-practices-agent.md +139 -139
  43. package/agents/research/codebase-patterns-agent.md +147 -147
  44. package/agents/research/framework-docs-agent.md +181 -181
  45. package/agents/research/security-advisory-agent.md +167 -167
  46. package/agents/review/architecture-reviewer.md +107 -107
  47. package/agents/review/complexity-reviewer.md +116 -116
  48. package/agents/review/data-integrity-reviewer.md +88 -88
  49. package/agents/review/git-history-reviewer.md +103 -103
  50. package/agents/review/performance-reviewer.md +86 -86
  51. package/agents/review/python-reviewer.md +152 -152
  52. package/agents/review/rails-reviewer.md +139 -139
  53. package/agents/review/react-reviewer.md +144 -144
  54. package/agents/review/security-reviewer.md +80 -80
  55. package/agents/review/simplicity-reviewer.md +140 -140
  56. package/agents/review/test-coverage-reviewer.md +116 -116
  57. package/agents/review/typescript-reviewer.md +127 -127
  58. package/agents/searcher.md +54 -54
  59. package/agents/simplifier.md +119 -119
  60. package/agents/tester.md +49 -49
  61. package/agents/ui-previewer.md +137 -137
  62. package/commands/vibe.analyze.md +245 -180
  63. package/commands/vibe.reason.md +223 -183
  64. package/commands/vibe.review.md +200 -136
  65. package/commands/vibe.run.md +838 -836
  66. package/commands/vibe.spec.md +419 -383
  67. package/commands/vibe.utils.md +101 -101
  68. package/commands/vibe.verify.md +282 -241
  69. package/dist/cli/index.js +385 -385
  70. package/dist/lib/MemoryManager.d.ts.map +1 -1
  71. package/dist/lib/MemoryManager.js +119 -114
  72. package/dist/lib/MemoryManager.js.map +1 -1
  73. package/dist/lib/PythonParser.js +108 -108
  74. package/dist/lib/gemini-mcp.js +15 -15
  75. package/dist/lib/gemini-oauth.js +35 -35
  76. package/dist/lib/gpt-mcp.js +17 -17
  77. package/dist/lib/gpt-oauth.js +44 -44
  78. package/dist/tools/analytics/getUsageAnalytics.js +12 -12
  79. package/dist/tools/index.d.ts +50 -0
  80. package/dist/tools/index.d.ts.map +1 -0
  81. package/dist/tools/index.js +61 -0
  82. package/dist/tools/index.js.map +1 -0
  83. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  84. package/dist/tools/memory/getMemoryGraph.js +12 -12
  85. package/dist/tools/memory/getSessionContext.js +9 -9
  86. package/dist/tools/memory/linkMemories.js +14 -14
  87. package/dist/tools/memory/listMemories.js +4 -4
  88. package/dist/tools/memory/recallMemory.js +4 -4
  89. package/dist/tools/memory/saveMemory.js +4 -4
  90. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  91. package/dist/tools/planning/generatePrd.js +46 -46
  92. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  93. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  94. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  95. package/hooks/hooks.json +121 -103
  96. package/package.json +73 -69
  97. package/skills/git-worktree.md +178 -178
  98. package/skills/priority-todos.md +236 -236
@@ -1,241 +1,282 @@
1
- ---
2
- description: Verify implementation against SPEC requirements
3
- argument-hint: "feature name"
4
- ---
5
-
6
- # /vibe.verify
7
-
8
- **ν’ˆμ§ˆ 검증 μžλ™ν™”** - λΉ„κ°œλ°œμžλ„ ν’ˆμ§ˆμ„ μ‹ λ’°ν•  수 μžˆλ„λ‘.
9
-
10
- > λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ 톡과 = ν’ˆμ§ˆ 보μž₯
11
-
12
- ## Usage
13
-
14
- ```
15
- /vibe.verify "feature-name" # SPEC 기반 검증
16
- /vibe.verify --e2e "feature-name" # E2E λΈŒλΌμš°μ € ν…ŒμŠ€νŠΈ (agents/e2e-tester.md)
17
- /vibe.verify --e2e --visual # μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈ
18
- /vibe.verify --e2e --record # λΉ„λ””μ˜€ λ…Ήν™”
19
- ```
20
-
21
- ## 핡심 원칙
22
-
23
- ```
24
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
25
- β”‚ λΉ„κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•  것 β”‚
26
- β”‚ β”‚
27
- β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€ 4/4 톡과 β”‚
28
- β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
29
- β”‚ β”‚
30
- β”‚ μ΄κ²ƒλ§Œ 보면 됨. λ‚˜λ¨Έμ§€λŠ” μ‹œμŠ€ν…œμ΄ μ•Œμ•„μ„œ. β”‚
31
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
32
- ```
33
-
34
- ## Process
35
-
36
- ### 1. Load Feature File
37
-
38
- ```
39
- πŸ“„ .claude/vibe/features/{feature-name}.feature β†’ μ‹œλ‚˜λ¦¬μ˜€ λͺ©λ‘
40
- πŸ“„ .claude/vibe/specs/{feature-name}.md β†’ 검증 κΈ°μ€€ (μ°Έμ‘°)
41
- ```
42
-
43
- **Feature 파일이 μ—†μœΌλ©΄**:
44
- ```
45
- ❌ Feature 파일이 μ—†μŠ΅λ‹ˆλ‹€.
46
- λ¨Όμ € /vibe.spec "{feature-name}"을 μ‹€ν–‰ν•˜μ„Έμš”.
47
- ```
48
-
49
- ### 2. Scenario-by-Scenario Verification
50
-
51
- 각 μ‹œλ‚˜λ¦¬μ˜€λ³„ μžλ™ 검증:
52
-
53
- ```
54
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
55
- πŸ” Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
56
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57
-
58
- Given: μ‚¬μš©μžκ°€ λ“±λ‘λ˜μ–΄ μžˆλ‹€
59
- β†’ 검증: μ‚¬μš©μž 생성 API 쑴재? βœ…
60
- β†’ 검증: ν…ŒμŠ€νŠΈ μ‚¬μš©μž 데이터? βœ…
61
-
62
- When: μœ νš¨ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인
63
- β†’ 검증: POST /login μ—”λ“œν¬μΈνŠΈ? βœ…
64
- β†’ 검증: μš”μ²­ 처리 둜직? βœ…
65
-
66
- Then: 둜그인 성곡 + JWT 토큰 λ°˜ν™˜
67
- β†’ 검증: 성곡 응닡 μ½”λ“œ 200? βœ…
68
- β†’ 검증: JWT 토큰 포함? βœ…
69
-
70
- βœ… Scenario 1 톡과!
71
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
72
- ```
73
-
74
- ### 3. Verification Methods (μžλ™ 선택)
75
-
76
- | 방법 | 쑰건 | 검증 λ‚΄μš© |
77
- |------|------|-----------|
78
- | **ν…ŒμŠ€νŠΈ μ‹€ν–‰** | ν…ŒμŠ€νŠΈ 파일 쑴재 μ‹œ | `npm test`, `pytest` λ“± μ‹€ν–‰ |
79
- | **μ½”λ“œ 뢄석** | 항상 | κ΅¬ν˜„ μ—¬λΆ€, 둜직 확인 |
80
- | **λΉŒλ“œ 검증** | λΉŒλ“œ 슀크립트 쑴재 μ‹œ | 컴파일 μ—λŸ¬ 확인 |
81
- | **νƒ€μž… 검사** | TypeScript λ“± | νƒ€μž… μ—λŸ¬ 확인 |
82
-
83
- ### 4. Quality Report (μžλ™ 생성)
84
-
85
- ```
86
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
87
- β”‚ πŸ“Š VERIFICATION REPORT: login β”‚
88
- β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
89
- β”‚ β”‚
90
- β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€: 4/4 톡과 (100%) β”‚
91
- β”‚ β”‚
92
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
93
- β”‚ β”‚ # β”‚ Scenario β”‚ Given β”‚ When β”‚ Then β”‚ Status β”‚ β”‚
94
- β”‚ │───│───────────────────────│───────│──────│──────│────────│ β”‚
95
- β”‚ β”‚ 1 β”‚ μœ νš¨ν•œ 둜그인 성곡 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
96
- β”‚ β”‚ 2 β”‚ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
97
- β”‚ β”‚ 3 β”‚ 이메일 ν˜•μ‹ 검증 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
98
- β”‚ β”‚ 4 β”‚ λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
99
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
100
- β”‚ β”‚
101
- β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
102
- β”‚ β”‚
103
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
104
- β”‚ β”‚ ν•­λͺ© β”‚ κ²°κ³Ό β”‚ 상세 β”‚ β”‚
105
- β”‚ │───────────────────│───────│─────────────────────────────│ β”‚
106
- β”‚ β”‚ λΉŒλ“œ β”‚ βœ… β”‚ 성곡 β”‚ β”‚
107
- β”‚ β”‚ ν…ŒμŠ€νŠΈ β”‚ βœ… β”‚ 12/12 톡과 β”‚ β”‚
108
- β”‚ β”‚ νƒ€μž… 검사 β”‚ βœ… β”‚ μ—λŸ¬ 0개 β”‚ β”‚
109
- β”‚ β”‚ λ³΅μž‘λ„ β”‚ βœ… β”‚ λͺ¨λ“  ν•¨μˆ˜ ≀20쀄 β”‚ β”‚
110
- β”‚ β”‚ μ½”λ“œ 컀버리지 β”‚ ⚠️ β”‚ 78% (λͺ©ν‘œ: 80%) β”‚ β”‚
111
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
112
- β”‚ β”‚
113
- β”‚ πŸ“‹ ꢌμž₯ 사항: β”‚
114
- β”‚ - μ½”λ“œ 컀버리지 2% μΆ”κ°€ ν•„μš” (auth.service.ts line 45-52) β”‚
115
- β”‚ β”‚
116
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
117
- ```
118
-
119
- ### μ‹€νŒ¨ μ‹œ 리포트
120
-
121
- ```
122
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
123
- β”‚ πŸ“Š VERIFICATION REPORT: login β”‚
124
- β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
125
- β”‚ β”‚
126
- β”‚ ❌ μ‹œλ‚˜λ¦¬μ˜€: 3/4 톡과 (75%) β”‚
127
- β”‚ β”‚
128
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
129
- β”‚ β”‚ # β”‚ Scenario β”‚ Given β”‚ When β”‚ Then β”‚ Status β”‚ β”‚
130
- β”‚ │───│───────────────────────│───────│──────│──────│────────│ β”‚
131
- β”‚ β”‚ 1 β”‚ μœ νš¨ν•œ 둜그인 성곡 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
132
- β”‚ β”‚ 2 β”‚ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
133
- β”‚ β”‚ 3 β”‚ 이메일 ν˜•μ‹ 검증 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
134
- β”‚ β”‚ 4 β”‚ λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚ βœ… β”‚ ❌ β”‚ - β”‚ ❌ β”‚ β”‚
135
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
136
- β”‚ β”‚
137
- β”‚ ❌ μ‹€νŒ¨ 상세: β”‚
138
- β”‚ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ β”‚
139
- β”‚ Scenario 4: λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚
140
- β”‚ β”‚
141
- β”‚ When: "λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ°" 클릭 β”‚
142
- β”‚ ❌ 문제: 링크가 κ΅¬ν˜„λ˜μ§€ μ•ŠμŒ β”‚
143
- β”‚ πŸ“ μœ„μΉ˜: LoginForm.tsx line 42 β”‚
144
- β”‚ πŸ’‘ μˆ˜μ •: "Forgot password" 링크 μΆ”κ°€ ν•„μš” β”‚
145
- β”‚ β”‚
146
- β”‚ πŸ”§ μžλ™ μˆ˜μ • μ‹€ν–‰: /vibe.run "login" --fix β”‚
147
- β”‚ β”‚
148
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
149
- ```
150
-
151
- ## Input
152
-
153
- - `.claude/vibe/features/{feature-name}.feature` - BDD scenarios
154
- - `.claude/vibe/specs/{feature-name}.md` - SPEC document (reference)
155
- - Implemented source code
156
-
157
- ## Output
158
-
159
- - Verification result report (terminal output)
160
- - Passed/failed scenario list
161
- - Items needing fixes
162
-
163
- ## Example
164
-
165
- ```
166
- User: /vibe.verify "login"
167
-
168
- Claude:
169
- πŸ“„ Loading Feature: .claude/vibe/features/login.feature
170
- πŸ” 검증 μ‹œμž‘...
171
-
172
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
173
- πŸ” Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
174
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
175
- βœ… Given: μ‚¬μš©μž 등둝 - OK
176
- βœ… When: 둜그인 μ‹œλ„ - OK
177
- βœ… Then: JWT 토큰 λ°˜ν™˜ - OK
178
- βœ… 톡과!
179
-
180
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
181
- πŸ” Scenario 2/4: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬
182
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
183
- βœ… Given: OK
184
- βœ… When: OK
185
- βœ… Then: OK
186
- βœ… 톡과!
187
-
188
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
189
- πŸ” Scenario 3/4: 이메일 ν˜•μ‹ 검증
190
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
191
- βœ… Given: OK
192
- βœ… When: OK
193
- βœ… Then: OK
194
- βœ… 톡과!
195
-
196
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
197
- πŸ” Scenario 4/4: λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크
198
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
199
- βœ… Given: OK
200
- ❌ When: "λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ°" 링크 - μ—†μŒ
201
- - Then: (μŠ€ν‚΅)
202
- ❌ μ‹€νŒ¨!
203
-
204
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
205
- β”‚ πŸ“Š VERIFICATION REPORT: login β”‚
206
- β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
207
- β”‚ β”‚
208
- β”‚ ❌ μ‹œλ‚˜λ¦¬μ˜€: 3/4 톡과 (75%) β”‚
209
- β”‚ β”‚
210
- β”‚ | # | Scenario | Status | β”‚
211
- β”‚ |---|───────────────────────|────────| β”‚
212
- β”‚ | 1 | μœ νš¨ν•œ 둜그인 성곡 | βœ… | β”‚
213
- β”‚ | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | βœ… | β”‚
214
- β”‚ | 3 | 이메일 ν˜•μ‹ 검증 | βœ… | β”‚
215
- β”‚ | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | ❌ | β”‚
216
- β”‚ β”‚
217
- β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 75/100 β”‚
218
- β”‚ β”‚
219
- β”‚ ❌ μˆ˜μ • ν•„μš”: β”‚
220
- β”‚ - Scenario 4: LoginForm.tsx에 "Forgot password" 링크 μΆ”κ°€ β”‚
221
- β”‚ β”‚
222
- β”‚ πŸ”§ μžλ™ μˆ˜μ •: /vibe.run "login" --fix β”‚
223
- β”‚ β”‚
224
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
225
- ```
226
-
227
- ## Next Step
228
-
229
- On verification pass:
230
- ```
231
- Complete! Proceed to next feature.
232
- ```
233
-
234
- On verification fail:
235
- ```
236
- /vibe.run "feature-name" --fix # Fix failed scenarios
237
- ```
238
-
239
- ---
240
-
241
- ARGUMENTS: $ARGUMENTS
1
+ ---
2
+ description: Verify implementation against SPEC requirements
3
+ argument-hint: "feature name"
4
+ ---
5
+
6
+ # /vibe.verify
7
+
8
+ **ν’ˆμ§ˆ 검증 μžλ™ν™”** - λΉ„κ°œλ°œμžλ„ ν’ˆμ§ˆμ„ μ‹ λ’°ν•  수 μžˆλ„λ‘.
9
+
10
+ > λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ 톡과 = ν’ˆμ§ˆ 보μž₯
11
+
12
+ ## Usage
13
+
14
+ ```
15
+ /vibe.verify "feature-name" # SPEC 기반 검증
16
+ /vibe.verify --e2e "feature-name" # E2E λΈŒλΌμš°μ € ν…ŒμŠ€νŠΈ (agents/e2e-tester.md)
17
+ /vibe.verify --e2e --visual # μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈ
18
+ /vibe.verify --e2e --record # λΉ„λ””μ˜€ λ…Ήν™”
19
+ ```
20
+
21
+ ## 핡심 원칙
22
+
23
+ ```
24
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
25
+ β”‚ λΉ„κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•  것 β”‚
26
+ β”‚ β”‚
27
+ β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€ 4/4 톡과 β”‚
28
+ β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
29
+ β”‚ β”‚
30
+ β”‚ μ΄κ²ƒλ§Œ 보면 됨. λ‚˜λ¨Έμ§€λŠ” μ‹œμŠ€ν…œμ΄ μ•Œμ•„μ„œ. β”‚
31
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
32
+ ```
33
+
34
+ ## Process
35
+
36
+ ### 1. Load Feature File
37
+
38
+ ```
39
+ πŸ“„ .claude/vibe/features/{feature-name}.feature β†’ μ‹œλ‚˜λ¦¬μ˜€ λͺ©λ‘
40
+ πŸ“„ .claude/vibe/specs/{feature-name}.md β†’ 검증 κΈ°μ€€ (μ°Έμ‘°)
41
+ ```
42
+
43
+ **Feature 파일이 μ—†μœΌλ©΄**:
44
+ ```
45
+ ❌ Feature 파일이 μ—†μŠ΅λ‹ˆλ‹€.
46
+ λ¨Όμ € /vibe.spec "{feature-name}"을 μ‹€ν–‰ν•˜μ„Έμš”.
47
+ ```
48
+
49
+ ### 2. Scenario-by-Scenario Verification
50
+
51
+ 각 μ‹œλ‚˜λ¦¬μ˜€λ³„ μžλ™ 검증:
52
+
53
+ ```
54
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
55
+ πŸ” Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
56
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57
+
58
+ Given: μ‚¬μš©μžκ°€ λ“±λ‘λ˜μ–΄ μžˆλ‹€
59
+ β†’ 검증: μ‚¬μš©μž 생성 API 쑴재? βœ…
60
+ β†’ 검증: ν…ŒμŠ€νŠΈ μ‚¬μš©μž 데이터? βœ…
61
+
62
+ When: μœ νš¨ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인
63
+ β†’ 검증: POST /login μ—”λ“œν¬μΈνŠΈ? βœ…
64
+ β†’ 검증: μš”μ²­ 처리 둜직? βœ…
65
+
66
+ Then: 둜그인 성곡 + JWT 토큰 λ°˜ν™˜
67
+ β†’ 검증: 성곡 응닡 μ½”λ“œ 200? βœ…
68
+ β†’ 검증: JWT 토큰 포함? βœ…
69
+
70
+ βœ… Scenario 1 톡과!
71
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
72
+ ```
73
+
74
+ ### 3. Verification Methods (μžλ™ 선택)
75
+
76
+ | 방법 | 쑰건 | 검증 λ‚΄μš© |
77
+ |------|------|-----------|
78
+ | **ν…ŒμŠ€νŠΈ μ‹€ν–‰** | ν…ŒμŠ€νŠΈ 파일 쑴재 μ‹œ | `npm test`, `pytest` λ“± μ‹€ν–‰ |
79
+ | **μ½”λ“œ 뢄석** | 항상 | κ΅¬ν˜„ μ—¬λΆ€, 둜직 확인 |
80
+ | **λΉŒλ“œ 검증** | λΉŒλ“œ 슀크립트 쑴재 μ‹œ | 컴파일 μ—λŸ¬ 확인 |
81
+ | **νƒ€μž… 검사** | TypeScript λ“± | νƒ€μž… μ—λŸ¬ 확인 |
82
+
83
+ ### 4. Quality Report (μžλ™ 생성)
84
+
85
+ ```
86
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
87
+ β”‚ πŸ“Š VERIFICATION REPORT: login β”‚
88
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
89
+ β”‚ β”‚
90
+ β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€: 4/4 톡과 (100%) β”‚
91
+ β”‚ β”‚
92
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
93
+ β”‚ β”‚ # β”‚ Scenario β”‚ Given β”‚ When β”‚ Then β”‚ Status β”‚ β”‚
94
+ β”‚ │───│───────────────────────│───────│──────│──────│────────│ β”‚
95
+ β”‚ β”‚ 1 β”‚ μœ νš¨ν•œ 둜그인 성곡 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
96
+ β”‚ β”‚ 2 β”‚ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
97
+ β”‚ β”‚ 3 β”‚ 이메일 ν˜•μ‹ 검증 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
98
+ β”‚ β”‚ 4 β”‚ λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
99
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
100
+ β”‚ β”‚
101
+ β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
102
+ β”‚ β”‚
103
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
104
+ β”‚ β”‚ ν•­λͺ© β”‚ κ²°κ³Ό β”‚ 상세 β”‚ β”‚
105
+ β”‚ │───────────────────│───────│─────────────────────────────│ β”‚
106
+ β”‚ β”‚ λΉŒλ“œ β”‚ βœ… β”‚ 성곡 β”‚ β”‚
107
+ β”‚ β”‚ ν…ŒμŠ€νŠΈ β”‚ βœ… β”‚ 12/12 톡과 β”‚ β”‚
108
+ β”‚ β”‚ νƒ€μž… 검사 β”‚ βœ… β”‚ μ—λŸ¬ 0개 β”‚ β”‚
109
+ β”‚ β”‚ λ³΅μž‘λ„ β”‚ βœ… β”‚ λͺ¨λ“  ν•¨μˆ˜ ≀20쀄 β”‚ β”‚
110
+ β”‚ β”‚ μ½”λ“œ 컀버리지 β”‚ ⚠️ β”‚ 78% (λͺ©ν‘œ: 80%) β”‚ β”‚
111
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
112
+ β”‚ β”‚
113
+ β”‚ πŸ“‹ ꢌμž₯ 사항: β”‚
114
+ β”‚ - μ½”λ“œ 컀버리지 2% μΆ”κ°€ ν•„μš” (auth.service.ts line 45-52) β”‚
115
+ β”‚ β”‚
116
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
117
+ ```
118
+
119
+ ### μ‹€νŒ¨ μ‹œ 리포트
120
+
121
+ ```
122
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
123
+ β”‚ πŸ“Š VERIFICATION REPORT: login β”‚
124
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
125
+ β”‚ β”‚
126
+ β”‚ ❌ μ‹œλ‚˜λ¦¬μ˜€: 3/4 톡과 (75%) β”‚
127
+ β”‚ β”‚
128
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
129
+ β”‚ β”‚ # β”‚ Scenario β”‚ Given β”‚ When β”‚ Then β”‚ Status β”‚ β”‚
130
+ β”‚ │───│───────────────────────│───────│──────│──────│────────│ β”‚
131
+ β”‚ β”‚ 1 β”‚ μœ νš¨ν•œ 둜그인 성곡 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
132
+ β”‚ β”‚ 2 β”‚ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
133
+ β”‚ β”‚ 3 β”‚ 이메일 ν˜•μ‹ 검증 β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ βœ… β”‚ β”‚
134
+ β”‚ β”‚ 4 β”‚ λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚ βœ… β”‚ ❌ β”‚ - β”‚ ❌ β”‚ β”‚
135
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
136
+ β”‚ β”‚
137
+ β”‚ ❌ μ‹€νŒ¨ 상세: β”‚
138
+ β”‚ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ β”‚
139
+ β”‚ Scenario 4: λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚
140
+ β”‚ β”‚
141
+ β”‚ When: "λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ°" 클릭 β”‚
142
+ β”‚ ❌ 문제: 링크가 κ΅¬ν˜„λ˜μ§€ μ•ŠμŒ β”‚
143
+ β”‚ πŸ“ μœ„μΉ˜: LoginForm.tsx line 42 β”‚
144
+ β”‚ πŸ’‘ μˆ˜μ •: "Forgot password" 링크 μΆ”κ°€ ν•„μš” β”‚
145
+ β”‚ β”‚
146
+ β”‚ πŸ”§ μžλ™ μˆ˜μ • μ‹€ν–‰: /vibe.run "login" --fix β”‚
147
+ β”‚ β”‚
148
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
149
+ ```
150
+
151
+ ## Input
152
+
153
+ - `.claude/vibe/features/{feature-name}.feature` - BDD scenarios
154
+ - `.claude/vibe/specs/{feature-name}.md` - SPEC document (reference)
155
+ - Implemented source code
156
+
157
+ ## Output
158
+
159
+ - Verification result report (terminal output)
160
+ - Passed/failed scenario list
161
+ - Items needing fixes
162
+
163
+ ## Example
164
+
165
+ ```
166
+ User: /vibe.verify "login"
167
+
168
+ Claude:
169
+ πŸ“„ Loading Feature: .claude/vibe/features/login.feature
170
+ πŸ” 검증 μ‹œμž‘...
171
+
172
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
173
+ πŸ” Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
174
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
175
+ βœ… Given: μ‚¬μš©μž 등둝 - OK
176
+ βœ… When: 둜그인 μ‹œλ„ - OK
177
+ βœ… Then: JWT 토큰 λ°˜ν™˜ - OK
178
+ βœ… 톡과!
179
+
180
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
181
+ πŸ” Scenario 2/4: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬
182
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
183
+ βœ… Given: OK
184
+ βœ… When: OK
185
+ βœ… Then: OK
186
+ βœ… 톡과!
187
+
188
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
189
+ πŸ” Scenario 3/4: 이메일 ν˜•μ‹ 검증
190
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
191
+ βœ… Given: OK
192
+ βœ… When: OK
193
+ βœ… Then: OK
194
+ βœ… 톡과!
195
+
196
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
197
+ πŸ” Scenario 4/4: λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크
198
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
199
+ βœ… Given: OK
200
+ ❌ When: "λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ°" 링크 - μ—†μŒ
201
+ - Then: (μŠ€ν‚΅)
202
+ ❌ μ‹€νŒ¨!
203
+
204
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
205
+ β”‚ πŸ“Š VERIFICATION REPORT: login β”‚
206
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
207
+ β”‚ β”‚
208
+ β”‚ ❌ μ‹œλ‚˜λ¦¬μ˜€: 3/4 톡과 (75%) β”‚
209
+ β”‚ β”‚
210
+ β”‚ | # | Scenario | Status | β”‚
211
+ β”‚ |---|───────────────────────|────────| β”‚
212
+ β”‚ | 1 | μœ νš¨ν•œ 둜그인 성곡 | βœ… | β”‚
213
+ β”‚ | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | βœ… | β”‚
214
+ β”‚ | 3 | 이메일 ν˜•μ‹ 검증 | βœ… | β”‚
215
+ β”‚ | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | ❌ | β”‚
216
+ β”‚ β”‚
217
+ β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 75/100 β”‚
218
+ β”‚ β”‚
219
+ β”‚ ❌ μˆ˜μ • ν•„μš”: β”‚
220
+ β”‚ - Scenario 4: LoginForm.tsx에 "Forgot password" 링크 μΆ”κ°€ β”‚
221
+ β”‚ β”‚
222
+ β”‚ πŸ”§ μžλ™ μˆ˜μ •: /vibe.run "login" --fix β”‚
223
+ β”‚ β”‚
224
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
225
+ ```
226
+
227
+ ## Vibe Tools (Code Analysis & Quality)
228
+
229
+ ### Tool Invocation
230
+
231
+ All tools are called via:
232
+
233
+ ```bash
234
+ node -e "import('@su-record/vibe/tools').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
235
+ ```
236
+
237
+ ### Recommended Tools for Verification
238
+
239
+ | Tool | Purpose | When to Use |
240
+ |------|---------|-------------|
241
+ | `validateCodeQuality` | Code quality validation | Check complexity, style violations |
242
+ | `analyzeComplexity` | Complexity analysis | Verify function length, nesting depth |
243
+ | `findSymbol` | Find implementations | Verify feature implementation exists |
244
+ | `findReferences` | Find usages | Check if all references are correct |
245
+
246
+ ### Example Tool Usage in Verification
247
+
248
+ **1. Validate code quality:**
249
+
250
+ ```bash
251
+ node -e "import('@su-record/vibe/tools').then(t => t.validateCodeQuality({targetPath: 'src/auth/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
252
+ ```
253
+
254
+ **2. Analyze complexity of implementation:**
255
+
256
+ ```bash
257
+ node -e "import('@su-record/vibe/tools').then(t => t.analyzeComplexity({targetPath: 'src/auth/login.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
258
+ ```
259
+
260
+ **3. Find implemented feature:**
261
+
262
+ ```bash
263
+ node -e "import('@su-record/vibe/tools').then(t => t.findSymbol({symbolName: 'handleLogin', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
264
+ ```
265
+
266
+ ## Next Step
267
+
268
+ On verification pass:
269
+
270
+ ```
271
+ Complete! Proceed to next feature.
272
+ ```
273
+
274
+ On verification fail:
275
+
276
+ ```
277
+ /vibe.run "feature-name" --fix # Fix failed scenarios
278
+ ```
279
+
280
+ ---
281
+
282
+ ARGUMENTS: $ARGUMENTS