@pixel-point/toolcraft 0.0.18 → 0.0.19

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 (384) hide show
  1. package/package.json +1 -1
  2. package/src/generate-demand-only-lifecycle.test.mjs +9 -1
  3. package/src/generate-performance-iteration-execution.test.mjs +3 -3
  4. package/src/generate-test-delivery-architecture-assertions.mjs +11 -73
  5. package/src/generate-test-demand-only-lifecycle.mjs +34 -36
  6. package/src/generate-test-dependency-sandbox.mjs +4 -1
  7. package/src/generate-test-doc-assertions.mjs +55 -53
  8. package/src/generate-test-doc-assertions.test.mjs +1 -1
  9. package/src/generate-test-doc-policy-assertions.mjs +1 -1
  10. package/src/generate-test-export-doc-assertions.mjs +53 -0
  11. package/src/generate-test-file-assertions.mjs +51 -8
  12. package/src/generate-test-integrity-assertions.mjs +5 -2
  13. package/src/generate-test-integrity-manifest-assertions.mjs +16 -5
  14. package/src/generate-test-integrity-ownership-assertions.mjs +36 -4
  15. package/src/generate-test-package-assertions.mjs +4 -0
  16. package/src/generate-test-product-fixture.mjs +1 -1
  17. package/src/generate-test-product-fixture.test.mjs +35 -38
  18. package/src/generate-test-product-iteration.mjs +0 -1
  19. package/src/generate-test-product-iteration.test.mjs +0 -1
  20. package/src/generate-test-runtime-boundary-assertions.mjs +20 -0
  21. package/src/generate-test-standalone-assertions.mjs +0 -16
  22. package/src/generate-test-standalone-delivery-stages.mjs +2 -86
  23. package/src/generate.test.mjs +4 -0
  24. package/src/generated-integrity-manifest.test.mjs +5 -2
  25. package/src/generated-source-policy.test.mjs +0 -4
  26. package/src/package-json.mjs +5 -0
  27. package/src/package-json.test.mjs +21 -0
  28. package/src/package-manager.mjs +2 -0
  29. package/src/package-manager.test.mjs +8 -0
  30. package/src/packaged-template-fallback-helpers.mjs +254 -0
  31. package/src/packaged-template-fallback.test.mjs +121 -46
  32. package/src/packaged-template-runtime-assertions.mjs +150 -0
  33. package/templates/runtime/contracts/component-contracts.choices.test.ts +18 -3
  34. package/templates/runtime/contracts/component-contracts.choices.ts +8 -3
  35. package/templates/runtime/contracts/component-contracts.inputs.ts +2 -1
  36. package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +18 -4
  37. package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +1 -1
  38. package/templates/runtime/contracts/component-contracts.runtime.ts +7 -4
  39. package/templates/runtime/contracts/component-contracts.visual.test.ts +20 -0
  40. package/templates/runtime/contracts/component-contracts.visual.ts +4 -0
  41. package/templates/runtime/contracts/decision-contracts.test.ts +18 -12
  42. package/templates/runtime/contracts/decision-contracts.ts +4 -4
  43. package/templates/runtime/contracts/performance-verification-policy.test.ts +12 -12
  44. package/templates/runtime/contracts/performance-verification-policy.ts +8 -8
  45. package/templates/runtime/export/artifact-download.ts +1 -0
  46. package/templates/runtime/export/artifact-frame-renderer.ts +2 -15
  47. package/templates/runtime/export/artifact-frame-state.ts +16 -0
  48. package/templates/runtime/export/artifact-scene-frame.test.ts +3 -3
  49. package/templates/runtime/export/artifact-scene-frame.ts +3 -3
  50. package/templates/runtime/export/export-error.ts +5 -0
  51. package/templates/runtime/export/export-renderer-coverage.ts +54 -0
  52. package/templates/runtime/export/image-artifact-export.ts +2 -2
  53. package/templates/runtime/export/index.ts +13 -0
  54. package/templates/runtime/export/product-export-renderer.test.ts +38 -4
  55. package/templates/runtime/export/product-export-renderer.ts +0 -41
  56. package/templates/runtime/export/product-svg-export-renderer.ts +21 -0
  57. package/templates/runtime/export/svg-artifact-export.test.ts +98 -0
  58. package/templates/runtime/export/svg-artifact-export.ts +120 -0
  59. package/templates/runtime/export/svg-document.test.ts +221 -0
  60. package/templates/runtime/export/svg-document.ts +400 -0
  61. package/templates/runtime/export/svg-policy.ts +47 -0
  62. package/templates/runtime/index.ts +1 -0
  63. package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +10 -0
  64. package/templates/runtime/react/app-shell/settings-transfer.test.ts +21 -0
  65. package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +46 -1
  66. package/templates/runtime/react/app-shell/toolcraft-app.tsx +7 -2
  67. package/templates/runtime/react/canvas/canvas-shell-interactions.test.tsx +30 -0
  68. package/templates/runtime/react/canvas/canvas-shell-pinch-interactions.test.tsx +155 -0
  69. package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +1 -1
  70. package/templates/runtime/react/canvas/canvas-shell.tsx +16 -5
  71. package/templates/runtime/react/canvas/canvas-viewport-geometry.ts +133 -0
  72. package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +285 -36
  73. package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-applicability-layout.test.tsx +134 -0
  74. package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-layout.test.tsx +16 -1
  75. package/templates/runtime/react/controls-panel/__tests__/controls-panel.render-isolation.test.tsx +2 -0
  76. package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +39 -0
  77. package/templates/runtime/react/controls-panel/__tests__/controls-panel.setup-controls.test.tsx +3 -3
  78. package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-collection.test.tsx +1 -4
  79. package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-color-bank.test.tsx +2 -2
  80. package/templates/runtime/react/controls-panel/__tests__/controls-panel.vector-interaction.test.tsx +6 -6
  81. package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +2 -2
  82. package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +40 -11
  83. package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +31 -2
  84. package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +4 -1
  85. package/templates/runtime/react/controls-panel/renderers/controls-panel-action-renderer.tsx +2 -1
  86. package/templates/runtime/react/controls-panel/renderers/controls-panel-basic-renderers.tsx +2 -52
  87. package/templates/runtime/react/controls-panel/values/controls-panel-color-values.ts +1 -9
  88. package/templates/runtime/react/controls-panel/values/controls-panel-spatial-values.ts +7 -2
  89. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +9 -69
  90. package/templates/runtime/schema/artifact-export-actions.test.ts +47 -0
  91. package/templates/runtime/schema/artifact-export-actions.ts +49 -0
  92. package/templates/runtime/schema/types.ts +1 -0
  93. package/templates/runtime/state/canvas-background-state.ts +1 -16
  94. package/templates/runtime/state/canvas-state.ts +32 -20
  95. package/templates/runtime/state/control-value-codecs.test.ts +98 -0
  96. package/templates/runtime/state/control-value-codecs.ts +700 -0
  97. package/templates/runtime/state/control-value-normalization.test.ts +1 -1
  98. package/templates/runtime/state/control-value-normalization.ts +127 -135
  99. package/templates/runtime/state/controls-reducer.ts +26 -3
  100. package/templates/runtime/state/create-template-state.test.ts +30 -0
  101. package/templates/runtime/state/create-template-state.ts +52 -31
  102. package/templates/runtime/state/orientation-pose.ts +80 -0
  103. package/templates/runtime/state/persistence-control-values.test.ts +59 -0
  104. package/templates/runtime/state/reducer-controls.test.ts +45 -0
  105. package/templates/runtime/state/reducer-media-reset.test.ts +1 -1
  106. package/templates/runtime/state/reducer-timeline.test.ts +70 -0
  107. package/templates/runtime/state/timeline-reducer.ts +40 -2
  108. package/templates/runtime/testing/performance-schema-queries.ts +2 -2
  109. package/templates/starter/AGENTS.md +21 -22
  110. package/templates/starter/docs/toolcraft/README.md +6 -6
  111. package/templates/starter/docs/toolcraft/acceptance-testing.md +20 -20
  112. package/templates/starter/docs/toolcraft/agent-worklog.md +88 -1
  113. package/templates/starter/docs/toolcraft/assembly-workflow.md +7 -6
  114. package/templates/starter/docs/toolcraft/component-rules.md +2 -2
  115. package/templates/starter/docs/toolcraft/core/layout.md +6 -1
  116. package/templates/starter/docs/toolcraft/core/media-upload.md +1 -1
  117. package/templates/starter/docs/toolcraft/core/performance.md +8 -10
  118. package/templates/starter/docs/toolcraft/core/reference-study.md +80 -19
  119. package/templates/starter/docs/toolcraft/core/runtime-boundary.md +2 -1
  120. package/templates/starter/docs/toolcraft/core/setup-export.md +43 -13
  121. package/templates/starter/docs/toolcraft/decision-contract.md +2 -2
  122. package/templates/starter/docs/toolcraft/performance.md +8 -10
  123. package/templates/starter/docs/toolcraft/renderer-technique.md +2 -2
  124. package/templates/starter/docs/toolcraft/schema-reference.md +8 -8
  125. package/templates/starter/docs/toolcraft/workflow.md +14 -14
  126. package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +38 -0
  127. package/templates/starter/e2e/app-browser-motion-reference-requirements.spec.ts +411 -0
  128. package/templates/starter/e2e/app-browser-proof-session.spec.ts +85 -0
  129. package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +62 -0
  130. package/templates/starter/e2e/app-browser-selection-scope-evidence.spec.ts +137 -0
  131. package/templates/starter/e2e/browser-infinity-canvas-svg-evidence.ts +42 -0
  132. package/templates/starter/e2e/browser-layer-evidence-helpers.ts +15 -36
  133. package/templates/starter/e2e/browser-product-raster-snapshot.ts +213 -0
  134. package/templates/starter/e2e/browser-proof-session.ts +43 -15
  135. package/templates/starter/e2e/browser-proof-surface-action.ts +79 -0
  136. package/templates/starter/e2e/browser-proof-types.ts +15 -0
  137. package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +22 -6
  138. package/templates/starter/e2e/browser-selection-scope-evidence.ts +269 -0
  139. package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +97 -0
  140. package/templates/starter/e2e/browser-svg-export-evidence.spec.ts +79 -0
  141. package/templates/starter/e2e/browser-svg-export-evidence.ts +152 -0
  142. package/templates/starter/e2e/export-artifact-helpers.ts +70 -0
  143. package/templates/starter/e2e/product-observable-helpers.ts +8 -129
  144. package/templates/starter/e2e/svg-artifact-inspection.spec.ts +136 -0
  145. package/templates/starter/e2e/svg-artifact-inspection.ts +331 -0
  146. package/templates/starter/e2e/svg-download-test-fixtures.ts +34 -0
  147. package/templates/starter/e2e/toolcraft-delivery-catalog-reporter.ts +198 -15
  148. package/templates/starter/e2e/toolcraft-feature-verification-reporter.spec.ts +149 -0
  149. package/templates/starter/e2e/toolcraft-feature-verification-reporter.ts +223 -0
  150. package/templates/starter/package.json +2 -0
  151. package/templates/starter/scripts/check-toolcraft-docs.mjs +1 -0
  152. package/templates/starter/scripts/create-toolcraft-motion-reference-study.mjs +233 -0
  153. package/templates/starter/scripts/create-toolcraft-motion-reference-study.test.mjs +459 -0
  154. package/templates/starter/scripts/playwright-test-title-selection.d.mts +45 -0
  155. package/templates/starter/scripts/run-browser-performance-test-helpers.mjs +0 -27
  156. package/templates/starter/scripts/run-browser-performance.mjs +0 -6
  157. package/templates/starter/scripts/run-browser-performance.test.mjs +5 -13
  158. package/templates/starter/scripts/run-delivery-verification-test-helpers.mjs +0 -34
  159. package/templates/starter/scripts/run-delivery-verification.test.mjs +135 -31
  160. package/templates/starter/scripts/run-feature-verification.mjs +212 -0
  161. package/templates/starter/scripts/run-feature-verification.test.mjs +226 -0
  162. package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.mjs +21 -8
  163. package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.test.mjs +32 -92
  164. package/templates/starter/scripts/toolcraft-checkpoint-transaction.mjs +28 -6
  165. package/templates/starter/scripts/toolcraft-checkpoint-transaction.test.mjs +8 -63
  166. package/templates/starter/scripts/toolcraft-delivery-anchor.mjs +28 -8
  167. package/templates/starter/scripts/toolcraft-delivery-anchor.test.mjs +50 -61
  168. package/templates/starter/scripts/toolcraft-delivery-architecture-inventory.mjs +0 -4
  169. package/templates/starter/scripts/toolcraft-delivery-architecture-policy.mjs +0 -1
  170. package/templates/starter/scripts/toolcraft-delivery-evidence.test.mjs +2 -3
  171. package/templates/starter/scripts/toolcraft-delivery-executor.mjs +5 -1
  172. package/templates/starter/scripts/toolcraft-delivery-executor.test.mjs +5 -12
  173. package/templates/starter/scripts/toolcraft-delivery-functional-context.d.mts +1 -48
  174. package/templates/starter/scripts/toolcraft-delivery-functional-context.mjs +2 -30
  175. package/templates/starter/scripts/toolcraft-delivery-functional-context.test.mjs +4 -166
  176. package/templates/starter/scripts/toolcraft-delivery-functional-initial.test.mjs +4 -20
  177. package/templates/starter/scripts/toolcraft-delivery-lifecycle.mjs +43 -192
  178. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-lifecycle.test.mjs +79 -440
  179. package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +102 -297
  180. package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +46 -97
  181. package/templates/starter/scripts/toolcraft-delivery-plan-test-helpers.mjs +125 -0
  182. package/templates/starter/scripts/toolcraft-delivery-plan-validation.test.mjs +58 -0
  183. package/templates/starter/scripts/toolcraft-delivery-plan.d.mts +19 -31
  184. package/templates/starter/scripts/toolcraft-delivery-plan.mjs +254 -252
  185. package/templates/starter/scripts/toolcraft-delivery-plan.test.mjs +29 -457
  186. package/templates/starter/scripts/toolcraft-delivery-receipt-performance.test.mjs +1 -1
  187. package/templates/starter/scripts/toolcraft-delivery-receipt-strictness.test.mjs +3 -72
  188. package/templates/starter/scripts/toolcraft-delivery-receipt-test-helpers.mjs +7 -36
  189. package/templates/starter/scripts/toolcraft-delivery-receipt.d.mts +3 -5
  190. package/templates/starter/scripts/toolcraft-delivery-receipt.mjs +15 -31
  191. package/templates/starter/scripts/toolcraft-delivery-receipt.test.mjs +28 -20
  192. package/templates/starter/scripts/toolcraft-delivery-receipt.types.test.mts +22 -30
  193. package/templates/starter/scripts/toolcraft-feature-verification-plan.d.mts +20 -0
  194. package/templates/starter/scripts/toolcraft-feature-verification-plan.mjs +146 -0
  195. package/templates/starter/scripts/toolcraft-feature-verification-plan.test.mjs +96 -0
  196. package/templates/starter/scripts/toolcraft-functional-proof-model.d.mts +3 -18
  197. package/templates/starter/scripts/toolcraft-functional-proof-model.mjs +39 -127
  198. package/templates/starter/scripts/toolcraft-functional-proof-model.test.mjs +25 -362
  199. package/templates/starter/scripts/toolcraft-functional-proof-model.types.test.mts +6 -83
  200. package/templates/starter/scripts/toolcraft-functional-proof-primitives.d.mts +11 -0
  201. package/templates/starter/scripts/toolcraft-functional-proof-primitives.mjs +61 -0
  202. package/templates/starter/scripts/toolcraft-functional-proof-primitives.test.mjs +43 -0
  203. package/templates/starter/scripts/toolcraft-integrity-policy.mjs +13 -0
  204. package/templates/starter/scripts/toolcraft-integrity-test-utils.mjs +1 -1
  205. package/templates/starter/scripts/toolcraft-layer-evidence-facade.test.mjs +58 -22
  206. package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.mjs +111 -0
  207. package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.test.mjs +116 -0
  208. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.d.mts +37 -0
  209. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.mjs +308 -0
  210. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.test.mjs +420 -0
  211. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.types.test.mts +50 -0
  212. package/templates/starter/scripts/toolcraft-motion-reference-command-options.mjs +195 -0
  213. package/templates/starter/scripts/toolcraft-motion-reference-command-options.test.mjs +224 -0
  214. package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.mjs +122 -0
  215. package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.test.mjs +153 -0
  216. package/templates/starter/scripts/toolcraft-motion-reference-evidence-assembly.mjs +270 -0
  217. package/templates/starter/scripts/toolcraft-motion-reference-evidence.test.mjs +432 -0
  218. package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.mjs +275 -0
  219. package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.test.mjs +294 -0
  220. package/templates/starter/scripts/toolcraft-motion-reference-group-inventory.mjs +148 -0
  221. package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.mjs +101 -0
  222. package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.test.mjs +124 -0
  223. package/templates/starter/scripts/toolcraft-motion-reference-image-source.mjs +259 -0
  224. package/templates/starter/scripts/toolcraft-motion-reference-image-source.test.mjs +338 -0
  225. package/templates/starter/scripts/toolcraft-motion-reference-image-timing.mjs +96 -0
  226. package/templates/starter/scripts/toolcraft-motion-reference-image-timing.test.mjs +81 -0
  227. package/templates/starter/scripts/toolcraft-motion-reference-lock-recovery.test.mjs +144 -0
  228. package/templates/starter/scripts/toolcraft-motion-reference-media-source.mjs +165 -0
  229. package/templates/starter/scripts/toolcraft-motion-reference-media-source.test.mjs +299 -0
  230. package/templates/starter/scripts/toolcraft-motion-reference-publication-discovery.test.mjs +142 -0
  231. package/templates/starter/scripts/toolcraft-motion-reference-publication-isolation.test.mjs +234 -0
  232. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-schema.mjs +122 -0
  233. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.mjs +89 -0
  234. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.test.mjs +74 -0
  235. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.mjs +264 -0
  236. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.test.mjs +377 -0
  237. package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.mjs +254 -0
  238. package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.test.mjs +130 -0
  239. package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.mjs +128 -0
  240. package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.test.mjs +209 -0
  241. package/templates/starter/scripts/toolcraft-motion-reference-publication.fixtures.mjs +88 -0
  242. package/templates/starter/scripts/toolcraft-motion-reference-publication.mjs +249 -0
  243. package/templates/starter/scripts/toolcraft-motion-reference-publication.test.mjs +433 -0
  244. package/templates/starter/scripts/toolcraft-motion-reference-review-output.mjs +38 -0
  245. package/templates/starter/scripts/toolcraft-motion-reference-review-output.test.mjs +29 -0
  246. package/templates/starter/scripts/toolcraft-motion-reference-root-safety.test.mjs +84 -0
  247. package/templates/starter/scripts/toolcraft-motion-reference-roots.mjs +83 -0
  248. package/templates/starter/scripts/toolcraft-motion-reference-sampling.mjs +283 -0
  249. package/templates/starter/scripts/toolcraft-motion-reference-sampling.test.mjs +480 -0
  250. package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.mjs +39 -0
  251. package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.test.mjs +59 -0
  252. package/templates/starter/scripts/toolcraft-motion-reference-stage.mjs +71 -0
  253. package/templates/starter/scripts/toolcraft-motion-reference-stage.test.mjs +61 -0
  254. package/templates/starter/scripts/toolcraft-motion-review-numeric.mjs +74 -0
  255. package/templates/starter/scripts/toolcraft-motion-review-numeric.test.mjs +65 -0
  256. package/templates/starter/scripts/toolcraft-motion-review-partitioning.mjs +268 -0
  257. package/templates/starter/scripts/toolcraft-motion-review-partitioning.test.mjs +329 -0
  258. package/templates/starter/scripts/toolcraft-motion-review-protected-units.mjs +120 -0
  259. package/templates/starter/scripts/toolcraft-motion-review-protected-units.test.mjs +111 -0
  260. package/templates/starter/scripts/toolcraft-performance-escalation-policy.test.mjs +77 -345
  261. package/templates/starter/scripts/toolcraft-performance-receipt-validation.test.mjs +19 -21
  262. package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +1 -1
  263. package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +10 -1
  264. package/templates/starter/scripts/toolcraft-product-export-boundary.test.mjs +5 -1
  265. package/templates/starter/scripts/toolcraft-product-observable-facade.test.mjs +46 -1
  266. package/templates/starter/scripts/toolcraft-receipt-boundary.test.mjs +0 -1
  267. package/templates/starter/scripts/toolcraft-source-inventory.d.mts +5 -0
  268. package/templates/starter/scripts/toolcraft-source-inventory.mjs +25 -14
  269. package/templates/starter/scripts/toolcraft-source-inventory.test.mjs +48 -0
  270. package/templates/starter/scripts/toolcraft-source-ownership.mjs +0 -1
  271. package/templates/starter/scripts/toolcraft-source-ownership.test.mjs +30 -5
  272. package/templates/starter/scripts/toolcraft-verification-receipt-test-helpers.mjs +5 -26
  273. package/templates/starter/scripts/toolcraft-verification-receipt.d.mts +0 -7
  274. package/templates/starter/scripts/toolcraft-verification-receipt.mjs +3 -47
  275. package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +6 -87
  276. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.d.mts +19 -0
  277. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.mjs +107 -0
  278. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.test.mjs +114 -0
  279. package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.mjs +13 -2
  280. package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.test.mjs +110 -0
  281. package/templates/starter/src/app/acceptance/artifact-export-intent.ts +51 -20
  282. package/templates/starter/src/app/acceptance/canvas-coverage.ts +1 -0
  283. package/templates/starter/src/app/acceptance/color-bank-labels.ts +11 -15
  284. package/templates/starter/src/app/acceptance/color-row-grouping.ts +33 -0
  285. package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +0 -11
  286. package/templates/starter/src/app/acceptance/control-acceptance-policy.ts +2 -3
  287. package/templates/starter/src/app/acceptance/control-component-rules.ts +0 -10
  288. package/templates/starter/src/app/acceptance/control-labels.ts +30 -1
  289. package/templates/starter/src/app/acceptance/control-layout-section-rules.ts +18 -0
  290. package/templates/starter/src/app/acceptance/export-artifact-coverage.ts +25 -17
  291. package/templates/starter/src/app/acceptance/feature-verification-selection.test.ts +295 -0
  292. package/templates/starter/src/app/acceptance/feature-verification-selection.ts +161 -0
  293. package/templates/starter/src/app/acceptance/infinity-canvas.ts +10 -0
  294. package/templates/starter/src/app/acceptance/interaction-ownership-intent.ts +19 -1
  295. package/templates/starter/src/app/acceptance/interaction-ownership.ts +18 -2
  296. package/templates/starter/src/app/acceptance/motion-reference-evidence-validation.mjs +65 -0
  297. package/templates/starter/src/app/acceptance/motion-reference-evidence-windows.mjs +301 -0
  298. package/templates/starter/src/app/acceptance/motion-reference-evidence.d.mts +11 -0
  299. package/templates/starter/src/app/acceptance/motion-reference-evidence.mjs +145 -0
  300. package/templates/starter/src/app/acceptance/motion-reference-study-behaviors.ts +162 -0
  301. package/templates/starter/src/app/acceptance/motion-reference-study-coverage.ts +206 -0
  302. package/templates/starter/src/app/acceptance/motion-reference-study-identity.ts +129 -0
  303. package/templates/starter/src/app/acceptance/motion-reference-study-partitions.ts +186 -0
  304. package/templates/starter/src/app/acceptance/motion-reference-study.ts +90 -0
  305. package/templates/starter/src/app/acceptance/output-export-actions.test.ts +9 -1
  306. package/templates/starter/src/app/acceptance/output-export-actions.ts +14 -22
  307. package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +5 -1
  308. package/templates/starter/src/app/acceptance/output-export-model.ts +4 -0
  309. package/templates/starter/src/app/acceptance/output-export.ts +4 -1
  310. package/templates/starter/src/app/acceptance/reference-study-types.ts +167 -17
  311. package/templates/starter/src/app/acceptance/runtime-coverage.ts +6 -1
  312. package/templates/starter/src/app/acceptance/selection-scope.test.ts +200 -0
  313. package/templates/starter/src/app/acceptance/selection-scope.ts +151 -0
  314. package/templates/starter/src/app/acceptance/transfer-mode-types.ts +114 -0
  315. package/templates/starter/src/app/acceptance/types.ts +43 -118
  316. package/templates/starter/src/app/acceptance/validate-coverage.ts +14 -3
  317. package/templates/starter/src/app/starter-acceptance-data.ts +1 -0
  318. package/templates/starter/src/app/starter-acceptance.animation-intent.test.ts +3 -0
  319. package/templates/starter/src/app/starter-acceptance.artifact-export-intent.test.ts +81 -8
  320. package/templates/starter/src/app/starter-acceptance.background-export.test.ts +2 -0
  321. package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +2 -0
  322. package/templates/starter/src/app/starter-acceptance.color-row-grouping.test.ts +118 -0
  323. package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +1 -1
  324. package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +1 -0
  325. package/templates/starter/src/app/starter-acceptance.control-applicability.test.ts +1 -0
  326. package/templates/starter/src/app/starter-acceptance.control-label-context.test.ts +1 -0
  327. package/templates/starter/src/app/starter-acceptance.control-labels.test.ts +78 -3
  328. package/templates/starter/src/app/starter-acceptance.control-naming-rules.test.ts +77 -1
  329. package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +1 -1
  330. package/templates/starter/src/app/starter-acceptance.export-artifact.test.ts +74 -3
  331. package/templates/starter/src/app/starter-acceptance.export-test-utils.ts +5 -1
  332. package/templates/starter/src/app/starter-acceptance.image-export-settings.test.ts +2 -0
  333. package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +19 -3
  334. package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -1
  335. package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +28 -0
  336. package/templates/starter/src/app/starter-acceptance.motion-reference-evidence.test.ts +17 -0
  337. package/templates/starter/src/app/starter-acceptance.motion-reference-identity.test.ts +163 -0
  338. package/templates/starter/src/app/starter-acceptance.motion-reference-mapping.test.ts +133 -0
  339. package/templates/starter/src/app/starter-acceptance.motion-reference-ownership.test.ts +121 -0
  340. package/templates/starter/src/app/starter-acceptance.motion-reference-partitions.test.ts +210 -0
  341. package/templates/starter/src/app/starter-acceptance.motion-reference-test-utils.ts +313 -0
  342. package/templates/starter/src/app/starter-acceptance.output-export-intent.test.ts +78 -4
  343. package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +6 -1
  344. package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +18 -1
  345. package/templates/starter/src/app/starter-acceptance.product-worklog.test.ts +123 -2
  346. package/templates/starter/src/app/starter-acceptance.reference-custom-timeline.test.ts +2 -0
  347. package/templates/starter/src/app/starter-acceptance.reference-foundation.test.ts +8 -0
  348. package/templates/starter/src/app/starter-acceptance.reference-timeline.test.ts +7 -0
  349. package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +2 -0
  350. package/templates/starter/src/app/starter-acceptance.timeline-playback.test.ts +5 -0
  351. package/templates/starter/src/app/starter-acceptance.ts +34 -8
  352. package/templates/starter/src/app/starter-acceptance.video-export-settings.test.ts +2 -0
  353. package/templates/starter/src/app/starter-acceptance.video-reference-study.test.ts +34 -236
  354. package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +4 -0
  355. package/templates/starter/src/app/starter-acceptance.worklog-test-utils.ts +122 -6
  356. package/templates/starter/src/app/starter-acceptance.worklog.test.ts +152 -16
  357. package/templates/starter/src/app/starter-performance.gates.test.ts +20 -18
  358. package/templates/starter/src/app/starter-performance.lifecycle.test.ts +22 -6
  359. package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +3 -0
  360. package/templates/starter/tsconfig.json +1 -0
  361. package/templates/starter/scripts/toolcraft-browser-impact-selection.mjs +0 -26
  362. package/templates/starter/scripts/toolcraft-delivery-framework-refresh.test.mjs +0 -141
  363. package/templates/starter/scripts/toolcraft-delivery-functional-changed.test.mjs +0 -468
  364. package/templates/starter/scripts/toolcraft-delivery-functional-model-lifecycle.test.mjs +0 -254
  365. package/templates/starter/scripts/toolcraft-delivery-functional-semantic-regression.test.mjs +0 -135
  366. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-durability.test.mjs +0 -329
  367. package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +0 -430
  368. package/templates/starter/scripts/toolcraft-delivery-plan-functional-model.test.mjs +0 -358
  369. package/templates/starter/scripts/toolcraft-functional-proof-regression-fixtures.mjs +0 -298
  370. package/templates/starter/scripts/toolcraft-verification-impact-inventory.d.mts +0 -62
  371. package/templates/starter/scripts/toolcraft-verification-impact-inventory.mjs +0 -344
  372. package/templates/starter/scripts/toolcraft-verification-impact-inventory.test.mjs +0 -204
  373. package/templates/starter/scripts/toolcraft-verification-impact-performance-candidates.test.mjs +0 -210
  374. package/templates/starter/scripts/toolcraft-verification-impact-resolution.mjs +0 -344
  375. package/templates/starter/scripts/toolcraft-verification-impact-resolution.test.mjs +0 -270
  376. package/templates/starter/scripts/toolcraft-verification-impact-semantic-resolution.test.mjs +0 -449
  377. package/templates/starter/scripts/toolcraft-verification-impact-support-resolution.test.mjs +0 -195
  378. package/templates/starter/scripts/toolcraft-verification-impact.d.mts +0 -132
  379. package/templates/starter/scripts/toolcraft-verification-impact.mjs +0 -169
  380. package/templates/starter/scripts/toolcraft-verification-impact.test.mjs +0 -300
  381. package/templates/starter/scripts/toolcraft-verification-input-roles.mjs +0 -197
  382. package/templates/starter/scripts/toolcraft-verification-input-roles.test.mjs +0 -225
  383. package/templates/starter/src/app/acceptance/video-reference-study.ts +0 -217
  384. package/templates/starter/src/app/starter-verification-impact.json +0 -15
