rig-create 1.0.2 → 1.0.4

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 (484) hide show
  1. package/README.md +16 -0
  2. package/docs/PROJECT.md +10 -0
  3. package/package.json +3 -1
  4. package/scripts/npm-json.ts +74 -0
  5. package/scripts/verify-example-seals.ts +148 -0
  6. package/src/next.ts +90 -12
  7. package/templates/example-chain/.gitignore +6 -0
  8. package/templates/example-chain/.npmignore +1 -0
  9. package/templates/example-chain/checkpoints/0a-interview-options/.gitignore +6 -0
  10. package/templates/example-chain/checkpoints/0a-interview-options/.npmignore +1 -0
  11. package/templates/example-chain/checkpoints/0b-plan-pending/.gitignore +6 -0
  12. package/templates/example-chain/checkpoints/0b-plan-pending/.npmignore +1 -0
  13. package/templates/example-chain/checkpoints/1-parts-verdict/.gitignore +6 -0
  14. package/templates/example-chain/checkpoints/1-parts-verdict/.npmignore +1 -0
  15. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/config.json +88 -0
  16. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/painting_in_rig.png +0 -0
  17. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/background.png +0 -0
  18. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/eye_l.png +0 -0
  19. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/eye_r.png +0 -0
  20. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/face.png +0 -0
  21. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/lantern.png +0 -0
  22. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/torso.png +0 -0
  23. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts.json +188 -0
  24. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/recomposite_rig.png +0 -0
  25. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/interview-requirements.json +8 -0
  26. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/run.json +40 -0
  27. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
  28. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.json +674 -0
  29. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
  30. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.png +0 -0
  31. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/background.png +0 -0
  32. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/eye_l.png +0 -0
  33. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/eye_r.png +0 -0
  34. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/face.png +0 -0
  35. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/lantern.png +0 -0
  36. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/torso.png +0 -0
  37. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/mesh_report.json +15 -0
  38. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/motion.json +137 -0
  39. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/rig.json +536 -0
  40. package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/run.json +52 -0
  41. package/templates/example-chain/checkpoints/2-rigging-answers/.gitignore +6 -0
  42. package/templates/example-chain/checkpoints/2-rigging-answers/.npmignore +1 -0
  43. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/config.json +88 -0
  44. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/painting_in_rig.png +0 -0
  45. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/background.png +0 -0
  46. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/eye_l.png +0 -0
  47. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/eye_r.png +0 -0
  48. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/face.png +0 -0
  49. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/lantern.png +0 -0
  50. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/torso.png +0 -0
  51. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts.json +188 -0
  52. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/recomposite_rig.png +0 -0
  53. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/interview-requirements.json +8 -0
  54. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/run.json +40 -0
  55. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
  56. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.json +674 -0
  57. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
  58. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.png +0 -0
  59. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/background.png +0 -0
  60. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/eye_l.png +0 -0
  61. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/eye_r.png +0 -0
  62. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/face.png +0 -0
  63. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/lantern.png +0 -0
  64. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/torso.png +0 -0
  65. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/mesh_report.json +15 -0
  66. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/motion.json +137 -0
  67. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/rig.json +536 -0
  68. package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/run.json +52 -0
  69. package/templates/example-chain/checkpoints/3-rig-review/.gitignore +6 -0
  70. package/templates/example-chain/checkpoints/3-rig-review/.npmignore +1 -0
  71. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/config.json +88 -0
  72. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/painting_in_rig.png +0 -0
  73. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/background.png +0 -0
  74. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/eye_l.png +0 -0
  75. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/eye_r.png +0 -0
  76. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/face.png +0 -0
  77. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/lantern.png +0 -0
  78. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/torso.png +0 -0
  79. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts.json +188 -0
  80. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/recomposite_rig.png +0 -0
  81. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/interview-requirements.json +8 -0
  82. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/run.json +40 -0
  83. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
  84. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.json +674 -0
  85. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
  86. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.png +0 -0
  87. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/background.png +0 -0
  88. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/eye_l.png +0 -0
  89. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/eye_r.png +0 -0
  90. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/face.png +0 -0
  91. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/lantern.png +0 -0
  92. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/torso.png +0 -0
  93. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/mesh_report.json +15 -0
  94. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/motion.json +137 -0
  95. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/rig.json +536 -0
  96. package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/run.json +52 -0
  97. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/config.json +88 -0
  98. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/interview-requirements.json +8 -0
  99. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/run.json +40 -0
  100. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.atlas +28 -0
  101. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.json +674 -0
  102. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
  103. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.png +0 -0
  104. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/background.png +0 -0
  105. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/eye_l.png +0 -0
  106. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/eye_r.png +0 -0
  107. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/face.png +0 -0
  108. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/lantern.png +0 -0
  109. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/torso.png +0 -0
  110. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts.json +188 -0
  111. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/background.png +0 -0
  112. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/eye_l.png +0 -0
  113. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/eye_r.png +0 -0
  114. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/face.png +0 -0
  115. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/lantern.png +0 -0
  116. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/torso.png +0 -0
  117. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/mesh_report.json +15 -0
  118. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/motion.json +137 -0
  119. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/rig.json +536 -0
  120. package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/run.json +52 -0
  121. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/run.json +40 -0
  122. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.atlas +28 -0
  123. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.json +674 -0
  124. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.model.json +1072 -0
  125. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.png +0 -0
  126. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/painting_in_rig.png +0 -0
  127. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/background.png +0 -0
  128. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/eye_l.png +0 -0
  129. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/eye_r.png +0 -0
  130. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/face.png +0 -0
  131. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/lantern.png +0 -0
  132. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/torso.png +0 -0
  133. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts.json +188 -0
  134. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/background.png +0 -0
  135. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/eye_l.png +0 -0
  136. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/eye_r.png +0 -0
  137. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/face.png +0 -0
  138. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/lantern.png +0 -0
  139. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/torso.png +0 -0
  140. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/mesh_report.json +15 -0
  141. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/motion.json +137 -0
  142. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/rig.json +536 -0
  143. package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/run.json +52 -0
  144. package/templates/example-chain/checkpoints/4-direction-post/.gitignore +6 -0
  145. package/templates/example-chain/checkpoints/4-direction-post/.npmignore +1 -0
  146. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/config.json +88 -0
  147. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/painting_in_rig.png +0 -0
  148. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/background.png +0 -0
  149. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/eye_l.png +0 -0
  150. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/eye_r.png +0 -0
  151. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/face.png +0 -0
  152. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/lantern.png +0 -0
  153. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/torso.png +0 -0
  154. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts.json +188 -0
  155. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/recomposite_rig.png +0 -0
  156. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/interview-requirements.json +8 -0
  157. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/run.json +40 -0
  158. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
  159. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.json +674 -0
  160. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
  161. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.png +0 -0
  162. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/background.png +0 -0
  163. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/eye_l.png +0 -0
  164. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/eye_r.png +0 -0
  165. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/face.png +0 -0
  166. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/lantern.png +0 -0
  167. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/torso.png +0 -0
  168. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/mesh_report.json +15 -0
  169. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/motion.json +137 -0
  170. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/rig.json +536 -0
  171. package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/run.json +52 -0
  172. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/config.json +88 -0
  173. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/interview-requirements.json +8 -0
  174. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/run.json +40 -0
  175. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.atlas +28 -0
  176. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.json +674 -0
  177. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
  178. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.png +0 -0
  179. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/background.png +0 -0
  180. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/eye_l.png +0 -0
  181. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/eye_r.png +0 -0
  182. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/face.png +0 -0
  183. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/lantern.png +0 -0
  184. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/torso.png +0 -0
  185. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts.json +188 -0
  186. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/background.png +0 -0
  187. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/eye_l.png +0 -0
  188. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/eye_r.png +0 -0
  189. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/face.png +0 -0
  190. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/lantern.png +0 -0
  191. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/torso.png +0 -0
  192. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/mesh_report.json +15 -0
  193. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/motion.json +137 -0
  194. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/rig.json +536 -0
  195. package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/run.json +52 -0
  196. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/run.json +40 -0
  197. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.atlas +28 -0
  198. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.json +674 -0
  199. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.model.json +1072 -0
  200. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.png +0 -0
  201. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/painting_in_rig.png +0 -0
  202. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/background.png +0 -0
  203. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/eye_l.png +0 -0
  204. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/eye_r.png +0 -0
  205. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/face.png +0 -0
  206. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/lantern.png +0 -0
  207. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/torso.png +0 -0
  208. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts.json +188 -0
  209. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/background.png +0 -0
  210. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/eye_l.png +0 -0
  211. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/eye_r.png +0 -0
  212. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/face.png +0 -0
  213. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/lantern.png +0 -0
  214. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/torso.png +0 -0
  215. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/mesh_report.json +15 -0
  216. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/motion.json +137 -0
  217. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/rig.json +536 -0
  218. package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/run.json +52 -0
  219. package/templates/example-chain/derived/drafts/chain/config.json +88 -0
  220. package/templates/example-chain/derived/drafts/chain/input/painting_in_rig.png +0 -0
  221. package/templates/example-chain/derived/drafts/chain/input/parts/background.png +0 -0
  222. package/templates/example-chain/derived/drafts/chain/input/parts/eye_l.png +0 -0
  223. package/templates/example-chain/derived/drafts/chain/input/parts/eye_r.png +0 -0
  224. package/templates/example-chain/derived/drafts/chain/input/parts/face.png +0 -0
  225. package/templates/example-chain/derived/drafts/chain/input/parts/lantern.png +0 -0
  226. package/templates/example-chain/derived/drafts/chain/input/parts/torso.png +0 -0
  227. package/templates/example-chain/derived/drafts/chain/input/parts.json +188 -0
  228. package/templates/example-chain/derived/drafts/chain/input/recomposite_rig.png +0 -0
  229. package/templates/example-chain/derived/drafts/chain/interview-requirements.json +8 -0
  230. package/templates/example-chain/derived/drafts/chain/out/check/build/run.json +40 -0
  231. package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
  232. package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.json +674 -0
  233. package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
  234. package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.png +0 -0
  235. package/templates/example-chain/derived/drafts/chain/out/images/background.png +0 -0
  236. package/templates/example-chain/derived/drafts/chain/out/images/eye_l.png +0 -0
  237. package/templates/example-chain/derived/drafts/chain/out/images/eye_r.png +0 -0
  238. package/templates/example-chain/derived/drafts/chain/out/images/face.png +0 -0
  239. package/templates/example-chain/derived/drafts/chain/out/images/lantern.png +0 -0
  240. package/templates/example-chain/derived/drafts/chain/out/images/torso.png +0 -0
  241. package/templates/example-chain/derived/drafts/chain/out/mesh_report.json +15 -0
  242. package/templates/example-chain/derived/drafts/chain/out/motion.json +137 -0
  243. package/templates/example-chain/derived/drafts/chain/out/rig.json +536 -0
  244. package/templates/example-chain/derived/drafts/chain/out/run.json +52 -0
  245. package/templates/example-chain/derived/review/v1/config.json +88 -0
  246. package/templates/example-chain/derived/review/v1/interview-requirements.json +8 -0
  247. package/templates/example-chain/derived/review/v1/out/check/build/run.json +40 -0
  248. package/templates/example-chain/derived/review/v1/out/check/build/skeleton.atlas +28 -0
  249. package/templates/example-chain/derived/review/v1/out/check/build/skeleton.json +674 -0
  250. package/templates/example-chain/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
  251. package/templates/example-chain/derived/review/v1/out/check/build/skeleton.png +0 -0
  252. package/templates/example-chain/derived/review/v1/out/parts/background.png +0 -0
  253. package/templates/example-chain/derived/review/v1/out/parts/eye_l.png +0 -0
  254. package/templates/example-chain/derived/review/v1/out/parts/eye_r.png +0 -0
  255. package/templates/example-chain/derived/review/v1/out/parts/face.png +0 -0
  256. package/templates/example-chain/derived/review/v1/out/parts/lantern.png +0 -0
  257. package/templates/example-chain/derived/review/v1/out/parts/torso.png +0 -0
  258. package/templates/example-chain/derived/review/v1/out/parts.json +188 -0
  259. package/templates/example-chain/derived/review/v1/out/rig/images/background.png +0 -0
  260. package/templates/example-chain/derived/review/v1/out/rig/images/eye_l.png +0 -0
  261. package/templates/example-chain/derived/review/v1/out/rig/images/eye_r.png +0 -0
  262. package/templates/example-chain/derived/review/v1/out/rig/images/face.png +0 -0
  263. package/templates/example-chain/derived/review/v1/out/rig/images/lantern.png +0 -0
  264. package/templates/example-chain/derived/review/v1/out/rig/images/torso.png +0 -0
  265. package/templates/example-chain/derived/review/v1/out/rig/mesh_report.json +15 -0
  266. package/templates/example-chain/derived/review/v1/out/rig/motion.json +137 -0
  267. package/templates/example-chain/derived/review/v1/out/rig/rig.json +536 -0
  268. package/templates/example-chain/derived/review/v1/out/rig/run.json +52 -0
  269. package/templates/example-chain/outputs/v1/out/check/build/run.json +40 -0
  270. package/templates/example-chain/outputs/v1/out/check/build/skeleton.atlas +28 -0
  271. package/templates/example-chain/outputs/v1/out/check/build/skeleton.json +674 -0
  272. package/templates/example-chain/outputs/v1/out/check/build/skeleton.model.json +1072 -0
  273. package/templates/example-chain/outputs/v1/out/check/build/skeleton.png +0 -0
  274. package/templates/example-chain/outputs/v1/out/painting_in_rig.png +0 -0
  275. package/templates/example-chain/outputs/v1/out/parts/background.png +0 -0
  276. package/templates/example-chain/outputs/v1/out/parts/eye_l.png +0 -0
  277. package/templates/example-chain/outputs/v1/out/parts/eye_r.png +0 -0
  278. package/templates/example-chain/outputs/v1/out/parts/face.png +0 -0
  279. package/templates/example-chain/outputs/v1/out/parts/lantern.png +0 -0
  280. package/templates/example-chain/outputs/v1/out/parts/torso.png +0 -0
  281. package/templates/example-chain/outputs/v1/out/parts.json +188 -0
  282. package/templates/example-chain/outputs/v1/out/rig/images/background.png +0 -0
  283. package/templates/example-chain/outputs/v1/out/rig/images/eye_l.png +0 -0
  284. package/templates/example-chain/outputs/v1/out/rig/images/eye_r.png +0 -0
  285. package/templates/example-chain/outputs/v1/out/rig/images/face.png +0 -0
  286. package/templates/example-chain/outputs/v1/out/rig/images/lantern.png +0 -0
  287. package/templates/example-chain/outputs/v1/out/rig/images/torso.png +0 -0
  288. package/templates/example-chain/outputs/v1/out/rig/mesh_report.json +15 -0
  289. package/templates/example-chain/outputs/v1/out/rig/motion.json +137 -0
  290. package/templates/example-chain/outputs/v1/out/rig/rig.json +536 -0
  291. package/templates/example-chain/outputs/v1/out/rig/run.json +52 -0
  292. package/templates/example-remesh/.gitignore +6 -0
  293. package/templates/example-remesh/.npmignore +1 -0
  294. package/templates/example-remesh/derived/drafts/remesh/config.json +88 -0
  295. package/templates/example-remesh/derived/drafts/remesh/input/painting_in_rig.png +0 -0
  296. package/templates/example-remesh/derived/drafts/remesh/input/parts/background.png +0 -0
  297. package/templates/example-remesh/derived/drafts/remesh/input/parts/eye_l.png +0 -0
  298. package/templates/example-remesh/derived/drafts/remesh/input/parts/eye_r.png +0 -0
  299. package/templates/example-remesh/derived/drafts/remesh/input/parts/face.png +0 -0
  300. package/templates/example-remesh/derived/drafts/remesh/input/parts/lantern.png +0 -0
  301. package/templates/example-remesh/derived/drafts/remesh/input/parts/torso.png +0 -0
  302. package/templates/example-remesh/derived/drafts/remesh/input/parts.json +188 -0
  303. package/templates/example-remesh/derived/drafts/remesh/input/recomposite_rig.png +0 -0
  304. package/templates/example-remesh/derived/drafts/remesh/interview-requirements.json +8 -0
  305. package/templates/example-remesh/derived/drafts/remesh/out/check/build/run.json +40 -0
  306. package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.atlas +28 -0
  307. package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.json +674 -0
  308. package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.model.json +1072 -0
  309. package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.png +0 -0
  310. package/templates/example-remesh/derived/drafts/remesh/out/images/background.png +0 -0
  311. package/templates/example-remesh/derived/drafts/remesh/out/images/eye_l.png +0 -0
  312. package/templates/example-remesh/derived/drafts/remesh/out/images/eye_r.png +0 -0
  313. package/templates/example-remesh/derived/drafts/remesh/out/images/face.png +0 -0
  314. package/templates/example-remesh/derived/drafts/remesh/out/images/lantern.png +0 -0
  315. package/templates/example-remesh/derived/drafts/remesh/out/images/torso.png +0 -0
  316. package/templates/example-remesh/derived/drafts/remesh/out/mesh_report.json +15 -0
  317. package/templates/example-remesh/derived/drafts/remesh/out/motion.json +137 -0
  318. package/templates/example-remesh/derived/drafts/remesh/out/rig.json +536 -0
  319. package/templates/example-remesh/derived/drafts/remesh/out/run.json +52 -0
  320. package/templates/example-remesh/derived/review/v1/config.json +88 -0
  321. package/templates/example-remesh/derived/review/v1/interview-requirements.json +8 -0
  322. package/templates/example-remesh/derived/review/v1/out/check/build/run.json +44 -0
  323. package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.atlas +28 -0
  324. package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.json +674 -0
  325. package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
  326. package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.png +0 -0
  327. package/templates/example-remesh/derived/review/v1/out/painting_in_rig.png +0 -0
  328. package/templates/example-remesh/derived/review/v1/out/parts/background.png +0 -0
  329. package/templates/example-remesh/derived/review/v1/out/parts/eye_l.png +0 -0
  330. package/templates/example-remesh/derived/review/v1/out/parts/eye_r.png +0 -0
  331. package/templates/example-remesh/derived/review/v1/out/parts/face.png +0 -0
  332. package/templates/example-remesh/derived/review/v1/out/parts/lantern.png +0 -0
  333. package/templates/example-remesh/derived/review/v1/out/parts/torso.png +0 -0
  334. package/templates/example-remesh/derived/review/v1/out/parts.json +188 -0
  335. package/templates/example-remesh/derived/review/v1/out/rig/images/background.png +0 -0
  336. package/templates/example-remesh/derived/review/v1/out/rig/images/eye_l.png +0 -0
  337. package/templates/example-remesh/derived/review/v1/out/rig/images/eye_r.png +0 -0
  338. package/templates/example-remesh/derived/review/v1/out/rig/images/face.png +0 -0
  339. package/templates/example-remesh/derived/review/v1/out/rig/images/lantern.png +0 -0
  340. package/templates/example-remesh/derived/review/v1/out/rig/images/torso.png +0 -0
  341. package/templates/example-remesh/derived/review/v1/out/rig/mesh_report.json +15 -0
  342. package/templates/example-remesh/derived/review/v1/out/rig/motion.json +137 -0
  343. package/templates/example-remesh/derived/review/v1/out/rig/rig.json +536 -0
  344. package/templates/example-remesh/derived/review/v1/out/rig/run.json +52 -0
  345. package/templates/example-remesh/derived/review/v2/config.json +88 -0
  346. package/templates/example-remesh/derived/review/v2/interview-requirements.json +8 -0
  347. package/templates/example-remesh/derived/review/v2/out/check/build/run.json +44 -0
  348. package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.atlas +28 -0
  349. package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.json +674 -0
  350. package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.model.json +1072 -0
  351. package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.png +0 -0
  352. package/templates/example-remesh/derived/review/v2/out/painting_in_rig.png +0 -0
  353. package/templates/example-remesh/derived/review/v2/out/parts/background.png +0 -0
  354. package/templates/example-remesh/derived/review/v2/out/parts/eye_l.png +0 -0
  355. package/templates/example-remesh/derived/review/v2/out/parts/eye_r.png +0 -0
  356. package/templates/example-remesh/derived/review/v2/out/parts/face.png +0 -0
  357. package/templates/example-remesh/derived/review/v2/out/parts/lantern.png +0 -0
  358. package/templates/example-remesh/derived/review/v2/out/parts/torso.png +0 -0
  359. package/templates/example-remesh/derived/review/v2/out/parts.json +188 -0
  360. package/templates/example-remesh/derived/review/v2/out/rig/images/background.png +0 -0
  361. package/templates/example-remesh/derived/review/v2/out/rig/images/eye_l.png +0 -0
  362. package/templates/example-remesh/derived/review/v2/out/rig/images/eye_r.png +0 -0
  363. package/templates/example-remesh/derived/review/v2/out/rig/images/face.png +0 -0
  364. package/templates/example-remesh/derived/review/v2/out/rig/images/lantern.png +0 -0
  365. package/templates/example-remesh/derived/review/v2/out/rig/images/torso.png +0 -0
  366. package/templates/example-remesh/derived/review/v2/out/rig/mesh_report.json +15 -0
  367. package/templates/example-remesh/derived/review/v2/out/rig/motion.json +137 -0
  368. package/templates/example-remesh/derived/review/v2/out/rig/rig.json +536 -0
  369. package/templates/example-remesh/derived/review/v2/out/rig/run.json +52 -0
  370. package/templates/example-remesh/derived/review/v3/config.json +88 -0
  371. package/templates/example-remesh/derived/review/v3/interview-requirements.json +8 -0
  372. package/templates/example-remesh/derived/review/v3/out/check/build/run.json +44 -0
  373. package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.atlas +28 -0
  374. package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.json +674 -0
  375. package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.model.json +1072 -0
  376. package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.png +0 -0
  377. package/templates/example-remesh/derived/review/v3/out/painting_in_rig.png +0 -0
  378. package/templates/example-remesh/derived/review/v3/out/parts/background.png +0 -0
  379. package/templates/example-remesh/derived/review/v3/out/parts/eye_l.png +0 -0
  380. package/templates/example-remesh/derived/review/v3/out/parts/eye_r.png +0 -0
  381. package/templates/example-remesh/derived/review/v3/out/parts/face.png +0 -0
  382. package/templates/example-remesh/derived/review/v3/out/parts/lantern.png +0 -0
  383. package/templates/example-remesh/derived/review/v3/out/parts/torso.png +0 -0
  384. package/templates/example-remesh/derived/review/v3/out/parts.json +188 -0
  385. package/templates/example-remesh/derived/review/v3/out/rig/images/background.png +0 -0
  386. package/templates/example-remesh/derived/review/v3/out/rig/images/eye_l.png +0 -0
  387. package/templates/example-remesh/derived/review/v3/out/rig/images/eye_r.png +0 -0
  388. package/templates/example-remesh/derived/review/v3/out/rig/images/face.png +0 -0
  389. package/templates/example-remesh/derived/review/v3/out/rig/images/lantern.png +0 -0
  390. package/templates/example-remesh/derived/review/v3/out/rig/images/torso.png +0 -0
  391. package/templates/example-remesh/derived/review/v3/out/rig/mesh_report.json +15 -0
  392. package/templates/example-remesh/derived/review/v3/out/rig/motion.json +137 -0
  393. package/templates/example-remesh/derived/review/v3/out/rig/rig.json +536 -0
  394. package/templates/example-remesh/derived/review/v3/out/rig/run.json +52 -0
  395. package/templates/example-remesh/outputs/v1/idle/frames.json +29 -0
  396. package/templates/example-remesh/outputs/v1/idle/idle@1fps/contact.png +0 -0
  397. package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0000.png +0 -0
  398. package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0001.png +0 -0
  399. package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0002.png +0 -0
  400. package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0003.png +0 -0
  401. package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0004.png +0 -0
  402. package/templates/example-remesh/outputs/v1/out/check/build/run.json +44 -0
  403. package/templates/example-remesh/outputs/v1/out/check/build/skeleton.atlas +28 -0
  404. package/templates/example-remesh/outputs/v1/out/check/build/skeleton.json +674 -0
  405. package/templates/example-remesh/outputs/v1/out/check/build/skeleton.model.json +1072 -0
  406. package/templates/example-remesh/outputs/v1/out/check/build/skeleton.png +0 -0
  407. package/templates/example-remesh/outputs/v1/out/painting_in_rig.png +0 -0
  408. package/templates/example-remesh/outputs/v1/out/parts/background.png +0 -0
  409. package/templates/example-remesh/outputs/v1/out/parts/eye_l.png +0 -0
  410. package/templates/example-remesh/outputs/v1/out/parts/eye_r.png +0 -0
  411. package/templates/example-remesh/outputs/v1/out/parts/face.png +0 -0
  412. package/templates/example-remesh/outputs/v1/out/parts/lantern.png +0 -0
  413. package/templates/example-remesh/outputs/v1/out/parts/torso.png +0 -0
  414. package/templates/example-remesh/outputs/v1/out/parts.json +188 -0
  415. package/templates/example-remesh/outputs/v1/out/rig/images/background.png +0 -0
  416. package/templates/example-remesh/outputs/v1/out/rig/images/eye_l.png +0 -0
  417. package/templates/example-remesh/outputs/v1/out/rig/images/eye_r.png +0 -0
  418. package/templates/example-remesh/outputs/v1/out/rig/images/face.png +0 -0
  419. package/templates/example-remesh/outputs/v1/out/rig/images/lantern.png +0 -0
  420. package/templates/example-remesh/outputs/v1/out/rig/images/torso.png +0 -0
  421. package/templates/example-remesh/outputs/v1/out/rig/mesh_report.json +15 -0
  422. package/templates/example-remesh/outputs/v1/out/rig/motion.json +137 -0
  423. package/templates/example-remesh/outputs/v1/out/rig/rig.json +536 -0
  424. package/templates/example-remesh/outputs/v1/out/rig/run.json +52 -0
  425. package/templates/example-remesh/outputs/v2/idle/frames.json +29 -0
  426. package/templates/example-remesh/outputs/v2/idle/idle@1fps/contact.png +0 -0
  427. package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0000.png +0 -0
  428. package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0001.png +0 -0
  429. package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0002.png +0 -0
  430. package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0003.png +0 -0
  431. package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0004.png +0 -0
  432. package/templates/example-remesh/outputs/v2/out/check/build/run.json +44 -0
  433. package/templates/example-remesh/outputs/v2/out/check/build/skeleton.atlas +28 -0
  434. package/templates/example-remesh/outputs/v2/out/check/build/skeleton.json +674 -0
  435. package/templates/example-remesh/outputs/v2/out/check/build/skeleton.model.json +1072 -0
  436. package/templates/example-remesh/outputs/v2/out/check/build/skeleton.png +0 -0
  437. package/templates/example-remesh/outputs/v2/out/painting_in_rig.png +0 -0
  438. package/templates/example-remesh/outputs/v2/out/parts/background.png +0 -0
  439. package/templates/example-remesh/outputs/v2/out/parts/eye_l.png +0 -0
  440. package/templates/example-remesh/outputs/v2/out/parts/eye_r.png +0 -0
  441. package/templates/example-remesh/outputs/v2/out/parts/face.png +0 -0
  442. package/templates/example-remesh/outputs/v2/out/parts/lantern.png +0 -0
  443. package/templates/example-remesh/outputs/v2/out/parts/torso.png +0 -0
  444. package/templates/example-remesh/outputs/v2/out/parts.json +188 -0
  445. package/templates/example-remesh/outputs/v2/out/rig/images/background.png +0 -0
  446. package/templates/example-remesh/outputs/v2/out/rig/images/eye_l.png +0 -0
  447. package/templates/example-remesh/outputs/v2/out/rig/images/eye_r.png +0 -0
  448. package/templates/example-remesh/outputs/v2/out/rig/images/face.png +0 -0
  449. package/templates/example-remesh/outputs/v2/out/rig/images/lantern.png +0 -0
  450. package/templates/example-remesh/outputs/v2/out/rig/images/torso.png +0 -0
  451. package/templates/example-remesh/outputs/v2/out/rig/mesh_report.json +15 -0
  452. package/templates/example-remesh/outputs/v2/out/rig/motion.json +137 -0
  453. package/templates/example-remesh/outputs/v2/out/rig/rig.json +536 -0
  454. package/templates/example-remesh/outputs/v2/out/rig/run.json +52 -0
  455. package/templates/example-remesh/outputs/v3/idle/frames.json +29 -0
  456. package/templates/example-remesh/outputs/v3/idle/idle@1fps/contact.png +0 -0
  457. package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0000.png +0 -0
  458. package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0001.png +0 -0
  459. package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0002.png +0 -0
  460. package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0003.png +0 -0
  461. package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0004.png +0 -0
  462. package/templates/example-remesh/outputs/v3/out/check/build/run.json +44 -0
  463. package/templates/example-remesh/outputs/v3/out/check/build/skeleton.atlas +28 -0
  464. package/templates/example-remesh/outputs/v3/out/check/build/skeleton.json +674 -0
  465. package/templates/example-remesh/outputs/v3/out/check/build/skeleton.model.json +1072 -0
  466. package/templates/example-remesh/outputs/v3/out/check/build/skeleton.png +0 -0
  467. package/templates/example-remesh/outputs/v3/out/painting_in_rig.png +0 -0
  468. package/templates/example-remesh/outputs/v3/out/parts/background.png +0 -0
  469. package/templates/example-remesh/outputs/v3/out/parts/eye_l.png +0 -0
  470. package/templates/example-remesh/outputs/v3/out/parts/eye_r.png +0 -0
  471. package/templates/example-remesh/outputs/v3/out/parts/face.png +0 -0
  472. package/templates/example-remesh/outputs/v3/out/parts/lantern.png +0 -0
  473. package/templates/example-remesh/outputs/v3/out/parts/torso.png +0 -0
  474. package/templates/example-remesh/outputs/v3/out/parts.json +188 -0
  475. package/templates/example-remesh/outputs/v3/out/rig/images/background.png +0 -0
  476. package/templates/example-remesh/outputs/v3/out/rig/images/eye_l.png +0 -0
  477. package/templates/example-remesh/outputs/v3/out/rig/images/eye_r.png +0 -0
  478. package/templates/example-remesh/outputs/v3/out/rig/images/face.png +0 -0
  479. package/templates/example-remesh/outputs/v3/out/rig/images/lantern.png +0 -0
  480. package/templates/example-remesh/outputs/v3/out/rig/images/torso.png +0 -0
  481. package/templates/example-remesh/outputs/v3/out/rig/mesh_report.json +15 -0
  482. package/templates/example-remesh/outputs/v3/out/rig/motion.json +137 -0
  483. package/templates/example-remesh/outputs/v3/out/rig/rig.json +536 -0
  484. package/templates/example-remesh/outputs/v3/out/rig/run.json +52 -0
