@su-record/vibe 3.2.1 → 3.2.3

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 (236) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.en.md +4 -4
  3. package/README.md +4 -4
  4. package/dist/__tests__/skill-namespace.test.d.ts +2 -0
  5. package/dist/__tests__/skill-namespace.test.d.ts.map +1 -0
  6. package/dist/__tests__/skill-namespace.test.js +60 -0
  7. package/dist/__tests__/skill-namespace.test.js.map +1 -0
  8. package/dist/__tests__/stakes-contract.test.d.ts +2 -0
  9. package/dist/__tests__/stakes-contract.test.d.ts.map +1 -0
  10. package/dist/__tests__/stakes-contract.test.js +110 -0
  11. package/dist/__tests__/stakes-contract.test.js.map +1 -0
  12. package/dist/__tests__/wiring-integrity.test.js +5 -5
  13. package/dist/__tests__/wiring-integrity.test.js.map +1 -1
  14. package/dist/cli/generate-release-notes.d.ts +3 -0
  15. package/dist/cli/generate-release-notes.d.ts.map +1 -0
  16. package/dist/cli/generate-release-notes.js +47 -0
  17. package/dist/cli/generate-release-notes.js.map +1 -0
  18. package/dist/cli/postinstall/constants.d.ts +6 -6
  19. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  20. package/dist/cli/postinstall/constants.js +114 -46
  21. package/dist/cli/postinstall/constants.js.map +1 -1
  22. package/dist/cli/postinstall/fs-utils.d.ts +1 -0
  23. package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
  24. package/dist/cli/postinstall/fs-utils.js +25 -0
  25. package/dist/cli/postinstall/fs-utils.js.map +1 -1
  26. package/dist/cli/postinstall/fs-utils.test.js +46 -11
  27. package/dist/cli/postinstall/fs-utils.test.js.map +1 -1
  28. package/dist/cli/postinstall/main.d.ts.map +1 -1
  29. package/dist/cli/postinstall/main.js +3 -2
  30. package/dist/cli/postinstall/main.js.map +1 -1
  31. package/dist/tests/curated-release-notes.test.d.ts +2 -0
  32. package/dist/tests/curated-release-notes.test.d.ts.map +1 -0
  33. package/dist/tests/curated-release-notes.test.js +106 -0
  34. package/dist/tests/curated-release-notes.test.js.map +1 -0
  35. package/dist/tools/release/releaseNotes.d.ts +21 -0
  36. package/dist/tools/release/releaseNotes.d.ts.map +1 -0
  37. package/dist/tools/release/releaseNotes.js +105 -0
  38. package/dist/tools/release/releaseNotes.js.map +1 -0
  39. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
  40. package/package.json +2 -2
  41. package/skills/vibe/SKILL.md +14 -0
  42. package/skills/{agents-md → vibe.agents-md}/SKILL.md +1 -1
  43. package/skills/{brand-assets → vibe.brand-assets}/SKILL.md +1 -1
  44. package/skills/{capability-loop → vibe.capability-loop}/SKILL.md +1 -1
  45. package/skills/{chub-usage → vibe.chub-usage}/SKILL.md +1 -1
  46. package/skills/vibe.clone/SKILL.md +295 -3
  47. package/skills/{commerce-patterns → vibe.commerce-patterns}/SKILL.md +1 -1
  48. package/skills/{commit-push-pr → vibe.commit-push-pr}/SKILL.md +2 -2
  49. package/skills/{context7-usage → vibe.context7-usage}/SKILL.md +1 -1
  50. package/skills/vibe.contract/SKILL.md +162 -1
  51. package/skills/{create-prd → vibe.create-prd}/SKILL.md +2 -2
  52. package/skills/{design-refine → vibe.design-refine}/SKILL.md +1 -1
  53. package/skills/{design-review → vibe.design-review}/SKILL.md +1 -1
  54. package/skills/{design-teach → vibe.design-teach}/SKILL.md +1 -1
  55. package/skills/{devlog → vibe.devlog}/SKILL.md +1 -1
  56. package/skills/vibe.docs/SKILL.md +256 -1
  57. package/skills/{e2e-commerce → vibe.e2e-commerce}/SKILL.md +1 -1
  58. package/skills/vibe.educational-content/SKILL.md +157 -0
  59. package/skills/vibe.educational-content/references/learning-design.md +81 -0
  60. package/skills/vibe.educational-content/references/output-patterns.md +109 -0
  61. package/skills/vibe.educational-content/references/source-method.md +40 -0
  62. package/skills/{event-comms → vibe.event-comms}/SKILL.md +1 -1
  63. package/skills/{event-ops → vibe.event-ops}/SKILL.md +1 -1
  64. package/skills/{event-planning → vibe.event-planning}/SKILL.md +1 -1
  65. package/skills/vibe.figma/SKILL.md +473 -21
  66. package/skills/vibe.figma/references/branch-phases.md +1 -1
  67. package/skills/{git-worktree → vibe.git-worktree}/SKILL.md +1 -1
  68. package/skills/{handoff → vibe.handoff}/SKILL.md +1 -1
  69. package/skills/{parallel-research → vibe.parallel-research}/SKILL.md +2 -2
  70. package/skills/{presentation → vibe.presentation}/SKILL.md +1 -1
  71. package/skills/{prioritization-frameworks → vibe.prioritization}/SKILL.md +2 -2
  72. package/skills/{priority-todos → vibe.priority-todos}/SKILL.md +1 -1
  73. package/skills/{vercel-react-best-practices → vibe.react-best-practices}/SKILL.md +1 -1
  74. package/skills/vibe.regress/SKILL.md +182 -2
  75. package/skills/vibe.review/SKILL.md +8 -0
  76. package/skills/vibe.run/SKILL.md +392 -1
  77. package/skills/{arch-guard → vibe.run/internal/arch-guard}/templates/violation-report.md +1 -1
  78. package/skills/{seo-checklist → vibe.seo-checklist}/SKILL.md +1 -1
  79. package/skills/vibe.spec/SKILL.md +123 -1
  80. package/skills/vibe.test/SKILL.md +138 -2
  81. package/skills/{tool-fallback → vibe.tool-fallback}/SKILL.md +1 -1
  82. package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/SKILL.md +6 -6
  83. package/skills/{user-personas → vibe.user-personas}/SKILL.md +2 -2
  84. package/skills/vibe.verify/SKILL.md +2 -2
  85. package/skills/{video-production → vibe.video-production}/SKILL.md +1 -1
  86. package/vibe/rules/loop-contract.md +18 -0
  87. package/skills/arch-guard/SKILL.md +0 -183
  88. package/skills/clone/SKILL.md +0 -296
  89. package/skills/contract/SKILL.md +0 -165
  90. package/skills/docs/SKILL.md +0 -259
  91. package/skills/exec-plan/SKILL.md +0 -151
  92. package/skills/figma/SKILL.md +0 -456
  93. package/skills/regress/SKILL.md +0 -184
  94. package/skills/restraint/SKILL.md +0 -72
  95. package/skills/spec/SKILL.md +0 -125
  96. package/skills/test/SKILL.md +0 -140
  97. /package/skills/{agents-md → vibe.agents-md}/rubrics/what-to-keep.md +0 -0
  98. /package/skills/{agents-md → vibe.agents-md}/templates/agents-md.md +0 -0
  99. /package/skills/{agents-md → vibe.agents-md}/templates/claude-md.md +0 -0
  100. /package/skills/{brand-assets → vibe.brand-assets}/rubrics/asset-checklist.md +0 -0
  101. /package/skills/{brand-assets → vibe.brand-assets}/templates/brand-guide.md +0 -0
  102. /package/skills/{capability-loop → vibe.capability-loop}/agents/capability-designer.md +0 -0
  103. /package/skills/{capability-loop → vibe.capability-loop}/agents/failure-analyst.md +0 -0
  104. /package/skills/{capability-loop → vibe.capability-loop}/agents/implementer.md +0 -0
  105. /package/skills/{capability-loop → vibe.capability-loop}/agents/tester.md +0 -0
  106. /package/skills/{capability-loop → vibe.capability-loop}/templates/capability-spec.md +0 -0
  107. /package/skills/{capability-loop → vibe.capability-loop}/templates/failure-analysis.md +0 -0
  108. /package/skills/{clone → vibe.clone}/references/capture-rules.md +0 -0
  109. /package/skills/{clone → vibe.clone}/references/legal-and-error-recovery.md +0 -0
  110. /package/skills/{clone → vibe.clone}/references/refine-rules.md +0 -0
  111. /package/skills/{clone → vibe.clone}/references/scaffold-phases.md +0 -0
  112. /package/skills/{clone → vibe.clone}/references/setup-and-layout.md +0 -0
  113. /package/skills/{commerce-patterns → vibe.commerce-patterns}/rubrics/checkout-flow.md +0 -0
  114. /package/skills/{commerce-patterns → vibe.commerce-patterns}/templates/product-schema.md +0 -0
  115. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/change-analyzer.md +0 -0
  116. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/message-writer.md +0 -0
  117. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/pr-writer.md +0 -0
  118. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/reviewer.md +0 -0
  119. /package/skills/{commit-push-pr → vibe.commit-push-pr}/rubrics/commit-message.md +0 -0
  120. /package/skills/{commit-push-pr → vibe.commit-push-pr}/templates/pr-body.md +0 -0
  121. /package/skills/{context7-usage → vibe.context7-usage}/rubrics/when-to-use.md +0 -0
  122. /package/skills/{create-prd → vibe.create-prd}/agents/edge-case-finder.md +0 -0
  123. /package/skills/{create-prd → vibe.create-prd}/agents/prioritizer.md +0 -0
  124. /package/skills/{create-prd → vibe.create-prd}/agents/requirements-writer.md +0 -0
  125. /package/skills/{create-prd → vibe.create-prd}/agents/researcher.md +0 -0
  126. /package/skills/{create-prd → vibe.create-prd}/agents/reviewer.md +0 -0
  127. /package/skills/{create-prd → vibe.create-prd}/frameworks/jobs-to-be-done.md +0 -0
  128. /package/skills/{create-prd → vibe.create-prd}/frameworks/rice-scoring.md +0 -0
  129. /package/skills/{create-prd → vibe.create-prd}/orchestrator.md +0 -0
  130. /package/skills/{create-prd → vibe.create-prd}/rubrics/completeness.md +0 -0
  131. /package/skills/{create-prd → vibe.create-prd}/templates/prd.md +0 -0
  132. /package/skills/{design-refine → vibe.design-refine}/rubrics/polish-checklist.md +0 -0
  133. /package/skills/{design-refine → vibe.design-refine}/rubrics/token-naming.md +0 -0
  134. /package/skills/{design-refine → vibe.design-refine}/templates/design-system.md +0 -0
  135. /package/skills/{design-refine → vibe.design-refine}/templates/polish-report.md +0 -0
  136. /package/skills/{design-refine → vibe.design-refine}/templates/token-audit.md +0 -0
  137. /package/skills/{design-review → vibe.design-review}/agents/a11y-auditor.md +0 -0
  138. /package/skills/{design-review → vibe.design-review}/agents/performance-auditor.md +0 -0
  139. /package/skills/{design-review → vibe.design-review}/agents/responsive-auditor.md +0 -0
  140. /package/skills/{design-review → vibe.design-review}/agents/scorer.md +0 -0
  141. /package/skills/{design-review → vibe.design-review}/agents/slop-detector.md +0 -0
  142. /package/skills/{design-review → vibe.design-review}/frameworks/core-web-vitals.md +0 -0
  143. /package/skills/{design-review → vibe.design-review}/frameworks/wcag-checklist.md +0 -0
  144. /package/skills/{design-review → vibe.design-review}/orchestrator.md +0 -0
  145. /package/skills/{design-review → vibe.design-review}/rubrics/ai-slop-patterns.md +0 -0
  146. /package/skills/{design-review → vibe.design-review}/rubrics/scoring.md +0 -0
  147. /package/skills/{design-review → vibe.design-review}/rubrics/ux-heuristics.md +0 -0
  148. /package/skills/{design-review → vibe.design-review}/templates/critique-report.md +0 -0
  149. /package/skills/{design-review → vibe.design-review}/templates/report.md +0 -0
  150. /package/skills/{design-teach → vibe.design-teach}/rubrics/brand-personality.md +0 -0
  151. /package/skills/{design-teach → vibe.design-teach}/templates/design-context.json +0 -0
  152. /package/skills/{docs → vibe.docs}/references/api-docs-changelog.md +0 -0
  153. /package/skills/{docs → vibe.docs}/references/codemaps-output.md +0 -0
  154. /package/skills/{docs → vibe.docs}/references/diagram-spec.md +0 -0
  155. /package/skills/{docs → vibe.docs}/templates/architecture.md +0 -0
  156. /package/skills/{docs → vibe.docs}/templates/behavioral-principles.md +0 -0
  157. /package/skills/{docs → vibe.docs}/templates/readme.md +0 -0
  158. /package/skills/{docs → vibe.docs}/templates/release-notes.md +0 -0
  159. /package/skills/{e2e-commerce → vibe.e2e-commerce}/templates/test-scenarios.md +0 -0
  160. /package/skills/{event-comms → vibe.event-comms}/templates/email-invite.md +0 -0
  161. /package/skills/{event-comms → vibe.event-comms}/templates/sns-post.md +0 -0
  162. /package/skills/{event-ops → vibe.event-ops}/rubrics/contingency.md +0 -0
  163. /package/skills/{event-ops → vibe.event-ops}/templates/d-day-checklist.md +0 -0
  164. /package/skills/{event-planning → vibe.event-planning}/rubrics/timeline.md +0 -0
  165. /package/skills/{event-planning → vibe.event-planning}/templates/event-plan.md +0 -0
  166. /package/skills/{figma → vibe.figma}/rubrics/conversion-rules.md +0 -0
  167. /package/skills/{figma → vibe.figma}/rubrics/css-mapping.md +0 -0
  168. /package/skills/{figma → vibe.figma}/rubrics/extraction-checklist.md +0 -0
  169. /package/skills/{figma → vibe.figma}/rubrics/image-rules.md +0 -0
  170. /package/skills/{figma → vibe.figma}/templates/component-index.md +0 -0
  171. /package/skills/{figma → vibe.figma}/templates/component-spec.md +0 -0
  172. /package/skills/{figma → vibe.figma}/templates/component.md +0 -0
  173. /package/skills/{figma → vibe.figma}/templates/figma-handoff.md +0 -0
  174. /package/skills/{figma → vibe.figma}/templates/remapped-tree.md +0 -0
  175. /package/skills/{git-worktree → vibe.git-worktree}/rubrics/when-to-use.md +0 -0
  176. /package/skills/{handoff → vibe.handoff}/agents/context-summarizer.md +0 -0
  177. /package/skills/{handoff → vibe.handoff}/agents/document-writer.md +0 -0
  178. /package/skills/{handoff → vibe.handoff}/agents/state-collector.md +0 -0
  179. /package/skills/{handoff → vibe.handoff}/agents/verifier.md +0 -0
  180. /package/skills/{handoff → vibe.handoff}/rubrics/completeness.md +0 -0
  181. /package/skills/{handoff → vibe.handoff}/templates/handoff.md +0 -0
  182. /package/skills/{parallel-research → vibe.parallel-research}/agents/best-practices.md +0 -0
  183. /package/skills/{parallel-research → vibe.parallel-research}/agents/codebase-patterns.md +0 -0
  184. /package/skills/{parallel-research → vibe.parallel-research}/agents/framework-docs.md +0 -0
  185. /package/skills/{parallel-research → vibe.parallel-research}/agents/security-advisory.md +0 -0
  186. /package/skills/{parallel-research → vibe.parallel-research}/agents/synthesizer.md +0 -0
  187. /package/skills/{parallel-research → vibe.parallel-research}/experts/best-practices.md +0 -0
  188. /package/skills/{parallel-research → vibe.parallel-research}/experts/codebase-patterns.md +0 -0
  189. /package/skills/{parallel-research → vibe.parallel-research}/experts/framework-docs.md +0 -0
  190. /package/skills/{parallel-research → vibe.parallel-research}/experts/security-advisory.md +0 -0
  191. /package/skills/{parallel-research → vibe.parallel-research}/orchestrator.md +0 -0
  192. /package/skills/{parallel-research → vibe.parallel-research}/templates/awesome-list.md +0 -0
  193. /package/skills/{parallel-research → vibe.parallel-research}/templates/paper.md +0 -0
  194. /package/skills/{parallel-research → vibe.parallel-research}/templates/synthesis.md +0 -0
  195. /package/skills/{presentation → vibe.presentation}/references/style-presets.md +0 -0
  196. /package/skills/{prioritization-frameworks → vibe.prioritization}/rubrics/frameworks.md +0 -0
  197. /package/skills/{prioritization-frameworks → vibe.prioritization}/templates/scoring-matrix.md +0 -0
  198. /package/skills/{priority-todos → vibe.priority-todos}/rubrics/prioritization.md +0 -0
  199. /package/skills/{priority-todos → vibe.priority-todos}/templates/todo-board.md +0 -0
  200. /package/skills/{vercel-react-best-practices → vibe.react-best-practices}/rubrics/performance.md +0 -0
  201. /package/skills/{vercel-react-best-practices → vibe.react-best-practices}/rubrics/server-components.md +0 -0
  202. /package/skills/{regress → vibe.regress}/templates/bug.md +0 -0
  203. /package/skills/{regress → vibe.regress}/templates/test-jest.md +0 -0
  204. /package/skills/{regress → vibe.regress}/templates/test-vitest.md +0 -0
  205. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/detector.md +0 -0
  206. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/reporter.md +0 -0
  207. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/rule-generator.md +0 -0
  208. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/violation-checker.md +0 -0
  209. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/frameworks/clean-architecture.md +0 -0
  210. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/frameworks/solid.md +0 -0
  211. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/scripts/check-boundaries.js +0 -0
  212. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/templates/arch-rules.json +0 -0
  213. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/decomposer.md +0 -0
  214. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/dependency-mapper.md +0 -0
  215. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/estimator.md +0 -0
  216. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/validator.md +0 -0
  217. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/orchestrator.md +0 -0
  218. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/rubrics/complexity-scoring.md +0 -0
  219. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/templates/plan.md +0 -0
  220. /package/skills/{seo-checklist → vibe.seo-checklist}/frameworks/structured-data.md +0 -0
  221. /package/skills/{seo-checklist → vibe.seo-checklist}/rubrics/content-seo.md +0 -0
  222. /package/skills/{seo-checklist → vibe.seo-checklist}/rubrics/technical-seo.md +0 -0
  223. /package/skills/{tool-fallback → vibe.tool-fallback}/rubrics/fallback-chain.md +0 -0
  224. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/color-and-contrast.md +0 -0
  225. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/interaction-design.md +0 -0
  226. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/motion-design.md +0 -0
  227. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/responsive-design.md +0 -0
  228. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/spatial-design.md +0 -0
  229. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/typography.md +0 -0
  230. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/ux-writing.md +0 -0
  231. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/rubrics/interaction-states.md +0 -0
  232. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/rubrics/responsive-breakpoints.md +0 -0
  233. /package/skills/{user-personas → vibe.user-personas}/rubrics/research-methods.md +0 -0
  234. /package/skills/{user-personas → vibe.user-personas}/templates/persona.md +0 -0
  235. /package/skills/{video-production → vibe.video-production}/rubrics/quality-checklist.md +0 -0
  236. /package/skills/{video-production → vibe.video-production}/templates/production-plan.md +0 -0
