@su-record/vibe 2.8.23 → 2.8.25

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 (223) hide show
  1. package/commands/vibe.figma.md +2 -2
  2. package/dist/cli/commands/config.d.ts +17 -0
  3. package/dist/cli/commands/config.d.ts.map +1 -0
  4. package/dist/cli/commands/config.js +207 -0
  5. package/dist/cli/commands/config.js.map +1 -0
  6. package/dist/cli/commands/index.d.ts +2 -0
  7. package/dist/cli/commands/index.d.ts.map +1 -1
  8. package/dist/cli/commands/index.js +2 -0
  9. package/dist/cli/commands/index.js.map +1 -1
  10. package/dist/cli/commands/info.d.ts.map +1 -1
  11. package/dist/cli/commands/info.js +2 -0
  12. package/dist/cli/commands/info.js.map +1 -1
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +78 -54
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/stats.d.ts +13 -0
  17. package/dist/cli/commands/stats.d.ts.map +1 -0
  18. package/dist/cli/commands/stats.js +280 -0
  19. package/dist/cli/commands/stats.js.map +1 -0
  20. package/dist/cli/index.d.ts.map +1 -1
  21. package/dist/cli/index.js +33 -1
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  24. package/dist/cli/postinstall/constants.js +1 -0
  25. package/dist/cli/postinstall/constants.js.map +1 -1
  26. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
  27. package/dist/cli/setup/GlobalInstaller.js +7 -7
  28. package/dist/cli/setup/GlobalInstaller.js.map +1 -1
  29. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  30. package/dist/cli/setup/ProjectSetup.js +18 -12
  31. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  32. package/dist/infra/lib/ContextCompressor.d.ts.map +1 -1
  33. package/dist/infra/lib/ContextCompressor.js +10 -4
  34. package/dist/infra/lib/ContextCompressor.js.map +1 -1
  35. package/dist/infra/lib/ProjectCache.d.ts +2 -2
  36. package/dist/infra/lib/ProjectCache.d.ts.map +1 -1
  37. package/dist/infra/lib/ProjectCache.js +4 -3
  38. package/dist/infra/lib/ProjectCache.js.map +1 -1
  39. package/dist/infra/lib/utils.d.ts +24 -0
  40. package/dist/infra/lib/utils.d.ts.map +1 -1
  41. package/dist/infra/lib/utils.js +41 -0
  42. package/dist/infra/lib/utils.js.map +1 -1
  43. package/dist/infra/orchestrator/SmartRouter.d.ts +3 -0
  44. package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
  45. package/dist/infra/orchestrator/SmartRouter.js +11 -1
  46. package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
  47. package/dist/infra/orchestrator/SmartRouter.test.d.ts +5 -0
  48. package/dist/infra/orchestrator/SmartRouter.test.d.ts.map +1 -0
  49. package/dist/infra/orchestrator/SmartRouter.test.js +457 -0
  50. package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -0
  51. package/dist/tools/convention/analyzeComplexity.d.ts.map +1 -1
  52. package/dist/tools/convention/analyzeComplexity.js +18 -10
  53. package/dist/tools/convention/analyzeComplexity.js.map +1 -1
  54. package/dist/tools/convention/checkCouplingCohesion.d.ts.map +1 -1
  55. package/dist/tools/convention/checkCouplingCohesion.js +14 -6
  56. package/dist/tools/convention/checkCouplingCohesion.js.map +1 -1
  57. package/dist/tools/semantic/analyzeDependencyGraph.d.ts.map +1 -1
  58. package/dist/tools/semantic/analyzeDependencyGraph.js +1 -1
  59. package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
  60. package/dist/tools/semantic/findReferences.d.ts.map +1 -1
  61. package/dist/tools/semantic/findReferences.js +13 -13
  62. package/dist/tools/semantic/findReferences.js.map +1 -1
  63. package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
  64. package/dist/tools/semantic/findSymbol.js +12 -13
  65. package/dist/tools/semantic/findSymbol.js.map +1 -1
  66. package/dist/tools/semantic/lsp.d.ts.map +1 -1
  67. package/dist/tools/semantic/lsp.js +22 -14
  68. package/dist/tools/semantic/lsp.js.map +1 -1
  69. package/hooks/hooks.json +29 -0
  70. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -0
  71. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -0
  72. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -0
  73. package/hooks/scripts/auto-commit.js +65 -0
  74. package/hooks/scripts/auto-format.js +64 -0
  75. package/hooks/scripts/auto-test.js +81 -0
  76. package/hooks/scripts/code-check.js +139 -0
  77. package/hooks/scripts/command-log.js +32 -0
  78. package/hooks/scripts/context-save.js +60 -6
  79. package/hooks/scripts/hud-status.js +32 -2
  80. package/hooks/scripts/llm-orchestrate.js +95 -17
  81. package/hooks/scripts/pr-test-gate.js +52 -0
  82. package/package.json +1 -1
  83. package/skills/agents-md/rubrics/what-to-keep.md +49 -0
  84. package/skills/agents-md/templates/agents-md.md +36 -0
  85. package/skills/arch-guard/agents/detector.md +48 -0
  86. package/skills/arch-guard/agents/reporter.md +48 -0
  87. package/skills/arch-guard/agents/rule-generator.md +49 -0
  88. package/skills/arch-guard/agents/violation-checker.md +51 -0
  89. package/skills/arch-guard/frameworks/clean-architecture.md +108 -0
  90. package/skills/arch-guard/frameworks/solid.md +102 -0
  91. package/skills/arch-guard/scripts/check-boundaries.js +90 -0
  92. package/skills/arch-guard/templates/arch-rules.json +47 -0
  93. package/skills/arch-guard/templates/violation-report.md +53 -0
  94. package/skills/brand-assets/rubrics/asset-checklist.md +98 -0
  95. package/skills/brand-assets/templates/brand-guide.md +161 -0
  96. package/skills/capability-loop/agents/capability-designer.md +61 -0
  97. package/skills/capability-loop/agents/failure-analyst.md +55 -0
  98. package/skills/capability-loop/agents/implementer.md +50 -0
  99. package/skills/capability-loop/agents/tester.md +53 -0
  100. package/skills/capability-loop/templates/capability-spec.md +118 -0
  101. package/skills/capability-loop/templates/failure-analysis.md +118 -0
  102. package/skills/characterization-test/agents/behavior-capturer.md +50 -0
  103. package/skills/characterization-test/agents/coverage-checker.md +54 -0
  104. package/skills/characterization-test/agents/reporter.md +50 -0
  105. package/skills/characterization-test/agents/test-writer.md +49 -0
  106. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -0
  107. package/skills/characterization-test/templates/test-template.ts +101 -0
  108. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -0
  109. package/skills/claude-md-guide/templates/claude-md.md +54 -0
  110. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -0
  111. package/skills/commerce-patterns/templates/product-schema.md +85 -0
  112. package/skills/commit-push-pr/agents/change-analyzer.md +55 -0
  113. package/skills/commit-push-pr/agents/message-writer.md +50 -0
  114. package/skills/commit-push-pr/agents/pr-writer.md +58 -0
  115. package/skills/commit-push-pr/agents/reviewer.md +52 -0
  116. package/skills/commit-push-pr/rubrics/commit-message.md +73 -0
  117. package/skills/commit-push-pr/templates/pr-body.md +63 -0
  118. package/skills/context7-usage/rubrics/when-to-use.md +50 -0
  119. package/skills/create-prd/agents/edge-case-finder.md +48 -0
  120. package/skills/create-prd/agents/prioritizer.md +60 -0
  121. package/skills/create-prd/agents/requirements-writer.md +48 -0
  122. package/skills/create-prd/agents/researcher.md +55 -0
  123. package/skills/create-prd/agents/reviewer.md +54 -0
  124. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -0
  125. package/skills/create-prd/frameworks/rice-scoring.md +97 -0
  126. package/skills/create-prd/orchestrator.md +70 -0
  127. package/skills/create-prd/rubrics/completeness.md +58 -0
  128. package/skills/create-prd/templates/prd.md +139 -0
  129. package/skills/design-audit/agents/a11y-auditor.md +43 -0
  130. package/skills/design-audit/agents/performance-auditor.md +46 -0
  131. package/skills/design-audit/agents/responsive-auditor.md +46 -0
  132. package/skills/design-audit/agents/scorer.md +47 -0
  133. package/skills/design-audit/agents/slop-detector.md +47 -0
  134. package/skills/design-audit/frameworks/core-web-vitals.md +107 -0
  135. package/skills/design-audit/frameworks/wcag-checklist.md +64 -0
  136. package/skills/design-audit/orchestrator.md +64 -0
  137. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -0
  138. package/skills/design-audit/rubrics/scoring.md +63 -0
  139. package/skills/design-audit/templates/report.md +88 -0
  140. package/skills/design-critique/rubrics/ux-heuristics.md +143 -0
  141. package/skills/design-critique/templates/critique-report.md +86 -0
  142. package/skills/design-distill/templates/design-system.md +132 -0
  143. package/skills/design-normalize/rubrics/token-naming.md +117 -0
  144. package/skills/design-normalize/templates/token-audit.md +89 -0
  145. package/skills/design-polish/rubrics/polish-checklist.md +68 -0
  146. package/skills/design-polish/templates/polish-report.md +64 -0
  147. package/skills/design-teach/rubrics/brand-personality.md +73 -0
  148. package/skills/design-teach/templates/design-context.json +36 -0
  149. package/skills/e2e-commerce/templates/test-scenarios.md +170 -0
  150. package/skills/event-comms/templates/email-invite.md +99 -0
  151. package/skills/event-comms/templates/sns-post.md +133 -0
  152. package/skills/event-ops/rubrics/contingency.md +85 -0
  153. package/skills/event-ops/templates/d-day-checklist.md +65 -0
  154. package/skills/event-planning/rubrics/timeline.md +70 -0
  155. package/skills/event-planning/templates/event-plan.md +91 -0
  156. package/skills/exec-plan/agents/decomposer.md +47 -0
  157. package/skills/exec-plan/agents/dependency-mapper.md +44 -0
  158. package/skills/exec-plan/agents/estimator.md +43 -0
  159. package/skills/exec-plan/agents/validator.md +55 -0
  160. package/skills/exec-plan/orchestrator.md +70 -0
  161. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -0
  162. package/skills/exec-plan/templates/plan.md +147 -0
  163. package/skills/git-worktree/rubrics/when-to-use.md +55 -0
  164. package/skills/handoff/agents/context-summarizer.md +51 -0
  165. package/skills/handoff/agents/document-writer.md +63 -0
  166. package/skills/handoff/agents/state-collector.md +53 -0
  167. package/skills/handoff/agents/verifier.md +48 -0
  168. package/skills/handoff/rubrics/completeness.md +62 -0
  169. package/skills/handoff/templates/handoff.md +107 -0
  170. package/skills/parallel-research/agents/best-practices.md +43 -0
  171. package/skills/parallel-research/agents/codebase-patterns.md +46 -0
  172. package/skills/parallel-research/agents/framework-docs.md +45 -0
  173. package/skills/parallel-research/agents/security-advisory.md +46 -0
  174. package/skills/parallel-research/agents/synthesizer.md +52 -0
  175. package/skills/parallel-research/experts/best-practices.md +50 -0
  176. package/skills/parallel-research/experts/codebase-patterns.md +70 -0
  177. package/skills/parallel-research/experts/framework-docs.md +65 -0
  178. package/skills/parallel-research/experts/security-advisory.md +69 -0
  179. package/skills/parallel-research/orchestrator.md +65 -0
  180. package/skills/parallel-research/templates/synthesis.md +101 -0
  181. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -0
  182. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -0
  183. package/skills/priority-todos/rubrics/prioritization.md +70 -0
  184. package/skills/priority-todos/templates/todo-board.md +59 -0
  185. package/skills/seo-checklist/frameworks/structured-data.md +153 -0
  186. package/skills/seo-checklist/rubrics/content-seo.md +42 -0
  187. package/skills/seo-checklist/rubrics/technical-seo.md +48 -0
  188. package/skills/techdebt/agents/analyzer.md +50 -0
  189. package/skills/techdebt/agents/fixer.md +41 -0
  190. package/skills/techdebt/agents/reviewer.md +47 -0
  191. package/skills/techdebt/agents/scanner.md +44 -0
  192. package/skills/techdebt/orchestrator.md +70 -0
  193. package/skills/techdebt/rubrics/severity.md +51 -0
  194. package/skills/techdebt/scripts/scan.js +90 -0
  195. package/skills/techdebt/templates/report.md +86 -0
  196. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -0
  197. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -0
  198. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -0
  199. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -0
  200. package/skills/user-personas/rubrics/research-methods.md +56 -0
  201. package/skills/user-personas/templates/persona.md +89 -0
  202. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -0
  203. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -0
  204. package/skills/vibe-docs/SKILL.md +171 -0
  205. package/skills/vibe-docs/templates/architecture.md +80 -0
  206. package/skills/vibe-docs/templates/readme.md +84 -0
  207. package/skills/vibe-docs/templates/release-notes.md +74 -0
  208. package/skills/vibe-figma/SKILL.md +173 -54
  209. package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -0
  210. package/skills/vibe-figma/templates/figma-handoff.md +96 -0
  211. package/skills/vibe-figma-analyze/rubrics/analysis-dimensions.md +53 -0
  212. package/skills/vibe-figma-codegen/rubrics/code-quality.md +54 -0
  213. package/skills/vibe-figma-consolidate/templates/consolidation-report.md +95 -0
  214. package/skills/vibe-figma-convert/SKILL.md +176 -1
  215. package/skills/vibe-figma-convert/rubrics/conversion-rules.md +83 -0
  216. package/skills/vibe-figma-convert/templates/component.md +152 -0
  217. package/skills/vibe-figma-extract/rubrics/image-rules.md +67 -0
  218. package/skills/vibe-figma-frame/rubrics/frame-selection.md +55 -0
  219. package/skills/vibe-figma-pipeline/rubrics/pipeline-stages.md +96 -0
  220. package/skills/vibe-figma-rules/rubrics/naming-conventions.md +70 -0
  221. package/skills/vibe-figma-style/rubrics/style-mapping.md +100 -0
  222. package/skills/video-production/rubrics/quality-checklist.md +58 -0
  223. package/skills/video-production/templates/production-plan.md +104 -0
