@su-record/vibe 2.8.49 → 2.8.51

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 (421) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +169 -169
  3. package/LICENSE +21 -21
  4. package/README.ko.md +190 -0
  5. package/README.md +97 -461
  6. package/agents/architect-low.md +41 -41
  7. package/agents/architect-medium.md +59 -59
  8. package/agents/architect.md +80 -80
  9. package/agents/build-error-resolver.md +115 -115
  10. package/agents/compounder.md +261 -261
  11. package/agents/diagrammer.md +178 -178
  12. package/agents/docs/api-documenter.md +99 -99
  13. package/agents/docs/changelog-writer.md +93 -93
  14. package/agents/e2e-tester.md +294 -294
  15. package/agents/event/event-comms.md +78 -78
  16. package/agents/event/event-content.md +68 -68
  17. package/agents/event/event-image.md +95 -95
  18. package/agents/event/event-ops.md +84 -84
  19. package/agents/event/event-scheduler.md +69 -69
  20. package/agents/event/event-speaker.md +86 -86
  21. package/agents/explorer-low.md +42 -42
  22. package/agents/explorer-medium.md +59 -59
  23. package/agents/explorer.md +48 -48
  24. package/agents/implementer-low.md +43 -43
  25. package/agents/implementer-medium.md +52 -52
  26. package/agents/implementer.md +54 -54
  27. package/agents/junior-mentor.md +141 -141
  28. package/agents/planning/requirements-analyst.md +84 -84
  29. package/agents/planning/ux-advisor.md +83 -83
  30. package/agents/qa/acceptance-tester.md +86 -86
  31. package/agents/qa/edge-case-finder.md +93 -93
  32. package/agents/qa/qa-coordinator.md +131 -131
  33. package/agents/refactor-cleaner.md +143 -143
  34. package/agents/research/best-practices-agent.md +199 -199
  35. package/agents/research/codebase-patterns-agent.md +157 -157
  36. package/agents/research/framework-docs-agent.md +188 -188
  37. package/agents/research/security-advisory-agent.md +213 -213
  38. package/agents/review/architecture-reviewer.md +107 -107
  39. package/agents/review/complexity-reviewer.md +116 -116
  40. package/agents/review/data-integrity-reviewer.md +88 -88
  41. package/agents/review/git-history-reviewer.md +103 -103
  42. package/agents/review/performance-reviewer.md +86 -86
  43. package/agents/review/python-reviewer.md +150 -150
  44. package/agents/review/rails-reviewer.md +139 -139
  45. package/agents/review/react-reviewer.md +144 -144
  46. package/agents/review/security-reviewer.md +80 -80
  47. package/agents/review/simplicity-reviewer.md +140 -140
  48. package/agents/review/test-coverage-reviewer.md +116 -116
  49. package/agents/review/typescript-reviewer.md +127 -127
  50. package/agents/searcher.md +54 -54
  51. package/agents/simplifier.md +120 -120
  52. package/agents/tester.md +49 -49
  53. package/agents/ui/ui-a11y-auditor.md +93 -93
  54. package/agents/ui/ui-antipattern-detector.md +102 -102
  55. package/agents/ui/ui-dataviz-advisor.md +69 -69
  56. package/agents/ui/ui-design-system-gen.md +57 -57
  57. package/agents/ui/ui-industry-analyzer.md +49 -49
  58. package/agents/ui/ui-layout-architect.md +65 -65
  59. package/agents/ui/ui-stack-implementer.md +68 -68
  60. package/agents/ui/ux-compliance-reviewer.md +81 -81
  61. package/agents/ui-previewer.md +258 -258
  62. package/commands/vibe.analyze.md +379 -379
  63. package/commands/vibe.docs.md +32 -32
  64. package/commands/vibe.event.md +163 -163
  65. package/commands/vibe.figma.md +69 -69
  66. package/commands/vibe.review.md +686 -686
  67. package/commands/vibe.run.md +2276 -2276
  68. package/commands/vibe.spec.md +1195 -1195
  69. package/commands/vibe.spec.review.md +609 -609
  70. package/commands/vibe.trace.md +259 -259
  71. package/commands/vibe.utils.md +413 -413
  72. package/commands/vibe.verify.md +510 -510
  73. package/dist/cli/collaborator.js +52 -52
  74. package/dist/cli/commands/config.js +9 -9
  75. package/dist/cli/commands/evolution.js +12 -12
  76. package/dist/cli/commands/figma.js +20 -20
  77. package/dist/cli/commands/info.js +53 -53
  78. package/dist/cli/commands/init.js +5 -5
  79. package/dist/cli/commands/remove.js +14 -14
  80. package/dist/cli/commands/sentinel.js +27 -27
  81. package/dist/cli/commands/skills.js +5 -5
  82. package/dist/cli/commands/slack.js +10 -10
  83. package/dist/cli/commands/stats.js +6 -6
  84. package/dist/cli/commands/telegram.js +12 -12
  85. package/dist/cli/detect.js +32 -32
  86. package/dist/cli/index.d.ts.map +1 -1
  87. package/dist/cli/index.js +52 -57
  88. package/dist/cli/index.js.map +1 -1
  89. package/dist/cli/llm/claude-commands.js +16 -16
  90. package/dist/cli/llm/config.js +18 -18
  91. package/dist/cli/llm/gemini-commands.js +16 -16
  92. package/dist/cli/llm/gpt-commands.js +19 -19
  93. package/dist/cli/llm/help.js +21 -21
  94. package/dist/cli/postinstall/cursor-agents.js +32 -32
  95. package/dist/cli/postinstall/cursor-rules.js +83 -83
  96. package/dist/cli/postinstall/cursor-skills.js +743 -743
  97. package/dist/cli/postinstall/inline-skills.js +2 -2
  98. package/dist/cli/postinstall/inline-skills.js.map +1 -1
  99. package/dist/cli/postinstall/main.js +1 -1
  100. package/dist/cli/postinstall/main.js.map +1 -1
  101. package/dist/cli/setup/Provisioner.js +42 -42
  102. package/dist/infra/lib/DeepInit.js +24 -24
  103. package/dist/infra/lib/IterationTracker.js +11 -11
  104. package/dist/infra/lib/PythonParser.js +108 -108
  105. package/dist/infra/lib/ReviewRace.js +96 -96
  106. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  107. package/dist/infra/lib/SkillQualityGate.js +9 -9
  108. package/dist/infra/lib/SkillRepository.js +159 -159
  109. package/dist/infra/lib/UltraQA.js +99 -99
  110. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  111. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  112. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  113. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  114. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  115. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  116. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  117. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  118. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  119. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  120. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  121. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  122. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  123. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  124. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  125. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  126. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  127. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  128. package/dist/infra/lib/gemini/orchestration.js +5 -5
  129. package/dist/infra/lib/gpt/orchestration.js +4 -4
  130. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  131. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  132. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  133. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  134. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  135. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  136. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  137. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  138. package/dist/infra/orchestrator/AgentManager.js +12 -12
  139. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  140. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  141. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  142. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  143. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  144. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  145. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  146. package/dist/tools/memory/getMemoryGraph.js +12 -12
  147. package/dist/tools/memory/getSessionContext.js +9 -9
  148. package/dist/tools/memory/linkMemories.js +14 -14
  149. package/dist/tools/memory/listMemories.js +4 -4
  150. package/dist/tools/memory/recallMemory.js +4 -4
  151. package/dist/tools/memory/saveMemory.js +4 -4
  152. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  153. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  154. package/dist/tools/semantic/astGrep.test.js +6 -6
  155. package/dist/tools/spec/prdParser.test.js +171 -171
  156. package/dist/tools/spec/specGenerator.js +169 -169
  157. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  158. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  159. package/hooks/gemini-hooks.json +73 -73
  160. package/hooks/hooks.json +170 -170
  161. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  162. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  163. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  164. package/hooks/scripts/auto-commit.js +97 -65
  165. package/hooks/scripts/auto-format.js +64 -64
  166. package/hooks/scripts/auto-test.js +81 -81
  167. package/hooks/scripts/code-check.js +268 -216
  168. package/hooks/scripts/codex-detect.js +46 -46
  169. package/hooks/scripts/codex-review-gate.js +80 -80
  170. package/hooks/scripts/command-log.js +32 -32
  171. package/hooks/scripts/context-save.js +353 -353
  172. package/hooks/scripts/evolution-engine.js +91 -91
  173. package/hooks/scripts/figma-extract.js +477 -602
  174. package/hooks/scripts/hud-status.js +321 -321
  175. package/hooks/scripts/keyword-detector.js +214 -214
  176. package/hooks/scripts/llm-orchestrate.js +572 -555
  177. package/hooks/scripts/post-edit.js +32 -32
  178. package/hooks/scripts/pr-test-gate.js +52 -52
  179. package/hooks/scripts/pre-tool-guard.js +159 -159
  180. package/hooks/scripts/prompt-dispatcher.js +185 -185
  181. package/hooks/scripts/sentinel-guard.js +131 -131
  182. package/hooks/scripts/session-start.js +177 -106
  183. package/hooks/scripts/skill-injector.js +83 -83
  184. package/hooks/scripts/stop-notify.js +209 -209
  185. package/hooks/scripts/utils.js +243 -186
  186. package/languages/csharp-unity.md +515 -515
  187. package/languages/gdscript-godot.md +470 -470
  188. package/languages/ruby-rails.md +489 -489
  189. package/languages/typescript-angular.md +433 -433
  190. package/languages/typescript-astro.md +416 -416
  191. package/languages/typescript-electron.md +406 -406
  192. package/languages/typescript-nestjs.md +524 -524
  193. package/languages/typescript-svelte.md +407 -407
  194. package/languages/typescript-tauri.md +365 -365
  195. package/package.json +101 -100
  196. package/skills/agents-md/SKILL.md +121 -121
  197. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  198. package/skills/agents-md/templates/agents-md.md +36 -36
  199. package/skills/arch-guard/SKILL.md +181 -181
  200. package/skills/arch-guard/agents/detector.md +48 -48
  201. package/skills/arch-guard/agents/reporter.md +48 -48
  202. package/skills/arch-guard/agents/rule-generator.md +49 -49
  203. package/skills/arch-guard/agents/violation-checker.md +51 -51
  204. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  205. package/skills/arch-guard/frameworks/solid.md +102 -102
  206. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  207. package/skills/arch-guard/templates/arch-rules.json +47 -47
  208. package/skills/arch-guard/templates/violation-report.md +53 -53
  209. package/skills/brand-assets/SKILL.md +147 -147
  210. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  211. package/skills/brand-assets/templates/brand-guide.md +161 -161
  212. package/skills/capability-loop/SKILL.md +168 -168
  213. package/skills/capability-loop/agents/capability-designer.md +61 -61
  214. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  215. package/skills/capability-loop/agents/implementer.md +50 -50
  216. package/skills/capability-loop/agents/tester.md +53 -53
  217. package/skills/capability-loop/templates/capability-spec.md +118 -118
  218. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  219. package/skills/characterization-test/SKILL.md +207 -207
  220. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  221. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  222. package/skills/characterization-test/agents/reporter.md +50 -50
  223. package/skills/characterization-test/agents/test-writer.md +49 -49
  224. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  225. package/skills/characterization-test/templates/test-template.ts +101 -101
  226. package/skills/chub-usage/SKILL.md +139 -115
  227. package/skills/claude-md-guide/SKILL.md +351 -351
  228. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  229. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  230. package/skills/commerce-patterns/SKILL.md +64 -64
  231. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  232. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  233. package/skills/commit-push-pr/SKILL.md +77 -77
  234. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  235. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  236. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  237. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  238. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  239. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  240. package/skills/context7-usage/SKILL.md +106 -106
  241. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  242. package/skills/create-prd/SKILL.md +90 -90
  243. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  244. package/skills/create-prd/agents/prioritizer.md +60 -60
  245. package/skills/create-prd/agents/requirements-writer.md +48 -48
  246. package/skills/create-prd/agents/researcher.md +55 -55
  247. package/skills/create-prd/agents/reviewer.md +54 -54
  248. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  249. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  250. package/skills/create-prd/orchestrator.md +70 -70
  251. package/skills/create-prd/rubrics/completeness.md +58 -58
  252. package/skills/create-prd/templates/prd.md +139 -139
  253. package/skills/design-audit/SKILL.md +152 -152
  254. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  255. package/skills/design-audit/agents/performance-auditor.md +46 -46
  256. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  257. package/skills/design-audit/agents/scorer.md +47 -47
  258. package/skills/design-audit/agents/slop-detector.md +47 -47
  259. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  260. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  261. package/skills/design-audit/orchestrator.md +64 -64
  262. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  263. package/skills/design-audit/rubrics/scoring.md +63 -63
  264. package/skills/design-audit/templates/report.md +88 -88
  265. package/skills/design-critique/SKILL.md +139 -139
  266. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  267. package/skills/design-critique/templates/critique-report.md +86 -86
  268. package/skills/design-distill/SKILL.md +130 -130
  269. package/skills/design-distill/templates/design-system.md +132 -132
  270. package/skills/design-normalize/SKILL.md +133 -133
  271. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  272. package/skills/design-normalize/templates/token-audit.md +89 -89
  273. package/skills/design-polish/SKILL.md +131 -131
  274. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  275. package/skills/design-polish/templates/polish-report.md +64 -64
  276. package/skills/design-teach/SKILL.md +182 -182
  277. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  278. package/skills/design-teach/templates/design-context.json +36 -36
  279. package/skills/e2e-commerce/SKILL.md +62 -62
  280. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  281. package/skills/event-comms/SKILL.md +162 -162
  282. package/skills/event-comms/templates/email-invite.md +99 -99
  283. package/skills/event-comms/templates/sns-post.md +133 -133
  284. package/skills/event-ops/SKILL.md +198 -198
  285. package/skills/event-ops/rubrics/contingency.md +85 -85
  286. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  287. package/skills/event-planning/SKILL.md +132 -132
  288. package/skills/event-planning/rubrics/timeline.md +70 -70
  289. package/skills/event-planning/templates/event-plan.md +91 -91
  290. package/skills/exec-plan/SKILL.md +149 -149
  291. package/skills/exec-plan/agents/decomposer.md +47 -47
  292. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  293. package/skills/exec-plan/agents/estimator.md +43 -43
  294. package/skills/exec-plan/agents/validator.md +55 -55
  295. package/skills/exec-plan/orchestrator.md +70 -70
  296. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  297. package/skills/exec-plan/templates/plan.md +147 -147
  298. package/skills/git-worktree/SKILL.md +73 -73
  299. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  300. package/skills/handoff/SKILL.md +110 -110
  301. package/skills/handoff/agents/context-summarizer.md +51 -51
  302. package/skills/handoff/agents/document-writer.md +63 -63
  303. package/skills/handoff/agents/state-collector.md +53 -53
  304. package/skills/handoff/agents/verifier.md +48 -48
  305. package/skills/handoff/rubrics/completeness.md +62 -62
  306. package/skills/handoff/templates/handoff.md +107 -107
  307. package/skills/parallel-research/SKILL.md +89 -89
  308. package/skills/parallel-research/agents/best-practices.md +43 -43
  309. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  310. package/skills/parallel-research/agents/framework-docs.md +45 -45
  311. package/skills/parallel-research/agents/security-advisory.md +46 -46
  312. package/skills/parallel-research/agents/synthesizer.md +52 -52
  313. package/skills/parallel-research/experts/best-practices.md +50 -50
  314. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  315. package/skills/parallel-research/experts/framework-docs.md +65 -65
  316. package/skills/parallel-research/experts/security-advisory.md +69 -69
  317. package/skills/parallel-research/orchestrator.md +65 -65
  318. package/skills/parallel-research/templates/synthesis.md +101 -101
  319. package/skills/prioritization-frameworks/SKILL.md +87 -87
  320. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  321. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  322. package/skills/priority-todos/SKILL.md +64 -64
  323. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  324. package/skills/priority-todos/templates/todo-board.md +59 -59
  325. package/skills/seo-checklist/SKILL.md +58 -58
  326. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  327. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  328. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  329. package/skills/techdebt/SKILL.md +124 -124
  330. package/skills/techdebt/agents/analyzer.md +50 -50
  331. package/skills/techdebt/agents/fixer.md +41 -41
  332. package/skills/techdebt/agents/reviewer.md +47 -47
  333. package/skills/techdebt/agents/scanner.md +44 -44
  334. package/skills/techdebt/orchestrator.md +70 -70
  335. package/skills/techdebt/rubrics/severity.md +51 -51
  336. package/skills/techdebt/scripts/scan.js +90 -90
  337. package/skills/techdebt/templates/report.md +86 -86
  338. package/skills/tool-fallback/SKILL.md +104 -104
  339. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  340. package/skills/typescript-advanced-types/SKILL.md +67 -67
  341. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  342. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  343. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  344. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  345. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  346. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  347. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  348. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  349. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  350. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  351. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  352. package/skills/user-personas/SKILL.md +75 -75
  353. package/skills/user-personas/rubrics/research-methods.md +56 -56
  354. package/skills/user-personas/templates/persona.md +89 -89
  355. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  356. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  357. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  358. package/skills/vibe.docs/SKILL.md +171 -171
  359. package/skills/vibe.docs/templates/architecture.md +80 -80
  360. package/skills/vibe.docs/templates/readme.md +84 -84
  361. package/skills/vibe.docs/templates/release-notes.md +74 -74
  362. package/skills/vibe.figma/SKILL.md +982 -209
  363. package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
  364. package/skills/vibe.figma/templates/component-index.md +126 -126
  365. package/skills/vibe.figma/templates/figma-handoff.md +100 -100
  366. package/skills/vibe.figma/templates/remapped-tree.md +277 -277
  367. package/skills/vibe.figma.convert/SKILL.md +511 -630
  368. package/skills/vibe.figma.convert/rubrics/conversion-rules.md +113 -129
  369. package/skills/vibe.figma.convert/templates/component.md +140 -140
  370. package/skills/vibe.figma.extract/SKILL.md +300 -349
  371. package/skills/vibe.figma.extract/rubrics/image-rules.md +137 -145
  372. package/skills/video-production/SKILL.md +52 -52
  373. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  374. package/skills/video-production/templates/production-plan.md +104 -104
  375. package/vibe/config.json +29 -29
  376. package/vibe/constitution.md +227 -227
  377. package/vibe/rules/principles/communication-guide.md +98 -98
  378. package/vibe/rules/principles/development-philosophy.md +52 -52
  379. package/vibe/rules/principles/quick-start.md +102 -102
  380. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  381. package/vibe/rules/quality/checklist.md +276 -276
  382. package/vibe/rules/quality/performance.md +236 -236
  383. package/vibe/rules/quality/testing-strategy.md +440 -440
  384. package/vibe/rules/standards/anti-patterns.md +541 -541
  385. package/vibe/rules/standards/code-structure.md +291 -291
  386. package/vibe/rules/standards/complexity-metrics.md +313 -313
  387. package/vibe/rules/standards/git-workflow.md +237 -237
  388. package/vibe/rules/standards/naming-conventions.md +198 -198
  389. package/vibe/rules/standards/security.md +305 -305
  390. package/vibe/rules/writing/document-style.md +74 -74
  391. package/vibe/setup.sh +31 -31
  392. package/vibe/templates/constitution-template.md +252 -252
  393. package/vibe/templates/contract-backend-template.md +526 -526
  394. package/vibe/templates/contract-frontend-template.md +599 -599
  395. package/vibe/templates/feature-template.md +96 -96
  396. package/vibe/templates/spec-template.md +221 -221
  397. package/vibe/ui-ux-data/charts.csv +26 -26
  398. package/vibe/ui-ux-data/colors.csv +97 -97
  399. package/vibe/ui-ux-data/icons.csv +101 -101
  400. package/vibe/ui-ux-data/landing.csv +31 -31
  401. package/vibe/ui-ux-data/products.csv +96 -96
  402. package/vibe/ui-ux-data/react-performance.csv +45 -45
  403. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  404. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  405. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  406. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  407. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  408. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  409. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  410. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  411. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  412. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  413. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  414. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  415. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  416. package/vibe/ui-ux-data/styles.csv +68 -68
  417. package/vibe/ui-ux-data/typography.csv +57 -57
  418. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  419. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  420. package/vibe/ui-ux-data/version.json +31 -31
  421. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -1,349 +1,300 @@
