@su-record/vibe 3.2.0 → 3.2.2

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 (286) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.en.md +7 -6
  3. package/README.md +8 -5
  4. package/dist/__tests__/skill-namespace.test.d.ts +2 -0
  5. package/dist/__tests__/skill-namespace.test.d.ts.map +1 -0
  6. package/dist/__tests__/skill-namespace.test.js +60 -0
  7. package/dist/__tests__/skill-namespace.test.js.map +1 -0
  8. package/dist/__tests__/wiring-integrity.test.js +5 -5
  9. package/dist/__tests__/wiring-integrity.test.js.map +1 -1
  10. package/dist/cli/design/design-md-parser.test.js +2 -2
  11. package/dist/cli/design/design-md-parser.test.js.map +1 -1
  12. package/dist/cli/generate-release-notes.d.ts +3 -0
  13. package/dist/cli/generate-release-notes.d.ts.map +1 -0
  14. package/dist/cli/generate-release-notes.js +47 -0
  15. package/dist/cli/generate-release-notes.js.map +1 -0
  16. package/dist/cli/postinstall/constants.d.ts +6 -6
  17. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  18. package/dist/cli/postinstall/constants.js +114 -46
  19. package/dist/cli/postinstall/constants.js.map +1 -1
  20. package/dist/cli/postinstall/fs-utils.d.ts +1 -0
  21. package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
  22. package/dist/cli/postinstall/fs-utils.js +25 -0
  23. package/dist/cli/postinstall/fs-utils.js.map +1 -1
  24. package/dist/cli/postinstall/fs-utils.test.js +46 -11
  25. package/dist/cli/postinstall/fs-utils.test.js.map +1 -1
  26. package/dist/cli/postinstall/main.d.ts.map +1 -1
  27. package/dist/cli/postinstall/main.js +3 -2
  28. package/dist/cli/postinstall/main.js.map +1 -1
  29. package/dist/cli/setup/Provisioner.d.ts.map +1 -1
  30. package/dist/cli/setup/Provisioner.js +23 -7
  31. package/dist/cli/setup/Provisioner.js.map +1 -1
  32. package/dist/cli/utils/cli-detector.d.ts +3 -3
  33. package/dist/cli/utils/cli-detector.d.ts.map +1 -1
  34. package/dist/cli/utils/cli-detector.js +7 -27
  35. package/dist/cli/utils/cli-detector.js.map +1 -1
  36. package/dist/cli/utils/cli-detector.test.js +3 -2
  37. package/dist/cli/utils/cli-detector.test.js.map +1 -1
  38. package/dist/infra/lib/llm-availability.d.ts.map +1 -1
  39. package/dist/infra/lib/llm-availability.js +2 -10
  40. package/dist/infra/lib/llm-availability.js.map +1 -1
  41. package/dist/infra/lib/llm-availability.test.js +3 -2
  42. package/dist/infra/lib/llm-availability.test.js.map +1 -1
  43. package/dist/infra/lib/utils.d.ts +6 -0
  44. package/dist/infra/lib/utils.d.ts.map +1 -1
  45. package/dist/infra/lib/utils.js +33 -0
  46. package/dist/infra/lib/utils.js.map +1 -1
  47. package/dist/tests/curated-release-notes.test.d.ts +2 -0
  48. package/dist/tests/curated-release-notes.test.d.ts.map +1 -0
  49. package/dist/tests/curated-release-notes.test.js +106 -0
  50. package/dist/tests/curated-release-notes.test.js.map +1 -0
  51. package/dist/tools/convention/validateCodeQuality.d.ts +1 -0
  52. package/dist/tools/convention/validateCodeQuality.d.ts.map +1 -1
  53. package/dist/tools/convention/validateCodeQuality.js +3 -2
  54. package/dist/tools/convention/validateCodeQuality.js.map +1 -1
  55. package/dist/tools/index.d.ts +2 -2
  56. package/dist/tools/index.d.ts.map +1 -1
  57. package/dist/tools/index.js +2 -0
  58. package/dist/tools/index.js.map +1 -1
  59. package/dist/tools/release/releaseNotes.d.ts +21 -0
  60. package/dist/tools/release/releaseNotes.d.ts.map +1 -0
  61. package/dist/tools/release/releaseNotes.js +105 -0
  62. package/dist/tools/release/releaseNotes.js.map +1 -0
  63. package/dist/tools/spec/executionPacket.d.ts +101 -0
  64. package/dist/tools/spec/executionPacket.d.ts.map +1 -0
  65. package/dist/tools/spec/executionPacket.js +394 -0
  66. package/dist/tools/spec/executionPacket.js.map +1 -0
  67. package/dist/tools/spec/executionPacket.test.d.ts +2 -0
  68. package/dist/tools/spec/executionPacket.test.d.ts.map +1 -0
  69. package/dist/tools/spec/executionPacket.test.js +360 -0
  70. package/dist/tools/spec/executionPacket.test.js.map +1 -0
  71. package/dist/tools/spec/index.d.ts +2 -0
  72. package/dist/tools/spec/index.d.ts.map +1 -1
  73. package/dist/tools/spec/index.js +2 -0
  74. package/dist/tools/spec/index.js.map +1 -1
  75. package/dist/tools/spec/specGenerator.d.ts +12 -0
  76. package/dist/tools/spec/specGenerator.d.ts.map +1 -1
  77. package/dist/tools/spec/specGenerator.js +96 -14
  78. package/dist/tools/spec/specGenerator.js.map +1 -1
  79. package/dist/tools/spec/specGenerator.test.d.ts +2 -0
  80. package/dist/tools/spec/specGenerator.test.d.ts.map +1 -0
  81. package/dist/tools/spec/specGenerator.test.js +130 -0
  82. package/dist/tools/spec/specGenerator.test.js.map +1 -0
  83. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
  84. package/hooks/scripts/__tests__/llm-orchestrate-antigravity.test.js +5 -2
  85. package/hooks/scripts/__tests__/run-ledger-verify-required.test.js +7 -2
  86. package/hooks/scripts/__tests__/run-ledger.test.js +161 -10
  87. package/hooks/scripts/__tests__/utils-npm-root.test.js +5 -4
  88. package/hooks/scripts/lib/run-ledger.js +123 -21
  89. package/hooks/scripts/verify-ledger.js +23 -3
  90. package/package.json +2 -2
  91. package/skills/{agents-md → vibe.agents-md}/SKILL.md +1 -1
  92. package/skills/{brand-assets → vibe.brand-assets}/SKILL.md +1 -1
  93. package/skills/{capability-loop → vibe.capability-loop}/SKILL.md +1 -1
  94. package/skills/{chub-usage → vibe.chub-usage}/SKILL.md +1 -1
  95. package/skills/vibe.clone/SKILL.md +295 -3
  96. package/skills/{commerce-patterns → vibe.commerce-patterns}/SKILL.md +1 -1
  97. package/skills/{commit-push-pr → vibe.commit-push-pr}/SKILL.md +2 -2
  98. package/skills/{context7-usage → vibe.context7-usage}/SKILL.md +1 -1
  99. package/skills/vibe.contract/SKILL.md +162 -1
  100. package/skills/{create-prd → vibe.create-prd}/SKILL.md +2 -2
  101. package/skills/{design-refine → vibe.design-refine}/SKILL.md +1 -1
  102. package/skills/{design-review → vibe.design-review}/SKILL.md +1 -1
  103. package/skills/{design-teach → vibe.design-teach}/SKILL.md +1 -1
  104. package/skills/{devlog → vibe.devlog}/SKILL.md +1 -1
  105. package/skills/vibe.docs/SKILL.md +256 -1
  106. package/skills/{e2e-commerce → vibe.e2e-commerce}/SKILL.md +1 -1
  107. package/skills/vibe.educational-content/SKILL.md +157 -0
  108. package/skills/vibe.educational-content/references/learning-design.md +81 -0
  109. package/skills/vibe.educational-content/references/output-patterns.md +109 -0
  110. package/skills/vibe.educational-content/references/source-method.md +40 -0
  111. package/skills/{event-comms → vibe.event-comms}/SKILL.md +1 -1
  112. package/skills/{event-ops → vibe.event-ops}/SKILL.md +1 -1
  113. package/skills/{event-planning → vibe.event-planning}/SKILL.md +1 -1
  114. package/skills/vibe.figma/SKILL.md +473 -21
  115. package/skills/vibe.figma/references/branch-phases.md +1 -1
  116. package/skills/{git-worktree → vibe.git-worktree}/SKILL.md +1 -1
  117. package/skills/{handoff → vibe.handoff}/SKILL.md +1 -1
  118. package/skills/{parallel-research → vibe.parallel-research}/SKILL.md +2 -2
  119. package/skills/{presentation → vibe.presentation}/SKILL.md +1 -1
  120. package/skills/{prioritization-frameworks → vibe.prioritization}/SKILL.md +2 -2
  121. package/skills/{priority-todos → vibe.priority-todos}/SKILL.md +1 -1
  122. package/skills/{vercel-react-best-practices → vibe.react-best-practices}/SKILL.md +1 -1
  123. package/skills/vibe.regress/SKILL.md +182 -2
  124. package/skills/vibe.run/SKILL.md +417 -7
  125. package/skills/{arch-guard → vibe.run/internal/arch-guard}/templates/violation-report.md +1 -1
  126. package/skills/{seo-checklist → vibe.seo-checklist}/SKILL.md +1 -1
  127. package/skills/vibe.spec/SKILL.md +122 -1
  128. package/skills/vibe.test/SKILL.md +138 -2
  129. package/skills/{tool-fallback → vibe.tool-fallback}/SKILL.md +1 -1
  130. package/skills/vibe.trace/SKILL.md +3 -3
  131. package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/SKILL.md +6 -6
  132. package/skills/{user-personas → vibe.user-personas}/SKILL.md +2 -2
  133. package/skills/vibe.verify/SKILL.md +12 -6
  134. package/skills/{video-production → vibe.video-production}/SKILL.md +1 -1
  135. package/vibe/rules/loop-contract.md +7 -3
  136. package/vibe/templates/spec-template.md +32 -5
  137. package/skills/arch-guard/SKILL.md +0 -183
  138. package/skills/clone/SKILL.md +0 -296
  139. package/skills/contract/SKILL.md +0 -165
  140. package/skills/docs/SKILL.md +0 -259
  141. package/skills/exec-plan/SKILL.md +0 -151
  142. package/skills/figma/SKILL.md +0 -456
  143. package/skills/regress/SKILL.md +0 -184
  144. package/skills/restraint/SKILL.md +0 -72
  145. package/skills/spec/SKILL.md +0 -118
  146. package/skills/test/SKILL.md +0 -140
  147. /package/skills/{agents-md → vibe.agents-md}/rubrics/what-to-keep.md +0 -0
  148. /package/skills/{agents-md → vibe.agents-md}/templates/agents-md.md +0 -0
  149. /package/skills/{agents-md → vibe.agents-md}/templates/claude-md.md +0 -0
  150. /package/skills/{brand-assets → vibe.brand-assets}/rubrics/asset-checklist.md +0 -0
  151. /package/skills/{brand-assets → vibe.brand-assets}/templates/brand-guide.md +0 -0
  152. /package/skills/{capability-loop → vibe.capability-loop}/agents/capability-designer.md +0 -0
  153. /package/skills/{capability-loop → vibe.capability-loop}/agents/failure-analyst.md +0 -0
  154. /package/skills/{capability-loop → vibe.capability-loop}/agents/implementer.md +0 -0
  155. /package/skills/{capability-loop → vibe.capability-loop}/agents/tester.md +0 -0
  156. /package/skills/{capability-loop → vibe.capability-loop}/templates/capability-spec.md +0 -0
  157. /package/skills/{capability-loop → vibe.capability-loop}/templates/failure-analysis.md +0 -0
  158. /package/skills/{clone → vibe.clone}/references/capture-rules.md +0 -0
  159. /package/skills/{clone → vibe.clone}/references/legal-and-error-recovery.md +0 -0
  160. /package/skills/{clone → vibe.clone}/references/refine-rules.md +0 -0
  161. /package/skills/{clone → vibe.clone}/references/scaffold-phases.md +0 -0
  162. /package/skills/{clone → vibe.clone}/references/setup-and-layout.md +0 -0
  163. /package/skills/{commerce-patterns → vibe.commerce-patterns}/rubrics/checkout-flow.md +0 -0
  164. /package/skills/{commerce-patterns → vibe.commerce-patterns}/templates/product-schema.md +0 -0
  165. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/change-analyzer.md +0 -0
  166. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/message-writer.md +0 -0
  167. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/pr-writer.md +0 -0
  168. /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/reviewer.md +0 -0
  169. /package/skills/{commit-push-pr → vibe.commit-push-pr}/rubrics/commit-message.md +0 -0
  170. /package/skills/{commit-push-pr → vibe.commit-push-pr}/templates/pr-body.md +0 -0
  171. /package/skills/{context7-usage → vibe.context7-usage}/rubrics/when-to-use.md +0 -0
  172. /package/skills/{create-prd → vibe.create-prd}/agents/edge-case-finder.md +0 -0
  173. /package/skills/{create-prd → vibe.create-prd}/agents/prioritizer.md +0 -0
  174. /package/skills/{create-prd → vibe.create-prd}/agents/requirements-writer.md +0 -0
  175. /package/skills/{create-prd → vibe.create-prd}/agents/researcher.md +0 -0
  176. /package/skills/{create-prd → vibe.create-prd}/agents/reviewer.md +0 -0
  177. /package/skills/{create-prd → vibe.create-prd}/frameworks/jobs-to-be-done.md +0 -0
  178. /package/skills/{create-prd → vibe.create-prd}/frameworks/rice-scoring.md +0 -0
  179. /package/skills/{create-prd → vibe.create-prd}/orchestrator.md +0 -0
  180. /package/skills/{create-prd → vibe.create-prd}/rubrics/completeness.md +0 -0
  181. /package/skills/{create-prd → vibe.create-prd}/templates/prd.md +0 -0
  182. /package/skills/{design-refine → vibe.design-refine}/rubrics/polish-checklist.md +0 -0
  183. /package/skills/{design-refine → vibe.design-refine}/rubrics/token-naming.md +0 -0
  184. /package/skills/{design-refine → vibe.design-refine}/templates/design-system.md +0 -0
  185. /package/skills/{design-refine → vibe.design-refine}/templates/polish-report.md +0 -0
  186. /package/skills/{design-refine → vibe.design-refine}/templates/token-audit.md +0 -0
  187. /package/skills/{design-review → vibe.design-review}/agents/a11y-auditor.md +0 -0
  188. /package/skills/{design-review → vibe.design-review}/agents/performance-auditor.md +0 -0
  189. /package/skills/{design-review → vibe.design-review}/agents/responsive-auditor.md +0 -0
  190. /package/skills/{design-review → vibe.design-review}/agents/scorer.md +0 -0
  191. /package/skills/{design-review → vibe.design-review}/agents/slop-detector.md +0 -0
  192. /package/skills/{design-review → vibe.design-review}/frameworks/core-web-vitals.md +0 -0
  193. /package/skills/{design-review → vibe.design-review}/frameworks/wcag-checklist.md +0 -0
  194. /package/skills/{design-review → vibe.design-review}/orchestrator.md +0 -0
  195. /package/skills/{design-review → vibe.design-review}/rubrics/ai-slop-patterns.md +0 -0
  196. /package/skills/{design-review → vibe.design-review}/rubrics/scoring.md +0 -0
  197. /package/skills/{design-review → vibe.design-review}/rubrics/ux-heuristics.md +0 -0
  198. /package/skills/{design-review → vibe.design-review}/templates/critique-report.md +0 -0
  199. /package/skills/{design-review → vibe.design-review}/templates/report.md +0 -0
  200. /package/skills/{design-teach → vibe.design-teach}/rubrics/brand-personality.md +0 -0
  201. /package/skills/{design-teach → vibe.design-teach}/templates/design-context.json +0 -0
  202. /package/skills/{docs → vibe.docs}/references/api-docs-changelog.md +0 -0
  203. /package/skills/{docs → vibe.docs}/references/codemaps-output.md +0 -0
  204. /package/skills/{docs → vibe.docs}/references/diagram-spec.md +0 -0
  205. /package/skills/{docs → vibe.docs}/templates/architecture.md +0 -0
  206. /package/skills/{docs → vibe.docs}/templates/behavioral-principles.md +0 -0
  207. /package/skills/{docs → vibe.docs}/templates/readme.md +0 -0
  208. /package/skills/{docs → vibe.docs}/templates/release-notes.md +0 -0
  209. /package/skills/{e2e-commerce → vibe.e2e-commerce}/templates/test-scenarios.md +0 -0
  210. /package/skills/{event-comms → vibe.event-comms}/templates/email-invite.md +0 -0
  211. /package/skills/{event-comms → vibe.event-comms}/templates/sns-post.md +0 -0
  212. /package/skills/{event-ops → vibe.event-ops}/rubrics/contingency.md +0 -0
  213. /package/skills/{event-ops → vibe.event-ops}/templates/d-day-checklist.md +0 -0
  214. /package/skills/{event-planning → vibe.event-planning}/rubrics/timeline.md +0 -0
  215. /package/skills/{event-planning → vibe.event-planning}/templates/event-plan.md +0 -0
  216. /package/skills/{figma → vibe.figma}/rubrics/conversion-rules.md +0 -0
  217. /package/skills/{figma → vibe.figma}/rubrics/css-mapping.md +0 -0
  218. /package/skills/{figma → vibe.figma}/rubrics/extraction-checklist.md +0 -0
  219. /package/skills/{figma → vibe.figma}/rubrics/image-rules.md +0 -0
  220. /package/skills/{figma → vibe.figma}/templates/component-index.md +0 -0
  221. /package/skills/{figma → vibe.figma}/templates/component-spec.md +0 -0
  222. /package/skills/{figma → vibe.figma}/templates/component.md +0 -0
  223. /package/skills/{figma → vibe.figma}/templates/figma-handoff.md +0 -0
  224. /package/skills/{figma → vibe.figma}/templates/remapped-tree.md +0 -0
  225. /package/skills/{git-worktree → vibe.git-worktree}/rubrics/when-to-use.md +0 -0
  226. /package/skills/{handoff → vibe.handoff}/agents/context-summarizer.md +0 -0
  227. /package/skills/{handoff → vibe.handoff}/agents/document-writer.md +0 -0
  228. /package/skills/{handoff → vibe.handoff}/agents/state-collector.md +0 -0
  229. /package/skills/{handoff → vibe.handoff}/agents/verifier.md +0 -0
  230. /package/skills/{handoff → vibe.handoff}/rubrics/completeness.md +0 -0
  231. /package/skills/{handoff → vibe.handoff}/templates/handoff.md +0 -0
  232. /package/skills/{parallel-research → vibe.parallel-research}/agents/best-practices.md +0 -0
  233. /package/skills/{parallel-research → vibe.parallel-research}/agents/codebase-patterns.md +0 -0
  234. /package/skills/{parallel-research → vibe.parallel-research}/agents/framework-docs.md +0 -0
  235. /package/skills/{parallel-research → vibe.parallel-research}/agents/security-advisory.md +0 -0
  236. /package/skills/{parallel-research → vibe.parallel-research}/agents/synthesizer.md +0 -0
  237. /package/skills/{parallel-research → vibe.parallel-research}/experts/best-practices.md +0 -0
  238. /package/skills/{parallel-research → vibe.parallel-research}/experts/codebase-patterns.md +0 -0
  239. /package/skills/{parallel-research → vibe.parallel-research}/experts/framework-docs.md +0 -0
  240. /package/skills/{parallel-research → vibe.parallel-research}/experts/security-advisory.md +0 -0
  241. /package/skills/{parallel-research → vibe.parallel-research}/orchestrator.md +0 -0
  242. /package/skills/{parallel-research → vibe.parallel-research}/templates/awesome-list.md +0 -0
  243. /package/skills/{parallel-research → vibe.parallel-research}/templates/paper.md +0 -0
  244. /package/skills/{parallel-research → vibe.parallel-research}/templates/synthesis.md +0 -0
  245. /package/skills/{presentation → vibe.presentation}/references/style-presets.md +0 -0
  246. /package/skills/{prioritization-frameworks → vibe.prioritization}/rubrics/frameworks.md +0 -0
  247. /package/skills/{prioritization-frameworks → vibe.prioritization}/templates/scoring-matrix.md +0 -0
  248. /package/skills/{priority-todos → vibe.priority-todos}/rubrics/prioritization.md +0 -0
  249. /package/skills/{priority-todos → vibe.priority-todos}/templates/todo-board.md +0 -0
  250. /package/skills/{vercel-react-best-practices → vibe.react-best-practices}/rubrics/performance.md +0 -0
  251. /package/skills/{vercel-react-best-practices → vibe.react-best-practices}/rubrics/server-components.md +0 -0
  252. /package/skills/{regress → vibe.regress}/templates/bug.md +0 -0
  253. /package/skills/{regress → vibe.regress}/templates/test-jest.md +0 -0
  254. /package/skills/{regress → vibe.regress}/templates/test-vitest.md +0 -0
  255. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/detector.md +0 -0
  256. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/reporter.md +0 -0
  257. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/rule-generator.md +0 -0
  258. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/violation-checker.md +0 -0
  259. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/frameworks/clean-architecture.md +0 -0
  260. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/frameworks/solid.md +0 -0
  261. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/scripts/check-boundaries.js +0 -0
  262. /package/skills/{arch-guard → vibe.run/internal/arch-guard}/templates/arch-rules.json +0 -0
  263. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/decomposer.md +0 -0
  264. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/dependency-mapper.md +0 -0
  265. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/estimator.md +0 -0
  266. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/validator.md +0 -0
  267. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/orchestrator.md +0 -0
  268. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/rubrics/complexity-scoring.md +0 -0
  269. /package/skills/{exec-plan → vibe.run/internal/exec-plan}/templates/plan.md +0 -0
  270. /package/skills/{seo-checklist → vibe.seo-checklist}/frameworks/structured-data.md +0 -0
  271. /package/skills/{seo-checklist → vibe.seo-checklist}/rubrics/content-seo.md +0 -0
  272. /package/skills/{seo-checklist → vibe.seo-checklist}/rubrics/technical-seo.md +0 -0
  273. /package/skills/{tool-fallback → vibe.tool-fallback}/rubrics/fallback-chain.md +0 -0
  274. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/color-and-contrast.md +0 -0
  275. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/interaction-design.md +0 -0
  276. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/motion-design.md +0 -0
  277. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/responsive-design.md +0 -0
  278. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/spatial-design.md +0 -0
  279. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/typography.md +0 -0
  280. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/ux-writing.md +0 -0
  281. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/rubrics/interaction-states.md +0 -0
  282. /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/rubrics/responsive-breakpoints.md +0 -0
  283. /package/skills/{user-personas → vibe.user-personas}/rubrics/research-methods.md +0 -0
  284. /package/skills/{user-personas → vibe.user-personas}/templates/persona.md +0 -0
  285. /package/skills/{video-production → vibe.video-production}/rubrics/quality-checklist.md +0 -0
  286. /package/skills/{video-production → vibe.video-production}/templates/production-plan.md +0 -0
