@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,12 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.scaffold
|
|
3
|
-
description:
|
|
3
|
+
description: 새 프로젝트 구조를 만들거나 기존 폴더 구조가 AI-assisted development에 적합한지 감사할 때 사용한다.
|
|
4
4
|
argument-hint: --check (audit existing) or project-type
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# /vibe.scaffold
|
|
9
9
|
|
|
10
|
+
## 완료 기준
|
|
11
|
+
|
|
12
|
+
- [ ] 요청된 디렉터리와 필수 설정 파일이 존재한다.
|
|
13
|
+
- [ ] 생성한 package 또는 module의 build 명령이 통과한다.
|
|
14
|
+
- [ ] import·module 해석 검사가 통과한다.
|
|
15
|
+
- [ ] audit mode에서는 발견 항목마다 실제 경로 근거가 있다.
|
|
16
|
+
|
|
10
17
|
Design and generate a project structure where AI works effectively on its own.
|
|
11
18
|
|
|
12
19
|
> "A well-designed project structure trains AI to follow it naturally."
|
|
@@ -103,18 +110,7 @@ lib/
|
|
|
103
110
|
|
|
104
111
|
### 5. Clean Architecture Layers (Optional)
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
src/
|
|
108
|
-
├── domain/ # Business rules (pure logic, no external deps)
|
|
109
|
-
├── application/ # Use cases (domain composition)
|
|
110
|
-
├── infrastructure/ # External integrations (DB, API, files)
|
|
111
|
-
└── presentation/ # UI or API endpoints
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Layer rules:
|
|
115
|
-
- Dependency direction: presentation → application → domain (reverse forbidden)
|
|
116
|
-
- domain must not import external packages
|
|
117
|
-
- infrastructure implements domain interfaces
|
|
113
|
+
When clean architecture is explicitly selected, read `references/clean-architecture.md`. Default stack layouts and `--check` audits do not load it.
|
|
118
114
|
|
|
119
115
|
### 6. Generate Supporting Files
|
|
120
116
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Optional Clean Architecture Layout
|
|
2
|
+
|
|
3
|
+
Load only when clean architecture is explicitly selected.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
src/
|
|
7
|
+
├── domain/ # Business rules (pure logic, no external deps)
|
|
8
|
+
├── application/ # Use cases (domain composition)
|
|
9
|
+
├── infrastructure/ # External integrations (DB, API, files)
|
|
10
|
+
└── presentation/ # UI or API endpoints
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Layer rules:
|
|
14
|
+
|
|
15
|
+
- Dependency direction: presentation → application → domain (reverse forbidden)
|
|
16
|
+
- domain must not import external packages
|
|
17
|
+
- infrastructure implements domain interfaces
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.spec
|
|
3
|
-
description:
|
|
3
|
+
description: 자연어 요구사항이나 첨부 자료로 승인 가능한 SPEC을 작성해야 할 때 — 단일 패스로 작성하고 1회 승인 후 vibe.run으로 넘긴다.
|
|
4
4
|
argument-hint: "(선택) feature name, requirement, file path, or idea"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# /vibe.spec
|
|
9
9
|
|
|
10
|
+
## 완료 기준
|
|
11
|
+
|
|
12
|
+
- [ ] `.vibe/specs/<feature>.md`가 존재한다.
|
|
13
|
+
- [ ] 모든 REQ에 결정론적 Done Criteria와 Evidence Required가 있다.
|
|
14
|
+
- [ ] 제약, 범위 제외, stakes가 명시되어 있다.
|
|
15
|
+
- [ ] confirm mode에서는 사용자 승인 상태가 기록되어 있다.
|
|
16
|
+
|
|
10
17
|
**SPEC 단계의 얇은 진입점.** 요구사항을 받아 `spec` 스킬(단일 패스)을 실행하고, SPEC 승인(유일한 의무 게이트) 후 `/vibe.run` 으로 넘긴다. interview → plan → spec → review 다단계 파이프라인은 폐지되었다 — 명확화 질문은 spec 패스 안에서 인라인으로, 리뷰는 셀프 리뷰 1회로 흡수됐다.
|
|
11
18
|
|
|
12
19
|
## Usage
|
|
@@ -50,10 +57,7 @@ SPEC 승인 (1회 — automationLevel: autonomous 면 생략)
|
|
|
50
57
|
|
|
51
58
|
### 레거시 아티팩트 호환 (구버전 .vibe/interviews/, .vibe/plans/)
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- **존재하면**: spec 패스의 **입력 컨텍스트**로 읽어 활용한다 (이미 답한 질문을 다시 묻지 않게).
|
|
56
|
-
- **절대 요구하거나 재생성하지 않는다**: 이 파일들의 부재는 결함이 아니라 정상 상태다. interview/plan 스킬은 더 이상 존재하지 않는다.
|
|
60
|
+
Legacy `.vibe/interviews/` or `.vibe/plans/` artifacts가 실제로 감지된 경우에만 `references/legacy-artifacts.md`를 읽는다. 신규 프로젝트와 현재 형식만 있는 호출은 읽지 않는다.
|
|
57
61
|
|
|
58
62
|
### `.last-feature` 포인터
|
|
59
63
|
|
|
@@ -109,11 +113,11 @@ ARGUMENTS: $ARGUMENTS
|
|
|
109
113
|
### 2. Project context
|
|
110
114
|
|
|
111
115
|
- `.vibe/config.json` 읽기 — `references.languages[]` 의 스택 가이드, `stacks` 확인.
|
|
112
|
-
- 기존 코드 파악이 필요하면 네이티브
|
|
116
|
+
- 기존 코드 파악이 필요하면 하네스의 네이티브 협업 기능에 독립 탐색 worker로 위임한다. Claude Code는 Task/Agent, Codex는 native collaboration에 매핑하며 기본 모델을 상속한다 (coordinator session에서 프로젝트 전체를 훑지 않는다):
|
|
113
117
|
|
|
114
118
|
```text
|
|
115
|
-
|
|
116
|
-
|
|
119
|
+
Worker: Find existing implementations related to [FEATURE]. Return the tech stack,
|
|
120
|
+
relevant files, and patterns in under 200 tokens.
|
|
117
121
|
```
|
|
118
122
|
|
|
119
123
|
### 3. Clarify — 진짜 모호할 때만
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Legacy SPEC Input Artifacts
|
|
2
|
+
|
|
3
|
+
Load only when `.vibe/interviews/{feature}.md` or `.vibe/plans/{feature}.md` exists.
|
|
4
|
+
|
|
5
|
+
- Read existing legacy artifacts as SPEC input context so answered questions are not repeated.
|
|
6
|
+
- Never require or regenerate them. Their absence is normal; interview/plan skills no longer exist.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.test
|
|
3
|
-
description:
|
|
3
|
+
description: Use when verifying that a vibe install is intact or that CC and Codex are in sync — before a release, after changing skills/hooks/agents, or when a harness behaves inconsistently. Probes every shipped surface in the target install dir and writes a pass/fail report with STCV skill-quality verdicts.
|
|
4
4
|
argument-hint: "[cc|codex] (empty = current harness)"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -37,13 +37,13 @@ Execute the bundled implementation below with target harness: `$ARGUMENTS`
|
|
|
37
37
|
- If `$ARGUMENTS` is empty, detect the current harness (CC vs Codex) and use that.
|
|
38
38
|
- If the target install dir is missing, exit cleanly with guidance (not an error).
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Probe spec: below. Report schema: `references/report-template.md`.
|
|
41
41
|
|
|
42
42
|
## Done Criteria
|
|
43
43
|
|
|
44
44
|
- [ ] Runs without any external LLM call — file reads + vitest only
|
|
45
45
|
- [ ] A single probe failure never halts the overall run
|
|
46
|
-
- [ ] JSON report matches
|
|
46
|
+
- [ ] JSON report matches `references/report-template.md` exactly
|
|
47
47
|
- [ ] P1 failures auto-register via `/vibe.regress`
|
|
48
48
|
|
|
49
49
|
---
|
|
@@ -87,81 +87,100 @@ All probes are **structural or test-based** — no interactive command is ever a
|
|
|
87
87
|
| entry skills | `<install>/skills/vibe*/SKILL.md` | file readable · frontmatter parses · `name`, `description`, `user-invocable: true` present |
|
|
88
88
|
| skills | `<install>/skills/*/SKILL.md` | frontmatter parses · required fields (`name`, `description`) · body non-empty |
|
|
89
89
|
| hooks | repo `hooks/scripts/*.js` | for each script with a matching `__tests__/<name>.test.js`, run `npx vitest run <test> --reporter=json` and parse pass/fail counts |
|
|
90
|
-
| agents | `<install>/agents
|
|
90
|
+
| agents | `<install>/agents/**/*.md` (**recursive**) | file readable · frontmatter parses · required fields (`name`, `description`) |
|
|
91
|
+
| skill quality | `<install>/skills/*/SKILL.md` | STCV 4-axis quality check (below) |
|
|
91
92
|
|
|
92
93
|
A probe's failure is captured in its `error` field; the overall run never halts because of one failure.
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
**Agent discovery must recurse.** Agents live in subdirectories by capability group —
|
|
96
|
+
`agents/ui/*.md` and `agents/event/*.md` are installed conditionally per stack/capability. A
|
|
97
|
+
non-recursive `agents/*.md` glob silently skips 4 of the 11 shipped agents, so the report claims
|
|
98
|
+
parity it never checked. Record each agent by its path-relative name (`ui/design-reviewer`, not
|
|
99
|
+
`design-reviewer`) so group membership stays visible in the report.
|
|
100
|
+
|
|
101
|
+
### Skill quality (STCV)
|
|
95
102
|
|
|
96
|
-
|
|
103
|
+
Structural checks only — line counts, directory existence, and section/word presence. **No LLM call**, consistent with the rest of the probes.
|
|
97
104
|
|
|
98
|
-
|
|
105
|
+
| Axis | Check | Verdict |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| **S**cope | SKILL.md line count | ≤250 `pass` · 251–400 `warn` · >400 `fail` |
|
|
108
|
+
| **C**ontext | body fenced code blocks ≥3 **and** no sibling `references/` dir | `warn` |
|
|
109
|
+
| **T**rigger | `description` contains no activation-condition wording | `warn` |
|
|
110
|
+
| **V**erify | no `Done Criteria` / `완료 기준` section in body | `warn` |
|
|
111
|
+
|
|
112
|
+
**WHY each axis** — a skill is loaded whole into context on invocation, so an oversized SKILL.md
|
|
113
|
+
spends the caller's context on material most invocations never need (Scope), and material that
|
|
114
|
+
*is* only needed sometimes belongs behind a reference pointer (Context). `description` is the
|
|
115
|
+
only signal `/vibe` Catch-all routing sees, so a purely descriptive one cannot be matched against
|
|
116
|
+
a request (Trigger). And a skill with no stated completion test cannot be judged by the
|
|
117
|
+
deterministic JUDGE step in `vibe/rules/loop-contract.md` (Verify).
|
|
118
|
+
|
|
119
|
+
Axis detail:
|
|
120
|
+
|
|
121
|
+
- **Scope** — count lines of `SKILL.md` verbatim (frontmatter included). The `fail` threshold is
|
|
122
|
+
deliberately above the `warn` threshold so that a skill drifting past 250 gets flagged long
|
|
123
|
+
before it breaks the build.
|
|
124
|
+
- **Context** — count ` ``` ` fence *pairs* in the body. Three or more blocks with no `references/`
|
|
125
|
+
sibling directory means templates/examples/schemas are inlined where they should be extracted.
|
|
126
|
+
A skill with a `references/` dir passes regardless of fence count.
|
|
127
|
+
- **A `references/` dir is not by itself a pass.** The context axis asks whether *conditional bulk
|
|
128
|
+
still sits inline*, not whether the directory exists — a 6-line reference file next to a 150-line
|
|
129
|
+
body clears the directory check while saving nothing. Judge the body: does it still inline a
|
|
130
|
+
block that most invocations skip? If yes, the axis warns regardless of the sibling directory.
|
|
131
|
+
- **Safety and correctness rules never move behind a conditional load.** "Read
|
|
132
|
+
`references/protected-branches.md` if the branch is protected" is circular — deciding whether the
|
|
133
|
+
rule applies requires already knowing the rule. Anything the skill must obey *before* it can
|
|
134
|
+
classify the situation (destructive-operation guards, push/force-push prohibitions, data-loss
|
|
135
|
+
boundaries) stays inline. Only material that is *looked up after* the situation is known is
|
|
136
|
+
eligible.
|
|
137
|
+
- **Anti-gaming (scope + context)** — a reference only saves context if it is **conditionally**
|
|
138
|
+
loaded. If the body instructs reading a reference unconditionally ("read `references/x.md`" with
|
|
139
|
+
no condition attached), nothing was saved: the invocation now costs body + reference *plus* an
|
|
140
|
+
extra round trip. Emit `scope: warn` with `"unconditional reference load"` when a skill's body is
|
|
141
|
+
small but a reference it always loads is large — regardless of the line count passing. **A stub
|
|
142
|
+
that forwards to a wholesale copy of its own former body is a regression, not a split.** The test
|
|
143
|
+
for a real split: name a plausible invocation that never needs the reference. If none exists, the
|
|
144
|
+
material belongs inline.
|
|
145
|
+
- **Trigger** — the `description` must contain at least one activation-condition marker:
|
|
146
|
+
`when` / `if` / `use for` / `use when` / `…할 때` / `…하면` / `…인 경우` / `…이 있고`.
|
|
147
|
+
A bare capability restatement (`"Execute implementation from SPEC"`) has none and warns.
|
|
148
|
+
- **Verify** — case-insensitive search for a heading containing `Done Criteria` or `완료 기준`.
|
|
149
|
+
|
|
150
|
+
**Alias exemption**: a merged skill leaves behind a thin alias — a body of ≤20 lines whose only
|
|
151
|
+
content is a pointer at the canonical skill. Aliases are exempt from the **context** and **verify**
|
|
152
|
+
axes: they hold no templates to extract and no work to complete, so demanding `references/` or a
|
|
153
|
+
`Done Criteria` section would only pad them back into the duplication the merge removed. **Scope and
|
|
154
|
+
trigger still apply** — an alias must stay small and must still say when it fires. Mark exempt axes
|
|
155
|
+
`"n/a"` in the `quality` object rather than `"pass"`, so the report never claims a check it skipped.
|
|
156
|
+
|
|
157
|
+
**Severity policy**: only `scope` can produce `fail`. The other three axes emit `warn` in this
|
|
158
|
+
release — `verify` in particular currently applies to 17 of the 22 entry skills, and promoting it
|
|
159
|
+
to `fail` before that backlog clears would ship a self-test that fails on vibe's own package and
|
|
160
|
+
flood `/vibe.regress` with P1s. Promote `verify` to `fail` for entry skills in a later release
|
|
161
|
+
once those skills carry Done Criteria.
|
|
162
|
+
|
|
163
|
+
Quality findings attach to the existing skill entry rather than creating a second entry per skill:
|
|
99
164
|
|
|
100
165
|
```json
|
|
101
|
-
{
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"vibe_version": "2.9.24",
|
|
105
|
-
"install_dir": "/Users/grove/.claude",
|
|
106
|
-
"summary": {
|
|
107
|
-
"total": 42,
|
|
108
|
-
"passed": 40,
|
|
109
|
-
"failed": 2
|
|
110
|
-
},
|
|
111
|
-
"probes": {
|
|
112
|
-
"entrySkills": [
|
|
113
|
-
{ "name": "vibe.spec", "status": "pass" },
|
|
114
|
-
{ "name": "vibe.test", "status": "pass" }
|
|
115
|
-
],
|
|
116
|
-
"skills": [
|
|
117
|
-
{ "name": "test", "status": "pass" },
|
|
118
|
-
{ "name": "spec", "status": "fail", "error": "invocation includes `auto` but triggers array is empty" }
|
|
119
|
-
],
|
|
120
|
-
"hooks": [
|
|
121
|
-
{ "name": "pre-tool-guard", "status": "pass", "tests": "38/38" },
|
|
122
|
-
{ "name": "scope-guard", "status": "pass", "tests": "12/12" }
|
|
123
|
-
],
|
|
124
|
-
"agents": [
|
|
125
|
-
{ "name": "implementer", "status": "pass" }
|
|
126
|
-
]
|
|
127
|
-
},
|
|
128
|
-
"failed": [
|
|
129
|
-
{
|
|
130
|
-
"category": "skills",
|
|
131
|
-
"name": "spec",
|
|
132
|
-
"error": "frontmatter: triggers array is empty"
|
|
133
|
-
}
|
|
134
|
-
]
|
|
135
|
-
}
|
|
166
|
+
{ "name": "vibe.run", "status": "fail",
|
|
167
|
+
"quality": { "scope": "fail", "context": "warn", "trigger": "warn", "verify": "warn" },
|
|
168
|
+
"error": "scope: 845 lines (>400)" }
|
|
136
169
|
```
|
|
137
170
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- `tests` (hooks only): short `passed/total` string from the vitest JSON reporter
|
|
141
|
-
- `failed[]`: flat list of every failure for quick scanning — mirrors entries found across `probes.*`
|
|
142
|
-
|
|
143
|
-
### Markdown
|
|
171
|
+
A skill's `status` is the worst verdict across its structural check and all four axes
|
|
172
|
+
(`fail` > `warn` > `pass`).
|
|
144
173
|
|
|
145
|
-
|
|
146
|
-
# vibe self-test · cc · 2026-04-16 18:30
|
|
147
|
-
|
|
148
|
-
**Version**: 2.9.24 **Install**: /Users/grove/.claude
|
|
149
|
-
|
|
150
|
-
| Category | Pass | Fail |
|
|
151
|
-
|---|---:|---:|
|
|
152
|
-
| entry skills | 15 | 0 |
|
|
153
|
-
| skills | 17 | 1 |
|
|
154
|
-
| hooks | 6 | 0 |
|
|
155
|
-
| agents | 3 | 1 |
|
|
156
|
-
| **total**| **41** | **2** |
|
|
174
|
+
## Report template
|
|
157
175
|
|
|
158
|
-
|
|
176
|
+
JSON 스키마와 Markdown 출력 포맷의 전문(필드·타입·명명·Warnings/STCV 섹션):
|
|
177
|
+
`references/report-template.md`
|
|
159
178
|
|
|
160
|
-
|
|
161
|
-
- **agents / implementer** — agent file not found
|
|
162
|
-
```
|
|
179
|
+
핵심 계약만 요약:
|
|
163
180
|
|
|
164
|
-
|
|
181
|
+
- `status`: `"pass"` | `"warn"` | `"fail"` — 구조 검사와 STCV 4축 중 **최악** 판정
|
|
182
|
+
- `quality` (skills 만): `{ scope, context, trigger, verify }`, 각 `pass`/`warn`/`fail`/`n/a`
|
|
183
|
+
- `failed[]` 는 `fail` 만, `warned[]` 는 `warn` 만. **`warned[]` 는 절대 `vibe.regress` 로 넘기지 않는다**
|
|
165
184
|
|
|
166
185
|
## Steps
|
|
167
186
|
|
|
@@ -169,11 +188,12 @@ If `failed` is empty, replace the Failures section with `_All probes passed._`.
|
|
|
169
188
|
2. **Resolve install dir**: `cc` → `~/.claude`, `codex` → `~/.codex`. If missing → print guidance + exit.
|
|
170
189
|
3. **Read `vibe_version`** from `package.json` in the current repo.
|
|
171
190
|
4. **Walk each category**, run its check, append `{ name, status, error? }` to `probes.<category>`.
|
|
172
|
-
5. **
|
|
173
|
-
6. **
|
|
174
|
-
7. **
|
|
175
|
-
8. **
|
|
176
|
-
9. **
|
|
191
|
+
5. **Run the STCV check** on every `skills` entry, attach `quality`, and fold the worst axis verdict into that entry's `status`.
|
|
192
|
+
6. **Compute** `summary` counts and the flat `failed[]` / `warned[]` lists.
|
|
193
|
+
7. **Ensure** `~/.vibe/test-reports/` exists (`mkdir -p`, dir mode `0o700` — consistent with `~/.vibe/config.json`).
|
|
194
|
+
8. **Write** `<ts>-<harness>.json` and `<ts>-<harness>.md`.
|
|
195
|
+
9. **Print** the Markdown summary to the console.
|
|
196
|
+
10. **If `summary.failed > 0`**, load skill `vibe.regress` with `subcommand: register --from-test` and pass the failed entries. P1 = any probe with `status: fail`. **`warned[]` is never passed to regress** — warnings are advisory and must not create P1 backlog.
|
|
177
197
|
|
|
178
198
|
## Done Criteria
|
|
179
199
|
|
|
@@ -184,4 +204,7 @@ If `failed` is empty, replace the Failures section with `_All probes passed._`.
|
|
|
184
204
|
- [ ] Markdown summary printed to console after the run
|
|
185
205
|
- [ ] Reports land in `~/.vibe/test-reports/`, never in project-local `.vibe/`
|
|
186
206
|
- [ ] `failed.length > 0` → auto-invokes `vibe.regress register --from-test`
|
|
207
|
+
- [ ] `warned.length > 0` alone never invokes `vibe.regress`
|
|
208
|
+
- [ ] Every `skills` entry carries a `quality` object with all four STCV axes
|
|
209
|
+
- [ ] Agent discovery recurses — `agents/ui/*` and `agents/event/*` appear in the report under their group-qualified names
|
|
187
210
|
- [ ] Entry skills are verified as user-invocable skill surfaces, not deprecated command files
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# vibe.test — Report Template (JSON + Markdown)
|
|
2
|
+
|
|
3
|
+
> vibe.test SKILL.md 의 Report 섹션에서 참조. `~/.vibe/test-reports/<ts>-<harness>.{json,md}` 의 정확한 스키마.
|
|
4
|
+
|
|
5
|
+
## Report template
|
|
6
|
+
|
|
7
|
+
Written to `~/.vibe/test-reports/<YYYYMMDD-HHmm>-<harness>.{json,md}`. Exact schema:
|
|
8
|
+
|
|
9
|
+
### JSON
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"harness": "cc",
|
|
14
|
+
"timestamp": "2026-04-16T18:30:00+09:00",
|
|
15
|
+
"vibe_version": "2.9.24",
|
|
16
|
+
"install_dir": "/Users/grove/.claude",
|
|
17
|
+
"summary": {
|
|
18
|
+
"total": 42,
|
|
19
|
+
"passed": 38,
|
|
20
|
+
"warned": 2,
|
|
21
|
+
"failed": 2
|
|
22
|
+
},
|
|
23
|
+
"probes": {
|
|
24
|
+
"entrySkills": [
|
|
25
|
+
{ "name": "vibe.spec", "status": "pass" },
|
|
26
|
+
{ "name": "vibe.test", "status": "pass" }
|
|
27
|
+
],
|
|
28
|
+
"skills": [
|
|
29
|
+
{ "name": "vibe.verify", "status": "pass",
|
|
30
|
+
"quality": { "scope": "pass", "context": "pass", "trigger": "pass", "verify": "pass" } },
|
|
31
|
+
{ "name": "vibe.run", "status": "fail",
|
|
32
|
+
"quality": { "scope": "fail", "context": "warn", "trigger": "warn", "verify": "warn" },
|
|
33
|
+
"error": "scope: 845 lines (>400)" },
|
|
34
|
+
{ "name": "spec", "status": "fail", "error": "invocation includes `auto` but triggers array is empty" }
|
|
35
|
+
],
|
|
36
|
+
"hooks": [
|
|
37
|
+
{ "name": "pre-tool-guard", "status": "pass", "tests": "38/38" },
|
|
38
|
+
{ "name": "scope-guard", "status": "pass", "tests": "12/12" }
|
|
39
|
+
],
|
|
40
|
+
"agents": [
|
|
41
|
+
{ "name": "implementer", "status": "pass" },
|
|
42
|
+
{ "name": "ui/design-reviewer", "status": "pass" },
|
|
43
|
+
{ "name": "event/event-planner", "status": "pass" }
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"failed": [
|
|
47
|
+
{
|
|
48
|
+
"category": "skills",
|
|
49
|
+
"name": "spec",
|
|
50
|
+
"error": "frontmatter: triggers array is empty"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"warned": [
|
|
54
|
+
{
|
|
55
|
+
"category": "skills",
|
|
56
|
+
"name": "vibe.docs",
|
|
57
|
+
"error": "verify: no Done Criteria section"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- `status`: `"pass"` | `"warn"` | `"fail"` — worst verdict across the entry's structural check and its four quality axes
|
|
64
|
+
- `error`: required when `status` is `"warn"` or `"fail"`, omitted otherwise. Prefix with the axis (`scope:`, `context:`, `trigger:`, `verify:`) when the verdict comes from a quality axis
|
|
65
|
+
- `quality` (skills only): per-axis verdicts — `{ scope, context, trigger, verify }`, each `"pass"` | `"warn"` | `"fail"` | `"n/a"` (alias-exempt axis)
|
|
66
|
+
- `tests` (hooks only): short `passed/total` string from the vitest JSON reporter
|
|
67
|
+
- `failed[]`: flat list of every `fail` for quick scanning — mirrors entries found across `probes.*`
|
|
68
|
+
- `warned[]`: same shape as `failed[]`, for `warn` entries. **Advisory only — never feeds `/vibe.regress`**
|
|
69
|
+
|
|
70
|
+
### Markdown
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
# vibe self-test · cc · 2026-04-16 18:30
|
|
74
|
+
|
|
75
|
+
**Version**: 2.9.24 **Install**: /Users/grove/.claude
|
|
76
|
+
|
|
77
|
+
| Category | Pass | Warn | Fail |
|
|
78
|
+
|---|---:|---:|---:|
|
|
79
|
+
| entry skills | 15 | 0 | 0 |
|
|
80
|
+
| skills | 15 | 2 | 1 |
|
|
81
|
+
| hooks | 6 | 0 | 0 |
|
|
82
|
+
| agents | 3 | 0 | 1 |
|
|
83
|
+
| **total**| **39** | **2** | **2** |
|
|
84
|
+
|
|
85
|
+
## Skill quality (STCV)
|
|
86
|
+
|
|
87
|
+
| Skill | Scope | Context | Trigger | Verify |
|
|
88
|
+
|---|---|---|---|---|
|
|
89
|
+
| vibe.run | ❌ 845 | ⚠️ | ⚠️ | ⚠️ |
|
|
90
|
+
| vibe.docs | ⚠️ 292 | ✅ | ✅ | ⚠️ |
|
|
91
|
+
|
|
92
|
+
Only skills with at least one non-pass axis are listed. If every skill passes all four axes,
|
|
93
|
+
replace this section with `_All skills pass STCV._`
|
|
94
|
+
|
|
95
|
+
## Failures
|
|
96
|
+
|
|
97
|
+
- **skills / spec** — invocation includes `auto` but triggers array is empty
|
|
98
|
+
- **agents / implementer** — agent file not found
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If `failed` is empty, replace the Failures section with `_All probes passed._`.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: vibe.tool-fallback
|
|
3
3
|
invocation: [auto]
|
|
4
4
|
tier: optional
|
|
5
|
-
description: "
|
|
5
|
+
description: "Use when a tool or provider returns API errors, search failures, timeouts, 429, 5xx, or overload responses and a circuit-breaker fallback is required."
|
|
6
6
|
triggers: [search failure, 429, 5xx, overloaded, fallback, circuit breaker, rate limit]
|
|
7
7
|
priority: 60
|
|
8
8
|
---
|
|
@@ -33,32 +33,11 @@ priority: 60
|
|
|
33
33
|
|
|
34
34
|
## Decision Trees
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Select exactly one conditional reference for the failing capability; unrelated failures do not load it:
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
→ OPEN? → Skip to alternative immediately
|
|
42
|
-
→ CLOSED? → Try context7 for library docs
|
|
43
|
-
→ Still fails? → Claude's built-in knowledge (last resort)
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### External LLM Fails
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
VibeOrchestrator.smartRoute({ type, prompt })
|
|
50
|
-
→ Primary LLM fails (429, 401, 5xx)
|
|
51
|
-
→ Skip to secondary LLM (no retry on rate limit)
|
|
52
|
-
→ Secondary fails → Claude handles directly
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### File/Code Not Found
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
Glob fails → Expand pattern: *.ts → **/*.ts → **/*
|
|
59
|
-
→ Use Grep for content-based search
|
|
60
|
-
→ Check git log for file history
|
|
61
|
-
```
|
|
38
|
+
- Web search failure → `references/web-search.md`
|
|
39
|
+
- External LLM failure → `references/external-llm.md`
|
|
40
|
+
- File/code lookup failure → `references/file-lookup.md`
|
|
62
41
|
|
|
63
42
|
## Error Response Actions
|
|
64
43
|
|
|
@@ -83,13 +62,12 @@ Request → Check circuit
|
|
|
83
62
|
└─ Use alternative
|
|
84
63
|
```
|
|
85
64
|
|
|
86
|
-
##
|
|
65
|
+
## Model Selection
|
|
87
66
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
| code-gen, general | Claude only |
|
|
67
|
+
Inherit the active session model by default. Use the configured provider/model
|
|
68
|
+
SSOT for external fallbacks instead of a hardcoded provider order. The only
|
|
69
|
+
permitted override is an `opus` tier for an explicitly requested deep
|
|
70
|
+
architecture review; if unavailable, keep the inherited model.
|
|
93
71
|
|
|
94
72
|
## Principles
|
|
95
73
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# External LLM Fallback
|
|
2
|
+
|
|
3
|
+
Load only for external LLM failures.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
VibeOrchestrator.smartRoute({ type, prompt })
|
|
7
|
+
→ Primary LLM fails (429, 401, 5xx)
|
|
8
|
+
→ Skip to secondary LLM (no retry on rate limit)
|
|
9
|
+
→ Secondary fails → active harness handles directly
|
|
10
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Web Search Fallback
|
|
2
|
+
|
|
3
|
+
Load only for web search failures.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Web Search fails (429, 529, timeout)
|
|
7
|
+
→ Check circuit state
|
|
8
|
+
→ OPEN? → Skip to alternative immediately
|
|
9
|
+
→ CLOSED? → Try Context7 for library docs
|
|
10
|
+
→ Still fails? → active harness knowledge (last resort, label uncertainty)
|
|
11
|
+
```
|