1
- ---
2
- name: vibe.figma.extract
3
- description: Figma REST API로 코드 생성 데이터 확보 — 트리(primary), 이미지, 스크린샷(검증용)
4
- triggers: []
5
- tier: standard
6
- ---
7
-
8
- # vibe.figma.extract — 코드 생성 데이터 확보
9
-
10
- Figma REST API(`src/infra/lib/figma/`)를 사용하여 **구조적 코드 생성에 필요한 모든 데이터**를 추출.
11
-
12
- ```
13
- 불변 규칙 — screenshot 명령의 허용 범위:
14
- BG 프레임 렌더링 (TEXT 자식이 없는 순수 배경만)
15
- 벡터 글자 GROUP (웹폰트 없는 장식 타이틀)
16
- 개별 아이콘/썸네일 (50~300px 독립 에셋)
17
- ✅ 섹션별 전체 스크린샷 → sections/ (Phase 6 검증용)
18
- ❌ TEXT 자식이 있는 프레임 (가격, 수량, 설명 등)
19
- ❌ INSTANCE 반복 패턴 프레임 (카드 그리드, 보상 목록)
20
- ❌ 버튼/인터랙티브 요소가 있는 프레임
21
- "섹션 콘텐츠"를 통째로 렌더링
22
- ```
23
-
24
- ```
25
- 추출 우선순위:
26
- 1순위: 노드 트리 + CSS (코드 생성의 PRIMARY 소스)
27
- 2순위: 이미지 에셋 (fill 이미지 + 아이템 노드 렌더링)
28
- 3순위: 스크린샷 (Phase 4 시각 검증용 — 코드 생성에 사용하지 않음)
29
- ```
30
-
31
- ---
32
-
33
- ## 1. 노드 트리 + CSS — 코드 생성의 원천
34
-
35
- ```
36
- 가장 먼저 확보. 이것이 HTML + SCSS 코드의 직접적 소스.
37
-
38
- Bash:
39
- node "[FIGMA_SCRIPT]" tree {fileKey} {nodeId} --depth=10
40
-
41
- 반환 (FigmaNode JSON):
42
- {
43
- nodeId: "641:78152",
44
- name: "KID",
45
- type: "INSTANCE",
46
- size: { width: 720, height: 487 },
47
- css: { display: "flex", flexDirection: "column", gap: "32px", ... },
48
- text: "텍스트 내용" (TEXT 노드만),
49
- imageRef: "abc123" (이미지 fill이 있는 노드만),
50
- children: [...]
51
- }
52
-
53
- → /tmp/{feature}/tree.json 에 저장
54
-
55
- 트리 데이터의 용도 (vibe.figma.convert에서 직접 매핑):
56
- - Auto Layout CSS Flexbox (direction, gap, padding, align 1:1)
57
- - absoluteBoundingBox → width, height (→ vw 변환)
58
- - fills/strokes/effects background, border, shadow
59
- - TEXT 노드 텍스트 콘텐츠 + 타이포그래피 CSS
60
- - imageRef 이미지 에셋 매핑
61
- - name/type 시맨틱 태그 판단 힌트 (Claude 사용)
62
- ```
63
-
64
- ### Figma 속성 CSS 직접 매핑표
65
-
66
- 트리 추출 도구가 자동 변환하는 속성. **이 값들이 SCSS에 직접 매핑된다:**
67
-
68
- **레이아웃:**
69
-
70
- | Figma 속성 | CSS | vw 변환 |
71
- |-----------|-----|---------|
72
- | `layoutMode=VERTICAL` | `display:flex; flex-direction:column` | |
73
- | `layoutMode=HORIZONTAL` | `display:flex; flex-direction:row` | |
74
- | `primaryAxisAlignItems` | `justify-content` | |
75
- | `counterAxisAlignItems` | `align-items` | ❌ |
76
- | `itemSpacing` | `gap` | |
77
- | `layoutGrow=1` | `flex-grow: 1` | ❌ |
78
- | `padding*` | `padding` | ✅ |
79
- | `absoluteBoundingBox.width/height` | `width/height` | |
80
- | `layoutPositioning=ABSOLUTE` | `position: absolute` + `top/left` (부모 상대 좌표) | |
81
- | `layoutSizingHorizontal=HUG` | width 삭제 (auto) | |
82
- | `layoutSizingHorizontal=FILL` | 메타데이터 `layoutSizingH` (converter가 flex:1/100% 결정) | |
83
- | `layoutSizingVertical=HUG` | height 삭제 (auto) | — |
84
- | `layoutSizingVertical=FILL` | 메타데이터 `layoutSizingV` (converter가 결정) | — |
85
- | `clipsContent` | `overflow: hidden` | ❌ |
86
-
87
- **비주얼:**
88
-
89
- | Figma 속성 | CSS | vw 변환 |
90
- |-----------|-----|---------|
91
- | `fills[].SOLID` | `background-color` | |
92
- | `fills[].IMAGE` | `imageRef` + `imageScaleMode` (FILL/FIT/CROP/TILE) | — |
93
- | `fills[].GRADIENT_LINEAR` | `background-image: linear-gradient(...)` | ❌ |
94
- | `fills[].GRADIENT_RADIAL` | `background-image: radial-gradient(...)` | |
95
- | `fills[] (2개 이상)` | `fills` 배열 (type, color, imageRef, gradient, blendMode, filters) | — |
96
- | `fills[].blendMode` | `background-blend-mode` | ❌ |
97
- | `fills[].filters.saturation` | `filter: grayscale(X%)` / `saturate(X%)` | ❌ |
98
- | `fills[].color` (TEXT) | `color` | ❌ |
99
- | `strokes[] + strokeAlign=INSIDE` | `border` + `box-sizing: border-box` | ✅ (width만) |
100
- | `strokes[] + strokeAlign=OUTSIDE` | `outline` | (width만) |
101
- | `strokes[] + strokeAlign=CENTER` | `border` | ✅ (width만) |
102
- | `effects[].DROP_SHADOW` | `box-shadow` | (px만) |
103
- | `effects[].INNER_SHADOW` | `box-shadow` (inset) | (px만) |
104
- | `effects[].LAYER_BLUR` | `filter: blur()` (누적) | |
105
- | `effects[].BACKGROUND_BLUR` | `backdrop-filter: blur()` | |
106
- | `cornerRadius` | `border-radius` | ✅ |
107
- | `opacity` | `opacity` | ❌ |
108
- | `rotation` | `transform: rotate(Xdeg)` | ❌ |
109
- | `blendMode` (노드 레벨) | `mix-blend-mode` | |
110
-
111
- **텍스트:**
112
-
113
- | Figma 속성 | CSS | vw 변환 |
114
- |-----------|-----|---------|
115
- | `style.fontFamily` | `font-family` | ❌ |
116
- | `style.fontSize` | `font-size` | ✅ |
117
- | `style.fontWeight` | `font-weight` | |
118
- | `style.lineHeightPx` | `line-height` | |
119
- | `style.letterSpacing` | `letter-spacing` | ✅ |
120
- | `style.textAlignHorizontal` | `text-align` | ❌ |
121
- | `characters` | 텍스트 내용 | — |
122
-
123
- ### FigmaNode 메타데이터 필드 (css 외)
124
-
125
- converter가 의사결정에 사용하는 추가 필드:
126
-
127
- | 필드 | 타입 | 용도 |
128
- |------|------|------|
129
- | `layoutSizingH` | `'FIXED'\|'HUG'\|'FILL'` | 부모 context로 width 결정 |
130
- | `layoutSizingV` | `'FIXED'\|'HUG'\|'FILL'` | 부모 context로 height 결정 |
131
- | `imageScaleMode` | `'FILL'\|'FIT'\|'CROP'\|'TILE'` | background-size 결정 |
132
- | `fills` | `array` | 다중 fill 레이어 상세 (2개 이상일 때만) |
133
-
134
- ---
135
-
136
- ## 2. 이미지 에셋 노드 렌더링 기반 (imageRef 개별 다운로드 금지)
137
-
138
- ```
139
- imageRef 개별 다운로드 금지
140
- 텍스처 fill을 공유하는 경우 원본 텍스처(22.7MB)가 다운됨
141
- 노드 렌더링하면 해당 노드에 적용된 최종 결과물(364KB) 나옴
142
-
143
- ✅ 모든 이미지는 Figma screenshot API로 노드 렌더링
144
- ```
145
-
146
- ### 2-1. BG 프레임 렌더링 (섹션 배경)
147
-
148
- ```
149
- 섹션의 BG 프레임을 식별 합성된 배경 1장으로 렌더링:
150
-
151
- ⚠️ 주의: BG 프레임만 렌더링한다 (텍스트 포함된 상위 프레임 렌더링 금지)
152
- ❌ 섹션 전체를 렌더링 → 텍스트가 이미지에 포함 → HTML 텍스트와 중복
153
- ❌ TEXT 자식이 있는 프레임을 렌더링 → 이미지 텍스트 + HTML 텍스트 이중 표시
154
- BG 하위 프레임만 렌더링 → 텍스트 없는 배경만 → CSS background-image
155
- ✅ 텍스트는 tree.json에서 추출하여 HTML로 작성
156
-
157
- 렌더링 TEXT 자식 검증 (BLOCKING):
158
- BG 프레임의 전체 자식 트리를 순회하여 TEXT 노드 존재 여부 확인
159
- TEXT 노드 발견 시:
160
- → TEXT 노드가 포함된 하위 프레임은 렌더링에서 제외
161
- BG 프레임 순수 시각 요소(이미지, 벡터, 장식)만 렌더링
162
- 또는 TEXT가 없는 가장 깊은 BG 하위 프레임을 개별 렌더링
163
-
164
- BG 프레임 판별 기준:
165
- - name에 "BG", "bg" 포함
166
- - 또는 부모와 크기 동일(±10%) + 자식 이미지 3개 이상
167
- - 또는 1depth 번째 자식이면서 이미지 노드 다수 보유
168
-
169
- 렌더링:
170
- node "[FIGMA_SCRIPT]" screenshot {fileKey} {bg.nodeId} --out=/tmp/{feature}/bg/{section}-bg.webp
171
-
172
- → BG 하위 20+ 레이어가 합성된 1장
173
- CSS background-image로 처리
174
- → 개별 레이어(눈, 나무, 파티클 등) 다운로드하지 않음
175
- ```
176
-
177
- ### 2-1.5. 렌더링 금지 노드 (HTML로 구현할 것)
178
-
179
- ```
180
- 다음 조건에 해당하는 노드는 이미지로 렌더링하지 않는다:
181
-
182
- 1. TEXT 자식 보유 프레임 → HTML로 구현
183
- - 기간, 가격, 수량, 설명 등 텍스트 → HTML
184
- - "1,000", "보상 교환하기", "2025.12.22" 이미지에 넣지 않음
185
- - 텍스트가 이미지에 포함되면 수정/번역/접근성 불가
186
-
187
- 2. INSTANCE 반복 패턴 (카드/아이템 그리드) → HTML 반복 구조
188
- - 같은 부모 아래 동일 구조 INSTANCE 2개 이상
189
- - 카드 그리드를 통째 이미지 1장으로 렌더링 금지
190
- - ✅ 각 카드 내부의 이미지 에셋(아이콘, 썸네일)만 개별 추출
191
- - ✅ 카드 레이아웃, 텍스트, 버튼은 HTML+CSS
192
-
193
- 3. 인터랙티브 요소 → HTML <button>/<a>
194
- - name에 "btn", "button", "CTA", "link" 포함
195
- - 클릭 이벤트가 필요한 요소는 이미지 금지
196
-
197
- 4. 정보 표시 영역 HTML 텍스트
198
- - 기간 표시 ("이벤트 기간", "교환/응모 종료일")
199
- - 가격/수량 ("1,000", "500")
200
- - 상태 표시 ("참여 대상", "로그인")
201
- ```
202
-
203
- ### 2-2. 콘텐츠 노드 렌더링
204
-
205
- ```
206
- BG가 아닌 콘텐츠 이미지를 개별 노드 렌더링:
207
-
208
- ⚠️ 렌더링 2-1.5 체크 필수 하나라도 해당하면 이미지 렌더링 금지
209
-
210
- 대상 식별 (tree.json에서 — TEXT 자식 미보유 노드만):
211
- - 타이틀/서브타이틀 이미지 (name에 "title", "sub title") 벡터 글자만, TEXT 노드 아님
212
- - 아이콘 (VECTOR/GROUP 크기 ≤ 64px)
213
- - 아이템/보상 썸네일 (name에 "item", "reward", "token", "coin") — 이미지 에셋만
214
-
215
- 렌더링 (imageRef 다운로드 아님!):
216
- node "[FIGMA_SCRIPT]" screenshot {fileKey} {node.nodeId} --out=/tmp/{feature}/content/{name}.webp
217
-
218
- 텍스처 fill이 적용된 최종 결과물이 나옴
219
- 22.7MB 텍스처 대신 364KB 렌더링 이미지
220
- ```
221
-
222
- ### 2-3. 벡터 글자 그룹 렌더링
223
-
224
- ```
225
- 커스텀 폰트 텍스트가 글자별 벡터로 분리된 경우:
226
-
227
- 판별:
228
- - 부모 GROUP/FRAME 아래 VECTOR 타입 3개 이상
229
- - 각 VECTOR 크기 < 60x60
230
- - 같은 imageRef를 공유 (텍스처 fill)
231
-
232
- 렌더링:
233
- 부모 GROUP을 통째로 렌더링 (개별 글자 다운로드 금지)
234
- node "[FIGMA_SCRIPT]" screenshot {fileKey} {group.nodeId} --out=/tmp/{feature}/content/{name}.webp
235
-
236
- 예시:
237
- "MISSION 01" GROUP (174x42, 벡터 9개) → 렌더링 1장 (58KB)
238
- "일일/누적 출석" GROUP (327x51, 벡터 7개) 렌더링 1장 (93KB)
239
- ```
240
-
241
- ### 2-4. imageRef 다운로드를 사용하는 유일한 경우
242
-
243
- ```
244
- 노드 렌더링이 불가능한 경우에만 imageRef 다운로드 폴백:
245
- - Figma screenshot API 실패 (rate limit, 권한 등)
246
- - 노드가 DOCUMENT 레벨이라 렌더링 불가
247
-
248
- 이 경우에도 파일 크기 확인:
249
- - 5MB 초과 텍스처 fill 가능성 높음 경고 로그
250
- ```
251
-
252
- ---
253
-
254
- ## 3. 스크린샷 — 검증 참조용
255
-
256
- ```
257
- 코드 생성에는 사용하지 않는다. Phase 4 시각 검증에서만 사용.
258
-
259
- 전체 스크린샷:
260
- node "[FIGMA_SCRIPT]" screenshot {fileKey} {nodeId} --out=/tmp/{feature}/full-screenshot.webp
261
-
262
- 섹션별 스크린샷 (1depth 자식 프레임 각각):
263
- node "[FIGMA_SCRIPT]" screenshot {fileKey} {child.nodeId} --out=/tmp/{feature}/sections/{name}.webp
264
-
265
- 용도:
266
- ✅ Phase 4에서 렌더링 결과와 pixelmatch 비교
267
- 시각 diff > 임계값 → 수정 판단 참고
268
- Phase 3 코드 생성의 입력으로 사용하지 않음
269
- ```
270
-
271
- ---
272
-
273
- ## 4. 추출 데이터 정리
274
-
275
- ```
276
- 추출 완료 후 /tmp/{feature}/ 구조:
277
-
278
- /tmp/{feature}/
279
- ├── tree.json ← 코드 생성의 PRIMARY 소스
280
- ├── bg/ BG 프레임 렌더링 (섹션당 1장)
281
- │ ├── hero-bg.webp
282
- │ ├── daily-bg.webp
283
- │ └── ...
284
- ├── content/ ← 콘텐츠 노드 렌더링
285
- │ ├── hero-title.webp
286
- │ ├── hero-subtitle.webp
287
- │ ├── mission-01.webp ← 벡터 글자 그룹 렌더링
288
- │ ├── btn-login.webp
289
- │ └── ...
290
- ├── full-screenshot.webp ← Phase 4 검증용
291
- └── sections/ ← Phase 4 섹션별 검증용
292
- ├── hero.webp
293
- └── ...
294
-
295
- 이미지 분류 (실제 테스트 기준):
296
- | 분류 | 처리 | 예시 |
297
- |------|------|------|
298
- | BG 프레임 (89개) | 프레임 렌더링 → bg/ | hero-bg.webp (4.2MB) |
299
- | 벡터 글자 (33개) | GROUP 렌더링 → content/ | mission-01.webp (58KB) |
300
- | 콘텐츠 (8개) | 노드 렌더링 → content/ | hero-title.webp (364KB) |
301
- | 장식 (29개) | BG 렌더링에 포함 | — |
302
- → 전체 159개 → 실제 파일 약 18장
303
-
304
- 색상 팔레트 (tree.json의 backgroundColor/color 고유값):
305
- #0a1628, #00264a, #ffffff, ...
306
-
307
- 토큰 매핑 테이블 (project-tokens.json 존재 시):
308
- | Figma 값 | 기존 토큰 | 상태 |
309
- |----------|-----------|------|
310
- | #0a1628 | $color-navy | ✅ 재사용 |
311
- | #ffd700 | — | 🆕 생성 |
312
-
313
- 폰트 목록 (tree.json의 fontFamily/fontSize/fontWeight):
314
- Pretendard: 400/500/700, 16px~48px
315
-
316
- 텍스트 콘텐츠 (모든 TEXT 노드의 characters):
317
- "겨울 이벤트", "12.1 ~ 12.31", "참여 대상 : PC 유저", ...
318
-
319
- 간격 패턴 (tree.json의 gap/padding 빈도 분석):
320
- gap: 8px, 16px, 24px, 32px
321
- padding: 16px, 24px, 32px
322
- ```
323
-
324
- ---
325
-
326
- ## 5. 노드 참조 (시맨틱 판단 힌트)
327
-
328
- ```
329
- 트리의 name/type은 Claude의 시맨틱 판단에 힌트로 사용:
330
-
331
- name 패턴 → HTML 태그 힌트:
332
- "BG" → 배경 레이어 (position:absolute + z-index:0)
333
- "Title", "Txt_*" → 제목/텍스트 (<h2>, <p>)
334
- "Btn_*", "CTA" → 버튼 (<button>)
335
- "Icon_*" → 아이콘 (<img>)
336
- "Step1", "Item_*" → 반복 요소 (v-for 후보)
337
- "Period", "Info" → 정보 영역 (<div>)
338
-
339
- type → 코드 매핑 기준:
340
- TEXT → <span> (Claude가 h2/p/button으로 승격)
341
- RECTANGLE/VECTOR + imageRef → <img src="다운로드된 파일">
342
- FRAME + Auto Layout → <div> + CSS flex
343
- FRAME + no Auto Layout → <div> + position:relative
344
- INSTANCE 반복 → 컴포넌트 후보 (v-for)
345
- GROUP → 논리적 래퍼 (보통 <div>)
346
-
347
- 이 정보는 트리→HTML 매핑의 보조 힌트이다.
348
- 레이아웃과 스타일은 tree.json의 css 객체에서 직접 매핑한다.
349
- ```
1
+ ---
2
+ name: vibe.figma.extract
3
+ description: Figma REST API로 코드 생성 데이터 확보 — 트리(primary), 이미지, 스크린샷(검증용)
4
+ triggers: []
5
+ tier: standard
6
+ ---
7
+
8
+ # vibe.figma.extract — 코드 생성 데이터 확보
9
+
10
+ Figma REST API(`src/infra/lib/figma/`)를 사용하여 **구조적 코드 생성에 필요한 모든 데이터**를 추출.
11
+
12
+ ```
13
+ 추출 우선순위:
14
+ 1순위: 노드 트리 + CSS (코드 생성의 PRIMARY 소스)
15
+ 2순위: 이미지 에셋 (fill 이미지 + 아이템 노드 렌더링)
16
+ 3순위: 스크린샷 (Phase 4 시각 검증용 — 코드 생성에 사용하지 않음)
17
+ ```
18
+
19
+ ---
20
+
21
+ ## 1. 노드 트리 + CSS — 코드 생성의 원천
22
+
23
+ ```
24
+ 가장 먼저 확보. 이것이 HTML + SCSS 코드의 직접적 소스.
25
+
26
+ Bash:
27
+ node "[FIGMA_SCRIPT]" tree {fileKey} {nodeId} --depth=10
28
+
29
+ 반환 (FigmaNode JSON):
30
+ {
31
+ nodeId: "641:78152",
32
+ name: "KID",
33
+ type: "INSTANCE",
34
+ size: { width: 720, height: 487 },
35
+ css: { display: "flex", flexDirection: "column", gap: "32px", ... },
36
+ text: "텍스트 내용" (TEXT 노드만),
37
+ imageRef: "abc123" (이미지 fill이 있는 노드만),
38
+ children: [...]
39
+ }
40
+
41
+ /tmp/{feature}/tree.json 에 저장
42
+
43
+ 트리 데이터의 용도 (vibe.figma.convert에서 직접 매핑):
44
+ - Auto Layout → CSS Flexbox (direction, gap, padding, align 1:1)
45
+ - absoluteBoundingBox → width, height (→ vw 변환)
46
+ - fills/strokes/effects background, border, shadow
47
+ - TEXT 노드 텍스트 콘텐츠 + 타이포그래피 CSS
48
+ - imageRef 이미지 에셋 매핑
49
+ - name/type 시맨틱 태그 판단 힌트 (Claude 사용)
50
+ ```
51
+
52
+ ### Figma 속성 → CSS 직접 매핑표
53
+
54
+ 트리 추출 도구가 자동 변환하는 속성. **이 값들이 SCSS에 직접 매핑된다:**
55
+
56
+ | Figma 속성 | CSS | vw 변환 |
57
+ |-----------|-----|-----------------|
58
+ | `layoutMode=VERTICAL` | `display:flex; flex-direction:column` | ❌ |
59
+ | `layoutMode=HORIZONTAL` | `display:flex; flex-direction:row` | |
60
+ | `primaryAxisAlignItems` | `justify-content` | ❌ |
61
+ | `counterAxisAlignItems` | `align-items` | |
62
+ | `itemSpacing` | `gap` | ✅ |
63
+ | `padding*` | `padding` | ✅ |
64
+ | `absoluteBoundingBox.width/height` | `width/height` | |
65
+ | `layoutPositioning=ABSOLUTE` | `position: absolute` | ❌ |
66
+ | `clipsContent` | `overflow: hidden` | |
67
+ | `fills[].color` | `background-color` | ❌ |
68
+ | `fills[].type=IMAGE` | `imageRef` (다운로드 대상) | — |
69
+ | `fills[].color` (TEXT) | `color` | ❌ |
70
+ | `strokes[].color` + `strokeWeight` | `border` | (width만) |
71
+ | `effects[].DROP_SHADOW` | `box-shadow` | ✅ (px만) |
72
+ | `effects[].LAYER_BLUR` | `filter: blur()` | |
73
+ | `effects[].BACKGROUND_BLUR` | `backdrop-filter: blur()` | |
74
+ | `cornerRadius` | `border-radius` | |
75
+ | `opacity` | `opacity` | ❌ |
76
+ | `blendMode` | `mix-blend-mode` | |
77
+ | `style.fontFamily` | `font-family` | ❌ |
78
+ | `style.fontSize` | `font-size` | ✅ |
79
+ | `style.fontWeight` | `font-weight` | |
80
+ | `style.lineHeightPx` | `line-height` | |
81
+ | `style.letterSpacing` | `letter-spacing` | |
82
+ | `style.textAlignHorizontal` | `text-align` | |
83
+ | `characters` | 텍스트 내용 | — |
84
+
85
+ ---
86
+
87
+ ## 2. 이미지 에셋 — 노드 렌더링 기반 (imageRef 개별 다운로드 금지)
88
+
89
+ ```
90
+ ❌ imageRef 개별 다운로드 금지
91
+ 텍스처 fill을 공유하는 경우 원본 텍스처(22.7MB)가 다운됨
92
+ 노드 렌더링하면 해당 노드에 적용된 최종 결과물(364KB) 나옴
93
+
94
+ 모든 이미지는 Figma screenshot API로 노드 렌더링
95
+ ```
96
+
97
+ ### 2-1. BG 프레임 렌더링 (섹션 배경)
98
+
99
+ ```
100
+ 섹션의 BG 프레임을 식별 합성된 배경 1장으로 렌더링:
101
+
102
+ ⚠️ 주의: BG 프레임만 렌더링한다 (텍스트 포함된 상위 프레임 렌더링 금지)
103
+ 섹션 전체를 렌더링 텍스트가 이미지에 포함 → HTML 텍스트와 중복
104
+ TEXT 자식이 있는 프레임을 렌더링 이미지 텍스트 + HTML 텍스트 이중 표시
105
+ BG 하위 프레임만 렌더링 텍스트 없는 배경만 → CSS background-image
106
+ 텍스트는 tree.json에서 추출하여 HTML로 작성
107
+
108
+ 렌더링 TEXT 자식 검증 (BLOCKING):
109
+ BG 프레임의 전체 자식 트리를 순회하여 TEXT 노드 존재 여부 확인
110
+ TEXT 노드 발견 시:
111
+ → TEXT 노드가 포함된 하위 프레임은 렌더링에서 제외
112
+ → BG 프레임 내 순수 시각 요소(이미지, 벡터, 장식)만 렌더링
113
+ 또는 TEXT가 없는 가장 깊은 BG 하위 프레임을 개별 렌더링
114
+
115
+ BG 프레임 판별 기준:
116
+ - name에 "BG", "bg" 포함
117
+ - 또는 부모와 크기 동일(±10%) + 자식 이미지 3개 이상
118
+ - 또는 1depth 번째 자식이면서 이미지 노드 다수 보유
119
+
120
+ 렌더링:
121
+ node "[FIGMA_SCRIPT]" screenshot {fileKey} {bg.nodeId} --out=/tmp/{feature}/bg/{section}-bg.webp
122
+
123
+ BG 하위 20+ 레이어가 합성된 1장
124
+ → CSS background-image로 처리
125
+ 개별 레이어(눈, 나무, 파티클 등) 다운로드하지 않음
126
+ ```
127
+
128
+ ### 2-1.5. 렌더링 금지 노드 (HTML로 구현할 것)
129
+
130
+ ```
131
+ 다음 조건에 해당하는 노드는 이미지로 렌더링하지 않는다:
132
+
133
+ 1. TEXT 자식 보유 프레임 → HTML로 구현
134
+ - 기간, 가격, 수량, 설명 등 텍스트 → HTML
135
+ - "1,000", "보상 교환하기", "2025.12.22" 등 → 이미지에 넣지 않음
136
+ - 텍스트가 이미지에 포함되면 수정/번역/접근성 불가
137
+
138
+ 2. INSTANCE 반복 패턴 (카드/아이템 그리드) → HTML 반복 구조
139
+ - 같은 부모 아래 동일 구조 INSTANCE 2개 이상
140
+ - 카드 그리드를 통째 이미지 1장으로 렌더링 금지
141
+ - 카드 내부의 이미지 에셋(아이콘, 썸네일) 개별 추출
142
+ - ✅ 카드 레이아웃, 텍스트, 버튼은 HTML+CSS
143
+
144
+ 3. 인터랙티브 요소 → HTML <button>/<a>
145
+ - name에 "btn", "button", "CTA", "link" 포함
146
+ - 클릭 이벤트가 필요한 요소는 이미지 금지
147
+
148
+ 4. 정보 표시 영역 → HTML 텍스트
149
+ - 기간 표시 ("이벤트 기간", "교환/응모 종료일")
150
+ - 가격/수량 ("1,000", "500")
151
+ - 상태 표시 ("참여 대상", "로그인")
152
+ ```
153
+
154
+ ### 2-2. 콘텐츠 노드 렌더링
155
+
156
+ ```
157
+ BG가 아닌 콘텐츠 이미지를 개별 노드 렌더링:
158
+
159
+ ⚠️ 렌더링 2-1.5 체크 필수 — 하나라도 해당하면 이미지 렌더링 금지
160
+
161
+ 대상 식별 (tree.json에서 TEXT 자식 미보유 노드만):
162
+ - 타이틀/서브타이틀 이미지 (name에 "title", "sub title") 벡터 글자만, TEXT 노드 아님
163
+ - 아이콘 (VECTOR/GROUP 크기 ≤ 64px)
164
+ - 아이템/보상 썸네일 (name에 "item", "reward", "token", "coin") — 이미지 에셋만
165
+
166
+ 렌더링 (imageRef 다운로드 아님!):
167
+ node "[FIGMA_SCRIPT]" screenshot {fileKey} {node.nodeId} --out=/tmp/{feature}/content/{name}.webp
168
+
169
+ → 텍스처 fill이 적용된 최종 결과물이 나옴
170
+ 22.7MB 텍스처 대신 364KB 렌더링 이미지
171
+ ```
172
+
173
+ ### 2-3. 벡터 글자 그룹 렌더링
174
+
175
+ ```
176
+ 커스텀 폰트 텍스트가 글자별 벡터로 분리된 경우:
177
+
178
+ 판별:
179
+ - 부모 GROUP/FRAME 아래 VECTOR 타입 3개 이상
180
+ - VECTOR 크기 < 60x60
181
+ - 같은 imageRef를 공유 (텍스처 fill)
182
+
183
+ 렌더링:
184
+ 부모 GROUP을 통째로 렌더링 (개별 글자 다운로드 금지)
185
+ node "[FIGMA_SCRIPT]" screenshot {fileKey} {group.nodeId} --out=/tmp/{feature}/content/{name}.webp
186
+
187
+ 예시:
188
+ "MISSION 01" GROUP (174x42, 벡터 9개) 렌더링 1장 (58KB)
189
+ "일일/누적 출석" GROUP (327x51, 벡터 7개) 렌더링 1장 (93KB)
190
+ ```
191
+
192
+ ### 2-4. imageRef 다운로드를 사용하는 유일한 경우
193
+
194
+ ```
195
+ 노드 렌더링이 불가능한 경우에만 imageRef 다운로드 폴백:
196
+ - Figma screenshot API 실패 (rate limit, 권한 등)
197
+ - 노드가 DOCUMENT 레벨이라 렌더링 불가
198
+
199
+ 경우에도 파일 크기 확인:
200
+ - 5MB 초과 텍스처 fill 가능성 높음 → 경고 로그
201
+ ```
202
+
203
+ ---
204
+
205
+ ## 3. 스크린샷 — 검증 참조용
206
+
207
+ ```
208
+ 코드 생성에는 사용하지 않는다. Phase 4 시각 검증에서만 사용.
209
+
210
+ 전체 스크린샷:
211
+ node "[FIGMA_SCRIPT]" screenshot {fileKey} {nodeId} --out=/tmp/{feature}/full-screenshot.webp
212
+
213
+ 섹션별 스크린샷 (1depth 자식 프레임 각각):
214
+ node "[FIGMA_SCRIPT]" screenshot {fileKey} {child.nodeId} --out=/tmp/{feature}/sections/{name}.webp
215
+
216
+ 용도:
217
+ ✅ Phase 4에서 렌더링 결과와 pixelmatch 비교
218
+ 시각 diff > 임계값 수정 판단 참고
219
+ Phase 3 코드 생성의 입력으로 사용하지 않음
220
+ ```
221
+
222
+ ---
223
+
224
+ ## 4. 추출 데이터 정리
225
+
226
+ ```
227
+ 추출 완료 후 /tmp/{feature}/ 구조:
228
+
229
+ /tmp/{feature}/
230
+ ├── tree.json ← 코드 생성의 PRIMARY 소스
231
+ ├── bg/ ← BG 프레임 렌더링 (섹션당 1장)
232
+ │ ├── hero-bg.webp
233
+ │ ├── daily-bg.webp
234
+ │ └── ...
235
+ ├── content/ ← 콘텐츠 노드 렌더링
236
+ │ ├── hero-title.webp
237
+ │ ├── hero-subtitle.webp
238
+ │ ├── mission-01.webp ← 벡터 글자 그룹 렌더링
239
+ │ ├── btn-login.webp
240
+ │ └── ...
241
+ ├── full-screenshot.webp ← Phase 4 검증용
242
+ └── sections/ ← Phase 4 섹션별 검증용
243
+ ├── hero.webp
244
+ └── ...
245
+
246
+ 이미지 분류 (실제 테스트 기준):
247
+ | 분류 | 처리 | 예시 |
248
+ |------|------|------|
249
+ | BG 프레임 (89개) | 프레임 렌더링bg/ | hero-bg.webp (4.2MB) |
250
+ | 벡터 글자 (33개) | GROUP 렌더링 → content/ | mission-01.webp (58KB) |
251
+ | 콘텐츠 (8개) | 노드 렌더링 → content/ | hero-title.webp (364KB) |
252
+ | 장식 (29개) | BG 렌더링에 포함 | — |
253
+ → 전체 159개 → 실제 파일 약 18장
254
+
255
+ 색상 팔레트 (tree.json의 backgroundColor/color 고유값):
256
+ #0a1628, #00264a, #ffffff, ...
257
+
258
+ 토큰 매핑 테이블 (project-tokens.json 존재 시):
259
+ | Figma 값 | 기존 토큰 | 상태 |
260
+ |----------|-----------|------|
261
+ | #0a1628 | $color-navy | ✅ 재사용 |
262
+ | #ffd700 | | 🆕 생성 |
263
+
264
+ 폰트 목록 (tree.json의 fontFamily/fontSize/fontWeight):
265
+ Pretendard: 400/500/700, 16px~48px
266
+
267
+ 텍스트 콘텐츠 (모든 TEXT 노드의 characters):
268
+ "겨울 이벤트", "12.1 ~ 12.31", "참여 대상 : PC 유저", ...
269
+
270
+ 간격 패턴 (tree.json의 gap/padding 빈도 분석):
271
+ gap: 8px, 16px, 24px, 32px
272
+ padding: 16px, 24px, 32px
273
+ ```
274
+
275
+ ---
276
+
277
+ ## 5. 노드 참조 (시맨틱 판단 힌트)
278
+
279
+ ```
280
+ 트리의 name/type은 Claude의 시맨틱 판단에 힌트로 사용:
281
+
282
+ name 패턴 → HTML 태그 힌트:
283
+ "BG" → 배경 레이어 (position:absolute + z-index:0)
284
+ "Title", "Txt_*" 제목/텍스트 (<h2>, <p>)
285
+ "Btn_*", "CTA" → 버튼 (<button>)
286
+ "Icon_*" → 아이콘 (<img>)
287
+ "Step1", "Item_*" 반복 요소 (v-for 후보)
288
+ "Period", "Info" → 정보 영역 (<div>)
289
+
290
+ type 코드 매핑 기준:
291
+ TEXT <span> (Claude가 h2/p/button으로 승격)
292
+ RECTANGLE/VECTOR + imageRef → <img src="다운로드된 파일">
293
+ FRAME + Auto Layout → <div> + CSS flex
294
+ FRAME + no Auto Layout → <div> + position:relative
295
+ INSTANCE 반복 컴포넌트 후보 (v-for)
296
+ GROUP 논리적 래퍼 (보통 <div>)
297
+
298
+ 정보는 트리→HTML 매핑의 보조 힌트이다.
299
+ 레이아웃과 스타일은 tree.json의 css 객체에서 직접 매핑한다.
300
+ ```