@@ -26,7 +26,7 @@ user-invocable: true
26
26
 
27
27
  Input 분석 + Smart Resume
28
28
 
29
- Load skill `spec` — 단일 패스: 컨텍스트 수집 → (필요시) 인라인 질문 → SPEC + Feature 작성 → 셀프 리뷰 1회
29
+ Execute the bundled implementation below — 단일 패스: 컨텍스트 수집 → (필요시) 인라인 질문 → SPEC + Feature 작성 → 셀프 리뷰 1회
30
30
 
31
31
  SPEC 승인 (1회 — automationLevel: autonomous 면 생략)
32
32
 
@@ -80,3 +80,124 @@ trace(`/vibe.trace`)·contract(`/vibe.contract`) 는 사용자가 요청하거
80
80
  ---
81
81
 
82
82
  ARGUMENTS: $ARGUMENTS
83
+
84
+ ## Bundled implementation
85
+
86
+
87
+ # spec — Single-Pass SPEC
88
+
89
+ 자연어 요구사항 하나를 받아 **한 번의 패스로** 실행 가능한 SPEC을 만든다. 별도의 interview → plan → review 단계는 없다 — 질문이 필요하면 이 패스 안에서 인라인으로 묻고, 리뷰는 셀프 리뷰 1회로 끝낸다. 완성된 SPEC의 승인이 loop-contract 가 정의하는 **유일한 의무적 사람 개입 지점**이다.
90
+
91
+ > 루프 시맨틱 SSOT: `vibe/rules/loop-contract.md`. SPEC = ANCHOR 아티팩트, Done Criteria = JUDGE 게이트.
92
+
93
+ ## Input
94
+
95
+ | 입력 | 처리 |
96
+ |---|---|
97
+ | 자연어 요구사항 | 그대로 SPEC 패스의 주 입력 |
98
+ | 📎 첨부 (md/txt/pdf/이미지 등) | Read 도구로 분석 후 요구사항에 병합 |
99
+ | 파일 경로 인자 (PRD 등) | 존재 확인 후 Read — 첨부와 동일 취급 |
100
+ | **레거시 아티팩트** `.vibe/interviews/{feature}.md`, `.vibe/plans/{feature}.md` | 존재하면 **입력 컨텍스트로만** 읽는다. 절대 요구하거나 재생성하지 않는다 — 없어도 정상 경로 |
101
+
102
+ ## Process
103
+
104
+ ### 1. Git branch + pointer
105
+
106
+ - `git branch --show-current` — `main`/`master` 이면 `git checkout -b feature/{feature-name}` (소문자·하이픈). feature 브랜치면 그대로 진행.
107
+ - feature 이름 확정 즉시 `.vibe/.last-feature` 에 이름 한 줄 기록 (값이 같으면 no-op).
108
+
109
+ ### 2. Project context
110
+
111
+ - `.vibe/config.json` 읽기 — `references.languages[]` 의 스택 가이드, `stacks` 확인.
112
+ - 기존 코드 파악이 필요하면 네이티브 Explore 서브에이전트에 위임 (main session 에서 프로젝트 파일을 훑지 않는다):
113
+
114
+ ```text
115
+ Task(subagent_type="Explore",
116
+ prompt="Find existing implementations related to [FEATURE]. Return: tech stack, relevant files, patterns. Under 200 tokens.")
117
+ ```
118
+
119
+ ### 3. Clarify — 진짜 모호할 때만
120
+
121
+ 별도 인터뷰 단계가 아니다. 요구사항·첨부·레거시 아티팩트·코드베이스 컨텍스트로 답을 합리적으로 정할 수 있으면 **묻지 않는다**. 다음 조건을 모두 만족할 때만 질문한다:
122
+
123
+ - 답에 따라 Done Criteria 나 구현 방향이 실제로 갈라진다 (인증 방식, 데이터 모델의 필수 필드, 외부 연동 여부 등)
124
+ - 합리적 기본값을 SPEC 의 Assumptions 로 명시하는 것으로 대체할 수 없다
125
+
126
+ 질문할 때는 **한 번에 묶어서** (번호 목록, 최대 5개), 각 질문에 제안 기본값을 붙인다. `automationLevel: autonomous` 면 질문 없이 기본값을 채택하고 전부 SPEC 의 Assumptions 섹션에 기록한다.
127
+
128
+ 사소한 값(타임아웃, 페이지 크기, 재시도 횟수 등)은 묻지 말고 상식적 기본값을 채택 + Assumptions 에 기록.
129
+
130
+ ### 4. Write SPEC — one pass
131
+
132
+ `vibe/templates/spec-template.md` 구조로 `.vibe/specs/{feature-name}.md` 를 작성한다. 핵심 요건:
133
+
134
+ - **Overview / Goal** — 무엇을, 왜. 1-3 문장.
135
+ - **Context Sources** — 입력으로 사용한 파일·문서·URL·관측 상태. 출처 없는 추정은 Assumptions 로 분리.
136
+ - **Requirements** — `REQ-{feature}-NNN` ID와 연결된 Done Criteria를 표로 명시.
137
+ - **Done Criteria** — 결정론적 게이트만. 각 항목은 "명령/관찰로 pass·fail 판정 가능"해야 한다 (테스트 exit code, 빌드 성공, 특정 동작 관찰). "잘 동작한다" 류 서술 금지 — 이것이 루프의 JUDGE 입력이 된다.
138
+ - **Evidence Required** — Done 을 증명할 명령 결과·테스트 리포트·로그·스크린샷·코드 위치.
139
+ - **Human Taste (Non-Blocking)** — UX·브랜드·제품 감각처럼 release 시 사람이 판단할 기준. 완료 게이트로 쓰지 않는다.
140
+ - **Scenarios** — Given-When-Then. Happy path + 주요 edge case. 각 시나리오는 Done Criteria 중 하나에 매핑.
141
+ - **Out of Scope** — 이번에 하지 않는 것을 명시 (비어 있으면 스코프 팽창 신호).
142
+ - **Assumptions** — 3단계에서 채택한 기본값 전부.
143
+ - **Constraints** — 구현·보안·호환성 경계. execution packet으로 압축돼도 반드시 보존한다.
144
+ - **API Contract** (해당 시에만) — 엔드포인트/요청/응답 형태. 이 섹션이 있으면 이후 `/vibe.contract` 가 drift 를 검사한다.
145
+
146
+ 이어서 `.vibe/features/{feature-name}.feature` 를 생성한다: 시나리오 섹션을 gherkin 으로 변환 (Done Criteria ↔ Scenario 매핑 유지). `/vibe.run` 이 이 파일을 구현·검증 단위로 사용한다.
147
+
148
+ **Large scope** (5+ phases 또는 15+ 신규 파일 또는 4+ 독립 기능): 폴더 분할 — `.vibe/specs/{feature}/_index.md` + `phase-N-{name}.md`, feature 파일도 동일 구조로 매칭. 조용히 분할하고 결과만 보고한다.
149
+
150
+ **파일 규칙**: `.vibe/` 밖에 파일을 만들지 않는다. SPEC 파일마다 매칭되는 Feature 파일이 있어야 한다.
151
+
152
+ ### 5. Self-review — once
153
+
154
+ 작성 직후, 아래 체크리스트로 자기 SPEC 을 **1회** 점검하고 걸리는 항목을 즉시 고친다. 외부 LLM 리뷰 없음, 수렴 루프 없음 — 한 번 고치면 끝.
155
+
156
+ - [ ] 모든 Done Criteria 가 명령/관찰로 판정 가능한가 (모델 자기 보고가 아닌)
157
+ - [ ] Context Sources 와 Assumptions 가 분리됐고, 각 Done Criteria 의 Evidence Required 가 있는가
158
+ - [ ] Human Taste 가 결정론적 완료 게이트에 섞이지 않았는가
159
+ - [ ] 모든 시나리오가 Done Criteria 에 매핑되는가 (고아 시나리오 없음)
160
+ - [ ] 수치가 필요한 곳에 수치가 있는가 (제한·타임아웃·크기 — 없으면 기본값 + Assumptions)
161
+ - [ ] Out of Scope 가 비어 있지 않은가
162
+ - [ ] 요구사항에 있던 것 중 SPEC 에서 빠진 것이 없는가
163
+
164
+ ### 6. Approval — the single gate
165
+
166
+ SPEC 요약(Goal, Done Criteria, 시나리오 수, Out of Scope, 열린 Assumptions)을 제시하고 승인을 받는다:
167
+
168
+ ```
169
+ 📋 SPEC 준비 완료: {feature-name}
170
+ .vibe/specs/{feature-name}.md · .vibe/features/{feature-name}.feature
171
+
172
+ Goal: {1줄}
173
+ Done Criteria: {N}개 (전부 결정론 게이트)
174
+ Scenarios: {M}개 · Out of Scope: {K}항목
175
+ Assumptions: {요약 또는 "없음"}
176
+
177
+ 승인하면 이 SPEC 이 루프의 Done 정의가 됩니다.
178
+ [1] 승인 → 구현 진행 [2] 수정 요청 [3] 중단
179
+ ```
180
+
181
+ - 수정 요청 → 반영 후 재제시 (사용자 주도 반복 — 자동 루프 아님).
182
+ - `automationLevel: autonomous` → 승인 생략, 요약만 출력하고 진행.
183
+ - 승인 후 SPEC 변경은 코드 변경과 같은 커밋으로 (SPEC-First — `vibe.run` 참조).
184
+
185
+ ## Output
186
+
187
+ | 파일 | 경로 |
188
+ |---|---|
189
+ | SPEC | `.vibe/specs/{feature-name}.md` (또는 분할 폴더) |
190
+ | Feature (BDD) | `.vibe/features/{feature-name}.feature` (또는 분할 폴더) |
191
+ | Pointer | `.vibe/.last-feature` |
192
+
193
+ 승인된 SPEC 은 루프의 ANCHOR 로 쓰인다: `/vibe.run` 이 시나리오 단위로 구현·검증하고, `/vibe.verify` 가 Done Criteria 를 판정해 `.vibe/metrics/run-ledger.json` 의 `verifyPassed` 를 기록한다. 게이트 통과 여부는 항상 run-ledger·테스트 exit code 가 판정한다.
194
+
195
+ ## Next Step
196
+
197
+ ```
198
+ /vibe.run "{feature-name}"
199
+ ```
200
+
201
+ ---
202
+
203
+ ARGUMENTS: $ARGUMENTS
@@ -32,12 +32,12 @@ Markdown summary is also printed to the console when the run finishes.
32
32
 
