@su-record/vibe 3.2.52 → 3.2.54
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-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/vibe.review/references/worked-examples.md +2 -2
- package/skills/vibe.run/references/coverage-loop.md +1 -1
- package/skills/vibe.run/references/process-steps.md +2 -2
- package/skills/vibe.spec/SKILL.md +20 -1
- package/skills/vibe.verify/references/trace-mode.md +2 -2
- package/vibe/templates/spec-template.md +20 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
3
|
"displayName": "Vibe",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.54",
|
|
5
5
|
"description": "Verification harness for AI coding agents — \"done\" is decided by deterministic gates (test exit codes, run-ledger, regression memory), not the model self-report.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "su-record",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.54",
|
|
4
4
|
"description": "Verification harness for AI coding agents — \"done\" is decided by deterministic gates (test exit codes, run-ledger, regression memory), not the model self-report.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "su-record",
|
package/package.json
CHANGED
|
@@ -78,13 +78,13 @@ Examples:
|
|
|
78
78
|
**1. Validate code quality before review:**
|
|
79
79
|
|
|
80
80
|
```bash
|
|
81
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
|
|
81
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/convention/index.js').then(t => t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
**2. Analyze complexity of changed files:**
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/api/users.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
|
|
87
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/convention/index.js').then(t => t.analyzeComplexity({targetPath: 'src/api/users.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
**3. Save critical finding for reference:**
|
|
@@ -40,7 +40,7 @@ max_iterations(기본 10) 도달 → 잔여 인박스 이월
|
|
|
40
40
|
## RTM 생성
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const r = t.generateTraceabilityMatrix('{feature-name}', {projectPath: process.cwd()}); console.log(JSON.stringify(r, null, 2)); })"
|
|
43
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/spec/index.js').then(t => { const r = t.generateTraceabilityMatrix('{feature-name}', {projectPath: process.cwd()}); console.log(JSON.stringify(r, null, 2)); })"
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
`generateTraceabilityMatrix` 는 동기 함수다 — 반환값에 `.then()` 을 쓰지 않는다.
|
|
@@ -24,7 +24,7 @@ Step 3: If neither → Error: "Run /vibe.spec first"
|
|
|
24
24
|
For a monolithic SPEC, compile it after resolving the canonical path. For a split SPEC, do not compile `_index.md`; defer this step until each active phase file is loaded in Phase Isolation Step B. Compile with `writeExecutionPacket`, then immediately verify the saved artifact with `validateExecutionPacket`.
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
node -e "import('file://{{VIBE_PATH}}/dist/tools/index.js').then(t => {
|
|
27
|
+
node -e "import('file://{{VIBE_PATH}}/dist/tools/spec/index.js').then(t => {
|
|
28
28
|
const projectPath=process.cwd(), specPath='.vibe/specs/{feature-name}.md';
|
|
29
29
|
const profile='{codex-or-claude-code}';
|
|
30
30
|
const written=t.writeExecutionPacket({projectPath,specPath,profile});
|
|
@@ -168,7 +168,7 @@ After ALL phases complete:
|
|
|
168
168
|
|
|
169
169
|
```bash
|
|
170
170
|
# generateTraceabilityMatrix is synchronous — no .then()
|
|
171
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const r = t.generateTraceabilityMatrix('{feature-name}', {projectPath: process.cwd()}); console.log(JSON.stringify(r, null, 2)); })"
|
|
171
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/spec/index.js').then(t => { const r = t.generateTraceabilityMatrix('{feature-name}', {projectPath: process.cwd()}); console.log(JSON.stringify(r, null, 2)); })"
|
|
172
172
|
```
|
|
173
173
|
|
|
174
174
|
> Default SPEC path is `.vibe/specs/<feature>.md`. `status === 'empty'` must be treated as failed/not-applicable — never as 100% pass.
|
|
@@ -67,12 +67,31 @@ Legacy `.vibe/interviews/` or `.vibe/plans/` artifacts가 실제로 감지된
|
|
|
67
67
|
- 개인 작업 포인터이므로 git 커밋 금지 (`.gitignore` 에 `.vibe/.last-feature`).
|
|
68
68
|
- 워크플로 완주(verify 통과) 시 삭제.
|
|
69
69
|
|
|
70
|
+
## 구조 다이어그램 (조건부, 승인 전)
|
|
71
|
+
|
|
72
|
+
**경계가 바뀌는 SPEC 에만** 붙인다. 셋 중 하나라도 해당할 때:
|
|
73
|
+
|
|
74
|
+
1. 새 모듈·서비스 **경계** 도입
|
|
75
|
+
2. **데이터 흐름** 변경 (읽고 쓰는 주체나 순서)
|
|
76
|
+
3. **3개 이상 모듈** 횡단
|
|
77
|
+
|
|
78
|
+
해당하면 `vibe.docs` 의 `references/diagram-spec.md` 를 읽어 그 규범대로 Mermaid 를
|
|
79
|
+
그리고 SPEC 의 `### Structure` 절에 넣는다. **규범을 여기에 복사하지 않는다** — 코드
|
|
80
|
+
근거·노드 상한·간선 라벨 규칙은 그쪽이 SSOT 다.
|
|
81
|
+
|
|
82
|
+
왜 승인 **전**인가: 구현이 끝난 뒤 diff 에서 구조적 오해를 발견하면 수정 범위가
|
|
83
|
+
커진다. 산문 SPEC 은 "박스가 빠졌다 / 화살표가 거꾸로다" 를 숨기지만 그림은 드러낸다.
|
|
84
|
+
|
|
85
|
+
왜 **조건부**인가: 해당 없는 기능에까지 강제하면 비용만 오르고 통과 의식이 된다.
|
|
86
|
+
그리고 시각적 완성도는 정확성을 착각하게 만든다 — 그릴 이유가 없으면 그리지 않는 편이
|
|
87
|
+
낫다. 트리거에 걸리지 않으면 절을 지우고 넘어간다.
|
|
88
|
+
|
|
70
89
|
## SPEC Code Guard (승인 전 의무)
|
|
71
90
|
|
|
72
91
|
SPEC 을 쓴 직후, **승인을 요청하기 전에** 실행한다. 셀프 리뷰가 아니라 코드 판정이다:
|
|
73
92
|
|
|
74
93
|
```bash
|
|
75
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const fs=require('fs'); const p='.vibe/specs/{feature-name}.md'; const r=t.validateSpecDocument(fs.readFileSync(p,'utf-8'),{specPath:p}); console.log(t.formatSpecValidation(r)); process.exitCode = r.valid ? 0 : 1; })"
|
|
94
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/spec/index.js').then(t => { const fs=require('fs'); const p='.vibe/specs/{feature-name}.md'; const r=t.validateSpecDocument(fs.readFileSync(p,'utf-8'),{specPath:p}); console.log(t.formatSpecValidation(r)); process.exitCode = r.valid ? 0 : 1; })"
|
|
76
95
|
```
|
|
77
96
|
|
|
78
97
|
| 검사 | 심각도 | 왜 하류가 깨지는가 |
|
|
@@ -188,10 +188,10 @@ The RTM generation uses core tools:
|
|
|
188
188
|
|
|
189
189
|
```bash
|
|
190
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)); })"
|
|
191
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/spec/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsMarkdown(m)); })"
|
|
192
192
|
|
|
193
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)); })"
|
|
194
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/spec/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsHtml(m)); })"
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
> **Note:** Default SPEC path is `.vibe/specs/<feature>.md` (falls back to `.claude/vibe/specs/` then `.claude/specs/` for legacy projects).
|
|
@@ -23,6 +23,26 @@
|
|
|
23
23
|
|
|
24
24
|
- {Invariant or implementation boundary that every execution packet must preserve}
|
|
25
25
|
|
|
26
|
+
### Structure (경계가 바뀔 때만)
|
|
27
|
+
|
|
28
|
+
> 아래 셋 중 **하나라도** 해당하면 채운다. 아니면 이 절을 통째로 지운다 —
|
|
29
|
+
> 해당 없는데 그려두면 통과 의식이 되고, 시각적 완성도가 정확성을 착각하게 만든다.
|
|
30
|
+
>
|
|
31
|
+
> 1. 새 모듈·서비스 **경계**를 만든다
|
|
32
|
+
> 2. **데이터 흐름**이 바뀐다 (읽고 쓰는 주체나 순서)
|
|
33
|
+
> 3. **3개 이상 모듈**을 횡단한다
|
|
34
|
+
>
|
|
35
|
+
> 규범은 `vibe.docs` 의 `references/diagram-spec.md` 를 따른다 — 코드에서 확인한
|
|
36
|
+
> 것만 그리고, 확인 못 한 요소는 뺀다. 여기에 다시 적지 않는다(SSOT).
|
|
37
|
+
>
|
|
38
|
+
> 목적은 설명이 아니라 **리뷰 표면**이다. 산문으로는 "박스가 빠졌다 / 화살표가
|
|
39
|
+
> 거꾸로다" 가 안 보이지만 그림에서는 승인 전에 보인다.
|
|
40
|
+
|
|
41
|
+
```mermaid
|
|
42
|
+
graph TB
|
|
43
|
+
{노드와 간선 — 각 노드 옆에 근거 파일 경로를 주석으로}
|
|
44
|
+
```
|
|
45
|
+
|
|
26
46
|
### Rejected Alternatives (Traps)
|
|
27
47
|
|
|
28
48
|
> Approaches considered and rejected, each with a mechanistic reason — so the loop never revisits a dead end. Omit only when no real design choice existed (or on demo/prototype stakes).
|