@su-record/vibe 2.9.35 → 2.9.37
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 +1 -1
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/agents/compounder.md +6 -6
- package/agents/diagrammer.md +2 -2
- package/agents/e2e-tester.md +5 -5
- package/agents/qa/acceptance-tester.md +2 -2
- package/agents/refactor-cleaner.md +2 -2
- package/agents/tester.md +1 -1
- package/agents/ui/ui-antipattern-detector.md +1 -1
- package/agents/ui/ui-design-system-gen.md +3 -3
- package/agents/ui/ui-industry-analyzer.md +1 -1
- package/agents/ui/ui-layout-architect.md +1 -1
- package/agents/ui/ui-stack-implementer.md +1 -1
- package/commands/vibe.analyze.md +1 -1
- package/commands/vibe.contract.md +2 -2
- package/commands/vibe.figma.md +3 -3
- package/commands/vibe.harness.md +3 -3
- package/commands/vibe.regress.md +2 -2
- package/commands/vibe.review.md +4 -4
- package/commands/vibe.run.md +27 -27
- package/commands/vibe.scaffold.md +1 -1
- package/commands/vibe.spec.md +38 -38
- package/commands/vibe.trace.md +14 -14
- package/commands/vibe.utils.md +3 -3
- package/commands/vibe.verify.md +18 -18
- package/dist/infra/lib/figma/extract.d.ts.map +1 -1
- package/dist/infra/lib/figma/extract.js +55 -0
- package/dist/infra/lib/figma/extract.js.map +1 -1
- package/dist/infra/lib/figma/types.d.ts +8 -0
- package/dist/infra/lib/figma/types.d.ts.map +1 -1
- package/hooks/scripts/__tests__/figma-extract.test.js +338 -0
- package/hooks/scripts/figma-extract.js +144 -31
- package/hooks/scripts/prompt-dispatcher.js +15 -0
- package/hooks/scripts/utils.js +4 -0
- package/package.json +1 -1
- package/skills/arch-guard/SKILL.md +2 -2
- package/skills/arch-guard/agents/rule-generator.md +3 -3
- package/skills/arch-guard/scripts/check-boundaries.js +1 -1
- package/skills/arch-guard/templates/arch-rules.json +1 -1
- package/skills/capability-loop/SKILL.md +2 -2
- package/skills/capability-loop/templates/capability-spec.md +1 -1
- package/skills/claude-md-guide/SKILL.md +2 -2
- package/skills/design-audit/SKILL.md +3 -3
- package/skills/design-critique/SKILL.md +2 -2
- package/skills/design-distill/SKILL.md +1 -1
- package/skills/design-normalize/SKILL.md +4 -4
- package/skills/design-polish/SKILL.md +2 -2
- package/skills/design-teach/SKILL.md +6 -6
- package/skills/design-teach/templates/design-context.json +1 -1
- package/skills/devlog/SKILL.md +1 -1
- package/skills/event-planning/SKILL.md +1 -1
- package/skills/exec-plan/SKILL.md +5 -5
- package/skills/exec-plan/agents/decomposer.md +1 -1
- package/skills/exec-plan/templates/plan.md +2 -2
- package/skills/parallel-research/SKILL.md +3 -3
- package/skills/parallel-research/orchestrator.md +1 -1
- package/skills/parallel-research/templates/paper.md +1 -1
- package/skills/priority-todos/SKILL.md +1 -1
- package/skills/vibe-contract/SKILL.md +6 -6
- package/skills/vibe-interview/SKILL.md +6 -6
- package/skills/vibe-interview/checklists/feature.md +1 -1
- package/skills/vibe-plan/SKILL.md +10 -10
- package/skills/vibe-regress/SKILL.md +5 -5
- package/skills/vibe-regress/templates/bug.md +1 -1
- package/skills/vibe-regress/templates/test-jest.md +1 -1
- package/skills/vibe-regress/templates/test-vitest.md +1 -1
- package/skills/vibe-spec/SKILL.md +45 -45
- package/skills/vibe-spec-review/SKILL.md +21 -21
- package/skills/vibe-test/SKILL.md +1 -1
- package/vibe/constitution.md +2 -2
- package/vibe/templates/claudemd-template.md +4 -4
- package/vibe/templates/constitution-template.md +2 -2
- package/vibe/templates/feature-template.md +1 -1
|
@@ -115,7 +115,7 @@ Based on classification, build the appropriate artifact:
|
|
|
115
115
|
|
|
116
116
|
> **Problem**: The built capability didn't actually prevent the failure. This usually means the initial diagnosis was wrong (picked `Tool` when it needed `Guardrail`), or the failure has multiple missing capabilities.
|
|
117
117
|
>
|
|
118
|
-
> **Do NOT silently proceed** — a sub-standard capability log pollutes `.
|
|
118
|
+
> **Do NOT silently proceed** — a sub-standard capability log pollutes `.vibe/capabilities-log.md` and the failure will recur.
|
|
119
119
|
|
|
120
120
|
**Escalation loop:**
|
|
121
121
|
|
|
@@ -207,7 +207,7 @@ save_memory("capability-{name}", {
|
|
|
207
207
|
})
|
|
208
208
|
```
|
|
209
209
|
|
|
210
|
-
Update `.
|
|
210
|
+
Update `.vibe/capabilities-log.md`:
|
|
211
211
|
|
|
212
212
|
```markdown
|
|
213
213
|
## {date} — {capability-name}
|
|
@@ -108,7 +108,7 @@ Separate the collected information into 3 layers:
|
|
|
108
108
|
|
|
109
109
|
**Loaded only when working on a specific feature** → focus on what and why, leave how to the agent.
|
|
110
110
|
|
|
111
|
-
Storage location: `.
|
|
111
|
+
Storage location: `.vibe/specs/YYYY-MM-DD-{topic}.md`
|
|
112
112
|
|
|
113
113
|
```markdown
|
|
114
114
|
# {Feature Name} SPEC
|
|
@@ -124,7 +124,7 @@ Storage location: `.claude/vibe/specs/YYYY-MM-DD-{topic}.md`
|
|
|
124
124
|
|
|
125
125
|
**Per-session task list** → 2-5 minute units, with file paths specified.
|
|
126
126
|
|
|
127
|
-
Storage location: `.
|
|
127
|
+
Storage location: `.vibe/specs/{name}-execplan.md`
|
|
128
128
|
|
|
129
129
|
```markdown
|
|
130
130
|
# Execution Plan
|
|
@@ -131,11 +131,11 @@ When running on mobile stacks (React Native, Flutter, iOS, Android):
|
|
|
131
131
|
|
|
132
132
|
Before running the audit:
|
|
133
133
|
|
|
134
|
-
1. **Read** `.
|
|
134
|
+
1. **Read** `.vibe/design-context.json`
|
|
135
135
|
- If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
|
|
136
136
|
- If parse error → display warning → proceed with defaults → recommend `/design-teach`
|
|
137
137
|
- If present → weight findings by `audience.context`, `constraints.accessibility`, `brand.personality`
|
|
138
|
-
2. **Read** `.
|
|
138
|
+
2. **Read** `.vibe/design-system/*/MASTER.md` (if exists) for token reference
|
|
139
139
|
|
|
140
140
|
## Next Steps
|
|
141
141
|
|
|
@@ -148,5 +148,5 @@ Before running the audit:
|
|
|
148
148
|
## Important
|
|
149
149
|
|
|
150
150
|
- **Read-only**: This skill produces a report. It does NOT modify code.
|
|
151
|
-
- **Context-aware**: If `.
|
|
151
|
+
- **Context-aware**: If `.vibe/design-context.json` exists, findings are weighted by project brand and audience.
|
|
152
152
|
- **Incremental**: When run on `.` (changed files), only audits files in current diff.
|
|
@@ -118,7 +118,7 @@ When running on mobile stacks (React Native, Flutter, iOS, Android):
|
|
|
118
118
|
|
|
119
119
|
Before running the critique:
|
|
120
120
|
|
|
121
|
-
1. **Read** `.
|
|
121
|
+
1. **Read** `.vibe/design-context.json`
|
|
122
122
|
- If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
|
|
123
123
|
- If parse error → display warning → proceed with defaults → recommend `/design-teach`
|
|
124
124
|
- If present → adjust persona priorities by `audience.primary` and `audience.expertise`
|
|
@@ -135,5 +135,5 @@ Before running the critique:
|
|
|
135
135
|
## Important
|
|
136
136
|
|
|
137
137
|
- **Read-only**: Produces design critique report. No code modifications.
|
|
138
|
-
- **Context-aware**: Uses `.
|
|
138
|
+
- **Context-aware**: Uses `.vibe/design-context.json` for brand/audience context if available.
|
|
139
139
|
- **Complementary**: Pairs with `/design-audit` (technical) — critique focuses on UX quality.
|
|
@@ -110,7 +110,7 @@ Strip unnecessary visual elements. Every remaining element must justify its exis
|
|
|
110
110
|
|
|
111
111
|
Before running distillation:
|
|
112
112
|
|
|
113
|
-
1. **Read** `.
|
|
113
|
+
1. **Read** `.vibe/design-context.json`
|
|
114
114
|
- If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
|
|
115
115
|
- If parse error → display warning → proceed with defaults → recommend `/design-teach`
|
|
116
116
|
- If present → preserve elements that match `brand.personality` (e.g., "playful" brand may justify decorative elements)
|
|
@@ -23,8 +23,8 @@ Replace hardcoded design values with design system tokens from MASTER.md. Ensure
|
|
|
23
23
|
|
|
24
24
|
Load token source in priority order:
|
|
25
25
|
|
|
26
|
-
1. `.
|
|
27
|
-
2. `.
|
|
26
|
+
1. `.vibe/design-system/{project}/MASTER.md` (project-specific)
|
|
27
|
+
2. `.vibe/design-context.json` (from `/design-teach`)
|
|
28
28
|
3. If neither exists → prompt: "Run `/design-teach` or create MASTER.md first. Proceeding with default token detection."
|
|
29
29
|
|
|
30
30
|
### Step 2: Scan for Hardcoded Values
|
|
@@ -111,11 +111,11 @@ Replace values in source files, preserving:
|
|
|
111
111
|
|
|
112
112
|
Before running normalization:
|
|
113
113
|
|
|
114
|
-
1. **Read** `.
|
|
114
|
+
1. **Read** `.vibe/design-context.json`
|
|
115
115
|
- If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
|
|
116
116
|
- If parse error → display warning → proceed with defaults → recommend `/design-teach`
|
|
117
117
|
- If present → use `detectedStack.styling` to determine token format (CSS vars, Tailwind, etc.)
|
|
118
|
-
2. **Read** `.
|
|
118
|
+
2. **Read** `.vibe/design-system/*/MASTER.md`
|
|
119
119
|
- If missing → display: "Run `/design-teach` or create MASTER.md first. Proceeding with default token detection."
|
|
120
120
|
- If present → use as authoritative token source for replacements
|
|
121
121
|
|
|
@@ -111,11 +111,11 @@ Every interactive element must have ALL applicable states:
|
|
|
111
111
|
|
|
112
112
|
Before running polish:
|
|
113
113
|
|
|
114
|
-
1. **Read** `.
|
|
114
|
+
1. **Read** `.vibe/design-context.json`
|
|
115
115
|
- If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
|
|
116
116
|
- If parse error → display warning → proceed with defaults → recommend `/design-teach`
|
|
117
117
|
- If present → apply brand-appropriate micro-interaction styles from `aesthetic.style`
|
|
118
|
-
2. **Read** `.
|
|
118
|
+
2. **Read** `.vibe/design-system/*/MASTER.md` (if exists) for token references
|
|
119
119
|
|
|
120
120
|
## Next Steps
|
|
121
121
|
|
|
@@ -8,7 +8,7 @@ priority: 50
|
|
|
8
8
|
|
|
9
9
|
# Design Teach — Project Design Context Gathering
|
|
10
10
|
|
|
11
|
-
Collect project-specific design context so all design-* skills produce tailored, brand-aware results. Saves to `.
|
|
11
|
+
Collect project-specific design context so all design-* skills produce tailored, brand-aware results. Saves to `.vibe/design-context.json`.
|
|
12
12
|
|
|
13
13
|
## Usage
|
|
14
14
|
|
|
@@ -29,8 +29,8 @@ Before asking questions, automatically gather existing signals:
|
|
|
29
29
|
| Color palette | Existing color definitions, brand assets |
|
|
30
30
|
| Typography | Font imports, font-family declarations |
|
|
31
31
|
| Component library | `package.json` dependencies (MUI, Chakra, shadcn, etc.) |
|
|
32
|
-
| Design system | `.
|
|
33
|
-
| Existing context | `.
|
|
32
|
+
| Design system | `.vibe/design-system/*/MASTER.md` |
|
|
33
|
+
| Existing context | `.vibe/design-context.json` (if updating) |
|
|
34
34
|
|
|
35
35
|
### Step 2: Ask Clarifying Questions
|
|
36
36
|
|
|
@@ -59,7 +59,7 @@ Present findings from Step 1, then ask what's missing:
|
|
|
59
59
|
|
|
60
60
|
### Step 3: Save Context
|
|
61
61
|
|
|
62
|
-
Write gathered context to `.
|
|
62
|
+
Write gathered context to `.vibe/design-context.json` using the Write tool.
|
|
63
63
|
|
|
64
64
|
**Schema (v1):**
|
|
65
65
|
|
|
@@ -118,7 +118,7 @@ When `/design-teach` is run again and `design-context.json` already exists:
|
|
|
118
118
|
Each design-* skill does the following when it runs:
|
|
119
119
|
|
|
120
120
|
```
|
|
121
|
-
1. Read `.
|
|
121
|
+
1. Read `.vibe/design-context.json`
|
|
122
122
|
2. File not found → print "Run /design-teach first for better results" → continue with defaults
|
|
123
123
|
3. Parse failure (invalid JSON) → warn "design-context.json parse failed" + continue with defaults → recommend re-running /design-teach
|
|
124
124
|
4. Success → apply context to analysis criteria
|
|
@@ -172,7 +172,7 @@ PRE-SHIP Phase:
|
|
|
172
172
|
- Dark mode: Required
|
|
173
173
|
|
|
174
174
|
### Saved
|
|
175
|
-
✅ .
|
|
175
|
+
✅ .vibe/design-context.json updated
|
|
176
176
|
```
|
|
177
177
|
|
|
178
178
|
## Important
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"brand": {
|
|
11
11
|
"personality": ["professional", "clean", "trustworthy", "efficient"],
|
|
12
12
|
"tone": "professional",
|
|
13
|
-
"existingAssets": ".
|
|
13
|
+
"existingAssets": ".vibe/brand/brand-guide.pdf"
|
|
14
14
|
},
|
|
15
15
|
"aesthetic": {
|
|
16
16
|
"style": "minimal",
|
package/skills/devlog/SKILL.md
CHANGED
|
@@ -61,14 +61,14 @@ For every decision point in the SPEC, resolve it NOW:
|
|
|
61
61
|
|
|
62
62
|
### Step 3: GENERATE — Write the ExecPlan
|
|
63
63
|
|
|
64
|
-
Output format: `.
|
|
64
|
+
Output format: `.vibe/specs/{feature-name}-execplan.md`
|
|
65
65
|
|
|
66
66
|
```markdown
|
|
67
67
|
# ExecPlan: {feature-name}
|
|
68
68
|
|
|
69
69
|
## Meta
|
|
70
|
-
- SPEC: .
|
|
71
|
-
- Feature: .
|
|
70
|
+
- SPEC: .vibe/specs/{name}.md
|
|
71
|
+
- Feature: .vibe/features/{name}.feature
|
|
72
72
|
- Generated: {timestamp}
|
|
73
73
|
- Phases: {count}
|
|
74
74
|
- Scenarios: {count}
|
|
@@ -118,7 +118,7 @@ Output format: `.claude/vibe/specs/{feature-name}-execplan.md`
|
|
|
118
118
|
|
|
119
119
|
### Step 4: PERSIST — Save and Link
|
|
120
120
|
|
|
121
|
-
1. Save ExecPlan to `.
|
|
121
|
+
1. Save ExecPlan to `.vibe/specs/{feature-name}-execplan.md`
|
|
122
122
|
2. Save session context: `save_memory("execplan-{feature}", {summary})`
|
|
123
123
|
3. Output execution command:
|
|
124
124
|
|
|
@@ -128,7 +128,7 @@ Ready to execute:
|
|
|
128
128
|
|
|
129
129
|
Or hand off to new session:
|
|
130
130
|
/vibe.utils --continue
|
|
131
|
-
→ Load: .
|
|
131
|
+
→ Load: .vibe/specs/{feature-name}-execplan.md
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
## Quality Checks
|
|
@@ -18,7 +18,7 @@ Reads a SPEC document and breaks it into a structured hierarchy of phases and ta
|
|
|
18
18
|
- Produce a flat numbered task list with parent-phase references
|
|
19
19
|
|
|
20
20
|
## Input
|
|
21
|
-
- SPEC document path (e.g., `.
|
|
21
|
+
- SPEC document path (e.g., `.vibe/specs/my-feature.spec.md`)
|
|
22
22
|
- Optional: existing codebase context to detect which files already exist
|
|
23
23
|
|
|
24
24
|
## Output
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
| Field | Value |
|
|
6
6
|
|-------|-------|
|
|
7
|
-
| SPEC | `.
|
|
8
|
-
| Feature | `.
|
|
7
|
+
| SPEC | `.vibe/specs/{{FEATURE_NAME}}.md` |
|
|
8
|
+
| Feature | `.vibe/features/{{FEATURE_NAME}}.feature` |
|
|
9
9
|
| Generated | {{GENERATED_DATE}} |
|
|
10
10
|
| Phases | {{PHASE_COUNT}} |
|
|
11
11
|
| Scenarios | {{SCENARIO_COUNT}} |
|
|
@@ -63,7 +63,7 @@ Parallel research complete
|
|
|
63
63
|
↓
|
|
64
64
|
Synthesize results
|
|
65
65
|
↓
|
|
66
|
-
Persist to .
|
|
66
|
+
Persist to .vibe/research/<topic-slug>/
|
|
67
67
|
├── synthesis.md (conversational report)
|
|
68
68
|
├── awesome-list.md (curated links/repos)
|
|
69
69
|
└── paper.md (structured survey for /vibe.spec Context)
|
|
@@ -75,7 +75,7 @@ Reference during implementation
|
|
|
75
75
|
|
|
76
76
|
### Output Location (SSOT)
|
|
77
77
|
|
|
78
|
-
All research artifacts live under `.
|
|
78
|
+
All research artifacts live under `.vibe/research/<topic-slug>/`. Reference `paper.md` explicitly when writing a SPEC (e.g. paste its path into the Context section). Re-running research on the same topic overwrites unless the slug collides across dates (then `-YYYYMMDD` suffix).
|
|
79
79
|
|
|
80
80
|
> Wire-up note: `/vibe.spec` does **not** yet auto-scan this directory — that integration is a follow-up. For now, cite the path manually.
|
|
81
81
|
|
|
@@ -98,7 +98,7 @@ Pass `--ephemeral` to skip persistence when exploring throwaway questions.
|
|
|
98
98
|
|
|
99
99
|
- [ ] All 4 research agents returned results (or documented why not)
|
|
100
100
|
- [ ] Results synthesized into actionable recommendations
|
|
101
|
-
- [ ] Three artifacts written to `.
|
|
101
|
+
- [ ] Three artifacts written to `.vibe/research/<slug>/` (synthesis / awesome-list / paper) — unless `--ephemeral`
|
|
102
102
|
- [ ] Every awesome-list entry has a one-line "why"
|
|
103
103
|
- [ ] Key findings reflected in SPEC Context section or implementation notes
|
|
104
104
|
- [ ] Conflicting recommendations resolved with reasoning
|
|
@@ -36,7 +36,7 @@ agents: [best-practices, framework-docs, codebase-patterns, security-advisory, s
|
|
|
36
36
|
### Phase 5: Persist as Reusable Dataset
|
|
37
37
|
- **Agent**: orchestrator (self)
|
|
38
38
|
- **Input**: Synthesis (Phase 3) + ranked output (Phase 4)
|
|
39
|
-
- **Output**: Three files under `.
|
|
39
|
+
- **Output**: Three files under `.vibe/research/<topic-slug>/`:
|
|
40
40
|
- `synthesis.md` — conversational synthesis (from `templates/synthesis.md`)
|
|
41
41
|
- `awesome-list.md` — curated links/repos by category (from `templates/awesome-list.md`)
|
|
42
42
|
- `paper.md` — structured survey for `/vibe.spec` Context injection (from `templates/paper.md`)
|
|
@@ -85,4 +85,4 @@ Parallel research across four specialized agents (best-practices, framework-docs
|
|
|
85
85
|
|
|
86
86
|
---
|
|
87
87
|
|
|
88
|
-
**Reuse**: cite this file by path (`.
|
|
88
|
+
**Reuse**: cite this file by path (`.vibe/research/{{SLUG}}/paper.md`) when writing a SPEC — paste the Findings and Recommendation sections into the SPEC's Context block.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe-contract
|
|
3
3
|
tier: core
|
|
4
|
-
description: "API contract drift detection. Extracts HTTP/GraphQL/event/public-function contracts from SPEC into .
|
|
4
|
+
description: "API contract drift detection. Extracts HTTP/GraphQL/event/public-function contracts from SPEC into .vibe/contracts/<feature>.md, compares to implementation, and fails loudly on breaking drift (missing endpoints, removed required fields, type changes). P1 drifts auto-register as regressions via vibe-regress. Must use this skill when user runs /vibe.contract, when /vibe.spec completes, when /vibe.verify passes scenarios, or when the user says 'contract', 'API schema', 'breaking change', 'drift', '계약', '스키마 바뀜'."
|
|
5
5
|
triggers: [contract, drift, "계약", "API 변경", "breaking change", "schema drift"]
|
|
6
6
|
priority: 70
|
|
7
7
|
chain-next: []
|
|
@@ -18,7 +18,7 @@ Hidden vibe-coding weakness: as the implementation grows, response shapes drift
|
|
|
18
18
|
## Storage Contract
|
|
19
19
|
|
|
20
20
|
```
|
|
21
|
-
.
|
|
21
|
+
.vibe/contracts/
|
|
22
22
|
<feature>.md # contract SSOT (extracted from SPEC)
|
|
23
23
|
<feature>.snapshot.md # implementation snapshot (last check)
|
|
24
24
|
```
|
|
@@ -28,7 +28,7 @@ Hidden vibe-coding weakness: as the implementation grows, response shapes drift
|
|
|
28
28
|
```yaml
|
|
29
29
|
---
|
|
30
30
|
feature: string
|
|
31
|
-
extracted-from: .
|
|
31
|
+
extracted-from: .vibe/specs/<feature>.md
|
|
32
32
|
extracted-at: ISO-8601
|
|
33
33
|
source-spec-hash: sha256 # for change detection
|
|
34
34
|
endpoints:
|
|
@@ -75,14 +75,14 @@ endpoints:
|
|
|
75
75
|
3. Extraction failure (no such section) → **exit cleanly with `no-contract` state**. Not every feature has an API.
|
|
76
76
|
4. Success → convert to the frontmatter structure
|
|
77
77
|
5. `source-spec-hash`: sha256 of SPEC content (for next extract to detect change)
|
|
78
|
-
6. Save to `.
|
|
78
|
+
6. Save to `.vibe/contracts/<feature>.md` (no-op if file exists with the same hash)
|
|
79
79
|
|
|
80
80
|
**Caveat**: extraction is LLM-driven. Mark low-confidence fields with `# unconfirmed` so the user can review.
|
|
81
81
|
|
|
82
82
|
### 2. `check <feature>` — contract vs implementation
|
|
83
83
|
|
|
84
84
|
**Steps**:
|
|
85
|
-
1. Load `.
|
|
85
|
+
1. Load `.vibe/contracts/<feature>.md`. If missing → **suggest extract first**.
|
|
86
86
|
2. For each endpoint, find implementation:
|
|
87
87
|
- http: detect framework (Express, Fastify, Next.js API routes, Hono, ...)
|
|
88
88
|
- graphql: locate resolver files
|
|
@@ -90,7 +90,7 @@ endpoints:
|
|
|
90
90
|
- function: module export
|
|
91
91
|
3. Extract implementation signature/schema → compare against contract
|
|
92
92
|
4. Classify drift (severity table in command file)
|
|
93
|
-
5. Persist snapshot at `.
|
|
93
|
+
5. Persist snapshot at `.vibe/contracts/<feature>.snapshot.md` (current implementation state)
|
|
94
94
|
|
|
95
95
|
### 3. `diff <feature>` — changes since last snapshot
|
|
96
96
|
|
|
@@ -20,7 +20,7 @@ chain-next: [vibe-plan]
|
|
|
20
20
|
|
|
21
21
|
**Skip when**:
|
|
22
22
|
- Small bug fix on an existing project
|
|
23
|
-
- `.
|
|
23
|
+
- `.vibe/plans/{feature}.md` already exists (→ only update via `vibe-plan`)
|
|
24
24
|
|
|
25
25
|
## Core Loop
|
|
26
26
|
|
|
@@ -51,7 +51,7 @@ chain-next: [vibe-plan]
|
|
|
51
51
|
└──────────────────────┘
|
|
52
52
|
↓
|
|
53
53
|
4. Save collected results
|
|
54
|
-
.
|
|
54
|
+
.vibe/interviews/{feature}.md
|
|
55
55
|
↓
|
|
56
56
|
5. chain-next: vibe-plan
|
|
57
57
|
```
|
|
@@ -206,7 +206,7 @@ Incomplete items will be marked as "TBD" in the plan.
|
|
|
206
206
|
|
|
207
207
|
## Step 4: Save Collected Results
|
|
208
208
|
|
|
209
|
-
**Output file**: `.
|
|
209
|
+
**Output file**: `.vibe/interviews/{feature-name}.md`
|
|
210
210
|
|
|
211
211
|
**Structure**:
|
|
212
212
|
|
|
@@ -262,7 +262,7 @@ stoppedBy: user | auto
|
|
|
262
262
|
### Update `.last-feature` pointer
|
|
263
263
|
|
|
264
264
|
```
|
|
265
|
-
Write ".
|
|
265
|
+
Write ".vibe/.last-feature" ← feature-name (single line)
|
|
266
266
|
|
|
267
267
|
Run immediately after saving the interview file in Step 4.
|
|
268
268
|
This pointer is used by /vibe.spec (no args) for Smart Resume.
|
|
@@ -278,7 +278,7 @@ After the interview is complete, the `vibe-plan` skill is automatically activate
|
|
|
278
278
|
✅ Interview complete!
|
|
279
279
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
280
280
|
|
|
281
|
-
📄 .
|
|
281
|
+
📄 .vibe/interviews/{feature-name}.md
|
|
282
282
|
Required: 8/8
|
|
283
283
|
Optional: 12/14
|
|
284
284
|
Discovered: 3
|
|
@@ -345,7 +345,7 @@ User: 3
|
|
|
345
345
|
Claude: ⚠️ All required items complete. 10 optional items will be marked as TBD.
|
|
346
346
|
|
|
347
347
|
✅ Interview complete!
|
|
348
|
-
📄 .
|
|
348
|
+
📄 .vibe/interviews/parallax-website.md
|
|
349
349
|
|
|
350
350
|
→ vibe-plan skill is starting plan creation...
|
|
351
351
|
```
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
### R2. existing-project-context
|
|
13
13
|
**Q**: 기존 프로젝트의 기술 스택을 확인했나요?
|
|
14
|
-
**힌트**: CLAUDE.md, package.json, .
|
|
14
|
+
**힌트**: CLAUDE.md, package.json, .vibe/config.json 읽어서 자동 파악.
|
|
15
15
|
**follow-up**: 파악 결과를 사용자에게 요약해 확인 받기.
|
|
16
16
|
|
|
17
17
|
### R3. affected-areas
|
|
@@ -13,7 +13,7 @@ chain-next: [vibe-spec, vibe-figma]
|
|
|
13
13
|
|
|
14
14
|
## When to Use
|
|
15
15
|
|
|
16
|
-
- `vibe-interview` has just completed and `.
|
|
16
|
+
- `vibe-interview` has just completed and `.vibe/interviews/{feature}.md` exists
|
|
17
17
|
- The user requests "write me a plan document" or "clean up the interview"
|
|
18
18
|
- Need to convert an external PRD/wireframe into the vibe plan document format
|
|
19
19
|
|
|
@@ -24,7 +24,7 @@ chain-next: [vibe-spec, vibe-figma]
|
|
|
24
24
|
|
|
25
25
|
```
|
|
26
26
|
1. Read interview file
|
|
27
|
-
.
|
|
27
|
+
.vibe/interviews/{feature}.md
|
|
28
28
|
↓
|
|
29
29
|
2. Load template
|
|
30
30
|
~/.claude/vibe/templates/plan-template.md
|
|
@@ -40,7 +40,7 @@ chain-next: [vibe-spec, vibe-figma]
|
|
|
40
40
|
type ∈ {api, library, feature-data} → omit
|
|
41
41
|
↓
|
|
42
42
|
5. Save plan document
|
|
43
|
-
.
|
|
43
|
+
.vibe/plans/{feature}.md
|
|
44
44
|
↓
|
|
45
45
|
6. Handoff guidance
|
|
46
46
|
Next steps: /vibe.spec, /vibe.figma, parallel
|
|
@@ -49,7 +49,7 @@ chain-next: [vibe-spec, vibe-figma]
|
|
|
49
49
|
## Step 1: Read Interview File
|
|
50
50
|
|
|
51
51
|
```
|
|
52
|
-
Read .
|
|
52
|
+
Read .vibe/interviews/{feature-name}.md
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
Extract `type`, `status`, `requiredCollected`, `optionalCollected`, etc. from the frontmatter.
|
|
@@ -104,7 +104,7 @@ Edit anything that doesn't match your intent.
|
|
|
104
104
|
### `.last-feature` Pointer Update
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
Write ".
|
|
107
|
+
Write ".vibe/.last-feature" ← feature-name (one line)
|
|
108
108
|
Run immediately after extracting the feature name from the interview file.
|
|
109
109
|
No-op if the value is already the same.
|
|
110
110
|
```
|
|
@@ -180,7 +180,7 @@ else: # api, library, feature-data
|
|
|
180
180
|
|
|
181
181
|
## Step 5: Save Plan Document
|
|
182
182
|
|
|
183
|
-
**Output path**: `.
|
|
183
|
+
**Output path**: `.vibe/plans/{feature-name}.md`
|
|
184
184
|
|
|
185
185
|
**Frontmatter**:
|
|
186
186
|
|
|
@@ -191,7 +191,7 @@ type: {website | webapp | mobile | api | library | feature}
|
|
|
191
191
|
status: draft
|
|
192
192
|
createdAt: {ISO-timestamp}
|
|
193
193
|
lastUpdated: {ISO-timestamp}
|
|
194
|
-
source: .
|
|
194
|
+
source: .vibe/interviews/{feature-name}.md
|
|
195
195
|
downstream: [spec, figma] # or [spec] for non-UI
|
|
196
196
|
---
|
|
197
197
|
```
|
|
@@ -213,7 +213,7 @@ After saving the plan document, guide the user on next steps:
|
|
|
213
213
|
✅ Plan document complete!
|
|
214
214
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
215
215
|
|
|
216
|
-
📄 .
|
|
216
|
+
📄 .vibe/plans/{feature-name}.md
|
|
217
217
|
Sections: {N} written
|
|
218
218
|
TBD: {M} (to be decided later)
|
|
219
219
|
|
|
@@ -222,7 +222,7 @@ Type: {type}
|
|
|
222
222
|
Next steps:
|
|
223
223
|
|
|
224
224
|
[UI project: website/webapp/mobile]
|
|
225
|
-
1. /vibe.spec ".
|
|
225
|
+
1. /vibe.spec ".vibe/plans/{feature-name}.md"
|
|
226
226
|
→ Write code spec → /vibe.run implementation
|
|
227
227
|
2. /vibe.figma
|
|
228
228
|
→ Figma design → FE UI code
|
|
@@ -230,7 +230,7 @@ Next steps:
|
|
|
230
230
|
→ Feature + Design → website prototype
|
|
231
231
|
|
|
232
232
|
[Non-UI: api/library]
|
|
233
|
-
1. /vibe.spec ".
|
|
233
|
+
1. /vibe.spec ".vibe/plans/{feature-name}.md"
|
|
234
234
|
→ Code spec → /vibe.run implementation
|
|
235
235
|
|
|
236
236
|
Where would you like to start?
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe-regress
|
|
3
3
|
tier: core
|
|
4
|
-
description: "Regression test auto-evolution. Registers bugs (auto from /vibe.verify failures or manual), generates preventive vitest/jest files from bug records, clusters repeated patterns (3+ same root-cause-tag) into shared tests, and imports historical `fix:` commits from git log. Storage: .
|
|
4
|
+
description: "Regression test auto-evolution. Registers bugs (auto from /vibe.verify failures or manual), generates preventive vitest/jest files from bug records, clusters repeated patterns (3+ same root-cause-tag) into shared tests, and imports historical `fix:` commits from git log. Storage: .vibe/regressions/<slug>.md. Must use this skill when user runs /vibe.regress, when /vibe.verify produces a failure, or when the user says 'don't let this happen again' / 'regression test' / '회귀 테스트'."
|
|
5
5
|
triggers: [regress, regression, "회귀", "다시는", "반복 버그", "fix commit"]
|
|
6
6
|
priority: 70
|
|
7
7
|
chain-next: []
|
|
@@ -18,7 +18,7 @@ A classic vibe-coding weakness: LLMs reintroduce bugs of the same class. Regress
|
|
|
18
18
|
## Storage Contract
|
|
19
19
|
|
|
20
20
|
```
|
|
21
|
-
.
|
|
21
|
+
.vibe/regressions/
|
|
22
22
|
<bug-slug>.md # one file per bug
|
|
23
23
|
_cluster-<tag>.md # shared-test design produced by `cluster`
|
|
24
24
|
```
|
|
@@ -69,7 +69,7 @@ Most calls are automatic; manual use is rare (bugs found outside `/vibe.verify`,
|
|
|
69
69
|
- Fix description
|
|
70
70
|
4. `root-cause-tag` is **inferred from the allowed set, then confirmed with the user**. If unclear → `other`.
|
|
71
71
|
5. Generate slug: kebab-case keywords from the symptom; on collision append `-2`
|
|
72
|
-
6. Write `.
|
|
72
|
+
6. Write `.vibe/regressions/<slug>.md` (status: `open`)
|
|
73
73
|
|
|
74
74
|
### 2. `generate <slug>` — generate preventive test
|
|
75
75
|
|
|
@@ -106,7 +106,7 @@ cart-stock-race-double-deduct cart concurrency open 1d
|
|
|
106
106
|
|
|
107
107
|
**Steps**:
|
|
108
108
|
1. `git log --grep='^fix:' --format='%H|%s|%ci' --since=<last-import-date>`
|
|
109
|
-
- `last-import-date` lives in `.
|
|
109
|
+
- `last-import-date` lives in `.vibe/regressions/.import-cursor` (defaults to 90 days ago)
|
|
110
110
|
2. For each commit:
|
|
111
111
|
- If a bug file with the same `fix-commit` already exists → **skip**
|
|
112
112
|
- Otherwise infer symptom + root-cause-tag from message/diff (LLM call)
|
|
@@ -152,7 +152,7 @@ Load skill `vibe-regress` with: register --from-verify
|
|
|
152
152
|
|
|
153
153
|
At the start of `/vibe.run "<feature>"`:
|
|
154
154
|
|
|
155
|
-
1. Filter `.
|
|
155
|
+
1. Filter `.vibe/regressions/*.md` for `feature: <feature-name>` + `status != resolved`
|
|
156
156
|
2. If any open items:
|
|
157
157
|
```
|
|
158
158
|
⚠️ Open regressions for this feature:
|
|
@@ -35,7 +35,7 @@ feature: {{FEATURE}}
|
|
|
35
35
|
|
|
36
36
|
## Related
|
|
37
37
|
|
|
38
|
-
- Feature: [.
|
|
38
|
+
- Feature: [.vibe/features/{{FEATURE}}.feature](../../features/{{FEATURE}}.feature)
|
|
39
39
|
- Fix commit: `{{FIX_COMMIT}}`
|
|
40
40
|
- Regression test: `{{TEST_PATH}}`
|
|
41
41
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Symptom: {{SYMPTOM}}
|
|
5
5
|
* Root cause tag: {{ROOT_CAUSE_TAG}}
|
|
6
6
|
* Fix commit: {{FIX_COMMIT}}
|
|
7
|
-
* Source record: .
|
|
7
|
+
* Source record: .vibe/regressions/{{SLUG}}.md
|
|
8
8
|
*
|
|
9
9
|
* DO NOT delete this test when the bug is fixed — it exists to prevent the
|
|
10
10
|
* same bug from being reintroduced. Update only if the reproduction steps
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Symptom: {{SYMPTOM}}
|
|
5
5
|
* Root cause tag: {{ROOT_CAUSE_TAG}}
|
|
6
6
|
* Fix commit: {{FIX_COMMIT}}
|
|
7
|
-
* Source record: .
|
|
7
|
+
* Source record: .vibe/regressions/{{SLUG}}.md
|
|
8
8
|
*
|
|
9
9
|
* DO NOT delete this test when the bug is fixed — it exists to prevent the
|
|
10
10
|
* same bug from being reintroduced. Update only if the reproduction steps
|