33
33
  ## Process
34
34
 
35
- Load skill `test` with target harness: `$ARGUMENTS`
35
+ Execute the bundled implementation below with target harness: `$ARGUMENTS`
36
36
 
37
37
  - If `$ARGUMENTS` is empty, detect the current harness (CC vs Codex) and use that.
38
38
  - If the target install dir is missing, exit cleanly with guidance (not an error).
39
39
 
40
- See `skills/test/SKILL.md` for the probe spec and the report template.
40
+ See `skills/vibe.test/SKILL.md` for the probe spec and the report template.
41
41
 
42
42
  ## Done Criteria
43
43
 
@@ -49,3 +49,139 @@ See `skills/test/SKILL.md` for the probe spec and the report template.
49
49
  ---
50
50
 
51
51
  ARGUMENTS: $ARGUMENTS
52
+
53
+ ## Bundled implementation
54
+
55
+
56
+ # test — Self-Test
57
+
58
+ Probe every shipped vibe surface in one install dir and emit a pass/fail report.
59
+
60
+ ## Why this exists
61
+
62
+ When vibe ships new entry skills, skills, hooks, or agents, one side (CC or Codex) can end up out of sync with the other, frontmatter can drift, and hook tests can silently break. `vibe.test` is the single mechanical check: does every surface in the target install actually load and pass its own tests?
63
+
64
+ ## Target harness
65
+
66
+ The argument selects which install dir to probe:
67
+
68
+ | Arg | Probed dir |
69
+ |---|---|
70
+ | (empty) | current harness — CC: `~/.claude/`, Codex: `~/.codex/` |
71
+ | `cc` | `~/.claude/` |
72
+ | `codex` | `~/.codex/` |
73
+
74
+ If the target dir does not exist, print a clear message and exit with guidance (not an error). Example:
75
+
76
+ ```
77
+ ~/.codex/ not found — Codex isn't installed on this machine.
78
+ To install: npm i -g @openai/codex
79
+ ```
80
+
81
+ ## Probes
82
+
83
+ All probes are **structural or test-based** — no interactive command is ever actually invoked, and no LLM is called.
84
+
85
+ | Category | Source | Check |
86
+ |---|---|---|
87
+ | entry skills | `<install>/skills/vibe*/SKILL.md` | file readable · frontmatter parses · `name`, `description`, `user-invocable: true` present |
88
+ | skills | `<install>/skills/*/SKILL.md` | frontmatter parses · required fields (`name`, `description`) · body non-empty |
89
+ | hooks | repo `hooks/scripts/*.js` | for each script with a matching `__tests__/<name>.test.js`, run `npx vitest run <test> --reporter=json` and parse pass/fail counts |
90
+ | agents | `<install>/agents/*.md` | file readable · frontmatter parses · required fields (`name`, `description`) |
91
+
92
+ A probe's failure is captured in its `error` field; the overall run never halts because of one failure.
93
+
94
+ ## Report template
95
+
96
+ Written to `~/.vibe/test-reports/<YYYYMMDD-HHmm>-<harness>.{json,md}`. Exact schema:
97
+
98
+ ### JSON
99
+
100
+ ```json
101
+ {
102
+ "harness": "cc",
103
+ "timestamp": "2026-04-16T18:30:00+09:00",
104
+ "vibe_version": "2.9.24",
105
+ "install_dir": "/Users/grove/.claude",
106
+ "summary": {
107
+ "total": 42,
108
+ "passed": 40,
109
+ "failed": 2
110
+ },
111
+ "probes": {
112
+ "entrySkills": [
113
+ { "name": "vibe.spec", "status": "pass" },
114
+ { "name": "vibe.test", "status": "pass" }
115
+ ],
116
+ "skills": [
117
+ { "name": "test", "status": "pass" },
118
+ { "name": "spec", "status": "fail", "error": "invocation includes `auto` but triggers array is empty" }
119
+ ],
120
+ "hooks": [
121
+ { "name": "pre-tool-guard", "status": "pass", "tests": "38/38" },
122
+ { "name": "scope-guard", "status": "pass", "tests": "12/12" }
123
+ ],
124
+ "agents": [
125
+ { "name": "implementer", "status": "pass" }
126
+ ]
127
+ },
128
+ "failed": [
129
+ {
130
+ "category": "skills",
131
+ "name": "spec",
132
+ "error": "frontmatter: triggers array is empty"
133
+ }
134
+ ]
135
+ }
136
+ ```
137
+
138
+ - `status`: `"pass"` | `"fail"`
139
+ - `error`: required when `status === "fail"`, omitted otherwise
140
+ - `tests` (hooks only): short `passed/total` string from the vitest JSON reporter
141
+ - `failed[]`: flat list of every failure for quick scanning — mirrors entries found across `probes.*`
142
+
143
+ ### Markdown
144
+
145
+ ```markdown
146
+ # vibe self-test · cc · 2026-04-16 18:30
147
+
148
+ **Version**: 2.9.24 **Install**: /Users/grove/.claude
149
+
150
+ | Category | Pass | Fail |
151
+ |---|---:|---:|
152
+ | entry skills | 15 | 0 |
153
+ | skills | 17 | 1 |
154
+ | hooks | 6 | 0 |
155
+ | agents | 3 | 1 |
156
+ | **total**| **41** | **2** |
157
+
158
+ ## Failures
159
+
160
+ - **skills / spec** — invocation includes `auto` but triggers array is empty
161
+ - **agents / implementer** — agent file not found
162
+ ```
163
+
164
+ If `failed` is empty, replace the Failures section with `_All probes passed._`.
165
+
166
+ ## Steps
167
+
168
+ 1. **Resolve target**: argument (`cc` / `codex` / empty). Empty → detect current harness (`$CLAUDE_PROJECT_DIR` set → `cc`; else fall back to `cc`).
169
+ 2. **Resolve install dir**: `cc` → `~/.claude`, `codex` → `~/.codex`. If missing → print guidance + exit.
170
+ 3. **Read `vibe_version`** from `package.json` in the current repo.
171
+ 4. **Walk each category**, run its check, append `{ name, status, error? }` to `probes.<category>`.
172
+ 5. **Compute** `summary` counts and the flat `failed[]` list.
173
+ 6. **Ensure** `~/.vibe/test-reports/` exists (`mkdir -p`, dir mode `0o700` — consistent with `~/.vibe/config.json`).
174
+ 7. **Write** `<ts>-<harness>.json` and `<ts>-<harness>.md`.
175
+ 8. **Print** the Markdown summary to the console.
176
+ 9. **If `summary.failed > 0`**, load skill `vibe.regress` with `subcommand: register --from-test` and pass the failed entries. P1 = any probe with `status: fail`.
177
+
178
+ ## Done Criteria
179
+
180
+ - [ ] No external LLM call — file reads + vitest runs only
181
+ - [ ] One probe failing never halts the overall run
182
+ - [ ] Target install dir missing → clean exit with guidance (not an error)
183
+ - [ ] JSON report matches the template above exactly (fields, types, naming)
184
+ - [ ] Markdown summary printed to console after the run
185
+ - [ ] Reports land in `~/.vibe/test-reports/`, never in project-local `.vibe/`
186
+ - [ ] `failed.length > 0` → auto-invokes `vibe.regress register --from-test`
187
+ - [ ] Entry skills are verified as user-invocable skill surfaces, not deprecated command files
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: tool-fallback
2
+ name: vibe.tool-fallback
3
3
  invocation: [auto]