@@ -31,7 +31,7 @@ Figma와 코드 사이의 **양방향 라우터**. 인자 조합으로 분기를
31
31
  /vibe.figma --teach # 어느 branch든 design-teach를 인터랙티브로 강제
32
32
  ```
33
33
 
34
- > **URL 분류는 `figma` 스킬이 자동 처리합니다** — fileKey가 다른 URL은 스토리보드 vs 디자인으로, ROOT 노드 name의 "MO"/"PC"로 디바이스를 구분합니다. 사용자는 URL 종류를 신경 쓰지 않고 한 번에 던지면 됩니다.
34
+ > **URL 분류는 자동 처리됩니다** — fileKey가 다른 URL은 스토리보드 vs 디자인으로, ROOT 노드 name의 "MO"/"PC"로 디바이스를 구분합니다. 사용자는 URL 종류를 신경 쓰지 않고 한 번에 던지면 됩니다.
35
35
 
36
36
  ## Branch Routing (필수: 첫 단계에서 결정)
37
37
 
@@ -120,18 +120,18 @@ AskUserQuestion 사용 시 절대 선택지(options) 제공 금지. 자유 텍
120
120
  ### Phase 0 — Setup + URL 수집 + Project Context
121
121
 
122
122
  ```
123
- 2. Load skill `figma` — Phase 0 Setup
123
+ 2. Execute the bundled implementation below — Phase 0 Setup
124
124
  → 스택 감지, 디렉토리, 피처명, component-index.json, project-tokens.json
