akari-video 0.1.0

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 (492) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/bin/akari.mjs +14 -0
  4. package/package.json +42 -0
  5. package/src/cli.mjs +140 -0
  6. package/src/messages.mjs +100 -0
  7. package/src/path-lookup.mjs +47 -0
  8. package/src/project-state.mjs +25 -0
  9. package/src/repo-assets.mjs +59 -0
  10. package/src/task-labels.mjs +30 -0
  11. package/src/update-check.mjs +189 -0
  12. package/vendor/packages/project-scaffold/package.json +11 -0
  13. package/vendor/packages/project-scaffold/src/index.mjs +523 -0
  14. package/vendor/packages/project-scaffold/test/create-project.test.mjs +81 -0
  15. package/vendor/packages/project-scaffold/test/skill-adapter-link.test.mjs +204 -0
  16. package/vendor/packages/schemas/analysis.schema.json +475 -0
  17. package/vendor/packages/schemas/asset-meta.schema.json +225 -0
  18. package/vendor/packages/schemas/avatar-rendition.schema.json +65 -0
  19. package/vendor/packages/schemas/avatar.schema.json +178 -0
  20. package/vendor/packages/schemas/bin/validate-asset.mjs +597 -0
  21. package/vendor/packages/schemas/bin/validate-avatar.mjs +486 -0
  22. package/vendor/packages/schemas/bin/validate-captions.mjs +316 -0
  23. package/vendor/packages/schemas/bin/validate-connections.mjs +295 -0
  24. package/vendor/packages/schemas/bin/validate-edit.mjs +766 -0
  25. package/vendor/packages/schemas/bin/validate-intake.mjs +185 -0
  26. package/vendor/packages/schemas/bin/validate-interpretation.mjs +515 -0
  27. package/vendor/packages/schemas/bin/validate-plan-comments.mjs +170 -0
  28. package/vendor/packages/schemas/bin/validate-plan.mjs +365 -0
  29. package/vendor/packages/schemas/bin/validate-recipe.mjs +267 -0
  30. package/vendor/packages/schemas/bin/validate-research-plan.mjs +510 -0
  31. package/vendor/packages/schemas/bin/validate-review.mjs +427 -0
  32. package/vendor/packages/schemas/captions.schema.json +141 -0
  33. package/vendor/packages/schemas/connections.schema.json +153 -0
  34. package/vendor/packages/schemas/edit.schema.json +437 -0
  35. package/vendor/packages/schemas/examples/analysis-person-matte-valid/analysis.json +18 -0
  36. package/vendor/packages/schemas/examples/captions-text-style-background-mode-invalid/captions.json +18 -0
  37. package/vendor/packages/schemas/examples/captions-text-style-color-non-hex-invalid/captions.json +14 -0
  38. package/vendor/packages/schemas/examples/captions-text-style-default-only-valid/captions.json +27 -0
  39. package/vendor/packages/schemas/examples/captions-text-style-omitted-valid/captions.json +11 -0
  40. package/vendor/packages/schemas/examples/captions-text-style-opacity-out-of-range-invalid/captions.json +8 -0
  41. package/vendor/packages/schemas/examples/captions-text-style-record-override-valid/captions.json +27 -0
  42. package/vendor/packages/schemas/examples/captions-text-style-size-non-positive-invalid/captions.json +14 -0
  43. package/vendor/packages/schemas/examples/captions-text-style-zone-invalid/captions.json +16 -0
  44. package/vendor/packages/schemas/examples/connections-v0-invalid-auth/connections.json +32 -0
  45. package/vendor/packages/schemas/examples/connections-v0-memory-valid/connections.json +42 -0
  46. package/vendor/packages/schemas/examples/edit-beats-duplicate-id/edit.json +11 -0
  47. package/vendor/packages/schemas/examples/edit-beats-invalid-id/edit.json +10 -0
  48. package/vendor/packages/schemas/examples/edit-beats-missing-kind/edit.json +10 -0
  49. package/vendor/packages/schemas/examples/edit-beats-strength-out-of-range/edit.json +11 -0
  50. package/vendor/packages/schemas/examples/edit-beats-v0-src-present/edit.json +10 -0
  51. package/vendor/packages/schemas/examples/edit-beats-v0-valid/edit.json +29 -0
  52. package/vendor/packages/schemas/examples/edit-beats-v1-src-missing-reference/edit.json +14 -0
  53. package/vendor/packages/schemas/examples/edit-beats-v1-valid/edit.json +37 -0
  54. package/vendor/packages/schemas/examples/edit-bgm-ducking-invalid/edit.json +10 -0
  55. package/vendor/packages/schemas/examples/edit-bgm-fade-invalid/edit.json +10 -0
  56. package/vendor/packages/schemas/examples/edit-bgm-fade-valid/edit.json +10 -0
  57. package/vendor/packages/schemas/examples/edit-bgm-in-invalid/edit.json +10 -0
  58. package/vendor/packages/schemas/examples/edit-bgm-in-valid/edit.json +10 -0
  59. package/vendor/packages/schemas/examples/edit-bgm-missing-path/edit.json +10 -0
  60. package/vendor/packages/schemas/examples/edit-bgm-null-valid/edit.json +11 -0
  61. package/vendor/packages/schemas/examples/edit-bgm-sfx-gain-out-of-range/edit.json +11 -0
  62. package/vendor/packages/schemas/examples/edit-bgm-sfx-valid/edit.json +23 -0
  63. package/vendor/packages/schemas/examples/edit-chroma-key-invalid/edit.json +7 -0
  64. package/vendor/packages/schemas/examples/edit-cuts-at-negative-invalid/edit.json +7 -0
  65. package/vendor/packages/schemas/examples/edit-cuts-at-track-valid/edit.json +20 -0
  66. package/vendor/packages/schemas/examples/edit-cuts-opacity-out-of-range-invalid/edit.json +16 -0
  67. package/vendor/packages/schemas/examples/edit-cuts-track-invalid/edit.json +7 -0
  68. package/vendor/packages/schemas/examples/edit-cuts-transform-full-valid/edit.json +17 -0
  69. package/vendor/packages/schemas/examples/edit-cuts-transform-omitted-valid/edit.json +9 -0
  70. package/vendor/packages/schemas/examples/edit-cuts-transform-partial-valid/edit.json +16 -0
  71. package/vendor/packages/schemas/examples/edit-cuts-transform-rotate-invalid/edit.json +16 -0
  72. package/vendor/packages/schemas/examples/edit-cuts-transform-scale-invalid/edit.json +16 -0
  73. package/vendor/packages/schemas/examples/edit-cuts-transform-unknown-key-invalid/edit.json +16 -0
  74. package/vendor/packages/schemas/examples/edit-direction-intensity-negative/edit.json +8 -0
  75. package/vendor/packages/schemas/examples/edit-direction-intensity-not-integer/edit.json +8 -0
  76. package/vendor/packages/schemas/examples/edit-direction-intensity-out-of-range/edit.json +8 -0
  77. package/vendor/packages/schemas/examples/edit-direction-missing-preset/edit.json +8 -0
  78. package/vendor/packages/schemas/examples/edit-direction-overrides-array/edit.json +8 -0
  79. package/vendor/packages/schemas/examples/edit-direction-preset-only/edit.json +8 -0
  80. package/vendor/packages/schemas/examples/edit-direction-valid/edit.json +8 -0
  81. package/vendor/packages/schemas/examples/edit-emphasis-words-empty-word/edit.json +10 -0
  82. package/vendor/packages/schemas/examples/edit-emphasis-words-invalid-id/edit.json +10 -0
  83. package/vendor/packages/schemas/examples/edit-emphasis-words-missing-emotion/edit.json +10 -0
  84. package/vendor/packages/schemas/examples/edit-emphasis-words-range-invalid/edit.json +11 -0
  85. package/vendor/packages/schemas/examples/edit-emphasis-words-v0-src-present/edit.json +10 -0
  86. package/vendor/packages/schemas/examples/edit-emphasis-words-v0-valid/edit.json +32 -0
  87. package/vendor/packages/schemas/examples/edit-emphasis-words-v1-valid/edit.json +39 -0
  88. package/vendor/packages/schemas/examples/edit-layers-invalid-bad-blend/edit.json +17 -0
  89. package/vendor/packages/schemas/examples/edit-layers-invalid-chroma-key-on-baked/edit.json +17 -0
  90. package/vendor/packages/schemas/examples/edit-layers-invalid-duplicate-id/edit.json +11 -0
  91. package/vendor/packages/schemas/examples/edit-layers-track-invalid/edit.json +8 -0
  92. package/vendor/packages/schemas/examples/edit-layers-valid/edit.json +31 -0
  93. package/vendor/packages/schemas/examples/edit-look-invalid/edit.json +7 -0
  94. package/vendor/packages/schemas/examples/edit-master-invalid/edit.json +8 -0
  95. package/vendor/packages/schemas/examples/edit-narration-gain-out-of-range/edit.json +18 -0
  96. package/vendor/packages/schemas/examples/edit-narration-invalid-id/edit.json +17 -0
  97. package/vendor/packages/schemas/examples/edit-narration-missing-provenance/edit.json +16 -0
  98. package/vendor/packages/schemas/examples/edit-narration-valid/edit.json +36 -0
  99. package/vendor/packages/schemas/examples/edit-narration-voicevox-missing-credit/edit.json +20 -0
  100. package/vendor/packages/schemas/examples/edit-render-basics-valid/edit.json +22 -0
  101. package/vendor/packages/schemas/examples/edit-sfx-in-invalid/edit.json +10 -0
  102. package/vendor/packages/schemas/examples/edit-sfx-in-out-valid/edit.json +10 -0
  103. package/vendor/packages/schemas/examples/edit-sfx-out-invalid/edit.json +10 -0
  104. package/vendor/packages/schemas/examples/edit-sfx-out-type-invalid/edit.json +10 -0
  105. package/vendor/packages/schemas/examples/edit-sfx-t-invalid/edit.json +10 -0
  106. package/vendor/packages/schemas/examples/edit-sfx-track-invalid/edit.json +8 -0
  107. package/vendor/packages/schemas/examples/edit-speed-invalid/edit.json +7 -0
  108. package/vendor/packages/schemas/examples/edit-timeline-declared-valid/edit.json +14 -0
  109. package/vendor/packages/schemas/examples/edit-timeline-duplicate-id-invalid/edit.json +13 -0
  110. package/vendor/packages/schemas/examples/edit-timeline-interleaved-valid/edit.json +22 -0
  111. package/vendor/packages/schemas/examples/edit-timeline-omitted-valid/edit.json +7 -0
  112. package/vendor/packages/schemas/examples/edit-timeline-ref-invalid/edit.json +13 -0
  113. package/vendor/packages/schemas/examples/edit-tracks-section-invalid/edit.json +8 -0
  114. package/vendor/packages/schemas/examples/edit-tracks-section-valid/edit.json +13 -0
  115. package/vendor/packages/schemas/examples/edit-transition-invalid/edit.json +10 -0
  116. package/vendor/packages/schemas/examples/edit-v0-sample/edit.json +27 -0
  117. package/vendor/packages/schemas/examples/edit-v0-sample/overlays/cap-a.html +17 -0
  118. package/vendor/packages/schemas/examples/edit-v0-sample/overlays/cap-b.html +17 -0
  119. package/vendor/packages/schemas/examples/edit-v1-bgm-sfx-valid/edit.json +13 -0
  120. package/vendor/packages/schemas/examples/edit-v1-sample/edit.json +14 -0
  121. package/vendor/packages/schemas/examples/plan-comments-v0-sample/plan-comments.json +19 -0
  122. package/vendor/packages/schemas/examples/plan-v0-sample/plan.json +39 -0
  123. package/vendor/packages/schemas/examples/recipe-v0-sample/product-demo-quick-cuts.json +23 -0
  124. package/vendor/packages/schemas/examples/review-v1-sample/review.json +11 -0
  125. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/AVATAR.md +159 -0
  126. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/avatar.json +22 -0
  127. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/happy.png +0 -0
  128. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral-half.png +0 -0
  129. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral-open.png +0 -0
  130. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral.png +0 -0
  131. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/rendition.json +18 -0
  132. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/happy.png +0 -0
  133. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral-half.png +0 -0
  134. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral-open.png +0 -0
  135. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral.png +0 -0
  136. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/rendition.json +18 -0
  137. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/AVATAR.md +30 -0
  138. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/avatar.json +22 -0
  139. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/happy.png +0 -0
  140. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral-half.png +0 -0
  141. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral-open.png +0 -0
  142. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral.png +0 -0
  143. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/rendition.json +18 -0
  144. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/happy.png +0 -0
  145. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral-half.png +0 -0
  146. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral-open.png +0 -0
  147. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral.png +0 -0
  148. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/rendition.json +18 -0
  149. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/AVATAR.md +30 -0
  150. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/avatar.json +22 -0
  151. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/happy.png +0 -0
  152. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral-half.png +0 -0
  153. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral-open.png +0 -0
  154. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral.png +0 -0
  155. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/rendition.json +18 -0
  156. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/happy.png +0 -0
  157. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral-half.png +0 -0
  158. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral-open.png +0 -0
  159. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral.png +0 -0
  160. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/rendition.json +18 -0
  161. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/AVATAR.md +30 -0
  162. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/avatar.json +22 -0
  163. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral-half.png +0 -0
  164. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral-open.png +0 -0
  165. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral.png +0 -0
  166. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/rendition.json +18 -0
  167. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/happy.png +0 -0
  168. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral-half.png +0 -0
  169. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral-open.png +0 -0
  170. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral.png +0 -0
  171. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/rendition.json +18 -0
  172. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/AVATAR.md +30 -0
  173. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/avatar.json +21 -0
  174. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/happy.png +0 -0
  175. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral-half.png +0 -0
  176. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral-open.png +0 -0
  177. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral.png +0 -0
  178. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/rendition.json +18 -0
  179. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/happy.png +0 -0
  180. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral-half.png +0 -0
  181. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral-open.png +0 -0
  182. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral.png +0 -0
  183. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/rendition.json +18 -0
  184. package/vendor/packages/schemas/fixtures/avatar/invalid-no-avatar-json/AVATAR.md +30 -0
  185. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/AVATAR.md +30 -0
  186. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/avatar.json +22 -0
  187. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/happy.png +0 -0
  188. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral-half.png +0 -0
  189. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral-open.png +0 -0
  190. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral.png +0 -0
  191. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/rendition.json +18 -0
  192. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/happy.png +0 -0
  193. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral-half.png +0 -0
  194. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral-open.png +0 -0
  195. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral.png +0 -0
  196. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/rendition.json +18 -0
  197. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/AVATAR.md +30 -0
  198. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/avatar.json +22 -0
  199. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/happy.png +0 -0
  200. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral-half.png +0 -0
  201. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral-open.png +0 -0
  202. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral.png +0 -0
  203. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/rendition.json +18 -0
  204. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/happy.png +0 -0
  205. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral-half.png +0 -0
  206. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral-open.png +0 -0
  207. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral.png +0 -0
  208. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/rendition.json +18 -0
  209. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/AVATAR.md +30 -0
  210. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/avatar.json +22 -0
  211. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/happy.png +0 -0
  212. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral-half.png +0 -0
  213. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral-open.png +0 -0
  214. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral.png +0 -0
  215. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/rendition.json +18 -0
  216. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/happy.png +0 -0
  217. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral-half.png +0 -0
  218. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral-open.png +0 -0
  219. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral.png +0 -0
  220. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/rendition.json +18 -0
  221. package/vendor/packages/schemas/fixtures/avatar/valid/AVATAR.md +30 -0
  222. package/vendor/packages/schemas/fixtures/avatar/valid/avatar.json +22 -0
  223. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/happy.png +0 -0
  224. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral-half.png +0 -0
  225. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral-open.png +0 -0
  226. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral.png +0 -0
  227. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/rendition.json +18 -0
  228. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/happy.png +0 -0
  229. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral-half.png +0 -0
  230. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral-open.png +0 -0
  231. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral.png +0 -0
  232. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/rendition.json +18 -0
  233. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/AVATAR.md +30 -0
  234. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/avatar.json +23 -0
  235. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/happy.png +0 -0
  236. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral-half.png +0 -0
  237. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral-open.png +0 -0
  238. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral.png +0 -0
  239. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/rendition.json +18 -0
  240. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/happy.png +0 -0
  241. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral-half.png +0 -0
  242. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral-open.png +0 -0
  243. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral.png +0 -0
  244. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/rendition.json +18 -0
  245. package/vendor/packages/schemas/fixtures/avatar/valid-voice-only/AVATAR.md +28 -0
  246. package/vendor/packages/schemas/fixtures/avatar/valid-voice-only/avatar.json +19 -0
  247. package/vendor/packages/schemas/fixtures/intake/invalid-duplicate-task/intake.json +8 -0
  248. package/vendor/packages/schemas/fixtures/intake/invalid-missing-submitted-at/intake.json +8 -0
  249. package/vendor/packages/schemas/fixtures/intake/invalid-target-exclusive/intake.json +8 -0
  250. package/vendor/packages/schemas/fixtures/intake/invalid-unknown-task/intake.json +8 -0
  251. package/vendor/packages/schemas/fixtures/intake/valid-draft/intake.json +8 -0
  252. package/vendor/packages/schemas/fixtures/intake/valid-submitted/intake.json +8 -0
  253. package/vendor/packages/schemas/fixtures/plan/invalid-bad-confidence-enum/plan.json +15 -0
  254. package/vendor/packages/schemas/fixtures/plan/invalid-constraint-bad-applies-to/plan.json +18 -0
  255. package/vendor/packages/schemas/fixtures/plan/invalid-dangling-media-path/plan.json +15 -0
  256. package/vendor/packages/schemas/fixtures/plan/invalid-duplicate-slot-id/plan.json +25 -0
  257. package/vendor/packages/schemas/fixtures/plan/invalid-missing-required-field/plan.json +14 -0
  258. package/vendor/packages/schemas/fixtures/plan/unsupported-version/plan.json +4 -0
  259. package/vendor/packages/schemas/fixtures/plan/valid/plan.json +40 -0
  260. package/vendor/packages/schemas/fixtures/plan/valid/scaffold/beat-01.png +1 -0
  261. package/vendor/packages/schemas/fixtures/plan/valid/scaffold/beat-01.wav +1 -0
  262. package/vendor/packages/schemas/fixtures/plan/valid/scaffold/broll.mp4 +1 -0
  263. package/vendor/packages/schemas/fixtures/plan/warns-confidence-gap/plan.json +28 -0
  264. package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-pass/plan-comments.json +6 -0
  265. package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-target-id-for-index-kind/plan-comments.json +13 -0
  266. package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-target-kind/plan-comments.json +13 -0
  267. package/vendor/packages/schemas/fixtures/plan-comments/invalid-comments-not-array/plan-comments.json +6 -0
  268. package/vendor/packages/schemas/fixtures/plan-comments/invalid-missing-comment-field/plan-comments.json +12 -0
  269. package/vendor/packages/schemas/fixtures/plan-comments/invalid-missing-version/plan-comments.json +5 -0
  270. package/vendor/packages/schemas/fixtures/plan-comments/unsupported-version/plan-comments.json +6 -0
  271. package/vendor/packages/schemas/fixtures/plan-comments/valid/plan-comments.json +19 -0
  272. package/vendor/packages/schemas/fixtures/plan-comments/valid-unknown-fields/plan-comments.json +15 -0
  273. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-aspect/recipe.json +13 -0
  274. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-confirmed-by/recipe.json +13 -0
  275. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-name-casing/recipe.json +13 -0
  276. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-workflow/recipe.json +13 -0
  277. package/vendor/packages/schemas/fixtures/recipe/invalid-duplicate-overlay-kind/recipe.json +13 -0
  278. package/vendor/packages/schemas/fixtures/recipe/invalid-empty-confirmed/recipe.json +9 -0
  279. package/vendor/packages/schemas/fixtures/recipe/invalid-empty-narration/recipe.json +13 -0
  280. package/vendor/packages/schemas/fixtures/recipe/invalid-missing-version/recipe.json +12 -0
  281. package/vendor/packages/schemas/fixtures/recipe/invalid-provenance-mismatch/recipe.json +15 -0
  282. package/vendor/packages/schemas/fixtures/recipe/invalid-source-project-path/recipe.json +13 -0
  283. package/vendor/packages/schemas/fixtures/recipe/unsupported-version/recipe.json +13 -0
  284. package/vendor/packages/schemas/fixtures/recipe/valid/recipe.json +15 -0
  285. package/vendor/packages/schemas/fixtures/recipe/valid-unknown-fields/recipe.json +16 -0
  286. package/vendor/packages/schemas/fixtures/review/invalid-malformed-canvas-target/review.json +6 -0
  287. package/vendor/packages/schemas/fixtures/review/invalid-malformed-doc-target/review.json +6 -0
  288. package/vendor/packages/schemas/fixtures/review/invalid-malformed-image-target/review.json +6 -0
  289. package/vendor/packages/schemas/fixtures/review/invalid-strokes-bad-space/review.json +6 -0
  290. package/vendor/packages/schemas/fixtures/review/invalid-strokes-canvas-rect-with-frame/review.json +6 -0
  291. package/vendor/packages/schemas/fixtures/review/invalid-strokes-image-rect-with-frame/review.json +6 -0
  292. package/vendor/packages/schemas/fixtures/review/invalid-video-null-sourcet/review.json +6 -0
  293. package/vendor/packages/schemas/fixtures/review/valid/review.json +8 -0
  294. package/vendor/packages/schemas/fixtures/review/valid-canvas-target/review.json +7 -0
  295. package/vendor/packages/schemas/fixtures/review/valid-input-session/review.json +6 -0
  296. package/vendor/packages/schemas/fixtures/review/valid-strokes/review.json +8 -0
  297. package/vendor/packages/schemas/intake.schema.json +117 -0
  298. package/vendor/packages/schemas/interpretation.schema.json +419 -0
  299. package/vendor/packages/schemas/package.json +18 -0
  300. package/vendor/packages/schemas/plan-comments.schema.json +52 -0
  301. package/vendor/packages/schemas/plan.schema.json +129 -0
  302. package/vendor/packages/schemas/recipe.schema.json +106 -0
  303. package/vendor/packages/schemas/research-plan.schema.json +230 -0
  304. package/vendor/packages/schemas/review.schema.json +227 -0
  305. package/vendor/packages/schemas/test/fixtures/asset/invalid-matched-by/audio/whoosh-transition/meta.json +31 -0
  306. package/vendor/packages/schemas/test/fixtures/asset/valid-catalog/audio/whoosh-transition/meta.json +31 -0
  307. package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/fragment.html +139 -0
  308. package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/meta.json +32 -0
  309. package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/preview.png +0 -0
  310. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-analyses-missing-ref/interpretation.json +131 -0
  311. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-analyses-ref-mismatch/interpretation.json +132 -0
  312. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-arc-empty-refs/interpretation.json +126 -0
  313. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-context-missing-interview/interpretation.json +126 -0
  314. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-context-null-intake/interpretation.json +133 -0
  315. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-dangling-arc-ref/interpretation.json +132 -0
  316. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-duplicate-asset-ref/interpretation.json +132 -0
  317. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-flag-bad-type/interpretation.json +132 -0
  318. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-flag-missing-evidence/interpretation.json +131 -0
  319. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-missing-required-field/interpretation.json +131 -0
  320. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-open-question-answer-present-when-open/interpretation.json +133 -0
  321. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-open-question-answered-without-answer/interpretation.json +131 -0
  322. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-relations-dangling-target/interpretation.json +132 -0
  323. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-relations-self-reference/interpretation.json +132 -0
  324. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-section-end-before-start/interpretation.json +132 -0
  325. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-section-mismatched-start-end/interpretation.json +131 -0
  326. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-unknown-root-field/interpretation.json +133 -0
  327. package/vendor/packages/schemas/test/fixtures/interpretation/unsupported-version/interpretation.json +132 -0
  328. package/vendor/packages/schemas/test/fixtures/interpretation/valid/interpretation.json +132 -0
  329. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-bad-category-enum/research-plan.json +128 -0
  330. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-dangling-chapter-ref/research-plan.json +128 -0
  331. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-dangling-shot-list-ref/research-plan.json +128 -0
  332. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-decided-at-mismatch/research-plan.json +128 -0
  333. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-duplicate-candidate-id/research-plan.json +128 -0
  334. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-japan-sns-notes-empty/research-plan.json +128 -0
  335. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-missing-required-field/research-plan.json +127 -0
  336. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-selected-missing-candidate/research-plan.json +128 -0
  337. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-structure-confirmed-mismatch/research-plan.json +128 -0
  338. package/vendor/packages/schemas/test/fixtures/research-plan/unsupported-version/research-plan.json +128 -0
  339. package/vendor/packages/schemas/test/fixtures/research-plan/valid/research-plan.json +79 -0
  340. package/vendor/packages/schemas/test/fixtures/research-plan/warns-empty-sources/research-plan.json +120 -0
  341. package/vendor/packages/schemas/test/validate-asset.test.mjs +38 -0
  342. package/vendor/packages/schemas/test/validate-avatar.test.mjs +109 -0
  343. package/vendor/packages/schemas/test/validate-captions.test.mjs +59 -0
  344. package/vendor/packages/schemas/test/validate-connections.test.mjs +31 -0
  345. package/vendor/packages/schemas/test/validate-edit.test.mjs +490 -0
  346. package/vendor/packages/schemas/test/validate-intake.test.mjs +66 -0
  347. package/vendor/packages/schemas/test/validate-interpretation.test.mjs +167 -0
  348. package/vendor/packages/schemas/test/validate-plan-comments.test.mjs +70 -0
  349. package/vendor/packages/schemas/test/validate-plan.test.mjs +67 -0
  350. package/vendor/packages/schemas/test/validate-recipe.test.mjs +107 -0
  351. package/vendor/packages/schemas/test/validate-research-plan.test.mjs +98 -0
  352. package/vendor/packages/schemas/test/validate-review.test.mjs +102 -0
  353. package/vendor/skills/.gitkeep +0 -0
  354. package/vendor/skills/address-review/SKILL.md +84 -0
  355. package/vendor/skills/address-review/bin/core/review-store.mjs +210 -0
  356. package/vendor/skills/address-review/bin/list.mjs +198 -0
  357. package/vendor/skills/address-review/bin/respond.mjs +89 -0
  358. package/vendor/skills/address-review/dev-fixtures/fixture-project/captions.json +22 -0
  359. package/vendor/skills/address-review/dev-fixtures/fixture-project/edit.json +12 -0
  360. package/vendor/skills/address-review/dev-fixtures/fixture-project/review.json +100 -0
  361. package/vendor/skills/address-review/test/review-store.test.mjs +201 -0
  362. package/vendor/skills/analyze-footage/SKILL.md +35 -0
  363. package/vendor/skills/analyze-footage/analysis-json.md +185 -0
  364. package/vendor/skills/analyze-footage/bin/person-matte/person-matte-helper.swift +343 -0
  365. package/vendor/skills/analyze-footage/bin/person-matte/person-matte.mjs +415 -0
  366. package/vendor/skills/analyze-footage/bin/speechanalyzer-helper.swift +138 -0
  367. package/vendor/skills/analyze-footage/bin/transcribe-cloud.mjs +486 -0
  368. package/vendor/skills/analyze-footage/bin/transcribe-sa.mjs +189 -0
  369. package/vendor/skills/analyze-footage/events-and-hooks.md +93 -0
  370. package/vendor/skills/analyze-footage/keyframes-and-review.md +130 -0
  371. package/vendor/skills/analyze-footage/media-and-transcript.md +219 -0
  372. package/vendor/skills/analyze-footage/person-matte.md +121 -0
  373. package/vendor/skills/analyze-footage/references/akari-data-contract.md +18 -0
  374. package/vendor/skills/analyze-footage/references/asset.meta.example.json +23 -0
  375. package/vendor/skills/analyze-footage/test/fixtures/scribe-punctuation-inflation.json +17 -0
  376. package/vendor/skills/analyze-footage/test/normalize-scribe.test.mjs +76 -0
  377. package/vendor/skills/analyze-footage/workflow.md +95 -0
  378. package/vendor/skills/analyze-project/SKILL.md +58 -0
  379. package/vendor/skills/analyze-project/collect.md +51 -0
  380. package/vendor/skills/analyze-project/decision-record.md +55 -0
  381. package/vendor/skills/analyze-project/interpretation.md +128 -0
  382. package/vendor/skills/analyze-project/interview.md +66 -0
  383. package/vendor/skills/analyze-project/references/interpretation-shape.md +42 -0
  384. package/vendor/skills/analyze-project/references/open-questions-examples.md +35 -0
  385. package/vendor/skills/analyze-project/validate-and-render.md +66 -0
  386. package/vendor/skills/bake-3d/SKILL.md +78 -0
  387. package/vendor/skills/compile-review-session/SKILL.md +78 -0
  388. package/vendor/skills/compile-review-session/bin/compile-review-session.mjs +799 -0
  389. package/vendor/skills/compile-review-session/bin/core/canvas-compiler.mjs +105 -0
  390. package/vendor/skills/compile-review-session/bin/core/compiler.mjs +221 -0
  391. package/vendor/skills/compile-review-session/bin/core/review-store.mjs +74 -0
  392. package/vendor/skills/compile-review-session/bin/core/time-mapping.mjs +370 -0
  393. package/vendor/skills/compile-review-session/bin/core/transcription.mjs +721 -0
  394. package/vendor/skills/compile-review-session/compilation-rules.md +98 -0
  395. package/vendor/skills/compile-review-session/dev-fixtures/README.md +24 -0
  396. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/audio.wav +0 -0
  397. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/edit.snapshot.json +12 -0
  398. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/events.jsonl +2 -0
  399. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/session.json +11 -0
  400. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/audio.wav +0 -0
  401. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/edit.snapshot.json +12 -0
  402. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/events.jsonl +5 -0
  403. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/session.json +11 -0
  404. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/audio.wav +0 -0
  405. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/edit.snapshot.json +12 -0
  406. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/events.jsonl +19 -0
  407. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/session.json +11 -0
  408. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/audio.wav +0 -0
  409. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/edit.snapshot.json +12 -0
  410. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/events.jsonl +2 -0
  411. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/session.json +11 -0
  412. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0005/session.json +1 -0
  413. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/audio.wav +0 -0
  414. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/events.jsonl +2 -0
  415. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/session.json +11 -0
  416. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/audio.wav +0 -0
  417. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/edit.snapshot.json +13 -0
  418. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/events.jsonl +9 -0
  419. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/session.json +11 -0
  420. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/audio.wav +0 -0
  421. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/edit.snapshot.json +12 -0
  422. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/events.jsonl +2 -0
  423. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/session.json +11 -0
  424. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/transcript.json +9 -0
  425. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review.json +7 -0
  426. package/vendor/skills/compile-review-session/test/canvas-compiler.test.mjs +283 -0
  427. package/vendor/skills/compile-review-session/test/compiler.test.mjs +458 -0
  428. package/vendor/skills/create-project/SKILL.md +46 -0
  429. package/vendor/skills/create-project/bin/create-project.mjs +88 -0
  430. package/vendor/skills/edit-lint/SKILL.md +73 -0
  431. package/vendor/skills/edit-plan/SKILL.md +64 -0
  432. package/vendor/skills/edit-plan/approvals-and-generation.md +106 -0
  433. package/vendor/skills/edit-plan/avatar-resolution.md +241 -0
  434. package/vendor/skills/edit-plan/beat-sync.md +545 -0
  435. package/vendor/skills/edit-plan/beats.md +197 -0
  436. package/vendor/skills/edit-plan/emphasis-detection.md +366 -0
  437. package/vendor/skills/edit-plan/execution.md +157 -0
  438. package/vendor/skills/edit-plan/expression-selection.md +290 -0
  439. package/vendor/skills/edit-plan/plan-json.md +52 -0
  440. package/vendor/skills/edit-plan/recipe.md +74 -0
  441. package/vendor/skills/edit-plan/references/asset.decisions.example.json +12 -0
  442. package/vendor/skills/edit-plan/references/event.example.json +7 -0
  443. package/vendor/skills/edit-plan/report-guide.md +192 -0
  444. package/vendor/skills/edit-plan/workflow.md +108 -0
  445. package/vendor/skills/generate-narration/SKILL.md +40 -0
  446. package/vendor/skills/generate-narration/assets/reading-script-v1.md +18 -0
  447. package/vendor/skills/generate-narration/avatar-voice.md +54 -0
  448. package/vendor/skills/generate-narration/bin/generate-narration.mjs +572 -0
  449. package/vendor/skills/generate-narration/engines.md +78 -0
  450. package/vendor/skills/generate-narration/reading-text.md +36 -0
  451. package/vendor/skills/generate-narration/voice-profile-setup.md +77 -0
  452. package/vendor/skills/harvest-asset/SKILL.md +132 -0
  453. package/vendor/skills/manage-connections/SKILL.md +75 -0
  454. package/vendor/skills/manage-connections/bin/doctor.mjs +341 -0
  455. package/vendor/skills/overlay-authoring/3d.md +143 -0
  456. package/vendor/skills/overlay-authoring/SKILL.md +30 -0
  457. package/vendor/skills/overlay-authoring/motion.md +58 -0
  458. package/vendor/skills/overlay-authoring/table.md +41 -0
  459. package/vendor/skills/overlay-authoring/telop.md +69 -0
  460. package/vendor/skills/overlay-authoring/text-behind-person.md +224 -0
  461. package/vendor/skills/overlay-authoring/thumbnail.md +126 -0
  462. package/vendor/skills/render-cut/SKILL.md +66 -0
  463. package/vendor/skills/research-plan/SKILL.md +75 -0
  464. package/vendor/skills/research-plan/competitor.md +50 -0
  465. package/vendor/skills/research-plan/ideate.md +56 -0
  466. package/vendor/skills/research-plan/shotlist.md +46 -0
  467. package/vendor/skills/research-plan/storyboard.md +48 -0
  468. package/vendor/skills/research-plan/trends.md +33 -0
  469. package/vendor/skills/setup-audio-library/SKILL.md +93 -0
  470. package/vendor/skills/setup-audio-library/candidate-list.md +72 -0
  471. package/vendor/skills/setup-audio-library/drop-folder.md +72 -0
  472. package/vendor/skills/setup-audio-library/gallery.md +43 -0
  473. package/vendor/skills/setup-library/SKILL.md +33 -0
  474. package/vendor/skills/setup-library/fetch-and-validate.md +102 -0
  475. package/vendor/skills/setup-library/starter-pack.md +55 -0
  476. package/vendor/skills/setup-library/tools-check.md +83 -0
  477. package/vendor/skills/verify/SKILL.md +137 -0
  478. package/vendor/templates/project-default/.akari/cache/.gitkeep +0 -0
  479. package/vendor/templates/project-default/.akari/connections.json +233 -0
  480. package/vendor/templates/project-default/.akari/diffs/.gitkeep +1 -0
  481. package/vendor/templates/project-default/.akari/events/.gitkeep +1 -0
  482. package/vendor/templates/project-default/.akari/reports/.gitkeep +0 -0
  483. package/vendor/templates/project-default/.akari/sidecars/.gitkeep +1 -0
  484. package/vendor/templates/project-default/.akari/work/.gitkeep +0 -0
  485. package/vendor/templates/project-default/.akari/workflow.json +48 -0
  486. package/vendor/templates/project-default/.claude/settings.json +15 -0
  487. package/vendor/templates/project-default/.claude/skills/README.md +26 -0
  488. package/vendor/templates/project-default/AGENTS.md +49 -0
  489. package/vendor/templates/project-default/CLAUDE.md +35 -0
  490. package/vendor/templates/project-default/assets/.gitkeep +1 -0
  491. package/vendor/templates/project-default/exports/.gitkeep +1 -0
  492. package/vendor/templates/project-default/planning/.gitkeep +1 -0