@@ -0,0 +1,151 @@
1
+ import type {
2
+ ToolcraftComponentAcceptance,
3
+ ToolcraftInteractionOwnershipEntry,
4
+ ToolcraftProductReadiness,
5
+ } from "./types";
6
+
7
+ type ToolcraftSelectionScopeValidationInput = {
8
+ acceptance: readonly ToolcraftComponentAcceptance[];
9
+ layersEnabled: boolean;
10
+ productReadiness: ToolcraftProductReadiness;
11
+ };
12
+
13
+ function isPropertyOwner(
14
+ entry: ToolcraftInteractionOwnershipEntry,
15
+ ): boolean {
16
+ return (
17
+ entry.capability === "precise-value-entry" ||
18
+ entry.capability === "property-edit"
19
+ );
20
+ }
21
+
22
+ function isSelectionOwner(
23
+ entry: ToolcraftInteractionOwnershipEntry | undefined,
24
+ ): boolean {
25
+ return (
26
+ entry?.capability === "spatial-selection" ||
27
+ entry?.capability === "structured-selection"
28
+ );
29
+ }
30
+
31
+ export function getToolcraftSelectionScopeErrors({
32
+ acceptance,
33
+ layersEnabled,
34
+ productReadiness,
35
+ }: ToolcraftSelectionScopeValidationInput): string[] {
36
+ const errors: string[] = [];
37
+ const inventory =
38
+ productReadiness.mode === "product"
39
+ ? (productReadiness.interactionOwnership ?? [])
40
+ : [];
41
+
42
+ const ownershipById = new Map(
43
+ inventory.map((entry) => [entry.id, entry]),
44
+ );
45
+
46
+ for (const owner of inventory) {
47
+ const selectionScope = owner.selectionScope;
48
+
49
+ if (!isPropertyOwner(owner)) {
50
+ if (selectionScope !== undefined) {
51
+ errors.push(
52
+ `${owner.id} may not declare selectionScope because ${owner.capability} is not a property operation.`,
53
+ );
54
+ }
55
+ continue;
56
+ }
57
+
58
+ if (
59
+ !selectionScope ||
60
+ (selectionScope.mode !== "global" &&
61
+ selectionScope.mode !== "selected-entity")
62
+ ) {
63
+ errors.push(
64
+ `${owner.id} must declare selectionScope as global or selected-entity.`,
65
+ );
66
+ continue;
67
+ }
68
+
69
+ if (selectionScope.mode === "global") {
70
+ if ("selectionInteractionId" in selectionScope) {
71
+ errors.push(
72
+ `${owner.id} global selectionScope may not declare selectionInteractionId.`,
73
+ );
74
+ }
75
+ continue;
76
+ }
77
+
78
+ if (!selectionScope.selectionInteractionId.trim()) {
79
+ errors.push(
80
+ `${owner.id} selected-entity scope must reference a non-empty selectionInteractionId.`,
81
+ );
82
+ continue;
83
+ }
84
+
85
+ const selectionOwner = ownershipById.get(
86
+ selectionScope.selectionInteractionId,
87
+ );
88
+ if (!isSelectionOwner(selectionOwner)) {
89
+ errors.push(
90
+ `${owner.id} selectionInteractionId ${selectionScope.selectionInteractionId} must reference spatial-selection or structured-selection ownership.`,
91
+ );
92
+ }
93
+
94
+ const propertyAcceptance = acceptance.find(
95
+ (entry) =>
96
+ entry.interactionId === owner.id && entry.target === owner.target,
97
+ );
98
+ if (
99
+ propertyAcceptance?.selectionScopeCoverage !== "two-entity-isolation"
100
+ ) {
101
+ errors.push(
102
+ `${owner.id} selected-entity property must declare selectionScopeCoverage "two-entity-isolation" on its acceptance row.`,
103
+ );
104
+ }
105
+ }
106
+
107
+ for (const entry of acceptance) {
108
+ const owner = entry.interactionId
109
+ ? ownershipById.get(entry.interactionId)
110
+ : undefined;
111
+ const selectedProperty =
112
+ owner &&
113
+ isPropertyOwner(owner) &&
114
+ owner.selectionScope?.mode === "selected-entity";
115
+ const selectedLayerControl =
116
+ layersEnabled && entry.target?.startsWith("selectedLayer.");
117
+ const layerOwnedProperty =
118
+ layersEnabled && entry.layerCoverage === "selected-layer-controls";
119
+ const requiresIsolation =
120
+ selectedProperty || selectedLayerControl || layerOwnedProperty;
121
+
122
+ if (
123
+ requiresIsolation &&
124
+ entry.selectionScopeCoverage !== "two-entity-isolation"
125
+ ) {
126
+ errors.push(
127
+ `${entry.id} must declare selectionScopeCoverage "two-entity-isolation" proving edits stay on the selected entity.`,
128
+ );
129
+ }
130
+
131
+ if (
132
+ entry.selectionScopeCoverage === "two-entity-isolation" &&
133
+ !requiresIsolation
134
+ ) {
135
+ errors.push(
136
+ `${entry.id} declares two-entity isolation without selected-entity ownership or a selectedLayer.* target.`,
137
+ );
138
+ }
139
+
140
+ if (
141
+ selectedLayerControl &&
142
+ entry.layerCoverage !== "selected-layer-controls"
143
+ ) {
144
+ errors.push(
145
+ `${entry.id} targets selectedLayer.* and must declare layerCoverage "selected-layer-controls" together with two-entity isolation.`,
146
+ );
147
+ }
148
+ }
149
+
150
+ return errors;
151
+ }
@@ -0,0 +1,114 @@
1
+ import type {
2
+ ToolcraftReferenceFeatureInventoryItem,
3
+ ToolcraftReferenceInput,
4
+ ToolcraftReferenceStudyEvidence,
5
+ } from "./reference-study-types";
6
+
7
+ export type ToolcraftReferenceCoverage =
8
+ | "canvas-sizing"
9
+ | "control-mapping"
10
+ | "export-at-time"
11
+ | "export-copy"
12
+ | "media-lifecycle"
13
+ | "pause-resume"
14
+ | "renderer-loop"
15
+ | "renderer-state"
16
+ | "restart"
17
+ | "spawn-update-cadence"
18
+ | "time-progress";
19
+
20
+ export type ToolcraftReferenceTimelineCoverage =
21
+ | "all-range"
22
+ | "duration"
23
+ | "export-at-time"
24
+ | "export-range"
25
+ | "jump-to-trim-start"
26
+ | "keyframes"
27
+ | "loop"
28
+ | "playback"
29
+ | "range-playback"
30
+ | "restart"
31
+ | "scrub"
32
+ | "state-jump"
33
+ | "time-progress"
34
+ | "trim-range";
35
+
36
+ export type ToolcraftTimelinePlaybackCoverage =
37
+ | "duration"
38
+ | "loop"
39
+ | "pause-resume"
40
+ | "rendered-frame"
41
+ | "scrub";
42
+
43
+ export type ToolcraftAutonomousAnimationCoverage =
44
+ | "no-duration-control"
45
+ | "no-export-at-time"
46
+ | "no-loop-control"
47
+ | "no-play-pause"
48
+ | "no-scrub"
49
+ | "no-user-facing-transport";
50
+
51
+ export type ToolcraftTimelineLoopDurationSource =
52
+ | "product-derived"
53
+ | "reference"
54
+ | "user-request";
55
+
56
+ export type ToolcraftTimelineLoopDurationIntent = {
57
+ evidence: string;
58
+ seconds: number;
59
+ source: ToolcraftTimelineLoopDurationSource;
60
+ };
61
+
62
+ export type ToolcraftTimelineLoopProof = {
63
+ direction: "forward-only";
64
+ durationChange: "reproved-after-edit";
65
+ reversePlayback: "forbidden";
66
+ seam: "first-last-match";
67
+ };
68
+
69
+ export type ToolcraftAnimationIntent =
70
+ | { mode: "none" }
71
+ | {
72
+ behaviorCoverage: readonly ToolcraftAutonomousAnimationCoverage[];
73
+ mode: "autonomous";
74
+ reason: string;
75
+ }
76
+ | {
77
+ loopDuration: ToolcraftTimelineLoopDurationIntent;
78
+ mode: "timeline-keyframes";
79
+ }
80
+ | {
81
+ loopDuration: ToolcraftTimelineLoopDurationIntent;
82
+ mode: "timeline-playback";
83
+ };
84
+
85
+ export type ToolcraftReferenceTimelineMode =
86
+ | "custom-reference-timeline"
87
+ | "none"
88
+ | "toolcraft-keyframes"
89
+ | "toolcraft-playback";
90
+
91
+ export type ToolcraftReferenceTimelineContract = {
92
+ behaviorCoverage: readonly ToolcraftReferenceTimelineCoverage[];
93
+ loopDuration?: ToolcraftTimelineLoopDurationIntent;
94
+ mode: ToolcraftReferenceTimelineMode;
95
+ };
96
+
97
+ type ToolcraftTransferModeBase = {
98
+ animationIntent?: ToolcraftAnimationIntent;
99
+ referenceInputs: readonly ToolcraftReferenceInput[];
100
+ };
101
+
102
+ export type ToolcraftTransferMode = ToolcraftTransferModeBase &
103
+ (
104
+ | { mode: "new-toolcraft-app" }
105
+ | {
106
+ behaviorCoverage: readonly ToolcraftReferenceCoverage[];
107
+ mode: "reference-runtime-clone";
108
+ referenceFeatureInventory?: readonly ToolcraftReferenceFeatureInventoryItem[];
109
+ referenceName: string;
110
+ referenceStudy?: ToolcraftReferenceStudyEvidence;
111
+ referenceTimeline: ToolcraftReferenceTimelineContract;
112
+ sourceOfTruth: "reference-runtime";
113
+ }
114
+ );
@@ -12,11 +12,13 @@ import type {
12
12
  } from "./canvas-coverage";