4
4
  tier: optional
5
5
  description: "Tool failure fallback strategies with circuit breaker. Auto-activates on API errors, search failures, timeouts, 429, 5xx, overloaded errors."
@@ -213,18 +213,18 @@ RTM status === 'empty'
213
213
 
214
214
  ### Run-ledger flow
215
215
 
216
- `/vibe.verify` records its outcome via `hooks/scripts/verify-ledger.js pass|fail`. This writes `verifyPassed` and `verifyAt` into `.vibe/metrics/run-ledger.json`. Downstream gates consume this record:
216
+ `/vibe.verify` records its outcome through `hooks/scripts/verify-ledger.js`, binding the current run ID and command-result evidence. This writes `verifyPassed` and `verifyAt` into `.vibe/metrics/run-ledger.json`. Downstream gates consume this record:
217
217
 
218
218
  | Gate | Behavior |
219
219
  |------|----------|
220
220
  | `auto-commit` | Commits only when `verifyPassed === true` AND `verifyAt > runStarted` |
221
221
  | Stop hook | Warns when `runStarted && !verifyPassed`; blocks once if `verifyGate.mode === 'block'` |
222
222
 
223
- **To register a passing trace as verified**, run `/vibe.verify` after `/vibe.trace` reports acceptable coverage. The verify skill calls `verify-ledger.js pass` internally — you do not invoke it manually.
223
+ **To register a passing trace as verified**, run `/vibe.verify` after `/vibe.trace` reports acceptable coverage. The verify skill records the current run ID and command evidence internally — you do not invoke the ledger CLI manually.
224
224
 