@@ -0,0 +1,157 @@
1
+ # 承認後の実行
2
+
3
+ ## 原則
4
+
5
+ このファイルは Checkpoint 3 の明示承認後だけ読む。承認された manifest を [M1〜M4 契約](../../docs/contract-2026-07-13-m1-m4.md) の `edit.json` と authoring 規約へ忠実に変換し、表現できない計画を独自フィールドで補わない。使ってよいのは公開契約が定めたフィールドだけである([SKILL.md](SKILL.md) のハードルール)。
6
+
7
+ ## 1. source 構成を確定する
8
+
9
+ **複数の映像素材が最終構成に必要なら、`edit.json v1`(`sources[]` + `cuts[].src`)で書く**。これが第一選択肢であり、[マルチソース契約](../../docs/contract-2026-07-18-edit-json-v1-sources.md) が定める公開フィールドである。render-cut は v1 の複数入力書き出しに対応済みで、素材をまたぐ順序・同じ素材の再登場・並べ替えをそのまま書き出せる。
10
+
11
+ 素材構成は次から選び、選んだ理由を `decision-log.md` に追記する。
12
+
13
+ - **v1 マルチソース(複数素材の既定)**: `sources[]` へ素材、`cuts[]` へ `src` 付きクリップ列を書き、`version` を `1` にする。素材別の keep-range 編集性を保ったまま複数素材を並べられるので、B ロールや別テイクの差し込みもここで表す。
14
+ - **主素材 1 本の v0(単一素材で足りる場合の既定)**: 主素材 1 本だけで構成が成立するなら `version: 0` + 単一 `source` を維持する。version を上げる必要はない。
15
+ - **単一中間マスターへ conform(代替手段)**: v1 でも表現しにくい合成 — 焼き込みエフェクト、素材そのものを作り替える加工、公開契約に無い合成 — が要るときだけ、承認済み順序と区間を ffmpeg で 1 本にし、そのファイルを source にする。複数素材を 1 本として扱える一方、元素材別の keep-range 編集性が下がる。素材・source 時刻・master 時刻の対応表は `decision-log.md` に残す。
16
+
17
+ 素材別に独立した `edit.json` を作る案が要件を満たす場合は併記してよい。承認を得ずに黙って concat したり、公開契約に無い `source_id` や独自 track を発明したりしない。
18
+
19
+ BGM と SFX は [音声契約](../../docs/contract-2026-07-14-edit-json-v1-audio.md) の `audio`(version を問わない任意フィールド)で書き、ナレーションは [narration 契約](../../docs/contract-2026-07-20-edit-json-v1-narration.md) の `audio.narration[]` で書く。動画 B ロールは v1 の `sources[]` + `cuts[].src` で表す。いずれの契約でも表せない計画は、中間マスターへ焼き込むか、計画のみとして未実行にするかを manifest で区別する。
20
+
21
+ ### v1 で書くときの注意
22
+
23
+ - **`cuts` が空 = 空タイムライン**。v0 の「空 = source 全体を使う」と意味が違う。v1 で素材全体を使いたいなら `{ "src": "s1", "in": 0, "out": <素材尺> }` を明示的に書く。素材尺が取得できず全体 cut を作れないときは、推測せず停止して報告する。空タイムラインは契約上は合法なので edit-lint も PASS し、書き出し段で `no output duration because cuts is empty` として初めて止まる。
24
+ - **字幕・注釈・解析結果は (`src`, source 秒) でアンカーする**。同じ素材区間がタイムライン上に複数回現れ得るため source 秒 → timeline 秒は一対多であり、timeline 秒へ変換した結果を永続化しない。字幕(`captions.json`)と注釈(`review.json` の `annotations[]`)の各項目は `src` に `sources[].id` を書く。`src` の省略は単一ソース互換の意味になり、素材が 2 本以上ある edit では当該項目が警告付きでスキップされる。
25
+ - **`sources[].id` は `s1`, `s2`, … の連番を推奨**。参照は path ではなく安定した id で行うので、素材の差し替えや path 変更で cut・サイドカーの参照が壊れない。id はファイル内で一意にする。
26
+ - `source` と `sources[]` は排他である。v0 のまま `sources[]` を書いたり、`version: 1` で単一 `source` を残したりしない。
27
+ - `overlays[].start`、`audio.bgm`、`audio.sfx[].t` は v0 / v1 を問わずアウトプットタイムライン座標であり、この source 秒アンカー規則の対象外である。
28
+
29
+ ## 2. edit.json を作る
30
+
31
+ 承認値を次の形へ入れる。例の数値を既定値として流用しない。
32
+
33
+ **単一素材(v0)**
34
+
35
+ ```json
36
+ {
37
+ "version": 0,
38
+ "output": { "width": 1280, "height": 720, "fps": 30 },
39
+ "source": {
40
+ "path": "source/master.mp4",
41
+ "proxy": "source/master-proxy.mp4"
42
+ },
43
+ "cuts": [
44
+ { "in": 5.0, "out": 10.0 }
45
+ ],
46
+ "overlays": [
47
+ {
48
+ "id": "chapter-setup",
49
+ "html": "overlays/chapter-setup.html",
50
+ "start": 1.0,
51
+ "duration": 4.0,
52
+ "transform": { "x": 0, "y": -80, "scale": 1, "rotate": 0 },
53
+ "vars": { "--color": "#ffffff" }
54
+ }
55
+ ]
56
+ }
57
+ ```
58
+
59
+ **複数素材(v1)**
60
+
61
+ ```json
62
+ {
63
+ "version": 1,
64
+ "output": { "width": 1280, "height": 720, "fps": 30 },
65
+ "sources": [
66
+ { "id": "s1", "path": "source/interview.mp4", "proxy": "source/interview-proxy.mp4" },
67
+ { "id": "s2", "path": "source/broll-workshop.mp4", "proxy": null }
68
+ ],
69
+ "cuts": [
70
+ { "src": "s1", "in": 5.0, "out": 10.0 },
71
+ { "src": "s2", "in": 12.0, "out": 15.5 },
72
+ { "src": "s1", "in": 40.0, "out": 44.0 }
73
+ ],
74
+ "overlays": [
75
+ {
76
+ "id": "chapter-setup",
77
+ "html": "overlays/chapter-setup.html",
78
+ "start": 1.0,
79
+ "duration": 4.0,
80
+ "transform": { "x": 0, "y": -80, "scale": 1, "rotate": 0 },
81
+ "vars": { "--color": "#ffffff" }
82
+ }
83
+ ]
84
+ }
85
+ ```
86
+
87
+ - v0 の `source.path`、v1 の `sources[].path` は原本または承認済み中間マスター、`proxy` は対応する 720p preview。原本を proxy へ置き換えない。proxy が無い素材は `null` を書く。
88
+ - path は `edit.json` からの相対または絶対。可搬性のため同一ツリーでは相対を使う。
89
+ - v0 の `cuts` は source 秒の keep-range で昇順・非重複。空配列は source 全体を使う。
90
+ - v1 の `cuts` は `src` で素材を指すクリップ列で、**配列順がそのままタイムライン順**になる。同じ `src` の再登場と任意の並べ替えを認め、昇順・非重複は強制しない。各要素は `0 <= in < out` を満たし、`src` は `sources[].id` を指す。空配列は空タイムラインである。
91
+ - `overlays.start` は cut 連結後の timeline 秒。source 秒の event をそのまま入れない。
92
+ - overlay ID は一意、HTML path は存在し、`duration > 0` とする。
93
+
94
+ v0 では、source 時刻 `s` が keep-range `[in, out]` にあるとき、timeline 時刻は「それ以前の keep-range 長の合計 + `(s - in)`」で求める。v1 では `cuts` を配列順にギャップなく連結し、各 cut の長さを `out - in` として同じ式で求める(上の例なら s1 5.0–10.0 が timeline 0.0–5.0、s2 12.0–15.5 が 5.0–8.5、s1 40.0–44.0 が 8.5–12.5)。同じ `(src, source 秒)` が複数の cut に含まれるなら、対応する timeline 時刻も複数になる。境界にある overlay は実フレームを確認し、カットで消える区間へ置かない。
95
+
96
+ ### 切り出し・先出しクリップの発話スナップと呼吸
97
+
98
+ トレーラー・オープニングフック・引用など、本編とは別に短く切り出すクリップ(以下「切り出し・先出しクリップ」)の `in` / `out` は、**クリップ内の発話を `analysis.json` の word-level 実測(`transcript[].words`)で拾い、発話へスナップして決める**。ハードルール:
99
+
100
+ - **窓 = クリップ内発話の頭 − 0.25s / 末尾 + 0.25s**(前後合わせて呼吸 0.5s。オーナー指針 2026-07-24)。発話の頭・末尾ギリギリで詰めず、前後に無音の呼吸を残して急な切替感を消す。
101
+ - coarse な segment 時刻(whisper の 2 秒量子化・句読点境界)や**見せ場スコア位置の機械窓のまま切り出さない**。機械窓は発話の外で切れていることがあり、意図した発話が窓の外へ落ちる。
102
+ - **発話を含まない切り出し窓を作らない**。見せ場スコアが指す位置に発話が無ければ、窓ではなく発話の実測区間を正本にして取り直す。
103
+ - **全文表示が 1.0 秒未満になる字幕を含むクリップを作らない**。収まらないなら窓を字幕が読める長さまで延ばすか、その字幕を落とす(読めない字幕を出さない)。
104
+ - スナップに使う `words` は source 秒。窓(`cuts[].in/out`)も source 秒で書く(§1 の source 秒アンカー規則)。
105
+
106
+ 呼吸 0.5s(頭 0.25s / 末尾 0.25s)は、将来 `direction` のプリセット / `intensity` 写像(`join_breathing`)に載る予定である(席の予約。ここでは写像を定義せず、現時点の採用値は固定値として `decision-log.md` に記す)。
107
+
108
+ ## 3. オーバーレイ HTML を作る
109
+
110
+ 最初に [overlay-authoring](../overlay-authoring/SKILL.md) を読み、必要なリーフだけを追加で読む。利用不能なら [CLAUDE.md の authoring 規約](../../CLAUDE.md) を読み、fallback を `decision-log.md` に追記する。
111
+
112
+ - 断片のルート要素は 1 個にする。
113
+ - 調整可能な値を `--x`、`--y`、`--scale`、`--font-size`、`--color` 等の CSS 変数にする。
114
+ - `edit.json.overlays[].start/duration` を SSOT とし、ランタイム所有の外側コンテナに反映される `data-start` / `data-duration` と一致させる。断片内に独立した時刻源を作らない。
115
+ - アニメーションは transform / opacity 中心にし、4K 映像上の `filter: blur()` と `backdrop-filter` を使わない。
116
+ - wall-clock に依存せず、シーク時に Web Animations API の `currentTime` で同じ絵を再現できるようにする。
117
+ - 3D が必要なら Three.js + glTF、動画 texture は proxy を使う。
118
+ - transcript 等の可変文字列を HTML と CSS の文脈に合わせて escape する。
119
+
120
+ サムネ用の HTML 文字組を、タイミング付き動画 overlay として無条件に再利用しない。
121
+
122
+ ## 4. 字幕(captions.json)の表示区間を作る
123
+
124
+ 字幕を持つ計画では、各 caption の表示区間を**実発話区間**に一致させる。segment 境界を敷き詰めた(`end = 次の caption の start`)字幕は、ポーズ・無音・フィラー間にも字幕を残し、実発話より早く出る/長く残る。ハードルール:
125
+
126
+ - **`caption.start` = 先頭語(`words[0]`)の実測 start / `caption.end` = 末尾語(`words[-1]`)の実測 end + 読み切り猶予**。読み切り猶予は既定 **0.2〜0.4 秒**(採用値は `decision-log.md` に記す)。
127
+ - **次 caption の start まで引き伸ばさない**(敷き詰め禁止)。**無発話区間(発話 `words` が無い区間)は無字幕**とする。隙間が生まれるのが正であり、隙間を字幕で埋めない。
128
+ - caption の start / end は source 秒アンカー(§1)。`words[]` も同じ source 秒で持つ。
129
+ - **按分 fallback(`words` が取れず segment の start/end を文字数比で分配する推定)を使うときも、敷き詰め禁止は同じ**。按分は末尾語 end の**時刻の推定**であって**区間の拡張ではない**ので、推定した末尾 end + 読み切り猶予で閉じ、次 caption まで伸ばさない。
130
+ - 参照挙動: 旧 Akari-OS(video-on-os)の字幕表示。字幕の付ける/付けない・スタイル等の方針レベルは [report-guide.md](report-guide.md) の素材計画 §字幕枠で決め、ここでは区間の作り方だけを定める。
131
+
132
+ ## 5. 検証して判断記録を閉じる
133
+
134
+ - [edit-lint](../edit-lint/SKILL.md) を実行し、`edit.json` の構造、cuts 整合、参照解決、
135
+ overlay の timeline 時刻・ID・HTML root・data 属性が PASS になるまで findings を修正する。
136
+ v1 では `sources[].id` の一意性と `cuts[].src` の参照整合も検査対象になる。
137
+ - overlay の CSS 変数と禁止 CSS は overlay-authoring 規約に照らして確認する。
138
+ - 中間マスターを作った場合は、素材別対応表と実フレームで境界を確認する。
139
+ - `decision-log.md` に実行結果(生成物一覧・provenance・実行日時)を追記し、Checkpoint 3
140
+ が実行済みであることを記録する。過去の log 行は変更しない。
141
+
142
+ ## よくある間違い
143
+
144
+ - `version: 0` のまま `sources[]` を書く(`sources[]` を使うファイルは `version: 1`)。
145
+ - `version: 1` で `cuts` を空のまま「素材全体を使う」つもりになる(v1 の空 `cuts` は空タイムライン)。
146
+ - `version: 1` で `cuts[].src` を省く、または `sources[].id` に無い id を書く。
147
+ - `source` と `sources[]` を併存させる(排他。lint エラー)。
148
+ - 複数素材を理由に、公開契約に無い `source_id` や独自 track を追加する。
149
+ - 素材計画にある BGM / SFX / ナレーションを、契約フィールド(`audio` / `audio.narration[]`)ではなく独自 field で書く。
150
+ - 字幕・注釈・解析結果を timeline 秒へ変換して永続化する(正本は (`src`, source 秒))。
151
+ - **caption の表示区間を segment 境界で敷き詰め(`end = 次の caption の start`)、無発話区間にも字幕を残す**(実発話が終われば字幕も終わる。§4)。
152
+ - 按分 fallback を「区間の拡張」に使い、末尾語の推定 end を越えて次 caption まで字幕を伸ばす(§4)。
153
+ - **切り出し・先出しクリップを見せ場スコア位置の機械窓(segment 量子化時刻)のまま切り出し、意図した発話を窓の外へ落とす/全文 1.0s 未満の読めない字幕を出す**(発話へスナップし呼吸 0.5s を残す。§2)。
154
+ - `cuts` と overlay の時刻をどちらも source 秒で書く。
155
+ - 実行承認前に中間マスターや overlay を作る。
156
+ - authoring skill がないことを理由に規約を省略する。
157
+ - edit.json の sample 値を、承認されていない出力仕様として使う。
@@ -0,0 +1,290 @@
1
+ # 表現手段を文脈から選ぶ(意味 → 手段)
2
+
3
+ シーンごとに「何の表現手段で見せるか」を決めるための選択規約である。[beats.md](beats.md) が
4
+ 「どこが見せ場か」を、[beat-sync.md](beat-sync.md) が「見せ場でいつ何を発火するか」を定めるのに対し、
5
+ 本リーフは**素材計画(Checkpoint 2)で「そのシーンを何で見せるか」を決める段**を担う。
6
+
7
+ 本リーフは**候補の決め方**であって、承認の省略ではない。ここで決めた候補は従来どおり
8
+ [approvals-and-generation.md](approvals-and-generation.md) の Checkpoint 2(素材計画)を通す
9
+ (§承認ゲートは不変)。
10
+
11
+ ## 選択原則
12
+
13
+ - **意味が手段を決める。手段が先にあるのではない。** そのシーンが視聴者に何を伝える場面かを
14
+ 先に言語化し、その意味から手段を引く。
15
+ - **手段の目新しさ・使いたさを選択理由にしない。** 「3D を入れたい」「せっかくカタログにある」は
16
+ 理由にならない。理由になるのは「このシーンの意味がその手段を要求している」ことだけである。
17
+ - **1 シーン 1 主役。** 同時に主張する手段は 1 つにする。補助(字幕・控えめな装飾)は可だが、
18
+ 主役を 2 つ置かない(3D モデルを回しながら全画面グラフを重ね、さらに語レベルの文字演出を
19
+ 被せる、をしない)。
20
+
21
+ ## 意味 → 手段の既定対応表
22
+
23
+ | シーンの意味 | 第一候補 | 第二候補 | 使わない |
24
+ |---|---|---|---|
25
+ | 製品・物体の説明 | 3D モデル(bake-3d カタログ) | 実写 B ロール | 文字だけで説明しない |
26
+ | データ・数値・比較 | HTML グラフ/表 | 文字演出(数値の強調) | 3D の飾り |
27
+ | 手順・操作の説明 | スクリーン録画・資料 | HTML 図解 | 無関係なストック |
28
+ | 場所・雰囲気 | 実写 B ロール | ストック素材 | — |
29
+ | 感情・主張の瞬間 | 文字演出(語レベル) | 人物演出(囲い・ズーム) | 情報系オーバーレイ |
30
+ | 概念・構造の説明 | HTML 図解(図・囲い・矢印) | 3D(空間的な概念のみ) | — |
31
+
32
+ - 表は**意味の側から引く**。手段の側から「この素材をどこで使えるか」と逆引きしない。
33
+ - **「使わない」列は禁止であり、`allowed_means`(§ハードフィルタ)で許可されていても選ばない。**
34
+ 許可は義務ではなく、禁止列を解除もしない。
35
+ - 表に無い意味のシーンは、最も近い行を選んだうえで**どの行を借りたか**を根拠に書く
36
+ (§根拠の記録)。行を発明しない。
37
+
38
+ ## 表の手段と `allowed_means` 語彙の対応
39
+
40
+ `allowed_means` の語彙は演出カード(decision-cards の `direction` カード)が持つ 7 値であり、
41
+ 対応表の呼び方とは粒度が違う。突き合わせは次で固定する。
42
+
43
+ | 対応表の手段 | `allowed_means` の値 |
44
+ |---|---|
45
+ | 3D モデル(bake-3d カタログ) / 3D(空間的な概念のみ) / 3D の飾り | `3D` |
46
+ | 実写 B ロール | `実写 B ロール` |
47
+ | ストック素材 | `ストック素材` |
48
+ | スクリーン録画・資料 | `スクリーン録画・資料` |
49
+ | HTML グラフ/表 / HTML 図解 / 情報系オーバーレイ | `HTML 図解` |
50
+ | 文字演出(語レベル) / 文字演出(数値の強調) | `文字演出` |
51
+ | 人物演出(囲い・ズーム) | 囲い等の重ね物は `HTML 図解`、ズーム等の映像側の変形は**手段チェックの対象外**(素材を伴わないため) |
52
+
53
+ - `AI 生成` は対応表の**行に現れない**。これは「何で見せるか」ではなく「その素材をどう調達するか」の
54
+ 軸であり、B ロール・ストック・3D・図解のいずれとも直交する。生成で素材を用意するときに
55
+ **重ねて**効くチェックである(§ハードフィルタ)。
56
+ - overlay HTML を自分で書くこと([overlay-authoring](../overlay-authoring/SKILL.md))は
57
+ `HTML 図解` / `文字演出` のチェックで扱い、`AI 生成` のチェックは画像・動画・音声の生成素材に
58
+ かける。
59
+
60
+ ## ハードフィルタ — `allowed_means`
61
+
62
+ 演出カードの `allowed_means`(`<レポートパス>.decisions.json` の `direction` カードの
63
+ `answer.allowed_means`。既定は 7 値すべて許可)に**無い手段は候補から除外する**。
64
+
65
+ - **第一候補が除外されたら第二候補へ**。第二候補も除外されたら、その意味の行の候補は尽きている。
66
+ - **全滅なら「その意味のシーンは素の映像 + 字幕」**とする。除外された手段を「近いから」と
67
+ 読み替えて別の手段へ滑らせない(3D が不許可だからストック素材の 3D 風 CG を使う、をしない)。
68
+ - 除外・全滅も**決定である**。何を除外して何に落ちたかを §根拠の記録の形式で残す。
69
+ - `decisions.json` が無い・破損している場合は
70
+ [report-guide.md](report-guide.md) の汎用カード機構の既定どおり**チャットの明示承認で代替**する
71
+ (既定で全許可とみなして進めない)。
72
+ - `allowed_means` はハードフィルタであり、演出の強さ(`direction { preset, intensity }` →
73
+ [beat-sync.md](beat-sync.md))とは別軸である。`intensity` を上げても不許可の手段は復活しない。
74
+
75
+ ### AI 生成素材の二重ゲート
76
+
77
+ `AI 生成` は `allowed_means` に加えて **intake の方針(AI 生成の許可)にも従う**。両方が許可して
78
+ 初めて生成素材を候補にできる(片方でも不許可なら、その素材は生成せず「あれば提案」または
79
+ 「使わない」へ落とす)。
80
+
81
+ - 実測(`packages/schemas/intake.schema.json` v0): intake.json v0 のフィールドは
82
+ `version` / `tasks` / `target` / `autonomy` / `status` / `submitted_at` であり、**AI 生成の可否を
83
+ 持つ専用フィールドは無い**。したがって intake 側の方針は `target.taste` の自由記述と
84
+ `decision-log.md` に残る承認記録から読む。
85
+ - どちらからも読み取れないときは「許可されている」とみなさず、
86
+ [approvals-and-generation.md](approvals-and-generation.md) の生成前宣言で確認してから進む。
87
+
88
+ ## カタログ接続 — 手段が決まってから素材を探す
89
+
90
+ **手段が決まってから素材を探す**(素材を先に見つけて手段を後付けしない)。探索は
91
+ [report-guide.md](report-guide.md#素材計画) の全スコープ層を近い順(プロジェクト `assets/` →
92
+ 上位ディレクトリの `.akari/assets/` → `~/.akari/assets/` → 製品リポ `assets/` →
93
+ `catalog/`)に行い、どの層のヒットかを明記する。
94
+
95
+ - **検索キーは `when_to_use` と `tags`** である。`when_to_use` はシーンの意味と直接突き合わせ、
96
+ `tags` は絞り込みに使う。`title` / `description` の語感だけで選ばない。
97
+ - **ライセンスは `meta.json` で確認してから採用する。** 見るのは `license.spdx` /
98
+ `license.scope` / `license.attribution_required` と `source.license_at_source`(再配布条件)である。
99
+ - `attribution_required: true` なら、採用した時点でクレジット文の義務が発生する
100
+ (編集レポートへ載せる。[beat-sync.md](beat-sync.md) のクレジット運用と同じ)。
101
+ - **素材単体の再配布を禁じている素材は、プロジェクトへ複製するのは可でも公開リポジトリへ
102
+ コミットしない。**
103
+ - `catalog/` は `remote: true` の**取得先索引であり実体を持たない**([catalog/INDEX.md](../../catalog/INDEX.md))。
104
+ 未取得なら「取得が要る」ことを素材計画に明記する。
105
+ - 例外: `catalog/telop/` だけは本リポへベンダリングされた目次方式カタログで、`meta.json` を
106
+ 持たない(実測: `index.jsonl` に license フィールドは無い)。ライセンス根拠は
107
+ [catalog/telop/INDEX.md](../../catalog/telop/INDEX.md) の来歴で確認し、実際にレンダリングへ
108
+ 使う書体のライセンスは `catalog/font/<id>/meta.json` で別途確認する。
109
+ - 該当ヒットが無いことを「あれば提案」と記録しない。[report-guide.md](report-guide.md#素材計画) の
110
+ 三択(あれば提案 / なければ生成 / 使わない)へ落とし、プレビュー・検索結果を捏造しない。
111
+
112
+ ## 根拠の記録
113
+
114
+ **全選択について**、「シーンの意味 → 表のどの行 → 選んだ素材 id」を編集判断レポートの素材計画へ
115
+ **1 行**で記録する([beat-sync.md](beat-sync.md) の選択根拠と同じ粒度)。記録先は
116
+ `decision-log.md` の `material` category([report-guide.md](report-guide.md#decision_log))である。
117
+
118
+ ```text
119
+ <scene id> @ <timeline 秒> | 意味: <シーンの意味> | 行: <対応表の行名> / <第一候補|第二候補|全滅> |
120
+ 手段: <allowed_means 語彙> | 素材: <素材 id>(<層> / <license.spdx> / クレジット<要|不要>) | 理由: <1 文>
121
+ ```
122
+
123
+ - **除外・全滅・不採用も 1 行を書く**(`手段: —(全滅 → 素の映像 + 字幕)` のように書き、何が
124
+ 除外されたかを理由に残す)。黙って落とさない。
125
+ - 素材が生成物(overlay HTML 等)で `id` を持たない場合は、生成物のパスを素材欄に書く。
126
+ - 候補順位を飛ばした場合(第一候補が許可されているのに第二候補を採る等)は、飛ばした理由を
127
+ 理由欄に書く。理由なき逸脱は不可であり、既定は第一候補である。
128
+
129
+ ## 承認ゲートは不変
130
+
131
+ 本リーフは候補の決め方であり、承認の省略ではない。
132
+
133
+ - 素材計画は従来どおり **Checkpoint 2(素材計画)** の人間承認を通す
134
+ ([approvals-and-generation.md](approvals-and-generation.md))。
135
+ - `allowed_means` を通過したことは「承認された」ことを意味しない。ハードフィルタは候補を
136
+ **減らす**だけで、残った候補を自動承認しない。
137
+ - 有償・重い生成(AI 生成素材)は、`allowed_means` と intake の両方を通過していても
138
+ 生成前宣言を省略しない。
139
+
140
+ ## worked example
141
+
142
+ ### 前提
143
+
144
+ タスク管理アプリの紹介動画(解説トーン = 真面目)。意味の異なる 3 シーンを扱う。
145
+
146
+ | scene | timeline 秒 | シーンの意味 | 内容 |
147
+ |---|---|---|---|
148
+ | `sc-01` | 24.0 | 製品・物体の説明 | アプリの画面を実機に映して見せる |
149
+ | `sc-02` | 98.0 | データ・数値・比較 | 導入前後の処理時間(12 分 → 90 秒) |
150
+ | `sc-03` | 232.0 | 感情・主張の瞬間 | 発話「正直、ここまで変わるとは思っていませんでした。」 |
151
+
152
+ ### ケース 1 — `allowed_means` が全許可(7 値すべて)
153
+
154
+ ```json
155
+ ["実写 B ロール", "スクリーン録画・資料", "ストック素材", "AI 生成", "3D", "HTML 図解", "文字演出"]
156
+ ```
157
+
158
+ | scene | 表の行 | 第一候補 | フィルタ判定 | 採用手段 | 採用素材 |
159
+ |---|---|---|---|---|---|
160
+ | `sc-01` | 製品・物体の説明 | 3D モデル | `3D` は許可 → 通過 | 3D | `catalog/3d/modern-smartphone` |
161
+ | `sc-02` | データ・数値・比較 | HTML グラフ/表 | `HTML 図解` は許可 → 通過 | HTML 図解 | 生成(overlay HTML)+ 書体 `catalog/font/noto-sans-jp` |
162
+ | `sc-03` | 感情・主張の瞬間 | 文字演出(語レベル) | `文字演出` は許可 → 通過 | 文字演出 | `catalog/telop/ref3_mincho_flash` |
163
+
164
+ 素材の選定根拠(カタログ実測):
165
+
166
+ - `sc-01`: `catalog/3d/` の 3 件を `when_to_use` で突き合わせ、`modern-smartphone` の
167
+ 「アプリ紹介・UI 解説・プロダクトデモで、実機に画面を映し込んだモックアップ映像を作るとき」が
168
+ シーンの意味と一致する(`vintage-camera` はレトロ小物、`studio-hdri` は環境光であり不一致)。
169
+ `license.spdx` = `CC0-1.0` / `attribution_required: false` → クレジット不要。`remote: true` の
170
+ ため取得が要ることを素材計画に明記する。
171
+ - `sc-02`: `catalog/` にグラフ・表のカテゴリは存在しない(実測のディレクトリは
172
+ 3d / audio / broll / font / luts / telop)。
173
+ 三択の「なければ生成」として overlay HTML を自作し、書体は `catalog/font/noto-sans-jp`
174
+ (`OFL-1.1` / クレジット不要)を使う。**「使わない」列の 3D の飾りは、`3D` が許可されていても
175
+ 置かない。**
176
+ - `sc-03`: `catalog/telop/index.jsonl` を `use_when.beats ⊇ emotion` で検索するとヒットは 3 件
177
+ (`ref3_karaoke_flash` = エモい歌モノ / `ref3_kid_karaoke` = 子ども向け / `ref3_tl_r3s7_07` =
178
+ 昭和ラジオ風)で、いずれも解説トーン(真面目)と不一致だった。**同じ「文字演出」の範囲内で**
179
+ `tone` 一致を優先し、`roles: emphasis` かつ `tone: 真面目・エモい` の `ref3_mincho_flash`
180
+ (極太明朝ドン)を採用する。第一候補の手段は変えていないため候補順位の逸脱ではないが、
181
+ `use_when.beats` が一致しない選択であるため理由を記録する。
182
+
183
+ 記録行(`decision-log.md` の `material`):
184
+
185
+ ```text
186
+ sc-01 @ 24.0 | 意味: 製品・物体の説明 | 行: 製品・物体の説明 / 第一候補 | 手段: 3D | 素材: modern-smartphone(catalog / CC0-1.0 / クレジット不要) | 理由: when_to_use「実機に画面を映し込んだモックアップ」がシーンの意味に一致
187
+ sc-02 @ 98.0 | 意味: データ・数値・比較 | 行: データ・数値・比較 / 第一候補 | 手段: HTML 図解 | 素材: overlays/sc-02-chart.html(生成 / 書体 noto-sans-jp OFL-1.1 / クレジット不要) | 理由: catalog にグラフ素材のカテゴリが無く三択の「なければ生成」。3D の飾りは禁止列のため不使用
188
+ sc-03 @ 232.0 | 意味: 感情・主張の瞬間 | 行: 感情・主張の瞬間 / 第一候補 | 手段: 文字演出 | 素材: ref3_mincho_flash(catalog/telop / 来歴 akari-telop / クレジット不要) | 理由: emotion 一致の 3 件はトーン不一致のため、同じ文字演出の中で tone 一致(真面目・エモい)の emphasis を採用
189
+ ```
190
+
191
+ ### ケース 2 — `3D` と `AI 生成` が不許可(5 値)
192
+
193
+ ```json
194
+ ["実写 B ロール", "スクリーン録画・資料", "ストック素材", "HTML 図解", "文字演出"]
195
+ ```
196
+
197
+ | scene | 表の行 | 第一候補 | フィルタ判定 | 採用手段 | 採用素材 |
198
+ |---|---|---|---|---|---|
199
+ | `sc-01` | 製品・物体の説明 | 3D モデル | `3D` が**除外** → 第二候補へ | 実写 B ロール | `catalog/broll/laptop-typing-closeup` |
200
+ | `sc-02` | データ・数値・比較 | HTML グラフ/表 | `HTML 図解` は許可 → 通過 | HTML 図解 | 生成(overlay HTML)+ 書体 `catalog/font/noto-sans-jp` |
201
+ | `sc-03` | 感情・主張の瞬間 | 文字演出(語レベル) | `文字演出` は許可 → 通過 | 文字演出 | `catalog/telop/ref3_mincho_flash` |
202
+
203
+ ケース 1 との差分と、`AI 生成` 不許可が効いた箇所:
204
+
205
+ - `sc-01` **だけが変わる**。第一候補の `3D` が除外されたため第二候補「実写 B ロール」へ移り、
206
+ `catalog/broll/` の唯一のエントリ `laptop-typing-closeup` の `when_to_use`
207
+ 「SaaS/アプリ紹介、リモートワーク解説…作業中であることを示す一般的な手元ショット」が
208
+ シーンの意味と一致する。`LicenseRef-Mixkit-Free-License` / `attribution_required: false` で
209
+ クレジットは不要だが、`source.license_at_source` が**素材そのままの再配布を禁じている**ため、
210
+ プロジェクトへの複製は可・**公開リポジトリへはコミットしない**。
211
+ - `AI 生成` 不許可により、`sc-01` で「3D の代わりに AI 生成の製品カット動画を作る」案は候補に
212
+ ならない(`実写 B ロール` が許可でも、その素材を**生成で用意する**経路が塞がる)。同じ理由で
213
+ `sc-03` のテロップ背景に AI 生成画像を敷く案も落ち、語レベルの文字演出だけで構成する。
214
+ - `sc-02` は不変である。`HTML 図解` は許可されたままであり、禁止列の「3D の飾り」は
215
+ ケース 1 でもケース 2 でも置かない(`allowed_means` の可否と無関係に禁止列だから)。
216
+ - overlay HTML の自作(`sc-02` / `sc-03`)は `HTML 図解` / `文字演出` のチェックで扱うため、
217
+ `AI 生成` 不許可の影響を受けない(§表の手段と `allowed_means` 語彙の対応)。
218
+
219
+ 記録行(差分のある `sc-01` のみ。`sc-02` / `sc-03` はケース 1 と同一):
220
+
221
+ ```text
222
+ sc-01 @ 24.0 | 意味: 製品・物体の説明 | 行: 製品・物体の説明 / 第二候補 | 手段: 実写 B ロール | 素材: laptop-typing-closeup(catalog / LicenseRef-Mixkit-Free-License / クレジット不要) | 理由: 第一候補 3D が allowed_means で除外。when_to_use「SaaS/アプリ紹介…手元ショット」が一致。再配布禁止のため公開リポジトリへコミットしない
223
+ ```
224
+
225
+ ### 全滅の検算
226
+
227
+ 仮にケース 2 からさらに `実写 B ロール` と `ストック素材` も落ちた場合、`sc-01` の行の候補
228
+ (3D → 実写 B ロール)は尽きる。このとき `sc-01` は**素の映像 + 字幕**とし、次の 1 行を残す。
229
+ 「文字だけで説明しない」(禁止列)は表現手段としての文字演出を主役に据えないという意味であり、
230
+ 全滅時のフォールバック(素の映像 + 字幕)を禁じるものではない。
231
+
232
+ ```text
233
+ sc-01 @ 24.0 | 意味: 製品・物体の説明 | 行: 製品・物体の説明 / 全滅 | 手段: —(全滅 → 素の映像 + 字幕) | 素材: なし | 理由: 3D・実写 B ロール・ストック素材がいずれも allowed_means で除外
234
+ ```
235
+
236
+ ### 自己整合の確認
237
+
238
+ - 6 件の選択(3 シーン × 2 通り)はすべて対応表の**同じ行の第一候補または第二候補**であり、
239
+ 行をまたいだ選択・表に無い手段は 1 件も無い。
240
+ - 「使わない」列に触れた選択は 0 件(`sc-02` の 3D の飾り、`sc-03` の情報系オーバーレイ、
241
+ `sc-01` の「文字だけで説明」はいずれも不採用)。
242
+ - **1 シーン 1 主役**: 6 件とも主張する手段は 1 つで、字幕は補助に留めている。
243
+ - 候補順位の逸脱は 0 件(`sc-01` ケース 2 の第二候補は、第一候補がフィルタで除外された結果である)。
244
+ - 記録行は 6 件 + 全滅の検算 1 件のすべてに存在し、いずれも「意味 → 行 → 素材 id」を含む。
245
+
246
+ ## 検証(2026-07-23 実測)
247
+
248
+ worked example が引いたカタログの実データは次で確認した(`catalog/` は読み取りのみ)。
249
+
250
+ ```
251
+ $ ls catalog/3d | tr '\n' ' '
252
+ INDEX.md modern-smartphone studio-hdri vintage-camera
253
+ $ node -e "const m=require('./catalog/3d/modern-smartphone/meta.json');console.log(m.license.spdx,m.license.attribution_required,m.remote)"
254
+ CC0-1.0 false true
255
+ $ node -e "const m=require('./catalog/broll/laptop-typing-closeup/meta.json');console.log(m.license.spdx,m.license.attribution_required)"
256
+ LicenseRef-Mixkit-Free-License false
257
+ $ node -e "const m=require('./catalog/font/noto-sans-jp/meta.json');console.log(m.license.spdx,m.license.attribution_required)"
258
+ OFL-1.1 false
259
+ ```
260
+
261
+ `catalog/telop/index.jsonl`(36 件)を `use_when.beats ⊇ emotion` で絞ると 3 件
262
+ (`ref3_karaoke_flash` / `ref3_kid_karaoke` / `ref3_tl_r3s7_07`)であり、採用した
263
+ `ref3_mincho_flash` は `roles: ["emphasis"]` / `tone: ["真面目","エモい"]` / `strength: high` である。
264
+
265
+ ケース 1 の `sc-02` / `sc-03` の overlay HTML を一時プロジェクトへ置いた `edit.json`
266
+ (`version: 0` + 単一 `source`)は、`validate-edit.mjs` が `OK`、`edit-lint` が
267
+ `PASS (0 findings, 5 skipped)` である(本リーフの選択が既存の検証手順をそのまま通ることの実測。
268
+ 検証の正は [execution.md](execution.md) §4 の [edit-lint](../edit-lint/SKILL.md) 実行であり、
269
+ 本リーフは検証手順を追加しない)。
270
+
271
+ ## よくある間違い
272
+
273
+ - 手段を先に決め、後からその手段が似合うシーンを探す(意味が手段を決める、の逆流)。
274
+ - 「カタログに良い 3D があったから」を選択理由に書く。目新しさ・使いたさは理由にならない。
275
+ - 1 シーンに主張する手段を 2 つ以上置く(3D + 全画面グラフ + 語レベル文字演出の同時発火)。
276
+ - `allowed_means` を読まずに対応表だけで決める。フィルタは対応表より後段ではなく、**候補を
277
+ 減らす前提条件**である。
278
+ - 第一候補が `allowed_means` で除外されたとき、第二候補へ行かず「近い手段」へ滑らせる
279
+ (3D 不許可 → 3D 風のストック CG、をしない)。
280
+ - 全滅したのに何かを埋めようとする。全滅の既定は**素の映像 + 字幕**である。
281
+ - 「使わない」列の手段を、`allowed_means` に含まれていることを理由に採用する。許可は義務ではない。
282
+ - `AI 生成` を `allowed_means` だけで判断し、intake の方針を見ない(二重ゲートである)。
283
+ - 素材を `title` / `description` の語感で選び、`when_to_use` と `tags` を突き合わせない。
284
+ - `meta.json` のライセンスを確認せずに採用する。`attribution_required: true` ならクレジット文の
285
+ 義務が、再配布禁止なら公開リポジトリへコミットしない義務が発生する。
286
+ - `catalog/` のエントリを取得済みの実体だと思い込む(`remote: true` の索引であり実体は無い)。
287
+ - 該当ヒットが無いのに「あれば提案」と記録する、またはプレビューを捏造する。
288
+ - 除外・全滅・不採用を記録せずに黙って落とす。除外も決定であり 1 行を残す。
289
+ - 候補順位を飛ばした選択の理由を書かない(理由なき逸脱は不可。既定は第一候補)。
290
+ - ハードフィルタを通ったことを承認と読み替え、Checkpoint 2 を省略する。
@@ -0,0 +1,52 @@
1
+ # plan.json — 素材ゼロから仮枠タイムラインを確定する
2
+
3
+ 正本契約: [contract-2026-07-20-plan-json-v0.md](../../docs/contract-2026-07-20-plan-json-v0.md)。
4
+ 本リーフは [workflow.md](workflow.md) §2「素材がゼロの場合」の分岐からだけ読む。
5
+ 録画素材がある場合は plan.json を作らず、従来どおり分析統合からチャットでの方針提示へ進む
6
+ (確度に応じてステップを飛ばせる 1 本のパイプライン。仮枠は方向性が不確かなときだけ効く)。
7
+
8
+ ## 1. 質問対話で方針を深掘る
9
+
10
+ - 選択肢式(ABC 回答)の質問を 1 問ずつ重ね、目的・尺・トーン・構成ビートを確定させる。
11
+ 1 問 = 1 決定にし、複合質問で回答を曖昧にしない
12
+ - 対話サーフェスは [decision-cards](../../packages/decision-cards/) の既存機構を
13
+ そのまま使う: `<plan-dir>/plan-dialogue.html` + `<plan-dir>/plan-dialogue.html.decisions.json`
14
+ の別ペアを作り、`node packages/decision-cards/report-helper.mjs` で提示する。
15
+ ヘルパー不通時はチャットの明示承認で代替し、その旨を記録する([approvals-and-generation.md](approvals-and-generation.md)
16
+ の Checkpoint 運用と同じ代替規約)
17
+ - この decisions.json は plan-dialogue 専用であり、`decision-log.md`(判断記録)とはファイルを
18
+ 分ける。混ぜない(decisions.json = 対話の生データ、decision-log.md = 確定した決定の要約)
19
+
20
+ ## 2. plan.json を書く
21
+
22
+ - 置き場所は `<plan-dir>/plan.json`(`decision-log.md` と同じディレクトリ。AKARI プロジェクトでは
23
+ `planning/` ロールが既定)
24
+ - 対話で決まった構成ビートを `slots[]`(配列順 = timeline 順、`start` は書かない)に、
25
+ 決定事項(尺の上限・確定尺・位置つき指示)を `constraints[]` に落とす。
26
+ 書式・必須キー・null 規約は契約 §1 のフィールド表に従う
27
+ - 対話中の slot は `confidence: "proposed"` + `fill.method: null` で書き始めてよい。
28
+ 人間が対話で確定させた項目だけを `locked` にする。**AI の判断で locked にしない**
29
+ - 同一ファイルを段階的に更新する(`decision-log.md` への追記と同じ、確定した事実だけを積み増す
30
+ 規律)。決定の経緯は対話の decisions.json が持つため、plan.json 側には結果だけを書く
31
+ - 書いたら毎回検証する:
32
+ `node packages/schemas/bin/validate-plan.mjs <plan-dir>/plan.json`
33
+ (error 0 件を維持。warning は仮枠の未成熟として許容されるが、完了報告に列挙する)
34
+
35
+ ## 3. 確定と接続
36
+
37
+ - 方針が確定したら(対話 decisions.json の `completedAt` 非 null、またはチャット明示承認)、
38
+ `.akari/events/` に gate event `plan-confirmed` を記録する
39
+ - 以降の工程([report-guide.md](report-guide.md) の「方針をチャットで決める」節)では、
40
+ 編集方針のチャット提示が plan.json の slot id を根拠として参照する。台本や構成をチャット側で
41
+ 再フリーテキスト化しない(2026-07-22 改訂: レポート生成は analyze-project へ移管済み。
42
+ plan.json の位置づけ自体は変わらない)
43
+ - BGM・SFX・B ロール等の素材三択(提案/生成/不採用)は従来どおり
44
+ [report-guide.md の「素材計画」節](report-guide.md#素材計画)の管轄。plan.json には
45
+ 持ち込まない(契約 §5)
46
+
47
+ ## 4. 仮枠プレビュー(現時点の運用)
48
+
49
+ 仮枠の再生 QA は「静止画 + TTS + テキストカードを通常の edit.json v1 にコンパイルする」
50
+ 規約(契約 §6)で行う設計だが、**コンパイラは未実装**。当面は静止コンセプトをチャットで
51
+ 提示する従来運用(workflow.md §2)を維持し、動画生成は承認工程まで保留する。
52
+ コンパイラ実装後にこの節を差し替える。
@@ -0,0 +1,74 @@
1
+ # recipe.md — レシピ凍結と好みの記憶
2
+
3
+ 正本契約: [contract-2026-07-25-recipe-v0.md](../../docs/contract-2026-07-25-recipe-v0.md)。
4
+ スキーマ: [recipe.schema.json](../../packages/schemas/recipe.schema.json)。
5
+ 検証 CLI: `node packages/schemas/bin/validate-recipe.mjs <path>`。
6
+
7
+ 本リーフは 2 つの独立した手順を持つ。**recall**([workflow.md](workflow.md) の方針決めの前段
8
+ から読む)と **freeze**(実行承認後の完了処理から読む)。学習・自動適用はしない —
9
+ 確認済みのみ記録し、出所付きで提示するだけのファイル契約である(契約 §0)。
10
+
11
+ ## 1. recall 手順(方針決めの前段で行う)
12
+
13
+ 方針をチャットで人間に提示する前に、一度だけ次を行う。
14
+
15
+ 1. `~/.akari/recipes/` を列挙する(存在しなければ何もせず通常フローへ進む — error にしない)
16
+ 2. `workflow: "edit"` のレシピだけを対象にする(`workflow: "research"` は無視する)
17
+ 3. 該当レシピが 1 件以上あれば、`node packages/schemas/bin/validate-recipe.mjs` で検証してから
18
+ 使う(version が新しすぎて read-only 停止したレシピは無視して続行する — recall の失敗は
19
+ 工程を止めない。契約 §5 の劣化規約)
20
+ 4. 検証を通ったレシピの `confirmed` を、**出所(`provenance[].confirmed_by` / `at`)を名乗る
21
+ 推奨**としてチャットで提示する。例:
22
+ 「前回の **<名前>**(<source_project>)では <aspect> / <target_duration_band> 等を
23
+ 採用していました。今回も同じにしますか、それとも今回用に決め直しますか」
24
+ 5. 提示は**現在の依頼を上書きしない**。人間が明示的に「<名前>でもう一本」「前回と同じで」と
25
+ 採用を宣言したときだけ、対応する `confirmed` フィールドを今回の方針・素材計画へ**一括で**
26
+ 反映してよい(契約 §3 規律 3)。採用宣言が無ければ、レシピは参考情報のまま通常の
27
+ Checkpoint 1〜3([approvals-and-generation.md](approvals-and-generation.md))を進める
28
+ 6. レシピの提示は **intake の進め方フォーム等、必須質問をスキップさせる理由にしない**。
29
+ レシピが見つかっても intake は通常どおり提出させる(契約 §3 規律 2)
30
+ 7. 複数の `workflow: "edit"` レシピが見つかった場合は、`frozen_at` が新しいものを先頭にして
31
+ 候補一覧として提示する(自動選択しない。どれを使うか、あるいは使わないかは人間が選ぶ)
32
+
33
+ ## 2. freeze 手順(完了処理で一度だけ申し出る)
34
+
35
+ Checkpoint 3(実行)の承認を得て `edit.json` と最終 overlay を作った後、**そのプロジェクトで
36
+ まだ freeze を提案していなければ**、一度だけ(offer-once)レシピ化をチャットで申し出る。
37
+ 既に同一プロジェクト内で申し出済み(採用・却下いずれの回答でも)なら、二度と申し出ない
38
+ (契約 §3 規律 4)。
39
+
40
+ 1. **確認済みの値だけを集める**。`confirmed` に書いてよいのは、人間が明示承認した
41
+ チェックポイントを実際に通過した値だけである。推測やデフォルト採用で埋まった値は
42
+ **確認済みのみ記録**の契約に反するため、たとえ最終出力に含まれていても記録しない
43
+ (契約 §3 規律 1)。値ごとの出所は次のように対応させる(契約 §4):
44
+ - `intake`: 進め方フォーム(`intake.json`)提出で決まった値
45
+ - `structure-confirm`: 研究/構成の確定決定カードで決まった値(edit-plan では通常発生しない。
46
+ 素材ゼロで plan.json 経由の企画確定を経た場合のみ該当)
47
+ - `edit-approval`: Checkpoint 1(方針)/ Checkpoint 2(素材計画)の明示承認で決まった値
48
+ (`caption_style_ref` / `bgm_profile` / `overlay_kinds` / `narration` は多くの場合ここ)
49
+ - `render-approval`: Checkpoint 3(実行 manifest)の明示承認で決まった値
50
+ (出力 `aspect` は多くの場合ここ)
51
+ 2. 対象は `confirmed.aspect` / `target_duration_band` / `caption_style_ref` / `bgm_profile` /
52
+ `overlay_kinds[]` / `narration`(`engine`/`voice`)のうち、実際に確認済みのものだけ。
53
+ 1 件も確認済みが無ければ freeze を申し出ない
54
+ 3. 名前(kebab-case)を人間に確認する。既存の同名レシピがあれば上書きしてよいか確認する
55
+ (無言上書きをしない)
56
+ 4. `~/.akari/recipes/<name>.json` を組み立て、`node packages/schemas/bin/validate-recipe.mjs`
57
+ で検証する(exit 0 を確認するまで保存済みとして扱わない)
58
+ 5. 検証を通ったら `~/.akari/recipes/` に保存し(ディレクトリが無ければ作成する)、
59
+ 人間に次の定型文で確認する(呼び出し方まで教える。名前はシステムが思い出させるものであり
60
+ ユーザーが暗記するものではない):
61
+
62
+ > **<名前>** として保存しました。今後のために記憶します。次回は『<名前>でもう一本』か『前回と同じで』と言ってください。
63
+
64
+ 6. これでそのプロジェクトの freeze 申し出は完了(offer-once)。同じプロジェクト内で
65
+ 再度申し出ない。別プロジェクトで再び完了処理に到達したときは、新しい申し出として扱う
66
+
67
+ ## よくある間違い
68
+
69
+ - 推測やデフォルト採用の値を `confirmed` に書く(人間が明示承認した値だけが確認済み)
70
+ - レシピの推奨値で今回の依頼を上書きする、または intake 等の必須質問をスキップする
71
+ - 同一プロジェクトで freeze を何度も申し出る(offer-once 違反)
72
+ - レシピ採用の明示宣言(「前回と同じで」等)が無いのに `confirmed` を無言で今回の計画へ流用する
73
+ - `~/.akari/recipes/` 以外(プロジェクト内 `planning/` 等)にレシピを保存する
74
+ - `validate-recipe.mjs` を通さずに freeze 完了として報告する
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 1,
3
+ "asset": "assets/interview.mp4",
4
+ "decisions": [
5
+ {
6
+ "id": "opening-hook",
7
+ "summary": "冒頭の結論を先に見せる",
8
+ "status": "approved",
9
+ "updatedAt": "2026-07-15T12:00:00.000Z"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 1,
3
+ "id": "2026-07-15T12-00-00-000Z-report-approved-example",
4
+ "type": "report-approved",
5
+ "occurredAt": "2026-07-15T12:00:00.000Z",
6
+ "artifact": "planning/report.md"
7
+ }