13
13
  import type { ToolcraftModelImportCoverage } from "./model-import-coverage";
14
14
  import type { ToolcraftInteractionOwnershipEntry } from "./interaction-ownership-intent";
15
+ import type { ToolcraftMotionReferenceCoverage } from "./reference-study-types";
15
16
  import type {
16
- ToolcraftReferenceFeatureInventoryItem,
17
- ToolcraftReferenceStudyEvidence,
18
- ToolcraftVideoReferenceStudyEvidence,
19
- } from "./reference-study-types";
17
+ ToolcraftReferenceCoverage,
18
+ ToolcraftReferenceTimelineCoverage,
19
+ ToolcraftTimelineLoopProof,
20
+ ToolcraftTimelinePlaybackCoverage,
21
+ } from "./transfer-mode-types";
20
22
  import type { ToolcraftViewInteractionIntent } from "./view-interaction-intent";
21
23
 
22
24
  export { TOOLCRAFT_REQUIRED_MODEL_IMPORT_COVERAGE } from "./model-import-coverage";
@@ -38,15 +40,38 @@ export type {
38
40
  ToolcraftViewInteractionIntent,
39
41
  } from "./view-interaction-intent";
40
42
  export type {
43
+ ToolcraftMotionReferenceBehavior,
44
+ ToolcraftMotionReferenceCoverage,
45
+ ToolcraftMotionReferenceEvent,
46
+ ToolcraftMotionReferenceEvidence,
47
+ ToolcraftMotionReferenceEvidenceEvent,
48
+ ToolcraftMotionReferenceInput,
49
+ ToolcraftMotionReferenceOrdinalFrame,
50
+ ToolcraftMotionReferencePhase,
51
+ ToolcraftMotionReferenceSourceKind,
52
+ ToolcraftMotionReferenceStudy,
53
+ ToolcraftMotionReferenceTimedFrame,
54
+ ToolcraftMotionReferenceTimingClaim,
55
+ ToolcraftMotionReferenceTimingMode,
41
56
  ToolcraftReferenceFeatureInventoryItem,
42
57
  ToolcraftReferenceFeatureStatus,
58
+ ToolcraftReferenceInput,
43
59
  ToolcraftReferenceStudyEvidence,
44
60
  ToolcraftReferenceStudyStatus,
45
- ToolcraftVideoReferenceAcceptanceMapping,
46
- ToolcraftVideoReferenceStoryboardFrame,
47
- ToolcraftVideoReferenceStudyEvidence,
48
- ToolcraftVideoReferenceTransition,
49
61
  } from "./reference-study-types";
