@su-record/vibe 2.9.1 → 2.9.3
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 +31 -10
- package/README.ko.md +90 -25
- package/README.md +139 -25
- package/agents/teams/debug-team.md +70 -0
- package/agents/teams/dev-team.md +88 -0
- package/agents/teams/docs-team.md +80 -0
- package/agents/teams/figma/figma-analyst.md +52 -0
- package/agents/teams/figma/figma-architect.md +112 -0
- package/agents/teams/figma/figma-auditor.md +82 -0
- package/agents/teams/figma/figma-builder.md +100 -0
- package/agents/teams/figma-team.md +85 -0
- package/agents/teams/fullstack-team.md +83 -0
- package/agents/teams/lite-team.md +69 -0
- package/agents/teams/migration-team.md +78 -0
- package/agents/teams/refactor-team.md +94 -0
- package/agents/teams/research-team.md +86 -0
- package/agents/teams/review-debate-team.md +125 -0
- package/agents/teams/security-team.md +81 -0
- package/commands/vibe.analyze.md +324 -170
- package/commands/vibe.figma.md +549 -34
- package/commands/vibe.harness.md +177 -0
- package/commands/vibe.review.md +1 -63
- package/commands/vibe.run.md +52 -403
- package/commands/vibe.scaffold.md +195 -0
- package/commands/vibe.spec.md +373 -1003
- package/commands/vibe.trace.md +17 -0
- package/commands/vibe.verify.md +19 -10
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +29 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +4 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +6 -1
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts +12 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +259 -72
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +1 -1
- package/dist/cli/setup.js.map +1 -1
- package/hooks/scripts/figma-guard.js +220 -0
- package/hooks/scripts/figma-refine.js +315 -0
- package/hooks/scripts/figma-to-scss.js +394 -0
- package/hooks/scripts/figma-validate.js +353 -0
- package/package.json +1 -1
- package/skills/arch-guard/SKILL.md +1 -1
- package/skills/capability-loop/SKILL.md +106 -2
- package/skills/chub-usage/SKILL.md +43 -43
- package/skills/claude-md-guide/SKILL.md +175 -175
- package/skills/design-teach/SKILL.md +33 -33
- package/skills/devlog/SKILL.md +38 -38
- package/skills/event-comms/SKILL.md +23 -13
- package/skills/event-ops/SKILL.md +28 -19
- package/skills/event-planning/SKILL.md +13 -1
- package/skills/priority-todos/SKILL.md +1 -1
- package/skills/vibe.figma/SKILL.md +263 -115
- package/skills/vibe.figma/templates/component-spec.md +168 -0
- package/skills/vibe.figma.convert/SKILL.md +131 -84
- package/skills/vibe.figma.convert/rubrics/conversion-rules.md +12 -0
- package/skills/vibe.figma.extract/SKILL.md +148 -108
- package/skills/vibe.figma.extract/rubrics/image-rules.md +15 -3
- package/skills/vibe.interview/SKILL.md +358 -0
- package/skills/vibe.interview/checklists/api.md +101 -0
- package/skills/vibe.interview/checklists/feature.md +88 -0
- package/skills/vibe.interview/checklists/library.md +95 -0
- package/skills/vibe.interview/checklists/mobile.md +89 -0
- package/skills/vibe.interview/checklists/webapp.md +97 -0
- package/skills/vibe.interview/checklists/website.md +99 -0
- package/skills/vibe.plan/SKILL.md +216 -0
- package/skills/vibe.spec/SKILL.md +1155 -0
- package/{commands/vibe.spec.review.md → skills/vibe.spec.review/SKILL.md} +272 -155
- package/vibe/templates/claudemd-template.md +74 -0
- package/vibe/templates/constitution-template.md +15 -0
- package/vibe/templates/plan-template.md +194 -0
|
@@ -1,16 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
name: vibe.spec.review
|
|
3
|
+
tier: core
|
|
4
|
+
description: "Review and enhance an existing SPEC with GPT/Gemini cross-validation. Runs 100-point quality gate (loop until perfect or stuck), Race Review with convergence-based termination (no round cap), optional Codex adversarial review, Review Debate Team, and final user checkpoint. Must use this skill after vibe.spec completes, or when the user says 'review spec', '스펙 리뷰'."
|
|
5
|
+
triggers: ["spec review", "review spec", "SPEC 리뷰", "명세 리뷰", race review]
|
|
6
|
+
priority: 80
|
|
7
|
+
chain-next: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# vibe.spec.review — SPEC Quality Review
|
|
2
11
|
|
|
3
12
|
Review and enhance SPEC with GPT/Gemini cross-validation.
|
|
4
13
|
|
|
5
|
-
**Purpose:** Run this
|
|
14
|
+
**Purpose:** Run this skill after `vibe.spec` to ensure accurate review execution. For large contexts, invoke in a new session.
|
|
6
15
|
|
|
7
16
|
---
|
|
8
17
|
|
|
9
18
|
## Usage
|
|
10
19
|
|
|
11
|
-
|
|
12
|
-
|
|
20
|
+
This skill is automatically called in Phase 4 of the `/vibe.spec` orchestrator. If direct invocation is needed:
|
|
21
|
+
|
|
13
22
|
```
|
|
23
|
+
Load skill `vibe.spec.review` with feature: "feature-name"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or via natural language trigger: "스펙 리뷰", "review spec", "명세 리뷰".
|
|
14
27
|
|
|
15
28
|
**Prerequisites:**
|
|
16
29
|
- SPEC file exists: `.claude/vibe/specs/{feature-name}.md` (single) or `.claude/vibe/specs/{feature-name}/_index.md` (split)
|
|
@@ -20,30 +33,37 @@ Review and enhance SPEC with GPT/Gemini cross-validation.
|
|
|
20
33
|
|
|
21
34
|
## Codex Plugin Integration
|
|
22
35
|
|
|
23
|
-
> **Codex
|
|
36
|
+
> **Codex plugin detection**: Auto-detected at workflow start with the command below.
|
|
24
37
|
>
|
|
25
38
|
> ```bash
|
|
26
39
|
> CODEX_AVAILABLE=$(node "{{VIBE_PATH}}/hooks/scripts/codex-detect.js" 2>/dev/null || echo "unavailable")
|
|
27
40
|
> ```
|
|
28
41
|
>
|
|
29
|
-
> `available
|
|
42
|
+
> If `available`, `/codex:adversarial-review` is automatically invoked. If `unavailable`, falls back to the existing GPT+Gemini workflow.
|
|
30
43
|
|
|
31
44
|
---
|
|
32
45
|
|
|
33
46
|
> **⏱️ Timer**: Call `getCurrentTime` tool at the START. Record the result as `{start_time}`.
|
|
34
47
|
|
|
48
|
+
**`.last-feature` pointer update** (immediately after Timer):
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Write ".claude/vibe/.last-feature" ← feature-name (one line)
|
|
52
|
+
If the value is already the same, no-op.
|
|
53
|
+
```
|
|
54
|
+
|
|
35
55
|
## Workflow
|
|
36
56
|
|
|
37
57
|
```
|
|
38
|
-
/vibe.spec "feature" → SPEC created
|
|
58
|
+
/vibe.spec "feature" → SPEC created (Phase 3)
|
|
39
59
|
↓
|
|
40
|
-
|
|
41
|
-
↓
|
|
42
|
-
/vibe.spec.review "feature" → Quality validation + GPT/Gemini review
|
|
60
|
+
Phase 4: vibe.spec.review skill (this) → Quality validation + GPT/Gemini review
|
|
43
61
|
↓
|
|
44
62
|
/vibe.run "feature"
|
|
45
63
|
```
|
|
46
64
|
|
|
65
|
+
**For large contexts**: After `/new`, re-enter `/vibe.spec "feature"` → Smart Resume will start from Phase 4.
|
|
66
|
+
|
|
47
67
|
---
|
|
48
68
|
|
|
49
69
|
## File Reading Policy (Mandatory)
|
|
@@ -103,9 +123,9 @@ Extracted info:
|
|
|
103
123
|
|
|
104
124
|
---
|
|
105
125
|
|
|
106
|
-
## Step 2: Quality Validation (
|
|
126
|
+
## Step 2: Quality Validation (100-Point Gate)
|
|
107
127
|
|
|
108
|
-
**🚨 MANDATORY: Score must
|
|
128
|
+
**🚨 MANDATORY: Score must reach 100 to proceed. Loop until perfect or stuck.**
|
|
109
129
|
|
|
110
130
|
### 2.1 Quality Checklist
|
|
111
131
|
|
|
@@ -121,23 +141,56 @@ Extracted info:
|
|
|
121
141
|
| **Security** | Auth/permission requirements specified | 10% |
|
|
122
142
|
| **Performance** | Response time/load requirements specified | 10% |
|
|
123
143
|
|
|
124
|
-
### 2.2 Quality Gate Loop
|
|
144
|
+
### 2.2 Quality Gate Loop (No Round Cap)
|
|
125
145
|
|
|
126
146
|
```python
|
|
127
|
-
max_iterations = 3
|
|
128
147
|
iteration = 0
|
|
148
|
+
prev_score = -1
|
|
129
149
|
|
|
130
|
-
while
|
|
150
|
+
while True:
|
|
131
151
|
iteration += 1
|
|
132
152
|
score = calculate_quality_score(spec, feature)
|
|
133
153
|
|
|
134
|
-
print(f"━━━ Quality Check [{iteration}
|
|
154
|
+
print(f"━━━ Quality Check [{iteration}] ━━━")
|
|
135
155
|
print(f"Score: {score}/100")
|
|
136
156
|
|
|
137
|
-
if score >=
|
|
138
|
-
print("✅ Quality Gate PASSED")
|
|
157
|
+
if score >= 100:
|
|
158
|
+
print("✅ Quality Gate PASSED (100/100)")
|
|
139
159
|
break
|
|
140
160
|
|
|
161
|
+
# Auto-fixer hit a wall → ask the user (prevents runaway AND respects 100 target)
|
|
162
|
+
if score == prev_score:
|
|
163
|
+
missing_items = identify_missing_items(spec)
|
|
164
|
+
print(f"⚠️ Auto-fixer limit reached: stuck at {score}/100")
|
|
165
|
+
print(f"Remaining items require human input:")
|
|
166
|
+
for item in missing_items:
|
|
167
|
+
print(f" ❌ {item}")
|
|
168
|
+
|
|
169
|
+
if ultrawork_mode:
|
|
170
|
+
# ultrawork: no user intervention, record TODO and proceed
|
|
171
|
+
print("ℹ️ ultrawork mode — recording gaps to TODO and proceeding")
|
|
172
|
+
record_todo(missing_items)
|
|
173
|
+
break
|
|
174
|
+
|
|
175
|
+
# Interactive: ask the user to fill in or explicitly approve
|
|
176
|
+
user_input = ask_user(
|
|
177
|
+
"Please either:\n"
|
|
178
|
+
" 1. Provide values for the remaining items (I'll apply them)\n"
|
|
179
|
+
" 2. Type 'proceed' to accept current score and continue\n"
|
|
180
|
+
" 3. Type 'abort' to stop the workflow"
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
if user_input == "abort":
|
|
184
|
+
raise WorkflowAborted("User aborted at Quality Gate")
|
|
185
|
+
if user_input == "proceed":
|
|
186
|
+
record_todo(missing_items)
|
|
187
|
+
break
|
|
188
|
+
# otherwise: apply user-provided values → re-evaluate
|
|
189
|
+
apply_user_values(user_input)
|
|
190
|
+
continue
|
|
191
|
+
|
|
192
|
+
prev_score = score
|
|
193
|
+
|
|
141
194
|
# Auto-fix missing items
|
|
142
195
|
missing_items = identify_missing_items(spec)
|
|
143
196
|
for item in missing_items:
|
|
@@ -146,18 +199,23 @@ while iteration < max_iterations:
|
|
|
146
199
|
update_feature()
|
|
147
200
|
|
|
148
201
|
print(f"✅ Applied {len(missing_items)} fixes - Re-evaluating...")
|
|
149
|
-
|
|
150
|
-
if score < 95:
|
|
151
|
-
print(f"⚠️ Score {score} < 95 after {max_iterations} iterations")
|
|
152
|
-
print("Remaining gaps added to TODO. Proceeding with current quality.")
|
|
153
202
|
```
|
|
154
203
|
|
|
204
|
+
**Termination conditions:**
|
|
205
|
+
- `score == 100` → pass (primary success)
|
|
206
|
+
- `score == prev_score` (auto-fixer stuck) → **ask the user**:
|
|
207
|
+
- User provides values → re-evaluate (loop continues, may reach 100)
|
|
208
|
+
- User says "proceed" → record gaps as TODO and continue to Step 3
|
|
209
|
+
- User says "abort" → stop entire workflow
|
|
210
|
+
- `ultrawork` mode → skip prompt, auto-record TODO and continue
|
|
211
|
+
- No iteration cap — the only way to exit without 100 is explicit user approval or ultrawork.
|
|
212
|
+
|
|
155
213
|
**Output format:**
|
|
156
214
|
```
|
|
157
215
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
158
|
-
📊 QUALITY GATE [1
|
|
216
|
+
📊 QUALITY GATE [1]
|
|
159
217
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
160
|
-
Score: 87/100 ⚠️ BELOW
|
|
218
|
+
Score: 87/100 ⚠️ BELOW 100
|
|
161
219
|
|
|
162
220
|
Missing items:
|
|
163
221
|
❌ Error handling scenarios (10%)
|
|
@@ -171,14 +229,50 @@ Re-evaluating...
|
|
|
171
229
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
172
230
|
|
|
173
231
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
174
|
-
📊 QUALITY GATE [2
|
|
232
|
+
📊 QUALITY GATE [2]
|
|
175
233
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
176
|
-
Score: 96/100
|
|
234
|
+
Score: 96/100 ⚠️ BELOW 100
|
|
235
|
+
|
|
236
|
+
Missing items:
|
|
237
|
+
❌ Concurrent session policy (4%)
|
|
238
|
+
|
|
239
|
+
Auto-fixing...
|
|
240
|
+
✅ Added concurrent session policy
|
|
241
|
+
|
|
242
|
+
Re-evaluating...
|
|
243
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
244
|
+
|
|
245
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
246
|
+
📊 QUALITY GATE [3]
|
|
247
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
248
|
+
Score: 100/100 ✅ PASSED
|
|
177
249
|
|
|
178
250
|
✅ Quality Gate PASSED - proceeding to GPT/Gemini review
|
|
179
251
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
180
252
|
```
|
|
181
253
|
|
|
254
|
+
**Stuck case (auto-fixer limit reached):**
|
|
255
|
+
```
|
|
256
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
257
|
+
📊 QUALITY GATE [4]
|
|
258
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
259
|
+
Score: 87/100 ⚠️ STUCK (same as previous iteration)
|
|
260
|
+
|
|
261
|
+
Auto-fixer hit a wall. These items need human input:
|
|
262
|
+
❌ Business rule: monthly subscription renewal grace period (days?)
|
|
263
|
+
❌ Target latency for search API (<?ms)
|
|
264
|
+
❌ Data retention policy for audit logs (how many days?)
|
|
265
|
+
|
|
266
|
+
How would you like to proceed?
|
|
267
|
+
1. Provide the values directly (e.g., "grace period 7 days, search 500ms, audit logs 90 days")
|
|
268
|
+
→ Values will be applied and the score re-evaluated (100 may be reachable)
|
|
269
|
+
2. "proceed" — Accept the current score, record remaining items as TODO, then continue to Step 3
|
|
270
|
+
3. "abort" — Stop the workflow
|
|
271
|
+
|
|
272
|
+
(In ultrawork mode, this prompt is skipped — TODO is auto-recorded and execution continues)
|
|
273
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
274
|
+
```
|
|
275
|
+
|
|
182
276
|
### 2.3 Auto-Fix Rules
|
|
183
277
|
|
|
184
278
|
| Missing Item | Auto-Fix Method |
|
|
@@ -192,25 +286,93 @@ Score: 96/100 ✅ PASSED
|
|
|
192
286
|
|
|
193
287
|
---
|
|
194
288
|
|
|
195
|
-
## Step 3: Race Review (GPT + Gemini Cross-Validation) -
|
|
289
|
+
## Step 3: Race Review (GPT + Gemini Cross-Validation) - Convergence-Based (No Round Cap)
|
|
196
290
|
|
|
197
291
|
**RULES FOR RACE REVIEW:**
|
|
198
292
|
|
|
199
293
|
1. **YOU MUST** use the Bash tool to call `llm-orchestrate.js` directly
|
|
200
294
|
2. **DO NOT** simulate or fake review results
|
|
201
295
|
3. Run rounds sequentially (each round uses updated SPEC)
|
|
296
|
+
4. **No hard round cap** — loop until P1=0 AND no new findings (convergence)
|
|
297
|
+
|
|
298
|
+
> Race Mode reviews SPEC with GPT and Gemini in parallel, then cross-validates findings for higher confidence. The loop continues until quality converges naturally.
|
|
299
|
+
|
|
300
|
+
### Termination Rules
|
|
301
|
+
|
|
302
|
+
- **P1 = 0 AND no new findings this round** → converged, stop (primary success)
|
|
303
|
+
- **Round 1 with P1 = 0 AND no P2/P3** → perfect on first try, stop (early success)
|
|
304
|
+
- **Round N findings == Round N-1 findings** → **stuck**: LLMs keep flagging same issues that auto-applier can't resolve → **ask the user** (see 3.2.1)
|
|
305
|
+
|
|
306
|
+
### Stuck Handling (3.2.1)
|
|
307
|
+
|
|
308
|
+
When the same findings repeat across rounds, the auto-apply loop has hit a wall. This typically means:
|
|
309
|
+
- The fix requires human judgment (architectural trade-off, domain rule, etc.)
|
|
310
|
+
- The LLMs are producing a false positive that the auto-applier can't dismiss
|
|
311
|
+
- The suggested fix conflicts with an existing constraint
|
|
312
|
+
|
|
313
|
+
**Interactive mode** — prompt the user:
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
317
|
+
⚠️ RACE REVIEW STUCK at Round {N}
|
|
318
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
319
|
+
|
|
320
|
+
Same findings repeated from Round {N-1}. Auto-applier cannot resolve:
|
|
321
|
+
|
|
322
|
+
| # | Issue | Severity | GPT | Gemini | Reason it's stuck |
|
|
323
|
+
|---|-------|----------|-----|--------|-------------------|
|
|
324
|
+
| 1 | {issue title} | P1 | ✅ | ✅ | {e.g., "fix requires domain decision"} |
|
|
325
|
+
| 2 | {issue title} | P2 | ✅ | ❌ | {e.g., "conflicts with existing constraint"} |
|
|
326
|
+
|
|
327
|
+
How would you like to proceed?
|
|
328
|
+
1. Provide a resolution directly (e.g., "issue 1: retry 5 times, issue 2: ignore")
|
|
329
|
+
→ Changes will be applied and the next round re-run
|
|
330
|
+
2. "proceed" — Record current issues as TODO and continue to Step 4
|
|
331
|
+
3. "abort" — Stop the workflow
|
|
332
|
+
|
|
333
|
+
(In ultrawork mode, this prompt is skipped — TODO is auto-recorded and execution continues)
|
|
334
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Pseudocode:**
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
if current_findings == prev_findings:
|
|
341
|
+
if ultrawork_mode:
|
|
342
|
+
print("ℹ️ ultrawork mode — recording stuck issues to TODO and proceeding")
|
|
343
|
+
record_todo(current_findings)
|
|
344
|
+
break
|
|
345
|
+
|
|
346
|
+
user_input = ask_user(
|
|
347
|
+
"Race Review stuck. Please either:\n"
|
|
348
|
+
" 1. Provide resolution for the listed issues\n"
|
|
349
|
+
" 2. Type 'proceed' to record as TODO and continue to Step 4\n"
|
|
350
|
+
" 3. Type 'abort' to stop the workflow"
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
if user_input == "abort":
|
|
354
|
+
raise WorkflowAborted("User aborted at Race Review")
|
|
355
|
+
if user_input == "proceed":
|
|
356
|
+
record_todo(current_findings)
|
|
357
|
+
break
|
|
358
|
+
# otherwise: apply user-provided resolutions → next round
|
|
359
|
+
apply_user_resolutions(user_input)
|
|
360
|
+
continue # re-run the round with updated SPEC
|
|
361
|
+
```
|
|
202
362
|
|
|
203
|
-
|
|
363
|
+
### Narrowing Scope (Noise Reduction)
|
|
204
364
|
|
|
205
|
-
|
|
365
|
+
To prevent LLM cosmetic noise from causing infinite loops while still reaching 100% quality:
|
|
206
366
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
367
|
+
| Round | Scope |
|
|
368
|
+
|-------|-------|
|
|
369
|
+
| 1 | Full scope (P1 + P2 + P3) |
|
|
370
|
+
| 2 | P1 + P2 only |
|
|
371
|
+
| 3+ | P1 only (until P1=0 or convergence) |
|
|
210
372
|
|
|
211
|
-
### 3.1 Review Loop (
|
|
373
|
+
### 3.1 Review Loop (No Round Cap)
|
|
212
374
|
|
|
213
|
-
**
|
|
375
|
+
**Run GPT + Gemini in PARALLEL via Bash tool for each round. Stop when termination rules trigger.**
|
|
214
376
|
|
|
215
377
|
**🚨 IMPORTANT: SPEC content is too large for CLI arguments. Use --input file method (no pipe needed).**
|
|
216
378
|
|
|
@@ -219,9 +381,10 @@ Score: 96/100 ✅ PASSED
|
|
|
219
381
|
**Step A: Save SPEC content + prompt as JSON to scratchpad temp file (using Write tool):**
|
|
220
382
|
- Write JSON to `[SCRATCHPAD]/spec-review-input.json` with content:
|
|
221
383
|
```json
|
|
222
|
-
{"prompt": "Review this SPEC for completeness, specificity, testability, security, and performance. Round [N]
|
|
384
|
+
{"prompt": "Review this SPEC for completeness, specificity, testability, security, and performance. Round [N] (scope: [SCOPE]). Find issues and improvements. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. SPEC content: [SPEC_CONTENT]"}
|
|
223
385
|
```
|
|
224
386
|
- Where `[SPEC_CONTENT]` is the full SPEC text (properly JSON-escaped inside the prompt string)
|
|
387
|
+
- `[SCOPE]` is `P1+P2+P3` for round 1, `P1+P2` for round 2, `P1` for rounds 3+
|
|
225
388
|
|
|
226
389
|
**Step B: Script path:**
|
|
227
390
|
- `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
|
|
@@ -239,13 +402,13 @@ node "[LLM_SCRIPT]" gemini orchestrate-json --input "[SCRATCHPAD]/spec-review-in
|
|
|
239
402
|
```
|
|
240
403
|
|
|
241
404
|
**🚨 MANDATORY: Replace `[SCRATCHPAD]` with the actual scratchpad directory path.**
|
|
242
|
-
**🚨 Replace `[N]` with the current round number (1, 2,
|
|
405
|
+
**🚨 Replace `[N]` with the current round number (1, 2, 3, ...).**
|
|
243
406
|
**🚨 Replace `[LLM_SCRIPT]` with the resolved absolute path from Step B.**
|
|
244
407
|
**🚨 Run GPT and Gemini calls in PARALLEL (two separate Bash tool calls at once).**
|
|
245
408
|
|
|
246
|
-
- Round 1: Write SPEC → Run GPT + Gemini in parallel → Cross-validate → Apply fixes → Update SPEC file
|
|
247
|
-
- Round 2: Write updated SPEC → Run → Cross-validate → Apply fixes → Update SPEC file
|
|
248
|
-
- Round 3
|
|
409
|
+
- Round 1: Write SPEC → Run GPT + Gemini in parallel (full scope) → Cross-validate → Apply fixes → Update SPEC file
|
|
410
|
+
- Round 2: Write updated SPEC → Run (P1+P2 scope) → Cross-validate → Apply fixes → Update SPEC file
|
|
411
|
+
- Round 3+: Write updated SPEC → Run (P1-only scope) → Cross-validate → Apply fixes → Continue until P1=0 AND no new findings (or convergence detected)
|
|
249
412
|
|
|
250
413
|
### 3.2 Cross-Validation Rules
|
|
251
414
|
|
|
@@ -261,46 +424,46 @@ node "[LLM_SCRIPT]" gemini orchestrate-json --input "[SCRATCHPAD]/spec-review-in
|
|
|
261
424
|
3. Auto-apply P1/P2 improvements to SPEC and Feature files (use Edit tool)
|
|
262
425
|
4. Continue to next round with updated SPEC content
|
|
263
426
|
|
|
264
|
-
### 3.3 User Decision Checkpoint (
|
|
427
|
+
### 3.3 User Decision Checkpoint (After Convergence)
|
|
265
428
|
|
|
266
|
-
**🚨 MANDATORY:
|
|
429
|
+
**🚨 MANDATORY: Run user judgment checkpoint when the review loop reaches convergence**
|
|
267
430
|
|
|
268
|
-
> Type 6 (Iterative-Reasoning)
|
|
431
|
+
> Type 6 (Iterative-Reasoning) pattern: AI does not decide alone — judges together with the user
|
|
269
432
|
|
|
270
433
|
```
|
|
271
434
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
272
|
-
🔍 USER CHECKPOINT:
|
|
435
|
+
🔍 USER CHECKPOINT: Review Results
|
|
273
436
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
274
437
|
|
|
275
|
-
|
|
438
|
+
Key changes found across {N} review rounds:
|
|
276
439
|
|
|
277
|
-
| # |
|
|
278
|
-
|
|
279
|
-
| 1 | {
|
|
280
|
-
| 2 | {
|
|
440
|
+
| # | Change | Source | Confidence |
|
|
441
|
+
|---|--------|--------|------------|
|
|
442
|
+
| 1 | {change1} | GPT+Gemini | 100% |
|
|
443
|
+
| 2 | {change2} | GPT only | 50% |
|
|
281
444
|
| ... | ... | ... | ... |
|
|
282
445
|
|
|
283
|
-
|
|
284
|
-
1.
|
|
285
|
-
2.
|
|
286
|
-
3.
|
|
446
|
+
Questions:
|
|
447
|
+
1. Are there any changes above you'd like to exclude?
|
|
448
|
+
2. Are there any additional requirements that should be specified?
|
|
449
|
+
3. Do you agree with the technical approach?
|
|
287
450
|
|
|
288
451
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
289
452
|
```
|
|
290
453
|
|
|
291
|
-
**Checkpoint
|
|
454
|
+
**Checkpoint action rules:**
|
|
292
455
|
|
|
293
|
-
|
|
|
294
|
-
|
|
295
|
-
| `ultrawork`
|
|
296
|
-
|
|
|
297
|
-
|
|
|
298
|
-
|
|
|
456
|
+
| Situation | Action |
|
|
457
|
+
|-----------|--------|
|
|
458
|
+
| `ultrawork` mode | Skip checkpoint, auto-proceed |
|
|
459
|
+
| Normal mode | Must wait for user response |
|
|
460
|
+
| User requests changes | Apply changes, then re-run checkpoint |
|
|
461
|
+
| User approves | Proceed to Step 4 |
|
|
299
462
|
|
|
300
463
|
**Output format:**
|
|
301
464
|
```
|
|
302
465
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
303
|
-
🏁 SPEC RACE REVIEW - Round 1
|
|
466
|
+
🏁 SPEC RACE REVIEW - Round 1 (scope: P1+P2+P3)
|
|
304
467
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
305
468
|
|
|
306
469
|
Model Results:
|
|
@@ -325,7 +488,7 @@ Auto-applying...
|
|
|
325
488
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
326
489
|
|
|
327
490
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
328
|
-
🏁 SPEC RACE REVIEW - Round 2
|
|
491
|
+
🏁 SPEC RACE REVIEW - Round 2 (scope: P1+P2)
|
|
329
492
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
330
493
|
|
|
331
494
|
Cross-Validated Issues:
|
|
@@ -340,107 +503,65 @@ Auto-applying...
|
|
|
340
503
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
341
504
|
|
|
342
505
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
343
|
-
🏁 SPEC RACE REVIEW - Round 3
|
|
506
|
+
🏁 SPEC RACE REVIEW - Round 3 (scope: P1)
|
|
344
507
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
345
508
|
|
|
346
509
|
Cross-Validated Issues: None
|
|
347
510
|
|
|
348
|
-
✅
|
|
511
|
+
✅ Converged: P1 = 0 AND no new findings
|
|
349
512
|
✅ Consensus Rate: 100%
|
|
350
513
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
351
514
|
```
|
|
352
515
|
|
|
353
|
-
|
|
516
|
+
> If new P1s appear at round 3, the loop continues to round 4, 5, ... until convergence.
|
|
517
|
+
|
|
518
|
+
### Step 3.1: Codex Adversarial Review (When Codex Plugin Is Active)
|
|
354
519
|
|
|
355
|
-
>
|
|
356
|
-
> GPT+Gemini Race Review
|
|
520
|
+
> **Activation condition**: Automatically runs when Codex plugin is installed. Skipped if not installed.
|
|
521
|
+
> Runs **simultaneously** with GPT+Gemini Race Review for triple cross-validation.
|
|
357
522
|
|
|
358
|
-
Codex adversarial review
|
|
359
|
-
-
|
|
360
|
-
-
|
|
361
|
-
-
|
|
523
|
+
Codex adversarial review **challenges the design decisions** in the SPEC:
|
|
524
|
+
- Validates whether an alternative architecture would be better
|
|
525
|
+
- Checks for over-engineering or under-engineering
|
|
526
|
+
- Identifies missing edge cases and non-functional requirements
|
|
362
527
|
|
|
363
|
-
|
|
528
|
+
**Execution (parallel with GPT+Gemini Race):**
|
|
364
529
|
|
|
365
530
|
```
|
|
366
531
|
/codex:adversarial-review
|
|
367
532
|
```
|
|
368
533
|
|
|
369
|
-
|
|
534
|
+
**Result integration**: Add Codex column to the Race Review cross-validation table:
|
|
370
535
|
|
|
371
536
|
```markdown
|
|
372
537
|
| Issue | GPT | Gemini | Codex | Confidence |
|
|
373
538
|
|-------|-----|--------|-------|------------|
|
|
374
|
-
| {
|
|
539
|
+
| {issue} | ✅/❌ | ✅/❌ | ✅/❌ | {%} |
|
|
375
540
|
```
|
|
376
541
|
|
|
377
|
-
-
|
|
378
|
-
-
|
|
379
|
-
- 3
|
|
542
|
+
- 2 or more of 3 models agree → **High Confidence**
|
|
543
|
+
- Issue found only by Codex → **P2** (requires design perspective review)
|
|
544
|
+
- All 3 models agree → **P1** (fix immediately)
|
|
380
545
|
|
|
381
546
|
---
|
|
382
547
|
|
|
383
548
|
## Step 3.5: Review Debate Team (Agent Teams)
|
|
384
549
|
|
|
385
|
-
>
|
|
386
|
-
>
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
|
391
|
-
|
|
392
|
-
|
|
|
393
|
-
|
|
|
394
|
-
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|------|------|
|
|
401
|
-
| P1/P2 이슈 2개 이상 | 자동 활성화 |
|
|
402
|
-
| P1/P2 이슈 1개 이하 | 스킵 → Step 4로 진행 |
|
|
403
|
-
| Agent Teams 비활성화 | 스킵 → Step 4로 진행 |
|
|
404
|
-
|
|
405
|
-
**spawn 패턴:**
|
|
406
|
-
|
|
407
|
-
```text
|
|
408
|
-
TeamCreate(team_name="spec-debate-{feature}", description="SPEC review debate for {feature}")
|
|
409
|
-
|
|
410
|
-
Task(team_name="spec-debate-{feature}", name="security-reviewer", subagent_type="security-reviewer",
|
|
411
|
-
mode="bypassPermissions",
|
|
412
|
-
prompt="SPEC 리뷰 팀 리더. GPT/Gemini가 발견한 P1/P2 이슈를 교차 검증하세요.
|
|
413
|
-
SPEC: {spec_content}
|
|
414
|
-
발견된 이슈: {p1_p2_issues}
|
|
415
|
-
역할: 각 이슈가 진짜인지(오탐 아닌지) 검증. 실제 영향도 기준으로 우선순위 조정.
|
|
416
|
-
분쟁이 있는 이슈는 해당 리뷰어에게 SendMessage로 확인 요청하세요.")
|
|
417
|
-
|
|
418
|
-
Task(team_name="spec-debate-{feature}", name="architecture-reviewer", subagent_type="architecture-reviewer",
|
|
419
|
-
mode="bypassPermissions",
|
|
420
|
-
prompt="SPEC 리뷰 팀 아키텍처 전문가. 아키텍처 관련 이슈를 검증하세요.
|
|
421
|
-
SPEC: {spec_content}
|
|
422
|
-
역할: 구조적 일관성, SOLID 원칙, 레이어 경계 검증.
|
|
423
|
-
우선순위 변경 필요 시 security-reviewer에게 SendMessage로 알리세요.")
|
|
424
|
-
|
|
425
|
-
Task(team_name="spec-debate-{feature}", name="performance-reviewer", subagent_type="performance-reviewer",
|
|
426
|
-
mode="bypassPermissions",
|
|
427
|
-
prompt="SPEC 리뷰 팀 성능 전문가. 성능 관련 이슈를 검증하세요.
|
|
428
|
-
SPEC: {spec_content}
|
|
429
|
-
역할: 성능 요구사항 현실성 평가, 불필요한 최적화 식별.
|
|
430
|
-
P2→P1 승격이 필요하면 security-reviewer에게 SendMessage로 알리세요.")
|
|
431
|
-
|
|
432
|
-
Task(team_name="spec-debate-{feature}", name="simplicity-reviewer", subagent_type="simplicity-reviewer",
|
|
433
|
-
mode="bypassPermissions",
|
|
434
|
-
prompt="SPEC 리뷰 팀 단순성 전문가. 과잉 설계 여부를 검증하세요.
|
|
435
|
-
SPEC: {spec_content}
|
|
436
|
-
역할: YAGNI 위반, 불필요한 복잡성 식별.
|
|
437
|
-
P1→P2 강등이 필요하면 security-reviewer에게 SendMessage로 알리세요.")
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
**결과 통합:**
|
|
441
|
-
- 팀 합의 결과를 SPEC에 반영 (P1 즉시 적용, P2 노트 추가)
|
|
442
|
-
- 팀원 shutdown_request → TeamDelete로 정리
|
|
443
|
-
- Step 4 (Final Summary)로 진행
|
|
550
|
+
> **Team definition**: See `agents/teams/review-debate-team.md` (SPEC Review context)
|
|
551
|
+
> **Condition**: Agent Teams enabled + 2 or more P1/P2 issues found after review loop convergence
|
|
552
|
+
|
|
553
|
+
**Activation conditions:**
|
|
554
|
+
|
|
555
|
+
| Situation | Action |
|
|
556
|
+
|-----------|--------|
|
|
557
|
+
| 2 or more P1/P2 issues | Auto-activate |
|
|
558
|
+
| 1 or fewer P1/P2 issues | Skip → proceed to Step 4 |
|
|
559
|
+
| Agent Teams disabled | Skip → proceed to Step 4 |
|
|
560
|
+
|
|
561
|
+
**Result integration:**
|
|
562
|
+
- Apply team consensus results to SPEC (P1 applied immediately, P2 added as notes)
|
|
563
|
+
- Team member shutdown_request → clean up with TeamDelete
|
|
564
|
+
- Proceed to Step 4 (Final Summary)
|
|
444
565
|
|
|
445
566
|
---
|
|
446
567
|
|
|
@@ -451,11 +572,11 @@ Task(team_name="spec-debate-{feature}", name="simplicity-reviewer", subagent_typ
|
|
|
451
572
|
✅ SPEC REVIEW COMPLETE: {feature-name}
|
|
452
573
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
453
574
|
|
|
454
|
-
Quality Score:
|
|
455
|
-
Review Rounds:
|
|
456
|
-
Total Improvements:
|
|
575
|
+
Quality Score: 100/100 ✅
|
|
576
|
+
Review Rounds: {N} (converged: P1=0, no new findings) ✅
|
|
577
|
+
Total Improvements: {M}
|
|
457
578
|
⏱️ Started: {start_time}
|
|
458
|
-
⏱️ Completed: {getCurrentTime
|
|
579
|
+
⏱️ Completed: {getCurrentTime result}
|
|
459
580
|
|
|
460
581
|
Updated files:
|
|
461
582
|
📋 .claude/vibe/specs/{feature-name}.md (or split folder)
|
|
@@ -516,30 +637,30 @@ If no issues, proceed with /vibe.run "{feature-name}".
|
|
|
516
637
|
|
|
517
638
|
### 5.1 Final User Checkpoint
|
|
518
639
|
|
|
519
|
-
**🚨 MANDATORY:
|
|
640
|
+
**🚨 MANDATORY: Final user confirmation before proceeding to `/vibe.run`**
|
|
520
641
|
|
|
521
642
|
```
|
|
522
643
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
523
|
-
✅ SPEC
|
|
644
|
+
✅ SPEC Review Complete - Final Confirmation
|
|
524
645
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
525
646
|
|
|
526
|
-
|
|
647
|
+
Please answer the following questions:
|
|
527
648
|
|
|
528
|
-
1.
|
|
529
|
-
2.
|
|
530
|
-
3.
|
|
531
|
-
4.
|
|
649
|
+
1. **Requirements accuracy**: Does the SPEC above accurately describe the originally intended feature?
|
|
650
|
+
2. **Scope appropriateness**: Is the implementation scope neither too large nor too small?
|
|
651
|
+
3. **Tech stack**: Do you agree with the chosen tech stack?
|
|
652
|
+
4. **Priority**: Is the Phase order and priority correct?
|
|
532
653
|
|
|
533
654
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
534
|
-
💡 "ok"
|
|
655
|
+
💡 Type "ok" or "proceed" to approve / share any changes you'd like made
|
|
535
656
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
536
657
|
```
|
|
537
658
|
|
|
538
659
|
**Why This Checkpoint Matters:**
|
|
539
660
|
|
|
540
|
-
> AI
|
|
541
|
-
>
|
|
542
|
-
>
|
|
661
|
+
> More AI doing more is not always better.
|
|
662
|
+
> The best results come when the user thinks and judges together with AI.
|
|
663
|
+
> This checkpoint induces the Type 6 (Iterative-Reasoning) pattern.
|
|
543
664
|
|
|
544
665
|
---
|
|
545
666
|
|
|
@@ -586,11 +707,7 @@ Continuing with {other model} results only...
|
|
|
586
707
|
|
|
587
708
|
## Quick Mode
|
|
588
709
|
|
|
589
|
-
For faster iteration (1 round only):
|
|
590
|
-
|
|
591
|
-
```bash
|
|
592
|
-
/vibe.spec.review "feature-name" --quick
|
|
593
|
-
```
|
|
710
|
+
For faster iteration (1 round only): pass `--quick` flag when invoking the skill (or via `/vibe.spec "feature-name" --quick` orchestrator).
|
|
594
711
|
|
|
595
712
|
---
|
|
596
713
|
|