125
125
 
126
126
  > Read `references/branch-phases.md` for URL pre-collection rules and the design-context loading algorithm (Phase 0, Branch 1).
127
127
 
128
- - hasTeach == true → 이때만 Load skill `design-teach`로 인터랙티브 진입
128
+ - hasTeach == true → 이때만 Load skill `vibe.design-teach`로 인터랙티브 진입
129
129
  ```
130
130
 
131
131
  ### Phase 1 — Storyboard 분석 (선택)
132
132
 
133
133
  ```
134
- Load skill `figma` — Phase 1 Storyboard
134
+ Execute the bundled implementation below — Phase 1 Storyboard
135
135
  ```
136
136
 
137
137
  > Read `references/branch-phases.md` for the storyboard auto-detect/auto-skip rule and output scope (Branch 1, Phase 1).
@@ -139,7 +139,7 @@ Load skill `figma` — Phase 1 Storyboard
139
139
  ### Phase 2 — 재료 확보
140
140
 
141
141
  ```
142
- Load skill `figma` — Phase 2 Extract Mode (코디네이터: MO/PC 병렬 워커)
142
+ Execute the bundled implementation below — Phase 2 Extract Mode (코디네이터: MO/PC 병렬 워커)
143
143
  → tree.json + bg/ + content/ + sections/ (검증용)