@@ -12,10 +12,23 @@ tier: standard
12
12
  ```
13
13
  ❌ CSS로 이미지 재현 (삼각형/원/gradient로 나무/눈사람/배경 그리기)
14
14
  ❌ 이미지 다운로드 없이 코드 생성 진행
15
- ❌ 컴포넌트 파일 안에 <style> 블록 / 인라인 style=""
16
15
  ❌ placeholder / 빈 template / 빈 src="" 남기기
17
16
  ❌ CSS 값을 추정 (참조 코드에 정확한 값이 있음)
18
17
  ❌ 브라우저 기본 스타일(검은색 16px)로 보이는 텍스트
18
+ ❌ 핵심 에셋만 다운로드 (참조 코드의 모든 에셋을 빠짐없이 다운로드)
19
+ ```
20
+
21
+ ### 스타일 배치 규칙 (모드별)
22
+
23
+ ```
24
+ 일반 모드:
25
+ ❌ 컴포넌트 파일 안에 <style> 블록 / 인라인 style=""
26
+ ✅ 외부 SCSS 파일에만 스타일 작성
27
+
28
+ 직역 모드:
29
+ ✅ <style scoped> 블록 허용 (Tailwind→CSS 1:1 변환)
30
+ ✅ 인라인 :style="" 허용 (maskImage 등 동적 값)
31
+ ❌ 외부 SCSS 파일에 추상화된 스타일 작성 (원본 좌표 손실)
19
32
  ```
