@su-record/vibe 2.8.48 → 2.8.50

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