144
144
  ```
145
145
 
@@ -148,7 +148,7 @@ Load skill `figma` — Phase 2 Extract Mode (코디네이터: MO/PC 병렬 워
148
148
  ### Phase 3 — 데이터 정제
149
149
 
150
150
  ```
151
- Load skill `figma` — Phase 3
151
+ Execute the bundled implementation below — Phase 3
152
152
  ⛔ figma-refine.js 강제 (자체 정제 스크립트 금지)
153
153
  → /tmp/{feature}/{bp}-main/sections.json
154
154
  ```
@@ -156,10 +156,10 @@ Load skill `figma` — Phase 3
156
156
  ### Phase 4 — BP별 스태틱 구현 (컨벤션 준수)
157
157
 
158
158
  ```
159
- Load skill `figma` — Phase 4 Convert Mode
159
+ Execute the bundled implementation below — Phase 4 Convert Mode
160
160
 
161
161
  ⤵ Phase 4 후처리
162
- Load skill `design-refine` — normalize 모드
162
+ Load skill `vibe.design-refine` — normalize 모드
163
163
  → 매칭 안 된 하드코딩 값 → MASTER.md 토큰으로 정렬
164
164
  → 새 토큰 필요 항목은 review 큐에 기록
165
165
  ```
@@ -169,17 +169,17 @@ Load skill `design-refine` — normalize 모드
169
169
  ### Phase 5 — 컴파일 게이트
170
170
 
171
171
  ```
172
- Load skill `figma` — Phase 5
172
+ Execute the bundled implementation below — Phase 5
173
173
  → tsc/build/dev 서버. P1=0까지 루프. Stuck → 사용자 질문.
174
174
  ```
175
175
 
176
176
  ### Phase 6 — 시각 검증 + 품질 점검 (MANDATORY)
177
177
 
178
178
  ```
179
- Load skill `figma` — Phase 6 (시각 검증 루프, P1=0까지)
179
+ Execute the bundled implementation below — Phase 6 (시각 검증 루프, P1=0까지)
180
180
 
181
181
  ⤵ Phase 6 후처리
182
- Load skill `design-review` — audit 모드
182
+ Load skill `vibe.design-review` — audit 모드
183
183
  → 5-dimension 점검 (a11y, performance, responsive, theming, AI slop)
184
184
  → P1 finding은 review 큐에 기록 (read-only)
185
185
 
@@ -200,7 +200,7 @@ Load skill `design-review` — audit 모드
200
200
  ### Phase 0 — Setup (Lite) + URL 수집
201
201
 
202
202
  ```
203
- 2. Load skill `figma` — Phase 0 Setup
203
+ 2. Execute the bundled implementation below — Phase 0 Setup
204
204
  ```
205
205
 
206
206
  > Read `references/branch-phases.md` for the URL-reuse note and the Phase 0 (Lite) skip list (component-index/project-tokens).
@@ -208,14 +208,14 @@ Load skill `design-review` — audit 모드
208
208
  ### Phase 1 — Storyboard 분석 (선택)
209
209
 
210
210
  ```
211
- Load skill `figma` — Phase 1
211
+ Execute the bundled implementation below — Phase 1
212
212
  → Branch 1 Phase 1과 동일 (storyboard URL이 있으면 분석, 없으면 SKIP)
213
213
  ```
214
214
 
215
215
  ### Phase 2 — 재료 확보
216
216
 
217
217
  ```
218
- Load skill `figma` — Phase 2 Extract Mode
218
+ Execute the bundled implementation below — Phase 2 Extract Mode
219
219
  → Branch 1 Phase 2와 동일 (design URL로 추출)
220
220
 
221
221
  🚦 Audit gate: Branch 1과 동일하게 `auditSummary.p1 > 0` 이면 Phase 3 진입 금지.
@@ -224,13 +224,13 @@ Load skill `figma` — Phase 2 Extract Mode
224
224
  ### Phase 3 — 데이터 정제
225
225
 
226
226
  ```
227
- Load skill `figma` — Phase 3 (figma-refine.js 강제)
227
+ Execute the bundled implementation below — Phase 3 (figma-refine.js 강제)
228
228
  ```
229
229
 
230
230
  ### Phase 4 — BP별 스태틱 구현 (Standalone 모드)
231
231
 
232
232
  ```
233
- Load skill `figma` — Phase 4 Convert Mode
233
+ Execute the bundled implementation below — Phase 4 Convert Mode
234
234
  ```
235
235
 
236
236
  > Read `references/branch-phases.md` for the Standalone-mode reuse/token rules (Branch 2, Phase 4).
@@ -238,16 +238,16 @@ Load skill `figma` — Phase 4 Convert Mode
238
238
  ### Phase 5 — 컴파일 게이트
239
239
 
240
240
  ```
241
- Load skill `figma` — Phase 5
241
+ Execute the bundled implementation below — Phase 5
242
242
  ```
243
243
 
244
244
  ### Phase 6 — 시각 검증 + a11y (MANDATORY)
245
245
 
246
246
  ```
247
- Load skill `figma` — Phase 6 (시각 검증 루프, P1=0까지)
247
+ Execute the bundled implementation below — Phase 6 (시각 검증 루프, P1=0까지)
248
248
 