62
+ export type {
63
+ ToolcraftAnimationIntent,
64
+ ToolcraftAutonomousAnimationCoverage,
65
+ ToolcraftReferenceCoverage,
66
+ ToolcraftReferenceTimelineContract,
67
+ ToolcraftReferenceTimelineCoverage,
68
+ ToolcraftReferenceTimelineMode,
69
+ ToolcraftTimelineLoopDurationIntent,
70
+ ToolcraftTimelineLoopDurationSource,
71
+ ToolcraftTimelineLoopProof,
72
+ ToolcraftTimelinePlaybackCoverage,
73
+ ToolcraftTransferMode,
74
+ } from "./transfer-mode-types";
50
75
 
51
76
  export type ToolcraftAcceptanceEvidence =
52
77
  | "command-side-effect"
@@ -60,44 +85,9 @@ export type ToolcraftAcceptanceEvidence =
60
85
 
61
86
  export type ToolcraftExportArtifactCoverage =
62
87
  | "all-required-image-export-behavior"
88
+ | "all-required-svg-export-behavior"
63
89
  | "all-required-video-export-behavior";
64
90
 
65
- export type ToolcraftReferenceCoverage =
66
- | "canvas-sizing"
67
- | "control-mapping"
68
- | "export-at-time"
69
- | "export-copy"
70
- | "media-lifecycle"
71
- | "pause-resume"
72
- | "renderer-loop"
73
- | "renderer-state"
74
- | "restart"
75
- | "spawn-update-cadence"
76
- | "time-progress";
77
-
78
- export type ToolcraftReferenceTimelineCoverage =
79
- | "all-range"
80
- | "duration"
81
- | "export-at-time"
82
- | "export-range"
83
- | "jump-to-trim-start"
84
- | "keyframes"
85
- | "loop"
86
- | "playback"
87
- | "range-playback"
88
- | "restart"
89
- | "scrub"
90
- | "state-jump"
91
- | "time-progress"
92
- | "trim-range";
93
-
94
- export type ToolcraftTimelinePlaybackCoverage =
95
- | "duration"
96
- | "loop"
97
- | "pause-resume"
98
- | "rendered-frame"
99
- | "scrub";
100
-
101
91
  export type ToolcraftPersistenceCoverage = "reload";
