@su-record/vibe 2.8.51 → 2.8.53
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.
- package/.env.example +37 -37
- package/CLAUDE.md +169 -169
- package/LICENSE +21 -21
- package/README.ko.md +5 -5
- package/README.md +5 -5
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +294 -294
- package/agents/event/event-comms.md +78 -78
- package/agents/event/event-content.md +68 -68
- package/agents/event/event-image.md +95 -95
- package/agents/event/event-ops.md +84 -84
- package/agents/event/event-scheduler.md +69 -69
- package/agents/event/event-speaker.md +86 -86
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/junior-mentor.md +141 -141
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/qa/qa-coordinator.md +131 -131
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui/ui-a11y-auditor.md +93 -93
- package/agents/ui/ui-antipattern-detector.md +102 -102
- package/agents/ui/ui-dataviz-advisor.md +69 -69
- package/agents/ui/ui-design-system-gen.md +57 -57
- package/agents/ui/ui-industry-analyzer.md +49 -49
- package/agents/ui/ui-layout-architect.md +65 -65
- package/agents/ui/ui-stack-implementer.md +68 -68
- package/agents/ui/ux-compliance-reviewer.md +81 -81
- package/agents/ui-previewer.md +258 -258
- package/commands/vibe.analyze.md +379 -379
- package/commands/vibe.docs.md +32 -32
- package/commands/vibe.event.md +163 -163
- package/commands/vibe.figma.md +69 -69
- package/commands/vibe.review.md +686 -686
- package/commands/vibe.run.md +2276 -2276
- package/commands/vibe.spec.md +1195 -1195
- package/commands/vibe.spec.review.md +609 -609
- package/commands/vibe.trace.md +259 -259
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.verify.md +510 -510
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/config.js +9 -9
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/figma.js +20 -20
- package/dist/cli/commands/info.js +53 -53
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +82 -15
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/remove.js +14 -14
- package/dist/cli/commands/sentinel.js +27 -27
- package/dist/cli/commands/skills.js +5 -5
- package/dist/cli/commands/slack.js +10 -10
- package/dist/cli/commands/stats.js +6 -6
- package/dist/cli/commands/telegram.js +12 -12
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.js +51 -51
- package/dist/cli/llm/claude-commands.js +16 -16
- package/dist/cli/llm/config.js +18 -18
- package/dist/cli/llm/gemini-commands.js +16 -16
- package/dist/cli/llm/gpt-commands.js +19 -19
- package/dist/cli/llm/help.js +21 -21
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +2 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/cursor-agents.js +32 -32
- package/dist/cli/postinstall/cursor-rules.js +83 -83
- package/dist/cli/postinstall/cursor-skills.js +743 -743
- package/dist/cli/setup/Provisioner.js +42 -42
- package/dist/cli/types.d.ts +12 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/IterationTracker.js +11 -11
- package/dist/infra/lib/PythonParser.js +108 -108
- package/dist/infra/lib/ReviewRace.js +96 -96
- package/dist/infra/lib/SkillFrontmatter.js +28 -28
- package/dist/infra/lib/SkillQualityGate.js +9 -9
- package/dist/infra/lib/SkillRepository.js +159 -159
- package/dist/infra/lib/TokenBudgetTracker.d.ts +13 -0
- package/dist/infra/lib/TokenBudgetTracker.d.ts.map +1 -1
- package/dist/infra/lib/TokenBudgetTracker.js +44 -3
- package/dist/infra/lib/TokenBudgetTracker.js.map +1 -1
- package/dist/infra/lib/UltraQA.js +99 -99
- package/dist/infra/lib/autonomy/AuditStore.js +41 -41
- package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
- package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
- package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
- package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
- package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
- package/dist/infra/lib/embedding/VectorStore.js +22 -22
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
- package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
- package/dist/infra/lib/evolution/InsightStore.js +90 -90
- package/dist/infra/lib/evolution/ParityTester.js +57 -57
- package/dist/infra/lib/evolution/RollbackManager.js +5 -5
- package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
- package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
- package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
- package/dist/infra/lib/evolution/UsageTracker.js +28 -28
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/infra/lib/memory/MemorySearch.js +57 -57
- package/dist/infra/lib/memory/MemoryStorage.js +181 -181
- package/dist/infra/lib/memory/ObservationStore.js +28 -28
- package/dist/infra/lib/memory/ReflectionStore.js +30 -30
- package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
- package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/infra/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/hooks/gemini-hooks.json +73 -73
- package/hooks/hooks.json +174 -170
- package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
- package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
- package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
- package/hooks/scripts/auto-commit.js +97 -97
- package/hooks/scripts/auto-format.js +64 -64
- package/hooks/scripts/auto-test.js +81 -81
- package/hooks/scripts/code-check.js +268 -268
- package/hooks/scripts/codex-detect.js +46 -46
- package/hooks/scripts/codex-review-gate.js +80 -80
- package/hooks/scripts/command-log.js +32 -32
- package/hooks/scripts/context-save.js +353 -353
- package/hooks/scripts/devlog-gen.js +230 -0
- package/hooks/scripts/evolution-engine.js +91 -91
- package/hooks/scripts/figma-extract.js +635 -477
- package/hooks/scripts/hud-status.js +321 -321
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +572 -572
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pr-test-gate.js +52 -52
- package/hooks/scripts/pre-tool-guard.js +214 -159
- package/hooks/scripts/prompt-dispatcher.js +185 -185
- package/hooks/scripts/sentinel-guard.js +131 -131
- package/hooks/scripts/session-start.js +177 -177
- package/hooks/scripts/skill-injector.js +83 -83
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +243 -243
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +101 -101
- package/skills/agents-md/SKILL.md +121 -121
- package/skills/agents-md/rubrics/what-to-keep.md +49 -49
- package/skills/agents-md/templates/agents-md.md +36 -36
- package/skills/arch-guard/SKILL.md +181 -181
- package/skills/arch-guard/agents/detector.md +48 -48
- package/skills/arch-guard/agents/reporter.md +48 -48
- package/skills/arch-guard/agents/rule-generator.md +49 -49
- package/skills/arch-guard/agents/violation-checker.md +51 -51
- package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
- package/skills/arch-guard/frameworks/solid.md +102 -102
- package/skills/arch-guard/scripts/check-boundaries.js +90 -90
- package/skills/arch-guard/templates/arch-rules.json +47 -47
- package/skills/arch-guard/templates/violation-report.md +53 -53
- package/skills/brand-assets/SKILL.md +147 -147
- package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
- package/skills/brand-assets/templates/brand-guide.md +161 -161
- package/skills/capability-loop/SKILL.md +168 -168
- package/skills/capability-loop/agents/capability-designer.md +61 -61
- package/skills/capability-loop/agents/failure-analyst.md +55 -55
- package/skills/capability-loop/agents/implementer.md +50 -50
- package/skills/capability-loop/agents/tester.md +53 -53
- package/skills/capability-loop/templates/capability-spec.md +118 -118
- package/skills/capability-loop/templates/failure-analysis.md +118 -118
- package/skills/characterization-test/SKILL.md +207 -207
- package/skills/characterization-test/agents/behavior-capturer.md +50 -50
- package/skills/characterization-test/agents/coverage-checker.md +54 -54
- package/skills/characterization-test/agents/reporter.md +50 -50
- package/skills/characterization-test/agents/test-writer.md +49 -49
- package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
- package/skills/characterization-test/templates/test-template.ts +101 -101
- package/skills/chub-usage/SKILL.md +139 -139
- package/skills/claude-md-guide/SKILL.md +351 -351
- package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
- package/skills/claude-md-guide/templates/claude-md.md +54 -54
- package/skills/commerce-patterns/SKILL.md +64 -64
- package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
- package/skills/commerce-patterns/templates/product-schema.md +85 -85
- package/skills/commit-push-pr/SKILL.md +77 -77
- package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
- package/skills/commit-push-pr/agents/message-writer.md +50 -50
- package/skills/commit-push-pr/agents/pr-writer.md +58 -58
- package/skills/commit-push-pr/agents/reviewer.md +52 -52
- package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
- package/skills/commit-push-pr/templates/pr-body.md +63 -63
- package/skills/context7-usage/SKILL.md +106 -106
- package/skills/context7-usage/rubrics/when-to-use.md +50 -50
- package/skills/create-prd/SKILL.md +90 -90
- package/skills/create-prd/agents/edge-case-finder.md +48 -48
- package/skills/create-prd/agents/prioritizer.md +60 -60
- package/skills/create-prd/agents/requirements-writer.md +48 -48
- package/skills/create-prd/agents/researcher.md +55 -55
- package/skills/create-prd/agents/reviewer.md +54 -54
- package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
- package/skills/create-prd/frameworks/rice-scoring.md +97 -97
- package/skills/create-prd/orchestrator.md +70 -70
- package/skills/create-prd/rubrics/completeness.md +58 -58
- package/skills/create-prd/templates/prd.md +139 -139
- package/skills/design-audit/SKILL.md +152 -152
- package/skills/design-audit/agents/a11y-auditor.md +43 -43
- package/skills/design-audit/agents/performance-auditor.md +46 -46
- package/skills/design-audit/agents/responsive-auditor.md +46 -46
- package/skills/design-audit/agents/scorer.md +47 -47
- package/skills/design-audit/agents/slop-detector.md +47 -47
- package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
- package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
- package/skills/design-audit/orchestrator.md +64 -64
- package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
- package/skills/design-audit/rubrics/scoring.md +63 -63
- package/skills/design-audit/templates/report.md +88 -88
- package/skills/design-critique/SKILL.md +139 -139
- package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
- package/skills/design-critique/templates/critique-report.md +86 -86
- package/skills/design-distill/SKILL.md +130 -130
- package/skills/design-distill/templates/design-system.md +132 -132
- package/skills/design-normalize/SKILL.md +133 -133
- package/skills/design-normalize/rubrics/token-naming.md +117 -117
- package/skills/design-normalize/templates/token-audit.md +89 -89
- package/skills/design-polish/SKILL.md +131 -131
- package/skills/design-polish/rubrics/polish-checklist.md +68 -68
- package/skills/design-polish/templates/polish-report.md +64 -64
- package/skills/design-teach/SKILL.md +182 -182
- package/skills/design-teach/rubrics/brand-personality.md +73 -73
- package/skills/design-teach/templates/design-context.json +36 -36
- package/skills/devlog/SKILL.md +143 -0
- package/skills/e2e-commerce/SKILL.md +62 -62
- package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
- package/skills/event-comms/SKILL.md +162 -162
- package/skills/event-comms/templates/email-invite.md +99 -99
- package/skills/event-comms/templates/sns-post.md +133 -133
- package/skills/event-ops/SKILL.md +198 -198
- package/skills/event-ops/rubrics/contingency.md +85 -85
- package/skills/event-ops/templates/d-day-checklist.md +65 -65
- package/skills/event-planning/SKILL.md +132 -132
- package/skills/event-planning/rubrics/timeline.md +70 -70
- package/skills/event-planning/templates/event-plan.md +91 -91
- package/skills/exec-plan/SKILL.md +149 -149
- package/skills/exec-plan/agents/decomposer.md +47 -47
- package/skills/exec-plan/agents/dependency-mapper.md +44 -44
- package/skills/exec-plan/agents/estimator.md +43 -43
- package/skills/exec-plan/agents/validator.md +55 -55
- package/skills/exec-plan/orchestrator.md +70 -70
- package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
- package/skills/exec-plan/templates/plan.md +147 -147
- package/skills/git-worktree/SKILL.md +73 -73
- package/skills/git-worktree/rubrics/when-to-use.md +55 -55
- package/skills/handoff/SKILL.md +110 -110
- package/skills/handoff/agents/context-summarizer.md +51 -51
- package/skills/handoff/agents/document-writer.md +63 -63
- package/skills/handoff/agents/state-collector.md +53 -53
- package/skills/handoff/agents/verifier.md +48 -48
- package/skills/handoff/rubrics/completeness.md +62 -62
- package/skills/handoff/templates/handoff.md +107 -107
- package/skills/parallel-research/SKILL.md +89 -89
- package/skills/parallel-research/agents/best-practices.md +43 -43
- package/skills/parallel-research/agents/codebase-patterns.md +46 -46
- package/skills/parallel-research/agents/framework-docs.md +45 -45
- package/skills/parallel-research/agents/security-advisory.md +46 -46
- package/skills/parallel-research/agents/synthesizer.md +52 -52
- package/skills/parallel-research/experts/best-practices.md +50 -50
- package/skills/parallel-research/experts/codebase-patterns.md +70 -70
- package/skills/parallel-research/experts/framework-docs.md +65 -65
- package/skills/parallel-research/experts/security-advisory.md +69 -69
- package/skills/parallel-research/orchestrator.md +65 -65
- package/skills/parallel-research/templates/synthesis.md +101 -101
- package/skills/prioritization-frameworks/SKILL.md +87 -87
- package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
- package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
- package/skills/priority-todos/SKILL.md +64 -64
- package/skills/priority-todos/rubrics/prioritization.md +70 -70
- package/skills/priority-todos/templates/todo-board.md +59 -59
- package/skills/seo-checklist/SKILL.md +58 -58
- package/skills/seo-checklist/frameworks/structured-data.md +153 -153
- package/skills/seo-checklist/rubrics/content-seo.md +42 -42
- package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
- package/skills/techdebt/SKILL.md +124 -124
- package/skills/techdebt/agents/analyzer.md +50 -50
- package/skills/techdebt/agents/fixer.md +41 -41
- package/skills/techdebt/agents/reviewer.md +47 -47
- package/skills/techdebt/agents/scanner.md +44 -44
- package/skills/techdebt/orchestrator.md +70 -70
- package/skills/techdebt/rubrics/severity.md +51 -51
- package/skills/techdebt/scripts/scan.js +90 -90
- package/skills/techdebt/templates/report.md +86 -86
- package/skills/tool-fallback/SKILL.md +104 -104
- package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
- package/skills/typescript-advanced-types/SKILL.md +67 -67
- package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
- package/skills/ui-ux-pro-max/SKILL.md +236 -236
- package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
- package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
- package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
- package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
- package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
- package/skills/ui-ux-pro-max/reference/typography.md +455 -455
- package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
- package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
- package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
- package/skills/user-personas/SKILL.md +75 -75
- package/skills/user-personas/rubrics/research-methods.md +56 -56
- package/skills/user-personas/templates/persona.md +89 -89
- package/skills/vercel-react-best-practices/SKILL.md +60 -60
- package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
- package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
- package/skills/vibe.docs/SKILL.md +171 -171
- package/skills/vibe.docs/templates/architecture.md +80 -80
- package/skills/vibe.docs/templates/readme.md +84 -84
- package/skills/vibe.docs/templates/release-notes.md +74 -74
- package/skills/vibe.figma/SKILL.md +215 -982
- package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
- package/skills/vibe.figma/templates/component-index.md +126 -126
- package/skills/vibe.figma/templates/figma-handoff.md +100 -100
- package/skills/vibe.figma/templates/remapped-tree.md +277 -277
- package/skills/vibe.figma.convert/SKILL.md +188 -511
- package/skills/vibe.figma.convert/rubrics/conversion-rules.md +129 -113
- package/skills/vibe.figma.convert/templates/component.md +140 -140
- package/skills/vibe.figma.extract/SKILL.md +179 -300
- package/skills/vibe.figma.extract/rubrics/image-rules.md +145 -137
- package/skills/video-production/SKILL.md +52 -52
- package/skills/video-production/rubrics/quality-checklist.md +58 -58
- package/skills/video-production/templates/production-plan.md +104 -104
- package/vibe/config.json +29 -29
- package/vibe/constitution.md +227 -227
- package/vibe/rules/principles/communication-guide.md +98 -98
- package/vibe/rules/principles/development-philosophy.md +52 -52
- package/vibe/rules/principles/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/performance.md +236 -236
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/git-workflow.md +237 -237
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/rules/standards/security.md +305 -305
- package/vibe/rules/writing/document-style.md +74 -74
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
- package/vibe/ui-ux-data/charts.csv +26 -26
- package/vibe/ui-ux-data/colors.csv +97 -97
- package/vibe/ui-ux-data/icons.csv +101 -101
- package/vibe/ui-ux-data/landing.csv +31 -31
- package/vibe/ui-ux-data/products.csv +96 -96
- package/vibe/ui-ux-data/react-performance.csv +45 -45
- package/vibe/ui-ux-data/stacks/astro.csv +54 -54
- package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
- package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
- package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
- package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
- package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
- package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
- package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
- package/vibe/ui-ux-data/stacks/react.csv +54 -54
- package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
- package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
- package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
- package/vibe/ui-ux-data/stacks/vue.csv +50 -50
- package/vibe/ui-ux-data/styles.csv +68 -68
- package/vibe/ui-ux-data/typography.csv +57 -57
- package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
- package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
- package/vibe/ui-ux-data/version.json +31 -31
- 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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
1
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
##
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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,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
|