@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,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: "Git Worktree for parallel branch work. Auto-activates for PR review, hotfix, parallel testing, or working on multiple branches simultaneously."
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
- | Error | Fix |
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
- # Handoff Session Handover Document
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: Diagnose project Harness Engineering maturity across 6 axes
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 Agents)
38
+ ### 1. Collect Project State (Parallel Delegation)
32
39
 
33
- Dispatch 3 native Explore agents in a single message:
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
- Agent(subagent_type="Explore", model="haiku",
37
- prompt="Check project scaffolding: 1) Does docs/ exist with business documents? 2) Does .dev/ exist for AI logs? 3) Is src/ organized by role (not flat)? 4) Is tests/ separate from src/? 5) List top-level directory structure.")
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 | PostToolUse hooks for code inspection | /4 |
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: Generate images (icons, banners, mockups) using the Antigravity image backend.
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 - 빠르고 가벼운 이미지 생성