@su-record/vibe 2.8.49 → 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 -602
  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 -209
  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 -630
  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 -349
  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,145 +1,137 @@
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
+ # 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,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