@su-record/vibe 3.2.6 → 3.2.8

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 (160) hide show
  1. package/CLAUDE.md +5 -2
  2. package/README.en.md +1 -1
  3. package/README.md +1 -1
  4. package/agents/build-error-resolver.md +1 -1
  5. package/agents/code-reviewer.md +1 -1
  6. package/agents/e2e-tester.md +1 -1
  7. package/agents/event/event-ops.md +1 -1
  8. package/agents/event/event-planner.md +1 -1
  9. package/agents/implementer.md +1 -1
  10. package/agents/security-reviewer.md +1 -1
  11. package/agents/tester.md +1 -1
  12. package/agents/ui/design-reviewer.md +1 -1
  13. package/agents/ui/design-system-gen.md +1 -1
  14. package/dist/cli/commands/info.d.ts +9 -0
  15. package/dist/cli/commands/info.d.ts.map +1 -1
  16. package/dist/cli/commands/info.js +32 -0
  17. package/dist/cli/commands/info.js.map +1 -1
  18. package/dist/cli/commands/info.test.js +34 -1
  19. package/dist/cli/commands/info.test.js.map +1 -1
  20. package/dist/cli/commands/upgrade.d.ts +18 -0
  21. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  22. package/dist/cli/commands/upgrade.js +60 -2
  23. package/dist/cli/commands/upgrade.js.map +1 -1
  24. package/dist/cli/commands/upgrade.test.js +51 -1
  25. package/dist/cli/commands/upgrade.test.js.map +1 -1
  26. package/dist/cli/generate-release-notes.js +8 -6
  27. package/dist/cli/generate-release-notes.js.map +1 -1
  28. package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
  29. package/dist/cli/postinstall/claude-agents.js +3 -1
  30. package/dist/cli/postinstall/claude-agents.js.map +1 -1
  31. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  32. package/dist/cli/postinstall/constants.js +27 -21
  33. package/dist/cli/postinstall/constants.js.map +1 -1
  34. package/dist/tests/curated-release-notes.test.js +55 -1
  35. package/dist/tests/curated-release-notes.test.js.map +1 -1
  36. package/dist/tools/release/releaseNotes.d.ts +22 -0
  37. package/dist/tools/release/releaseNotes.d.ts.map +1 -1
  38. package/dist/tools/release/releaseNotes.js +45 -0
  39. package/dist/tools/release/releaseNotes.js.map +1 -1
  40. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
  41. package/hooks/scripts/__tests__/code-check-detectors.test.js +58 -0
  42. package/hooks/scripts/code-check.js +7 -0
  43. package/package.json +2 -2
  44. package/skills/vibe/SKILL.md +27 -86
  45. package/skills/vibe/references/routing-examples.md +85 -0
  46. package/skills/vibe.agents-md/SKILL.md +12 -10
  47. package/skills/vibe.analyze/SKILL.md +22 -211
  48. package/skills/vibe.analyze/references/mode1-feature.md +81 -0
  49. package/skills/vibe.analyze/references/mode2-document.md +50 -0
  50. package/skills/vibe.analyze/references/mode3-website.md +47 -0
  51. package/skills/vibe.analyze/references/mode4-quality.md +35 -0
  52. package/skills/vibe.analyze/references/output-templates.md +2 -2
  53. package/skills/vibe.brand-assets/SKILL.md +2 -2
  54. package/skills/vibe.brand-assets/references/mobile-assets.md +6 -0
  55. package/skills/vibe.capability-loop/SKILL.md +14 -80
  56. package/skills/vibe.capability-loop/references/escalate.md +86 -0
  57. package/skills/vibe.chub-usage/SKILL.md +3 -132
  58. package/skills/vibe.clone/SKILL.md +43 -358
  59. package/skills/vibe.clone/references/phase-commands.md +118 -0
  60. package/skills/vibe.clone/references/setup-and-layout.md +34 -0
  61. package/skills/vibe.clone/references/verification-loops.md +64 -0
  62. package/skills/vibe.commit-push-pr/SKILL.md +10 -4
  63. package/skills/vibe.context7-usage/SKILL.md +3 -99
  64. package/skills/vibe.continue/SKILL.md +17 -7
  65. package/skills/{vibe.handoff → vibe.continue}/agents/context-summarizer.md +1 -1
  66. package/skills/{vibe.handoff → vibe.continue}/agents/document-writer.md +1 -1
  67. package/skills/{vibe.handoff → vibe.continue}/agents/state-collector.md +1 -1
  68. package/skills/{vibe.handoff → vibe.continue}/agents/verifier.md +1 -1
  69. package/skills/{vibe.handoff/rubrics/completeness.md → vibe.continue/references/handoff-completeness.md} +1 -1
  70. package/skills/{vibe.handoff/templates → vibe.continue/references}/handoff.md +37 -2
  71. package/skills/vibe.contract/SKILL.md +4 -27
  72. package/skills/vibe.create-prd/SKILL.md +8 -1
  73. package/skills/vibe.design/SKILL.md +18 -5
  74. package/skills/vibe.design/references/design-context.md +184 -0
  75. package/skills/vibe.design-refine/SKILL.md +7 -0
  76. package/skills/vibe.design-review/SKILL.md +7 -0
  77. package/skills/vibe.design-teach/SKILL.md +2 -175
  78. package/skills/vibe.devlog/SKILL.md +14 -11
  79. package/skills/vibe.devlog/references/auto-push.md +10 -0
  80. package/skills/vibe.docs/SKILL.md +27 -198
  81. package/skills/vibe.docs/references/agent.md +55 -0
  82. package/skills/vibe.docs/references/arch.md +28 -0
  83. package/skills/vibe.docs/references/codemaps.md +17 -0
  84. package/skills/vibe.docs/references/diagram.md +24 -0
  85. package/skills/vibe.docs/references/guide.md +23 -0
  86. package/skills/vibe.docs/references/readme.md +45 -0
  87. package/skills/vibe.docs/references/release.md +31 -0
  88. package/skills/vibe.documentation-provider/SKILL.md +22 -0
  89. package/skills/vibe.documentation-provider/references/chub.md +141 -0
  90. package/skills/vibe.documentation-provider/references/context7.md +107 -0
  91. package/skills/vibe.educational-content/SKILL.md +7 -0
  92. package/skills/vibe.event/SKILL.md +47 -146
  93. package/skills/vibe.event/references/comms.md +173 -0
  94. package/skills/vibe.event/references/operations.md +208 -0
  95. package/skills/vibe.event/references/orchestration-legacy.md +97 -0
  96. package/skills/vibe.event/references/planning.md +145 -0
  97. package/skills/vibe.event-comms/SKILL.md +3 -165
  98. package/skills/vibe.event-ops/SKILL.md +3 -200
  99. package/skills/vibe.event-planning/SKILL.md +3 -137
  100. package/skills/vibe.figma/SKILL.md +26 -692
  101. package/skills/vibe.figma/references/branch1-read-convention.md +82 -0
  102. package/skills/vibe.figma/references/branch2-read-standalone.md +69 -0
  103. package/skills/vibe.figma/references/branch3-write.md +122 -0
  104. package/skills/vibe.figma/references/core-implementation.md +453 -0
  105. package/skills/vibe.git-worktree/SKILL.md +2 -6
  106. package/skills/vibe.git-worktree/references/troubleshooting.md +9 -0
  107. package/skills/vibe.handoff/SKILL.md +2 -103
  108. package/skills/vibe.harness/SKILL.md +17 -12
  109. package/skills/vibe.image/SKILL.md +8 -1
  110. package/skills/vibe.llm/SKILL.md +8 -1
  111. package/skills/vibe.loop/SKILL.md +9 -11
  112. package/skills/vibe.loop/references/install-adapters.md +10 -0
  113. package/skills/vibe.presentation/SKILL.md +7 -0
  114. package/skills/vibe.prioritization/SKILL.md +7 -0
  115. package/skills/vibe.priority-todos/SKILL.md +2 -57
  116. package/skills/vibe.react-best-practices/SKILL.md +1 -1
  117. package/skills/vibe.reason/SKILL.md +9 -2
  118. package/skills/vibe.regress/SKILL.md +6 -28
  119. package/skills/vibe.regress/templates/{test-jest.md → test-template.md} +1 -0
  120. package/skills/vibe.review/SKILL.md +62 -52
  121. package/skills/vibe.review/references/priority-todos.md +66 -0
  122. package/skills/vibe.review/references/ui-ux-review.md +39 -0
  123. package/skills/vibe.run/SKILL.md +63 -660
  124. package/skills/vibe.run/references/arch-guard.md +178 -0
  125. package/skills/vibe.run/references/e2e-and-autofix.md +40 -0
  126. package/skills/vibe.run/references/exec-plan.md +145 -0
  127. package/skills/vibe.run/references/guidelines-and-tools.md +84 -0
  128. package/skills/vibe.run/references/parallel-agents.md +44 -60
  129. package/skills/vibe.run/references/process-steps.md +179 -0
  130. package/skills/vibe.run/references/restraint.md +66 -0
  131. package/skills/vibe.run/references/ultrawork-mode.md +1 -1
  132. package/skills/vibe.scaffold/SKILL.md +9 -13
  133. package/skills/vibe.scaffold/references/clean-architecture.md +17 -0
  134. package/skills/vibe.spec/SKILL.md +13 -9
  135. package/skills/vibe.spec/references/legacy-artifacts.md +6 -0
  136. package/skills/vibe.test/SKILL.md +93 -70
  137. package/skills/vibe.test/references/report-template.md +101 -0
  138. package/skills/vibe.tool-fallback/SKILL.md +10 -32
  139. package/skills/vibe.tool-fallback/references/external-llm.md +10 -0
  140. package/skills/vibe.tool-fallback/references/file-lookup.md +9 -0
  141. package/skills/vibe.tool-fallback/references/web-search.md +11 -0
  142. package/skills/vibe.trace/SKILL.md +2 -264
  143. package/skills/vibe.ui-ux-pro-max/SKILL.md +1 -3
  144. package/skills/vibe.ui-ux-pro-max/references/charts-and-data.md +7 -0
  145. package/skills/vibe.user-personas/SKILL.md +8 -1
  146. package/skills/vibe.verify/SKILL.md +30 -4
  147. package/skills/vibe.verify/references/trace-mode.md +271 -0
  148. package/vibe/rules/principles/dual-harness-doctrine.md +10 -9
  149. package/skills/vibe.regress/templates/test-vitest.md +0 -30
  150. /package/skills/{vibe.design-teach/rubrics → vibe.design/references}/brand-personality.md +0 -0
  151. /package/skills/{vibe.design-teach → vibe.design}/templates/design-context.json +0 -0
  152. /package/skills/{vibe.context7-usage/rubrics/when-to-use.md → vibe.documentation-provider/references/context7-when-to-use.md} +0 -0
  153. /package/skills/{vibe.event-ops/rubrics → vibe.event/references}/contingency.md +0 -0
  154. /package/skills/{vibe.event-ops/templates/d-day-checklist.md → vibe.event/references/d-day-checklist-template.md} +0 -0
  155. /package/skills/{vibe.event-comms/templates/email-invite.md → vibe.event/references/email-invite-template.md} +0 -0
  156. /package/skills/{vibe.event-planning/templates/event-plan.md → vibe.event/references/event-plan-template.md} +0 -0
  157. /package/skills/{vibe.event-comms/templates/sns-post.md → vibe.event/references/sns-post-template.md} +0 -0
  158. /package/skills/{vibe.event-planning/rubrics → vibe.event/references}/timeline.md +0 -0
  159. /package/skills/{vibe.priority-todos/templates/todo-board.md → vibe.review/references/todo-board-template.md} +0 -0
  160. /package/skills/{vibe.priority-todos/rubrics/prioritization.md → vibe.review/references/todo-prioritization.md} +0 -0
