@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.
Files changed (123) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  4. package/dist/cli/postinstall/constants.js +10 -9
  5. package/dist/cli/postinstall/constants.js.map +1 -1
  6. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  7. package/dist/cli/setup/ProjectSetup.js +5 -0
  8. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  9. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
  10. package/package.json +2 -2
  11. package/skills/vibe/SKILL.md +27 -86
  12. package/skills/vibe/references/routing-examples.md +85 -0
  13. package/skills/vibe.agents-md/SKILL.md +12 -10
  14. package/skills/vibe.analyze/SKILL.md +22 -211
  15. package/skills/vibe.analyze/references/mode1-feature.md +81 -0
  16. package/skills/vibe.analyze/references/mode2-document.md +50 -0
  17. package/skills/vibe.analyze/references/mode3-website.md +47 -0
  18. package/skills/vibe.analyze/references/mode4-quality.md +35 -0
  19. package/skills/vibe.brand-assets/SKILL.md +2 -2
  20. package/skills/vibe.brand-assets/references/mobile-assets.md +6 -0
  21. package/skills/vibe.capability-loop/SKILL.md +14 -80
  22. package/skills/vibe.capability-loop/references/escalate.md +86 -0
  23. package/skills/vibe.chub-usage/SKILL.md +3 -132
  24. package/skills/vibe.clone/SKILL.md +43 -358
  25. package/skills/vibe.clone/references/phase-commands.md +118 -0
  26. package/skills/vibe.clone/references/setup-and-layout.md +34 -0
  27. package/skills/vibe.clone/references/verification-loops.md +64 -0
  28. package/skills/vibe.commit-push-pr/SKILL.md +10 -4
  29. package/skills/vibe.context7-usage/SKILL.md +3 -99
  30. package/skills/vibe.continue/SKILL.md +17 -7
  31. package/skills/{vibe.handoff → vibe.continue}/agents/context-summarizer.md +1 -1
  32. package/skills/{vibe.handoff → vibe.continue}/agents/document-writer.md +1 -1
  33. package/skills/{vibe.handoff → vibe.continue}/agents/state-collector.md +1 -1
  34. package/skills/{vibe.handoff → vibe.continue}/agents/verifier.md +1 -1
  35. package/skills/{vibe.handoff/rubrics/completeness.md → vibe.continue/references/handoff-completeness.md} +1 -1
  36. package/skills/{vibe.handoff/templates → vibe.continue/references}/handoff.md +37 -2
  37. package/skills/vibe.contract/SKILL.md +4 -27
  38. package/skills/vibe.create-prd/SKILL.md +8 -1
  39. package/skills/vibe.design/SKILL.md +18 -5
  40. package/skills/vibe.design/references/design-context.md +184 -0
  41. package/skills/vibe.design-refine/SKILL.md +7 -0
  42. package/skills/vibe.design-review/SKILL.md +7 -0
  43. package/skills/vibe.design-teach/SKILL.md +2 -175
  44. package/skills/vibe.devlog/SKILL.md +14 -11
  45. package/skills/vibe.devlog/references/auto-push.md +10 -0
  46. package/skills/vibe.docs/SKILL.md +27 -198
  47. package/skills/vibe.docs/references/agent.md +55 -0
  48. package/skills/vibe.docs/references/arch.md +28 -0
  49. package/skills/vibe.docs/references/codemaps.md +17 -0
  50. package/skills/vibe.docs/references/diagram.md +24 -0
  51. package/skills/vibe.docs/references/guide.md +23 -0
  52. package/skills/vibe.docs/references/readme.md +45 -0
  53. package/skills/vibe.docs/references/release.md +31 -0
  54. package/skills/vibe.documentation-provider/SKILL.md +22 -0
  55. package/skills/vibe.documentation-provider/references/chub.md +141 -0
  56. package/skills/vibe.documentation-provider/references/context7.md +107 -0
  57. package/skills/vibe.educational-content/SKILL.md +7 -0
  58. package/skills/vibe.event/SKILL.md +47 -146
  59. package/skills/vibe.event/references/comms.md +173 -0
  60. package/skills/vibe.event/references/operations.md +208 -0
  61. package/skills/vibe.event/references/orchestration-legacy.md +97 -0
  62. package/skills/vibe.event/references/planning.md +145 -0
  63. package/skills/vibe.event-comms/SKILL.md +3 -165
  64. package/skills/vibe.event-ops/SKILL.md +3 -200
  65. package/skills/vibe.event-planning/SKILL.md +3 -137
  66. package/skills/vibe.figma/SKILL.md +26 -692
  67. package/skills/vibe.figma/references/branch1-read-convention.md +82 -0
  68. package/skills/vibe.figma/references/branch2-read-standalone.md +69 -0
  69. package/skills/vibe.figma/references/branch3-write.md +122 -0
  70. package/skills/vibe.figma/references/core-implementation.md +453 -0
  71. package/skills/vibe.git-worktree/SKILL.md +2 -6
  72. package/skills/vibe.git-worktree/references/troubleshooting.md +9 -0
  73. package/skills/vibe.handoff/SKILL.md +2 -103
  74. package/skills/vibe.harness/SKILL.md +17 -12
  75. package/skills/vibe.image/SKILL.md +8 -1
  76. package/skills/vibe.llm/SKILL.md +8 -1
  77. package/skills/vibe.loop/SKILL.md +9 -11
  78. package/skills/vibe.loop/references/install-adapters.md +10 -0
  79. package/skills/vibe.presentation/SKILL.md +7 -0
  80. package/skills/vibe.prioritization/SKILL.md +7 -0
  81. package/skills/vibe.priority-todos/SKILL.md +2 -57
  82. package/skills/vibe.react-best-practices/SKILL.md +1 -1
  83. package/skills/vibe.reason/SKILL.md +9 -2
  84. package/skills/vibe.regress/SKILL.md +6 -28
  85. package/skills/vibe.regress/templates/{test-jest.md → test-template.md} +1 -0
  86. package/skills/vibe.review/SKILL.md +35 -38
  87. package/skills/vibe.review/references/priority-todos.md +66 -0
  88. package/skills/vibe.review/references/ui-ux-review.md +39 -0
  89. package/skills/vibe.run/SKILL.md +57 -656
  90. package/skills/vibe.run/references/arch-guard.md +178 -0
  91. package/skills/vibe.run/references/e2e-and-autofix.md +40 -0
  92. package/skills/vibe.run/references/exec-plan.md +145 -0
  93. package/skills/vibe.run/references/guidelines-and-tools.md +84 -0
  94. package/skills/vibe.run/references/process-steps.md +179 -0
  95. package/skills/vibe.run/references/restraint.md +66 -0
  96. package/skills/vibe.scaffold/SKILL.md +9 -13
  97. package/skills/vibe.scaffold/references/clean-architecture.md +17 -0
  98. package/skills/vibe.spec/SKILL.md +12 -8
  99. package/skills/vibe.spec/references/legacy-artifacts.md +6 -0
  100. package/skills/vibe.test/SKILL.md +93 -70
  101. package/skills/vibe.test/references/report-template.md +101 -0
  102. package/skills/vibe.tool-fallback/SKILL.md +10 -32
  103. package/skills/vibe.tool-fallback/references/external-llm.md +10 -0
  104. package/skills/vibe.tool-fallback/references/file-lookup.md +9 -0
  105. package/skills/vibe.tool-fallback/references/web-search.md +11 -0
  106. package/skills/vibe.trace/SKILL.md +2 -264
  107. package/skills/vibe.ui-ux-pro-max/SKILL.md +1 -3
  108. package/skills/vibe.ui-ux-pro-max/references/charts-and-data.md +7 -0
  109. package/skills/vibe.user-personas/SKILL.md +8 -1
  110. package/skills/vibe.verify/SKILL.md +30 -4
  111. package/skills/vibe.verify/references/trace-mode.md +271 -0
  112. package/skills/vibe.regress/templates/test-vitest.md +0 -30
  113. /package/skills/{vibe.design-teach/rubrics → vibe.design/references}/brand-personality.md +0 -0
  114. /package/skills/{vibe.design-teach → vibe.design}/templates/design-context.json +0 -0
  115. /package/skills/{vibe.context7-usage/rubrics/when-to-use.md → vibe.documentation-provider/references/context7-when-to-use.md} +0 -0
  116. /package/skills/{vibe.event-ops/rubrics → vibe.event/references}/contingency.md +0 -0
  117. /package/skills/{vibe.event-ops/templates/d-day-checklist.md → vibe.event/references/d-day-checklist-template.md} +0 -0
  118. /package/skills/{vibe.event-comms/templates/email-invite.md → vibe.event/references/email-invite-template.md} +0 -0
  119. /package/skills/{vibe.event-planning/templates/event-plan.md → vibe.event/references/event-plan-template.md} +0 -0
  120. /package/skills/{vibe.event-comms/templates/sns-post.md → vibe.event/references/sns-post-template.md} +0 -0
  121. /package/skills/{vibe.event-planning/rubrics → vibe.event/references}/timeline.md +0 -0
  122. /package/skills/{vibe.priority-todos/templates/todo-board.md → vibe.review/references/todo-board-template.md} +0 -0
  123. /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: Generate or audit project folder structure optimized for AI-assisted development
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: SPEC 진입점 자연어 요구사항(+첨부)받아 단일 패스 SPEC 작성 1회 승인 /vibe.run 핸드오프
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
- 구버전 vibe 가 남긴 `.vibe/interviews/{feature}.md`, `.vibe/plans/{feature}.md` 존재할 있다:
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
- - 기존 코드 파악이 필요하면 네이티브 Explore 서브에이전트에 위임 (main session 에서 프로젝트 파일을 훑지 않는다):
116
+ - 기존 코드 파악이 필요하면 하네스의 네이티브 협업 기능에 독립 탐색 worker로 위임한다. Claude Code는 Task/Agent, Codex는 native collaboration에 매핑하며 기본 모델을 상속한다 (coordinator session에서 프로젝트 전체를 훑지 않는다):
113
117
 
