@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,453 @@
|
|
|
1
|
+
# vibe.figma — Core Implementation (Phase 0–6)
|
|
2
|
+
|
|
3
|
+
> Loaded by vibe.figma SKILL.md for the shared Extract/Convert phase implementation behind all READ branches.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# vibe.figma — Structural Code Generation
|
|
7
|
+
|
|
8
|
+
## Core Principles
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
The Figma tree is the source of truth for code. Screenshots are for verification only.
|
|
12
|
+
|
|
13
|
+
✅ Figma Auto Layout → CSS Flexbox 1:1 mechanical mapping
|
|
14
|
+
✅ Figma CSS properties → SCSS direct conversion (no guessing)
|
|
15
|
+
✅ The active harness handles semantic decisions only: tag selection, component splitting, interactions
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Immutable Rules
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
1. Do NOT render content as images (frames with TEXT children, INSTANCEs, buttons/prices,
|
|
22
|
+
whole sections). Image rendering only for BG, vector-text GROUPs, verification screenshots.
|
|
23
|
+
2. BG must use CSS background-image only. <img> tag is forbidden.
|
|
24
|
+
3. No new screenshot calls during Phase 4. Use only Phase 2 materials —
|
|
25
|
+
no matter how complex, implement with HTML+CSS.
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Full Flow
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
Input: receive all URLs at once
|
|
32
|
+
Storyboard: figma.com/...?node-id=aaa (if present)
|
|
33
|
+
MO Design: figma.com/...?node-id=xxx
|
|
34
|
+
PC Design: figma.com/...?node-id=yyy (if present)
|
|
35
|
+
|
|
36
|
+
→ Phase 0: Setup
|
|
37
|
+
→ Phase 1: Storyboard analysis → functional spec document
|
|
38
|
+
→ Phase 2: Gather materials (→ Extract Mode section below)
|
|
39
|
+
→ Phase 3: Remapping (MO↔PC matching → remapped.json)
|
|
40
|
+
→ Phase 4: Sequential code generation (→ Convert Mode section below)
|
|
41
|
+
→ Phase 5: Compile gate
|
|
42
|
+
→ Phase 6: Visual verification loop
|
|
43
|
+
|
|
44
|
+
Working directory: /tmp/{feature}/{mo,pc}-main/{tree.json, bg/, content/, sections/}
|
|
45
|
+
+ remapped.json ← sole input for Phase 4
|
|
46
|
+
Code output: directly in the project — components/{feature}/, styles/{feature}/
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Phase 0: Setup
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
1. Stack detection: package.json → react/vue/svelte, next/nuxt, scss/tailwind
|
|
55
|
+
2. Feature name: Figma filename → kebab-case
|
|
56
|
+
3. Directories: components/{feature}/, public/images/{feature}/, styles/{feature}/
|
|
57
|
+
4. Component indexing → component-index.json (≤50 components, props/slots/classes, ≤2 min)
|
|
58
|
+
5. Hooks/Types/Constants → context-index.json
|
|
59
|
+
6. Design token scan → project-tokens.json (SCSS > CSS Variables > Tailwind > CSS-in-JS)
|
|
60
|
+
(all indexes under /tmp/{feature}/)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Phase 1: Storyboard Analysis
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
User input: URLs or PDF/images separated by newlines
|
|
69
|
+
URL classification (automatic): different fileKey → storyboard vs design;
|
|
70
|
+
ROOT name contains "MO" → mobile, "PC" → desktop
|
|
71
|
+
|
|
72
|
+
Storyboard analysis: collect frames at depth=3 → classify by name pattern
|
|
73
|
+
SPEC (functional definition) → CONFIG (resolution) → PAGE (main sections) → SHARED (common)
|
|
74
|
+
PDF/images follow the same structural extraction
|
|
75
|
+
|
|
76
|
+
❌ No code file creation during Phase 1
|
|
77
|
+
|
|
78
|
+
Output (text only): section list table · per-section functional definition
|
|
79
|
+
([Function] + [Interaction] + [State]) · common component list · TS interface draft
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Phase 2: Gather Materials ← Research (parallel)
|
|
85
|
+
|
|
86
|
+
**→ Follow the Extract Mode rules below.**
|
|
87
|
+
**Coordinator pattern: run MO/PC extraction as parallel workers.**
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
# [FIGMA_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/figma-extract.js
|
|
91
|
+
|
|
92
|
+
Simultaneous MO/PC extraction — each worker: screenshot → tree → images →
|
|
93
|
+
asset rendering → sections/. Proceed to Phase 3 only after both complete.
|
|
94
|
+
Single BP: run sequentially with 1 worker
|
|
95
|
+
Multi-frame (same BP, different pages): sequential (500ms interval), partial failure allowed
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Phase 3: Data Refinement ← Synthesis (independent per BP)
|
|
101
|
+
|
|
102
|
+
**Split and refine each BP's tree.json by section. MO↔PC matching is NOT done here.**
|
|
103
|
+
|
|
104
|
+
### BLOCKING Command — Writing custom refine scripts is strictly forbidden
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# MO
|
|
108
|
+
node {{VIBE_PATH}}/hooks/scripts/figma-refine.js \
|
|
109
|
+
/tmp/{feature}/mo-main/tree.json \
|
|
110
|
+
--out=/tmp/{feature}/mo-main/sections.json \
|
|
111
|
+
--design-width=720 \
|
|
112
|
+
--bp=mo
|
|
113
|
+
|
|
114
|
+
# PC
|
|
115
|
+
node {{VIBE_PATH}}/hooks/scripts/figma-refine.js \
|
|
116
|
+
/tmp/{feature}/pc-main/tree.json \
|
|
117
|
+
--out=/tmp/{feature}/pc-main/sections.json \
|
|
118
|
+
--design-width=2560 \
|
|
119
|
+
--bp=pc
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
⛔ **Phase 4 is blocked until these commands are executed.**
|
|
123
|
+
⛔ **No custom refine scripts, no parsing tree.json directly to produce sections.json.**
|
|
124
|
+
✅ Use only figma-refine.js output. If unsatisfactory, modify figma-refine.js.
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
⛔ Refine each BP independently — do NOT mix MO and PC.
|
|
128
|
+
⛔ The refined JSON (full recursive subtree per section) is the sole input for Phase 4.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Output
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
/tmp/{feature}/{mo,pc}-main/sections.json ← per-BP refinement result
|
|
135
|
+
|
|
136
|
+
sections.json structure:
|
|
137
|
+
{
|
|
138
|
+
meta: { feature, designWidth, bp },
|
|
139
|
+
sections: [{
|
|
140
|
+
name: "Hero", nodeId, type, size, css,
|
|
141
|
+
text, imageRef, fills, layoutSizingH, layoutSizingV,
|
|
142
|
+
children: [ ... ], // ⛔ full recursive subtree — down to leaf nodes
|
|
143
|
+
images: { bg: "bg/hero-bg.webp", content: ["content/hero-title.webp"] }
|
|
144
|
+
}]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Node Refinement Rules (tree.json → sections.json)
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
1. size-0px nodes, VECTOR decorative lines (w/h ≤ 2px), isMask nodes → remove
|
|
152
|
+
2. BG frames → separate from children, move to images.bg
|
|
153
|
+
3. Vector-text GROUPs + design text (TEXT with multiple/gradient fills or effects)
|
|
154
|
+
→ separate from children, add to images.content
|
|
155
|
+
4. Remaining nodes → keep in children (with CSS, recursive)
|
|
156
|
+
|
|
157
|
+
Multi-frame (same BP, different pages): identify common elements → shared components;
|
|
158
|
+
union of common tokens → shared _tokens.scss
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Phase 4: Per-BP Static Implementation ← Implement (sequential per BP)
|
|
164
|
+
|
|
165
|
+
**→ Follow the Convert Mode rules below.**
|
|
166
|
+
**⛔ Implement MO fully first → pass verification → then implement PC. No responsive conversion.**
|
|
167
|
+
**⛔ CSS values must use Figma original px as-is. vw conversion, clamp, @media are forbidden.**
|
|
168
|
+
|
|
169
|
+
### BLOCKING Command — SCSS must only use script output
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Step A: Auto-generate SCSS skeleton (run once per BP)
|
|
173
|
+
node {{VIBE_PATH}}/hooks/scripts/figma-to-scss.js \
|
|
174
|
+
/tmp/{feature}/{bp}-main/sections.json \
|
|
175
|
+
--out=/path/to/project/assets/scss/{feature}/
|
|
176
|
+
|
|
177
|
+
# Step B: Per-section validation (after writing each section's code)
|
|
178
|
+
node {{VIBE_PATH}}/hooks/scripts/figma-validate.js \
|
|
179
|
+
/path/to/project/assets/scss/{feature}/ \
|
|
180
|
+
/tmp/{feature}/{bp}-main/sections.json \
|
|
181
|
+
--section={SectionName}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
⛔ **Writing SCSS directly (or via custom generation scripts) invalidates Phase 4.**
|
|
185
|
+
⛔ **Do NOT proceed to the next section without a figma-validate.js PASS.**
|
|
186
|
+
⛔ **No CSS values inside scoped style blocks** — only @import/@use of external SCSS files.
|
|
187
|
+
✅ Use figma-to-scss.js output as-is. If unsatisfactory, modify figma-to-scss.js.
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
Phase 4A: MO Static Implementation (input: mo-main/sections.json)
|
|
191
|
+
⛔ No parallelism. Process one section at a time:
|
|
192
|
+
1. Read the target section from sections.json
|
|
193
|
+
2. Write an image vs HTML classification table (BLOCKING — see Convert Mode §C1)
|
|
194
|
+
3. figma-to-scss.js → auto-generate SCSS skeleton (px as-is) — Step A once
|
|
195
|
+
4. Active harness: HTML structure + semantic tags + layout + interactions (Vue/React files only)
|
|
196
|
+
5. figma-validate.js — Step B: PASS → next section │ FAIL → fix → re-run
|
|
197
|
+
(repeat until P1=0, no round cap)
|
|
198
|
+
→ Phase 5 (MO compile) → Phase 6 (MO visual verification)
|
|
199
|
+
|
|
200
|
+
Phase 4B: PC Static Implementation (input: pc-main/sections.json)
|
|
201
|
+
Same process as MO → Phase 5 (PC compile) → Phase 6 (PC visual verification)
|
|
202
|
+
|
|
203
|
+
Phase 4C: Responsive Integration (after both MO+PC pass verification)
|
|
204
|
+
→ Separate flow to be established (TODO)
|
|
205
|
+
|
|
206
|
+
Claude's role (restricted): semantic decisions only (Convert Mode §C3) + image classification
|
|
207
|
+
+ executing figma-to-scss.js / figma-validate.js.
|
|
208
|
+
❌ No modifying SCSS values, no CSS in <style> blocks, no vw/clamp/@media,
|
|
209
|
+
no custom functions/mixins, no custom refine/generate scripts.
|
|
210
|
+
|
|
211
|
+
SCSS Setup (before the first section):
|
|
212
|
+
index.scss, _tokens.scss, _base.scss
|
|
213
|
+
Token mapping: reference existing tokens from project-tokens.json → create new ones if no match
|
|
214
|
+
|
|
215
|
+
Component matching (before each section):
|
|
216
|
+
Compare against component-index.json → import if matched, create new if not
|
|
217
|
+
|
|
218
|
+
Multi-frame:
|
|
219
|
+
Step 1: shared components first → components/shared/
|
|
220
|
+
Step 2: unique sections per frame
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Phase 5: Compile Gate
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
No round cap. Loop until compile succeeds (or stuck → ask user).
|
|
229
|
+
|
|
230
|
+
0. Capture baseline (before Phase 4): record existing tsc + build errors → fix NEW errors only
|
|
231
|
+
1. TypeScript: vue-tsc/svelte-check/tsc --noEmit
|
|
232
|
+
2. Build: npm run build (120s timeout)
|
|
233
|
+
3. Dev server: npm run dev → detect port → polling
|
|
234
|
+
|
|
235
|
+
On error: parse → auto-fix → re-check
|
|
236
|
+
Termination:
|
|
237
|
+
✅ Success: all checks pass → enter Phase 6
|
|
238
|
+
⚠️ Stuck (same errors as previous round) → ask user: fix instructions │ "proceed"
|
|
239
|
+
(record TODO, go to Phase 6) │ "abort". ultrawork: record TODO + proceed silently.
|
|
240
|
+
|
|
241
|
+
On completion: preserve dev server PID → used in Phase 6
|
|
242
|
+
|
|
243
|
+
⛔ After Phase 5 passes (or user proceeds), must enter Phase 6.
|
|
244
|
+
Do NOT output a "completion summary" or declare work complete without Phase 6.
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Phase 6: Visual Verification Loop ← Verify (parallel) MANDATORY
|
|
250
|
+
|
|
251
|
+
**⛔ Mandatory — enter automatically upon Phase 5 completion; skipping = task "incomplete".**
|
|
252
|
+
**Coordinator pattern: independent per-section verification can run as parallel workers.**
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
No round cap. Loop until P1=0 (or stuck → ask user).
|
|
256
|
+
Infrastructure: src/infra/lib/browser/ (Puppeteer + CDP)
|
|
257
|
+
|
|
258
|
+
1. Capture rendered screenshot → pixelmatch comparison against Figma screenshot
|
|
259
|
+
diffRatio > 0.1 → P1
|
|
260
|
+
2. CSS value comparison: computed CSS vs tree.json expected values
|
|
261
|
+
delta > 4px → P1, ≤ 4px → P2
|
|
262
|
+
3. Check for missing images and text
|
|
263
|
+
4. Fix P1 issues first (refer to tree.json, no guessing) → revalidate compile → reload
|
|
264
|
+
|
|
265
|
+
Narrowing scope: Round 1 P1+P2+P3 → Round 2 P1+P2 → Round 3+ P1 only (until P1=0)
|
|
266
|
+
|
|
267
|
+
Termination:
|
|
268
|
+
✅ Success: P1 = 0 AND no new findings → complete
|
|
269
|
+
⚠️ Stuck (same findings as previous round) → ask user: direct resolution │ "proceed"
|
|
270
|
+
(record TODO, complete) │ "abort". ultrawork: record TODO + complete silently.
|
|
271
|
+
|
|
272
|
+
Responsive: after MO verification, change viewport → same loop against PC screenshots
|
|
273
|
+
Cleanup: shut down browser + dev server
|
|
274
|
+
|
|
275
|
+
⛔ "Completion summary" output is only allowed after Phase 6 is complete (or user proceeds).
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Extract Mode (Phase 2 body) — Acquire Code Generation Data
|
|
281
|
+
|
|
282
|
+
Uses the Figma REST API (`src/infra/lib/figma/`) to extract **all data needed for structural code generation**. Priority: 1st node tree + CSS (PRIMARY source) → 2nd image assets → 3rd screenshots (Phase 6 validation only, never for generation).
|
|
283
|
+
|
|
284
|
+
### E1. Node Tree + CSS — Source of Truth
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
Bash:
|
|
288
|
+
node "{{VIBE_PATH}}/hooks/scripts/figma-extract.js" tree {fileKey} {nodeId}
|
|
289
|
+
|
|
290
|
+
Returns (FigmaNode JSON):
|
|
291
|
+
{ nodeId, name, type, size, css: { display, flexDirection, gap, ... },
|
|
292
|
+
text (TEXT only), imageRef, imageScaleMode (FILL/FIT/CROP/TILE),
|
|
293
|
+
layoutSizingH/V (FIXED/HUG/FILL), fills (only when 2+), isMask,
|
|
294
|
+
raw: { itemSpacing, padding*, cornerRadius, strokeWeight, strokeAlign, blendMode,
|
|
295
|
+
opacity, fontSize, lineHeightPx, letterSpacing, fontWeight, leadingTrim,
|
|
296
|
+
textBoxTrim }, ← Figma numbers for Phase 6 raw-vs-computed reconciliation
|
|
297
|
+
warnings: [{ property, value, severity: "P1"|"P2", reason }], ← translation-loss only
|
|
298
|
+
children: [...] }
|
|
299
|
+
|
|
300
|
+
Root node also carries:
|
|
301
|
+
auditSummary: { total, p1, p2, items: [{ nodeId, name, property, value, severity, reason }] }
|
|
302
|
+
|
|
303
|
+
→ Save to /tmp/{feature}/tree.json
|
|
304
|
+
|
|
305
|
+
Figma property → CSS mapping (what the extractor auto-converts): rubrics/css-mapping.md
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### E2. Translation-loss Audit (Figma → CSS Incompatibilities)
|
|
309
|
+
|
|
310
|
+
The extractor flags properties CSS cannot reproduce cleanly (per-node `warnings[]`, rolled up as root `auditSummary`).
|
|
311
|
+
|
|
312
|
+
**P1 (block Phase 3 until resolved or waived):** `strokeAlign` ≠ `CENTER` (CSS border only renders centered strokes) · `blendMode` ∈ { `LINEAR_BURN`, `LINEAR_DODGE`, `PLUS_DARKER`, `PLUS_LIGHTER` } (no CSS equivalent).
|
|
313
|
+
|
|
314
|
+
**P2 (record + proceed):** `leadingTrim`/`textBoxTrim` ≠ `NONE` (limited `text-box-trim` support) · `constraints` ∈ { `SCALE`, `CENTER` } (no direct CSS layout mapping) · `individualStrokeWeights` with `strokeAlign` ≠ `CENTER`.
|
|
315
|
+
|
|
316
|
+
**Gate rule:** if `auditSummary.p1 > 0`, resolve each item (replace layer in Figma, accept approximation with user sign-off, or mark as known deviation) before Phase 3. Log P2 items into feature notes for Phase 6 reviewer attention.
|
|
317
|
+
|
|
318
|
+
### E3. Image Assets — Node Rendering Based
|
|
319
|
+
|
|
320
|
+
Full determination rules and real-world failure cases: `rubrics/image-rules.md`.
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
Do NOT download imageRef individually (shared texture fill → multi-MB originals).
|
|
324
|
+
All images are rendered as nodes:
|
|
325
|
+
node "{{VIBE_PATH}}/hooks/scripts/figma-extract.js" screenshot {fileKey} {nodeId} --out=...
|
|
326
|
+
|
|
327
|
+
BG frames → bg/{section}-bg.webp
|
|
328
|
+
Identification: name contains "BG"/"bg", OR same size as parent (±10%) + 3+ child images
|
|
329
|
+
Content nodes → content/{name}.webp
|
|
330
|
+
Icons (VECTOR/GROUP ≤ 64px) · item/reward/token/coin thumbnails
|
|
331
|
+
· vector-text GROUPs (3+ VECTORs, each <60px)
|
|
332
|
+
· design text (TEXT with 2+ fills, effects, GRADIENT fill, or non-web-font fontFamily)
|
|
333
|
+
→ must be rendered; placed as <img alt="text content">, never CSS text
|
|
334
|
+
· decorative panels (textured backgrounds) → render like BG frames
|
|
335
|
+
|
|
336
|
+
imageRef download is a fallback only (API failure, DOCUMENT level); >5MB → texture-fill warning.
|
|
337
|
+
Screenshots (validation only): full-screenshot.webp + per 1-depth child → sections/{name}.webp
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### E4. Extraction Completion Validation (Required Before Phase 3)
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
If any item is missing → re-extract (do NOT proceed to Phase 3)
|
|
344
|
+
|
|
345
|
+
1. tree.json exists + root children > 0 · 2. BG per section exists in bg/
|
|
346
|
+
3. Every design-text TEXT node (2+ fills or effects) rendered in content/
|
|
347
|
+
4. Every vector-text GROUP (3+ VECTORs) rendered in content/
|
|
348
|
+
5. Per-section validation screenshots exist in sections/ · 6. All filenames kebab-case
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Convert Mode (Phase 4 body) — Tree-Based Structured Code Generation
|
|
354
|
+
|
|
355
|
+
**Mechanically map sections.json to HTML. Do not guess.**
|
|
356
|
+
**The active harness handles only semantic decisions (tag selection, component separation, interactions). SCSS comes from figma-to-scss.js (Phase 4 blocking commands).**
|
|
357
|
+
|
|
358
|
+
### C0. Reuse Check (Before Writing Code)
|
|
359
|
+
|
|
360
|
+
```
|
|
361
|
+
Matching component in component-index.json?
|
|
362
|
+
✅ Import and customize via props — do not create a new one
|
|
363
|
+
❌ Never modify an existing component's internals or duplicate a 90%-similar one
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### C1. Image vs HTML Determination (BLOCKING)
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
⛔ Before writing code: write the determination table first.
|
|
370
|
+
|
|
371
|
+
YES on any one → HTML:
|
|
372
|
+
Q1. TEXT children? · Q2. repeating INSTANCE? (→ v-for, inner assets only as <img>)
|
|
373
|
+
Q3. interactive? (btn, CTA → <button>) · Q4. dynamic data? (price, quantity, duration)
|
|
374
|
+
All NO → image rendering is acceptable
|
|
375
|
+
|
|
376
|
+
⛔ Design text (Q1 exception — must be image; D1–D5, same as Extract Mode E3):
|
|
377
|
+
D1. 2+ fills · D2. effects (DROP_SHADOW, stroke) · D3. GRADIENT fill
|
|
378
|
+
D4. parent GROUP/FRAME has 3+ VECTORs · D5. fontFamily not in project web fonts
|
|
379
|
+
→ <img src="content/{section}-{name}.webp" alt="text content"> — no CSS text attempt
|
|
380
|
+
|
|
381
|
+
BG frames: ❌ no <img> tags — parent SCSS background-image only
|
|
382
|
+
.section { background-image: url('bg.webp'); background-size: cover; }
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### C2. Node → HTML Mapping (Mechanical)
|
|
386
|
+
|
|
387
|
+
```
|
|
388
|
+
FRAME + Auto Layout → <div> + flex (direction/gap/padding directly mapped)
|
|
389
|
+
FRAME + no Auto Layout → <div> + position:relative (children absolute)
|
|
390
|
+
TEXT → <span> (Claude promotes to h2/p/button)
|
|
391
|
+
IMAGE fill (passed determination) → <img>
|
|
392
|
+
VECTOR/GROUP ≤64px → icon <img>
|
|
393
|
+
INSTANCE repeated 2+ → v-for / .map()
|
|
394
|
+
Size 0px, VECTOR ≤2px → skip
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
CSS property mapping reference (grounding for figma-to-scss.js output review, plus legacy vw/responsive rules): `rubrics/css-mapping.md` — Phase 4 forbids hand-writing these values.
|
|
398
|
+
|
|
399
|
+
### C3. Claude Semantic Decisions (The Only Inference Area)
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
1. Tag promotion: <span> → <h2> (section title) / <p> (description) / <button> (clickable)
|
|
403
|
+
2. Component separation: 1st-depth children = sections, INSTANCE repetition = shared
|
|
404
|
+
3. Interactions: @click handlers, state variables, conditional rendering
|
|
405
|
+
4. Accessibility: decorative → alt="" aria-hidden="true" · content → alt="description"
|
|
406
|
+
· interactive → role, aria-label
|
|
407
|
+
5. Semantic HTML: top-level <section>, heading order h1~h6, lists <ul>/<ol>
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Component skeleton template: `templates/component.md`.
|
|
411
|
+
|
|
412
|
+
### C4. SCSS File Structure
|
|
413
|
+
|
|
414
|
+
```
|
|
415
|
+
layout/ → position, display, flex, width, height, padding, gap, overflow, z-index
|
|
416
|
+
components/ → font, color, border, shadow, opacity, background
|
|
417
|
+
_base.scss → .{feature} { width: 100%; max-width: 720px; margin: 0 auto; overflow-x: hidden; }
|
|
418
|
+
_tokens.scss → reference existing tokens (@use); if no mapping, create a new
|
|
419
|
+
feature-scoped token ($feature-color-xxx)
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### C5. Self-Validation
|
|
423
|
+
|
|
424
|
+
```
|
|
425
|
+
⛔ Any failure → rewrite that section's code (do not proceed to the next section)
|
|
426
|
+
|
|
427
|
+
1. All template classes defined in SCSS · 2. Image src files actually exist
|
|
428
|
+
3. Auto Layout node → flex present in SCSS
|
|
429
|
+
4. ⛔ No @function/@mixin defined in SCSS (existing token @use is allowed)
|
|
430
|
+
5. ⛔ Every SCSS property grounded in sections.json css object
|
|
431
|
+
(aspect-ratio, container queries, etc. not in the tree → FAIL)
|
|
432
|
+
6. ⛔ Image filenames kebab-case (hash filenames like 68ad470b.webp → FAIL)
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Error Recovery
|
|
438
|
+
|
|
439
|
+
| Failure | Recovery |
|
|
440
|
+
|---------|----------|
|
|
441
|
+
| figma-extract.js script error | Node.js >=18? API token in config? Retry once. |
|
|
442
|
+
| Figma API 401 | Prompt user to set FIGMA_ACCESS_TOKEN in env or ~/.vibe/config.json |
|
|
443
|
+
| Figma API 404 | Verify fileKey from URL; check file is shared/accessible |
|
|
444
|
+
| Figma API 429 (rate limit) | Wait 60s, retry with reduced node scope (single page) |
|
|
445
|
+
| API timeout on large file | Split request by page via nodeId parameter |
|
|
446
|
+
| Screenshot download failure | Proceed with tree.json only (visual verification → manual) |
|
|
447
|
+
| tree.json missing in Phase 4 | Run Extract Mode (Phase 2) first |
|
|
448
|
+
| component-index.json missing | Generate minimal index from tree.json section names |
|
|
449
|
+
| sections.json malformed | Regenerate from tree.json via figma-refine.js |
|
|
450
|
+
| SCSS output empty | Check sections.json for valid style nodes; else default reset styles |
|
|
451
|
+
| figma-to-scss.js parse failure | Validate tree.json structure; if malformed, re-run Extract Mode |
|
|
452
|
+
| figma-validate.js comparison failure | Skip automated validation; screenshot side-by-side manual review |
|
|
453
|
+
| Puppeteer/CDP not available | Skip visual verification; manual browser check |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: vibe.git-worktree
|
|
3
3
|
invocation: [auto]
|
|
4
4
|
tier: optional
|
|
5
|
-
description: "
|
|
5
|
+
description: "Use when PR review, hotfix, parallel testing, or simultaneous branch work needs an isolated Git worktree."
|
|
6
6
|
triggers: [worktree, hotfix, parallel branch, multiple branches]
|
|
7
7
|
priority: 50
|
|
8
8
|
---
|
|
@@ -61,11 +61,7 @@ git worktree prune
|
|
|
61
61
|
|
|
62
62
|
## Troubleshooting
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|-------|-----|
|
|
66
|
-
| "already checked out" | Branch is in another worktree — `git worktree list`, then remove |
|
|
67
|
-
| Locked worktree | `git worktree unlock <path>` |
|
|
68
|
-
| Stale worktree | `git worktree prune` |
|
|
64
|
+
Read `references/troubleshooting.md` only when creation, locking, or cleanup fails. Successful calls do not load it.
|
|
69
65
|
|
|
70
66
|
## Done Criteria (K4)
|
|
71
67
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Worktree Troubleshooting
|
|
2
|
+
|
|
3
|
+
Load only after a worktree command fails.
|
|
4
|
+
|
|
5
|
+
| Error | Fix |
|
|
6
|
+
|-------|-----|
|
|
7
|
+
| "already checked out" | Branch is in another worktree — `git worktree list`, then remove |
|
|
8
|
+
| Locked worktree | `git worktree unlock <path>` |
|
|
9
|
+
| Stale worktree | `git worktree prune` |
|
|
@@ -1,112 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.handoff
|
|
3
|
+
description: Compatibility alias for generating HANDOFF.md before session end. Use for handoff, handover, session cleanup, or context-save requests.
|
|
3
4
|
user-invocable: false
|
|
4
5
|
invocation: [auto]
|
|
5
6
|
tier: standard
|
|
6
|
-
description: "Generate HANDOFF.md work handover document before session end. Auto-activates on handoff, handover, session cleanup keywords."
|
|
7
7
|
triggers: [handoff, handover, session cleanup, session end, context save]
|
|
8
8
|
priority: 60
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Record work status before session end so the next session can pick up immediately.
|
|
14
|
-
|
|
15
|
-
## What is HANDOFF.md?
|
|
16
|
-
|
|
17
|
-
A file that records the current work status before context reset. Reading this file in a new session allows immediate continuation.
|
|
18
|
-
|
|
19
|
-
### Difference from `/vibe.continue`
|
|
20
|
-
|
|
21
|
-
| Item | `/vibe.continue` | Handoff |
|
|
22
|
-
|------|--------------------------|---------|
|
|
23
|
-
| Method | Automatic session context restore | Manual handover document |
|
|
24
|
-
| Includes | Memory + session state | Work progress + notes + file list |
|
|
25
|
-
| When to use | At new session start | Before session end |
|
|
26
|
-
| Purpose | Quick auto-restore | Detailed handover (team/future self) |
|
|
27
|
-
|
|
28
|
-
## When to Use
|
|
29
|
-
|
|
30
|
-
- When context reaches 80-100k tokens
|
|
31
|
-
- After using `/compact` 3 times
|
|
32
|
-
- Before pausing work for an extended period
|
|
33
|
-
- When progress recording is needed during complex work
|
|
34
|
-
|
|
35
|
-
## VIBE Tool Integration
|
|
36
|
-
|
|
37
|
-
Use VIBE built-in tools to save current state before generating Handoff:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
# Save current session context
|
|
41
|
-
core_auto_save_context
|
|
42
|
-
|
|
43
|
-
# Save important decisions to memory
|
|
44
|
-
core_save_memory --key "handoff-decision" --value "Decided on JWT for auth" --category "project"
|
|
45
|
-
|
|
46
|
-
# Verify saved memories
|
|
47
|
-
core_list_memories --category "project"
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## HANDOFF.md Template
|
|
51
|
-
|
|
52
|
-
```markdown
|
|
53
|
-
# Work Handover Document
|
|
54
|
-
|
|
55
|
-
## Completed Tasks
|
|
56
|
-
- [x] Completed task 1
|
|
57
|
-
- [x] Completed task 2
|
|
58
|
-
|
|
59
|
-
## In Progress
|
|
60
|
-
- [ ] Currently working on
|
|
61
|
-
- Progress: 70%
|
|
62
|
-
- Next step: implement ~~
|
|
63
|
-
|
|
64
|
-
## Next Tasks
|
|
65
|
-
1. High priority task
|
|
66
|
-
2. Next task
|
|
67
|
-
|
|
68
|
-
## Notes & Cautions
|
|
69
|
-
- Do not touch: ~~
|
|
70
|
-
- Known bugs: ~~
|
|
71
|
-
- Temporary workarounds: ~~
|
|
72
|
-
|
|
73
|
-
## Related Files
|
|
74
|
-
- src/components/Login.tsx — Login form
|
|
75
|
-
- src/api/auth.ts — Auth API
|
|
76
|
-
|
|
77
|
-
## Last State
|
|
78
|
-
- Branch: feature/auth
|
|
79
|
-
- Last commit: abc1234
|
|
80
|
-
- Test status: passing
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Generation Steps
|
|
84
|
-
|
|
85
|
-
1. Check current changed files with `git status`
|
|
86
|
-
2. Check recent commits with `git log --oneline -5`
|
|
87
|
-
3. Organize in-progress and remaining tasks
|
|
88
|
-
4. Save session context with `core_auto_save_context`
|
|
89
|
-
5. Save key decisions with `core_save_memory`
|
|
90
|
-
6. Generate HANDOFF.md file
|
|
91
|
-
|
|
92
|
-
## Restoring in New Session
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
Read HANDOFF.md and continue working
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Or use alongside VIBE auto-restore:
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
/vibe.continue
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
In this case, saved decisions are also restored via `core_recall_memory`.
|
|
105
|
-
|
|
106
|
-
## Done Criteria (K4)
|
|
107
|
-
|
|
108
|
-
- [ ] HANDOFF.md created with all sections filled
|
|
109
|
-
- [ ] Completed/in-progress/next tasks accurately listed
|
|
110
|
-
- [ ] Related files section includes all modified files
|
|
111
|
-
- [ ] Session context saved via `core_auto_save_context`
|
|
112
|
-
- [ ] Key decisions saved via `core_save_memory`
|
|
11
|
+
Load `vibe.continue` in handoff mode and preserve all arguments.
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.harness
|
|
3
|
-
description:
|
|
3
|
+
description: 프로젝트의 Claude Code·Codex 하네스 품질과 병목을 진단하거나 6축 성숙도 점수가 필요할 때 사용한다.
|
|
4
4
|
argument-hint: (no arguments)
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# /vibe.harness
|
|
9
9
|
|
|
10
|
+
## 완료 기준
|
|
11
|
+
|
|
12
|
+
- [ ] 6개 평가 축에 각각 점수와 파일 근거가 있다.
|
|
13
|
+
- [ ] 적용할 수 없는 하네스 항목은 감점 대신 N/A로 기록되어 있다.
|
|
14
|
+
- [ ] P1 finding마다 검사 명령 또는 파일 위치가 있다.
|
|
15
|
+
- [ ] harness 보고서가 지정 경로에 존재한다.
|
|
16
|
+
|
|
10
17
|
Diagnose project Harness Engineering maturity across 6 axes and suggest targeted improvements.
|
|
11
18
|
|
|
12
19
|
> Harness = the working environment that enables AI to operate effectively on its own.
|
|
@@ -28,19 +35,17 @@ When items are N/A, **remove their points from the total** rather than scoring 0
|
|
|
28
35
|
|
|
29
36
|
## Process
|
|
30
37
|
|
|
31
|
-
### 1. Collect Project State (Parallel
|
|
38
|
+
### 1. Collect Project State (Parallel Delegation)
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
Delegate the three independent inspections through the harness's native
|
|
41
|
+
collaboration capability. Claude Code maps each worker to Task/Agent; Codex
|
|
42
|
+
maps each worker to native collaboration. Inherit the session model by default
|
|
43
|
+
and dispatch concurrently when capacity permits:
|
|
34
44
|
|
|
35
45
|
```text
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Agent(subagent_type="Explore", model="haiku",
|
|
40
|
-
prompt="Check project context and boundaries: 1) Does CLAUDE.md exist? How many lines? 2) Does .claude/rules/ or .vibe/ exist? How many rule files? 3) Does .claude/settings.local.json exist with hooks? 4) Does .vibe/config.json exist? 5) Are there any .claude/skills/ directories?")
|
|
41
|
-
|
|
42
|
-
Agent(subagent_type="Explore", model="haiku",
|
|
43
|
-
prompt="Check project planning, execution, and verification: 1) Are there SPEC files in .vibe/specs/? 2) Are there Feature (BDD) files in .vibe/features/? 3) Are there test files? How many? 4) Is there CI config (.github/workflows, etc.)? 5) Are there .dev/learnings/ files?")
|
|
46
|
+
- Worker: check scaffolding, docs/.dev presence, source organization, test separation, and top-level structure.
|
|
47
|
+
- Worker: check `CLAUDE.md`/`AGENTS.md`, harness rules, lifecycle configuration, `.vibe/config.json`, and installed skills.
|
|
48
|
+
- Worker: check SPEC/Feature files, tests, CI configuration, and learning records.
|
|
44
49
|
```
|
|
45
50
|
|
|
46
51
|
### 2. Score Each Axis
|
|
@@ -89,7 +94,7 @@ Agent(subagent_type="Explore", model="haiku",
|
|
|
89
94
|
|
|
90
95
|
| Item | Criteria | Points |
|
|
91
96
|
|------|----------|--------|
|
|
92
|
-
| Automated quality checks |
|
|
97
|
+
| Automated quality checks | Explicit lint/type/test/JUDGE commands; lifecycle hooks may accelerate them | /4 |
|
|
93
98
|
| Tests exist | Test files present and executable | /4 |
|
|
94
99
|
| CI/CD | Automated build/test pipeline configured | /4 |
|
|
95
100
|
| Traceability | SPEC → code → test mapping (RTM) | /3 |
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe.image
|
|
3
|
-
description:
|
|
3
|
+
description: 아이콘·배너·목업 같은 래스터 이미지 산출물이 필요할 때 Antigravity 이미지 backend로 생성한다.
|
|
4
4
|
argument-hint: '"description" [--pro] [--icon "AppName"] [--size WxH]'
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# /vibe.image
|
|
9
9
|
|
|
10
|
+
## Done Criteria
|
|
11
|
+
|
|
12
|
+
- [ ] 요청된 이미지 파일이 지정 경로에 존재한다.
|
|
13
|
+
- [ ] 파일 형식과 픽셀 크기가 요청값과 일치한다.
|
|
14
|
+
- [ ] 투명 배경 요청 시 alpha channel이 존재한다.
|
|
15
|
+
- [ ] 생성 결과 경로가 최종 응답에 포함된다.
|
|
16
|
+
|
|
10
17
|
Generate images using the Antigravity image backend.
|
|
11
18
|
|
|
12
19
|
- **Default**: Antigravity fast image - 빠르고 가벼운 이미지 생성
|