@@ -0,0 +1,179 @@
1
+ # vibe.run — Process Steps 1–8 (상세)
2
+
3
+ > vibe.run SKILL.md 의 Process 표에서 참조. 각 단계의 전체 절차·체크포인트 템플릿·코드 예시.
4
+
5
+ ### 1. Load SPEC + Feature
6
+
7
+ **Search order:**
8
+ ```
9
+ Step 1: Check split structure (folder)
10
+ .vibe/specs/{feature-name}/ → Folder: _index.md + phase files
11
+ .vibe/features/{feature-name}/ → Folder: _index.feature + phase files
12
+
13
+ Step 2: If no folder, check single file
14
+ .vibe/specs/{feature-name}.md
15
+ .vibe/features/{feature-name}.feature
16
+
17
+ Step 3: If neither → Error: "Run /vibe.spec first"
18
+ ```
19
+
20
+ **Split structure:** Load `_index.md` first, then phase files in order. Execute phases sequentially (or per `--phase` flag).
21
+
22
+ ### 1-0. Compile + validate execution packet (MANDATORY)
23
+
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
+
26
+ ```bash
27
+ node -e "import('file://{{VIBE_PATH}}/dist/tools/index.js').then(t => {
28
+ const projectPath=process.cwd(), specPath='.vibe/specs/{feature-name}.md';
29
+ const profile='{codex-or-claude-code}';
30
+ const written=t.writeExecutionPacket({projectPath,specPath,profile});
31
+ if(!written.ok){console.error(JSON.stringify(written.errors));process.exit(1)}
32
+ const checked=t.validateExecutionPacket({projectPath,specPath,packetPath:written.packetPath});
33
+ if(!checked.valid){console.error(checked.code);process.exit(1)}
34
+ console.log(written.packetPath);
35
+ })"
36
+ ```
37
+
38
+ - Codex uses profile `codex`; Claude Code uses `claude-code`.
39
+ - Split SPECs compile each active `phase-N-*.md` immediately before that phase runs; `_index.md` remains the overview ANCHOR and is not treated as a phase contract.
40
+ - Use the packet only when validation returns `valid: true`.
41
+ - `STALE_PACKET`, invalid packet, preservation-audit failure, or budget failure is blocking: recompile from the canonical SPEC and never silently fall back to an unvalidated packet.
42
+ - The packet is a derived execution view. The canonical SPEC remains the ANCHOR and source of truth.
43
+
44
+ ### 1-1. Phase Isolation Protocol (Large SPEC Guard, MANDATORY for 3+ phases)
45
+
46
+ ```
47
+ Step A: Read _index.md (overview only — phase list, REQ IDs)
48
+ Step B: For each Phase N:
49
+ 1. RE-READ Phase N SPEC section (every time, no memory)
50
+ 2. Compile + validate Phase N execution packet using the phase file path
51
+ 3. RE-READ Phase N Feature scenarios
52
+ 4. Extract Phase N scope: files, scenarios, requirements
53
+ 5. Implement Phase N scenarios
54
+ 6. Verify Phase N
55
+ 7. Write Phase Checkpoint → .vibe/checkpoints/
56
+ 8. DISCARD Phase N details from working memory
57
+ Step C: Next Phase
58
+ ```
59
+
60
+ **Phase Checkpoint** (`.vibe/checkpoints/{feature}-phase-{N}.md`):
61
+
62
+ ```markdown
63
+ # Checkpoint: {feature} Phase {N}
64
+
65
+ ## Completed
66
+ - Scenario 1: {name} ✅
67
+
68
+ ## Files Changed
69
+ - src/auth.service.ts (added login(), validateToken())
70
+
71
+ ## State for Next Phase
72
+ - Auth service exports: login(), logout(), validateToken()
73
+
74
+ ## Remaining Phases
75
+ - Phase {N+1}: {name} — {scenario count} scenarios
76
+ ```
77
+
78
+ **SPEC Re-anchoring (Before EVERY scenario):** Re-read the EXACT Given/When/Then from Feature file (not from memory). Compare: "Am I implementing what the SPEC says, or what I think it says?"
79
+
80
+ **Scope Lock (Per Phase):**
81
+
82
+ ```
83
+ At Phase start, declare:
84
+ MODIFY: [list of files this phase will touch]
85
+ CREATE: [list of files this phase will create]
86
+ DO NOT TOUCH: everything else
87
+ ```
88
+
89
+ **Context Pressure:**
90
+
91
+ | Context Level | Action |
92
+ |---------------|--------|
93
+ | < 50% | Normal execution |
94
+ | 50-85% | Save checkpoint, trim exploration results |
95
+ | 85%+ | Save checkpoint → `/new` → resume from checkpoint |
96
+ | Phase boundary | Always save checkpoint |
97
+
98
+ ### 1-2. SPEC-First Gate
99
+
100
+ > SPEC is the source of truth for code. To modify code, update the SPEC first.
101
+
102
+ ```
103
+ Discovery: "An API endpoint not in SPEC is needed"
104
+ ├─ Already in SPEC? YES → Implement
105
+ ├─ Not in SPEC but within scope? → Add to SPEC + Feature → Implement
106
+ └─ Outside scope? → TODO in .vibe/todos/out-of-scope-{item}.md
107
+ ```
108
+
109
+ SPEC changes and code changes must be in the **same commit**.
110
+
111
+ ### 2. Extract Scenario List
112
+
113
+ ```markdown
114
+ | # | Scenario | Status |
115
+ |---|----------|--------|
116
+ | 1 | Valid login success | ⬜ |
117
+ | 2 | Invalid password error | ⬜ |
118
+ ```
119
+
120
+ ### 3. Scenario-by-Scenario Implementation
121
+
122
+ > Read `references/parallel-agents.md` for full parallel exploration patterns, background agents, parallel subagent group selection, and model routing.
123
+
124
+ **For each scenario:**
125
+ 1. [Parallel exploration] Delegate up to 3 independent workers through native collaboration — related code, deps, patterns. Claude Code maps workers to Task/Agent; Codex maps them to native collaboration; inherit the session model by default.
126
+ 2. [Implement] Write/edit the minimum required code
127
+ 3. [Verify] Check Given/When/Then; E2E if UI scenario
128
+ 4. [Auto-fix loop] On failure: collect evidence → root cause → fix → re-verify
129
+
130
+ **UI/UX Design Intelligence (auto-triggered before Phase 1 if UI keywords in SPEC):**
131
+ - Delegate `design-system-gen` through native collaboration: framework-specific component guidelines + chart/viz library advice (viz advice conditional on chart keywords). Inherit the session model.
132
+ - Load `.vibe/design-system/{project}/MASTER.md` if present
133
+
134
+ ### 4. Brand Assets (New project only)
135
+
136
+ > Read `references/brand-assets.md` when SPEC contains brand context and this is the first run.
137
+
138
+ Trigger conditions: first run (no favicon.ico) + SPEC has brand context + Antigravity API key configured.
139
+
140
+ ### 5. Race Code Review
141
+
142
+ > Read `references/race-review.md` for full Race Review invocation, confidence matrix, and quality gate thresholds.
143
+
144
+ After all scenarios: GPT + Antigravity review in parallel. ULTRAWORK enables this by default.
145
+
146
+ ### 6. Quality Report (Auto-generated)
147
+
148
+ ```
149
+ ┌─────────────────────────────────────────────────────────────────┐
150
+ │ QUALITY REPORT: {feature} │
151
+ ├─────────────────────────────────────────────────────────────────┤
152
+ │ Scenarios: N/N passed │
153
+ │ Quality score: 94/100 │
154
+ │ Build: ✅ | Tests: ✅ | Types: ✅ | Race review: ✅ │
155
+ │ Started: {start_time} Completed: {system clock result} │
156
+ └─────────────────────────────────────────────────────────────────┘
157
+ ```
158
+
159
+ ### 7. Update Feature File
160
+
161
+ Auto-update scenario status with `Last verified` timestamp and quality score.
162
+
163
+ ### 8. Coverage Verification Loop (RTM)
164
+
165
+ > 루프 시맨틱은 `vibe/rules/loop-contract.md`를 따른다. 여기서의 exit 기준은 `coveragePercent === 100`. RTM 다이어그램, 출력 형식, 반복 규칙: `references/ralph-loop.md`
166
+
167
+ After ALL phases complete:
168
+
169
+ ```bash
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)); })"
172
+ ```
173
+
174
+ > Default SPEC path is `.vibe/specs/<feature>.md`. `status === 'empty'` must be treated as failed/not-applicable — never as 100% pass.
175
+
176
+ JUDGE: `coveragePercent === 100` → 루프 종료. stuck(연속 2회 동일 커버리지) → automationLevel confirm이면 사용자 질문; autonomous이면 TODO + done.
177
+
178
+ ---
179
+
@@ -0,0 +1,66 @@
1
+ # Restraint — Don't Write It, Don't Tune It (Yet)
2
+
3
+ > vibe.run 내부 구현. YAGNI 사다리 · Pike 최적화 규칙 · 차단 충동 · 무효화 불가 예외의 전문.
4
+
5
+ # Restraint — Don't Write It, Don't Tune It (Yet)
6
+
7
+ Two constraints, one gate:
8
+
9
+ - **No premature code.** New abstractions must be *pulled* by a demonstrated
10
+ need, never pushed by "might need it later." Once the code exists, deleting
11
+ it costs more than never writing it.
12
+ - **No premature optimization.** Performance work must be *pulled* by a
13
+ measurement, never by a hunch.
14
+
15
+ ## The YAGNI Ladder (code axis)
16
+
17
+ Satisfy the need at the **highest** rung that covers it; lower rungs are
18
+ blocked while a higher one applies:
19
+
20
+ 1. **Not needed** — the requirement doesn't ask for it → don't build it
21
+ 2. **Stdlib / built-ins** already do it (`crypto`, `Intl`, `pathlib`, …)
22
+ 3. **Native platform feature** does it (`<input type="date">`, CSS `:has()`, DB constraints)
23
+ 4. **Already-installed dependency** covers it — check the lockfile, don't guess
24
+ 5. **One line** — a single expression; no new file, no class
25
+ 6. **Minimal code** — only now, and nothing for "later"
26
+
27
+ Tie-break: native beats a one-liner; stdlib beats a dependency. Generalize
28
+ only when a *second* caller exists.
29
+
30
+ ## Pike's Rules (optimization axis)
31
+
32
+ - You can't tell where a program spends its time — bottlenecks surprise.
33
+ **Measure; don't guess.**
34
+ - Don't tune until one part *measurably* overwhelms the rest.
35
+ - Fancy algorithms are slow when n is small — and n is usually small.
36
+ Ask "what's n?" before "what's the Big-O?"
37
+ - Simple algorithms + the right data structures beat clever code. Data dominates.
38
+
39
+ Optimization is justified only when ALL hold: a measured bottleneck exists →
40
+ it dominates runtime → the fix is the simplest change addressing it → you
41
+ re-measure after.
42
+
43
+ ## Blocked Impulses
44
+
45
+ | Impulse | Constraint | Counter |
46
+ |---|---|---|
47
+ | helper / utility / wrapper / manager class | rungs 1–5 | a stdlib call or one line usually suffices |
48
+ | config system for one value | rung 1 | a `const` is the config |
49
+ | generic `Processor(strategy, validator…)` | rung 1 | one concrete function until a second caller exists |
50
+ | "add a cache here" / "parallelize this" | measure first | is this path even hot? Often it's I/O |
51
+ | swap in a B-tree / trie / skip list | what's n? | O(n²) with n=100 is microseconds |
52
+ | "this loop looks slow" | measure first | the bottleneck is probably elsewhere |
53
+
54
+ ## Overrides — Restraint Never Erodes These
55
+
56
+ 1. **Security and trust-boundary work are requirements**, not optional
57
+ complexity. Input validation, auth checks, escaping stay in — "one line"
58
+ is no excuse to drop them.
59
+ 2. **Deliberate simplifications get a comment + upgrade path**, so the next
60
+ reader sees a *choice*, not an oversight:
61
+
62
+ ```ts
63
+ // Global lock is enough at current throughput.
64
+ // Switch to per-account locking if write contention shows up.
65
+ const lock = new Mutex();
66
+ ```
@@ -10,7 +10,7 @@
10
10
 