114
118
  ```text
115
- Task(subagent_type="Explore",
116
- prompt="Find existing implementations related to [FEATURE]. Return: tech stack, relevant files, patterns. Under 200 tokens.")
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: Self-test vibe — probe every entry skill/skill/hook/agent in the target harness install dir and write a pass/fail report
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
- See `skills/vibe.test/SKILL.md` for the probe spec and the report template.
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 the template in SKILL.md exactly
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/*.md` | file readable · frontmatter parses · required fields (`name`, `description`) |
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
- ## Report template
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
- Written to `~/.vibe/test-reports/<YYYYMMDD-HHmm>-<harness>.{json,md}`. Exact schema:
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
- ### JSON
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
- "harness": "cc",
103
- "timestamp": "2026-04-16T18:30:00+09:00",
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
- - `status`: `"pass"` | `"fail"`
139
- - `error`: required when `status === "fail"`, omitted otherwise
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
- ```markdown
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
- ## Failures
176
+ JSON 스키마와 Markdown 출력 포맷의 전문(필드·타입·명명·Warnings/STCV 섹션):
177
+ `references/report-template.md`
159
178
 
160
- - **skills / spec** — invocation includes `auto` but triggers array is empty
161
- - **agents / implementer** — agent file not found
162
- ```
179
+ 핵심 계약만 요약:
163
180
 
