@su-record/vibe 2.8.52 → 2.9.1

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 (426) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +169 -169
  3. package/LICENSE +21 -21
  4. package/README.ko.md +43 -128
  5. package/README.md +43 -128
  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.js +51 -51
  87. package/dist/cli/llm/claude-commands.js +16 -16
  88. package/dist/cli/llm/config.js +18 -18
  89. package/dist/cli/llm/gemini-commands.js +16 -16
  90. package/dist/cli/llm/gpt-commands.js +19 -19
  91. package/dist/cli/llm/help.js +21 -21
  92. package/dist/cli/postinstall/cursor-agents.js +32 -32
  93. package/dist/cli/postinstall/cursor-rules.js +83 -83
  94. package/dist/cli/postinstall/cursor-skills.js +743 -743
  95. package/dist/cli/postinstall/main.d.ts.map +1 -1
  96. package/dist/cli/postinstall/main.js +40 -66
  97. package/dist/cli/postinstall/main.js.map +1 -1
  98. package/dist/cli/setup/Provisioner.js +42 -42
  99. package/dist/infra/lib/CostAccumulator.d.ts +58 -0
  100. package/dist/infra/lib/CostAccumulator.d.ts.map +1 -0
  101. package/dist/infra/lib/CostAccumulator.js +131 -0
  102. package/dist/infra/lib/CostAccumulator.js.map +1 -0
  103. package/dist/infra/lib/DeepInit.js +24 -24
  104. package/dist/infra/lib/IterationTracker.js +11 -11
  105. package/dist/infra/lib/PythonParser.js +108 -108
  106. package/dist/infra/lib/ReviewRace.js +96 -96
  107. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  108. package/dist/infra/lib/SkillQualityGate.js +9 -9
  109. package/dist/infra/lib/SkillRepository.js +159 -159
  110. package/dist/infra/lib/TokenBudgetTracker.d.ts +13 -0
  111. package/dist/infra/lib/TokenBudgetTracker.d.ts.map +1 -1
  112. package/dist/infra/lib/TokenBudgetTracker.js +44 -3
  113. package/dist/infra/lib/TokenBudgetTracker.js.map +1 -1
  114. package/dist/infra/lib/UltraQA.js +99 -99
  115. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  116. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  117. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  118. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  119. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  120. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  121. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  122. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  123. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  124. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  125. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  126. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  127. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  128. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  129. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  130. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  131. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  132. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  133. package/dist/infra/lib/gemini/orchestration.js +5 -5
  134. package/dist/infra/lib/gpt/orchestration.js +4 -4
  135. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  136. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  137. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  138. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  139. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  140. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  141. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  142. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  143. package/dist/infra/orchestrator/AgentManager.js +12 -12
  144. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  145. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  146. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  147. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  148. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  149. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  150. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  151. package/dist/tools/memory/getMemoryGraph.js +12 -12
  152. package/dist/tools/memory/getSessionContext.js +9 -9
  153. package/dist/tools/memory/linkMemories.js +14 -14
  154. package/dist/tools/memory/listMemories.js +4 -4
  155. package/dist/tools/memory/recallMemory.js +4 -4
  156. package/dist/tools/memory/saveMemory.js +4 -4
  157. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  158. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  159. package/dist/tools/semantic/astGrep.test.js +6 -6
  160. package/dist/tools/spec/prdParser.test.js +171 -171
  161. package/dist/tools/spec/specGenerator.js +169 -169
  162. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  163. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  164. package/hooks/gemini-hooks.json +73 -73
  165. package/hooks/hooks.json +174 -174
  166. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  167. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  168. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  169. package/hooks/scripts/auto-commit.js +97 -97
  170. package/hooks/scripts/auto-format.js +64 -64
  171. package/hooks/scripts/auto-test.js +81 -81
  172. package/hooks/scripts/code-check.js +268 -268
  173. package/hooks/scripts/codex-detect.js +46 -46
  174. package/hooks/scripts/codex-review-gate.js +80 -80
  175. package/hooks/scripts/command-log.js +32 -32
  176. package/hooks/scripts/context-save.js +353 -353
  177. package/hooks/scripts/evolution-engine.js +91 -91
  178. package/hooks/scripts/figma-extract.js +635 -477
  179. package/hooks/scripts/hud-status.js +321 -321
  180. package/hooks/scripts/keyword-detector.js +214 -214
  181. package/hooks/scripts/llm-orchestrate.js +572 -572
  182. package/hooks/scripts/post-edit.js +32 -32
  183. package/hooks/scripts/pr-test-gate.js +52 -52
  184. package/hooks/scripts/pre-tool-guard.js +214 -159
  185. package/hooks/scripts/prompt-dispatcher.js +185 -185
  186. package/hooks/scripts/sentinel-guard.js +131 -131
  187. package/hooks/scripts/session-start.js +177 -177
  188. package/hooks/scripts/skill-injector.js +83 -83
  189. package/hooks/scripts/stop-notify.js +209 -209
  190. package/hooks/scripts/utils.js +243 -243
  191. package/languages/csharp-unity.md +515 -515
  192. package/languages/gdscript-godot.md +470 -470
  193. package/languages/ruby-rails.md +489 -489
  194. package/languages/typescript-angular.md +433 -433
  195. package/languages/typescript-astro.md +416 -416
  196. package/languages/typescript-electron.md +406 -406
  197. package/languages/typescript-nestjs.md +524 -524
  198. package/languages/typescript-svelte.md +407 -407
  199. package/languages/typescript-tauri.md +365 -365
  200. package/package.json +101 -101
  201. package/skills/agents-md/SKILL.md +121 -121
  202. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  203. package/skills/agents-md/templates/agents-md.md +36 -36
  204. package/skills/arch-guard/SKILL.md +181 -181
  205. package/skills/arch-guard/agents/detector.md +48 -48
  206. package/skills/arch-guard/agents/reporter.md +48 -48
  207. package/skills/arch-guard/agents/rule-generator.md +49 -49
  208. package/skills/arch-guard/agents/violation-checker.md +51 -51
  209. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  210. package/skills/arch-guard/frameworks/solid.md +102 -102
  211. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  212. package/skills/arch-guard/templates/arch-rules.json +47 -47
  213. package/skills/arch-guard/templates/violation-report.md +53 -53
  214. package/skills/brand-assets/SKILL.md +147 -147
  215. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  216. package/skills/brand-assets/templates/brand-guide.md +161 -161
  217. package/skills/capability-loop/SKILL.md +168 -168
  218. package/skills/capability-loop/agents/capability-designer.md +61 -61
  219. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  220. package/skills/capability-loop/agents/implementer.md +50 -50
  221. package/skills/capability-loop/agents/tester.md +53 -53
  222. package/skills/capability-loop/templates/capability-spec.md +118 -118
  223. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  224. package/skills/characterization-test/SKILL.md +207 -207
  225. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  226. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  227. package/skills/characterization-test/agents/reporter.md +50 -50
  228. package/skills/characterization-test/agents/test-writer.md +49 -49
  229. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  230. package/skills/characterization-test/templates/test-template.ts +101 -101
  231. package/skills/chub-usage/SKILL.md +139 -139
  232. package/skills/claude-md-guide/SKILL.md +351 -351
  233. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  234. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  235. package/skills/commerce-patterns/SKILL.md +64 -64
  236. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  237. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  238. package/skills/commit-push-pr/SKILL.md +77 -77
  239. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  240. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  241. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  242. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  243. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  244. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  245. package/skills/context7-usage/SKILL.md +106 -106
  246. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  247. package/skills/create-prd/SKILL.md +90 -90
  248. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  249. package/skills/create-prd/agents/prioritizer.md +60 -60
  250. package/skills/create-prd/agents/requirements-writer.md +48 -48
  251. package/skills/create-prd/agents/researcher.md +55 -55
  252. package/skills/create-prd/agents/reviewer.md +54 -54
  253. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  254. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  255. package/skills/create-prd/orchestrator.md +70 -70
  256. package/skills/create-prd/rubrics/completeness.md +58 -58
  257. package/skills/create-prd/templates/prd.md +139 -139
  258. package/skills/design-audit/SKILL.md +152 -152
  259. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  260. package/skills/design-audit/agents/performance-auditor.md +46 -46
  261. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  262. package/skills/design-audit/agents/scorer.md +47 -47
  263. package/skills/design-audit/agents/slop-detector.md +47 -47
  264. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  265. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  266. package/skills/design-audit/orchestrator.md +64 -64
  267. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  268. package/skills/design-audit/rubrics/scoring.md +63 -63
  269. package/skills/design-audit/templates/report.md +88 -88
  270. package/skills/design-critique/SKILL.md +139 -139
  271. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  272. package/skills/design-critique/templates/critique-report.md +86 -86
  273. package/skills/design-distill/SKILL.md +130 -130
  274. package/skills/design-distill/templates/design-system.md +132 -132
  275. package/skills/design-normalize/SKILL.md +133 -133
  276. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  277. package/skills/design-normalize/templates/token-audit.md +89 -89
  278. package/skills/design-polish/SKILL.md +131 -131
  279. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  280. package/skills/design-polish/templates/polish-report.md +64 -64
  281. package/skills/design-teach/SKILL.md +182 -182
  282. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  283. package/skills/design-teach/templates/design-context.json +36 -36
  284. package/skills/e2e-commerce/SKILL.md +62 -62
  285. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  286. package/skills/event-comms/SKILL.md +162 -162
  287. package/skills/event-comms/templates/email-invite.md +99 -99
  288. package/skills/event-comms/templates/sns-post.md +133 -133
  289. package/skills/event-ops/SKILL.md +198 -198
  290. package/skills/event-ops/rubrics/contingency.md +85 -85
  291. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  292. package/skills/event-planning/SKILL.md +132 -132
  293. package/skills/event-planning/rubrics/timeline.md +70 -70
  294. package/skills/event-planning/templates/event-plan.md +91 -91
  295. package/skills/exec-plan/SKILL.md +149 -149
  296. package/skills/exec-plan/agents/decomposer.md +47 -47
  297. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  298. package/skills/exec-plan/agents/estimator.md +43 -43
  299. package/skills/exec-plan/agents/validator.md +55 -55
  300. package/skills/exec-plan/orchestrator.md +70 -70
  301. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  302. package/skills/exec-plan/templates/plan.md +147 -147
  303. package/skills/git-worktree/SKILL.md +73 -73
  304. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  305. package/skills/handoff/SKILL.md +110 -110
  306. package/skills/handoff/agents/context-summarizer.md +51 -51
  307. package/skills/handoff/agents/document-writer.md +63 -63
  308. package/skills/handoff/agents/state-collector.md +53 -53
  309. package/skills/handoff/agents/verifier.md +48 -48
  310. package/skills/handoff/rubrics/completeness.md +62 -62
  311. package/skills/handoff/templates/handoff.md +107 -107
  312. package/skills/parallel-research/SKILL.md +89 -89
  313. package/skills/parallel-research/agents/best-practices.md +43 -43
  314. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  315. package/skills/parallel-research/agents/framework-docs.md +45 -45
  316. package/skills/parallel-research/agents/security-advisory.md +46 -46
  317. package/skills/parallel-research/agents/synthesizer.md +52 -52
  318. package/skills/parallel-research/experts/best-practices.md +50 -50
  319. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  320. package/skills/parallel-research/experts/framework-docs.md +65 -65
  321. package/skills/parallel-research/experts/security-advisory.md +69 -69
  322. package/skills/parallel-research/orchestrator.md +65 -65
  323. package/skills/parallel-research/templates/synthesis.md +101 -101
  324. package/skills/prioritization-frameworks/SKILL.md +87 -87
  325. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  326. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  327. package/skills/priority-todos/SKILL.md +64 -64
  328. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  329. package/skills/priority-todos/templates/todo-board.md +59 -59
  330. package/skills/seo-checklist/SKILL.md +58 -58
  331. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  332. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  333. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  334. package/skills/techdebt/SKILL.md +124 -124
  335. package/skills/techdebt/agents/analyzer.md +50 -50
  336. package/skills/techdebt/agents/fixer.md +41 -41
  337. package/skills/techdebt/agents/reviewer.md +47 -47
  338. package/skills/techdebt/agents/scanner.md +44 -44
  339. package/skills/techdebt/orchestrator.md +70 -70
  340. package/skills/techdebt/rubrics/severity.md +51 -51
  341. package/skills/techdebt/scripts/scan.js +90 -90
  342. package/skills/techdebt/templates/report.md +86 -86
  343. package/skills/tool-fallback/SKILL.md +104 -104
  344. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  345. package/skills/typescript-advanced-types/SKILL.md +67 -67
  346. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  347. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  348. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  349. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  350. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  351. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  352. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  353. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  354. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  355. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  356. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  357. package/skills/user-personas/SKILL.md +75 -75
  358. package/skills/user-personas/rubrics/research-methods.md +56 -56
  359. package/skills/user-personas/templates/persona.md +89 -89
  360. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  361. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  362. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  363. package/skills/vibe.docs/SKILL.md +171 -171
  364. package/skills/vibe.docs/templates/architecture.md +80 -80
  365. package/skills/vibe.docs/templates/readme.md +84 -84
  366. package/skills/vibe.docs/templates/release-notes.md +74 -74
  367. package/skills/vibe.figma/SKILL.md +215 -982
  368. package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
  369. package/skills/vibe.figma/templates/component-index.md +126 -126
  370. package/skills/vibe.figma/templates/figma-handoff.md +100 -100
  371. package/skills/vibe.figma/templates/remapped-tree.md +277 -277
  372. package/skills/vibe.figma.convert/SKILL.md +188 -511
  373. package/skills/vibe.figma.convert/rubrics/conversion-rules.md +129 -113
  374. package/skills/vibe.figma.convert/templates/component.md +140 -140
  375. package/skills/vibe.figma.extract/SKILL.md +179 -300
  376. package/skills/vibe.figma.extract/rubrics/image-rules.md +145 -137
  377. package/skills/video-production/SKILL.md +52 -52
  378. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  379. package/skills/video-production/templates/production-plan.md +104 -104
  380. package/vibe/config.json +29 -29
  381. package/vibe/constitution.md +227 -227
  382. package/vibe/rules/principles/communication-guide.md +98 -98
  383. package/vibe/rules/principles/development-philosophy.md +52 -52
  384. package/vibe/rules/principles/quick-start.md +102 -102
  385. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  386. package/vibe/rules/quality/checklist.md +276 -276
  387. package/vibe/rules/quality/performance.md +236 -236
  388. package/vibe/rules/quality/testing-strategy.md +440 -440
  389. package/vibe/rules/standards/anti-patterns.md +541 -541
  390. package/vibe/rules/standards/code-structure.md +291 -291
  391. package/vibe/rules/standards/complexity-metrics.md +313 -313
  392. package/vibe/rules/standards/git-workflow.md +237 -237
  393. package/vibe/rules/standards/naming-conventions.md +198 -198
  394. package/vibe/rules/standards/security.md +305 -305
  395. package/vibe/rules/writing/document-style.md +74 -74
  396. package/vibe/setup.sh +31 -31
  397. package/vibe/templates/constitution-template.md +252 -252
  398. package/vibe/templates/contract-backend-template.md +526 -526
  399. package/vibe/templates/contract-frontend-template.md +599 -599
  400. package/vibe/templates/feature-template.md +96 -96
  401. package/vibe/templates/spec-template.md +221 -221
  402. package/vibe/ui-ux-data/charts.csv +26 -26
  403. package/vibe/ui-ux-data/colors.csv +97 -97
  404. package/vibe/ui-ux-data/icons.csv +101 -101
  405. package/vibe/ui-ux-data/landing.csv +31 -31
  406. package/vibe/ui-ux-data/products.csv +96 -96
  407. package/vibe/ui-ux-data/react-performance.csv +45 -45
  408. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  409. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  410. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  411. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  412. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  413. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  414. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  415. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  416. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  417. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  418. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  419. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  420. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  421. package/vibe/ui-ux-data/styles.csv +68 -68
  422. package/vibe/ui-ux-data/typography.csv +57 -57
  423. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  424. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  425. package/vibe/ui-ux-data/version.json +31 -31
  426. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -1,137 +1,145 @@