11
11
  | Feature | Description |
12
12
  |---------|-------------|
13
- | **Parallel Exploration** | 3+ Task(haiku) agents run simultaneously (ACT 병렬화) |
13
+ | **Parallel Exploration** | 3+ Task agents run simultaneously (ACT 병렬화) |
14
14
  | **Loop (기본 동작)** | 모든 실행의 기본 — exit=게이트 통과 또는 stuck 또는 max_iterations |
15
15
  | **Context Compression** | Aggressive auto-save at 70%+ context |
16
16
  | **No Pause** | stuck·SPEC 게이트 외 확인 없음 (`automationLevel: autonomous`) |
@@ -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
 
@@ -95,7 +99,7 @@ ARGUMENTS: $ARGUMENTS
95
99
  | 입력 | 처리 |
96
100
  |---|---|
97
101
  | 자연어 요구사항 | 그대로 SPEC 패스의 주 입력 |
98
- | 📎 첨부 (md/txt/pdf/이미지 등) | Read 도구로 분석 후 요구사항에 병합 |
102
+ | 📎 첨부 (md/txt/pdf/이미지 등) | 하네스의 파일 읽기 수단(CC `Read` 도구 / Codex 셸 등)으로 전체를 읽어 분석 후 요구사항에 병합 |
99
103
  | 파일 경로 인자 (PRD 등) | 존재 확인 후 Read — 첨부와 동일 취급 |
100
104
  | **레거시 아티팩트** `.vibe/interviews/{feature}.md`, `.vibe/plans/{feature}.md` | 존재하면 **입력 컨텍스트로만** 읽는다. 절대 요구하거나 재생성하지 않는다 — 없어도 정상 경로 |
101
105
 
@@ -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