225
225
  ```
226
226
  /vibe.trace "login" → RTM: 9/9 (100%)
227
- /vibe.verify "login" → runs checks → calls verify-ledger.js pass
227
+ /vibe.verify "login" → runs checks → records pass + run ID + command results
228
228
  → .vibe/metrics/run-ledger.json updated
229
229
  auto-commit / Stop gate → verifyPassed=true, gate clears
230
230
  ```
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: ui-ux-pro-max
2
+ name: vibe.ui-ux-pro-max
3
3
  user-invocable: true
4
4
  invocation: [command]
5
5
  tier: standard
@@ -94,21 +94,21 @@ Extract from user request: **product type**, **style keywords**, **industry**, *
94
94
  ### Step 2: Generate Design System (REQUIRED)
95
95
 
96
96
  ```bash
97
- python3 skills/ui-ux-pro-max/scripts/search.py "<product_type> <industry> <keywords>" --design-system [-p "Project Name"]
97
+ python3 skills/vibe.ui-ux-pro-max/scripts/search.py "<product_type> <industry> <keywords>" --design-system [-p "Project Name"]
98
98
  ```
99
99
 
100
100
  This searches 5 domains in parallel (product, style, color, landing, typography), applies reasoning rules, and returns complete design system.
101
101
 
102
102
  **Persist for cross-session use:**