package/README.md CHANGED
@@ -163,6 +163,22 @@ it fails, naming the constant, when a `*_SINCE` date is still in the future.
163
163
  are synthetic fixture records, not a person's approval
164
164
  ([why](templates/example-draft/README.md)).
165
165
 
166
+ ## Verify the installed examples
167
+
168
+ From a consumer project with `@rig-c/create` installed, run:
169
+
170
+ ```sh
171
+ bun node_modules/@rig-c/create/scripts/verify-example-seals.ts
172
+ ```
173
+
174
+ The shipped, dependency-free script verifies every `files[]` entry and
175
+ `project_sha256` in the six example-chain checkpoint manifests (currently
176
+ 319 checks). It names missing files and hash mismatches and exits nonzero.
177
+ It reads installed bytes only; it does not regenerate examples or run producers.
178
+ The CLI creates projects from empty templates; it does not copy worked examples.
179
+
180
+ See [release candidate verification](https://github.com/rig-c/create/blob/main/RELEASING.md#verify-the-release-candidate).
181
+
166
182
  ## Licence
167
183
 
168
184
  [MIT](LICENSE).
package/docs/PROJECT.md CHANGED
@@ -2515,6 +2515,16 @@ the project's next moves and whose they are from `project.json`:
2515
2515
  - `producer`: a command of a pinned package (`rig-parts`, `rigc`).
2516
2516
  - `human`: a person's act collected through the review tool (`review_act`),
2517
2517
  with `command: null` and never a `--by user` writer.
2518
+ - **Host and ingest human acts.** For a recorded Review subject, the human
2519
+ move is surrounded by `job open` with its question, plan, draft or rig
2520
+ selector, `job acts --json`, the writer with `--from-review '<actId>'`, and
2521
+ `job close`. `job open` hosts and blocks until `job close`; keep it running
2522
+ in a separate terminal. Fill the reviewer and exported act placeholders,
2523
+ and follow the matching `job acts` preconditions before ingestion, including
2524
+ its structure snapshot guidance for parts-review sign-off. Moves marked
2525
+ `unanswered_by_record` retain their missing-field guidance.
2526
+ - **Scene writing does not plan work.** `scene write` adds no plan step.
2527
+ Author the post plan steps through `plan add` before post-interview sign-off.
2518
2528
  - **Refusals come first.** When `check` reports refusals (or publication holes),
2519
2529
  `next` lists each in `refusals[]` with its `CHECKS.md` remedy (`fix`) before
2520
2530
  any forward move. A project with a blocking refusal has `moves: []` and
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "rig-create",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "type": "module",
5
5
  "description": "Create a rig project: its folder, decision record, repository and pinned rig-c packages",
6
6
  "license": "MIT",
7
7
  "files": [
8
8
  "src/",
9
+ "scripts/verify-example-seals.ts",
10
+ "scripts/npm-json.ts",
9
11
  "templates/",
10
12
  "README.md",
11
13
  "LICENSE",
@@ -0,0 +1,74 @@
1
+ /** npm 11 and 12 have different pack and view JSON envelopes. */
2
+ import { readFileSync } from 'node:fs';
3
+
4
+ export interface NpmPack {
5
+ filename: string;
6
+ entryCount: number;
7
+ size: number;
8
+ unpackedSize: number;
9
+ }
10
+
11
+ function object(value: unknown): value is Record<string, unknown> {
12
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
13
+ }
14
+
15
+ function shape(value: unknown): string {
16
+ if (Array.isArray(value)) return `array(length=${value.length}) ${JSON.stringify(value).slice(0, 200)}`;
17
+ if (object(value)) return `object(keys=${JSON.stringify(Object.keys(value))})`;
18
+ return `${value === null ? 'null' : typeof value} ${JSON.stringify(value)}`;
19
+ }
20
+
21
+ export function readNpmJson(text: string, command: string, kind: 'pack', expected: string): NpmPack;
22
+ export function readNpmJson(text: string, command: string, kind: 'version', expected: string): string;
23
+ export function readNpmJson(text: string, command: string, kind: 'e404'): string;
24
+ export function readNpmJson(text: string, command: string, kind: 'pack' | 'version' | 'e404', expected?: string): NpmPack | string {
25
+ const fail = (field: string, want: string, actual: unknown): never => {
26
+ throw Error(`${command}: ${field}: expected ${want}; actual ${shape(actual)}`);
27
+ };
28
+ const envelope = kind === 'pack' ? `one-element array or object keyed only by ${JSON.stringify(expected)}`
29
+ : kind === 'version' ? 'version string or one-element array of that string' : 'object with error.code "E404"';
30
+ let value: unknown;
31
+ try { value = JSON.parse(text); }
32
+ catch { throw Error(`${command}: stdout: expected valid JSON (${envelope}); actual invalid JSON ${JSON.stringify(text.slice(0, 200))}`); }
33
+
34
+ if (kind === 'pack') {
35
+ let entry: unknown;
36
+ if (Array.isArray(value) && value.length === 1) entry = value[0];
37
+ else if (object(value) && Object.keys(value).length === 1 && Object.hasOwn(value, expected!)) entry = value[expected!];
38
+ else return fail('stdout', envelope, value);
39
+ if (!object(entry)) return fail('pack entry', 'object', entry);
40
+ if (entry.name !== expected) return fail('name', JSON.stringify(expected), entry.name);
41
+ if (typeof entry.filename !== 'string' || !/^[a-zA-Z0-9][a-zA-Z0-9._-]*\.tgz$/.test(entry.filename)) {
42
+ return fail('filename', 'a .tgz basename without directory components', entry.filename);
43
+ }
44
+ for (const field of ['entryCount', 'size', 'unpackedSize'] as const) {
45
+ if (typeof entry[field] !== 'number' || !Number.isSafeInteger(entry[field]) || entry[field] < 0) {
46
+ return fail(field, 'a nonnegative safe integer', entry[field]);
47
+ }
48
+ }
49
+ return { filename: entry.filename, entryCount: entry.entryCount as number, size: entry.size as number, unpackedSize: entry.unpackedSize as number };
50
+ }
51
+ if (kind === 'version') {
52
+ const version = Array.isArray(value) && value.length === 1 ? value[0] : value;
53
+ if (typeof version !== 'string' || version !== expected) return fail('version', `${envelope} equal to ${JSON.stringify(expected)}`, value);
54
+ return version;
55
+ }
56
+ if (!object(value) || !object(value.error) || value.error.code !== 'E404') return fail('error.code', '"E404" in an error object', object(value) && object(value.error) ? value.error.code : value);
57
+ return 'E404';
58
+ }
59
+
60
+ if (import.meta.main) {
61
+ try {
62
+ const [kind, file, spec, version, ...extra] = process.argv.slice(2);
63
+ if (!file || !spec || extra.length || (kind !== 'version' && kind !== 'e404') || (kind === 'version' ? !version : version !== undefined)) {
64
+ throw Error('usage: bun scripts/npm-json.ts version <json-file> <package@version> <version> | e404 <json-file> <package@version>');
65
+ }
66
+ const text = readFileSync(file, 'utf8');
67
+ const command = `npm view ${spec} version --json`;
68
+ if (kind === 'version') readNpmJson(text, command, kind, version!);
69
+ else readNpmJson(text, command, kind);
70
+ } catch (error) {
71
+ console.error(error instanceof Error ? error.message : String(error));
72
+ process.exitCode = 1;
73
+ }
74
+ }
@@ -0,0 +1,148 @@
1
+ /** Verify installed example seals, or pack a temporary copy without nested ignore losses. */
2
+ import { createHash } from 'node:crypto';
3
+ import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
6
+ import { spawnSync } from 'node:child_process';
7
+ import { readNpmJson } from './npm-json.ts';
8
+
9
+ const packageRoot = resolve(import.meta.dir, '..');
10
+ const hash = (path: string): string => createHash('sha256').update(readFileSync(path)).digest('hex');
11
+
12
+ function within(root: string, path: string): string {
13
+ const target = resolve(root, path);
14
+ const rel = relative(root, target);
15
+ if (!rel || rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) throw Error(`invalid example path: ${path}`);
16
+ return target;
17
+ }
18
+
19
+ function files(root: string): string[] {
20
+ return readdirSync(root, { withFileTypes: true }).flatMap(entry => {
21
+ const path = join(root, entry.name);
22
+ if (entry.isDirectory()) return files(path);
23
+ if (!entry.isFile()) throw Error(`expected a regular example file: ${path}`);
24
+ return [path];
25
+ }).sort();
26
+ }
27
+
28
+ export function verifyExampleSeals(root: string): { ok: number; failures: string[]; sealedFiles: string[] } {
29
+ const chainRoot = join(root, 'templates/example-chain');
30
+ const index = JSON.parse(readFileSync(join(chainRoot, 'chain.json'), 'utf8')) as { checkpoints: { name: string }[] };
31
+ if (!Array.isArray(index.checkpoints) || index.checkpoints.length === 0) throw Error('example-chain/chain.json: no checkpoints to verify');
32
+ let ok = 0;
33
+ const failures: string[] = [];
34
+ const sealedFiles: string[] = [];
35
+ for (const { name } of index.checkpoints) {
36
+ const declaration = within(join(chainRoot, 'checkpoints'), `${name}.json`);
37
+ if (!existsSync(declaration)) { failures.push(`missing checkpoint declaration: ${relative(root, declaration)}`); continue; }
38
+ const seal = JSON.parse(readFileSync(declaration, 'utf8')) as {
39
+ schema: string; name: string; files: { path: string; sha256: string }[]; project_sha256: string;
40
+ };
41
+ if (seal.schema !== 'rig-create/example-checkpoint@1' || seal.name !== name || !Array.isArray(seal.files) || seal.files.length === 0) {
42
+ throw Error(`${relative(root, declaration)}: invalid checkpoint seal`);
43
+ }
44
+ const checkpoint = within(join(chainRoot, 'checkpoints'), name);
45
+ for (const entry of [...seal.files, { path: 'project.json', sha256: seal.project_sha256 }]) {
46
+ const path = within(checkpoint, entry.path);
47
+ const label = relative(root, path);
48
+ sealedFiles.push(path);
49
+ if (!existsSync(path)) failures.push(`missing sealed file: ${label}`);
50
+ else if (!/^[a-f0-9]{64}$/.test(entry.sha256) || hash(path) !== entry.sha256) failures.push(`sha256 mismatch: ${label}`);
51
+ else ok++;
52
+ }
53
+ }
54
+ return { ok, failures, sealedFiles };
55
+ }
56
+
57
+ function report(root: string, log: (line: string) => void): ReturnType<typeof verifyExampleSeals> {
58
+ const result = verifyExampleSeals(root);
59
+ for (const failure of result.failures) log(failure);
60
+ log(`checkpoint seals: ${result.ok} ok / ${result.failures.length} fail (files[] plus project_sha256)`);
61
+ if (result.failures.length) throw Error('example seals failed; repack the unmodified source with scripts/verify-example-seals.ts --pack <output-dir>');
62
+ return result;
63
+ }
64
+
65
+ function run(command: string, args: string[], cwd?: string): string {
66
+ const result = spawnSync(command, args, { cwd, encoding: 'utf8', timeout: 60_000, killSignal: 'SIGKILL', maxBuffer: 16 * 1024 * 1024 });
67
+ if (result.error || result.status !== 0) throw Error(`${command} ${args.join(' ')} failed: ${result.error?.message ?? result.status}\n${result.stderr}`);
68
+ return result.stdout;
69
+ }
70
+
71
+ /** Only the disposable copy gets .npmignore; every original example byte is retained. */
72
+ function stage(root: string, destination: string): void {
73
+ const manifest = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as { files: string[] };
74
+ mkdirSync(destination);
75
+ cpSync(join(root, 'package.json'), join(destination, 'package.json'));
76
+ for (const path of manifest.files) {
77
+ const target = within(destination, path);
78
+ mkdirSync(dirname(target), { recursive: true });
79
+ cpSync(within(root, path), target, { recursive: true });
80
+ }
81
+ for (const path of files(join(destination, 'templates')).filter(path => path.endsWith(`${sep}.gitignore`))) {
82
+ const npmignore = join(dirname(path), '.npmignore');
83
+ if (existsSync(npmignore)) throw Error(`pack staging would overwrite ${npmignore}`);
84
+ writeFileSync(npmignore, '!**\n');
85
+ }
86
+ }
87
+
88
+ export function verifyTarball(tarball: string, sourceRoot?: string): void {
89
+ const scratch = mkdtempSync(join(tmpdir(), 'create-example-seals-'));
90
+ try {
91
+ run('tar', ['-xzf', resolve(tarball), '-C', scratch]);
92
+ const root = join(scratch, 'package');
93
+ const verified = report(root, console.error);
94
+ if (sourceRoot) {
95
+ const source = join(sourceRoot, 'templates');
96
+ const originals = files(source);
97
+ for (const path of originals) {
98
+ const target = join(root, 'templates', relative(source, path));
99
+ if (!existsSync(target) || hash(target) !== hash(path)) throw Error(`packed template missing or changed: templates/${relative(source, path)}`);
100
+ }
101
+ console.error(`template byte parity: ${originals.length} files match source`);
102
+ }
103
+ // Negative control operates only on the extracted tree, after the positive gate.
104
+ const deleted = verified.sealedFiles.find(path => path.endsWith(`${sep}.gitignore`))!;
105
+ unlinkSync(deleted);
106
+ const planted = verifyExampleSeals(root);
107
+ const expected = `missing sealed file: ${relative(root, deleted)}`;
108
+ if (planted.failures.length !== 1 || planted.failures[0] !== expected || planted.ok !== verified.ok - 1) {
109
+ throw Error(`planted deletion was not detected: ${expected}`);
110
+ }
111
+ console.error(`planted deletion detected: ${expected} (${planted.ok} ok / 1 fail)`);
112
+ } finally { rmSync(scratch, { recursive: true, force: true }); }
113
+ }
114
+
115
+ export function packExamples(output: string, stageOutput?: string): string {
116
+ const scratch = mkdtempSync(join(tmpdir(), 'create-example-pack-'));
117
+ try {
118
+ const destination = resolve(output);
119
+ mkdirSync(destination, { recursive: true });
120
+ const staged = stageOutput === undefined ? join(scratch, 'source') : resolve(stageOutput);
121
+ stage(packageRoot, staged);
122
+ const name = (JSON.parse(readFileSync(join(staged, 'package.json'), 'utf8')) as { name: string }).name;
123
+ const args = ['pack', '.', '--json', '--pack-destination', destination];
124
+ const packed = readNpmJson(run('npm', args, staged), `npm ${args.join(' ')}`, 'pack', name);
125
+ const tarball = join(destination, packed.filename);
126
+ console.error(`npm pack: ${packed.entryCount} files / ${packed.size} bytes compressed / ${packed.unpackedSize} bytes unpacked`);
127
+ verifyTarball(tarball, packageRoot);
128
+ return tarball;
129
+ } finally { rmSync(scratch, { recursive: true, force: true }); }
130
+ }
131
+
132
+ if (import.meta.main) {
133
+ try {
134
+ const [mode, path, ...extra] = process.argv.slice(2);
135
+ if (mode === undefined) report(packageRoot, console.log);
136
+ else if (path && extra.length === 0 && mode === '--pack') console.log(packExamples(path));
137
+ else if (path && extra.length === 0 && mode === '--tarball') verifyTarball(path);
138
+ else if (path && extra.length === 0 && mode === '--stage') {
139
+ const scratch = mkdtempSync(join(tmpdir(), 'create-example-stage-gate-'));
140
+ try { packExamples(scratch, path); console.log(resolve(path)); }
141
+ finally { rmSync(scratch, { recursive: true, force: true }); }
142
+ }
143
+ else throw Error('usage: bun scripts/verify-example-seals.ts [--pack <output-dir> | --tarball <file.tgz> | --stage <fresh-dir>]');
144
+ } catch (error) {
145
+ console.error(error instanceof Error ? error.message : String(error));
146
+ process.exitCode = 1;
147
+ }
148
+ }
package/src/next.ts CHANGED
@@ -53,7 +53,8 @@ import {
53
53
  stageOfStep,
54
54
  } from './stages.ts';
55
55
  import type { Json, JsonObject } from './templates.ts';
56
- import { sceneCurrentAt } from './scene.ts';
56
+ import { sceneCurrentAt, sceneRig, SceneError } from './scene.ts';
57
+ import { resolveAgentCitationSpec } from './scene-authority.ts';
57
58
 
58
59
  export const NEXT_SCHEMA = 'rig-create/next@1';
59
60
 
@@ -202,6 +203,73 @@ function optionCommand(id: string, dir: string): string {
202
203
  return `rig-create interview-options ${shellWord(id)} ${shellWord(dir)} --file '<option-set.json>'`;
203
204
  }
204
205
 
206
+ /** The person acts in Review; the agent only hosts and ingests its exported act. */
207
+ function reviewCommands(dir: string, project: JsonObject, move: NextMove): NextMove[] {
208
+ const act = move.review_act;
209
+ if (move.role !== 'human' || move.unanswered_by_record || move.field === 'pauses' || !act) return [move];
210
+ let selector: string;
211
+ let writer: string;
212
+ if (act.kind === 'interview-picks' && act.question_id) {
213
+ selector = `--question ${shellWord(act.question_id)}`;
214
+ writer = `interview-answer ${shellWord(act.question_id)}`;
215
+ } else if (act.kind === 'signoff' && ['interview', 'plan-approved', 'rigging-interview', 'post-interview', 'direction-review'].includes(act.stage)) {
216
+ selector = '--plan';
217
+ writer = `signoff ${act.stage}`;
218
+ } else if (act.kind === 'parts-verdict' && act.draft_id) {
219
+ selector = `--draft ${shellWord(act.draft_id)}`;
220
+ writer = 'parts-review';
221
+ } else if (act.kind === 'signoff' && act.stage === 'parts-review' && act.draft_id) {
222
+ selector = `--draft ${shellWord(act.draft_id)}`;
223
+ const structure = partsStructureSnapshot(dir, project, act.draft_id);
224
+ writer = `signoff parts-review --draft ${shellWord(act.draft_id)} --structure-file ${shellWord(structure.path)}`;
225
+ } else if (act.kind === 'signoff' && act.stage === 'rig-review' && act.version_id) {
226
+ selector = `--rig ${shellWord(act.version_id.slice(1))}`;
227
+ writer = 'signoff rig-review';
228
+ } else if (['rig-review', 'direction-review'].includes(act.stage) && act.kind === 'review-verdict' && act.version_id) {
229
+ const n = act.version_id.slice(1);
230
+ selector = `--rig ${shellWord(n)}`;
231
+ writer = `review ${shellWord(n)}`;
232
+ } else return [move];
233
+ const agent = (command: string, description: string): NextMove => ({
234
+ role: 'agent', field: move.field, awaits: move.awaits, command, act: description,
235
+ });
236
+ const root = shellWord(dir);
237
+ return [
238
+ agent(`rig-create job open ${root} ${selector} --reviewer '<reviewer>' --role owner`, 'host this Review page; keep the host running in a separate terminal until job close'),
239
+ move,
240
+ agent(`rig-create job acts ${root} --json`, `after the person submits in Review, list exported acts and use the matching actId below${act.stage === 'parts-review' ? '; run its reported preconditions before ingestion (parts-review signoff includes structure-snapshot)' : ''}`),
241
+ agent(`rig-create ${writer} ${root} --from-review '<actId>'`, 'ingest the matching exported Review act; never supply the human answer or words'),
242
+ agent(`rig-create job close ${root}`, 'after successful ingestion, close this job before opening the next Review page'),
243
+ ];
244
+ }
245
+
246
+ function sceneWriteCommand(dir: string, project: JsonObject, rigN: string): string {
247
+ let flags = ` --background '<background.png>'`;
248
+ const item = collectItems(project, { collection: loadCollection(dir) }).find(item => item.id === 'post_composition');
249
+ if (item && (item.state.state === 'user' || item.state.state === 'delegated')) {
250
+ const answer = item.state.answer;
251
+ const citation = { guide: 'post_composition', asks: ['post_composition'],
252
+ ...(item.state.state === 'delegated' ? { delegated: true } : { quote: answer.verbatim! }) };
253
+ try {
254
+ const spec = resolveAgentCitationSpec(dir, project, citation);
255
+ const stage = sceneRig(dir, project, Number(rigN)).stage;
256
+ for (const role of ['background', 'foreground'] as const) {
257
+ const plate = spec[role];
258
+ if (!plate) continue;
259
+ if (role === 'foreground') flags += ` --foreground '<foreground.png>'`;
260
+ const { x, y, width, height } = plate.rect;
261
+ if (x !== stage.x || y !== stage.y || width !== stage.width || height !== stage.height) {
262
+ flags += ` --${role}-rect ${shellWord([x, y, width, height].join(','))}`;
263
+ }
264
+ }
265
+ } catch (error) {
266
+ if (!(error instanceof SceneError)) throw error;
267
+ // The scene writer reports the existing named refusal for an unresolved choice.
268
+ }
269
+ }
270
+ return `rig-create scene write ${shellWord(dir)} --rig ${shellWord(rigN)}${flags} --citations-file '<scene-citations.json>'`;
271
+ }
272
+
205
273
  function candidateAdvance(
206
274
  dir: string,
207
275
  project: JsonObject,
@@ -880,9 +948,9 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
880
948
  }
881
949
 
882
950
  const planIds = effectiveStage === 'rigging-interview' ? ['bones', 'meshes', 'constraints', 'motion']
883
- : effectiveStage === 'post-interview' ? ['camera', 'timing'] : ['seethrough', 'assemble'];
951
+ : effectiveStage === 'post-interview' ? ['camera', 'timing', 'composition'] : ['seethrough', 'assemble'];
884
952
  const missingPlanIds = planIds.filter(id => {
885
- const guide = id === 'camera' ? 'camera_depth' : id === 'timing' ? 'post_timing' : id;
953
+ const guide = id === 'camera' ? 'camera_depth' : id === 'timing' ? 'post_timing' : id === 'composition' ? 'post_composition' : id;
886
954
  const phase = effectiveStage === 'post-interview' ? 'post' : 'rig';
887
955
  return !steps.some(step => step.phase === phase && (step.id === id
888
956
  || phase === 'post' && asArray(step.rests_on).includes(guide)));
@@ -891,7 +959,7 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
891
959
  if (needsPlanSteps) {
892
960
  addAwait('plan.steps');
893
961
  for (const [index, id] of missingPlanIds.entries()) {
894
- const guideId = id === 'camera' ? 'camera_depth' : id === 'timing' ? 'post_timing' : id;
962
+ const guideId = id === 'camera' ? 'camera_depth' : id === 'timing' ? 'post_timing' : id === 'composition' ? 'post_composition' : id;
895
963
  const item = stageItems.find(item => item.id === guideId);
896
964
  if (!item || item.state.state === 'silent' || (item.state.state === 'delegated' && !item.state.decided)) continue;
897
965
  const order = Math.max(0, ...steps.map(step => Number(step.order) || 0)) + index + 1;
@@ -902,6 +970,10 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
902
970
  }
903
971
  }
904
972
 
973
+ const missingStepNames = missingPlanIds.length === planIds.length ? '' : `${missingPlanIds.join(', ')} `;
974
+ const missingStepKind = effectiveStage === 'post-interview' ? 'post' : 'rig';
975
+ const missingPlanReason = `plan.steps has no ${missingStepNames}${missingStepKind} step${missingPlanIds.length === 1 ? '' : 's'}`;
976
+
905
977
  const signoffAwait = `signoffs[stage=${effectiveStage}]`;
906
978
  if (!hasLiveStageSignoff(effectiveStage) && !recordedLapseTargets.has(signoffAwait)) {
907
979
  addAwait(signoffAwait);
@@ -912,10 +984,10 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
912
984
  command: null,
913
985
  act: needsPlanSteps
914
986
  ? effectiveStage === 'rigging-interview'
915
- ? 'review-tool act signoff for stage rigging-interview (unanswered by record: plan.steps has no rig steps approved at rigging-interview)'
916
- : `review-tool act signoff for stage ${effectiveStage} (unanswered by record: ${effectiveStage === 'post-interview' ? 'plan.steps has no post steps' : steps.length === 0 ? 'plan.steps is empty' : 'plan.steps has uncovered parts guides'} in project.json)`
987
+ ? `review-tool act signoff for stage rigging-interview (unanswered by record: ${missingPlanReason} approved at rigging-interview)`
988
+ : `review-tool act signoff for stage ${effectiveStage} (unanswered by record: ${effectiveStage === 'post-interview' ? missingPlanReason : steps.length === 0 ? 'plan.steps is empty' : 'plan.steps has uncovered parts guides'} in project.json)`
917
989
  : effectiveStage === 'interview'
918
- ? 'review-tool act signoff for stage interview on the record page with job open --plan (source-linked Review); ingest signoff interview --from-review <actId>, then advance plan-approved'
990
+ ? 'review-tool act signoff for stage interview on the record page with job open --plan; ingest signoff interview --from-review <actId>, then advance plan-approved'
919
991
  : `review-tool act signoff for stage ${effectiveStage}`,
920
992
  review_act: {
921
993
  kind: 'signoff',
@@ -1389,7 +1461,7 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
1389
1461
  } else if (currentScene === undefined) {
1390
1462
  addAwait('scenes[n=1]');
1391
1463
  moves.push({ role: 'agent', field: 'scenes', awaits: 'scenes[n=1]',
1392
- command: `rig-create scene write ${shellWord(dir)} --rig ${shellWord(rigN)} --background '<background.png>' --citations-file '<scene-citations.json>'`,
1464
+ command: sceneWriteCommand(dir, project, rigN),
1393
1465
  act: 'author scene inputs matching the current post_composition Review choice, then write the scene' });
1394
1466
  } else {
1395
1467
  addAwait(`versions[n=${nextPostN}]`);
@@ -1432,7 +1504,7 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
1432
1504
  field: `versions[v${postN}].verdicts`,
1433
1505
  awaits: verdictAwait,
1434
1506
  command: null,
1435
- act: `review-tool act review-verdict for versions[v${postN}] (direction-review) on the post page: job open --rig ${postN}; ingest with review ${postN} --from-review <actId>; then request record-page sign-off with job open --plan (source-linked Review)`,
1507
+ act: `review-tool act review-verdict for versions[v${postN}] (direction-review) on the post page: job open --rig ${postN}; ingest with review ${postN} --from-review <actId>; then request record-page sign-off with job open --plan`,
1436
1508
  review_act: {
1437
1509
  kind: 'review-verdict',
1438
1510
  stage: 'direction-review',
@@ -1454,8 +1526,8 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
1454
1526
  command: null,
1455
1527
  act:
1456
1528
  postN === null
1457
- ? `after recording the current post and accepted direction verdict, request review-tool act signoff for direction-review on the record page with job open --plan (source-linked Review; unanswered by record: ${scenes.length === 0 ? 'scenes[n=1] and ' : ''}versions[n=${nextPostN}] are not recorded in project.json)`
1458
- : `after ingesting the accepted direction-review verdict for v${postN}, request review-tool act signoff on the record page with job open --plan (source-linked Review), ingest signoff direction-review --from-review <actId>, then advance accepted`,
1529
+ ? `after recording the current post and accepted direction verdict, request review-tool act signoff for direction-review on the record page with job open --plan (unanswered by record: ${scenes.length === 0 ? 'scenes[n=1] and ' : ''}versions[n=${nextPostN}] are not recorded in project.json)`
1530
+ : `after ingesting the accepted direction-review verdict for v${postN}, request review-tool act signoff on the record page with job open --plan, ingest signoff direction-review --from-review <actId>, then advance accepted`,
1459
1531
  review_act: {
1460
1532
  kind: 'signoff',
1461
1533
  stage: 'direction-review',
@@ -1503,6 +1575,12 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
1503
1575
  });
1504
1576
  }
1505
1577
 
1578
+ const runnableMoves = moves.flatMap(move => {
1579
+ if (move.review_act?.stage === 'direction-review' && move.review_act.kind === 'signoff'
1580
+ && moves.some(other => other.review_act?.stage === 'direction-review' && other.review_act.kind === 'review-verdict')) return [move];
1581
+ return reviewCommands(dir, project, move);
1582
+ });
1583
+
1506
1584
  return {
1507
1585
  schema: NEXT_SCHEMA,
1508
1586
  project_id: String(project.name ?? ''),
@@ -1512,7 +1590,7 @@ export function nextProject(projectDirArg: string, now: number = Date.now()): Ne
1512
1590
  refusals,
1513
1591
  ...warningFields,
1514
1592
  awaits: awaitsList,
1515
- moves,
1593
+ moves: runnableMoves,
1516
1594
  };
1517
1595
  }
1518
1596
 
@@ -0,0 +1,6 @@
1
+ /derived/
2
+ /outputs/
3
+ /scratch/
4
+ node_modules/
5
+ /.rig-create-review-binding.json
6
+ /.rig-create-review/
@@ -0,0 +1 @@
1
+ !**
@@ -0,0 +1,6 @@
1
+ /derived/
2
+ /outputs/
3
+ /scratch/
4
+ node_modules/
5
+ /.rig-create-review-binding.json
6
+ /.rig-create-review/
@@ -0,0 +1,6 @@
1
+ /derived/
2
+ /outputs/
3
+ /scratch/
4
+ node_modules/
5
+ /.rig-create-review-binding.json
6
+ /.rig-create-review/
@@ -0,0 +1,6 @@
1
+ /derived/
2
+ /outputs/
3
+ /scratch/
4
+ node_modules/
5
+ /.rig-create-review-binding.json
6
+ /.rig-create-review/
@@ -0,0 +1,88 @@
1
+ {
2
+ "key": "synthetic",
3
+ "requirements": "interview-requirements.json",
4
+ "assemble": {
5
+ "rig_scale": 1,
6
+ "plan": [
7
+ [
8
+ "background",
9
+ "full",
10
+ "author:background"
11
+ ],
12
+ [
13
+ "torso",
14
+ "full",
15
+ "topwear"
16
+ ],
17
+ [
18
+ "lantern",
19
+ "full",
20
+ "author:lantern"
21
+ ],
22
+ [
23
+ "face",
24
+ "full",
25
+ "face"
26
+ ],
27
+ [
28
+ "eye_r",
29
+ "full",
30
+ "eyewhite-r"
31
+ ],
32
+ [
33
+ "eye_l",
34
+ "full",
35
+ "eyewhite-l"
36
+ ]
37
+ ]
38
+ },
39
+ "bones": [
40
+ {
41
+ "name": "body",
42
+ "parent": "root",
43
+ "at": [
44
+ 64,
45
+ 64
46
+ ]
47
+ }
48
+ ],
49
+ "meshes": {
50
+ "torso": {
51
+ "grid": 16,
52
+ "r": 16,
53
+ "segments": [
54
+ [
55
+ "body",
56
+ [
57
+ 64,
58
+ 8
59
+ ],
60
+ [
61
+ 64,
62
+ 72
63
+ ]
64
+ ]
65
+ ]
66
+ }
67
+ },
68
+ "regions": {
69
+ "background": "body",
70
+ "lantern": "body",
71
+ "face": "body",
72
+ "eye_r": "body",
73
+ "eye_l": "body"
74
+ },
75
+ "motion": {
76
+ "duration": 4,
77
+ "tracks": [
78
+ {
79
+ "bone": "body",
80
+ "prop": "translatey",
81
+ "amp": 0.9,
82
+ "period": 4,
83
+ "phase": 0,
84
+ "base": 0
85
+ }
86
+ ]
87
+ }
88
+ }