20
33
 
21
34
  ## 전체 플로우
@@ -48,19 +61,19 @@ tier: standard
48
61
 
49
62
  4. 디렉토리 생성:
50
63
  - components/{feature}/
51
- - styles/{feature}/ (layout/, components/ 하위)
52
64
  - public/images/{feature}/ (또는 static/images/{feature}/)
65
+ - styles/{feature}/ (layout/, components/ 하위) — Phase 2에서 일반 모드 섹션이 있을 때만
53
66
  ```
54
67
 
55
68
  ---
56
69
 
57
70
  ## Phase 1: Storyboard
58
71
 
59
- ```
60
- AskUserQuestion: "스토리보드 Figma URL을 입력해주세요. (없으면 '없음')"
72
+ 사용자에게 질문한다:
73
+ - question: "스토리보드 Figma URL을 입력해주세요. (없으면 '없음')"
74
+ - options 제공 금지 — 자유 텍스트 입력만 허용
61
75
 
62
- "없음" → Phase 2로 건너뜀 (디자인 URL만으로 진행)
63
- ```
76
+ "없음" 응답 시 → Phase 2로 건너뜀
64
77
 
65
78
  ### 1-1. 스토리보드 분석
66
79
 
@@ -68,11 +81,25 @@ AskUserQuestion: "스토리보드 Figma URL을 입력해주세요. (없으면 '
68
81
  URL에서 fileKey, nodeId 추출
69
82
  get_metadata(fileKey, nodeId) → 프레임 목록
70
83
 
71
- 프레임 분류:
72
- SPEC 기능 정의서 → get_design_context텍스트 추출
73
- CONFIG — 해상도/브레이크포인트 → 스케일 팩터 계산
74
- SHARED GNB/Footer/Popup 공통 컴포넌트 파악
75
- PAGE 화면설계 섹션 목록 + 인터랙션 스펙
84
+ ⚠️ 메타데이터가 클 수 있음 (실전: 291K chars → 파일 저장됨)
85
+ 파일 저장 Python/Bash파싱하여 프레임 목록 추출
86
+
87
+ 프레임 분류 (이름 패턴 기반, get_design_context 호출 전에 분류):
88
+ SPEC "기능 정의서", "정책" get_design_context로 텍스트 추출
89
+ CONFIG — "해상도", "브라우저" → get_design_context로 스케일 팩터 계산
90
+ SHARED — "공통", "GNB", "Footer", "Popup" → 공통 컴포넌트 파악
91
+ PAGE — "화면설계", "메인 -" → 섹션 목록 + 인터랙션 스펙
92
+
93
+ 핵심 프레임 선별 (전부 읽지 않음):
94
+ 1순위: SPEC (기능 정의서) — 1개
95
+ 2순위: CONFIG (해상도) — 1개
96
+ 3순위: PAGE 중 메인 섹션만 (3.1, 3.2, 3.3, 3.4, 3.5, 3.6)
97
+ 하위 케이스(3.1.1, 3.2.1 등)는 건너뜀 — Phase 2에서 필요 시 참조
98
+ 4순위: SHARED (공통 요소, Popup) — 필요 시
99
+
100
+ 높이 1500px 이상 프레임:
101
+ → get_design_context 대신 get_screenshot으로 시각 파악
102
+ → 또는 get_metadata로 하위 분할 후 호출
76
103
  ```