103
103
  ```bash
104
- python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name"
104
+ python3 skills/vibe.ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name"
105
105
  ```
106
106
 
107
107
  Creates `design-system/MASTER.md` (global) + optional `design-system/pages/<page>.md` (overrides).
108
108
 
109
109
  **With page-specific override:**
110
110
  ```bash
111
- python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Name" --page "dashboard"
111
+ python3 skills/vibe.ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Name" --page "dashboard"
112
112
  ```
113
113
 
114
114
  **Hierarchical retrieval**: Page file overrides Master. No page file → Master exclusively.
@@ -116,7 +116,7 @@ python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persi
116
116
  ### Step 3: Detailed Searches (as needed)
117
117
 
118
118
  ```bash
119
- python3 skills/ui-ux-pro-max/scripts/search.py "<keyword>" --domain <domain> [-n <max_results>]
119
+ python3 skills/vibe.ui-ux-pro-max/scripts/search.py "<keyword>" --domain <domain> [-n <max_results>]
120
120
  ```
121
121
 
122
122
  Domains: `product`, `style`, `typography`, `color`, `landing`, `chart`, `ux`, `react`, `web`, `prompt`
@@ -124,7 +124,7 @@ Domains: `product`, `style`, `typography`, `color`, `landing`, `chart`, `ux`, `r
124
124
  ### Step 4: Stack Guidelines (default: html-tailwind)
125
125
 
126
126
  ```bash
