@su-record/vibe 2.4.72 → 2.4.76
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.md +216 -215
- package/README.md +4 -4
- package/agents/research/best-practices-agent.md +13 -13
- package/agents/research/codebase-patterns-agent.md +33 -33
- package/agents/research/framework-docs-agent.md +23 -23
- package/agents/research/security-advisory-agent.md +29 -29
- package/agents/review/architecture-reviewer.md +31 -31
- package/agents/review/complexity-reviewer.md +21 -21
- package/agents/review/data-integrity-reviewer.md +29 -29
- package/agents/review/git-history-reviewer.md +24 -24
- package/agents/review/performance-reviewer.md +29 -29
- package/agents/review/python-reviewer.md +53 -53
- package/agents/review/rails-reviewer.md +40 -40
- package/agents/review/react-reviewer.md +40 -40
- package/agents/review/security-reviewer.md +29 -29
- package/agents/review/simplicity-reviewer.md +24 -24
- package/agents/review/test-coverage-reviewer.md +31 -31
- package/agents/review/typescript-reviewer.md +41 -41
- package/commands/vibe.analyze.md +103 -7
- package/commands/vibe.reason.md +106 -0
- package/commands/vibe.review.md +123 -38
- package/commands/vibe.run.md +286 -223
- package/commands/vibe.spec.md +425 -186
- package/commands/vibe.utils.md +104 -3
- package/commands/vibe.verify.md +179 -86
- package/dist/cli/detect.js +40 -40
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/llm.js +5 -5
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/setup.js +3 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/lib/ContextCompressor.js +1 -1
- package/dist/lib/ContextCompressor.js.map +1 -1
- package/dist/lib/MemoryManager.d.ts +13 -155
- package/dist/lib/MemoryManager.d.ts.map +1 -1
- package/dist/lib/MemoryManager.js +52 -617
- package/dist/lib/MemoryManager.js.map +1 -1
- package/dist/lib/gemini-api.js +12 -12
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gemini-oauth.js +22 -22
- package/dist/lib/gemini-oauth.js.map +1 -1
- package/dist/lib/gemini-storage.js +3 -3
- package/dist/lib/gemini-storage.js.map +1 -1
- package/dist/lib/gpt-api.js +11 -11
- package/dist/lib/gpt-api.js.map +1 -1
- package/dist/lib/gpt-oauth.js +28 -28
- package/dist/lib/gpt-oauth.js.map +1 -1
- package/dist/lib/gpt-storage.js +3 -3
- package/dist/lib/gpt-storage.js.map +1 -1
- package/dist/lib/memory/KnowledgeGraph.d.ts +34 -0
- package/dist/lib/memory/KnowledgeGraph.d.ts.map +1 -0
- package/dist/lib/memory/KnowledgeGraph.js +216 -0
- package/dist/lib/memory/KnowledgeGraph.js.map +1 -0
- package/dist/lib/memory/KnowledgeGraph.test.d.ts +2 -0
- package/dist/lib/memory/KnowledgeGraph.test.d.ts.map +1 -0
- package/dist/lib/memory/KnowledgeGraph.test.js +189 -0
- package/dist/lib/memory/KnowledgeGraph.test.js.map +1 -0
- package/dist/lib/memory/MemorySearch.d.ts +25 -0
- package/dist/lib/memory/MemorySearch.d.ts.map +1 -0
- package/dist/lib/memory/MemorySearch.js +85 -0
- package/dist/lib/memory/MemorySearch.js.map +1 -0
- package/dist/lib/memory/MemorySearch.test.d.ts +2 -0
- package/dist/lib/memory/MemorySearch.test.d.ts.map +1 -0
- package/dist/lib/memory/MemorySearch.test.js +149 -0
- package/dist/lib/memory/MemorySearch.test.js.map +1 -0
- package/dist/lib/memory/MemoryStorage.d.ts +77 -0
- package/dist/lib/memory/MemoryStorage.d.ts.map +1 -0
- package/dist/lib/memory/MemoryStorage.js +278 -0
- package/dist/lib/memory/MemoryStorage.js.map +1 -0
- package/dist/lib/memory/MemoryStorage.test.d.ts +2 -0
- package/dist/lib/memory/MemoryStorage.test.d.ts.map +1 -0
- package/dist/lib/memory/MemoryStorage.test.js +198 -0
- package/dist/lib/memory/MemoryStorage.test.js.map +1 -0
- package/dist/lib/memory/index.d.ts +4 -0
- package/dist/lib/memory/index.d.ts.map +1 -0
- package/dist/lib/memory/index.js +8 -0
- package/dist/lib/memory/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +4 -6
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/tools/convention/analyzeComplexity.d.ts +3 -1
- package/dist/tools/convention/analyzeComplexity.d.ts.map +1 -1
- package/dist/tools/convention/analyzeComplexity.js +102 -4
- package/dist/tools/convention/analyzeComplexity.js.map +1 -1
- package/dist/tools/convention/analyzeComplexity.test.d.ts +2 -0
- package/dist/tools/convention/analyzeComplexity.test.d.ts.map +1 -0
- package/dist/tools/convention/analyzeComplexity.test.js +207 -0
- package/dist/tools/convention/analyzeComplexity.test.js.map +1 -0
- package/dist/tools/convention/applyQualityRules.js +1 -1
- package/dist/tools/convention/applyQualityRules.js.map +1 -1
- package/dist/tools/convention/checkCouplingCohesion.js +2 -2
- package/dist/tools/convention/checkCouplingCohesion.js.map +1 -1
- package/dist/tools/convention/suggestImprovements.js +1 -1
- package/dist/tools/convention/suggestImprovements.js.map +1 -1
- package/dist/tools/convention/validateCodeQuality.d.ts +3 -1
- package/dist/tools/convention/validateCodeQuality.d.ts.map +1 -1
- package/dist/tools/convention/validateCodeQuality.js +145 -2
- package/dist/tools/convention/validateCodeQuality.js.map +1 -1
- package/dist/tools/convention/validateCodeQuality.test.d.ts +2 -0
- package/dist/tools/convention/validateCodeQuality.test.d.ts.map +1 -0
- package/dist/tools/convention/validateCodeQuality.test.js +230 -0
- package/dist/tools/convention/validateCodeQuality.test.js.map +1 -0
- package/dist/tools/memory/autoSaveContext.js +1 -1
- package/dist/tools/memory/autoSaveContext.js.map +1 -1
- package/dist/tools/memory/createMemoryTimeline.js +27 -27
- package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
- package/dist/tools/memory/deleteMemory.js +1 -1
- package/dist/tools/memory/deleteMemory.js.map +1 -1
- package/dist/tools/memory/getMemoryGraph.js +24 -24
- package/dist/tools/memory/getMemoryGraph.js.map +1 -1
- package/dist/tools/memory/getSessionContext.js +36 -36
- package/dist/tools/memory/getSessionContext.js.map +1 -1
- package/dist/tools/memory/linkMemories.js +21 -21
- package/dist/tools/memory/linkMemories.js.map +1 -1
- package/dist/tools/memory/prioritizeMemory.js +1 -1
- package/dist/tools/memory/prioritizeMemory.js.map +1 -1
- package/dist/tools/memory/restoreSessionContext.js +1 -1
- package/dist/tools/memory/restoreSessionContext.js.map +1 -1
- package/dist/tools/memory/searchMemories.js +1 -1
- package/dist/tools/memory/searchMemories.js.map +1 -1
- package/dist/tools/memory/searchMemoriesAdvanced.js +42 -42
- package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
- package/dist/tools/memory/startSession.js +2 -2
- package/dist/tools/memory/startSession.js.map +1 -1
- package/dist/tools/memory/updateMemory.js +1 -1
- package/dist/tools/memory/updateMemory.js.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +38 -38
- package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
- package/dist/tools/semantic/findReferences.js +1 -1
- package/dist/tools/semantic/findReferences.js.map +1 -1
- package/dist/tools/semantic/findSymbol.js +1 -1
- package/dist/tools/semantic/findSymbol.js.map +1 -1
- package/dist/tools/time/getCurrentTime.js +1 -1
- package/dist/tools/time/getCurrentTime.js.map +1 -1
- package/dist/tools/ui/previewUiAscii.js +2 -2
- package/dist/tools/ui/previewUiAscii.js.map +1 -1
- package/hooks/hooks.json +11 -2
- package/hooks/scripts/llm-orchestrate.js +1 -1
- package/hooks/scripts/utils.js +31 -6
- package/languages/csharp-unity.md +82 -83
- package/languages/dart-flutter.md +89 -88
- package/languages/go.md +76 -75
- package/languages/java-spring.md +85 -84
- package/languages/kotlin-android.md +64 -63
- package/languages/python-django.md +83 -82
- package/languages/python-fastapi.md +82 -81
- package/languages/rust.md +75 -74
- package/languages/swift-ios.md +73 -72
- package/languages/typescript-electron.md +70 -71
- package/languages/typescript-nextjs.md +93 -92
- package/languages/typescript-node.md +64 -63
- package/languages/typescript-nuxt.md +113 -112
- package/languages/typescript-react-native.md +82 -81
- package/languages/typescript-react.md +76 -75
- package/languages/typescript-tauri.md +74 -75
- package/languages/typescript-vue.md +73 -72
- package/package.json +1 -1
- package/skills/git-worktree.md +25 -25
- package/skills/multi-llm-orchestration.md +4 -6
- package/skills/priority-todos.md +39 -39
- package/skills/vibe-capabilities.md +2 -2
- package/vibe/config.json +2 -2
package/commands/vibe.utils.md
CHANGED
|
@@ -10,7 +10,7 @@ Collection of utility tools. Use with options.
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
12
|
```
|
|
13
|
-
/vibe.utils --ui "
|
|
13
|
+
/vibe.utils --ui "description" # UI ASCII preview
|
|
14
14
|
/vibe.utils --diagram # Architecture diagram
|
|
15
15
|
/vibe.utils --diagram --er # ERD diagram
|
|
16
16
|
/vibe.utils --diagram --flow # Flowchart
|
|
@@ -30,7 +30,7 @@ Generate ASCII-based UI preview from description.
|
|
|
30
30
|
|
|
31
31
|
**Example:**
|
|
32
32
|
```
|
|
33
|
-
/vibe.utils --ui "
|
|
33
|
+
/vibe.utils --ui "Login form - email, password input + login button"
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
---
|
|
@@ -84,7 +84,7 @@ Read and follow `agents/compounder.md` for solution documentation.
|
|
|
84
84
|
Document solved problems for knowledge accumulation.
|
|
85
85
|
|
|
86
86
|
**Usually auto-triggered by hooks when:**
|
|
87
|
-
- "
|
|
87
|
+
- "bug fixed", "PR merged" detected
|
|
88
88
|
|
|
89
89
|
**Output location:** `.claude/vibe/solutions/`
|
|
90
90
|
|
|
@@ -98,4 +98,105 @@ Document solved problems for knowledge accumulation.
|
|
|
98
98
|
|
|
99
99
|
---
|
|
100
100
|
|
|
101
|
+
## --continue (Session Restore)
|
|
102
|
+
|
|
103
|
+
Restore previous session context for continuity.
|
|
104
|
+
|
|
105
|
+
**Usage:**
|
|
106
|
+
```
|
|
107
|
+
/vibe.utils --continue
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**What it does:**
|
|
111
|
+
1. Calls `vibe_start_session` to load project memories
|
|
112
|
+
2. Restores previous conversation context
|
|
113
|
+
3. Resumes work from last checkpoint
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Quality Gate (Mandatory)
|
|
118
|
+
|
|
119
|
+
### UI Preview Quality Checklist (--ui)
|
|
120
|
+
|
|
121
|
+
| Category | Check Item | Weight |
|
|
122
|
+
|----------|------------|--------|
|
|
123
|
+
| **Completeness** | All requested elements present | 30% |
|
|
124
|
+
| **Layout** | Proper spacing and alignment | 20% |
|
|
125
|
+
| **Labels** | All buttons/inputs labeled | 20% |
|
|
126
|
+
| **Accessibility** | Tab order logical | 15% |
|
|
127
|
+
| **Responsiveness** | Mobile/desktop variants shown | 15% |
|
|
128
|
+
|
|
129
|
+
### Diagram Quality Checklist (--diagram)
|
|
130
|
+
|
|
131
|
+
| Category | Check Item | Weight |
|
|
132
|
+
|----------|------------|--------|
|
|
133
|
+
| **Accuracy** | Matches actual codebase structure | 30% |
|
|
134
|
+
| **Completeness** | All major components included | 25% |
|
|
135
|
+
| **Relationships** | Connections correctly shown | 20% |
|
|
136
|
+
| **Readability** | Not too cluttered | 15% |
|
|
137
|
+
| **Mermaid Syntax** | Valid, renders correctly | 10% |
|
|
138
|
+
|
|
139
|
+
### E2E Test Quality Checklist (--e2e)
|
|
140
|
+
|
|
141
|
+
| Category | Check Item | Weight |
|
|
142
|
+
|----------|------------|--------|
|
|
143
|
+
| **Coverage** | All critical paths tested | 25% |
|
|
144
|
+
| **Assertions** | Each step has verification | 20% |
|
|
145
|
+
| **Stability** | No flaky selectors | 20% |
|
|
146
|
+
| **Error Handling** | Failures captured with screenshots | 15% |
|
|
147
|
+
| **Performance** | Tests complete in reasonable time | 10% |
|
|
148
|
+
| **Accessibility** | a11y checks included | 10% |
|
|
149
|
+
|
|
150
|
+
### E2E Test Requirements
|
|
151
|
+
|
|
152
|
+
| Test Type | Required Output |
|
|
153
|
+
|-----------|-----------------|
|
|
154
|
+
| Standard | Pass/fail status + console errors |
|
|
155
|
+
| Visual (`--visual`) | Screenshot comparison + diff |
|
|
156
|
+
| Recording (`--record`) | Video file path + duration |
|
|
157
|
+
|
|
158
|
+
### E2E Forbidden Patterns
|
|
159
|
+
|
|
160
|
+
| Pattern | Issue | Required Fix |
|
|
161
|
+
|---------|-------|--------------|
|
|
162
|
+
| Hardcoded waits (`sleep(5000)`) | Flaky tests | Use `waitFor` conditions |
|
|
163
|
+
| XPath selectors | Brittle | Use data-testid |
|
|
164
|
+
| No assertions | Useless test | Add expect() calls |
|
|
165
|
+
| Ignoring console errors | Missing bugs | Capture and report |
|
|
166
|
+
|
|
167
|
+
### Compound (Solution) Quality Checklist (--compound)
|
|
168
|
+
|
|
169
|
+
| Category | Check Item | Weight |
|
|
170
|
+
|----------|------------|--------|
|
|
171
|
+
| **Problem** | Clearly described root cause | 25% |
|
|
172
|
+
| **Solution** | Step-by-step fix documented | 25% |
|
|
173
|
+
| **Prevention** | How to avoid in future | 20% |
|
|
174
|
+
| **Code Samples** | Before/after snippets | 15% |
|
|
175
|
+
| **Tags** | Properly categorized | 15% |
|
|
176
|
+
|
|
177
|
+
### Quality Score Calculation
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
Score = Σ(checked items × weight) / 100
|
|
181
|
+
|
|
182
|
+
Grades:
|
|
183
|
+
- 95-100: ✅ EXCELLENT - Ready to use
|
|
184
|
+
- 85-94: ✅ GOOD - Minor improvements optional
|
|
185
|
+
- 70-84: ⚠️ FAIR - Improvements needed
|
|
186
|
+
- 0-69: ❌ POOR - Redo required
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Output Requirements by Tool
|
|
190
|
+
|
|
191
|
+
| Tool | Required Output |
|
|
192
|
+
|------|-----------------|
|
|
193
|
+
| `--ui` | ASCII preview + component list |
|
|
194
|
+
| `--diagram` | Valid Mermaid code + rendered preview |
|
|
195
|
+
| `--diagram --er` | Entity names, fields, relationships |
|
|
196
|
+
| `--diagram --flow` | Start/end nodes, decision points |
|
|
197
|
+
| `--e2e` | Test file + execution results |
|
|
198
|
+
| `--compound` | Solution markdown + category tag |
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
101
202
|
ARGUMENTS: $ARGUMENTS
|
package/commands/vibe.verify.md
CHANGED
|
@@ -5,29 +5,29 @@ argument-hint: "feature name"
|
|
|
5
5
|
|
|
6
6
|
# /vibe.verify
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
**Automated Quality Verification** - Making quality trustworthy even for non-developers.
|
|
9
9
|
|
|
10
|
-
>
|
|
10
|
+
> All scenarios passed = Quality assured
|
|
11
11
|
|
|
12
12
|
## Usage
|
|
13
13
|
|
|
14
14
|
```
|
|
15
|
-
/vibe.verify "feature-name" # SPEC
|
|
16
|
-
/vibe.verify --e2e "feature-name" # E2E
|
|
17
|
-
/vibe.verify --e2e --visual #
|
|
18
|
-
/vibe.verify --e2e --record #
|
|
15
|
+
/vibe.verify "feature-name" # SPEC-based verification
|
|
16
|
+
/vibe.verify --e2e "feature-name" # E2E browser test (agents/e2e-tester.md)
|
|
17
|
+
/vibe.verify --e2e --visual # Visual regression test
|
|
18
|
+
/vibe.verify --e2e --record # Video recording
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Core Principles
|
|
22
22
|
|
|
23
23
|
```
|
|
24
24
|
┌─────────────────────────────────────────────────────────────────┐
|
|
25
|
-
│
|
|
25
|
+
│ What non-developers need to know │
|
|
26
26
|
│ │
|
|
27
|
-
│ ✅
|
|
28
|
-
│ 📈
|
|
27
|
+
│ ✅ Scenarios: 4/4 passed │
|
|
28
|
+
│ 📈 Quality Score: 94/100 │
|
|
29
29
|
│ │
|
|
30
|
-
│
|
|
30
|
+
│ Just look at this. The system handles the rest. │
|
|
31
31
|
└─────────────────────────────────────────────────────────────────┘
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -36,114 +36,114 @@ argument-hint: "feature name"
|
|
|
36
36
|
### 1. Load Feature File
|
|
37
37
|
|
|
38
38
|
```
|
|
39
|
-
📄 .claude/vibe/features/{feature-name}.feature →
|
|
40
|
-
📄 .claude/vibe/specs/{feature-name}.md →
|
|
39
|
+
📄 .claude/vibe/features/{feature-name}.feature → Scenario list
|
|
40
|
+
📄 .claude/vibe/specs/{feature-name}.md → Verification criteria (reference)
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
**
|
|
43
|
+
**If feature file does not exist**:
|
|
44
44
|
```
|
|
45
|
-
❌ Feature
|
|
46
|
-
|
|
45
|
+
❌ Feature file not found.
|
|
46
|
+
Run /vibe.spec "{feature-name}" first.
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
### 2. Scenario-by-Scenario Verification
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Automatic verification for each scenario:
|
|
52
52
|
|
|
53
53
|
```
|
|
54
54
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
55
|
-
🔍 Scenario 1/4:
|
|
55
|
+
🔍 Scenario 1/4: Valid login success
|
|
56
56
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
57
57
|
|
|
58
|
-
Given:
|
|
59
|
-
→
|
|
60
|
-
→
|
|
58
|
+
Given: User is registered
|
|
59
|
+
→ Verify: User creation API exists? ✅
|
|
60
|
+
→ Verify: Test user data available? ✅
|
|
61
61
|
|
|
62
|
-
When:
|
|
63
|
-
→
|
|
64
|
-
→
|
|
62
|
+
When: Login with valid email and password
|
|
63
|
+
→ Verify: POST /login endpoint exists? ✅
|
|
64
|
+
→ Verify: Request handling logic exists? ✅
|
|
65
65
|
|
|
66
|
-
Then:
|
|
67
|
-
→
|
|
68
|
-
→
|
|
66
|
+
Then: Login success + JWT token returned
|
|
67
|
+
→ Verify: Success response code 200? ✅
|
|
68
|
+
→ Verify: JWT token included? ✅
|
|
69
69
|
|
|
70
|
-
✅ Scenario 1
|
|
70
|
+
✅ Scenario 1 passed!
|
|
71
71
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
### 3. Verification Methods (
|
|
74
|
+
### 3. Verification Methods (Auto-selected)
|
|
75
75
|
|
|
76
|
-
|
|
|
77
|
-
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
76
|
+
| Method | Condition | Verification Content |
|
|
77
|
+
|--------|-----------|---------------------|
|
|
78
|
+
| **Test Execution** | When test files exist | Run `npm test`, `pytest`, etc. |
|
|
79
|
+
| **Code Analysis** | Always | Check implementation, verify logic |
|
|
80
|
+
| **Build Verification** | When build script exists | Check for compile errors |
|
|
81
|
+
| **Type Check** | TypeScript, etc. | Check for type errors |
|
|
82
82
|
|
|
83
|
-
### 4. Quality Report (
|
|
83
|
+
### 4. Quality Report (Auto-generated)
|
|
84
84
|
|
|
85
85
|
```
|
|
86
86
|
┌─────────────────────────────────────────────────────────────────┐
|
|
87
87
|
│ 📊 VERIFICATION REPORT: login │
|
|
88
88
|
├─────────────────────────────────────────────────────────────────┤
|
|
89
89
|
│ │
|
|
90
|
-
│ ✅
|
|
90
|
+
│ ✅ Scenarios: 4/4 passed (100%) │
|
|
91
91
|
│ │
|
|
92
92
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
93
93
|
│ │ # │ Scenario │ Given │ When │ Then │ Status │ │
|
|
94
94
|
│ │───│───────────────────────│───────│──────│──────│────────│ │
|
|
95
|
-
│ │ 1 │
|
|
96
|
-
│ │ 2 │
|
|
97
|
-
│ │ 3 │
|
|
98
|
-
│ │ 4 │
|
|
95
|
+
│ │ 1 │ Valid login success │ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
96
|
+
│ │ 2 │ Invalid password error│ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
97
|
+
│ │ 3 │ Email format validation│ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
98
|
+
│ │ 4 │ Forgot password link │ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
99
99
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
100
100
|
│ │
|
|
101
|
-
│ 📈
|
|
101
|
+
│ 📈 Quality Score: 94/100 │
|
|
102
102
|
│ │
|
|
103
103
|
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
104
|
-
│ │
|
|
104
|
+
│ │ Item │ Result│ Details │ │
|
|
105
105
|
│ │───────────────────│───────│─────────────────────────────│ │
|
|
106
|
-
│ │
|
|
107
|
-
│ │
|
|
108
|
-
│ │
|
|
109
|
-
│ │
|
|
110
|
-
│ │
|
|
106
|
+
│ │ Build │ ✅ │ Success │ │
|
|
107
|
+
│ │ Tests │ ✅ │ 12/12 passed │ │
|
|
108
|
+
│ │ Type Check │ ✅ │ 0 errors │ │
|
|
109
|
+
│ │ Complexity │ ✅ │ All functions ≤30 lines │ │
|
|
110
|
+
│ │ Code Coverage │ ⚠️ │ 78% (target: 80%) │ │
|
|
111
111
|
│ └─────────────────────────────────────────────────────────┘ │
|
|
112
112
|
│ │
|
|
113
|
-
│ 📋
|
|
114
|
-
│ -
|
|
113
|
+
│ 📋 Recommendations: │
|
|
114
|
+
│ - Need 2% more code coverage (auth.service.ts line 45-52) │
|
|
115
115
|
│ │
|
|
116
116
|
└─────────────────────────────────────────────────────────────────┘
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
###
|
|
119
|
+
### Failure Report
|
|
120
120
|
|
|
121
121
|
```
|
|
122
122
|
┌─────────────────────────────────────────────────────────────────┐
|
|
123
123
|
│ 📊 VERIFICATION REPORT: login │
|
|
124
124
|
├─────────────────────────────────────────────────────────────────┤
|
|
125
125
|
│ │
|
|
126
|
-
│ ❌
|
|
126
|
+
│ ❌ Scenarios: 3/4 passed (75%) │
|
|
127
127
|
│ │
|
|
128
128
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
129
129
|
│ │ # │ Scenario │ Given │ When │ Then │ Status │ │
|
|
130
130
|
│ │───│───────────────────────│───────│──────│──────│────────│ │
|
|
131
|
-
│ │ 1 │
|
|
132
|
-
│ │ 2 │
|
|
133
|
-
│ │ 3 │
|
|
134
|
-
│ │ 4 │
|
|
131
|
+
│ │ 1 │ Valid login success │ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
132
|
+
│ │ 2 │ Invalid password error│ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
133
|
+
│ │ 3 │ Email format validation│ ✅ │ ✅ │ ✅ │ ✅ │ │
|
|
134
|
+
│ │ 4 │ Forgot password link │ ✅ │ ❌ │ - │ ❌ │ │
|
|
135
135
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
136
136
|
│ │
|
|
137
|
-
│ ❌
|
|
137
|
+
│ ❌ Failure Details: │
|
|
138
138
|
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
|
139
|
-
│ Scenario 4:
|
|
139
|
+
│ Scenario 4: Forgot password link │
|
|
140
140
|
│ │
|
|
141
|
-
│ When: "
|
|
142
|
-
│ ❌
|
|
143
|
-
│ 📍
|
|
144
|
-
│ 💡
|
|
141
|
+
│ When: Click "Forgot password" │
|
|
142
|
+
│ ❌ Issue: Link not implemented │
|
|
143
|
+
│ 📍 Location: LoginForm.tsx line 42 │
|
|
144
|
+
│ 💡 Fix: Need to add "Forgot password" link │
|
|
145
145
|
│ │
|
|
146
|
-
│ 🔧
|
|
146
|
+
│ 🔧 Auto-fix command: /vibe.run "login" --fix │
|
|
147
147
|
│ │
|
|
148
148
|
└─────────────────────────────────────────────────────────────────┘
|
|
149
149
|
```
|
|
@@ -167,59 +167,59 @@ User: /vibe.verify "login"
|
|
|
167
167
|
|
|
168
168
|
Claude:
|
|
169
169
|
📄 Loading Feature: .claude/vibe/features/login.feature
|
|
170
|
-
🔍
|
|
170
|
+
🔍 Starting verification...
|
|
171
171
|
|
|
172
172
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
173
|
-
🔍 Scenario 1/4:
|
|
173
|
+
🔍 Scenario 1/4: Valid login success
|
|
174
174
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
175
|
-
✅ Given:
|
|
176
|
-
✅ When:
|
|
177
|
-
✅ Then: JWT
|
|
178
|
-
✅
|
|
175
|
+
✅ Given: User registered - OK
|
|
176
|
+
✅ When: Login attempt - OK
|
|
177
|
+
✅ Then: JWT token returned - OK
|
|
178
|
+
✅ Passed!
|
|
179
179
|
|
|
180
180
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
181
|
-
🔍 Scenario 2/4:
|
|
181
|
+
🔍 Scenario 2/4: Invalid password error
|
|
182
182
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
183
183
|
✅ Given: OK
|
|
184
184
|
✅ When: OK
|
|
185
185
|
✅ Then: OK
|
|
186
|
-
✅
|
|
186
|
+
✅ Passed!
|
|
187
187
|
|
|
188
188
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
189
|
-
🔍 Scenario 3/4:
|
|
189
|
+
🔍 Scenario 3/4: Email format validation
|
|
190
190
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
191
191
|
✅ Given: OK
|
|
192
192
|
✅ When: OK
|
|
193
193
|
✅ Then: OK
|
|
194
|
-
✅
|
|
194
|
+
✅ Passed!
|
|
195
195
|
|
|
196
196
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
197
|
-
🔍 Scenario 4/4:
|
|
197
|
+
🔍 Scenario 4/4: Forgot password link
|
|
198
198
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
199
199
|
✅ Given: OK
|
|
200
|
-
❌ When: "
|
|
201
|
-
- Then: (
|
|
202
|
-
❌
|
|
200
|
+
❌ When: "Forgot password" link - missing
|
|
201
|
+
- Then: (skipped)
|
|
202
|
+
❌ Failed!
|
|
203
203
|
|
|
204
204
|
┌─────────────────────────────────────────────────────────────────┐
|
|
205
205
|
│ 📊 VERIFICATION REPORT: login │
|
|
206
206
|
├─────────────────────────────────────────────────────────────────┤
|
|
207
207
|
│ │
|
|
208
|
-
│ ❌
|
|
208
|
+
│ ❌ Scenarios: 3/4 passed (75%) │
|
|
209
209
|
│ │
|
|
210
210
|
│ | # | Scenario | Status | │
|
|
211
211
|
│ |---|───────────────────────|────────| │
|
|
212
|
-
│ | 1 |
|
|
213
|
-
│ | 2 |
|
|
214
|
-
│ | 3 |
|
|
215
|
-
│ | 4 |
|
|
212
|
+
│ | 1 | Valid login success | ✅ | │
|
|
213
|
+
│ | 2 | Invalid password error| ✅ | │
|
|
214
|
+
│ | 3 | Email format validation| ✅ | │
|
|
215
|
+
│ | 4 | Forgot password link | ❌ | │
|
|
216
216
|
│ │
|
|
217
|
-
│ 📈
|
|
217
|
+
│ 📈 Quality Score: 75/100 │
|
|
218
218
|
│ │
|
|
219
|
-
│ ❌
|
|
220
|
-
│ - Scenario 4:
|
|
219
|
+
│ ❌ Fixes needed: │
|
|
220
|
+
│ - Scenario 4: Add "Forgot password" link in LoginForm.tsx │
|
|
221
221
|
│ │
|
|
222
|
-
│ 🔧
|
|
222
|
+
│ 🔧 Auto-fix: /vibe.run "login" --fix │
|
|
223
223
|
│ │
|
|
224
224
|
└─────────────────────────────────────────────────────────────────┘
|
|
225
225
|
```
|
|
@@ -279,4 +279,97 @@ On verification fail:
|
|
|
279
279
|
|
|
280
280
|
---
|
|
281
281
|
|
|
282
|
+
## Quality Gate (Mandatory)
|
|
283
|
+
|
|
284
|
+
### Verification Quality Checklist
|
|
285
|
+
|
|
286
|
+
Before marking verification complete, ALL items must pass:
|
|
287
|
+
|
|
288
|
+
| Category | Check Item | Weight |
|
|
289
|
+
|----------|------------|--------|
|
|
290
|
+
| **Scenario Coverage** | All scenarios from feature file tested | 25% |
|
|
291
|
+
| **Given Verification** | All preconditions validated | 15% |
|
|
292
|
+
| **When Verification** | All actions executable | 15% |
|
|
293
|
+
| **Then Verification** | All expected outcomes confirmed | 20% |
|
|
294
|
+
| **Build Status** | Project builds without errors | 10% |
|
|
295
|
+
| **Test Status** | All existing tests pass | 10% |
|
|
296
|
+
| **Type Check** | No TypeScript/type errors | 5% |
|
|
297
|
+
|
|
298
|
+
### Verification Score Calculation
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
Score = (passed_scenarios / total_scenarios) × 100
|
|
302
|
+
|
|
303
|
+
Grades:
|
|
304
|
+
- 100%: ✅ PERFECT - All scenarios pass
|
|
305
|
+
- 90-99%: ⚠️ ALMOST - Minor gaps, review needed
|
|
306
|
+
- 70-89%: ❌ INCOMPLETE - Significant gaps
|
|
307
|
+
- 0-69%: ❌ FAILED - Major implementation missing
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Pass/Fail Criteria
|
|
311
|
+
|
|
312
|
+
| Metric | Pass Threshold | Action on Fail |
|
|
313
|
+
|--------|----------------|----------------|
|
|
314
|
+
| Scenario pass rate | 100% | Run `/vibe.run --fix` |
|
|
315
|
+
| Build status | Success | Fix build errors first |
|
|
316
|
+
| Test pass rate | 100% | Fix failing tests |
|
|
317
|
+
| Type check | 0 errors | Fix type errors |
|
|
318
|
+
|
|
319
|
+
### Verification Methods Matrix
|
|
320
|
+
|
|
321
|
+
| Method | Trigger Condition | What It Checks |
|
|
322
|
+
|--------|-------------------|----------------|
|
|
323
|
+
| **Code Analysis** | Always | Implementation exists |
|
|
324
|
+
| **Test Execution** | Test files exist | Logic correctness |
|
|
325
|
+
| **Build Verification** | Build script exists | Compilation success |
|
|
326
|
+
| **Type Check** | tsconfig.json exists | Type safety |
|
|
327
|
+
| **Lint Check** | ESLint config exists | Code style |
|
|
328
|
+
|
|
329
|
+
### Scenario Verification Depth
|
|
330
|
+
|
|
331
|
+
For each scenario, verify at THREE levels:
|
|
332
|
+
|
|
333
|
+
| Level | Verification | Example |
|
|
334
|
+
|-------|--------------|---------|
|
|
335
|
+
| **L1: Existence** | Code/function exists | `login()` function defined |
|
|
336
|
+
| **L2: Logic** | Implementation is correct | Validates email format |
|
|
337
|
+
| **L3: Integration** | Works with other components | Returns valid JWT |
|
|
338
|
+
|
|
339
|
+
### Auto-Fix Triggers
|
|
340
|
+
|
|
341
|
+
| Verification Failure | Auto-Fix Action |
|
|
342
|
+
|----------------------|-----------------|
|
|
343
|
+
| Missing implementation | Generate skeleton from scenario |
|
|
344
|
+
| Test failure | Analyze and suggest fix |
|
|
345
|
+
| Build error | Show error location |
|
|
346
|
+
| Type error | Suggest type annotations |
|
|
347
|
+
|
|
348
|
+
### Verification Report Requirements
|
|
349
|
+
|
|
350
|
+
Every verification MUST produce:
|
|
351
|
+
|
|
352
|
+
1. **Scenario Summary Table**
|
|
353
|
+
- Scenario name
|
|
354
|
+
- Given/When/Then status (✅/❌)
|
|
355
|
+
- Overall status
|
|
356
|
+
|
|
357
|
+
2. **Quality Metrics**
|
|
358
|
+
- Build status
|
|
359
|
+
- Test pass count
|
|
360
|
+
- Type error count
|
|
361
|
+
- Code coverage percentage
|
|
362
|
+
|
|
363
|
+
3. **Failure Details** (if any)
|
|
364
|
+
- Exact failure point (Given/When/Then)
|
|
365
|
+
- Expected vs actual
|
|
366
|
+
- File path and line number
|
|
367
|
+
- Suggested fix command
|
|
368
|
+
|
|
369
|
+
4. **Recommendations**
|
|
370
|
+
- Specific files to modify
|
|
371
|
+
- Auto-fix command if available
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
282
375
|
ARGUMENTS: $ARGUMENTS
|
package/dist/cli/detect.js
CHANGED
|
@@ -301,46 +301,46 @@ export function getLanguageRulesForStacks(stacks) {
|
|
|
301
301
|
* 언어별 CLAUDE.md 규칙
|
|
302
302
|
*/
|
|
303
303
|
export const LANGUAGE_RULES = {
|
|
304
|
-
typescript: `### TypeScript
|
|
305
|
-
- \`any\`
|
|
306
|
-
- \`as any\`
|
|
307
|
-
- \`@ts-ignore\`
|
|
308
|
-
-
|
|
309
|
-
python: `### Python
|
|
310
|
-
-
|
|
311
|
-
- \`# type: ignore\`
|
|
312
|
-
- f-
|
|
313
|
-
-
|
|
314
|
-
go: `### Go
|
|
315
|
-
-
|
|
316
|
-
-
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
rust: `### Rust
|
|
320
|
-
- unwrap()/expect()
|
|
321
|
-
- unsafe
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
java: `### Java
|
|
325
|
-
- Optional
|
|
326
|
-
-
|
|
327
|
-
-
|
|
328
|
-
-
|
|
329
|
-
kotlin: `### Kotlin
|
|
330
|
-
- nullable
|
|
331
|
-
- !!
|
|
332
|
-
- data
|
|
333
|
-
-
|
|
334
|
-
dart: `### Dart
|
|
335
|
-
- null safety
|
|
336
|
-
- late
|
|
337
|
-
- const
|
|
338
|
-
-
|
|
339
|
-
swift: `### Swift
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
-
|
|
304
|
+
typescript: `### TypeScript Rules
|
|
305
|
+
- No \`any\` type → use \`unknown\` + type guards
|
|
306
|
+
- No \`as any\` casting → define proper interfaces
|
|
307
|
+
- No \`@ts-ignore\` → fix type issues at root
|
|
308
|
+
- Explicit return types on all functions`,
|
|
309
|
+
python: `### Python Rules
|
|
310
|
+
- Type hints required (parameters, return values)
|
|
311
|
+
- No \`# type: ignore\` → fix type issues at root
|
|
312
|
+
- Prefer f-strings (over format())
|
|
313
|
+
- Use list comprehensions appropriately`,
|
|
314
|
+
go: `### Go Rules
|
|
315
|
+
- Handle errors immediately (if err != nil)
|
|
316
|
+
- Explicit error wrapping (fmt.Errorf with %w)
|
|
317
|
+
- Define interfaces at point of use
|
|
318
|
+
- Prevent goroutine leaks (use context)`,
|
|
319
|
+
rust: `### Rust Rules
|
|
320
|
+
- No unwrap()/expect() in production → handle Result/Option
|
|
321
|
+
- Minimize unsafe blocks
|
|
322
|
+
- Define explicit error types
|
|
323
|
+
- Document ownership/lifetime clearly`,
|
|
324
|
+
java: `### Java Rules
|
|
325
|
+
- Use Optional (instead of null)
|
|
326
|
+
- Prefer immutable objects (final fields)
|
|
327
|
+
- Handle checked exceptions properly
|
|
328
|
+
- Utilize Stream API`,
|
|
329
|
+
kotlin: `### Kotlin Rules
|
|
330
|
+
- Explicit nullable types (?)
|
|
331
|
+
- No !! operator → use safe call (?.)
|
|
332
|
+
- Use data classes actively
|
|
333
|
+
- Implement utilities as extension functions`,
|
|
334
|
+
dart: `### Dart Rules
|
|
335
|
+
- Follow null safety (use ? and ! properly)
|
|
336
|
+
- Avoid late keyword abuse
|
|
337
|
+
- Use const constructors
|
|
338
|
+
- Use async/await for async code`,
|
|
339
|
+
swift: `### Swift Rules
|
|
340
|
+
- No force unwrapping → use guard let / if let
|
|
341
|
+
- Prefer protocol-oriented programming
|
|
342
|
+
- Prefer value types (struct)
|
|
343
|
+
- Watch memory management with @escaping closures`
|
|
344
344
|
};
|
|
345
345
|
/**
|
|
346
346
|
* 스택에 맞는 언어 규칙 내용 반환
|