@su-record/vibe 2.6.27 → 2.6.28
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 +202 -202
- package/LICENSE +21 -21
- package/README.md +267 -267
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui-previewer.md +268 -268
- package/commands/vibe.analyze.md +356 -356
- package/commands/vibe.reason.md +329 -329
- package/commands/vibe.review.md +423 -423
- package/commands/vibe.run.md +1313 -1313
- package/commands/vibe.spec.md +1054 -1054
- package/commands/vibe.spec.review.md +412 -412
- package/commands/vibe.trace.md +161 -161
- package/commands/vibe.utils.md +376 -376
- package/commands/vibe.verify.md +375 -375
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/detect.js +32 -32
- package/dist/cli/hud.js +20 -20
- package/dist/cli/index.js +112 -112
- package/dist/cli/llm.js +144 -144
- package/dist/cli/mcp.d.ts +49 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +169 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/postinstall.d.ts.map +1 -1
- package/dist/cli/postinstall.js +886 -858
- package/dist/cli/postinstall.js.map +1 -1
- package/dist/cli/setup/GlobalInstaller.d.ts +6 -0
- package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
- package/dist/cli/setup/GlobalInstaller.js +26 -0
- package/dist/cli/setup/GlobalInstaller.js.map +1 -1
- package/dist/lib/DeepInit.js +24 -24
- package/dist/lib/IterationTracker.js +11 -11
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/ReviewRace.js +96 -96
- package/dist/lib/SkillFrontmatter.js +28 -28
- package/dist/lib/SkillQualityGate.js +9 -9
- package/dist/lib/SkillRepository.js +159 -159
- package/dist/lib/UltraQA.js +77 -77
- package/dist/lib/gemini-api.js +5 -5
- package/dist/lib/gemini-mcp.d.ts +10 -0
- package/dist/lib/gemini-mcp.d.ts.map +1 -0
- package/dist/lib/gemini-mcp.js +353 -0
- package/dist/lib/gemini-mcp.js.map +1 -0
- package/dist/lib/gpt-api.js +4 -4
- package/dist/lib/gpt-mcp.d.ts +10 -0
- package/dist/lib/gpt-mcp.d.ts.map +1 -0
- package/dist/lib/gpt-mcp.js +352 -0
- package/dist/lib/gpt-mcp.js.map +1 -0
- package/dist/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/lib/memory/MemorySearch.js +43 -43
- package/dist/lib/memory/MemoryStorage.js +130 -130
- package/dist/lib/memory/ObservationStore.js +28 -28
- package/dist/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/lib/memory/SessionRAGStore.js +216 -216
- package/dist/lib/memory/SessionSummarizer.js +9 -9
- package/dist/orchestrator/AgentManager.js +12 -12
- package/dist/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/orchestrator/SmartRouter.js +11 -11
- package/dist/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
- package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
- package/dist/tools/analytics/getUsageAnalytics.js +246 -0
- package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
- package/dist/tools/analytics/index.d.ts +5 -0
- package/dist/tools/analytics/index.d.ts.map +1 -0
- package/dist/tools/analytics/index.js +5 -0
- package/dist/tools/analytics/index.js.map +1 -0
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/getCodingGuide.d.ts +7 -0
- package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
- package/dist/tools/convention/getCodingGuide.js +69 -0
- package/dist/tools/convention/getCodingGuide.js.map +1 -0
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
- package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
- package/dist/tools/planning/analyzeRequirements.js +171 -0
- package/dist/tools/planning/analyzeRequirements.js.map +1 -0
- package/dist/tools/planning/createUserStories.d.ts +9 -0
- package/dist/tools/planning/createUserStories.d.ts.map +1 -0
- package/dist/tools/planning/createUserStories.js +124 -0
- package/dist/tools/planning/createUserStories.js.map +1 -0
- package/dist/tools/planning/featureRoadmap.d.ts +10 -0
- package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
- package/dist/tools/planning/featureRoadmap.js +207 -0
- package/dist/tools/planning/featureRoadmap.js.map +1 -0
- package/dist/tools/planning/generatePrd.d.ts +11 -0
- package/dist/tools/planning/generatePrd.d.ts.map +1 -0
- package/dist/tools/planning/generatePrd.js +161 -0
- package/dist/tools/planning/generatePrd.js.map +1 -0
- package/dist/tools/planning/index.d.ts +8 -0
- package/dist/tools/planning/index.d.ts.map +1 -0
- package/dist/tools/planning/index.js +8 -0
- package/dist/tools/planning/index.js.map +1 -0
- package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
- package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
- package/dist/tools/prompt/analyzePrompt.js +150 -0
- package/dist/tools/prompt/analyzePrompt.js.map +1 -0
- package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
- package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
- package/dist/tools/prompt/enhancePrompt.js +110 -0
- package/dist/tools/prompt/enhancePrompt.js.map +1 -0
- package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
- package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
- package/dist/tools/prompt/enhancePromptGemini.js +332 -0
- package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
- package/dist/tools/prompt/index.d.ts +7 -0
- package/dist/tools/prompt/index.d.ts.map +1 -0
- package/dist/tools/prompt/index.js +7 -0
- package/dist/tools/prompt/index.js.map +1 -0
- package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
- package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
- package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
- package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
- package/dist/tools/reasoning/index.d.ts +5 -0
- package/dist/tools/reasoning/index.d.ts.map +1 -0
- package/dist/tools/reasoning/index.js +5 -0
- package/dist/tools/reasoning/index.js.map +1 -0
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
- package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
- package/dist/tools/thinking/analyzeProblem.js +55 -0
- package/dist/tools/thinking/analyzeProblem.js.map +1 -0
- package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
- package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
- package/dist/tools/thinking/breakDownProblem.js +145 -0
- package/dist/tools/thinking/breakDownProblem.js.map +1 -0
- package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
- package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
- package/dist/tools/thinking/createThinkingChain.js +44 -0
- package/dist/tools/thinking/createThinkingChain.js.map +1 -0
- package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
- package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
- package/dist/tools/thinking/formatAsPlan.js +78 -0
- package/dist/tools/thinking/formatAsPlan.js.map +1 -0
- package/dist/tools/thinking/index.d.ts +10 -0
- package/dist/tools/thinking/index.d.ts.map +1 -0
- package/dist/tools/thinking/index.js +10 -0
- package/dist/tools/thinking/index.js.map +1 -0
- package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
- package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
- package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
- package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
- package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
- package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
- package/dist/tools/thinking/thinkAloudProcess.js +80 -0
- package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
- package/hooks/hooks.json +115 -115
- package/hooks/scripts/code-check.js +70 -70
- package/hooks/scripts/code-review.js +22 -22
- package/hooks/scripts/complexity.js +22 -22
- package/hooks/scripts/compound.js +23 -23
- package/hooks/scripts/context-save.js +53 -53
- package/hooks/scripts/gemini-ui-gen.js +281 -281
- package/hooks/scripts/generate-brand-assets.js +474 -474
- package/hooks/scripts/hud-multiline.js +262 -262
- package/hooks/scripts/hud-status.js +291 -291
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +171 -171
- package/hooks/scripts/post-edit.js +97 -97
- package/hooks/scripts/post-tool-verify.js +210 -210
- package/hooks/scripts/pre-tool-guard.js +125 -125
- package/hooks/scripts/prompt-dispatcher.js +161 -161
- package/hooks/scripts/recall.js +22 -22
- package/hooks/scripts/session-start.js +30 -30
- package/hooks/scripts/skill-injector.js +191 -191
- package/hooks/scripts/utils.js +97 -97
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +84 -84
- package/skills/brand-assets.md +141 -141
- package/skills/commerce-patterns.md +361 -361
- package/skills/context7-usage.md +102 -102
- package/skills/e2e-commerce.md +304 -304
- package/skills/frontend-design.md +92 -92
- package/skills/git-worktree.md +181 -181
- package/skills/parallel-research.md +77 -77
- package/skills/priority-todos.md +239 -239
- package/skills/seo-checklist.md +244 -244
- package/skills/tool-fallback.md +190 -190
- package/skills/vibe-capabilities.md +161 -161
- package/vibe/constitution.md +227 -227
- package/vibe/rules/core/communication-guide.md +98 -98
- package/vibe/rules/core/development-philosophy.md +52 -52
- package/vibe/rules/core/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
|
@@ -1,412 +1,412 @@
|
|
|
1
|
-
# /vibe.spec.review - SPEC Quality Review
|
|
2
|
-
|
|
3
|
-
Review and enhance SPEC with GPT/Gemini cross-validation.
|
|
4
|
-
|
|
5
|
-
**Purpose:** Run this command in a NEW session after `/vibe.spec` to ensure accurate review execution.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Usage
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
/vibe.spec.review "feature-name"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
**Prerequisites:**
|
|
16
|
-
- SPEC file exists: `.claude/vibe/specs/{feature-name}.md` (single) or `.claude/vibe/specs/{feature-name}/_index.md` (split)
|
|
17
|
-
- Feature file exists: `.claude/vibe/features/{feature-name}.feature` (single) or `.claude/vibe/features/{feature-name}/_index.feature` (split)
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Workflow
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
/vibe.spec "feature" → SPEC 생성 완료
|
|
25
|
-
↓
|
|
26
|
-
/new (새 세션)
|
|
27
|
-
↓
|
|
28
|
-
/vibe.spec.review "feature" → 품질 검증 + GPT/Gemini 리뷰
|
|
29
|
-
↓
|
|
30
|
-
/vibe.run "feature"
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Step 1: Load SPEC Files
|
|
36
|
-
|
|
37
|
-
Detect SPEC structure (single file or split folder) and read files:
|
|
38
|
-
|
|
39
|
-
**Single file structure:**
|
|
40
|
-
```
|
|
41
|
-
.claude/vibe/specs/{feature-name}.md
|
|
42
|
-
.claude/vibe/features/{feature-name}.feature
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Split folder structure:**
|
|
46
|
-
```
|
|
47
|
-
.claude/vibe/specs/{feature-name}/_index.md (+ phase files)
|
|
48
|
-
.claude/vibe/features/{feature-name}/_index.feature (+ phase files)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Detection logic:**
|
|
52
|
-
1. Check if `.claude/vibe/specs/{feature-name}/` directory exists → Split mode
|
|
53
|
-
2. Otherwise check `.claude/vibe/specs/{feature-name}.md` → Single mode
|
|
54
|
-
3. If neither exists → Error
|
|
55
|
-
|
|
56
|
-
**Output:**
|
|
57
|
-
```
|
|
58
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
-
📋 SPEC REVIEW: {feature-name}
|
|
60
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
61
|
-
|
|
62
|
-
Loading files...
|
|
63
|
-
Mode: {single|split}
|
|
64
|
-
✅ SPEC: .claude/vibe/specs/{feature-name}.md (or _index.md + N phase files)
|
|
65
|
-
✅ Feature: .claude/vibe/features/{feature-name}.feature (or _index.feature + N phase files)
|
|
66
|
-
|
|
67
|
-
Extracted info:
|
|
68
|
-
- Feature: {feature description}
|
|
69
|
-
- Stack: {tech stack}
|
|
70
|
-
- Phases: {number of phases}
|
|
71
|
-
- Scenarios: {number of scenarios}
|
|
72
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## Step 2: Quality Validation (95-Point Gate)
|
|
78
|
-
|
|
79
|
-
**🚨 MANDATORY: Score must be ≥ 95 to proceed**
|
|
80
|
-
|
|
81
|
-
### 2.1 Quality Checklist
|
|
82
|
-
|
|
83
|
-
| Category | Check Item | Weight |
|
|
84
|
-
|----------|------------|--------|
|
|
85
|
-
| **Completeness** | All user flows included in Task | 15% |
|
|
86
|
-
| **Completeness** | All ACs converted to Feature scenarios | 10% |
|
|
87
|
-
| **Completeness** | Error handling scenarios defined | 10% |
|
|
88
|
-
| **Specificity** | All numbers specified (timeout, limits, etc.) | 15% |
|
|
89
|
-
| **Specificity** | No ambiguous terms ("appropriate", "proper", etc.) | 10% |
|
|
90
|
-
| **Testability** | Each AC is verifiable | 10% |
|
|
91
|
-
| **Testability** | Feature scenarios have concrete Given/When/Then | 10% |
|
|
92
|
-
| **Security** | Auth/permission requirements specified | 10% |
|
|
93
|
-
| **Performance** | Response time/load requirements specified | 10% |
|
|
94
|
-
|
|
95
|
-
### 2.2 Quality Gate Loop
|
|
96
|
-
|
|
97
|
-
```python
|
|
98
|
-
max_iterations = 3
|
|
99
|
-
iteration = 0
|
|
100
|
-
|
|
101
|
-
while iteration < max_iterations:
|
|
102
|
-
iteration += 1
|
|
103
|
-
score = calculate_quality_score(spec, feature)
|
|
104
|
-
|
|
105
|
-
print(f"━━━ Quality Check [{iteration}/{max_iterations}] ━━━")
|
|
106
|
-
print(f"Score: {score}/100")
|
|
107
|
-
|
|
108
|
-
if score >= 95:
|
|
109
|
-
print("✅ Quality Gate PASSED")
|
|
110
|
-
break
|
|
111
|
-
|
|
112
|
-
# Auto-fix missing items
|
|
113
|
-
missing_items = identify_missing_items(spec)
|
|
114
|
-
for item in missing_items:
|
|
115
|
-
auto_fix(item)
|
|
116
|
-
update_spec()
|
|
117
|
-
update_feature()
|
|
118
|
-
|
|
119
|
-
print(f"✅ Applied {len(missing_items)} fixes - Re-evaluating...")
|
|
120
|
-
|
|
121
|
-
if score < 95:
|
|
122
|
-
print(f"❌ BLOCKED: Score {score} < 95 after {max_iterations} iterations")
|
|
123
|
-
print("Manual intervention required.")
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**Output format:**
|
|
127
|
-
```
|
|
128
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
129
|
-
📊 QUALITY GATE [1/3]
|
|
130
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
-
Score: 87/100 ⚠️ BELOW THRESHOLD (95)
|
|
132
|
-
|
|
133
|
-
Missing items:
|
|
134
|
-
❌ Error handling scenarios (10%)
|
|
135
|
-
❌ Performance targets (5%)
|
|
136
|
-
|
|
137
|
-
Auto-fixing...
|
|
138
|
-
✅ Added network error handling scenario
|
|
139
|
-
✅ Added response time targets (<500ms)
|
|
140
|
-
|
|
141
|
-
Re-evaluating...
|
|
142
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
143
|
-
|
|
144
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
145
|
-
📊 QUALITY GATE [2/3]
|
|
146
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
147
|
-
Score: 96/100 ✅ PASSED
|
|
148
|
-
|
|
149
|
-
✅ Quality Gate PASSED - proceeding to GPT/Gemini review
|
|
150
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### 2.3 Auto-Fix Rules
|
|
154
|
-
|
|
155
|
-
| Missing Item | Auto-Fix Method |
|
|
156
|
-
|--------------|-----------------|
|
|
157
|
-
| Missing AC | Auto-generate AC based on Task |
|
|
158
|
-
| Numbers not specified | Apply project defaults (timeout 30s, etc.) |
|
|
159
|
-
| Missing error handling | Add common error scenarios |
|
|
160
|
-
| Missing performance targets | Apply industry standard criteria |
|
|
161
|
-
| Missing security | Add auth/data protection requirements |
|
|
162
|
-
| Ambiguous terms | Replace with specific values |
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## Step 3: Race Review (GPT + Gemini Cross-Validation) - 3 Rounds (v2.6.9)
|
|
167
|
-
|
|
168
|
-
**🚨🚨🚨 CRITICAL: YOU MUST EXECUTE ALL 3 ROUNDS. DO NOT SKIP THIS STEP. 🚨🚨🚨**
|
|
169
|
-
|
|
170
|
-
**🚨 ABSOLUTE RULES FOR RACE REVIEW:**
|
|
171
|
-
|
|
172
|
-
1. **YOU MUST** use the Bash tool to call `llm-orchestrate.js` directly
|
|
173
|
-
2. **DO NOT** skip GPT/Gemini calls
|
|
174
|
-
3. **DO NOT** simulate or fake review results
|
|
175
|
-
4. **YOU MUST** run all 3 rounds sequentially (each round uses updated SPEC)
|
|
176
|
-
|
|
177
|
-
> Race Mode reviews SPEC with both GPT and Gemini in parallel, then cross-validates findings for higher confidence.
|
|
178
|
-
|
|
179
|
-
### 3.1 Review Loop (3 Rounds)
|
|
180
|
-
|
|
181
|
-
**For EACH round (1, 2, 3), run GPT + Gemini in PARALLEL via Bash tool.**
|
|
182
|
-
|
|
183
|
-
**🚨 IMPORTANT: SPEC content is too large for CLI arguments. Use stdin pipe method.**
|
|
184
|
-
|
|
185
|
-
**Procedure for each round:**
|
|
186
|
-
|
|
187
|
-
**Step A: Save SPEC content to scratchpad temp file (using Write tool):**
|
|
188
|
-
- Write the SPEC content to `[SCRATCHPAD]/spec-content.txt`
|
|
189
|
-
|
|
190
|
-
**Step B: Run GPT + Gemini in PARALLEL (two separate Bash tool calls at once):**
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
# GPT review (Bash tool call 1)
|
|
194
|
-
node -e "const fs=require('fs');const p=JSON.stringify({prompt:'Review this SPEC for completeness, specificity, testability, security, and performance. Round [N]/3. Find issues and improvements. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. SPEC content: '+fs.readFileSync('[SCRATCHPAD]/spec-content.txt','utf8')});process.stdout.write(p)" | node "$(node -p "process.env.APPDATA || require('os').homedir() + '/.config'")/vibe/hooks/scripts/llm-orchestrate.js" gpt orchestrate-json
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
# Gemini review (Bash tool call 2 - run in parallel with GPT)
|
|
199
|
-
node -e "const fs=require('fs');const p=JSON.stringify({prompt:'Review this SPEC for completeness, specificity, testability, security, and performance. Round [N]/3. Find issues and improvements. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. SPEC content: '+fs.readFileSync('[SCRATCHPAD]/spec-content.txt','utf8')});process.stdout.write(p)" | node "$(node -p "process.env.APPDATA || require('os').homedir() + '/.config'")/vibe/hooks/scripts/llm-orchestrate.js" gemini orchestrate-json
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**🚨 MANDATORY: Replace `[SCRATCHPAD]` with the actual scratchpad directory path.**
|
|
203
|
-
**🚨 Replace `[N]` with the current round number (1, 2, or 3).**
|
|
204
|
-
**🚨 Run GPT and Gemini calls in PARALLEL (two separate Bash tool calls at once).**
|
|
205
|
-
|
|
206
|
-
- Round 1: Write SPEC → Run GPT + Gemini in parallel → Cross-validate → Apply fixes → Update SPEC file
|
|
207
|
-
- Round 2: Write updated SPEC → Run → Cross-validate → Apply fixes → Update SPEC file
|
|
208
|
-
- Round 3: Write final SPEC → Run → Cross-validate → Confirm no issues remain
|
|
209
|
-
|
|
210
|
-
### 3.2 Cross-Validation Rules
|
|
211
|
-
|
|
212
|
-
| Agreement | Priority | Action |
|
|
213
|
-
|-----------|----------|--------|
|
|
214
|
-
| Both GPT + Gemini agree (100%) | P1 | Auto-apply immediately |
|
|
215
|
-
| One model only (50%) | P2 | Auto-apply with note |
|
|
216
|
-
|
|
217
|
-
**After each round:**
|
|
218
|
-
|
|
219
|
-
1. Cross-validate findings (issues found by both → P1, single model → P2)
|
|
220
|
-
2. Merge feedback with confidence scores
|
|
221
|
-
3. Auto-apply P1/P2 improvements to SPEC and Feature files (use Edit tool)
|
|
222
|
-
4. Continue to next round with updated SPEC content
|
|
223
|
-
|
|
224
|
-
**Output format:**
|
|
225
|
-
```
|
|
226
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
227
|
-
🏁 SPEC RACE REVIEW - Round 1/3
|
|
228
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
229
|
-
|
|
230
|
-
Model Results:
|
|
231
|
-
| Model | Issues | Duration |
|
|
232
|
-
|--------|--------|----------|
|
|
233
|
-
| GPT | 2 | 1823ms |
|
|
234
|
-
| Gemini | 2 | 2156ms |
|
|
235
|
-
|
|
236
|
-
Cross-Validated Issues:
|
|
237
|
-
| Issue | GPT | Gemini | Confidence |
|
|
238
|
-
|--------------------------|-----|--------|------------|
|
|
239
|
-
| Missing retry logic | ✅ | ✅ | 100% → P1 |
|
|
240
|
-
| Missing rate limiting | ✅ | ✅ | 100% → P1 |
|
|
241
|
-
| Token refresh unclear | ✅ | ❌ | 50% → P2 |
|
|
242
|
-
|
|
243
|
-
Auto-applying...
|
|
244
|
-
✅ [P1] Added retry logic (3 attempts, exponential backoff)
|
|
245
|
-
✅ [P1] Added rate limiting (100 req/min)
|
|
246
|
-
✅ [P2] Added token refresh flow
|
|
247
|
-
|
|
248
|
-
✅ Round 1 complete - 3 improvements (2 P1, 1 P2)
|
|
249
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
250
|
-
|
|
251
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
252
|
-
🏁 SPEC RACE REVIEW - Round 2/3
|
|
253
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
254
|
-
|
|
255
|
-
Cross-Validated Issues:
|
|
256
|
-
| Issue | GPT | Gemini | Confidence |
|
|
257
|
-
|-----------------------------|-----|--------|------------|
|
|
258
|
-
| Concurrent session unclear | ✅ | ❌ | 50% → P2 |
|
|
259
|
-
|
|
260
|
-
Auto-applying...
|
|
261
|
-
✅ [P2] Added concurrent session policy
|
|
262
|
-
|
|
263
|
-
✅ Round 2 complete - 1 improvement
|
|
264
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
265
|
-
|
|
266
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
267
|
-
🏁 SPEC RACE REVIEW - Round 3/3
|
|
268
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
269
|
-
|
|
270
|
-
Cross-Validated Issues: None
|
|
271
|
-
|
|
272
|
-
✅ No changes needed - SPEC is complete
|
|
273
|
-
✅ Consensus Rate: 100%
|
|
274
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
|
-
## Step 4: Final Summary
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
283
|
-
✅ SPEC REVIEW COMPLETE: {feature-name}
|
|
284
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
285
|
-
|
|
286
|
-
Quality Score: 96/100 ✅
|
|
287
|
-
Review Rounds: 3/3 ✅
|
|
288
|
-
Total Improvements: 4
|
|
289
|
-
|
|
290
|
-
Updated files:
|
|
291
|
-
📋 .claude/vibe/specs/{feature-name}.md (or split folder)
|
|
292
|
-
📋 .claude/vibe/features/{feature-name}.feature (or split folder)
|
|
293
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## Step 5: SPEC Summary for User Review
|
|
299
|
-
|
|
300
|
-
**🚨 MANDATORY: Always output this summary before proceeding to `/vibe.run`.**
|
|
301
|
-
|
|
302
|
-
After all review rounds, present the finalized SPEC to the user in a readable format:
|
|
303
|
-
|
|
304
|
-
```
|
|
305
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
306
|
-
📋 SPEC SUMMARY: {feature-name}
|
|
307
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
308
|
-
|
|
309
|
-
## 기능 개요
|
|
310
|
-
{SPEC의 <role>과 <context>에서 추출한 기능 목적 1-2줄 요약}
|
|
311
|
-
|
|
312
|
-
## 기술 스택
|
|
313
|
-
{<context>에서 추출한 기술 스택 목록}
|
|
314
|
-
|
|
315
|
-
## 구현 단계
|
|
316
|
-
| Phase | 이름 | 주요 작업 |
|
|
317
|
-
|-------|------|----------|
|
|
318
|
-
| 1 | {phase name} | {핵심 작업 1줄 요약} |
|
|
319
|
-
| 2 | {phase name} | {핵심 작업 1줄 요약} |
|
|
320
|
-
| ... | ... | ... |
|
|
321
|
-
|
|
322
|
-
## 핵심 시나리오 ({N}개)
|
|
323
|
-
{Feature 파일에서 Scenario 이름 목록}
|
|
324
|
-
- Scenario: {name1}
|
|
325
|
-
- Scenario: {name2}
|
|
326
|
-
- ...
|
|
327
|
-
|
|
328
|
-
## 주요 제약사항
|
|
329
|
-
{<constraints>에서 핵심 항목 3-5개}
|
|
330
|
-
|
|
331
|
-
## 검증 기준
|
|
332
|
-
{<acceptance>에서 핵심 항목 요약}
|
|
333
|
-
|
|
334
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
335
|
-
⚠️ 위 내용에 잘못된 부분이 있으면 수정을 요청하세요.
|
|
336
|
-
문제가 없으면 /vibe.run "{feature-name}" 으로 진행합니다.
|
|
337
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**Important:**
|
|
341
|
-
|
|
342
|
-
- SPEC의 모든 Phase, Scenario, Constraint를 빠짐없이 나열
|
|
343
|
-
- 사용자가 빠르게 검수할 수 있도록 핵심만 간결하게
|
|
344
|
-
- 검토 후 사용자 확인 대기 (ultrawork 모드가 아닌 경우)
|
|
345
|
-
- ultrawork 모드인 경우: 요약 출력 후 자동으로 `/vibe.run` 진행
|
|
346
|
-
|
|
347
|
-
---
|
|
348
|
-
|
|
349
|
-
## Next Step
|
|
350
|
-
|
|
351
|
-
```
|
|
352
|
-
/vibe.run "{feature-name}"
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
---
|
|
356
|
-
|
|
357
|
-
## Error Handling
|
|
358
|
-
|
|
359
|
-
### SPEC Not Found
|
|
360
|
-
```
|
|
361
|
-
❌ ERROR: SPEC file not found
|
|
362
|
-
|
|
363
|
-
Expected (single): .claude/vibe/specs/{feature-name}.md
|
|
364
|
-
Expected (split): .claude/vibe/specs/{feature-name}/_index.md
|
|
365
|
-
|
|
366
|
-
Please run /vibe.spec "{feature-name}" first to create the SPEC.
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Feature Not Found
|
|
370
|
-
```
|
|
371
|
-
❌ ERROR: Feature file not found
|
|
372
|
-
|
|
373
|
-
Expected (single): .claude/vibe/features/{feature-name}.feature
|
|
374
|
-
Expected (split): .claude/vibe/features/{feature-name}/_index.feature
|
|
375
|
-
|
|
376
|
-
Please run /vibe.spec "{feature-name}" first to create the Feature file.
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### GPT/Gemini Call Failed
|
|
380
|
-
```
|
|
381
|
-
⚠️ WARNING: {GPT|Gemini} call failed
|
|
382
|
-
|
|
383
|
-
Error: {error message}
|
|
384
|
-
|
|
385
|
-
Continuing with {other model} results only...
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
---
|
|
389
|
-
|
|
390
|
-
## Quick Mode
|
|
391
|
-
|
|
392
|
-
For faster iteration (1 round only):
|
|
393
|
-
|
|
394
|
-
```bash
|
|
395
|
-
/vibe.spec.review "feature-name" --quick
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
ARGUMENTS: $ARGUMENTS
|
|
401
|
-
|
|
402
|
-
**File Detection (execute before Step 1):**
|
|
403
|
-
|
|
404
|
-
```
|
|
405
|
-
Feature name: $ARGUMENTS
|
|
406
|
-
|
|
407
|
-
1. Check split folder: .claude/vibe/specs/$ARGUMENTS/_index.md
|
|
408
|
-
- If exists → Split mode (read all files in folder)
|
|
409
|
-
2. Check single file: .claude/vibe/specs/$ARGUMENTS.md
|
|
410
|
-
- If exists → Single mode
|
|
411
|
-
3. Neither exists → Show error with both expected paths
|
|
412
|
-
```
|
|
1
|
+
# /vibe.spec.review - SPEC Quality Review
|
|
2
|
+
|
|
3
|
+
Review and enhance SPEC with GPT/Gemini cross-validation.
|
|
4
|
+
|
|
5
|
+
**Purpose:** Run this command in a NEW session after `/vibe.spec` to ensure accurate review execution.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/vibe.spec.review "feature-name"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Prerequisites:**
|
|
16
|
+
- SPEC file exists: `.claude/vibe/specs/{feature-name}.md` (single) or `.claude/vibe/specs/{feature-name}/_index.md` (split)
|
|
17
|
+
- Feature file exists: `.claude/vibe/features/{feature-name}.feature` (single) or `.claude/vibe/features/{feature-name}/_index.feature` (split)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/vibe.spec "feature" → SPEC 생성 완료
|
|
25
|
+
↓
|
|
26
|
+
/new (새 세션)
|
|
27
|
+
↓
|
|
28
|
+
/vibe.spec.review "feature" → 품질 검증 + GPT/Gemini 리뷰
|
|
29
|
+
↓
|
|
30
|
+
/vibe.run "feature"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Step 1: Load SPEC Files
|
|
36
|
+
|
|
37
|
+
Detect SPEC structure (single file or split folder) and read files:
|
|
38
|
+
|
|
39
|
+
**Single file structure:**
|
|
40
|
+
```
|
|
41
|
+
.claude/vibe/specs/{feature-name}.md
|
|
42
|
+
.claude/vibe/features/{feature-name}.feature
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Split folder structure:**
|
|
46
|
+
```
|
|
47
|
+
.claude/vibe/specs/{feature-name}/_index.md (+ phase files)
|
|
48
|
+
.claude/vibe/features/{feature-name}/_index.feature (+ phase files)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Detection logic:**
|
|
52
|
+
1. Check if `.claude/vibe/specs/{feature-name}/` directory exists → Split mode
|
|
53
|
+
2. Otherwise check `.claude/vibe/specs/{feature-name}.md` → Single mode
|
|
54
|
+
3. If neither exists → Error
|
|
55
|
+
|
|
56
|
+
**Output:**
|
|
57
|
+
```
|
|
58
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
+
📋 SPEC REVIEW: {feature-name}
|
|
60
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
61
|
+
|
|
62
|
+
Loading files...
|
|
63
|
+
Mode: {single|split}
|
|
64
|
+
✅ SPEC: .claude/vibe/specs/{feature-name}.md (or _index.md + N phase files)
|
|
65
|
+
✅ Feature: .claude/vibe/features/{feature-name}.feature (or _index.feature + N phase files)
|
|
66
|
+
|
|
67
|
+
Extracted info:
|
|
68
|
+
- Feature: {feature description}
|
|
69
|
+
- Stack: {tech stack}
|
|
70
|
+
- Phases: {number of phases}
|
|
71
|
+
- Scenarios: {number of scenarios}
|
|
72
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Step 2: Quality Validation (95-Point Gate)
|
|
78
|
+
|
|
79
|
+
**🚨 MANDATORY: Score must be ≥ 95 to proceed**
|
|
80
|
+
|
|
81
|
+
### 2.1 Quality Checklist
|
|
82
|
+
|
|
83
|
+
| Category | Check Item | Weight |
|
|
84
|
+
|----------|------------|--------|
|
|
85
|
+
| **Completeness** | All user flows included in Task | 15% |
|
|
86
|
+
| **Completeness** | All ACs converted to Feature scenarios | 10% |
|
|
87
|
+
| **Completeness** | Error handling scenarios defined | 10% |
|
|
88
|
+
| **Specificity** | All numbers specified (timeout, limits, etc.) | 15% |
|
|
89
|
+
| **Specificity** | No ambiguous terms ("appropriate", "proper", etc.) | 10% |
|
|
90
|
+
| **Testability** | Each AC is verifiable | 10% |
|
|
91
|
+
| **Testability** | Feature scenarios have concrete Given/When/Then | 10% |
|
|
92
|
+
| **Security** | Auth/permission requirements specified | 10% |
|
|
93
|
+
| **Performance** | Response time/load requirements specified | 10% |
|
|
94
|
+
|
|
95
|
+
### 2.2 Quality Gate Loop
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
max_iterations = 3
|
|
99
|
+
iteration = 0
|
|
100
|
+
|
|
101
|
+
while iteration < max_iterations:
|
|
102
|
+
iteration += 1
|
|
103
|
+
score = calculate_quality_score(spec, feature)
|
|
104
|
+
|
|
105
|
+
print(f"━━━ Quality Check [{iteration}/{max_iterations}] ━━━")
|
|
106
|
+
print(f"Score: {score}/100")
|
|
107
|
+
|
|
108
|
+
if score >= 95:
|
|
109
|
+
print("✅ Quality Gate PASSED")
|
|
110
|
+
break
|
|
111
|
+
|
|
112
|
+
# Auto-fix missing items
|
|
113
|
+
missing_items = identify_missing_items(spec)
|
|
114
|
+
for item in missing_items:
|
|
115
|
+
auto_fix(item)
|
|
116
|
+
update_spec()
|
|
117
|
+
update_feature()
|
|
118
|
+
|
|
119
|
+
print(f"✅ Applied {len(missing_items)} fixes - Re-evaluating...")
|
|
120
|
+
|
|
121
|
+
if score < 95:
|
|
122
|
+
print(f"❌ BLOCKED: Score {score} < 95 after {max_iterations} iterations")
|
|
123
|
+
print("Manual intervention required.")
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Output format:**
|
|
127
|
+
```
|
|
128
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
129
|
+
📊 QUALITY GATE [1/3]
|
|
130
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
+
Score: 87/100 ⚠️ BELOW THRESHOLD (95)
|
|
132
|
+
|
|
133
|
+
Missing items:
|
|
134
|
+
❌ Error handling scenarios (10%)
|
|
135
|
+
❌ Performance targets (5%)
|
|
136
|
+
|
|
137
|
+
Auto-fixing...
|
|
138
|
+
✅ Added network error handling scenario
|
|
139
|
+
✅ Added response time targets (<500ms)
|
|
140
|
+
|
|
141
|
+
Re-evaluating...
|
|
142
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
143
|
+
|
|
144
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
145
|
+
📊 QUALITY GATE [2/3]
|
|
146
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
147
|
+
Score: 96/100 ✅ PASSED
|
|
148
|
+
|
|
149
|
+
✅ Quality Gate PASSED - proceeding to GPT/Gemini review
|
|
150
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 2.3 Auto-Fix Rules
|
|
154
|
+
|
|
155
|
+
| Missing Item | Auto-Fix Method |
|
|
156
|
+
|--------------|-----------------|
|
|
157
|
+
| Missing AC | Auto-generate AC based on Task |
|
|
158
|
+
| Numbers not specified | Apply project defaults (timeout 30s, etc.) |
|
|
159
|
+
| Missing error handling | Add common error scenarios |
|
|
160
|
+
| Missing performance targets | Apply industry standard criteria |
|
|
161
|
+
| Missing security | Add auth/data protection requirements |
|
|
162
|
+
| Ambiguous terms | Replace with specific values |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Step 3: Race Review (GPT + Gemini Cross-Validation) - 3 Rounds (v2.6.9)
|
|
167
|
+
|
|
168
|
+
**🚨🚨🚨 CRITICAL: YOU MUST EXECUTE ALL 3 ROUNDS. DO NOT SKIP THIS STEP. 🚨🚨🚨**
|
|
169
|
+
|
|
170
|
+
**🚨 ABSOLUTE RULES FOR RACE REVIEW:**
|
|
171
|
+
|
|
172
|
+
1. **YOU MUST** use the Bash tool to call `llm-orchestrate.js` directly
|
|
173
|
+
2. **DO NOT** skip GPT/Gemini calls
|
|
174
|
+
3. **DO NOT** simulate or fake review results
|
|
175
|
+
4. **YOU MUST** run all 3 rounds sequentially (each round uses updated SPEC)
|
|
176
|
+
|
|
177
|
+
> Race Mode reviews SPEC with both GPT and Gemini in parallel, then cross-validates findings for higher confidence.
|
|
178
|
+
|
|
179
|
+
### 3.1 Review Loop (3 Rounds)
|
|
180
|
+
|
|
181
|
+
**For EACH round (1, 2, 3), run GPT + Gemini in PARALLEL via Bash tool.**
|
|
182
|
+
|
|
183
|
+
**🚨 IMPORTANT: SPEC content is too large for CLI arguments. Use stdin pipe method.**
|
|
184
|
+
|
|
185
|
+
**Procedure for each round:**
|
|
186
|
+
|
|
187
|
+
**Step A: Save SPEC content to scratchpad temp file (using Write tool):**
|
|
188
|
+
- Write the SPEC content to `[SCRATCHPAD]/spec-content.txt`
|
|
189
|
+
|
|
190
|
+
**Step B: Run GPT + Gemini in PARALLEL (two separate Bash tool calls at once):**
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# GPT review (Bash tool call 1)
|
|
194
|
+
node -e "const fs=require('fs');const p=JSON.stringify({prompt:'Review this SPEC for completeness, specificity, testability, security, and performance. Round [N]/3. Find issues and improvements. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. SPEC content: '+fs.readFileSync('[SCRATCHPAD]/spec-content.txt','utf8')});process.stdout.write(p)" | node "$(node -p "process.env.APPDATA || require('os').homedir() + '/.config'")/vibe/hooks/scripts/llm-orchestrate.js" gpt orchestrate-json
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Gemini review (Bash tool call 2 - run in parallel with GPT)
|
|
199
|
+
node -e "const fs=require('fs');const p=JSON.stringify({prompt:'Review this SPEC for completeness, specificity, testability, security, and performance. Round [N]/3. Find issues and improvements. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. SPEC content: '+fs.readFileSync('[SCRATCHPAD]/spec-content.txt','utf8')});process.stdout.write(p)" | node "$(node -p "process.env.APPDATA || require('os').homedir() + '/.config'")/vibe/hooks/scripts/llm-orchestrate.js" gemini orchestrate-json
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**🚨 MANDATORY: Replace `[SCRATCHPAD]` with the actual scratchpad directory path.**
|
|
203
|
+
**🚨 Replace `[N]` with the current round number (1, 2, or 3).**
|
|
204
|
+
**🚨 Run GPT and Gemini calls in PARALLEL (two separate Bash tool calls at once).**
|
|
205
|
+
|
|
206
|
+
- Round 1: Write SPEC → Run GPT + Gemini in parallel → Cross-validate → Apply fixes → Update SPEC file
|
|
207
|
+
- Round 2: Write updated SPEC → Run → Cross-validate → Apply fixes → Update SPEC file
|
|
208
|
+
- Round 3: Write final SPEC → Run → Cross-validate → Confirm no issues remain
|
|
209
|
+
|
|
210
|
+
### 3.2 Cross-Validation Rules
|
|
211
|
+
|
|
212
|
+
| Agreement | Priority | Action |
|
|
213
|
+
|-----------|----------|--------|
|
|
214
|
+
| Both GPT + Gemini agree (100%) | P1 | Auto-apply immediately |
|
|
215
|
+
| One model only (50%) | P2 | Auto-apply with note |
|
|
216
|
+
|
|
217
|
+
**After each round:**
|
|
218
|
+
|
|
219
|
+
1. Cross-validate findings (issues found by both → P1, single model → P2)
|
|
220
|
+
2. Merge feedback with confidence scores
|
|
221
|
+
3. Auto-apply P1/P2 improvements to SPEC and Feature files (use Edit tool)
|
|
222
|
+
4. Continue to next round with updated SPEC content
|
|
223
|
+
|
|
224
|
+
**Output format:**
|
|
225
|
+
```
|
|
226
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
227
|
+
🏁 SPEC RACE REVIEW - Round 1/3
|
|
228
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
229
|
+
|
|
230
|
+
Model Results:
|
|
231
|
+
| Model | Issues | Duration |
|
|
232
|
+
|--------|--------|----------|
|
|
233
|
+
| GPT | 2 | 1823ms |
|
|
234
|
+
| Gemini | 2 | 2156ms |
|
|
235
|
+
|
|
236
|
+
Cross-Validated Issues:
|
|
237
|
+
| Issue | GPT | Gemini | Confidence |
|
|
238
|
+
|--------------------------|-----|--------|------------|
|
|
239
|
+
| Missing retry logic | ✅ | ✅ | 100% → P1 |
|
|
240
|
+
| Missing rate limiting | ✅ | ✅ | 100% → P1 |
|
|
241
|
+
| Token refresh unclear | ✅ | ❌ | 50% → P2 |
|
|
242
|
+
|
|
243
|
+
Auto-applying...
|
|
244
|
+
✅ [P1] Added retry logic (3 attempts, exponential backoff)
|
|
245
|
+
✅ [P1] Added rate limiting (100 req/min)
|
|
246
|
+
✅ [P2] Added token refresh flow
|
|
247
|
+
|
|
248
|
+
✅ Round 1 complete - 3 improvements (2 P1, 1 P2)
|
|
249
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
250
|
+
|
|
251
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
252
|
+
🏁 SPEC RACE REVIEW - Round 2/3
|
|
253
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
254
|
+
|
|
255
|
+
Cross-Validated Issues:
|
|
256
|
+
| Issue | GPT | Gemini | Confidence |
|
|
257
|
+
|-----------------------------|-----|--------|------------|
|
|
258
|
+
| Concurrent session unclear | ✅ | ❌ | 50% → P2 |
|
|
259
|
+
|
|
260
|
+
Auto-applying...
|
|
261
|
+
✅ [P2] Added concurrent session policy
|
|
262
|
+
|
|
263
|
+
✅ Round 2 complete - 1 improvement
|
|
264
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
265
|
+
|
|
266
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
267
|
+
🏁 SPEC RACE REVIEW - Round 3/3
|
|
268
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
269
|
+
|
|
270
|
+
Cross-Validated Issues: None
|
|
271
|
+
|
|
272
|
+
✅ No changes needed - SPEC is complete
|
|
273
|
+
✅ Consensus Rate: 100%
|
|
274
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Step 4: Final Summary
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
283
|
+
✅ SPEC REVIEW COMPLETE: {feature-name}
|
|
284
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
285
|
+
|
|
286
|
+
Quality Score: 96/100 ✅
|
|
287
|
+
Review Rounds: 3/3 ✅
|
|
288
|
+
Total Improvements: 4
|
|
289
|
+
|
|
290
|
+
Updated files:
|
|
291
|
+
📋 .claude/vibe/specs/{feature-name}.md (or split folder)
|
|
292
|
+
📋 .claude/vibe/features/{feature-name}.feature (or split folder)
|
|
293
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Step 5: SPEC Summary for User Review
|
|
299
|
+
|
|
300
|
+
**🚨 MANDATORY: Always output this summary before proceeding to `/vibe.run`.**
|
|
301
|
+
|
|
302
|
+
After all review rounds, present the finalized SPEC to the user in a readable format:
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
306
|
+
📋 SPEC SUMMARY: {feature-name}
|
|
307
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
308
|
+
|
|
309
|
+
## 기능 개요
|
|
310
|
+
{SPEC의 <role>과 <context>에서 추출한 기능 목적 1-2줄 요약}
|
|
311
|
+
|
|
312
|
+
## 기술 스택
|
|
313
|
+
{<context>에서 추출한 기술 스택 목록}
|
|
314
|
+
|
|
315
|
+
## 구현 단계
|
|
316
|
+
| Phase | 이름 | 주요 작업 |
|
|
317
|
+
|-------|------|----------|
|
|
318
|
+
| 1 | {phase name} | {핵심 작업 1줄 요약} |
|
|
319
|
+
| 2 | {phase name} | {핵심 작업 1줄 요약} |
|
|
320
|
+
| ... | ... | ... |
|
|
321
|
+
|
|
322
|
+
## 핵심 시나리오 ({N}개)
|
|
323
|
+
{Feature 파일에서 Scenario 이름 목록}
|
|
324
|
+
- Scenario: {name1}
|
|
325
|
+
- Scenario: {name2}
|
|
326
|
+
- ...
|
|
327
|
+
|
|
328
|
+
## 주요 제약사항
|
|
329
|
+
{<constraints>에서 핵심 항목 3-5개}
|
|
330
|
+
|
|
331
|
+
## 검증 기준
|
|
332
|
+
{<acceptance>에서 핵심 항목 요약}
|
|
333
|
+
|
|
334
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
335
|
+
⚠️ 위 내용에 잘못된 부분이 있으면 수정을 요청하세요.
|
|
336
|
+
문제가 없으면 /vibe.run "{feature-name}" 으로 진행합니다.
|
|
337
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**Important:**
|
|
341
|
+
|
|
342
|
+
- SPEC의 모든 Phase, Scenario, Constraint를 빠짐없이 나열
|
|
343
|
+
- 사용자가 빠르게 검수할 수 있도록 핵심만 간결하게
|
|
344
|
+
- 검토 후 사용자 확인 대기 (ultrawork 모드가 아닌 경우)
|
|
345
|
+
- ultrawork 모드인 경우: 요약 출력 후 자동으로 `/vibe.run` 진행
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Next Step
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
/vibe.run "{feature-name}"
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Error Handling
|
|
358
|
+
|
|
359
|
+
### SPEC Not Found
|
|
360
|
+
```
|
|
361
|
+
❌ ERROR: SPEC file not found
|
|
362
|
+
|
|
363
|
+
Expected (single): .claude/vibe/specs/{feature-name}.md
|
|
364
|
+
Expected (split): .claude/vibe/specs/{feature-name}/_index.md
|
|
365
|
+
|
|
366
|
+
Please run /vibe.spec "{feature-name}" first to create the SPEC.
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Feature Not Found
|
|
370
|
+
```
|
|
371
|
+
❌ ERROR: Feature file not found
|
|
372
|
+
|
|
373
|
+
Expected (single): .claude/vibe/features/{feature-name}.feature
|
|
374
|
+
Expected (split): .claude/vibe/features/{feature-name}/_index.feature
|
|
375
|
+
|
|
376
|
+
Please run /vibe.spec "{feature-name}" first to create the Feature file.
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### GPT/Gemini Call Failed
|
|
380
|
+
```
|
|
381
|
+
⚠️ WARNING: {GPT|Gemini} call failed
|
|
382
|
+
|
|
383
|
+
Error: {error message}
|
|
384
|
+
|
|
385
|
+
Continuing with {other model} results only...
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Quick Mode
|
|
391
|
+
|
|
392
|
+
For faster iteration (1 round only):
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
/vibe.spec.review "feature-name" --quick
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
ARGUMENTS: $ARGUMENTS
|
|
401
|
+
|
|
402
|
+
**File Detection (execute before Step 1):**
|
|
403
|
+
|
|
404
|
+
```
|
|
405
|
+
Feature name: $ARGUMENTS
|
|
406
|
+
|
|
407
|
+
1. Check split folder: .claude/vibe/specs/$ARGUMENTS/_index.md
|
|
408
|
+
- If exists → Split mode (read all files in folder)
|
|
409
|
+
2. Check single file: .claude/vibe/specs/$ARGUMENTS.md
|
|
410
|
+
- If exists → Single mode
|
|
411
|
+
3. Neither exists → Show error with both expected paths
|
|
412
|
+
```
|