@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.
- package/CLAUDE.md +5 -2
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/agents/build-error-resolver.md +1 -1
- package/agents/code-reviewer.md +1 -1
- package/agents/e2e-tester.md +1 -1
- package/agents/event/event-ops.md +1 -1
- package/agents/event/event-planner.md +1 -1
- package/agents/implementer.md +1 -1
- package/agents/security-reviewer.md +1 -1
- package/agents/tester.md +1 -1
- package/agents/ui/design-reviewer.md +1 -1
- package/agents/ui/design-system-gen.md +1 -1
- package/dist/cli/commands/info.d.ts +9 -0
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +32 -0
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/info.test.js +34 -1
- package/dist/cli/commands/info.test.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts +18 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +60 -2
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/upgrade.test.js +51 -1
- package/dist/cli/commands/upgrade.test.js.map +1 -1
- package/dist/cli/generate-release-notes.js +8 -6
- package/dist/cli/generate-release-notes.js.map +1 -1
- package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
- package/dist/cli/postinstall/claude-agents.js +3 -1
- package/dist/cli/postinstall/claude-agents.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +27 -21
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/tests/curated-release-notes.test.js +55 -1
- package/dist/tests/curated-release-notes.test.js.map +1 -1
- package/dist/tools/release/releaseNotes.d.ts +22 -0
- package/dist/tools/release/releaseNotes.d.ts.map +1 -1
- package/dist/tools/release/releaseNotes.js +45 -0
- package/dist/tools/release/releaseNotes.js.map +1 -1
- package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
- package/hooks/scripts/__tests__/code-check-detectors.test.js +58 -0
- package/hooks/scripts/code-check.js +7 -0
- 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.analyze/references/output-templates.md +2 -2
- 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 +62 -52
- 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 +63 -660
- 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/parallel-agents.md +44 -60
- package/skills/vibe.run/references/process-steps.md +179 -0
- package/skills/vibe.run/references/restraint.md +66 -0
- package/skills/vibe.run/references/ultrawork-mode.md +1 -1
- package/skills/vibe.scaffold/SKILL.md +9 -13
- package/skills/vibe.scaffold/references/clean-architecture.md +17 -0
- package/skills/vibe.spec/SKILL.md +13 -9
- 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/vibe/rules/principles/dual-harness-doctrine.md +10 -9
- 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
|
@@ -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
|
|
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:
|
|
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
|
|
|
@@ -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
|
-
- 기존 코드 파악이 필요하면 네이티브
|
|
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
|