102
92
 
103
93
  export type ToolcraftSettingsTransferCoverage = "opt-out";
@@ -129,62 +119,6 @@ export type ToolcraftMediaLifecycleCoverage =
129
119
  | "transform-output"
130
120
  | "upload";
131
121
 
132
- export type ToolcraftAutonomousAnimationCoverage =
133
- | "no-duration-control"
134
- | "no-export-at-time"
135
- | "no-loop-control"
136
- | "no-play-pause"
137
- | "no-scrub"
138
- | "no-user-facing-transport";
139
-
140
- export type ToolcraftTimelineLoopDurationSource =
141
- | "product-derived"
142
- | "reference"
143
- | "user-request";
144
-
145
- export type ToolcraftTimelineLoopDurationIntent = {
146
- evidence: string;
147
- seconds: number;
148
- source: ToolcraftTimelineLoopDurationSource;
149
- };
150
-
151
- export type ToolcraftTimelineLoopProof = {
152
- direction: "forward-only";
153
- durationChange: "reproved-after-edit";
154
- reversePlayback: "forbidden";
155
- seam: "first-last-match";
156
- };
157
-
158
- export type ToolcraftAnimationIntent =
159
- | {
160
- mode: "none";
161
- }
162
- | {
163
- behaviorCoverage: readonly ToolcraftAutonomousAnimationCoverage[];
164
- mode: "autonomous";
165
- reason: string;
166
- }
167
- | {
168
- loopDuration: ToolcraftTimelineLoopDurationIntent;
169
- mode: "timeline-keyframes";
170
- }
171
- | {
172
- loopDuration: ToolcraftTimelineLoopDurationIntent;
173
- mode: "timeline-playback";
174
- };
175
-
176
- export type ToolcraftReferenceTimelineMode =
177
- | "custom-reference-timeline"
178
- | "none"
179
- | "toolcraft-keyframes"
180
- | "toolcraft-playback";
181
-
182
- export type ToolcraftReferenceTimelineContract = {
183
- behaviorCoverage: readonly ToolcraftReferenceTimelineCoverage[];
184
- loopDuration?: ToolcraftTimelineLoopDurationIntent;
185
- mode: ToolcraftReferenceTimelineMode;
186
- };
187
-
188
122
  export type ToolcraftLayerCoverage =