164
- If `failed` is empty, replace the Failures section with `_All probes passed._`.
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. **Compute** `summary` counts and the flat `failed[]` list.
173
- 6. **Ensure** `~/.vibe/test-reports/` exists (`mkdir -p`, dir mode `0o700` consistent with `~/.vibe/config.json`).
174
- 7. **Write** `<ts>-<harness>.json` and `<ts>-<harness>.md`.
175
- 8. **Print** the Markdown summary to the console.
176
- 9. **If `summary.failed > 0`**, load skill `vibe.regress` with `subcommand: register --from-test` and pass the failed entries. P1 = any probe with `status: fail`.
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: "Tool failure fallback strategies with circuit breaker. Auto-activates on API errors, search failures, timeouts, 429, 5xx, overloaded errors."
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
- ### Web Search Fails
36
+ Select exactly one conditional reference for the failing capability; unrelated failures do not load it:
37
37
 
38
- ```
39
- Web Search fails (429, 529, timeout)
40
- Check circuit state
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
- ## LLM Priority by Task Type
65
+ ## Model Selection
87
66
 
88
- | Task Type | Primary Secondary Fallback |
89
- |-----------|-------------------------------|
90
- | architecture, debugging | GPT Antigravity Claude |
91
- | uiux, code-analysis | Antigravity GPT → Claude |
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,9 @@
1
+ # File and Code Lookup Fallback
2
+
3
+ Load only for file or code lookup failures.
4
+
5
+ ```
6
+ File-pattern search fails → Expand pattern: *.ts → **/*.ts → **/*
7
+ → Use content-based text search
8
+ → Check git log for file history
9
+ ```
@@ -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
+ ```