77
104
 
78
105
  ### 1-2. 레이아웃 + 컴포넌트 구성 (코드 생성)
@@ -167,22 +194,23 @@ Phase 1 완료 조건:
167
194
  Phase 1에서 컴포넌트가 이미 존재 (레이아웃 + 기능 주석 + 목 데이터).
168
195
  Phase 2에서는 이 컴포넌트에 **디자인(이미지 + 스타일)**을 입힌다.
169
196
 
170
- ```
171
197
  모바일 퍼스트 강제. CSS base = 최소 뷰포트, @media (min-width:)로 확장.
172
198
 
173
- 1. AskUserQuestion: "베이스 디자인(모바일) Figma URL을 입력해주세요."
174
- base 스타일로 처리.
199
+ 사용자에게 질문한다:
200
+ - question: "베이스 디자인(모바일) Figma URL을 입력해주세요."
201
+ - options 제공 금지 — 자유 텍스트 입력만 허용
202
+
203
+ → base 스타일로 처리 (2-1, 2-2 실행).
175
204
 
176
- 2. 처리 완료 후:
177
- AskUserQuestion: "다음 브레이크포인트 디자인 URL을 입력해주세요. (없으면 '없음')"
178
- URL 입력 → @media (min-width:) 레이어 추가
179
- → 처리 완료 후 다시: "다음 브레이크포인트 디자인 URL을 입력해주세요. (없으면 '없음')"
180
- ...
181
- → "없음" Phase 3으로
205
+ 처리 완료 후 다시 질문한다:
206
+ - question: "다음 브레이크포인트 디자인 URL을 입력해주세요. (없으면 '없음')"
207
+ - options 제공 금지
208
+
209
+ URL 입력 시: @media (min-width:) 레이어 추가 후 다시 질문
210
+ → "없음" 응답 시: Phase 3으로
182
211
 
183
212
  브레이크포인트는 프레임 width에서 자동 산출.
184
213
  예: 720px → 480px(스케일), 2560px → 1920px(스케일) → @media (min-width: 1024px)
185
- ```
186
214
 
187
215
  ### 2-1. 스타일 파일 내용 작성 (첫 섹션 전)
188
216
 
@@ -196,7 +224,67 @@ Phase 1에서 빈 파일로 만든 스타일 구조에 기본 내용 Write:
196
224
  styles/{feature}/components/ ← 디렉토리
197
225
  ```
198
226
 
199
- ### 2-2. 섹션별 루프
227
+ ### 2-2. 비정형 레이어 감지 (섹션별)
228
+
229
+ ```
230
+ 각 섹션의 get_design_context 응답을 받을 때마다 개별 판정.
231
+ 한 페이지 내에서 섹션마다 모드가 다를 수 있음.
232
+
233
+ 비정형 지표 (하나라도 해당 → 해당 섹션 직역 모드):
234
+ □ 에셋 URL 15개 이상
235
+ □ 소수점 좌표 사용 (left-[117.13px], top-[373.65px])
236
+ □ mix-blend-mode 사용 (mix-blend-lighten, mix-blend-multiply, mix-blend-hue)
237
+ □ rotate/scale 변환 사용 (rotate-[149.7deg], -scale-y-100)
238
+ □ mask-image 사용
239
+ □ blur 필터 사용 (blur-[3.5px])
240
+ □ 2560px 이상 원본 해상도에서 트리밍된 BG 구조
241
+
242
+ 정형 지표 (전부 해당 → 해당 섹션 일반 모드):
243
+ □ flex/grid 기반 정형 레이아웃
244
+ □ 에셋 URL 10개 미만
245
+ □ absolute 좌표 없거나 정수값만
246
+ □ mix-blend/rotate/mask/blur 미사용
247
+
248
+ 섹션별 판정 결과 테이블 출력:
249
+ ┌──────────┬──────────┐
250
+ │ 섹션 │ 모드 │
251
+ ├──────────┼──────────┤
252
+ │ Hero │ 직역 │
253
+ │ KID │ 직역 │
254
+ │ Daily │ 직역 │
255
+ │ Caution │ 일반 │
256
+ │ ... │ ... │
257
+ └──────────┴──────────┘
258
+
259
+ 혼합 섹션 (배경=비정형, 콘텐츠=정형):
260
+ → 직역 모드 적용 (비정형이 하나라도 있으면 직역)
261
+ → 콘텐츠 영역의 반복 패턴(v-for 등)은 직역 내에서 유지
262
+ ```
263
+
264
+ ### 2-3. 큰 섹션 분할
265
+
266
+ ```
267
+ get_design_context 타임아웃 방지:
268
+
269
+ 섹션 높이가 1500px 이상이면 (모바일/PC 무관):
270
+ 사전 분할: get_design_context 호출 전에 먼저 분할
271
+ 1. get_metadata(섹션 nodeId)로 하위 노드 목록 확보
272
+ 2. 하위 노드별로 get_design_context 호출 (분할)
273
+ 3. 결과를 합쳐서 하나의 섹션으로 처리
274
+
275
+ 타임아웃 발생 시 (분할 없이 호출한 경우):
276
+ 1회 재시도 (excludeScreenshot: true)
277
+ → 실패 시 즉시 분할 전략으로 전환 (3회 반복 금지)
278
+ → 분할도 불가하면 get_screenshot + 스크린샷 기반 구현
279
+ (이 경우 CSS 값은 스크린샷에서 추정 — 품질 하락 감수)
280
+
281
+ 실전 데이터 (PUBG 겨울 PC방 기준):
282
+ 정상 응답: ~900px 이하 (KID 238px, Caution 880px, Anchor 652px)
283
+ 타임아웃: 2000px+ (Daily 2372~3604, PlayTime 2000~2613, Exchange 2832~4342)
284
+ 파일 저장: Hero 1280px (92K~130K chars — 에셋 40개로 크기 큼)
285
+ ```
286
+
287
+ ### 2-4. 섹션별 루프
200
288
 
201
289
  **각 섹션에 대해 순서대로, 한 섹션을 완전히 완료한 후 다음으로:**
202
290
 
@@ -219,61 +307,92 @@ get_design_context(fileKey, 섹션.nodeId)
219
307
  ```