189
123
  | "grouping"
190
124
  | "media-lifecycle"
@@ -193,6 +127,8 @@ export type ToolcraftLayerCoverage =
193
127
  | "selection"
194
128
  | "visibility";
195
129
 
130
+ export type ToolcraftSelectionScopeCoverage = "two-entity-isolation";
131
+
196
132
  export type ToolcraftControlPartCoverage =
197
133
  | "anchorGrid.position"
198
134
  | "channelMixer.activeChannel"
@@ -256,24 +192,6 @@ export type ToolcraftCustomControlCapability =
256
192
  | "reorder"
257
193
  | "selection";
258
194
 
259
- export type ToolcraftTransferMode =
260
- | {
261
- animationIntent?: ToolcraftAnimationIntent;
262
- mode: "new-toolcraft-app";
263
- videoReferenceStudy?: ToolcraftVideoReferenceStudyEvidence;
264
- }
265
- | {
266
- animationIntent?: ToolcraftAnimationIntent;
267
- behaviorCoverage: readonly ToolcraftReferenceCoverage[];
268
- mode: "reference-runtime-clone";
269
- referenceFeatureInventory?: readonly ToolcraftReferenceFeatureInventoryItem[];
270
- referenceName: string;
271
- referenceStudy?: ToolcraftReferenceStudyEvidence;
272
- referenceTimeline: ToolcraftReferenceTimelineContract;
273
- sourceOfTruth: "reference-runtime";
274
- videoReferenceStudy?: ToolcraftVideoReferenceStudyEvidence;
275
- };
276
-
277
195
  export type ToolcraftImageExportIntent =
