@su-record/vibe 3.2.5 → 3.2.7
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/README.en.md +1 -1
- package/README.md +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +10 -9
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +5 -0
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
- package/package.json +2 -2
- package/skills/vibe/SKILL.md +27 -86
- package/skills/vibe/references/routing-examples.md +85 -0
- package/skills/vibe.agents-md/SKILL.md +12 -10
- package/skills/vibe.analyze/SKILL.md +22 -211
- package/skills/vibe.analyze/references/mode1-feature.md +81 -0
- package/skills/vibe.analyze/references/mode2-document.md +50 -0
- package/skills/vibe.analyze/references/mode3-website.md +47 -0
- package/skills/vibe.analyze/references/mode4-quality.md +35 -0
- package/skills/vibe.brand-assets/SKILL.md +2 -2
- package/skills/vibe.brand-assets/references/mobile-assets.md +6 -0
- package/skills/vibe.capability-loop/SKILL.md +14 -80
- package/skills/vibe.capability-loop/references/escalate.md +86 -0
- package/skills/vibe.chub-usage/SKILL.md +3 -132
- package/skills/vibe.clone/SKILL.md +43 -358
- package/skills/vibe.clone/references/phase-commands.md +118 -0
- package/skills/vibe.clone/references/setup-and-layout.md +34 -0
- package/skills/vibe.clone/references/verification-loops.md +64 -0
- package/skills/vibe.commit-push-pr/SKILL.md +10 -4
- package/skills/vibe.context7-usage/SKILL.md +3 -99
- package/skills/vibe.continue/SKILL.md +17 -7
- package/skills/{vibe.handoff → vibe.continue}/agents/context-summarizer.md +1 -1
- package/skills/{vibe.handoff → vibe.continue}/agents/document-writer.md +1 -1
- package/skills/{vibe.handoff → vibe.continue}/agents/state-collector.md +1 -1
- package/skills/{vibe.handoff → vibe.continue}/agents/verifier.md +1 -1
- package/skills/{vibe.handoff/rubrics/completeness.md → vibe.continue/references/handoff-completeness.md} +1 -1
- package/skills/{vibe.handoff/templates → vibe.continue/references}/handoff.md +37 -2
- package/skills/vibe.contract/SKILL.md +4 -27
- package/skills/vibe.create-prd/SKILL.md +8 -1
- package/skills/vibe.design/SKILL.md +18 -5
- package/skills/vibe.design/references/design-context.md +184 -0
- package/skills/vibe.design-refine/SKILL.md +7 -0
- package/skills/vibe.design-review/SKILL.md +7 -0
- package/skills/vibe.design-teach/SKILL.md +2 -175
- package/skills/vibe.devlog/SKILL.md +14 -11
- package/skills/vibe.devlog/references/auto-push.md +10 -0
- package/skills/vibe.docs/SKILL.md +27 -198
- package/skills/vibe.docs/references/agent.md +55 -0
- package/skills/vibe.docs/references/arch.md +28 -0
- package/skills/vibe.docs/references/codemaps.md +17 -0
- package/skills/vibe.docs/references/diagram.md +24 -0
- package/skills/vibe.docs/references/guide.md +23 -0
- package/skills/vibe.docs/references/readme.md +45 -0
- package/skills/vibe.docs/references/release.md +31 -0
- package/skills/vibe.documentation-provider/SKILL.md +22 -0
- package/skills/vibe.documentation-provider/references/chub.md +141 -0
- package/skills/vibe.documentation-provider/references/context7.md +107 -0
- package/skills/vibe.educational-content/SKILL.md +7 -0
- package/skills/vibe.event/SKILL.md +47 -146
- package/skills/vibe.event/references/comms.md +173 -0
- package/skills/vibe.event/references/operations.md +208 -0
- package/skills/vibe.event/references/orchestration-legacy.md +97 -0
- package/skills/vibe.event/references/planning.md +145 -0
- package/skills/vibe.event-comms/SKILL.md +3 -165
- package/skills/vibe.event-ops/SKILL.md +3 -200
- package/skills/vibe.event-planning/SKILL.md +3 -137
- package/skills/vibe.figma/SKILL.md +26 -692
- package/skills/vibe.figma/references/branch1-read-convention.md +82 -0
- package/skills/vibe.figma/references/branch2-read-standalone.md +69 -0
- package/skills/vibe.figma/references/branch3-write.md +122 -0
- package/skills/vibe.figma/references/core-implementation.md +453 -0
- package/skills/vibe.git-worktree/SKILL.md +2 -6
- package/skills/vibe.git-worktree/references/troubleshooting.md +9 -0
- package/skills/vibe.handoff/SKILL.md +2 -103
- package/skills/vibe.harness/SKILL.md +17 -12
- package/skills/vibe.image/SKILL.md +8 -1
- package/skills/vibe.llm/SKILL.md +8 -1
- package/skills/vibe.loop/SKILL.md +9 -11
- package/skills/vibe.loop/references/install-adapters.md +10 -0
- package/skills/vibe.presentation/SKILL.md +7 -0
- package/skills/vibe.prioritization/SKILL.md +7 -0
- package/skills/vibe.priority-todos/SKILL.md +2 -57
- package/skills/vibe.react-best-practices/SKILL.md +1 -1
- package/skills/vibe.reason/SKILL.md +9 -2
- package/skills/vibe.regress/SKILL.md +6 -28
- package/skills/vibe.regress/templates/{test-jest.md → test-template.md} +1 -0
- package/skills/vibe.review/SKILL.md +35 -38
- package/skills/vibe.review/references/priority-todos.md +66 -0
- package/skills/vibe.review/references/ui-ux-review.md +39 -0
- package/skills/vibe.run/SKILL.md +57 -656
- package/skills/vibe.run/references/arch-guard.md +178 -0
- package/skills/vibe.run/references/e2e-and-autofix.md +40 -0
- package/skills/vibe.run/references/exec-plan.md +145 -0
- package/skills/vibe.run/references/guidelines-and-tools.md +84 -0
- package/skills/vibe.run/references/process-steps.md +179 -0
- package/skills/vibe.run/references/restraint.md +66 -0
- package/skills/vibe.scaffold/SKILL.md +9 -13
- package/skills/vibe.scaffold/references/clean-architecture.md +17 -0
- package/skills/vibe.spec/SKILL.md +12 -8
- package/skills/vibe.spec/references/legacy-artifacts.md +6 -0
- package/skills/vibe.test/SKILL.md +93 -70
- package/skills/vibe.test/references/report-template.md +101 -0
- package/skills/vibe.tool-fallback/SKILL.md +10 -32
- package/skills/vibe.tool-fallback/references/external-llm.md +10 -0
- package/skills/vibe.tool-fallback/references/file-lookup.md +9 -0
- package/skills/vibe.tool-fallback/references/web-search.md +11 -0
- package/skills/vibe.trace/SKILL.md +2 -264
- package/skills/vibe.ui-ux-pro-max/SKILL.md +1 -3
- package/skills/vibe.ui-ux-pro-max/references/charts-and-data.md +7 -0
- package/skills/vibe.user-personas/SKILL.md +8 -1
- package/skills/vibe.verify/SKILL.md +30 -4
- package/skills/vibe.verify/references/trace-mode.md +271 -0
- package/skills/vibe.regress/templates/test-vitest.md +0 -30
- /package/skills/{vibe.design-teach/rubrics → vibe.design/references}/brand-personality.md +0 -0
- /package/skills/{vibe.design-teach → vibe.design}/templates/design-context.json +0 -0
- /package/skills/{vibe.context7-usage/rubrics/when-to-use.md → vibe.documentation-provider/references/context7-when-to-use.md} +0 -0
- /package/skills/{vibe.event-ops/rubrics → vibe.event/references}/contingency.md +0 -0
- /package/skills/{vibe.event-ops/templates/d-day-checklist.md → vibe.event/references/d-day-checklist-template.md} +0 -0
- /package/skills/{vibe.event-comms/templates/email-invite.md → vibe.event/references/email-invite-template.md} +0 -0
- /package/skills/{vibe.event-planning/templates/event-plan.md → vibe.event/references/event-plan-template.md} +0 -0
- /package/skills/{vibe.event-comms/templates/sns-post.md → vibe.event/references/sns-post-template.md} +0 -0
- /package/skills/{vibe.event-planning/rubrics → vibe.event/references}/timeline.md +0 -0
- /package/skills/{vibe.priority-todos/templates/todo-board.md → vibe.review/references/todo-board-template.md} +0 -0
- /package/skills/{vibe.priority-todos/rubrics/prioritization.md → vibe.review/references/todo-prioritization.md} +0 -0
|
@@ -1,270 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.trace
|
|
3
|
-
description:
|
|
3
|
+
description: 요구사항과 구현의 추적 관계를 확인하거나 RTM이 필요할 때 vibe.verify trace mode를 로드하는 호환 진입점이다.
|
|
4
4
|
argument-hint: "feature-name [--html] [--save]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Generate and display Requirements Traceability Matrix (RTM).
|
|
11
|
-
|
|
12
|
-
## Usage
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
/vibe.trace "feature-name" # Generate RTM for feature
|
|
16
|
-
/vibe.trace "feature-name" --html # Output as HTML
|
|
17
|
-
/vibe.trace "feature-name" --save # Save to file
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
> **⏱️ Timer**: Call `getCurrentTime` tool at the START. Record the result as `{start_time}`.
|
|
21
|
-
|
|
22
|
-
## Description
|
|
23
|
-
|
|
24
|
-
Requirements Traceability Matrix (RTM) tracks the relationship between:
|
|
25
|
-
- **Requirements** (REQ-xxx-xxx)
|
|
26
|
-
- **SPEC sections** (Phase tasks)
|
|
27
|
-
- **Feature scenarios** (BDD)
|
|
28
|
-
- **Test files** (unit/integration tests)
|
|
29
|
-
|
|
30
|
-
## Process
|
|
31
|
-
|
|
32
|
-
### 1. Load Files
|
|
33
|
-
|
|
34
|
-
**Search order (check BOTH file AND folder):**
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
Step 1: Check if SPLIT structure exists (folder)
|
|
38
|
-
📁 .vibe/specs/{feature-name}/ → Folder with _index.md + phase files
|
|
39
|
-
📁 .vibe/features/{feature-name}/ → Folder with _index.feature + phase files
|
|
40
|
-
|
|
41
|
-
Step 2: If no folder, check single file
|
|
42
|
-
📄 .vibe/specs/{feature-name}.md → Single SPEC file
|
|
43
|
-
📄 .vibe/features/{feature-name}.feature → Single Feature file
|
|
44
|
-
|
|
45
|
-
Step 3: If neither exists → Error
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Split structure (folder) detected:**
|
|
49
|
-
```
|
|
50
|
-
📁 .vibe/specs/{feature-name}/
|
|
51
|
-
├── _index.md → Master SPEC (read first)
|
|
52
|
-
├── phase-1-{name}.md → Phase 1 SPEC
|
|
53
|
-
└── ...
|
|
54
|
-
|
|
55
|
-
📁 .vibe/features/{feature-name}/
|
|
56
|
-
├── _index.feature → Master Feature (read first)
|
|
57
|
-
├── phase-1-{name}.feature → Phase 1 scenarios
|
|
58
|
-
└── ...
|
|
59
|
-
|
|
60
|
-
→ Load all phase files, generate RTM across all phases
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
**Single file detected:**
|
|
64
|
-
```
|
|
65
|
-
📄 .vibe/specs/{feature-name}.md → SPEC
|
|
66
|
-
📄 .vibe/features/{feature-name}.feature → Feature
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
**Additional (auto-detect):**
|
|
70
|
-
```
|
|
71
|
-
📄 src/**/*.test.ts → Tests (auto-detect)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
**Error if NEITHER file NOR folder found:**
|
|
75
|
-
```
|
|
76
|
-
❌ SPEC not found. Searched:
|
|
77
|
-
- .vibe/specs/{feature-name}/ (folder)
|
|
78
|
-
- .vibe/specs/{feature-name}.md (file)
|
|
79
|
-
|
|
80
|
-
Run /vibe.spec "{feature-name}" first.
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### 2. Extract Mappings
|
|
84
|
-
|
|
85
|
-
For each requirement ID (REQ-xxx-xxx):
|
|
86
|
-
1. Find corresponding SPEC section
|
|
87
|
-
2. Find matching Feature scenario
|
|
88
|
-
3. Find related test file
|
|
89
|
-
|
|
90
|
-
### 3. Calculate Coverage
|
|
91
|
-
|
|
92
|
-
```
|
|
93
|
-
Coverage = (Full coverage items / Total requirements) × 100%
|
|
94
|
-
|
|
95
|
-
Full coverage = Has SPEC + Feature + Test
|
|
96
|
-
Partial = Missing one or more
|
|
97
|
-
None = Only in SPEC
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### 4. Output RTM
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
|
-
📊 REQUIREMENTS TRACEABILITY MATRIX: {feature-name}
|
|
105
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
106
|
-
|
|
107
|
-
## Summary
|
|
108
|
-
| Metric | Value |
|
|
109
|
-
|-------------------|----------|
|
|
110
|
-
| Total Requirements| 10 |
|
|
111
|
-
| SPEC Coverage | 10/10 |
|
|
112
|
-
| Feature Coverage | 8/10 |
|
|
113
|
-
| Test Coverage | 6/10 |
|
|
114
|
-
| **Overall** | **60%** |
|
|
115
|
-
|
|
116
|
-
## Traceability Matrix
|
|
117
|
-
|
|
118
|
-
| Requirement | SPEC | Feature | Test | Coverage |
|
|
119
|
-
|-------------|------|---------|------|----------|
|
|
120
|
-
| REQ-login-001 | ✅ Phase 1 | ✅ Scenario 1 | ✅ login.test.ts | ✅ Full |
|
|
121
|
-
| REQ-login-002 | ✅ Phase 1 | ✅ Scenario 2 | ❌ | ⚠️ Partial |
|
|
122
|
-
| REQ-login-003 | ✅ Phase 2 | ❌ | ❌ | ❌ None |
|
|
123
|
-
|
|
124
|
-
## Uncovered Requirements
|
|
125
|
-
|
|
126
|
-
The following requirements lack full coverage:
|
|
127
|
-
|
|
128
|
-
- **REQ-login-002**: Password validation
|
|
129
|
-
- Missing: Test file
|
|
130
|
-
|
|
131
|
-
- **REQ-login-003**: Remember me functionality
|
|
132
|
-
- Missing: Feature scenario, Test file
|
|
133
|
-
|
|
134
|
-
## Recommendations
|
|
135
|
-
|
|
136
|
-
⚠️ Coverage is at 60%. Consider:
|
|
137
|
-
- Add Feature scenarios for uncovered requirements
|
|
138
|
-
- Add test cases for uncovered requirements
|
|
139
|
-
|
|
140
|
-
⏱️ Started: {start_time}
|
|
141
|
-
⏱️ Completed: {getCurrentTime 결과}
|
|
142
|
-
|
|
143
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Example
|
|
147
|
-
|
|
148
|
-
```
|
|
149
|
-
User: /vibe.trace "login"
|
|
150
|
-
|
|
151
|
-
Claude:
|
|
152
|
-
📊 Generating RTM for "login"...
|
|
153
|
-
|
|
154
|
-
Loading files:
|
|
155
|
-
✅ SPEC: .vibe/specs/login.md (5 requirements)
|
|
156
|
-
✅ Feature: .vibe/features/login.feature (4 scenarios)
|
|
157
|
-
✅ Tests: 3 test files found
|
|
158
|
-
|
|
159
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
160
|
-
📊 REQUIREMENTS TRACEABILITY MATRIX: login
|
|
161
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
162
|
-
|
|
163
|
-
## Summary
|
|
164
|
-
| Metric | Value |
|
|
165
|
-
|-------------------|----------|
|
|
166
|
-
| Total Requirements| 5 |
|
|
167
|
-
| SPEC Coverage | 5/5 |
|
|
168
|
-
| Feature Coverage | 4/5 |
|
|
169
|
-
| Test Coverage | 3/5 |
|
|
170
|
-
| **Overall** | **60%** |
|
|
171
|
-
|
|
172
|
-
## Traceability Matrix
|
|
173
|
-
|
|
174
|
-
| Requirement | SPEC | Feature | Test | Coverage |
|
|
175
|
-
|-------------|------|---------|------|----------|
|
|
176
|
-
| REQ-login-001 | ✅ | ✅ | ✅ | ✅ Full |
|
|
177
|
-
| REQ-login-002 | ✅ | ✅ | ✅ | ✅ Full |
|
|
178
|
-
| REQ-login-003 | ✅ | ✅ | ✅ | ✅ Full |
|
|
179
|
-
| REQ-login-004 | ✅ | ✅ | ❌ | ⚠️ Partial |
|
|
180
|
-
| REQ-login-005 | ✅ | ❌ | ❌ | ❌ None |
|
|
181
|
-
|
|
182
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
## Tool Integration
|
|
186
|
-
|
|
187
|
-
The RTM generation uses core tools:
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
# Generate RTM (generateTraceabilityMatrix is synchronous — no .then())
|
|
191
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsMarkdown(m)); })"
|
|
192
|
-
|
|
193
|
-
# Generate HTML
|
|
194
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsHtml(m)); })"
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
> **Note:** Default SPEC path is `.vibe/specs/<feature>.md` (falls back to `.claude/vibe/specs/` then `.claude/specs/` for legacy projects).
|
|
198
|
-
> `status === 'empty'` means the gate MUST be treated as failed/not-applicable, never as 100% pass.
|
|
199
|
-
|
|
200
|
-
## Post-Trace Gates
|
|
201
|
-
|
|
202
|
-
After `/vibe.trace` completes and the RTM is displayed, two downstream mechanisms consume the result.
|
|
203
|
-
|
|
204
|
-
### Empty-result gate
|
|
205
|
-
|
|
206
|
-
`generateTraceabilityMatrix` returns `status: 'empty'` when no `REQ-<feature>-NNN` IDs are found in the SPEC. This state **must be treated as a gate failure**, not as 100% coverage. When the matrix status is `empty`, report it explicitly and do not proceed as if the feature is verified.
|
|
207
|
-
|
|
208
|
-
```
|
|
209
|
-
RTM status === 'empty'
|
|
210
|
-
→ Coverage gate: FAILED (no requirements to trace)
|
|
211
|
-
→ Action: run /vibe.spec to add REQ-IDs before re-running /vibe.trace
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Run-ledger flow
|
|
215
|
-
|
|
216
|
-
`/vibe.verify` records its outcome through `hooks/scripts/verify-ledger.js`, binding the current run ID and command-result evidence. This writes `verifyPassed` and `verifyAt` into `.vibe/metrics/run-ledger.json`. Downstream gates consume this record:
|
|
217
|
-
|
|
218
|
-
| Gate | Behavior |
|
|
219
|
-
|------|----------|
|
|
220
|
-
| `auto-commit` | Commits only when `verifyPassed === true` AND `verifyAt > runStarted` |
|
|
221
|
-
| Stop hook | Warns when `runStarted && !verifyPassed`; blocks once if `verifyGate.mode === 'block'` |
|
|
222
|
-
|
|
223
|
-
**To register a passing trace as verified**, run `/vibe.verify` after `/vibe.trace` reports acceptable coverage. The verify skill records the current run ID and command evidence internally — you do not invoke the ledger CLI manually.
|
|
224
|
-
|
|
225
|
-
```
|
|
226
|
-
/vibe.trace "login" → RTM: 9/9 (100%)
|
|
227
|
-
/vibe.verify "login" → runs checks → records pass + run ID + command results
|
|
228
|
-
→ .vibe/metrics/run-ledger.json updated
|
|
229
|
-
auto-commit / Stop gate → verifyPassed=true, gate clears
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
If `/vibe.verify` is skipped, `auto-commit` will log the skip reason and abort the commit.
|
|
233
|
-
|
|
234
|
-
## Options
|
|
235
|
-
|
|
236
|
-
| Option | Description |
|
|
237
|
-
|--------|-------------|
|
|
238
|
-
| `--html` | Output as HTML file |
|
|
239
|
-
| `--save` | Save to `.vibe/reports/{feature}-rtm.md` |
|
|
240
|
-
| `--json` | Output as JSON |
|
|
241
|
-
|
|
242
|
-
## Coverage Targets
|
|
243
|
-
|
|
244
|
-
| Coverage Level | Status |
|
|
245
|
-
|----------------|--------|
|
|
246
|
-
| 90-100% | ✅ Excellent - Ready for release |
|
|
247
|
-
| 70-89% | ⚠️ Good - Minor gaps |
|
|
248
|
-
| 50-69% | ⚠️ Fair - Significant gaps |
|
|
249
|
-
| 0-49% | ❌ Poor - Major gaps |
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## `.last-feature` 포인터 삭제 (워크플로 완주)
|
|
254
|
-
|
|
255
|
-
```
|
|
256
|
-
/vibe.trace가 정상 완료되면 (RTM 출력 + 사용자 확인 후):
|
|
257
|
-
Delete ".vibe/.last-feature"
|
|
258
|
-
|
|
259
|
-
이유: /vibe.trace는 vibe 워크플로의 마지막 Phase (Phase 7).
|
|
260
|
-
완주 후에는 다음 /vibe.spec 호출 시 "빈 시작" 또는 진행 중 목록에서 다른 feature를 시작해야 한다.
|
|
261
|
-
삭제하지 않으면 완료된 feature가 계속 "이어서?" 로 뜬다.
|
|
262
|
-
|
|
263
|
-
예외:
|
|
264
|
-
- /vibe.trace가 에러로 중단된 경우 → 삭제하지 않음 (재시도 가능)
|
|
265
|
-
- --save 또는 --html 플래그와 무관하게 항상 삭제
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
ARGUMENTS: {feature-name}
|
|
8
|
+
Load `vibe.verify` in trace mode and preserve the feature name and all output flags.
|
|
@@ -79,9 +79,7 @@ Searchable database: 50+ styles, 97 color palettes, 57 font pairings, 99 UX guid
|
|
|
79
79
|
|
|
80
80
|
### 8. Charts & Data (LOW)
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
- `color-guidance` - Use accessible color palettes
|
|
84
|
-
- `data-table` - Provide table alternative for accessibility
|
|
82
|
+
For dashboards or other data visualizations only, read `references/charts-and-data.md`. UI calls without charts do not load it.
|
|
85
83
|
|
|
86
84
|
---
|
|
87
85
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Charts and Data Visualization
|
|
2
|
+
|
|
3
|
+
Load only when the requested UI includes charts or data visualization.
|
|
4
|
+
|
|
5
|
+
- `chart-type` — Match chart type to data type.
|
|
6
|
+
- `color-guidance` — Use accessible color palettes.
|
|
7
|
+
- `data-table` — Provide a table alternative for accessibility.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: vibe.user-personas
|
|
3
3
|
invocation: [auto, chain]
|
|
4
4
|
tier: standard
|
|
5
|
-
description: "
|
|
5
|
+
description: "Use when research data must be synthesized into three evidence-based user personas with JTBD, pains, gains, and unexpected insights."
|
|
6
6
|
triggers: [persona, user persona, user profile, user segment, user research]
|
|
7
7
|
priority: 50
|
|
8
8
|
chain-next: [vibe.create-prd, vibe.prioritization]
|
|
@@ -10,6 +10,13 @@ chain-next: [vibe.create-prd, vibe.prioritization]
|
|
|
10
10
|
|
|
11
11
|
# User Personas
|
|
12
12
|
|
|
13
|
+
## Done Criteria
|
|
14
|
+
|
|
15
|
+
- [ ] 정확히 3개의 persona가 생성되어 있다.
|
|
16
|
+
- [ ] 각 persona에 JTBD, pains, gains가 모두 존재한다.
|
|
17
|
+
- [ ] 각 핵심 특성이 research source와 연결되어 있다.
|
|
18
|
+
- [ ] 근거 없는 추론은 inference로 표시되어 있다.
|
|
19
|
+
|
|
13
20
|
> Based on the user persona framework from [Product Compass](https://www.productcompass.pm/p/interviewing-customers-the-ultimate) by Pawel Huryn (MIT License).
|
|
14
21
|
|
|
15
22
|
## Purpose
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.verify
|
|
3
|
-
description:
|
|
4
|
-
argument-hint: "feature name"
|
|
3
|
+
description: 승인된 SPEC에 대한 구현 완료를 판정하거나 REQ→SPEC→Feature→Code 추적표가 필요할 때 검증 또는 trace mode로 실행한다.
|
|
4
|
+
argument-hint: "feature name [--e2e] | trace feature-name [--html] [--save] [--json]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# /vibe.verify
|
|
9
9
|
|
|
10
|
+
## 완료 기준
|
|
11
|
+
|
|
12
|
+
- [ ] 승인된 SPEC의 모든 REQ가 pass 또는 fail로 판정되어 있다.
|
|
13
|
+
- [ ] 각 판정에 test output, 파일·행 또는 산출물 경로 근거가 있다.
|
|
14
|
+
- [ ] verify mode 성공 시 run ledger의 `verifyPassed`가 true다.
|
|
15
|
+
- [ ] trace mode에서는 RTM 파일이 존재하고 누락 REQ가 0개다.
|
|
16
|
+
|
|
10
17
|
SPEC-driven verification. Check the implementation against the SPEC's **Done criteria** and Feature scenarios, record the result to the **run ledger** (`recordVerify`), and auto-register regressions on failure. The JUDGE gate is code-enforced by the ledger — a verification never counts as passed by self-report.
|
|
11
18
|
|
|
12
19
|
## Usage
|
|
@@ -14,8 +21,18 @@ SPEC-driven verification. Check the implementation against the SPEC's **Done cri
|
|
|
14
21
|
```
|
|
15
22
|
/vibe.verify "feature-name" # SPEC-based verification
|
|
16
23
|
/vibe.verify --e2e "feature-name" # + E2E browser verification (agents/e2e-tester.md)
|
|
24
|
+
/vibe.verify trace "feature-name" # Requirements Traceability Matrix
|
|
25
|
+
/vibe.verify trace "feature-name" --html | --save | --json
|
|
17
26
|
```
|
|
18
27
|
|
|
28
|
+
## Trace mode
|
|
29
|
+
|
|
30
|
+
When the first argument is `trace`, read `references/trace-mode.md` and execute
|
|
31
|
+
that RTM workflow instead of the verification process below. Preserve the
|
|
32
|
+
feature name and `--html`, `--save`, and `--json` flags. An empty RTM is a gate
|
|
33
|
+
failure. Trace output alone does not set `verifyPassed`; run normal verify mode
|
|
34
|
+
to bind command evidence to the run ledger.
|
|
35
|
+
|
|
19
36
|
## Scope
|
|
20
37
|
|
|
21
38
|
- **Changed files only** — never full-project scan.
|
|
@@ -39,7 +56,11 @@ Extract the Done criteria / scenarios — this list is the verification checklis
|
|
|
39
56
|
|
|
40
57
|
### 2. Verify each Done criterion (parallel, deterministic)
|
|
41
58
|
|
|
42
|
-
Run all applicable methods
|
|
59
|
+
Run all applicable methods through the harness's native collaboration
|
|
60
|
+
capability; each worker returns a short pass/fail summary instead of bloating
|
|
61
|
+
the coordinator context. Claude Code maps workers to Task/Agent; Codex maps
|
|
62
|
+
them to native collaboration. Inherit the session model by default and run
|
|
63
|
+
independent methods concurrently when capacity permits:
|
|
43
64
|
|
|
44
65
|
| Method | How | Condition |
|
|
45
66
|
|---|---|---|
|
|
@@ -104,7 +125,12 @@ Load skill `vibe.contract` with: check "{feature}"
|
|
|
104
125
|
|
|
105
126
|
### 7. Metrics + Ledger update (MANDATORY final step)
|
|
106
127
|
|
|
107
|
-
Record run metrics, then write the verify result to the run ledger.
|
|
128
|
+
Record run metrics, then explicitly write the verify result to the run ledger.
|
|
129
|
+
This machine-readable record is the deterministic JUDGE consumed by the
|
|
130
|
+
loop-contract gates. Lifecycle Stop/auto-commit hooks may consume the same
|
|
131
|
+
record for earlier feedback, but correctness does not depend on either hook.
|
|
132
|
+
`recordVerify` also writes `.vibe/runs/{run-id}/evidence.json`; Model Judge
|
|
133
|
+
findings remain advisory-only and Human Taste remains release-only.
|
|
108
134
|
|
|
109
135
|
```bash
|
|
110
136
|
# Append step-count history (ok if current-run.json missing)
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verify-trace-mode-reference
|
|
3
|
+
description: Generate and display Requirements Traceability Matrix (RTM) — REQ → SPEC → Feature → Code 관계 추적
|
|
4
|
+
argument-hint: "feature-name [--html] [--save]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /vibe.trace
|
|
9
|
+
|
|
10
|
+
Generate and display Requirements Traceability Matrix (RTM).
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
/vibe.trace "feature-name" # Generate RTM for feature
|
|
16
|
+
/vibe.trace "feature-name" --html # Output as HTML
|
|
17
|
+
/vibe.trace "feature-name" --save # Save to file
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
> **⏱️ Timer**: Query the system clock at START and record the result as `{start_time}`.
|
|
21
|
+
|
|
22
|
+
## Description
|
|
23
|
+
|
|
24
|
+
Requirements Traceability Matrix (RTM) tracks the relationship between:
|
|
25
|
+
- **Requirements** (REQ-xxx-xxx)
|
|
26
|
+
- **SPEC sections** (Phase tasks)
|
|
27
|
+
- **Feature scenarios** (BDD)
|
|
28
|
+
- **Test files** (unit/integration tests)
|
|
29
|
+
|
|
30
|
+
## Process
|
|
31
|
+
|
|
32
|
+
### 1. Load Files
|
|
33
|
+
|
|
34
|
+
**Search order (check BOTH file AND folder):**
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Step 1: Check if SPLIT structure exists (folder)
|
|
38
|
+
📁 .vibe/specs/{feature-name}/ → Folder with _index.md + phase files
|
|
39
|
+
📁 .vibe/features/{feature-name}/ → Folder with _index.feature + phase files
|
|
40
|
+
|
|
41
|
+
Step 2: If no folder, check single file
|
|
42
|
+
📄 .vibe/specs/{feature-name}.md → Single SPEC file
|
|
43
|
+
📄 .vibe/features/{feature-name}.feature → Single Feature file
|
|
44
|
+
|
|
45
|
+
Step 3: If neither exists → Error
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Split structure (folder) detected:**
|
|
49
|
+
```
|
|
50
|
+
📁 .vibe/specs/{feature-name}/
|
|
51
|
+
├── _index.md → Master SPEC (read first)
|
|
52
|
+
├── phase-1-{name}.md → Phase 1 SPEC
|
|
53
|
+
└── ...
|
|
54
|
+
|
|
55
|
+
📁 .vibe/features/{feature-name}/
|
|
56
|
+
├── _index.feature → Master Feature (read first)
|
|
57
|
+
├── phase-1-{name}.feature → Phase 1 scenarios
|
|
58
|
+
└── ...
|
|
59
|
+
|
|
60
|
+
→ Load all phase files, generate RTM across all phases
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Single file detected:**
|
|
64
|
+
```
|
|
65
|
+
📄 .vibe/specs/{feature-name}.md → SPEC
|
|
66
|
+
📄 .vibe/features/{feature-name}.feature → Feature
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Additional (auto-detect):**
|
|
70
|
+
```
|
|
71
|
+
📄 src/**/*.test.ts → Tests (auto-detect)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Error if NEITHER file NOR folder found:**
|
|
75
|
+
```
|
|
76
|
+
❌ SPEC not found. Searched:
|
|
77
|
+
- .vibe/specs/{feature-name}/ (folder)
|
|
78
|
+
- .vibe/specs/{feature-name}.md (file)
|
|
79
|
+
|
|
80
|
+
Run /vibe.spec "{feature-name}" first.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 2. Extract Mappings
|
|
84
|
+
|
|
85
|
+
For each requirement ID (REQ-xxx-xxx):
|
|
86
|
+
1. Find corresponding SPEC section
|
|
87
|
+
2. Find matching Feature scenario
|
|
88
|
+
3. Find related test file
|
|
89
|
+
|
|
90
|
+
### 3. Calculate Coverage
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Coverage = (Full coverage items / Total requirements) × 100%
|
|
94
|
+
|
|
95
|
+
Full coverage = Has SPEC + Feature + Test
|
|
96
|
+
Partial = Missing one or more
|
|
97
|
+
None = Only in SPEC
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 4. Output RTM
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
|
+
📊 REQUIREMENTS TRACEABILITY MATRIX: {feature-name}
|
|
105
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
106
|
+
|
|
107
|
+
## Summary
|
|
108
|
+
| Metric | Value |
|
|
109
|
+
|-------------------|----------|
|
|
110
|
+
| Total Requirements| 10 |
|
|
111
|
+
| SPEC Coverage | 10/10 |
|
|
112
|
+
| Feature Coverage | 8/10 |
|
|
113
|
+
| Test Coverage | 6/10 |
|
|
114
|
+
| **Overall** | **60%** |
|
|
115
|
+
|
|
116
|
+
## Traceability Matrix
|
|
117
|
+
|
|
118
|
+
| Requirement | SPEC | Feature | Test | Coverage |
|
|
119
|
+
|-------------|------|---------|------|----------|
|
|
120
|
+
| REQ-login-001 | ✅ Phase 1 | ✅ Scenario 1 | ✅ login.test.ts | ✅ Full |
|
|
121
|
+
| REQ-login-002 | ✅ Phase 1 | ✅ Scenario 2 | ❌ | ⚠️ Partial |
|
|
122
|
+
| REQ-login-003 | ✅ Phase 2 | ❌ | ❌ | ❌ None |
|
|
123
|
+
|
|
124
|
+
## Uncovered Requirements
|
|
125
|
+
|
|
126
|
+
The following requirements lack full coverage:
|
|
127
|
+
|
|
128
|
+
- **REQ-login-002**: Password validation
|
|
129
|
+
- Missing: Test file
|
|
130
|
+
|
|
131
|
+
- **REQ-login-003**: Remember me functionality
|
|
132
|
+
- Missing: Feature scenario, Test file
|
|
133
|
+
|
|
134
|
+
## Recommendations
|
|
135
|
+
|
|
136
|
+
⚠️ Coverage is at 60%. Consider:
|
|
137
|
+
- Add Feature scenarios for uncovered requirements
|
|
138
|
+
- Add test cases for uncovered requirements
|
|
139
|
+
|
|
140
|
+
⏱️ Started: {start_time}
|
|
141
|
+
⏱️ Completed: {system clock result}
|
|
142
|
+
|
|
143
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Example
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
User: /vibe.trace "login"
|
|
150
|
+
|
|
151
|
+
Active harness:
|
|
152
|
+
📊 Generating RTM for "login"...
|
|
153
|
+
|
|
154
|
+
Loading files:
|
|
155
|
+
✅ SPEC: .vibe/specs/login.md (5 requirements)
|
|
156
|
+
✅ Feature: .vibe/features/login.feature (4 scenarios)
|
|
157
|
+
✅ Tests: 3 test files found
|
|
158
|
+
|
|
159
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
160
|
+
📊 REQUIREMENTS TRACEABILITY MATRIX: login
|
|
161
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
162
|
+
|
|
163
|
+
## Summary
|
|
164
|
+
| Metric | Value |
|
|
165
|
+
|-------------------|----------|
|
|
166
|
+
| Total Requirements| 5 |
|
|
167
|
+
| SPEC Coverage | 5/5 |
|
|
168
|
+
| Feature Coverage | 4/5 |
|
|
169
|
+
| Test Coverage | 3/5 |
|
|
170
|
+
| **Overall** | **60%** |
|
|
171
|
+
|
|
172
|
+
## Traceability Matrix
|
|
173
|
+
|
|
174
|
+
| Requirement | SPEC | Feature | Test | Coverage |
|
|
175
|
+
|-------------|------|---------|------|----------|
|
|
176
|
+
| REQ-login-001 | ✅ | ✅ | ✅ | ✅ Full |
|
|
177
|
+
| REQ-login-002 | ✅ | ✅ | ✅ | ✅ Full |
|
|
178
|
+
| REQ-login-003 | ✅ | ✅ | ✅ | ✅ Full |
|
|
179
|
+
| REQ-login-004 | ✅ | ✅ | ❌ | ⚠️ Partial |
|
|
180
|
+
| REQ-login-005 | ✅ | ❌ | ❌ | ❌ None |
|
|
181
|
+
|
|
182
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Tool Integration
|
|
186
|
+
|
|
187
|
+
The RTM generation uses core tools:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# Generate RTM (generateTraceabilityMatrix is synchronous — no .then())
|
|
191
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsMarkdown(m)); })"
|
|
192
|
+
|
|
193
|
+
# Generate HTML
|
|
194
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsHtml(m)); })"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
> **Note:** Default SPEC path is `.vibe/specs/<feature>.md` (falls back to `.claude/vibe/specs/` then `.claude/specs/` for legacy projects).
|
|
198
|
+
> `status === 'empty'` means the gate MUST be treated as failed/not-applicable, never as 100% pass.
|
|
199
|
+
|
|
200
|
+
## Post-Trace Gates
|
|
201
|
+
|
|
202
|
+
After `/vibe.trace` completes and the RTM is displayed, two downstream mechanisms consume the result.
|
|
203
|
+
|
|
204
|
+
### Empty-result gate
|
|
205
|
+
|
|
206
|
+
`generateTraceabilityMatrix` returns `status: 'empty'` when no `REQ-<feature>-NNN` IDs are found in the SPEC. This state **must be treated as a gate failure**, not as 100% coverage. When the matrix status is `empty`, report it explicitly and do not proceed as if the feature is verified.
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
RTM status === 'empty'
|
|
210
|
+
→ Coverage gate: FAILED (no requirements to trace)
|
|
211
|
+
→ Action: run /vibe.spec to add REQ-IDs before re-running /vibe.trace
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Run-ledger flow
|
|
215
|
+
|
|
216
|
+
`/vibe.verify` records its outcome through `hooks/scripts/verify-ledger.js`, binding the current run ID and command-result evidence. This writes `verifyPassed` and `verifyAt` into `.vibe/metrics/run-ledger.json`. Downstream gates consume this record:
|
|
217
|
+
|
|
218
|
+
| Gate | Behavior |
|
|
219
|
+
|------|----------|
|
|
220
|
+
| `auto-commit` | Commits only when `verifyPassed === true` AND `verifyAt > runStarted` |
|
|
221
|
+
| Explicit JUDGE | Run `/vibe.verify`; it must record `verifyPassed` and command evidence before completion |
|
|
222
|
+
| Lifecycle hook (optional) | May warn when `runStarted && !verifyPassed`; never substitutes for the explicit JUDGE |
|
|
223
|
+
|
|
224
|
+
**To register a passing trace as verified**, run `/vibe.verify` after `/vibe.trace` reports acceptable coverage. The verify skill records the current run ID and command evidence internally — you do not invoke the ledger CLI manually.
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
/vibe.trace "login" → RTM: 9/9 (100%)
|
|
228
|
+
/vibe.verify "login" → runs checks → records pass + run ID + command results
|
|
229
|
+
→ .vibe/metrics/run-ledger.json updated
|
|
230
|
+
auto-commit / Stop gate → verifyPassed=true, gate clears
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
If `/vibe.verify` is skipped, `auto-commit` will log the skip reason and abort the commit.
|
|
234
|
+
|
|
235
|
+
## Options
|
|
236
|
+
|
|
237
|
+
| Option | Description |
|
|
238
|
+
|--------|-------------|
|
|
239
|
+
| `--html` | Output as HTML file |
|
|
240
|
+
| `--save` | Save to `.vibe/reports/{feature}-rtm.md` |
|
|
241
|
+
| `--json` | Output as JSON |
|
|
242
|
+
|
|
243
|
+
## Coverage Targets
|
|
244
|
+
|
|
245
|
+
| Coverage Level | Status |
|
|
246
|
+
|----------------|--------|
|
|
247
|
+
| 90-100% | ✅ Excellent - Ready for release |
|
|
248
|
+
| 70-89% | ⚠️ Good - Minor gaps |
|
|
249
|
+
| 50-69% | ⚠️ Fair - Significant gaps |
|
|
250
|
+
| 0-49% | ❌ Poor - Major gaps |
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## `.last-feature` 포인터 삭제 (워크플로 완주)
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
/vibe.trace가 정상 완료되면 (RTM 출력 + 사용자 확인 후):
|
|
258
|
+
Delete ".vibe/.last-feature"
|
|
259
|
+
|
|
260
|
+
이유: /vibe.trace는 vibe 워크플로의 마지막 Phase (Phase 7).
|
|
261
|
+
완주 후에는 다음 /vibe.spec 호출 시 "빈 시작" 또는 진행 중 목록에서 다른 feature를 시작해야 한다.
|
|
262
|
+
삭제하지 않으면 완료된 feature가 계속 "이어서?" 로 뜬다.
|
|
263
|
+
|
|
264
|
+
예외:
|
|
265
|
+
- /vibe.trace가 에러로 중단된 경우 → 삭제하지 않음 (재시도 가능)
|
|
266
|
+
- --save 또는 --html 플래그와 무관하게 항상 삭제
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
ARGUMENTS: {feature-name}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Regression test — {{SLUG}}
|
|
3
|
-
*
|
|
4
|
-
* Symptom: {{SYMPTOM}}
|
|
5
|
-
* Root cause tag: {{ROOT_CAUSE_TAG}}
|
|
6
|
-
* Fix commit: {{FIX_COMMIT}}
|
|
7
|
-
* Source record: .vibe/regressions/{{SLUG}}.md
|
|
8
|
-
*
|
|
9
|
-
* DO NOT delete this test when the bug is fixed — it exists to prevent the
|
|
10
|
-
* same bug from being reintroduced. Update only if the reproduction steps
|
|
11
|
-
* in the source record change.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { describe, it, expect{{EXTRA_IMPORTS}} } from 'vitest';
|
|
15
|
-
{{IMPORTS_FROM_SUT}}
|
|
16
|
-
|
|
17
|
-
describe('regression: {{SYMPTOM_SHORT}}', () => {
|
|
18
|
-
it('{{TEST_NAME}}', {{ASYNC}}() => {
|
|
19
|
-
// Given: {{GIVEN}}
|
|
20
|
-
{{GIVEN_CODE}}
|
|
21
|
-
|
|
22
|
-
// When: {{WHEN}}
|
|
23
|
-
{{WHEN_CODE}}
|
|
24
|
-
|
|
25
|
-
// Then: {{THEN}}
|
|
26
|
-
{{THEN_ASSERTIONS}}
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
{{EXTRA_IT_BLOCKS}}
|
|
30
|
-
});
|
|
File without changes
|
|
File without changes
|