127
- python3 skills/ui-ux-pro-max/scripts/search.py "<keyword>" --stack html-tailwind
127
+ python3 skills/vibe.ui-ux-pro-max/scripts/search.py "<keyword>" --stack html-tailwind
128
128
  ```
129
129
 
130
130
  Stacks: `html-tailwind`, `react`, `nextjs`, `vue`, `svelte`, `swiftui`, `react-native`, `flutter`, `shadcn`, `jetpack-compose`
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: user-personas
2
+ name: vibe.user-personas
3
3
  invocation: [auto, chain]
4
4
  tier: standard
5
5
  description: "Create refined user personas from research data — 3 personas with JTBD, pains, gains, and unexpected insights."
6
6
  triggers: [persona, user persona, user profile, user segment, user research]
7
7
  priority: 50
8
- chain-next: [create-prd, prioritization-frameworks]
8
+ chain-next: [vibe.create-prd, vibe.prioritization]
9
9
  ---
10
10
 
11
11
  # User Personas
@@ -82,7 +82,7 @@ One row per Done criterion: pass/fail + an evidence pointer (file:line, test nam
82
82
  Before printing the failure summary, register each failed scenario as a regression bug so the same failure cannot silently slip through again:
83
83
 
84
84
  ```
85
- Load skill `regress` with:
85
+ Load skill `vibe.regress` with:
86
86
  subcommand: register --from-verify
87
87
  feature: {feature} scenario: {scenario}
88
88
  error: {error-summary} location: {file:line}
@@ -95,7 +95,7 @@ Load skill `regress` with:
95
95
  After all criteria pass, if `.vibe/contracts/{feature}.md` exists:
96
96
 
97
97
  ```
98
- Load skill `contract` with: check "{feature}"
98
+ Load skill `vibe.contract` with: check "{feature}"
99
99
  ```
100
100
 
101
101
  - No drift → verify still passes
@@ -104,7 +104,7 @@ Load skill `contract` with: check "{feature}"
104
104
 
105
105
  ### 7. Metrics + Ledger update (MANDATORY final step)
106
106
 
107
- Record run metrics, then write the verify result to the run ledger. This is the machine-readable JUDGE record consumed by the Stop-hook verify gate, auto-commit verify gate, and loop-contract gates.
107
+ Record run metrics, then write the verify result to the run ledger. This is the machine-readable deterministic JUDGE record consumed by the Stop-hook verify gate, auto-commit verify gate, and loop-contract gates. `recordVerify` also writes `.vibe/runs/{run-id}/evidence.json`; Model Judge findings remain advisory-only and Human Taste remains release-only.
108
108
 
109
109
  ```bash
110
110
  # Append step-count history (ok if current-run.json missing)
@@ -113,15 +113,21 @@ const fs=require('fs'),p='.vibe/metrics';
113
113
  try{const c=JSON.parse(fs.readFileSync(p+'/current-run.json','utf-8'));
114
114
  fs.appendFileSync(p+'/history.jsonl',JSON.stringify({verifiedAt:new Date().toISOString(),feature:c.feature,startedAt:c.startedAt,steps:c.steps||0})+'\n');}catch{}"
115
115
 
116
- # Record verify result pass | fail (calls recordVerify on the run ledger)
116
+ # Write the exact commands run in steps 2-3 and their exit codes.
117
+ mkdir -p .vibe/metrics
118
+ # Write `.vibe/metrics/verification-results.json` as:
119
+ # [{"command":"npm test","exitCode":0}, ...]
120
+
121
+ # Bind the result to the current run and its command evidence.
117
122
  HOOKS_DIR="${VIBE_PATH:-$(npm root -g 2>/dev/null)/@su-record/vibe}/hooks/scripts"
118
- [ -f "$HOOKS_DIR/verify-ledger.js" ] && node "$HOOKS_DIR/verify-ledger.js" pass # or: fail
123
+ RUN_ID=$(node -p "JSON.parse(require('fs').readFileSync('.vibe/metrics/run-ledger.json','utf8')).runId")
124
+ [ -f "$HOOKS_DIR/verify-ledger.js" ] && node "$HOOKS_DIR/verify-ledger.js" pass "$RUN_ID" .vibe/metrics/verification-results.json # or: fail
119
125
 
120
126
  # Recipe extraction (best-effort, silent)
121
127
  [ -f "$HOOKS_DIR/recipe-extractor.js" ] && node "$HOOKS_DIR/recipe-extractor.js" 2>/dev/null || true
122
128
  ```