278
196
  | Readonly<{ mode: "toolcraft-default" }>
279
197
  | Readonly<{ evidence: string; mode: "user-requested" }>
@@ -283,8 +201,13 @@ export type ToolcraftVideoExportIntent =
283
201
  | Readonly<{ mode: "not-requested" }>
284
202
  | Readonly<{ evidence: string; mode: "user-requested" }>;
285
203
 
204
+ export type ToolcraftSvgExportIntent =
205
+ | Readonly<{ mode: "not-requested" }>
206
+ | Readonly<{ evidence: string; mode: "user-requested" }>;
207
+
286
208
  export type ToolcraftArtifactExportIntent = Readonly<{
287
209
  image: ToolcraftImageExportIntent;
210
+ svg: ToolcraftSvgExportIntent;
288
211
  video: ToolcraftVideoExportIntent;
289
212
  }>;
290
213
 
@@ -332,6 +255,7 @@ export type ToolcraftComponentAcceptance = {
332
255
  modelImportCoverage?:
333
256
  | "all-required-model-import-behavior"
334
257
  | readonly ToolcraftModelImportCoverage[];
258
+ motionReferenceCoverage?: readonly ToolcraftMotionReferenceCoverage[];
335
259
  optionCoverage?: "each-visible-item" | readonly string[];
336
260
  orientationGizmoCoverage?:
337
261
  | "all-required-orientation-gizmo-behavior"
@@ -342,6 +266,7 @@ export type ToolcraftComponentAcceptance = {
342
266
  referenceTimelineCoverage?: ToolcraftReferenceTimelineCoverage;
343
267
  renderScaleCoverage?: ToolcraftRenderScaleCoverage;
344
268
  settingsTransferCoverage?: ToolcraftSettingsTransferCoverage;
269
+ selectionScopeCoverage?: ToolcraftSelectionScopeCoverage;
345
270
  target?: string;
346
271
  timelineCoverage?: "keyframes" | "playback";
347
272
  timelinePlaybackCoverage?:
@@ -21,8 +21,10 @@ import {
21
21
  schemaHasVideoExportPanelAction,
22
22
  } from "./output-export";
23
23
  import { getToolcraftOrientationGizmoErrors } from "./orientation-gizmo";
24
+ import { getToolcraftMotionReferenceStudyErrors } from "./motion-reference-study";
24
25
  import { getToolcraftReferenceRuntimeCloneErrors } from "./reference-runtime";
25
26
  import { getToolcraftRenderScaleCoverageErrors } from "./render-scale";
27
+ import { getToolcraftSelectionScopeErrors } from "./selection-scope";
26
28
  import {
27
29
  getToolcraftCanvasSizingCoverageErrors,
28
30
  getToolcraftLayerCoverageErrors,
@@ -46,7 +48,6 @@ import {
46
48
  type ToolcraftAcceptanceValidationContext,
47
49
  type ToolcraftAcceptanceValidator,
48
50
  } from "./validation-pipeline";
49
- import { getToolcraftVideoReferenceStudyErrors } from "./video-reference-study";
50
51
  import { getToolcraftViewInteractionErrors } from "./view-interaction";
51
52
 
52
53
  export type ToolcraftAcceptanceValidationInput = {
@@ -112,6 +113,16 @@ const toolcraftAcceptanceValidators: readonly ToolcraftAcceptanceValidator[] = [
112
113
  productReadiness,
113
114
  }),
114
115
  },
116
+ {
117
+ path: "starterProductReadiness.interactionOwnership[].selectionScope",
118
+ ruleId: "interaction-surface-ownership",
119
+ validate: ({ acceptance, layersEnabled, productReadiness }) =>
120
+ getToolcraftSelectionScopeErrors({
121
+ acceptance,
122
+ layersEnabled,
123
+ productReadiness,
124
+ }),
125
+ },
115
126
  {
116
127
  path: "starterProductReadiness.viewInteraction",
117
128
  ruleId: "renderer-view-interaction",
@@ -186,9 +197,9 @@ const toolcraftAcceptanceValidators: readonly ToolcraftAcceptanceValidator[] = [
186
197
  }),
187
198
  },
188
199
  {
189
- path: "starterTransferMode.videoReferenceStudy",
200
+ path: "starterTransferMode.referenceInputs",
190
201
  ruleId: "video-reference-analysis",
191
- validate: getToolcraftVideoReferenceStudyErrors,
202
+ validate: getToolcraftMotionReferenceStudyErrors,
192
203
  },
193
204
  {
194
205
  path: "starterTransferMode.animationIntent",
@@ -14,6 +14,7 @@ const starterPersistenceSlices =
14
14
  export const starterTransferMode: ToolcraftTransferMode = {
15
15
  animationIntent: { mode: "none" },
16
16
  mode: "new-toolcraft-app",
17
+ referenceInputs: [],
17
18
  };
18
19
 
19
20
  export const starterProductReadiness: ToolcraftProductReadiness = {
@@ -253,6 +253,7 @@ describe("starter acceptance animation intent contract", () => {
253
253
  reason: "The shimmer is decorative self-running output and does not expose product time transport.",
254
254
  },
255
255
  mode: "new-toolcraft-app",
256
+ referenceInputs: [],
256
257
  },
257
258
  }),
258
259
  ).toEqual([]);
@@ -351,6 +352,7 @@ describe("starter acceptance animation intent contract", () => {
351
352
  reason: "The shader is decorative self-running output with no transport controls.",
352
353
  },
353
354
  mode: "new-toolcraft-app",
355
+ referenceInputs: [],
354
356
  },
355
357
  }),
356
358
  ).toContain(
@@ -377,6 +379,7 @@ describe("starter acceptance animation intent contract", () => {
377
379
  mode: "timeline-keyframes",
378
380
  },
379
381
  mode: "new-toolcraft-app",
382
+ referenceInputs: [],
380
383
  },
381
384
  }),
382
385
  ).toContain(