1
- # Image Extraction Rules — Node Rendering Based
2
-
3
- ## Core Principle
4
-
5
- ```
6
- ❌ imageRef 개별 다운로드 금지 (텍스처 fill 공유 문제)
7
- 모든 이미지는 Figma screenshot API로 노드 렌더링
8
- ```
9
-
10
- ## Render Methods
11
-
12
- | 이미지 유형 | 렌더링 방법 | 출력 위치 |
13
- |-----------|-----------|---------|
14
- | BG 프레임 (합성 배경) | `screenshot {fileKey} {bg.nodeId}` | `bg/{section}-bg.webp` |
15
- | 콘텐츠 (타이틀, 버튼) | `screenshot {fileKey} {node.nodeId}` | `content/{name}.webp` |
16
- | 벡터 글자 그룹 | `screenshot {fileKey} {group.nodeId}` | `content/{name}.webp` |
17
-
18
- ## BG 프레임 판별
19
-
20
- ```
21
- BG 프레임 = 다음 중 하나:
22
- - name에 "BG", "bg" 포함
23
- - 부모와 크기 동일(±10%) + 자식 이미지 3개 이상
24
- - 1depth 번째 자식이면서 이미지 노드 다수 보유
25
-
26
- 프레임 렌더링 1장 → CSS background-image
27
- → 하위 개별 레이어 다운로드하지 않음
28
- ```
29
-
30
- ## 벡터 글자 판별
31
-
32
- ```
33
- 벡터 글자 그룹 = 다음 모두 충족:
34
- - 부모 GROUP/FRAME 아래 VECTOR 타입 3개 이상
35
- - VECTOR 크기 < 60x60
36
- - 같은 imageRef 공유 (텍스처 fill)
37
-
38
- 부모 GROUP 통째로 렌더링 (개별 글자 다운로드 금지)
39
- → 커스텀 폰트 텍스트 = 웹폰트 없음 → 이미지로 사용
40
- ```
41
-
42
- ## 렌더링 금지 노드 (HTML로 구현해야 하는 것)
43
-
44
- ```
45
- 다음 조건에 해당하는 노드는 이미지로 렌더링하지 않는다 — HTML+CSS로 구현:
46
-
47
- 1. TEXT 자식 보유 프레임:
48
- 프레임 내부에 TEXT 노드가 1개 이상 있으면 → HTML로 구현
49
- ⚠️ BG 프레임 렌더링 시에도 TEXT 포함 여부 반드시 확인:
50
- - BG 프레임에 TEXT 자식이 있으면 BG 하위만 렌더링 (TEXT 제외)
51
- - 텍스트 포함된 상위 프레임을 통째 렌더링하면 → 이미지 텍스트 + HTML 텍스트 이중 표시
52
-
53
- 2. INSTANCE 반복 패턴 (카드/아이템 그리드):
54
- 같은 부모 아래 동일 구조 INSTANCE 2개 이상 → HTML 반복 구조 (v-for/.map())
55
- 카드 그리드를 통째 이미지 1장으로 렌더링 금지
56
- 카드 내부의 이미지 에셋만 개별 추출 (아이콘, 아이템 이미지)
57
- 카드 레이아웃, 텍스트, 버튼은 HTML로 구현
58
-
59
- 3. 인터랙티브 요소:
60
- name에 "btn", "button", "CTA", "link", "tab", "toggle" 포함 → HTML <button>/<a>
61
- 버튼을 이미지로 렌더링 금지 (클릭 이벤트 불가)
62
-
63
- 4. 정보 텍스트 영역:
64
- 기간, 가격, 수량, 설명 변경 가능 데이터 HTML 텍스트
65
- "1,000", "500 G-COIN", "보상 교환하기" 등을 이미지에 포함 금지
66
- ```
67
-
68
- ## 이미지로 렌더링하는 (HTML 구현 불가)
69
-
70
- ```
71
- 다음만 이미지로 렌더링:
72
-
73
- 1. 커스텀 폰트 텍스트 (벡터 글자 그룹):
74
- - 웹폰트 없는 장식 타이틀 ("MISSION 01" 등)
75
- - VECTOR 타입으로 분해된 글자 → GROUP 렌더링
76
-
77
- 2. 합성 배경 (BG 프레임):
78
- - 눈, 나무, 파티클 등 장식 레이어 합성물
79
- - 텍스트 미포함 확인 필수
80
-
81
- 3. 래스터 이미지 에셋:
82
- - 게임 아이템 썸네일, 코인 아이콘
83
- - imageRef가 있는 개별 RECTANGLE/노드
84
-
85
- 4. 복잡한 벡터 그래픽:
86
- - CSS로 재현 불가능한 일러스트/아이콘
87
- - VECTOR/GROUP 조합의 복잡한 그래픽
88
- ```
89
-
90
- ## Format
91
-
92
- - Output format: `.webp` (Figma API에서 png 수신 → cwebp로 webp 변환)
93
- - cwebp 미설치 시 `.png` 폴백
94
-
95
- ## Naming
96
-
97
- 렌더링된 이미지의 파일명 = Figma 노드 name을 kebab-case로:
98
- - `"Hero"` BG frame → `hero-bg.webp`
99
- - `"Mission 01"` vector group → `mission-01.webp`
100
- - `"Title"` content`hero-title.webp` (섹션명 prefix)
101
- - `"Btn_Login"` `btn-login.webp`
102
-
103
- Rules:
104
- - 공백 → 하이픈
105
- - 언더스코어 하이픈
106
- - 숫자 유지: `item11` → `item-11`
107
- - 대문자소문자
108
-
109
- ## Destination
110
-
111
- ```
112
- /tmp/{feature}/{bp-folder}/
113
- bg/ ← BG 프레임 렌더링
114
- content/ ← 콘텐츠 + 벡터 글자 렌더링
115
- sections/ ← Phase 4 검증용 스크린샷
116
- ```
117
-
118
- 최종 배치 (Phase 5):
119
- ```
120
- static/images/{feature}/ ← Nuxt 2
121
- public/images/{feature}/ Vue/Nuxt 3
122
- public/{feature}/ Next.js
123
- ```
124
-
125
- ## Size Limits
126
-
127
- | Type | Warn threshold | Action |
128
- |------|---------------|--------|
129
- | BG 렌더링 | 5 MB | 정상 (합성 이미지라 큰 게 정상) |
130
- | 콘텐츠 렌더링 | 1 MB | 경고 |
131
- | 단일 이미지 > 5 MB | — | ⚠️ 텍스처 fill 의심 → imageRef 다운로드 실수 확인 |
132
-
133
- ## Fallback
134
-
135
- 노드 렌더링 불가 시에만 imageRef 다운로드:
136
- - Figma screenshot API 실패 (rate limit, 권한)
137
- - 다운로드 파일 크기 5MB 초과 텍스처 fill 가능성 경고 로그
1
+ # Image Extraction Rules — Node Rendering Based
2
+
3
+ ## Core Principle
4
+
5
+ ```
6
+ ❌ imageRef 개별 다운로드 금지 (텍스처 fill 공유 문제)
7
+ 섹션/그룹을 통째 이미지로 렌더링 금지 (내부 TEXT/INSTANCE 포함 시)
8
+ ✅ 모든 이미지는 Figma screenshot API로 노드 렌더링
9
+ ✅ 렌더링 전 반드시 2-1.5 판별 규칙 확인 → HTML 대상은 렌더링하지 않음
10
+
11
+ 실제 테스트에서 발생한 잘못된 렌더링:
12
+ exchange-section1.webp (카드 4개 그리드를 이미지 1장으로)
13
+ ❌ daily-step2-list.webp (보상 목록을 텍스트 포함하여 통째로)
14
+ prize-section1.webp (응모 아이템을 텍스트 포함하여 통째로)
15
+ 올바른 접근: 카드 내부의 아이콘/썸네일만 개별 렌더링
16
+ ```
17
+
18
+ ## Render Methods
19
+
20
+ | 이미지 유형 | 렌더링 방법 | 출력 위치 |
21
+ |-----------|-----------|---------|
22
+ | BG 프레임 (합성 배경) | `screenshot {fileKey} {bg.nodeId}` | `bg/{section}-bg.webp` |
23
+ | 콘텐츠 (타이틀, 버튼) | `screenshot {fileKey} {node.nodeId}` | `content/{name}.webp` |
24
+ | 벡터 글자 그룹 | `screenshot {fileKey} {group.nodeId}` | `content/{name}.webp` |
25
+
26
+ ## BG 프레임 판별
27
+
28
+ ```
29
+ BG 프레임 = 다음 중 하나:
30
+ - name에 "BG", "bg" 포함
31
+ - 부모와 크기 동일(±10%) + 자식 이미지 3개 이상
32
+ - 1depth 첫 번째 자식이면서 이미지 노드 다수 보유
33
+
34
+ 프레임 렌더링 1장 CSS background-image
35
+ 하위 개별 레이어 다운로드하지 않음
36
+ ```
37
+
38
+ ## 벡터 글자 판별
39
+
40
+ ```
41
+ 벡터 글자 그룹 = 다음 모두 충족:
42
+ - 부모 GROUP/FRAME 아래 VECTOR 타입 3개 이상
43
+ - 각 VECTOR 크기 < 60x60
44
+ - 같은 imageRef 공유 (텍스처 fill)
45
+
46
+ → 부모 GROUP 통째로 렌더링 (개별 글자 다운로드 금지)
47
+ 커스텀 폰트 텍스트 = 웹폰트 없음 → 이미지로 사용
48
+ ```
49
+
50
+ ## 렌더링 금지 노드 (HTML로 구현해야 하는 )
51
+
52
+ ```
53
+ 다음 조건에 해당하는 노드는 이미지로 렌더링하지 않는다 — HTML+CSS로 구현:
54
+
55
+ 1. TEXT 자식 보유 프레임:
56
+ 프레임 내부에 TEXT 노드가 1개 이상 있으면 HTML로 구현
57
+ ⚠️ BG 프레임 렌더링 시에도 TEXT 포함 여부 반드시 확인:
58
+ - BG 프레임에 TEXT 자식이 있으면 → BG 하위만 렌더링 (TEXT 제외)
59
+ - 텍스트 포함된 상위 프레임을 통째 렌더링하면 → 이미지 텍스트 + HTML 텍스트 이중 표시
60
+
61
+ 2. INSTANCE 반복 패턴 (카드/아이템 그리드):
62
+ 같은 부모 아래 동일 구조 INSTANCE 2개 이상 → HTML 반복 구조 (v-for/.map())
63
+ 카드 그리드를 통째 이미지 1장으로 렌더링 금지
64
+ 카드 내부의 이미지 에셋만 개별 추출 (아이콘, 아이템 이미지)
65
+ 카드 레이아웃, 텍스트, 버튼은 HTML로 구현
66
+
67
+ 3. 인터랙티브 요소:
68
+ name에 "btn", "button", "CTA", "link", "tab", "toggle" 포함 → HTML <button>/<a>
69
+ ❌ 버튼을 이미지로 렌더링 금지 (클릭 이벤트 불가)
70
+
71
+ 4. 정보 텍스트 영역:
72
+ 기간, 가격, 수량, 설명 등 변경 가능 데이터 → HTML 텍스트
73
+ ❌ "1,000", "500 G-COIN", "보상 교환하기" 등을 이미지에 포함 금지
74
+ ```
75
+
76
+ ## 이미지로 렌더링하는 것 (HTML로 구현 불가)
77
+
78
+ ```
79
+ 다음만 이미지로 렌더링:
80
+
81
+ 1. 커스텀 폰트 텍스트 (벡터 글자 그룹):
82
+ - 웹폰트 없는 장식 타이틀 ("MISSION 01" )
83
+ - VECTOR 타입으로 분해된 글자 → GROUP 렌더링
84
+
85
+ 2. 합성 배경 (BG 프레임):
86
+ - 눈, 나무, 파티클 등 장식 레이어 합성물
87
+ - 텍스트 미포함 확인 필수
88
+
89
+ 3. 래스터 이미지 에셋:
90
+ - 게임 아이템 썸네일, 코인 아이콘 등
91
+ - imageRef가 있는 개별 RECTANGLE/노드
92
+
93
+ 4. 복잡한 벡터 그래픽:
94
+ - CSS로 재현 불가능한 일러스트/아이콘
95
+ - VECTOR/GROUP 조합의 복잡한 그래픽
96
+ ```
97
+
98
+ ## Format
99
+
100
+ - Output format: `.webp` (Figma API에서 png 수신 cwebp로 webp 변환)
101
+ - cwebp 미설치 시 `.png` 폴백
102
+
103
+ ## Naming
104
+
105
+ 렌더링된 이미지의 파일명 = Figma 노드 name을 kebab-case로:
106
+ - `"Hero"` BG frame → `hero-bg.webp`
107
+ - `"Mission 01"` vector group `mission-01.webp`
108
+ - `"Title"` content → `hero-title.webp` (섹션명 prefix)
109
+ - `"Btn_Login"` → `btn-login.webp`
110
+
111
+ Rules:
112
+ - 공백 → 하이픈
113
+ - 언더스코어 하이픈
114
+ - 숫자 유지: `item11` `item-11`
115
+ - 대문자 소문자
116
+
117
+ ## Destination
118
+
119
+ ```
120
+ /tmp/{feature}/{bp-folder}/
121
+ bg/ BG 프레임 렌더링
122
+ content/ 콘텐츠 + 벡터 글자 렌더링
123
+ sections/ ← Phase 4 검증용 스크린샷
124
+ ```
125
+
126
+ 최종 배치 (Phase 5):
127
+ ```
128
+ static/images/{feature}/ ← Nuxt 2
129
+ public/images/{feature}/ ← Vue/Nuxt 3
130
+ public/{feature}/ ← Next.js
131
+ ```
132
+
133
+ ## Size Limits
134
+
135
+ | Type | Warn threshold | Action |
136
+ |------|---------------|--------|
137
+ | BG 렌더링 | 5 MB | 정상 (합성 이미지라 정상) |
138
+ | 콘텐츠 렌더링 | 1 MB | 경고 |
139
+ | 단일 이미지 > 5 MB | — | ⚠️ 텍스처 fill 의심 → imageRef 다운로드 실수 확인 |
140
+
141
+ ## Fallback
142
+
143
+ 노드 렌더링 불가 시에만 imageRef 다운로드:
144
+ - Figma screenshot API 실패 (rate limit, 권한)
145
+ - 다운로드 후 파일 크기 5MB 초과 → 텍스처 fill 가능성 → 경고 로그
@@ -1,52 +1,52 @@
1
- ---
2
- name: video-production
3
- tier: standard
4
- description: "Video processing gotchas — FFmpeg commands, transcoding pipelines, HLS/DASH streaming setup, subtitle embedding (SRT/VTT), and thumbnail extraction. Use when the project involves any video manipulation, media processing, or streaming infrastructure. Covers codec selection, bitrate optimization, and common FFmpeg pitfalls. Must use this skill when user works with video files, mentions FFmpeg, or needs media processing — even for simple tasks like 'generate a thumbnail'."
5
- triggers: [video, ffmpeg, transcode, encode, stream, media, subtitle, thumbnail, hls, dash]
6
- priority: 60
7
- ---
8
-
9
- # Video Production
10
-
11
- ## Pre-check (K1)
12
-
13
- > Are you processing video files programmatically? If just embedding a YouTube/Vimeo player, this skill is not needed.
14
-
15
- ## Gotchas
16
-
17
- | Gotcha | Consequence | Prevention |
18
- |--------|-------------|------------|
19
- | Direct CLI string concatenation | Command injection risk | Always use wrapper library (fluent-ffmpeg for TS, ffmpeg-python for Python) |
20
- | No input validation | Crash on corrupted files | Always `ffprobe` input before processing — check codec, resolution, duration |
21
- | No temp file cleanup | Disk fills up silently | `try/finally` or cleanup handler — never leave partial outputs |
22
- | No progress callback | Long encoding appears frozen | Implement progress events for any operation >10s |
23
- | Memory loading large files | OOM on 4K+ video | Use streaming I/O, never read entire file into memory |
24
- | Assuming codec availability | Fails on different FFmpeg builds | Check `ffmpeg -codecs` at runtime before encoding |
25
- | Fixed bitrate encoding | Inconsistent quality | Use CRF-based quality (18-28 for H.264) instead |
26
- | No timeout | Encoding hangs forever | Set timeout + kill process on expiry |
27
-
28
- ## Codec Quick Reference
29
-
30
- | Use Case | Codec | Note |
31
- |----------|-------|------|
32
- | Maximum compatibility | H.264 (libx264) | CRF 23 default |
33
- | Smaller files | H.265 (libx265) | 50% smaller, slower, licensing issues |
34
- | Open source | VP9 (libvpx-vp9) | Good for WebM |
35
- | Best compression | AV1 (libaom-av1) | Very slow encoding |
36
-
37
- ## Resolution Presets
38
-
39
- | Preset | Resolution | Bitrate (H.264) |
40
- |--------|-----------|-----------------|
41
- | 360p | 640x360 | 800 kbps |
42
- | 720p | 1280x720 | 3 Mbps |
43
- | 1080p | 1920x1080 | 6 Mbps |
44
- | 4K | 3840x2160 | 15 Mbps |
45
-
46
- ## Done Criteria (K4)
47
-
48
- - [ ] All FFmpeg calls go through wrapper library (no raw CLI strings)
49
- - [ ] Input files validated with ffprobe before processing
50
- - [ ] Temp files cleaned up in all paths (success + error)
51
- - [ ] Progress reporting for long operations
52
- - [ ] Codec availability checked at runtime
1
+ ---
2
+ name: video-production
3
+ tier: standard
4
+ description: "Video processing gotchas — FFmpeg commands, transcoding pipelines, HLS/DASH streaming setup, subtitle embedding (SRT/VTT), and thumbnail extraction. Use when the project involves any video manipulation, media processing, or streaming infrastructure. Covers codec selection, bitrate optimization, and common FFmpeg pitfalls. Must use this skill when user works with video files, mentions FFmpeg, or needs media processing — even for simple tasks like 'generate a thumbnail'."
5
+ triggers: [video, ffmpeg, transcode, encode, stream, media, subtitle, thumbnail, hls, dash]
6
+ priority: 60
7
+ ---
8
+
9
+ # Video Production
10
+
11
+ ## Pre-check (K1)
12
+
13
+ > Are you processing video files programmatically? If just embedding a YouTube/Vimeo player, this skill is not needed.
14
+
15
+ ## Gotchas
16
+
17
+ | Gotcha | Consequence | Prevention |
18
+ |--------|-------------|------------|
19
+ | Direct CLI string concatenation | Command injection risk | Always use wrapper library (fluent-ffmpeg for TS, ffmpeg-python for Python) |
20
+ | No input validation | Crash on corrupted files | Always `ffprobe` input before processing — check codec, resolution, duration |
21
+ | No temp file cleanup | Disk fills up silently | `try/finally` or cleanup handler — never leave partial outputs |
22
+ | No progress callback | Long encoding appears frozen | Implement progress events for any operation >10s |
23
+ | Memory loading large files | OOM on 4K+ video | Use streaming I/O, never read entire file into memory |
24
+ | Assuming codec availability | Fails on different FFmpeg builds | Check `ffmpeg -codecs` at runtime before encoding |
25
+ | Fixed bitrate encoding | Inconsistent quality | Use CRF-based quality (18-28 for H.264) instead |
26
+ | No timeout | Encoding hangs forever | Set timeout + kill process on expiry |
27
+
28
+ ## Codec Quick Reference
29
+
30
+ | Use Case | Codec | Note |
31
+ |----------|-------|------|
32
+ | Maximum compatibility | H.264 (libx264) | CRF 23 default |
33
+ | Smaller files | H.265 (libx265) | 50% smaller, slower, licensing issues |
34
+ | Open source | VP9 (libvpx-vp9) | Good for WebM |
35
+ | Best compression | AV1 (libaom-av1) | Very slow encoding |
36
+
37
+ ## Resolution Presets
38
+
39
+ | Preset | Resolution | Bitrate (H.264) |
40
+ |--------|-----------|-----------------|
41
+ | 360p | 640x360 | 800 kbps |
42
+ | 720p | 1280x720 | 3 Mbps |
43
+ | 1080p | 1920x1080 | 6 Mbps |
44
+ | 4K | 3840x2160 | 15 Mbps |
45
+
46
+ ## Done Criteria (K4)
47
+
48
+ - [ ] All FFmpeg calls go through wrapper library (no raw CLI strings)
49
+ - [ ] Input files validated with ffprobe before processing
50
+ - [ ] Temp files cleaned up in all paths (success + error)
51
+ - [ ] Progress reporting for long operations
52
+ - [ ] Codec availability checked at runtime
@@ -1,58 +1,58 @@
1
- # Video Quality Checklist
2
-
3
- ## Pre-Processing
4
-
5
- - [ ] Input file exists and is readable before pipeline starts
6
- - [ ] `ffprobe` run on input — codec, resolution, duration, bitrate logged
7
- - [ ] Corrupted/truncated files rejected with clear error (not crash)
8
- - [ ] Input resolution within supported range (min 360p, max 4K)
9
- - [ ] Audio stream present — handle gracefully if missing
10
-
11
- ## Encoding
12
-
13
- - [ ] CRF-based encoding used (not fixed bitrate) for consistent visual quality
14
- - [ ] Target codec available in current FFmpeg build (`ffmpeg -codecs` check)
15
- - [ ] Encoding runs through wrapper library — no raw CLI string concatenation
16
- - [ ] `-movflags +faststart` set for MP4 (enables streaming before full download)
17
- - [ ] Audio normalized: loudness target -16 LUFS (streaming standard)
18
- - [ ] Aspect ratio preserved — no unintended stretching
19
-
20
- ## Progress & Monitoring
21
-
22
- - [ ] Progress events emitted for any operation exceeding 10 seconds
23
- - [ ] Encoding timeout configured — process killed on expiry
24
- - [ ] Estimated time remaining shown in progress (based on bitrate processed)
25
-
26
- ## Output Validation
27
-
28
- - [ ] Output file exists after encoding completes
29
- - [ ] Output duration verified: within ±2 seconds of input
30
- - [ ] Output codec matches requested codec (re-run ffprobe on output)
31
- - [ ] Output file size within acceptable range (flag if >3x input size)
32
- - [ ] Thumbnail: correct dimensions, not blank/corrupted
33
-
34
- ## Subtitles (if applicable)
35
-
36
- - [ ] Subtitle file encoding is UTF-8 (convert if needed)
37
- - [ ] Subtitle timing verified — first/last cue in range of video duration
38
- - [ ] Burn-in subtitles visually tested on dark and light scenes
39
-
40
- ## HLS / DASH Streaming (if applicable)
41
-
42
- - [ ] `.m3u8` manifest references correct segment file names
43
- - [ ] All segment files present in output directory
44
- - [ ] Segment duration consistent (target ±1 second of configured value)
45
- - [ ] CORS headers configured on media server
46
-
47
- ## Storage & Cleanup
48
-
49
- - [ ] Temp directory cleaned in `finally` block — both success and error paths
50
- - [ ] No partial output files left on disk after failure
51
- - [ ] Output written to separate directory from temp files
52
- - [ ] Disk space checked before processing large files (minimum 3x input size free)
53
-
54
- ## Security
55
-
56
- - [ ] Input file path sanitized — no directory traversal (`../`)
57
- - [ ] FFmpeg invoked via array arguments (not shell string) to prevent injection
58
- - [ ] Max file size limit enforced before processing begins
1
+ # Video Quality Checklist
2
+
3
+ ## Pre-Processing
4
+
5
+ - [ ] Input file exists and is readable before pipeline starts
6
+ - [ ] `ffprobe` run on input — codec, resolution, duration, bitrate logged
7
+ - [ ] Corrupted/truncated files rejected with clear error (not crash)
8
+ - [ ] Input resolution within supported range (min 360p, max 4K)
9
+ - [ ] Audio stream present — handle gracefully if missing
10
+
11
+ ## Encoding
12
+
13
+ - [ ] CRF-based encoding used (not fixed bitrate) for consistent visual quality
14
+ - [ ] Target codec available in current FFmpeg build (`ffmpeg -codecs` check)
15
+ - [ ] Encoding runs through wrapper library — no raw CLI string concatenation
16
+ - [ ] `-movflags +faststart` set for MP4 (enables streaming before full download)
17
+ - [ ] Audio normalized: loudness target -16 LUFS (streaming standard)
18
+ - [ ] Aspect ratio preserved — no unintended stretching
19
+
20
+ ## Progress & Monitoring
21
+
22
+ - [ ] Progress events emitted for any operation exceeding 10 seconds
23
+ - [ ] Encoding timeout configured — process killed on expiry
24
+ - [ ] Estimated time remaining shown in progress (based on bitrate processed)
25
+
26
+ ## Output Validation
27
+
28
+ - [ ] Output file exists after encoding completes
29
+ - [ ] Output duration verified: within ±2 seconds of input
30
+ - [ ] Output codec matches requested codec (re-run ffprobe on output)
31
+ - [ ] Output file size within acceptable range (flag if >3x input size)
32
+ - [ ] Thumbnail: correct dimensions, not blank/corrupted
33
+
34
+ ## Subtitles (if applicable)
35
+
36
+ - [ ] Subtitle file encoding is UTF-8 (convert if needed)
37
+ - [ ] Subtitle timing verified — first/last cue in range of video duration
38
+ - [ ] Burn-in subtitles visually tested on dark and light scenes
39
+
40
+ ## HLS / DASH Streaming (if applicable)
41
+
42
+ - [ ] `.m3u8` manifest references correct segment file names
43
+ - [ ] All segment files present in output directory
44
+ - [ ] Segment duration consistent (target ±1 second of configured value)
45
+ - [ ] CORS headers configured on media server
46
+
47
+ ## Storage & Cleanup
48
+
49
+ - [ ] Temp directory cleaned in `finally` block — both success and error paths
50
+ - [ ] No partial output files left on disk after failure
51
+ - [ ] Output written to separate directory from temp files
52
+ - [ ] Disk space checked before processing large files (minimum 3x input size free)
53
+
54
+ ## Security
55
+
56
+ - [ ] Input file path sanitized — no directory traversal (`../`)
57
+ - [ ] FFmpeg invoked via array arguments (not shell string) to prevent injection
58
+ - [ ] Max file size limit enforced before processing begins