220
308
  vibe-figma-extract 스킬 참조.
221
309
 
222
- 참조 코드에서 모든 에셋 URL 추출 → 다운로드 → 검증.
310
+ 참조 코드에서 모든 에셋 URL 빠짐없이 추출 → 다운로드 → 검증.
311
+ "핵심 에셋만" 금지. const img... 로 시작하는 모든 URL을 다운로드.
223
312
  이미지가 모두 로컬에 있어야 c 단계로 진행.
224
313
  하나라도 실패하면 코드 생성하지 않음.
225
314
  ```
226
315
 
227
- #### c. 참조 코드 외부 스타일 파일
316
+ #### c. 코드 변환 (모드별 분기)
228
317
 
229
318
  ```
230
- vibe-figma-convert 스킬 참조.
319
+ 직역 모드 (비정형 레이어):
320
+ vibe-figma-convert 스킬의 "직역 모드" 참조.
321
+
322
+ 참조 코드의 JSX 구조 + Tailwind 클래스를 1:1로 변환:
323
+ - React JSX → Vue/Nuxt template (className→class 등)
324
+ - Tailwind 클래스 → <style scoped> 내 CSS 클래스 (값 그대로 유지)
325
+ - src={변수} → 로컬 이미지 경로
326
+ - style={{ maskImage: ... }} → :style="{ maskImage: ... }"
327
+ - 소수점 좌표, rotate, mix-blend-mode 전부 보존
328
+ - scaleFactor 적용: px 값만 스케일링, 나머지(색상, opacity, blend) 유지
329
+
330
+ 외부 SCSS 파일 생성하지 않음.
331
+ 컴포넌트에 <style scoped> 블록으로 스타일 포함.
231
332
 
