@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
@@ -37,6 +37,7 @@ describe("starter acceptance worklog contract", () => {
37
37
  \`\`\`md
38
38
  ### Not a delivery iteration
39
39
  - Request: Forged request.
40
+ - Source reviewed: forged-reference.mp4 video reference.
40
41
  \`\`\`
41
42
 
42
43
  ## Evidence`,
@@ -98,7 +99,7 @@ describe("starter acceptance worklog contract", () => {
98
99
  expect(acceptanceTesting).toContain("builtInFitCheck");
99
100
  });
100
101
 
101
- it("requires product worklogs to record storyboard evidence for video references", () => {
102
+ it("reports video wording as an unregistered input when typed references are empty", () => {
102
103
  const worklog = createAgentWorklogFixture({
103
104
  evidenceLines: [
104
105
  "- Source reviewed: user prompt, ref.mp4, src/app/product-renderer.tsx.",
@@ -110,34 +111,169 @@ describe("starter acceptance worklog contract", () => {
110
111
  },
111
112
  });
112
113
 
113
- expect(getAgentWorklogValidationErrors(worklog)).toContain(
114
- "agent-worklog.md cites a video reference, screen recording, GIF, extracted frames, or contact sheet; record a Video Reference Study with storyboard frames and frame-to-frame transition analysis.",
114
+ expect(
115
+ getAgentWorklogValidationErrors(worklog, { motionReferences: [] }),
116
+ ).toContain(
117
+ "agent-worklog.md cites a video reference, screen recording, GIF, extracted frames, or contact sheet, but starterTransferMode.referenceInputs registers no motion reference input.",
115
118
  );
116
119
  });
117
120
 
118
- it("accepts product worklogs that record video reference storyboard and transition evidence", () => {
121
+ it("requires one exact typed summary for each timed motion-reference study", () => {
122
+ const motionReference = {
123
+ contactSheetPath:
124
+ "src/app/reference-studies/study-main/contact-sheet.png",
125
+ referenceId:
126
+ "motion-reference-v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
127
+ requiresRealTimeReview: true,
128
+ requiresSlowedReview: true,
129
+ sourceSha256:
130
+ "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
131
+ studyId: "study-main",
132
+ timingMode: "seconds" as const,
133
+ };
119
134
  const worklog = createAgentWorklogFixture({
120
135
  evidenceLines: [
121
- "- Source reviewed: user prompt, ref.mp4, extracted frames, contact sheet, src/app/product-renderer.tsx.",
136
+ "- Source reviewed: user prompt, ref.mp4, extracted frames, src/app/product-renderer.tsx.",
122
137
  "- Contract applied: Toolcraft workflow and video-reference-analysis.",
123
138
  ],
124
- extraDecisionSections: [
125
- [
126
- "### Video Reference Study",
127
- "- Decision: Implement from storyboard frames and frame-to-frame transition analysis.",
128
- "- Reason: The video reference defines behavior, not only a static visual state.",
129
- "- Evidence: extracted frames f000/f012/f024/f036 and transition analysis between adjacent frames.",
130
- ].join("\n"),
131
- ],
132
139
  trailFields: {
133
140
  "Alternatives rejected": "Single screenshot implementation because the video behavior changes frame to frame.",
134
141
  "Contract rules applied": "video-reference-analysis and acceptance-product-observable.",
135
- "Reference inputs": "/fixtures/reference-motion/ref.mp4 video reference, extracted frames, contact sheet.",
136
- "Source/reference checked": "User prompt, /fixtures/reference-motion/ref.mp4 video, extracted frames, and contact sheet.",
142
+ "Reference inputs": "/fixtures/reference-motion/ref.mp4 video reference.",
143
+ "Source/reference checked": "User prompt and /fixtures/reference-motion/ref.mp4 video.",
137
144
  },
138
145
  });
139
146
 
140
- expect(getAgentWorklogValidationErrors(worklog)).toEqual([]);
147
+ expect(
148
+ getAgentWorklogValidationErrors(worklog, {
149
+ motionReferences: [motionReference],
150
+ }),
151
+ ).toEqual([
152
+ expect.stringContaining('motion reference study "study-main"'),
153
+ ]);
154
+
155
+ const genericKeywords = worklog.replace(
156
+ "## Decision Trail",
157
+ [
158
+ "### Video Reference Study",
159
+ "- Evidence: storyboard frames and transition analysis from the contact sheet.",
160
+ "",
161
+ "## Decision Trail",
162
+ ].join("\n"),
163
+ );
164
+ expect(
165
+ getAgentWorklogValidationErrors(genericKeywords, {
166
+ motionReferences: [motionReference],
167
+ }),
168
+ ).toEqual([
169
+ expect.stringContaining('motion reference study "study-main"'),
170
+ ]);
171
+
172
+ const exactRecord = [
173
+ "- Motion reference study:",
174
+ `referenceId=${motionReference.referenceId};`,
175
+ `studyId=${motionReference.studyId};`,
176
+ `sourceSha256=${motionReference.sourceSha256};`,
177
+ `timingMode=${motionReference.timingMode};`,
178
+ `contactSheetPath=${motionReference.contactSheetPath};`,
179
+ "review=real-time,slowed.",
180
+ ].join(" ");
181
+ for (const inexactRecord of [
182
+ exactRecord.replace(
183
+ motionReference.referenceId,
184
+ `${motionReference.referenceId}x`,
185
+ ),
186
+ exactRecord.replace("studyId=study-main", "studyId=study-other"),
187
+ exactRecord.replace(
188
+ motionReference.sourceSha256,
189
+ `c${motionReference.sourceSha256.slice(1)}`,
190
+ ),
191
+ exactRecord.replace("timingMode=seconds", "timingMode=ordinal"),
192
+ exactRecord.replace(
193
+ motionReference.contactSheetPath,
194
+ "src/app/reference-studies/study-main/other-sheet.png",
195
+ ),
196
+ exactRecord.replace("review=real-time,slowed", "review=real-time"),
197
+ ]) {
198
+ expect(
199
+ getAgentWorklogValidationErrors(`${worklog}\n${inexactRecord}`, {
200
+ motionReferences: [motionReference],
201
+ }),
202
+ ).toEqual([
203
+ expect.stringContaining('motion reference study "study-main"'),
204
+ ]);
205
+ }
206
+ expect(
207
+ getAgentWorklogValidationErrors(`${worklog}\n${exactRecord}`, {
208
+ motionReferences: [motionReference],
209
+ }),
210
+ ).toEqual([]);
211
+ });
212
+
213
+ it("requires ordered-frame review for ordinal evidence and rejects timing review wording", () => {
214
+ const motionReference = {
215
+ contactSheetPath:
216
+ "src/app/reference-studies/study-ordinal/contact-sheet.png",
217
+ referenceId:
218
+ "motion-reference-v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
219
+ requiresRealTimeReview: false,
220
+ requiresSlowedReview: false,
221
+ sourceSha256:
222
+ "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
223
+ studyId: "study-ordinal",
224
+ timingMode: "ordinal" as const,
225
+ };
226
+ const base = createAgentWorklogFixture();
227
+ const timedWording = `${base}\n- Motion reference study: referenceId=${motionReference.referenceId}; studyId=${motionReference.studyId}; sourceSha256=${motionReference.sourceSha256}; timingMode=ordinal; contactSheetPath=${motionReference.contactSheetPath}; review=real-time,slowed.`;
228
+ expect(
229
+ getAgentWorklogValidationErrors(timedWording, {
230
+ motionReferences: [motionReference],
231
+ }),
232
+ ).toEqual([
233
+ expect.stringContaining('motion reference study "study-ordinal"'),
234
+ ]);
235
+
236
+ const ordinalRecord = timedWording.replace(
237
+ "review=real-time,slowed",
238
+ "review=ordered-frames",
239
+ );
240
+ expect(
241
+ getAgentWorklogValidationErrors(ordinalRecord, {
242
+ motionReferences: [motionReference],
243
+ }),
244
+ ).toEqual([]);
245
+ });
246
+
247
+ it("does not let one record satisfy two nested studies", () => {
248
+ const referenceId =
249
+ "motion-reference-v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
250
+ const sourceSha256 =
251
+ "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
252
+ const first = {
253
+ contactSheetPath:
254
+ "src/app/reference-studies/study-one/contact-sheet.png",
255
+ referenceId,
256
+ requiresRealTimeReview: true,
257
+ requiresSlowedReview: false,
258
+ sourceSha256,
259
+ studyId: "study-one",
260
+ timingMode: "seconds" as const,
261
+ };
262
+ const second = {
263
+ ...first,
264
+ contactSheetPath:
265
+ "src/app/reference-studies/study-two/contact-sheet.png",
266
+ studyId: "study-two",
267
+ };
268
+ const worklog = `${createAgentWorklogFixture()}\n- Motion reference study: referenceId=${referenceId}; studyId=study-one; sourceSha256=${sourceSha256}; timingMode=seconds; contactSheetPath=${first.contactSheetPath}; review=real-time.`;
269
+
270
+ expect(
271
+ getAgentWorklogValidationErrors(worklog, {
272
+ motionReferences: [first, second],
273
+ }),
274
+ ).toEqual([
275
+ expect.stringContaining('motion reference study "study-two"'),
276
+ ]);
141
277
  });
142
278
 
143
279
  it("does not treat ordinary video export worklog evidence as a video reference", () => {
@@ -20,9 +20,6 @@ import {
20
20
  type ToolcraftEnvelopePerformanceConfig,
21
21
  validateToolcraftPerformanceCoverage,
22
22
  } from "@repo/toolcraft-runtime";
23
- import {
24
- validateToolcraftCurrentPerformanceImpactInventory,
25
- } from "../../scripts/toolcraft-verification-receipt.mjs";
26
23
  import {
27
24
  createToolcraftScriptLineBudgetPolicy,
28
25
  getToolcraftScriptProductionEntryPaths,
@@ -146,6 +143,9 @@ function collectPerformanceSpecFacts(source: string, fileName: string) {
146
143
  });
147
144
  }
148
145
 
146
+ // Hang-only ceiling: functional gate duration is never product performance evidence.
147
+ const TOOLCRAFT_FUNCTIONAL_GATE_TIMEOUT_MS = 60_000;
148
+
149
149
  describe("Toolcraft starter performance gates", () => {
150
150
  it(
151
151
  "keeps generated verification scripts within shared recursive budgets",
@@ -153,7 +153,7 @@ describe("Toolcraft starter performance gates", () => {
153
153
  const result = await evaluateGeneratedScriptBudgets(projectDir);
154
154
  expect(result.lineBudgetViolations).toEqual([]);
155
155
  },
156
- 15_000,
156
+ TOOLCRAFT_FUNCTIONAL_GATE_TIMEOUT_MS,
157
157
  );
158
158
 
159
159
  it("classifies every script extension and production-looking test by reachability", async () => {
@@ -355,13 +355,27 @@ describe("Toolcraft starter performance gates", () => {
355
355
  expect(playwrightConfigForbidsFocusedTests()).toBe(true);
356
356
  });
357
357
 
358
+ it("keeps later feature verification product-only and outside proof authority", () => {
359
+ const source = readFileSync(
360
+ join(projectDir, "scripts/run-feature-verification.mjs"),
361
+ "utf8",
362
+ );
363
+
364
+ expect(source).toContain("Promise.all");
365
+ expect(source).toContain("resolveToolcraftPlaywrightTestTitles");
366
+ expect(source).toContain("TOOLCRAFT_BROWSER_SERVER_MODE: \"dev\"");
367
+ expect(source).not.toMatch(
368
+ /executeToolcraftDeliveryLifecycle|measureToolcraftPerformanceCheckpoint|collectToolcraftVerificationInputs/iu,
369
+ );
370
+ });
371
+
358
372
  it("keeps verification lifecycle authority in the runtime contract", () => {
359
373
  expect(starterPerformance).not.toHaveProperty("browserCheckPolicy");
360
374
  expect(TOOLCRAFT_PERFORMANCE_VERIFICATION_LIFECYCLE).toEqual({
361
375
  delivery: {
362
376
  command: "verify:delivery",
363
- modes: ["functional", "performance-iteration"],
364
- selectors: "automatic",
377
+ modes: ["initial-functional", "performance-iteration"],
378
+ selectors: "initial-complete-or-authority-exact",
365
379
  },
366
380
  fullPerformance: {
367
381
  command: "verify:perf",
@@ -380,18 +394,6 @@ describe("Toolcraft starter performance gates", () => {
380
394
  ).toEqual([]);
381
395
  });
382
396
 
383
- it("maps every product production module to current renderer pass ownership", async () => {
384
- const knownPassIds = (starterPerformance.rendererPipeline?.passes ?? []).map(
385
- ({ id }) => id,
386
- );
387
- await expect(
388
- validateToolcraftCurrentPerformanceImpactInventory({
389
- knownPassIds,
390
- rootDir: projectDir,
391
- }),
392
- ).resolves.toBeDefined();
393
- });
394
-
395
397
  it("keeps unresolved kernel decisions pending during functional delivery", () => {
396
398
  const performanceConfig: ToolcraftEnvelopePerformanceConfig = starterPerformance;
397
399
  const rawAssessment = assessToolcraftRenderPlan(starterSchema, {
@@ -12,8 +12,8 @@ import { projectDir } from "./starter-performance-test-utils";
12
12
 
13
13
  const expectedRequiredPackageScriptNames = [
14
14
  "ai:check", "build", "dev", "dev:restart", "docs:check", "preview",
15
- "preview:restart", "test", "test:browser", "typecheck", "verify:delivery",
16
- "verify:kernel", "verify:perf", "verify:receipt",
15
+ "preview:restart", "reference:study", "test", "test:browser", "test:feature", "typecheck",
16
+ "verify:delivery", "verify:kernel", "verify:perf", "verify:receipt",
17
17
  ] as const;
18
18
 
19
19
  describe("Toolcraft starter performance lifecycle", () => {
@@ -59,6 +59,20 @@ describe("Toolcraft starter performance lifecycle", () => {
59
59
  'playwright install chromium && playwright test --grep-invert "browser perf:|toolcraft kernel:"',
60
60
  );
61
61
  expect(packageJson.scripts?.["test:browser:perf"]).toBeUndefined();
62
+ expect(packageJson.scripts?.["test:feature"]).toBe(
63
+ "node scripts/run-feature-verification.mjs",
64
+ );
65
+ const featureRunner = readFileSync(
66
+ join(projectDir, "scripts/run-feature-verification.mjs"),
67
+ "utf8",
68
+ );
69
+ expect(featureRunner).toContain(
70
+ "toolcraft-feature-verification-reporter.ts",
71
+ );
72
+ expect(featureRunner).toContain("--workers=1");
73
+ expect(featureRunner).not.toMatch(
74
+ /runToolcraftProofPackageScript|verify:delivery|verify:perf|test:browser/iu,
75
+ );
62
76
  const performanceRunner = readFileSync(
63
77
  join(projectDir, "scripts/run-browser-performance.mjs"),
64
78
  "utf8",
@@ -161,12 +175,12 @@ describe("Toolcraft starter performance lifecycle", () => {
161
175
 
162
176
  for (const { relativePath, source } of docSources) {
163
177
  expect(source, relativePath).toMatch(/first (?:product )?delivery/i);
164
- expect(source, relativePath).toMatch(/later[^\n]{0,40}delivery/i);
178
+ expect(source, relativePath).toMatch(/later[^\n]{0,60}(?:edits|feature work)/i);
165
179
  expect(source, relativePath).toMatch(
166
180
  /(?:performance complaint|localized complaint)/i,
167
181
  );
168
182
  expect(source, relativePath).toMatch(
169
- /(?:full audit|complete (?:performance )?(?:audit|review))/i,
183
+ /(?:full[- ]audit|complete (?:performance )?(?:audit|review))/i,
170
184
  );
171
185
  expect(source, relativePath).toContain(
172
186
  TOOLCRAFT_DELIVERY_VERIFICATION_COMMAND,
@@ -241,14 +255,16 @@ describe("Toolcraft starter performance lifecycle", () => {
241
255
  expect(documentation).toMatch(
242
256
  /first product delivery[^\n]*full functional acceptance[^\n]*no measured performance/i,
243
257
  );
244
- expect(documentation).toMatch(/later delivery[^\n]*functional-targeted/i);
258
+ expect(documentation).toMatch(
259
+ /later(?: ordinary)? edits[^\n]*(?:focused|directly relevant|feature-focused)/i,
260
+ );
245
261
  expect(documentation).toMatch(
246
262
  /complaint[^\n]*one-authority-targeted-performance-iteration/i,
247
263
  );
248
264
  expect(documentation).toMatch(/full-performance/i);
249
265
  expect(documentation).toMatch(/needs-agent-judgment/i);
250
266
  expect(documentation).toMatch(
251
- /later[^\n]{0,40}delivery[^\n]*(?:same )?bare command[^\n]*exact ownership/i,
267
+ /repeated bare command[^\n]*protected no-op/i,
252
268
  );
253
269
  expect(documentation).not.toMatch(
254
270
  /first stable[^\n]*(?:full performance|full checkpoint|baseline)/i,
@@ -26,6 +26,7 @@ export const TOOLCRAFT_BROWSER_RUNTIME_EVIDENCE_TYPES = [
26
26
  "exported-artifact",
27
27
  "infinity-mode-restoration",
28
28
  "infinity-scene-bounds-image-export",
29
+ "infinity-scene-bounds-svg-export",
29
30
  "infinity-scene-bounds-video-export",
30
31
  "image-export-artifact",
31
32
  "layer-grouping",
@@ -73,6 +74,8 @@ export const TOOLCRAFT_BROWSER_RUNTIME_EVIDENCE_TYPES = [
73
74
  "product-observable-change",
74
75
  "reference-parity",
75
76
  "segmented-control-layout",
77
+ "selection-scoped-control",
78
+ "svg-export-artifact",
76
79
  "timeline-duration",
77
80
  "timeline-keyframes",
78
81
  "timeline-loop",
@@ -11,6 +11,7 @@
11
11
  "src",
12
12
  "scripts/toolcraft-delivery-receipt.types.test.mts",
13
13
  "scripts/toolcraft-functional-proof-model.types.test.mts",
14
+ "scripts/toolcraft-motion-reference-artifacts.types.test.mts",
14
15
  "scripts/toolcraft-targeted-performance-report.types.test.mts",
15
16
  "vite.config.ts"
16
17
  ]
@@ -1,26 +0,0 @@
1
- const toRepoTestFile = (file) =>
2
- file.startsWith("e2e/") ? file : `e2e/${file}`;
3
-
4
- export function selectToolcraftCurrentBrowserImpact({
5
- files,
6
- model,
7
- semanticAcceptanceIds,
8
- }) {
9
- const fileSet = new Set(files);
10
- const rows = model.acceptance.filter(({ file }) =>
11
- fileSet.has(toRepoTestFile(file)),
12
- );
13
- const exact =
14
- rows.length > 0 &&
15
- rows.every(({ acceptanceId }) =>
16
- semanticAcceptanceIds.has(acceptanceId),
17
- );
18
- return Object.freeze({
19
- acceptanceIds: Object.freeze(
20
- exact ? rows.map(({ acceptanceId }) => acceptanceId) : [],
21
- ),
22
- domainIds: Object.freeze(
23
- exact ? [] : [...new Set(rows.map(({ domainId }) => domainId))],
24
- ),
25
- });
26
- }
@@ -1,141 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { readFileSync, writeFileSync } from "node:fs";
3
- import path from "node:path";
4
- import test from "node:test";
5
-
6
- import {
7
- evaluateToolcraftIntegrity,
8
- } from "./check-toolcraft-integrity.mjs";
9
- import {
10
- collectToolcraftDeliveryFunctionalContext,
11
- } from "./toolcraft-delivery-functional-context.mjs";
12
- import {
13
- loadToolcraftDeliveryPlanningInputs,
14
- } from "./toolcraft-delivery-lifecycle.mjs";
15
- import {
16
- EMPTY_TOOLCRAFT_DELIVERY_LIFECYCLE_STATE,
17
- } from "./toolcraft-delivery-lifecycle-state.mjs";
18
- import {
19
- createToolcraftDeliveryPlan,
20
- } from "./toolcraft-delivery-plan.mjs";
21
- import {
22
- createToolcraftFunctionalProofModelHash,
23
- } from "./toolcraft-functional-proof-model.mjs";
24
- import {
25
- installToolcraftIntegrityFixture,
26
- } from "./toolcraft-integrity-test-utils.mjs";
27
- import {
28
- TOOLCRAFT_DELIVERY_VERIFICATION_NARRATIVE,
29
- } from "./toolcraft-performance-authority-policy.mjs";
30
- import {
31
- collectToolcraftVerificationInputs,
32
- } from "./toolcraft-verification-inventory.mjs";
33
- import {
34
- createDeliveryFixture,
35
- removeDeliveryFixture,
36
- } from "./run-delivery-verification-test-helpers.mjs";
37
-
38
- test("signed framework refresh preserves exact changed product proof", async (t) => {
39
- const rootDir = createDeliveryFixture();
40
- t.after(() => removeDeliveryFixture(rootDir));
41
- await installToolcraftIntegrityFixture(rootDir);
42
- writeFileSync(
43
- path.join(rootDir, "docs", "toolcraft", "agent-worklog.md"),
44
- `# Agent Worklog
45
-
46
- ## Decision Trail
47
-
48
- ### Framework refresh
49
- - Request: Update one product setting after regenerating Toolcraft.
50
- - Performance intent: ordinary-product-work
51
- - Verification: ${TOOLCRAFT_DELIVERY_VERIFICATION_NARRATIVE}
52
-
53
- ## Verification
54
- Protected receipts own checks and evidence.
55
- `,
56
- );
57
- const manifestPath = path.join(
58
- rootDir,
59
- "src",
60
- "toolcraft",
61
- ".toolcraft-manifest.json",
62
- );
63
- const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
64
- writeFileSync(
65
- manifestPath,
66
- `${JSON.stringify({
67
- ...manifest,
68
- description: "Previous signed generated framework.",
69
- }, null, 2)}\n`,
70
- );
71
- const comparisonInventory =
72
- await collectToolcraftVerificationInputs(rootDir);
73
- const previousIntegrity = await evaluateToolcraftIntegrity({
74
- inventory: comparisonInventory,
75
- rootDir,
76
- });
77
- writeFileSync(
78
- manifestPath,
79
- `${JSON.stringify({
80
- ...manifest,
81
- description: "Current signed generated framework.",
82
- }, null, 2)}\n`,
83
- );
84
- writeFileSync(
85
- path.join(rootDir, "src", "app", "schema.ts"),
86
- "export const schema = 2;\n",
87
- );
88
- const currentInventory =
89
- await collectToolcraftVerificationInputs(rootDir);
90
- const integrity = await evaluateToolcraftIntegrity({
91
- inventory: currentInventory,
92
- rootDir,
93
- });
94
- const functionalContext =
95
- await collectToolcraftDeliveryFunctionalContext(rootDir);
96
- const currentModel = functionalContext.currentFunctionalProofModel;
97
- const inputs = await loadToolcraftDeliveryPlanningInputs({
98
- currentInventory,
99
- functionalContext,
100
- integrity,
101
- previous: {
102
- anchor: {
103
- files: comparisonInventory.entries,
104
- functionalProofModel: currentModel,
105
- functionalProofModelHash:
106
- createToolcraftFunctionalProofModelHash(currentModel),
107
- lifecycle: EMPTY_TOOLCRAFT_DELIVERY_LIFECYCLE_STATE,
108
- performance: { kind: "none" },
109
- sourceHash: comparisonInventory.sourceHash,
110
- },
111
- receipt: { version: 7 },
112
- },
113
- projectDir: rootDir,
114
- });
115
-
116
- assert.notEqual(integrity.manifestHash, previousIntegrity.manifestHash);
117
- assert.equal(
118
- functionalContext.frameworkOwnedPaths.includes(
119
- "scripts/run-delivery-verification.mjs",
120
- ),
121
- true,
122
- );
123
- assert.equal(inputs.changeSet.frameworkChanged, true);
124
- assert.equal(inputs.changeSet.platformChanged, false);
125
- assert.deepEqual(
126
- inputs.changeSet.impact.browserTestNames,
127
- ["browser: focused acceptance"],
128
- );
129
- const plan = createToolcraftDeliveryPlan(inputs);
130
- assert.deepEqual(
131
- plan.steps.find(({ kind }) => kind === "browser-functional"),
132
- {
133
- kind: "browser-functional",
134
- testNames: ["browser: focused acceptance"],
135
- },
136
- );
137
- assert.equal(
138
- plan.steps.filter(({ kind }) => kind === "browser-functional").length,
139
- 1,
140
- );
141
- });