249
249
  ⤵ Phase 6 후처리
250
- Load skill `design-review` — audit 모드
250
+ Load skill `vibe.design-review` — audit 모드
251
251
  → a11y는 항상 검증. 컨벤션 무시 모드여도 접근성은 양보 불가.
252
252
 
253
253
  ⛔ Phase 6 + design-review(audit) 완료 전까지 "완료 요약" 출력 금지.
@@ -280,9 +280,9 @@ Load skill `design-review` — audit 모드
280
280
  > Read `references/step-algorithms.md` for the full plan.md required-section extraction list, missing-section rejection message, feature-name rule, and design-context priority resolution.
281
281
 
282
282
  ```
283
- - hasTeach == true 인 경우에만 Load skill `design-teach`로 인터랙티브 보강
283
+ - hasTeach == true 인 경우에만 Load skill `vibe.design-teach`로 인터랙티브 보강
284
284
 
285
- 3. Load skill `ui-ux-pro-max`
285
+ 3. Load skill `vibe.ui-ux-pro-max`
286
286
  → plan.md의 분위기/타이포/컬러 키워드로 가이드 매칭
287
287
  → 컬러 팔레트, 폰트 페어링, UX 가이드 후보 생성
288
288
  ```
@@ -385,3 +385,455 @@ Load skill `figma:figma-generate-design` — Step 3+: Assemble Sections (디자
385
385
  ❌ Branch 3 도중 figma 스킬의 Extract/Convert Mode · figma-refine.js 호출 금지 (WRITE 모드)
386
386
  ❌ Branch 결정 후 다른 Branch의 Phase로 점프 금지
387
387
  ```
388
+
389
+ ## Bundled implementation
390
+
391
+
392
+ # vibe.figma — Structural Code Generation
393
+
394
+ ## Core Principles
395
+
396
+ ```
397
+ The Figma tree is the source of truth for code. Screenshots are for verification only.
398
+
399
+ ✅ Figma Auto Layout → CSS Flexbox 1:1 mechanical mapping
400
+ ✅ Figma CSS properties → SCSS direct conversion (no guessing)
401
+ ✅ Claude handles semantic decisions only: tag selection, component splitting, interactions
402
+ ```
403
+
404
+ ## Immutable Rules
405
+
406
+ ```
407
+ 1. Do NOT render content as images (frames with TEXT children, INSTANCEs, buttons/prices,
408
+ whole sections). Image rendering only for BG, vector-text GROUPs, verification screenshots.
409
+ 2. BG must use CSS background-image only. <img> tag is forbidden.
410
+ 3. No new screenshot calls during Phase 4. Use only Phase 2 materials —
411
+ no matter how complex, implement with HTML+CSS.
412
+ ```
413
+
414
+ ## Full Flow
415
+
416
+ ```
417
+ Input: receive all URLs at once
418
+ Storyboard: figma.com/...?node-id=aaa (if present)
419
+ MO Design: figma.com/...?node-id=xxx
420
+ PC Design: figma.com/...?node-id=yyy (if present)
421
+
422
+ → Phase 0: Setup
423
+ → Phase 1: Storyboard analysis → functional spec document
424
+ → Phase 2: Gather materials (→ Extract Mode section below)
425
+ → Phase 3: Remapping (MO↔PC matching → remapped.json)
426
+ → Phase 4: Sequential code generation (→ Convert Mode section below)
427
+ → Phase 5: Compile gate
428
+ → Phase 6: Visual verification loop
429
+
430
+ Working directory: /tmp/{feature}/{mo,pc}-main/{tree.json, bg/, content/, sections/}
431
+ + remapped.json ← sole input for Phase 4
432
+ Code output: directly in the project — components/{feature}/, styles/{feature}/
433
+ ```
434
+
435
+ ---
436
+
437
+ ## Phase 0: Setup
438
+
439
+ ```
440
+ 1. Stack detection: package.json → react/vue/svelte, next/nuxt, scss/tailwind
441
+ 2. Feature name: Figma filename → kebab-case
442
+ 3. Directories: components/{feature}/, public/images/{feature}/, styles/{feature}/
443
+ 4. Component indexing → component-index.json (≤50 components, props/slots/classes, ≤2 min)
444
+ 5. Hooks/Types/Constants → context-index.json
445
+ 6. Design token scan → project-tokens.json (SCSS > CSS Variables > Tailwind > CSS-in-JS)
446
+ (all indexes under /tmp/{feature}/)
447
+ ```
448
+
449
+ ---
450
+
451
+ ## Phase 1: Storyboard Analysis
452
+
453
+ ```
454
+ User input: URLs or PDF/images separated by newlines
455
+ URL classification (automatic): different fileKey → storyboard vs design;
456
+ ROOT name contains "MO" → mobile, "PC" → desktop
457
+
458
+ Storyboard analysis: collect frames at depth=3 → classify by name pattern
459
+ SPEC (functional definition) → CONFIG (resolution) → PAGE (main sections) → SHARED (common)
460
+ PDF/images follow the same structural extraction
461
+
462
+ ❌ No code file creation during Phase 1
463
+
464
+ Output (text only): section list table · per-section functional definition
465
+ ([Function] + [Interaction] + [State]) · common component list · TS interface draft
466
+ ```
467
+
468
+ ---
469
+
470
+ ## Phase 2: Gather Materials ← Research (parallel)
471
+
472
+ **→ Follow the Extract Mode rules below.**
473
+ **Coordinator pattern: run MO/PC extraction as parallel workers.**
474
+
475
+ ```
476
+ # [FIGMA_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/figma-extract.js
477
+
478
+ Simultaneous MO/PC extraction — each worker: screenshot → tree → images →
479
+ asset rendering → sections/. Proceed to Phase 3 only after both complete.
480
+ Single BP: run sequentially with 1 worker
481
+ Multi-frame (same BP, different pages): sequential (500ms interval), partial failure allowed
482
+ ```
483
+
484
+ ---
485
+
486
+ ## Phase 3: Data Refinement ← Synthesis (independent per BP)
487
+
488
+ **Split and refine each BP's tree.json by section. MO↔PC matching is NOT done here.**
489
+
490
+ ### BLOCKING Command — Writing custom refine scripts is strictly forbidden
491
+
492
+ ```bash
493
+ # MO
494
+ node {{VIBE_PATH}}/hooks/scripts/figma-refine.js \
495
+ /tmp/{feature}/mo-main/tree.json \
496
+ --out=/tmp/{feature}/mo-main/sections.json \
497
+ --design-width=720 \
498
+ --bp=mo
499
+
500
+ # PC
501
+ node {{VIBE_PATH}}/hooks/scripts/figma-refine.js \
502
+ /tmp/{feature}/pc-main/tree.json \
503
+ --out=/tmp/{feature}/pc-main/sections.json \
504
+ --design-width=2560 \
505
+ --bp=pc
506
+ ```
507
+
508
+ ⛔ **Phase 4 is blocked until these commands are executed.**
509
+ ⛔ **No custom refine scripts, no parsing tree.json directly to produce sections.json.**
510
+ ✅ Use only figma-refine.js output. If unsatisfactory, modify figma-refine.js.
511
+
512
+ ```
513
+ ⛔ Refine each BP independently — do NOT mix MO and PC.
514
+ ⛔ The refined JSON (full recursive subtree per section) is the sole input for Phase 4.
515
+ ```
516
+
517
+ ### Output
518
+
519
+ ```
520
+ /tmp/{feature}/{mo,pc}-main/sections.json ← per-BP refinement result
521
+
522
+ sections.json structure:
523
+ {
524
+ meta: { feature, designWidth, bp },
525
+ sections: [{
526
+ name: "Hero", nodeId, type, size, css,
527
+ text, imageRef, fills, layoutSizingH, layoutSizingV,
528
+ children: [ ... ], // ⛔ full recursive subtree — down to leaf nodes
529
+ images: { bg: "bg/hero-bg.webp", content: ["content/hero-title.webp"] }
530
+ }]
531
+ }
532
+ ```
533
+
534
+ ### Node Refinement Rules (tree.json → sections.json)
535
+
536
+ ```
537
+ 1. size-0px nodes, VECTOR decorative lines (w/h ≤ 2px), isMask nodes → remove
538
+ 2. BG frames → separate from children, move to images.bg
539
+ 3. Vector-text GROUPs + design text (TEXT with multiple/gradient fills or effects)
540
+ → separate from children, add to images.content
541
+ 4. Remaining nodes → keep in children (with CSS, recursive)
542
+
543
+ Multi-frame (same BP, different pages): identify common elements → shared components;
544
+ union of common tokens → shared _tokens.scss
545
+ ```
546
+
547
+ ---
548
+
549
+ ## Phase 4: Per-BP Static Implementation ← Implement (sequential per BP)
550
+
551
+ **→ Follow the Convert Mode rules below.**
552
+ **⛔ Implement MO fully first → pass verification → then implement PC. No responsive conversion.**
553
+ **⛔ CSS values must use Figma original px as-is. vw conversion, clamp, @media are forbidden.**
554
+
555
+ ### BLOCKING Command — SCSS must only use script output
556
+
557
+ ```bash
558
+ # Step A: Auto-generate SCSS skeleton (run once per BP)
559
+ node {{VIBE_PATH}}/hooks/scripts/figma-to-scss.js \
560
+ /tmp/{feature}/{bp}-main/sections.json \
561
+ --out=/path/to/project/assets/scss/{feature}/
562
+
563
+ # Step B: Per-section validation (after writing each section's code)
564
+ node {{VIBE_PATH}}/hooks/scripts/figma-validate.js \
565
+ /path/to/project/assets/scss/{feature}/ \
566
+ /tmp/{feature}/{bp}-main/sections.json \
567
+ --section={SectionName}
568
+ ```
569
+
570
+ ⛔ **Writing SCSS directly (or via custom generation scripts) invalidates Phase 4.**
571
+ ⛔ **Do NOT proceed to the next section without a figma-validate.js PASS.**
572
+ ⛔ **No CSS values inside scoped style blocks** — only @import/@use of external SCSS files.
573
+ ✅ Use figma-to-scss.js output as-is. If unsatisfactory, modify figma-to-scss.js.
574
+
575
+ ```
576
+ Phase 4A: MO Static Implementation (input: mo-main/sections.json)
577
+ ⛔ No parallelism. Process one section at a time:
578
+ 1. Read the target section from sections.json
579
+ 2. Write an image vs HTML classification table (BLOCKING — see Convert Mode §C1)
580
+ 3. figma-to-scss.js → auto-generate SCSS skeleton (px as-is) — Step A once
581
+ 4. Claude: HTML structure + semantic tags + layout + interactions (Vue/React files only)
582
+ 5. figma-validate.js — Step B: PASS → next section │ FAIL → fix → re-run
583
+ (repeat until P1=0, no round cap)
584
+ → Phase 5 (MO compile) → Phase 6 (MO visual verification)
585
+
586
+ Phase 4B: PC Static Implementation (input: pc-main/sections.json)
587
+ Same process as MO → Phase 5 (PC compile) → Phase 6 (PC visual verification)
588
+
589
+ Phase 4C: Responsive Integration (after both MO+PC pass verification)
590
+ → Separate flow to be established (TODO)
591
+
592
+ Claude's role (restricted): semantic decisions only (Convert Mode §C3) + image classification
593
+ + executing figma-to-scss.js / figma-validate.js.
594
+ ❌ No modifying SCSS values, no CSS in <style> blocks, no vw/clamp/@media,
595
+ no custom functions/mixins, no custom refine/generate scripts.
596
+
597
+ SCSS Setup (before the first section):
598
+ index.scss, _tokens.scss, _base.scss
599
+ Token mapping: reference existing tokens from project-tokens.json → create new ones if no match
600
+
601
+ Component matching (before each section):
602
+ Compare against component-index.json → import if matched, create new if not
603
+
604
+ Multi-frame:
605
+ Step 1: shared components first → components/shared/
606
+ Step 2: unique sections per frame
607
+ ```
608
+
609
+ ---
610
+
611
+ ## Phase 5: Compile Gate
612
+
613
+ ```
614
+ No round cap. Loop until compile succeeds (or stuck → ask user).
615
+
616
+ 0. Capture baseline (before Phase 4): record existing tsc + build errors → fix NEW errors only
617
+ 1. TypeScript: vue-tsc/svelte-check/tsc --noEmit
618
+ 2. Build: npm run build (120s timeout)
619
+ 3. Dev server: npm run dev → detect port → polling
620
+
621
+ On error: parse → auto-fix → re-check
622
+ Termination:
623
+ ✅ Success: all checks pass → enter Phase 6
624
+ ⚠️ Stuck (same errors as previous round) → ask user: fix instructions │ "proceed"
625
+ (record TODO, go to Phase 6) │ "abort". ultrawork: record TODO + proceed silently.
626
+
627
+ On completion: preserve dev server PID → used in Phase 6
628
+
629
+ ⛔ After Phase 5 passes (or user proceeds), must enter Phase 6.
630
+ Do NOT output a "completion summary" or declare work complete without Phase 6.
631
+ ```
632
+
633
+ ---
634
+
635
+ ## Phase 6: Visual Verification Loop ← Verify (parallel) MANDATORY
636
+
637
+ **⛔ Mandatory — enter automatically upon Phase 5 completion; skipping = task "incomplete".**
638
+ **Coordinator pattern: independent per-section verification can run as parallel workers.**
639
+
640
+ ```
641
+ No round cap. Loop until P1=0 (or stuck → ask user).
642
+ Infrastructure: src/infra/lib/browser/ (Puppeteer + CDP)
643
+
644
+ 1. Capture rendered screenshot → pixelmatch comparison against Figma screenshot
645
+ diffRatio > 0.1 → P1
646
+ 2. CSS value comparison: computed CSS vs tree.json expected values
647
+ delta > 4px → P1, ≤ 4px → P2
648
+ 3. Check for missing images and text
649
+ 4. Fix P1 issues first (refer to tree.json, no guessing) → revalidate compile → reload
650
+
651
+ Narrowing scope: Round 1 P1+P2+P3 → Round 2 P1+P2 → Round 3+ P1 only (until P1=0)
652
+
653
+ Termination:
654
+ ✅ Success: P1 = 0 AND no new findings → complete
655
+ ⚠️ Stuck (same findings as previous round) → ask user: direct resolution │ "proceed"
656
+ (record TODO, complete) │ "abort". ultrawork: record TODO + complete silently.
657
+
658
+ Responsive: after MO verification, change viewport → same loop against PC screenshots
659
+ Cleanup: shut down browser + dev server
660
+
661
+ ⛔ "Completion summary" output is only allowed after Phase 6 is complete (or user proceeds).
662
+ ```
663
+
664
+ ---
665
+
666
+ ## Extract Mode (Phase 2 body) — Acquire Code Generation Data
667
+
668
+ 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).
669
+
670
+ ### E1. Node Tree + CSS — Source of Truth
671
+
672
+ ```
673
+ Bash:
674
+ node "{{VIBE_PATH}}/hooks/scripts/figma-extract.js" tree {fileKey} {nodeId}
675
+
676
+ Returns (FigmaNode JSON):
677
+ { nodeId, name, type, size, css: { display, flexDirection, gap, ... },
678
+ text (TEXT only), imageRef, imageScaleMode (FILL/FIT/CROP/TILE),
679
+ layoutSizingH/V (FIXED/HUG/FILL), fills (only when 2+), isMask,
680
+ raw: { itemSpacing, padding*, cornerRadius, strokeWeight, strokeAlign, blendMode,
681
+ opacity, fontSize, lineHeightPx, letterSpacing, fontWeight, leadingTrim,
682
+ textBoxTrim }, ← Figma numbers for Phase 6 raw-vs-computed reconciliation
683
+ warnings: [{ property, value, severity: "P1"|"P2", reason }], ← translation-loss only
684
+ children: [...] }
685
+
686
+ Root node also carries:
687
+ auditSummary: { total, p1, p2, items: [{ nodeId, name, property, value, severity, reason }] }
688
+
689
+ → Save to /tmp/{feature}/tree.json
690
+
691
+ Figma property → CSS mapping (what the extractor auto-converts): rubrics/css-mapping.md
692
+ ```
693
+
694
+ ### E2. Translation-loss Audit (Figma → CSS Incompatibilities)
695
+
696
+ The extractor flags properties CSS cannot reproduce cleanly (per-node `warnings[]`, rolled up as root `auditSummary`).
697
+
698
+ **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).
699
+
700
+ **P2 (record + proceed):** `leadingTrim`/`textBoxTrim` ≠ `NONE` (limited `text-box-trim` support) · `constraints` ∈ { `SCALE`, `CENTER` } (no direct CSS layout mapping) · `individualStrokeWeights` with `strokeAlign` ≠ `CENTER`.
701
+
702
+ **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.
703
+
704
+ ### E3. Image Assets — Node Rendering Based
705
+
706
+ Full determination rules and real-world failure cases: `rubrics/image-rules.md`.
707
+
708
+ ```
709
+ Do NOT download imageRef individually (shared texture fill → multi-MB originals).
710
+ All images are rendered as nodes:
711
+ node "{{VIBE_PATH}}/hooks/scripts/figma-extract.js" screenshot {fileKey} {nodeId} --out=...
712
+
713
+ BG frames → bg/{section}-bg.webp
714
+ Identification: name contains "BG"/"bg", OR same size as parent (±10%) + 3+ child images
715
+ Content nodes → content/{name}.webp
716
+ Icons (VECTOR/GROUP ≤ 64px) · item/reward/token/coin thumbnails
717
+ · vector-text GROUPs (3+ VECTORs, each <60px)
718
+ · design text (TEXT with 2+ fills, effects, GRADIENT fill, or non-web-font fontFamily)
719
+ → must be rendered; placed as <img alt="text content">, never CSS text
720
+ · decorative panels (textured backgrounds) → render like BG frames
721
+
722
+ imageRef download is a fallback only (API failure, DOCUMENT level); >5MB → texture-fill warning.
723
+ Screenshots (validation only): full-screenshot.webp + per 1-depth child → sections/{name}.webp
724
+ ```
725
+
726
+ ### E4. Extraction Completion Validation (Required Before Phase 3)
727
+
728
+ ```
729
+ If any item is missing → re-extract (do NOT proceed to Phase 3)
730
+
731
+ 1. tree.json exists + root children > 0 · 2. BG per section exists in bg/
732
+ 3. Every design-text TEXT node (2+ fills or effects) rendered in content/
733
+ 4. Every vector-text GROUP (3+ VECTORs) rendered in content/
734
+ 5. Per-section validation screenshots exist in sections/ · 6. All filenames kebab-case
735
+ ```
736
+
737
+ ---
738
+
739
+ ## Convert Mode (Phase 4 body) — Tree-Based Structured Code Generation
740
+
741
+ **Mechanically map sections.json to HTML. Do not guess.**
742
+ **Claude handles only semantic decisions (tag selection, component separation, interactions). SCSS comes from figma-to-scss.js (Phase 4 blocking commands).**
743
+
744
+ ### C0. Reuse Check (Before Writing Code)
745
+
746
+ ```
747
+ Matching component in component-index.json?
748
+ ✅ Import and customize via props — do not create a new one
749
+ ❌ Never modify an existing component's internals or duplicate a 90%-similar one
750
+ ```
751
+
752
+ ### C1. Image vs HTML Determination (BLOCKING)
753
+
754
+ ```
755
+ ⛔ Before writing code: write the determination table first.
756
+
757
+ YES on any one → HTML:
758
+ Q1. TEXT children? · Q2. repeating INSTANCE? (→ v-for, inner assets only as <img>)
759
+ Q3. interactive? (btn, CTA → <button>) · Q4. dynamic data? (price, quantity, duration)
760
+ All NO → image rendering is acceptable
761
+
762
+ ⛔ Design text (Q1 exception — must be image; D1–D5, same as Extract Mode E3):
763
+ D1. 2+ fills · D2. effects (DROP_SHADOW, stroke) · D3. GRADIENT fill
764
+ D4. parent GROUP/FRAME has 3+ VECTORs · D5. fontFamily not in project web fonts
765
+ → <img src="content/{section}-{name}.webp" alt="text content"> — no CSS text attempt
766
+
767
+ BG frames: ❌ no <img> tags — parent SCSS background-image only
768
+ .section { background-image: url('bg.webp'); background-size: cover; }
769
+ ```
770
+
771
+ ### C2. Node → HTML Mapping (Mechanical)
772
+
773
+ ```
774
+ FRAME + Auto Layout → <div> + flex (direction/gap/padding directly mapped)
775
+ FRAME + no Auto Layout → <div> + position:relative (children absolute)
776
+ TEXT → <span> (Claude promotes to h2/p/button)
777
+ IMAGE fill (passed determination) → <img>
778
+ VECTOR/GROUP ≤64px → icon <img>
779
+ INSTANCE repeated 2+ → v-for / .map()
780
+ Size 0px, VECTOR ≤2px → skip
781
+ ```
782
+
783
+ 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.
784
+
785
+ ### C3. Claude Semantic Decisions (The Only Inference Area)
786
+
787
+ ```
788
+ 1. Tag promotion: <span> → <h2> (section title) / <p> (description) / <button> (clickable)
789
+ 2. Component separation: 1st-depth children = sections, INSTANCE repetition = shared
790
+ 3. Interactions: @click handlers, state variables, conditional rendering
791
+ 4. Accessibility: decorative → alt="" aria-hidden="true" · content → alt="description"
792
+ · interactive → role, aria-label
793
+ 5. Semantic HTML: top-level <section>, heading order h1~h6, lists <ul>/<ol>
794
+ ```
795
+
796
+ Component skeleton template: `templates/component.md`.
797
+
798
+ ### C4. SCSS File Structure
799
+
800
+ ```
801
+ layout/ → position, display, flex, width, height, padding, gap, overflow, z-index
802
+ components/ → font, color, border, shadow, opacity, background
803
+ _base.scss → .{feature} { width: 100%; max-width: 720px; margin: 0 auto; overflow-x: hidden; }
804
+ _tokens.scss → reference existing tokens (@use); if no mapping, create a new
805
+ feature-scoped token ($feature-color-xxx)
806
+ ```
807
+
808
+ ### C5. Self-Validation
809
+
810
+ ```
811
+ ⛔ Any failure → rewrite that section's code (do not proceed to the next section)
812
+
813
+ 1. All template classes defined in SCSS · 2. Image src files actually exist
814
+ 3. Auto Layout node → flex present in SCSS
815
+ 4. ⛔ No @function/@mixin defined in SCSS (existing token @use is allowed)
816
+ 5. ⛔ Every SCSS property grounded in sections.json css object
817
+ (aspect-ratio, container queries, etc. not in the tree → FAIL)
818
+ 6. ⛔ Image filenames kebab-case (hash filenames like 68ad470b.webp → FAIL)
819
+ ```
820
+
821
+ ---
822
+
823
+ ## Error Recovery
824
+
825
+ | Failure | Recovery |
826
+ |---------|----------|
827
+ | figma-extract.js script error | Node.js >=18? API token in config? Retry once. |
828
+ | Figma API 401 | Prompt user to set FIGMA_ACCESS_TOKEN in env or ~/.vibe/config.json |
829
+ | Figma API 404 | Verify fileKey from URL; check file is shared/accessible |
830
+ | Figma API 429 (rate limit) | Wait 60s, retry with reduced node scope (single page) |
831
+ | API timeout on large file | Split request by page via nodeId parameter |
832
+ | Screenshot download failure | Proceed with tree.json only (visual verification → manual) |
833
+ | tree.json missing in Phase 4 | Run Extract Mode (Phase 2) first |
834
+ | component-index.json missing | Generate minimal index from tree.json section names |
835
+ | sections.json malformed | Regenerate from tree.json via figma-refine.js |
836
+ | SCSS output empty | Check sections.json for valid style nodes; else default reset styles |
837
+ | figma-to-scss.js parse failure | Validate tree.json structure; if malformed, re-run Extract Mode |
838
+ | figma-validate.js comparison failure | Skip automated validation; screenshot side-by-side manual review |
839
+ | Puppeteer/CDP not available | Skip visual verification; manual browser check |
@@ -82,7 +82,7 @@
82
82
  ```
83
83
  1. URL 수집 — Branch 1 Phase 0와 동일 (urlArgs 있으면 전달, 없으면 인터랙티브)
84
84
 
85
- 2. Load skill `figma` — Phase 0 Setup
85
+ 2. Load skill `vibe.figma` — Phase 0 Setup
86
86
  → 스택만 감지. 디렉토리 생성.
87
87
  ⛔ component-index.json 인덱싱 SKIP
88
88
  ⛔ project-tokens.json 스캔 SKIP
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: git-worktree
2
+ name: vibe.git-worktree
3
3
  invocation: [auto]
4
4
  tier: optional
5
5
  description: "Git Worktree for parallel branch work. Auto-activates for PR review, hotfix, parallel testing, or working on multiple branches simultaneously."
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: handoff
2
+ name: vibe.handoff
3
3
  user-invocable: false
4
4
  invocation: [auto]
5
5
  tier: standard
@@ -1,12 +1,12 @@
1
1
  ---
2
- name: parallel-research
2
+ name: vibe.parallel-research
3
3
  user-invocable: false
4
4
  invocation: [auto]
5
5
  tier: standard
6
6
  description: "Parallel research with 4 specialized agents (best-practices, framework-docs, codebase-patterns, security-advisory) running simultaneously. Use when facing unfamiliar technology, choosing between libraries/frameworks, designing architecture for a new feature, or investigating security implications. Must use this skill when user asks 'how should we build X', 'which library for Y', or when starting work on a complex feature with unknown requirements. Not for simple lookups — use web search directly for those."
7
7
  triggers: [parallel research, complex feature, technology selection, architecture design, security critical]
8
8
  priority: 60
9
- chain-next: [exec-plan]
9
+ chain-next: [vibe.run]
10
10
  ---
11
11
  # Parallel Research
12
12
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: presentation
2
+ name: vibe.presentation
3
3
  invocation: [auto]
4
4
  tier: optional
5
5
  description: "소스 데이터(리서치/문서/지식그래프)를 16:9 HTML 슬라이드덱으로 생성한다. 디자인 시스템(타이포·색·그리드·1슬라이드1메시지)을 통째로 적용해 전문가 수준 결과를 뽑고, 1920×1080 PDF 로 발행한다. 사용자가 '슬라이드/PPT/프레젠테이션/덱 만들어줘' 라고 하면 이 스킬을 쓴다. 17종 스타일 프리셋은 references/style-presets.md 에서 style= 로 선택."
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: prioritization-frameworks
2
+ name: vibe.prioritization
3
3
  invocation: [auto, chain]
4
4
  tier: standard
5
5
  description: "Reference guide to 9 prioritization frameworks with formulas, when-to-use guidance, and templates — RICE, ICE, Kano, MoSCoW, Opportunity Score, and more."
6
6
  triggers: [prioritize, prioritization, rice, ice, kano, moscow, opportunity score]
7
7
  priority: 50
8
- chain-next: [create-prd]
8
+ chain-next: [vibe.create-prd]
9
9
  ---
10
10
 
11
11
  # Prioritization Frameworks Reference
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: priority-todos
2
+ name: vibe.priority-todos
3
3
  user-invocable: false
4
4
  invocation: [auto]
5
5
  tier: standard