123
129
 
124
- Use `pass` only when the summary in step 4 is PASS; otherwise `fail`. Skipping this step leaves `verifyPassed` unset and downstream gates will treat the run as unverified.
130
+ Use `pass` only when the summary in step 4 is PASS; otherwise `fail`. A passing record requires at least one command result and every exit code must be zero. A stale run ID, missing evidence, or mismatched result leaves `verifyPassed` unset and downstream gates treat the run as unverified.
125
131
 
126
132
  ## Failure escalation (convergence-based, no retry cap)
127
133
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: video-production
2
+ name: vibe.video-production
3
3
  invocation: [auto]
4
4
  tier: standard
5
5
  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'."
@@ -17,15 +17,19 @@
17
17
  → 루프:
18
18
  ANCHOR 디스크에서 재고정: SPEC + run-ledger + scope.json (+ 직전 인박스)
19
19
  ACT 파이프라인 실행 (스킬 체인)
20
- JUDGE 결정론 판정만 인정: run-ledger verifyPassed │ 테스트 exit code │ RTM status
21
- 모델의 "완료했습니다" 자기 보고는 종료 조건이 될 수 없다
22
- RECORD run-ledger(현재 회전) + loop-history.jsonl(회전 이력, 스케줄 루프)
20
+ JUDGE Deterministic Judge(blocking): run-ledger verifyPassed │ 테스트 exit code │ RTM status
21
+ Model Judge(advisory-only): 발견을 제안하지만 완료 권한 없음
22
+ Human Taste(release-only): UX·브랜드·제품 감각을 판단하지만 루프 완료 권한 없음
23
+ RECORD run-ledger + `.vibe/runs/{run-id}/evidence.json` + loop-history.jsonl
23
24
  → 종료(EXIT): 게이트 전부 통과 │ stuck │ max_iterations │ 예산 상한
24
25
  ```
25
26
 
26
27
  ### ANCHOR가 컨텍스트 오염 방어인 이유
27
28
  루프 상태는 컨텍스트가 아니라 디스크에 산다. 매 회전이 아티팩트에서 다시 시작하므로 컨텍스트가 오염되거나 compact로 소실돼도 루프는 깨지지 않으며, 회전마다 fresh 컨텍스트(서브에이전트)로 돌려도 된다.
28
29
 
30
+ ### Judge 권한 경계
31
+ 종료 권한은 테스트 exit code·run-ledger·RTM 같은 **결정론적 Judge**에만 있다. Model Judge는 누락·모순·위험을 발견하는 보조 수단이며, 발견을 테스트나 관측 가능한 기준으로 내리기 전에는 차단 근거가 아니다. Human Taste는 공개·배포 시점의 사람 판단으로 남고 루프의 완료 상태를 변경하지 않는다.
32
+
29
33
  ### stuck (결정론)
30
34
  연속 2회 회전의 발견(discover/findings) 해시가 동일 → 중단하고 사람에게 (`loop-ledger.js check-stuck`이 판정·기록). "다시 해보면 될 것 같다"는 모델 판단으로 무시 금지.
31
35
 
@@ -10,13 +10,29 @@
10
10
 
11
11
  {What and why — 1-3 sentences.}
12
12
 
13
+ ### Context Sources
14
+
15
+ - {File, document, URL, or observed system state used as input}
16
+
13
17
  ### Assumptions
14
18
 
15
19
  - {Default adopted without asking — e.g., session expiry 24h}
16
20
 
21
+ ### Constraints
22
+
23
+ - {Invariant or implementation boundary that every execution packet must preserve}
24
+
25
+ ---
26
+
27
+ ## 2. Requirements
28
+
29
+ | ID | Requirement | Done Criteria |
30
+ |----|-------------|---------------|
31
+ | REQ-{feature}-001 | {Observable functional requirement} | D1, D2 |
32
+
17
33
  ---
18
34
 
19
- ## 2. Done Criteria (deterministic gates)
35
+ ## 3. Done Criteria (deterministic gates)
20
36
 
21
37
  > Each criterion must be judgeable by a command or observable behavior — never by self-report.
22
38
  > These are the JUDGE inputs of the loop (`vibe/rules/loop-contract.md`); `/vibe.verify` records the result in `.vibe/metrics/run-ledger.json`.
@@ -26,9 +42,18 @@
26
42
  | D1 | {e.g., all scenarios in the feature file pass} | {e.g., `npx vitest run` exit 0} |
27
43
  | D2 | {e.g., build succeeds with no type errors} | {e.g., `npm run build` exit 0} |
28
44
 
45
+ ### Evidence Required
46
+
47
+ - D1 → {Command result, test report, log, screenshot, or verified code location}
48
+ - D2 → {Evidence required for this specific criterion}
49
+
50
+ ### Human Taste (Non-Blocking)
51
+
52
+ - {UX, brand, or product-quality review reserved for the release decision; never a loop completion gate}
53
+
29
54
  ---
30
55
 
31
- ## 3. Scenarios
56
+ ## 4. Scenarios
32
57
 
33
58
  > Mirrored to `.vibe/features/{feature}.feature` (gherkin). Every scenario maps to a Done criterion.
34
59
 
@@ -46,13 +71,13 @@ Scenario: {Edge case title} # → D1
46
71
 
47
72
  ---
48
73
 
49
- ## 4. Out of Scope
74
+ ## 5. Out of Scope
50
75
 
51
76
  - {Explicitly not doing this time — must not be empty}
52
77
 
53
78
  ---
54
79
 
55
- ## 5. API Contract (only if the feature exposes an API)
80
+ ## 6. API Contract (only if the feature exposes an API)
56
81
 
57
82
  > Presence of this section enables `/vibe.contract` drift detection.
58
83
 
@@ -64,8 +89,10 @@ Response: 201 {...}
64
89
 
65
90
  ---
66
91
 
67
- ## 6. Verification
92
+ ## 7. Verification
68
93
 
69
94
  - `/vibe.run "{feature}"` implements scenario-by-scenario, verifying each immediately.
70
95
  - `/vibe.verify "{feature}"` judges the Done Criteria and sets `verifyPassed` in the run-ledger.
96
+ - Verification writes `.vibe/runs/{run-id}/evidence.json`; only deterministic Judge results can complete the loop.
97
+ - Model Judge findings are advisory-only. Human Taste is release-only.
71
98
  - Gate = all Done Criteria pass (exit codes / observed behavior) — loop continues until gates pass, stuck, or max iterations.