232
- 참조 코드의 Tailwind 클래스에서 CSS 값 추출:
233
- text-[48px] → font-size: 36px (48 × 0.75)
234
- text-[#1B3A1D] → color: #1B3A1D
235
- bg-[#0A1628] → background-color: #0A1628
236
- pt-[120px] → padding-top: 90px (120 × 0.75)
333
+ 일반 모드 (정형 레이어):
334
+ vibe-figma-convert 스킬의 기존 방식 참조.
237
335
 
238
- Write/Edit:
239
- styles/{feature}/layout/_{section}.scss ← 배치/구조/배경이미지
240
- styles/{feature}/components/_{section}.scss 텍스트/버튼/카드 스타일
241
- styles/{feature}/_tokens.scss ← 토큰 추가
336
+ 참조 코드의 Tailwind 클래스에서 CSS 값 추출:
337
+ text-[48px] → font-size: 36px (48 × 0.75)
338
+ text-[#1B3A1D] color: #1B3A1D
339
+ bg-[#0A1628] background-color: #0A1628
340
+ pt-[120px] → padding-top: 90px (120 × 0.75)
341
+
342
+ Write/Edit:
343
+ styles/{feature}/layout/_{section}.scss ← 배치/구조/배경이미지
344
+ styles/{feature}/components/_{section}.scss ← 텍스트/버튼/카드 스타일
345
+ styles/{feature}/_tokens.scss ← 새 토큰 추가
242
346
  ```
243
347
 
244
348
  #### d. Phase 1 컴포넌트 template 리팩토링
245
349
 
246
350
  ```
247
- vibe-figma-convert 스킬 참조.
351
+ 직역 모드:
352
+ Phase 1 컴포넌트의 template을 참조 코드의 HTML 구조로 교체.
353
+ script(JSDoc, 인터페이스, 목 데이터, 핸들러)는 보존.
354
+
355
+ 변환 핵심:
356
+ - 참조 코드의 div/img 구조를 거의 그대로 유지
357
+ - 모든 이미지 경로를 로컬 경로로 교체
358
+ - Phase 1의 기능 요소(v-for, @click, v-if)를 적절한 위치에 재배치
359
+ - <style scoped>에 Tailwind→CSS 변환 결과 포함
360
+ - 장식 이미지에 alt="" aria-hidden="true"
248
361
 
249
- Phase 1에서 만든 컴포넌트의 template을 참조 코드 기반으로 리팩토링.
250
- script(JSDoc 주석, 인터페이스, 목 데이터, 핸들러)는 보존.
362
+ 일반 모드:
363
+ vibe-figma-convert 스킬 참조.
251
364
 
252
- template 변경 사항:
253
- - 참조 코드의 HTML 구조를 프로젝트 스택으로 변환
254
- - 이미지 경로를 다운로드된 로컬 경로로 설정
255
- - 배경 이미지 섹션은 Multi-Layer 구조 (.{section}Bg + .{section}Content)
256
- - 클래스명을 외부 스타일 파일의 셀렉터와 매칭
257
- - Phase 1의 기능 요소(v-for, @click, v-if)를 새 구조에 재배치
365
+ Phase 1에서 만든 컴포넌트의 template 참조 코드 기반으로 리팩토링.
366
+ script(JSDoc 주석, 인터페이스, 데이터, 핸들러)는 보존.
258
367
 
259
- 컴포넌트에 <style> 블록 없음. 스타일은 전부 외부 파일.
368
+ template 변경 사항:
369
+ - 참조 코드의 HTML 구조를 프로젝트 스택으로 변환
370
+ - 이미지 경로를 다운로드된 로컬 경로로 설정
371
+ - 배경 이미지 섹션은 Multi-Layer 구조 (.{section}Bg + .{section}Content)
372
+ - 클래스명을 외부 스타일 파일의 셀렉터와 매칭
373
+ - Phase 1의 기능 요소(v-for, @click, v-if)를 새 구조에 재배치
374
+
375
+ 컴포넌트에 <style> 블록 없음. 스타일은 전부 외부 파일.
260
376
  ```
261
377
 
262
378
  #### e. 섹션 검증
263
379
 
264
380
  ```
265
- Grep으로 확인:
266
- □ "figma.com/api" in 생성 파일 → 0건
267
- □ "<style" in 컴포넌트 파일 → 0건
268
- □ "placeholder" in 컴포넌트 파일 → 0건
269
- 'src=""' in 컴포넌트 파일 → 0건
381
+ 공통 체크:
382
+ Grep: "figma.com/api" in 생성 파일 → 0건
383
+ Grep: "placeholder" in 컴포넌트 파일 → 0건
384
+ Grep: 'src=""' in 컴포넌트 파일 → 0건
385
+ Glob: images/{feature}/*.webp 이미지 파일 존재
386
+ □ Read: 컴포넌트 template에 실제 HTML 태그 존재 (빈 template 아님)
270
387
 
271
- Read로 확인:
272
- 컴포넌트 template에 실제 HTML 태그 존재 (빈 template 아님)
273
- 외부 스타일 파일에 font-size, color, background-image 존재
388
+ 일반 모드 추가 체크:
389
+ Grep: "<style" in 컴포넌트 파일 0건
390
+ Grep: 'style="' in 컴포넌트 파일 0건
391
+ □ Read: 외부 스타일 파일에 font-size, color, background-image 존재
274
392
 
275
- Glob로 확인:
276
- 이미지 파일 존재 (public/images/{feature}/*.webp)
393
+ 직역 모드 추가 체크:
394
+ Read: <style scoped> 블록에 position, transform, mix-blend-mode 존재
395
+ □ 에셋 수 = 다운로드된 이미지 수 (누락 0)
277
396
 
278
397
  실패 시 → 해당 항목 수정 → 재검증
279
398
  ```
@@ -0,0 +1,51 @@
1
+ # Extraction Checklist — What to Extract from Figma
2
+
3
+ ## Colors
4
+
5
+ - [ ] Background colors (`bg-[#...]`) — section, card, overlay backgrounds
6
+ - [ ] Text colors (`text-[#...]`) — heading, body, label, disabled states
7
+ - [ ] Border colors (`border-[#...]`) — dividers, input outlines
8
+ - [ ] Overlay/alpha colors (`rgba(...)`) — modals, hover states
9
+ - [ ] Gradient stops — linear/radial gradients with exact hex + stop positions
10
+ - [ ] Blend mode colors — any element using `mix-blend-*`
11
+
12
+ ## Spacing
13
+
14
+ - [ ] Section padding (`pt-[Npx]`, `pb-[Npx]`, `px-[Npx]`)
15
+ - [ ] Component gaps (`gap-[Npx]`) — flex/grid item spacing
16
+ - [ ] Inner padding (`p-[Npx]`, `px-[Npx]`) — cards, buttons
17
+ - [ ] Margin overrides (`mt-`, `mb-`, `ml-`, `mr-`)
18
+ - [ ] Absolute offsets (`top-[Npx]`, `left-[Npx]`) — positioned layers
19
+
20
+ ## Typography
21
+
22
+ - [ ] Font family — extract from `font-[family-name:var(--...)]` fallback
23
+ - [ ] Font sizes (`text-[Npx]`) — all unique sizes per role (heading, sub, body, caption)
24
+ - [ ] Font weights (`font-black/bold/semibold/medium/normal`)
25
+ - [ ] Line heights (`leading-[N]` or `leading-[Npx]`)
26
+ - [ ] Letter spacing (`tracking-[Npx]` or `tracking-[-Npx]`)
27
+ - [ ] Text alignment (`text-center`, `text-left`, `text-right`)
28
+ - [ ] Text decoration / transform if present
29
+
30
+ ## Components
31
+
32
+ - [ ] Button variants — primary, secondary, disabled; exact size + color + radius
33
+ - [ ] Card structures — border, shadow (`shadow-[...]`), border-radius
34
+ - [ ] Icon dimensions — width/height from `w-[Npx] h-[Npx]`
35
+ - [ ] Badges/tags — background color, font, padding, radius
36
+ - [ ] Input fields — border, focus ring, placeholder color
37
+ - [ ] Navigation — GNB/footer height, link styles
38
+
39
+ ## Assets
40
+
41
+ - [ ] All `const img...` URL variables in reference code — zero omissions
42
+ - [ ] Background images vs content images vs decorative images classified
43
+ - [ ] Image dimensions noted for `width`/`height` attributes
44
+ - [ ] Sprite/overflow images identified (left negative %, width >100%)
45
+
46
+ ## Tokens to Create
47
+
48
+ - [ ] Color tokens for every unique hex value used more than once
49
+ - [ ] Spacing tokens for recurring gap/padding values
50
+ - [ ] Typography tokens for each font-size role
51
+ - [ ] Breakpoint token (`$bp-pc`) from CONFIG frame
@@ -0,0 +1,96 @@
1
+ # Figma Handoff — {{FEATURE_NAME}}
2
+
3
+ **Figma File:** {{FIGMA_FILE_URL}}
4
+ **Feature Key:** {{FEATURE_KEY}} (kebab-case)
5
+ **Date:** {{DATE}}
6
+ **Stack:** {{STACK}} (e.g. Vue/Nuxt + SCSS, React/Next.js + SCSS)
7
+
8
+ ---
9
+
10
+ ## Design Specs
11
+
12
+ ### Viewport / Scale
13
+
14
+ | Breakpoint | Design Width | Target Width | Scale Factor |
15
+ |-----------|-------------|-------------|-------------|
16
+ | Mobile (base) | {{DESIGN_MOBILE_PX}}px | {{TARGET_MOBILE_PX}}px | {{SCALE_MOBILE}} |
17
+ | Desktop | {{DESIGN_PC_PX}}px | {{TARGET_PC_PX}}px | {{SCALE_PC}} |
18
+
19
+ Breakpoint threshold: `@media (min-width: {{BP_PC}}px)`
20
+
21
+ ### Color Tokens
22
+
23
+ | Token | Hex | Usage |
24
+ |-------|-----|-------|
25
+ | `$color-{{NAME}}` | `{{HEX}}` | {{USAGE}} |
26
+
27
+ ### Typography Tokens
28
+
29
+ | Token | Figma px | Scaled px | Weight | Role |
30
+ |-------|---------|----------|--------|------|
31
+ | `$text-{{ROLE}}` | {{FIGMA_PX}}px | {{SCALED_PX}}px | {{WEIGHT}} | {{ROLE}} |
32
+
33
+ ### Spacing Tokens
34
+
35
+ | Token | Figma px | Scaled px | Usage |
36
+ |-------|---------|----------|-------|
37
+ | `$space-{{NAME}}` | {{FIGMA_PX}}px | {{SCALED_PX}}px | {{USAGE}} |
38
+
39
+ ---
40
+
41
+ ## Sections
42
+
43
+ | # | Section Name | Component File | Mode | Height (design) |
44
+ |---|-------------|---------------|------|----------------|
45
+ | 1 | {{SECTION_NAME}} | `components/{{FEATURE_KEY}}/{{ComponentName}}.vue` | {{MODE}} | {{HEIGHT}}px |
46
+
47
+ **Mode key:** `normal` = external SCSS | `literal` = scoped CSS (non-standard layout)
48
+
49
+ ---
50
+
51
+ ## Asset Manifest
52
+
53
+ | Variable | Local Path | Type | Alt Text |
54
+ |----------|-----------|------|----------|
55
+ | `{{IMG_VAR}}` | `/images/{{FEATURE_KEY}}/{{FILE_NAME}}.webp` | {{bg\|content\|decorative}} | {{ALT}} |
56
+
57
+ Total assets: {{ASSET_COUNT}}
58
+
59
+ ---
60
+
61
+ ## File Structure
62
+
63
+ ```
64
+ components/{{FEATURE_KEY}}/
65
+ {{ComponentName}}.vue
66
+
67
+ public/images/{{FEATURE_KEY}}/
68
+ {{FILE_NAME}}.webp
69
+
70
+ styles/{{FEATURE_KEY}}/
71
+ index.scss
72
+ _tokens.scss
73
+ _mixins.scss
74
+ _base.scss
75
+ layout/
76
+ _{{section}}.scss
77
+ components/
78
+ _{{section}}.scss
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Verification Checklist
84
+
85
+ - [ ] No `figma.com/api` URLs in any generated file
86
+ - [ ] No `placeholder` or empty `src=""` in components
87
+ - [ ] No `<style>` blocks in components (normal mode)
88
+ - [ ] All assets downloaded and non-zero bytes
89
+ - [ ] Build passes without errors
90
+ - [ ] Screenshot comparison: P1 issues = 0
91
+
92
+ ---
93
+
94
+ ## Notes
95
+
96
+ {{NOTES}}
@@ -0,0 +1,53 @@
1
+ # Analysis Dimensions — Figma Design Analysis
2
+
3
+ > This skill is merged into vibe-figma (Phase 1: Storyboard). These dimensions guide what to extract and evaluate when reading Figma frames.
4
+
5
+ ## Layout
6
+
7
+ - [ ] Overall page structure — single column, multi-column, grid, or free-form absolute
8
+ - [ ] Section boundaries — identify where each distinct section starts/ends by visual grouping
9
+ - [ ] Container width — fixed px vs fluid (100%)
10
+ - [ ] Alignment system — centered, left-aligned, or asymmetric
11
+ - [ ] Z-layering — how many stacked layers exist (BG/content/overlay count)
12
+ - [ ] Overflow behavior — clip, hidden, visible, scroll
13
+
14
+ ## Spacing Consistency
15
+
16
+ - [ ] Gap between sections — does a single spacing value repeat, or is each unique?
17
+ - [ ] Internal component padding — consistent across card variants?
18
+ - [ ] Icon-to-text gap — uniform within a component family?
19
+ - [ ] Recurring values — list values that appear 3+ times (these become spacing tokens)
20
+ - [ ] Irregular values — flag one-off spacings that may indicate design inconsistency
21
+
22
+ ## Color Usage
23
+
24
+ - [ ] Background palette — how many distinct background colors exist?
25
+ - [ ] Text color roles — identify heading / body / label / disabled colors separately
26
+ - [ ] Accent/brand colors — primary CTA color, hover state color
27
+ - [ ] Transparency usage — rgba overlays, opacity layers
28
+ - [ ] Blend modes present — `mix-blend-lighten`, `multiply`, `hue` flag a literal-mode section
29
+ - [ ] Dark/light variants — does the design have both, requiring CSS variable tokens?
30
+
31
+ ## Typography Hierarchy
32
+
33
+ - [ ] H1 equivalent — largest display text, font-size + weight + role
34
+ - [ ] H2 / section heading — size, weight, color
35
+ - [ ] Body text — base size, line-height, color
36
+ - [ ] Caption / label text — smallest size, usage context
37
+ - [ ] Font families — how many distinct families? Any variable fonts?
38
+ - [ ] Responsive scaling — does font-size change across breakpoints?
39
+
40
+ ## Component Inventory
41
+
42
+ - [ ] Repeating UI patterns — cards, list items, tabs (candidates for `v-for`)
43
+ - [ ] State variants — default, hover, active, disabled, selected (note which states exist)
44
+ - [ ] Shared components — GNB, Footer, Popup (already in project or needs creation?)
45
+ - [ ] Interactive elements — buttons, links, inputs, toggles
46
+ - [ ] Decorative elements — particles, background shapes, overlay effects
47
+
48
+ ## Storyboard-Specific Dimensions
49
+
50
+ - [ ] Frame classification — SPEC, CONFIG, SHARED, PAGE (by name pattern)
51
+ - [ ] Interaction annotations — arrows, overlay connections, state transitions in Figma
52
+ - [ ] Section count — total PAGE frames that need components
53
+ - [ ] Tall frames (1500px+) — flag for split strategy before `get_design_context`
@@ -0,0 +1,54 @@
1
+ # Code Generation Quality Checklist
2
+
3
+ > This skill is merged into vibe-figma-convert. Use this checklist to validate generated component and style files before moving to the next section.
4
+
5
+ ## Structure
6
+
7
+ - [ ] Component file exists at `components/{feature}/{ComponentName}.vue` (or `.tsx`)
8
+ - [ ] Template is not empty — at least one visible HTML element with content
9
+ - [ ] No `placeholder` text remaining in any attribute or text node
10
+ - [ ] No `src=""` or `href=""` empty attributes
11
+
12
+ ## Assets
13
+
14
+ - [ ] All `const img...` variables from reference code are replaced with local `/images/{feature}/` paths
15
+ - [ ] No `figma.com/api` URLs in any generated file
16
+ - [ ] Every image path references a file that was actually downloaded (cross-check image map)
17
+ - [ ] Decorative images have `alt="" aria-hidden="true"`
18
+ - [ ] Content images have descriptive `alt` text
19
+
20
+ ## Styles (Normal Mode)
21
+
22
+ - [ ] No `<style>` block inside the component file
23
+ - [ ] No inline `style=""` attribute (exception: dynamic `:style` for mask-image)
24
+ - [ ] External layout file exists at `styles/{feature}/layout/_{section}.scss`
25
+ - [ ] External components file exists at `styles/{feature}/components/_{section}.scss`
26
+ - [ ] `_tokens.scss` updated with any new unique color/spacing/typography values
27
+
28
+ ## Styles (Literal Mode)
29
+
30
+ - [ ] `<style scoped>` block present in component
31
+ - [ ] No external SCSS files created for this section
32
+ - [ ] All `position: absolute` coordinates are scaled by scaleFactor
33
+ - [ ] `mix-blend-mode`, `rotate`, `blur`, `mask-image` values preserved verbatim
34
+ - [ ] `%` values not scaled (only `px` values are scaled)
35
+
36
+ ## TypeScript / Script
37
+
38
+ - [ ] JSDoc comment present with `[기능 정의]`, `[인터랙션]`, `[상태]` sections
39
+ - [ ] No `any` type — use explicit interfaces or `unknown`
40
+ - [ ] Mock data arrays have 3–7 items (not empty `[]`)
41
+ - [ ] Event handler stubs exist with `// TODO:` body
42
+ - [ ] Explicit return types on all functions
43
+
44
+ ## Responsive
45
+
46
+ - [ ] Base styles target the smallest viewport (mobile-first)
47
+ - [ ] Desktop overrides use `@media (min-width: {$bp-pc})` or the project mixin
48
+ - [ ] No existing base styles deleted when adding breakpoint overrides
49
+
50
+ ## Build
51
+
52
+ - [ ] No TypeScript compile errors in the generated file
53
+ - [ ] No missing imports (components, composables, types)
54
+ - [ ] Template references only props/data/computed that are declared in `<script setup>`
@@ -0,0 +1,95 @@
1
+ # Consolidation Report — {{FEATURE_NAME}}
2
+
3
+ **Feature Key:** {{FEATURE_KEY}}
4
+ **Date:** {{DATE}}
5
+ **Phase:** Post-implementation verification
6
+
7
+ ---
8
+
9
+ ## Summary
10
+
11
+ | Metric | Value |
12
+ |--------|-------|
13
+ | Total sections | {{SECTION_COUNT}} |
14
+ | Sections passing | {{PASS_COUNT}} |
15
+ | P1 issues found | {{P1_COUNT}} |
16
+ | P2 issues found | {{P2_COUNT}} |
17
+ | Assets downloaded | {{ASSET_COUNT}} |
18
+ | Build status | {{BUILD_STATUS}} |
19
+
20
+ ---
21
+
22
+ ## Automated Grep Results
23
+
24
+ | Check | Result | Details |
25
+ |-------|--------|---------|
26
+ | `figma.com/api` in generated files | {{PASS/FAIL}} | {{COUNT}} occurrences |
27
+ | `<style` in `components/{{FEATURE_KEY}}/` | {{PASS/FAIL}} | {{COUNT}} occurrences |
28
+ | `style="` in `components/{{FEATURE_KEY}}/` | {{PASS/FAIL}} | {{COUNT}} occurrences |
29
+ | `placeholder` in components | {{PASS/FAIL}} | {{COUNT}} occurrences |
30
+ | `src=""` in components | {{PASS/FAIL}} | {{COUNT}} occurrences |
31
+ | Images in `public/images/{{FEATURE_KEY}}/` | {{PASS/FAIL}} | {{COUNT}} files |
32
+
33
+ ---
34
+
35
+ ## Section Review
36
+
37
+ | # | Section | Component | Mode | Screenshot Match | P1 | P2 |
38
+ |---|---------|-----------|------|-----------------|----|----|
39
+ | 1 | {{SECTION_NAME}} | `{{ComponentName}}.vue` | {{normal/literal}} | {{match %}} | {{count}} | {{count}} |
40
+
41
+ ---
42
+
43
+ ## P1 Issues (Must Fix)
44
+
45
+ ### {{SECTION_NAME}} — {{ISSUE_TITLE}}
46
+
47
+ **Type:** {{image-missing / layout-mismatch / text-unstyled / asset-wrong-path}}
48
+ **Description:** {{DESCRIPTION}}
49
+ **Fix:** {{FIX_INSTRUCTION}}
50
+ **Status:** {{open / fixed}}
51
+
52
+ ---
53
+
54
+ ## P2 Issues (Recommended)
55
+
56
+ ### {{SECTION_NAME}} — {{ISSUE_TITLE}}
57
+
58
+ **Type:** {{spacing-delta / color-delta / font-size-delta}}
59
+ **Description:** {{DESCRIPTION}} (delta: {{DELTA}})
60
+ **Fix:** {{FIX_INSTRUCTION}}
61
+ **Status:** {{open / deferred}}
62
+
63
+ ---
64
+
65
+ ## File Manifest
66
+
67
+ ### Components
68
+
69
+ ```
70
+ components/{{FEATURE_KEY}}/
71
+ {{FILE_LIST}}
72
+ ```
73
+
74
+ ### Styles
75
+
76
+ ```
77
+ styles/{{FEATURE_KEY}}/
78
+ {{FILE_LIST}}
79
+ ```
80
+
81
+ ### Assets
82
+
83
+ ```
84
+ public/images/{{FEATURE_KEY}}/
85
+ {{FILE_LIST}}
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Next Steps
91
+
92
+ - [ ] P1 count = 0 (required before handoff)
93
+ - [ ] Run `/design-normalize` → `/design-audit --quick`
94
+ - [ ] Optional: `/design-critique` → `/design-polish` for thorough review
95
+ - [ ] Commit with feature key tag: `feat({{FEATURE_KEY}}): figma design implementation`