@pixel-point/toolcraft 0.0.17 → 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 (503) 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 +81 -89
  8. package/src/generate-test-doc-assertions.test.mjs +44 -1
  9. package/src/generate-test-doc-policy-assertions.mjs +92 -0
  10. package/src/generate-test-export-doc-assertions.mjs +53 -0
  11. package/src/generate-test-file-assertions.mjs +77 -83
  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 +17 -1
  20. package/src/generate-test-runtime-boundary-assertions.mjs +178 -0
  21. package/src/generate-test-standalone-assertions.mjs +7 -13
  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 +64 -5
  34. package/templates/runtime/contracts/component-contracts.choices.ts +55 -5
  35. package/templates/runtime/contracts/component-contracts.inputs.test.ts +6 -6
  36. package/templates/runtime/contracts/component-contracts.inputs.ts +8 -7
  37. package/templates/runtime/contracts/component-contracts.media-custom.test.ts +8 -2
  38. package/templates/runtime/contracts/component-contracts.media-custom.ts +8 -2
  39. package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +22 -8
  40. package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +7 -1
  41. package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +3 -0
  42. package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +4 -1
  43. package/templates/runtime/contracts/component-contracts.runtime.ts +19 -12
  44. package/templates/runtime/contracts/component-contracts.test.ts +2 -0
  45. package/templates/runtime/contracts/component-contracts.visual.test.ts +20 -0
  46. package/templates/runtime/contracts/component-contracts.visual.ts +4 -0
  47. package/templates/runtime/contracts/decision-contracts.test.ts +35 -11
  48. package/templates/runtime/contracts/decision-contracts.ts +12 -12
  49. package/templates/runtime/contracts/performance-verification-policy.test.ts +12 -12
  50. package/templates/runtime/contracts/performance-verification-policy.ts +8 -8
  51. package/templates/runtime/export/artifact-download.ts +1 -0
  52. package/templates/runtime/export/artifact-frame-renderer.ts +2 -15
  53. package/templates/runtime/export/artifact-frame-state.ts +16 -0
  54. package/templates/runtime/export/artifact-scene-frame.test.ts +3 -3
  55. package/templates/runtime/export/artifact-scene-frame.ts +3 -3
  56. package/templates/runtime/export/export-background.ts +0 -19
  57. package/templates/runtime/export/export-error.ts +5 -0
  58. package/templates/runtime/export/export-renderer-coverage.ts +54 -0
  59. package/templates/runtime/export/export.test.ts +45 -42
  60. package/templates/runtime/export/image-artifact-export.ts +2 -2
  61. package/templates/runtime/export/index.ts +57 -16
  62. package/templates/runtime/export/product-export-renderer.test.ts +38 -4
  63. package/templates/runtime/export/product-export-renderer.ts +0 -41
  64. package/templates/runtime/export/product-svg-export-renderer.ts +21 -0
  65. package/templates/runtime/export/svg-artifact-export.test.ts +98 -0
  66. package/templates/runtime/export/svg-artifact-export.ts +120 -0
  67. package/templates/runtime/export/svg-document.test.ts +221 -0
  68. package/templates/runtime/export/svg-document.ts +400 -0
  69. package/templates/runtime/export/svg-policy.ts +47 -0
  70. package/templates/runtime/index.ts +3 -0
  71. package/templates/runtime/model-import/model-import-limits.ts +15 -4
  72. package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +21 -1
  73. package/templates/runtime/react/app-shell/settings-transfer.test.ts +21 -0
  74. package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +75 -1
  75. package/templates/runtime/react/app-shell/toolcraft-app.tsx +24 -9
  76. package/templates/runtime/react/canvas/canvas-shell-interactions.test.tsx +30 -0
  77. package/templates/runtime/react/canvas/canvas-shell-pinch-interactions.test.tsx +155 -0
  78. package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +77 -1
  79. package/templates/runtime/react/canvas/canvas-shell-test-utils.tsx +13 -1
  80. package/templates/runtime/react/canvas/canvas-shell.tsx +32 -6
  81. package/templates/runtime/react/canvas/canvas-viewport-geometry.ts +133 -0
  82. package/templates/runtime/react/canvas/product-scene-surface.test.tsx +195 -0
  83. package/templates/runtime/react/canvas/product-scene-surface.tsx +155 -0
  84. package/templates/runtime/react/canvas/runtime-scene-export.ts +1 -1
  85. package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +285 -36
  86. package/templates/runtime/react/controls-panel/__tests__/control-conditions.test.ts +61 -0
  87. package/templates/runtime/react/controls-panel/__tests__/controls-panel.collection-actions.test.tsx +89 -0
  88. package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-applicability-layout.test.tsx +134 -0
  89. package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-layout.test.tsx +16 -1
  90. package/templates/runtime/react/controls-panel/__tests__/controls-panel.control-visibility.test.tsx +40 -19
  91. package/templates/runtime/react/controls-panel/__tests__/controls-panel.render-isolation.test.tsx +2 -0
  92. package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +40 -1
  93. package/templates/runtime/react/controls-panel/__tests__/controls-panel.setup-controls.test.tsx +3 -3
  94. package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-collection.test.tsx +59 -0
  95. package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-color-bank.test.tsx +67 -0
  96. package/templates/runtime/react/controls-panel/__tests__/controls-panel.vector-interaction.test.tsx +6 -6
  97. package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +4 -6
  98. package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +41 -6
  99. package/templates/runtime/react/controls-panel/conditions/control-conditions.ts +32 -119
  100. package/templates/runtime/react/controls-panel/layout/controls-panel-control-group.tsx +5 -2
  101. package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +41 -10
  102. package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +7 -4
  103. package/templates/runtime/react/controls-panel/renderers/controls-panel-action-renderer.tsx +2 -1
  104. package/templates/runtime/react/controls-panel/renderers/controls-panel-basic-renderers.tsx +2 -52
  105. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.test.tsx +63 -0
  106. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.tsx +138 -0
  107. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-items.tsx +104 -0
  108. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-renderer.tsx +115 -236
  109. package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.test.tsx +95 -0
  110. package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.tsx +82 -0
  111. package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.test.tsx +73 -1
  112. package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.tsx +50 -1
  113. package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.test.ts +1 -1
  114. package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.ts +2 -1
  115. package/templates/runtime/react/controls-panel/values/controls-panel-collection-values.ts +38 -6
  116. package/templates/runtime/react/controls-panel/values/controls-panel-color-values.ts +1 -9
  117. package/templates/runtime/react/controls-panel/values/controls-panel-spatial-values.ts +7 -2
  118. package/templates/runtime/react/controls-panel/values/controls-panel-value-labels.ts +1 -0
  119. package/templates/runtime/react/index.ts +4 -0
  120. package/templates/runtime/react/model-rendering/model-export.ts +1 -1
  121. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +9 -69
  122. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.ts +5 -5
  123. package/templates/runtime/react/orientation-gizmo/use-toolcraft-orientation-control-selection.ts +2 -2
  124. package/templates/runtime/scene/scene-bounds.test.ts +23 -0
  125. package/templates/runtime/scene/scene-bounds.ts +31 -17
  126. package/templates/runtime/schema/app-capabilities.test.ts +4 -0
  127. package/templates/runtime/schema/artifact-export-actions.test.ts +47 -0
  128. package/templates/runtime/schema/artifact-export-actions.ts +49 -0
  129. package/templates/runtime/schema/collection-item-controls.ts +29 -0
  130. package/templates/runtime/schema/control-applicability.test.ts +127 -0
  131. package/templates/runtime/schema/control-applicability.ts +433 -0
  132. package/templates/runtime/schema/control-schema-normalization.ts +177 -11
  133. package/templates/runtime/schema/controls-panel-actions.ts +2 -2
  134. package/templates/runtime/schema/controls-panel-section-layout.ts +14 -9
  135. package/templates/runtime/schema/controls-panel-section-roundtrip.test.ts +59 -0
  136. package/templates/runtime/schema/define-toolcraft.collection-actions-item-controls.test.ts +127 -0
  137. package/templates/runtime/schema/define-toolcraft.control-sections.test.ts +10 -4
  138. package/templates/runtime/schema/define-toolcraft.file-drop-item-controls.test.ts +98 -0
  139. package/templates/runtime/schema/define-toolcraft.file-drop-normalization.test.ts +27 -0
  140. package/templates/runtime/schema/define-toolcraft.segmented-control-fit.test.ts +20 -2
  141. package/templates/runtime/schema/define-toolcraft.setup-canvas.test.ts +16 -3
  142. package/templates/runtime/schema/define-toolcraft.source-collection.test.ts +79 -0
  143. package/templates/runtime/schema/runtime-setup-section.ts +24 -5
  144. package/templates/runtime/schema/types.ts +69 -13
  145. package/templates/runtime/state/canvas-background-state.ts +1 -16
  146. package/templates/runtime/state/canvas-state.ts +32 -20
  147. package/templates/runtime/state/control-value-codecs.test.ts +98 -0
  148. package/templates/runtime/state/control-value-codecs.ts +700 -0
  149. package/templates/runtime/state/control-value-normalization.test.ts +1 -1
  150. package/templates/runtime/state/control-value-normalization.ts +127 -135
  151. package/templates/runtime/state/controls-reducer.ts +26 -3
  152. package/templates/runtime/state/create-template-state.test.ts +30 -0
  153. package/templates/runtime/state/create-template-state.ts +52 -31
  154. package/templates/runtime/state/orientation-pose.ts +80 -0
  155. package/templates/runtime/state/persistence-control-values.test.ts +59 -0
  156. package/templates/runtime/state/reducer-controls.test.ts +45 -0
  157. package/templates/runtime/state/reducer-media-reset.test.ts +1 -1
  158. package/templates/runtime/state/reducer-timeline.test.ts +70 -0
  159. package/templates/runtime/state/timeline-reducer.ts +40 -2
  160. package/templates/runtime/testing/performance-schema-queries.ts +2 -2
  161. package/templates/starter/AGENTS.md +29 -28
  162. package/templates/starter/docs/toolcraft/README.md +6 -6
  163. package/templates/starter/docs/toolcraft/acceptance-testing.md +34 -48
  164. package/templates/starter/docs/toolcraft/agent-worklog.md +103 -1
  165. package/templates/starter/docs/toolcraft/assembly-workflow.md +16 -8
  166. package/templates/starter/docs/toolcraft/component-rules.md +9 -7
  167. package/templates/starter/docs/toolcraft/core/control-selection.md +9 -3
  168. package/templates/starter/docs/toolcraft/core/layout.md +13 -8
  169. package/templates/starter/docs/toolcraft/core/media-upload.md +3 -1
  170. package/templates/starter/docs/toolcraft/core/performance.md +8 -10
  171. package/templates/starter/docs/toolcraft/core/reference-study.md +80 -19
  172. package/templates/starter/docs/toolcraft/core/runtime-boundary.md +15 -3
  173. package/templates/starter/docs/toolcraft/core/setup-export.md +67 -11
  174. package/templates/starter/docs/toolcraft/custom-controls.md +6 -4
  175. package/templates/starter/docs/toolcraft/decision-contract.md +4 -2
  176. package/templates/starter/docs/toolcraft/performance.md +8 -10
  177. package/templates/starter/docs/toolcraft/renderer-technique.md +6 -2
  178. package/templates/starter/docs/toolcraft/schema-reference.md +24 -22
  179. package/templates/starter/docs/toolcraft/workflow.md +14 -14
  180. package/templates/starter/e2e/app-browser-control-applicability-requirements.spec.ts +163 -0
  181. package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +45 -2
  182. package/templates/starter/e2e/app-browser-motion-reference-requirements.spec.ts +411 -0
  183. package/templates/starter/e2e/app-browser-orientation-evidence.spec.ts +174 -21
  184. package/templates/starter/e2e/app-browser-proof-session.spec.ts +85 -0
  185. package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +63 -33
  186. package/templates/starter/e2e/app-browser-selection-scope-evidence.spec.ts +137 -0
  187. package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +61 -15
  188. package/templates/starter/e2e/{browser-conditional-output-evidence-helpers.ts → browser-background-output-evidence.ts} +0 -68
  189. package/templates/starter/e2e/browser-control-applicability-evidence.ts +114 -0
  190. package/templates/starter/e2e/browser-infinity-canvas-evidence.ts +20 -11
  191. package/templates/starter/e2e/browser-infinity-canvas-svg-evidence.ts +42 -0
  192. package/templates/starter/e2e/browser-layer-evidence-helpers.ts +15 -36
  193. package/templates/starter/e2e/browser-orientation-gizmo-evidence-helpers.ts +4 -0
  194. package/templates/starter/e2e/browser-orientation-gizmo-live-preconditions.ts +86 -0
  195. package/templates/starter/e2e/browser-product-raster-snapshot.ts +213 -0
  196. package/templates/starter/e2e/browser-proof-session.ts +43 -15
  197. package/templates/starter/e2e/browser-proof-surface-action.ts +79 -0
  198. package/templates/starter/e2e/browser-proof-types.ts +15 -0
  199. package/templates/starter/e2e/browser-runtime-applicability-requirements.ts +84 -0
  200. package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +9 -2
  201. package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +51 -32
  202. package/templates/starter/e2e/browser-selection-scope-evidence.ts +269 -0
  203. package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +122 -0
  204. package/templates/starter/e2e/browser-svg-export-evidence.spec.ts +79 -0
  205. package/templates/starter/e2e/browser-svg-export-evidence.ts +152 -0
  206. package/templates/starter/e2e/export-artifact-helpers.ts +70 -0
  207. package/templates/starter/e2e/product-observable-helpers.ts +8 -129
  208. package/templates/starter/e2e/svg-artifact-inspection.spec.ts +136 -0
  209. package/templates/starter/e2e/svg-artifact-inspection.ts +331 -0
  210. package/templates/starter/e2e/svg-download-test-fixtures.ts +34 -0
  211. package/templates/starter/e2e/toolcraft-delivery-catalog-reporter.ts +198 -15
  212. package/templates/starter/e2e/toolcraft-feature-verification-reporter.spec.ts +149 -0
  213. package/templates/starter/e2e/toolcraft-feature-verification-reporter.ts +223 -0
  214. package/templates/starter/package.json +2 -0
  215. package/templates/starter/scripts/check-toolcraft-docs.mjs +1 -0
  216. package/templates/starter/scripts/create-toolcraft-motion-reference-study.mjs +233 -0
  217. package/templates/starter/scripts/create-toolcraft-motion-reference-study.test.mjs +459 -0
  218. package/templates/starter/scripts/playwright-test-title-selection.d.mts +45 -0
  219. package/templates/starter/scripts/run-browser-performance-test-helpers.mjs +0 -27
  220. package/templates/starter/scripts/run-browser-performance.mjs +0 -6
  221. package/templates/starter/scripts/run-browser-performance.test.mjs +5 -13
  222. package/templates/starter/scripts/run-delivery-verification-test-helpers.mjs +0 -34
  223. package/templates/starter/scripts/run-delivery-verification.test.mjs +135 -31
  224. package/templates/starter/scripts/run-feature-verification.mjs +212 -0
  225. package/templates/starter/scripts/run-feature-verification.test.mjs +226 -0
  226. package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.mjs +21 -8
  227. package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.test.mjs +32 -92
  228. package/templates/starter/scripts/toolcraft-checkpoint-transaction.mjs +28 -6
  229. package/templates/starter/scripts/toolcraft-checkpoint-transaction.test.mjs +8 -63
  230. package/templates/starter/scripts/toolcraft-contract-manifest.json +1 -0
  231. package/templates/starter/scripts/toolcraft-delivery-anchor.mjs +28 -8
  232. package/templates/starter/scripts/toolcraft-delivery-anchor.test.mjs +50 -61
  233. package/templates/starter/scripts/toolcraft-delivery-architecture-inventory.mjs +0 -4
  234. package/templates/starter/scripts/toolcraft-delivery-architecture-policy.mjs +0 -1
  235. package/templates/starter/scripts/toolcraft-delivery-evidence.test.mjs +2 -3
  236. package/templates/starter/scripts/toolcraft-delivery-executor.mjs +5 -1
  237. package/templates/starter/scripts/toolcraft-delivery-executor.test.mjs +5 -12
  238. package/templates/starter/scripts/toolcraft-delivery-functional-context.d.mts +1 -48
  239. package/templates/starter/scripts/toolcraft-delivery-functional-context.mjs +2 -30
  240. package/templates/starter/scripts/toolcraft-delivery-functional-context.test.mjs +4 -166
  241. package/templates/starter/scripts/toolcraft-delivery-functional-initial.test.mjs +4 -20
  242. package/templates/starter/scripts/toolcraft-delivery-lifecycle.mjs +43 -192
  243. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-lifecycle.test.mjs +79 -440
  244. package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +102 -297
  245. package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +46 -97
  246. package/templates/starter/scripts/toolcraft-delivery-plan-test-helpers.mjs +125 -0
  247. package/templates/starter/scripts/toolcraft-delivery-plan-validation.test.mjs +58 -0
  248. package/templates/starter/scripts/toolcraft-delivery-plan.d.mts +19 -31
  249. package/templates/starter/scripts/toolcraft-delivery-plan.mjs +254 -252
  250. package/templates/starter/scripts/toolcraft-delivery-plan.test.mjs +29 -457
  251. package/templates/starter/scripts/toolcraft-delivery-receipt-performance.test.mjs +1 -1
  252. package/templates/starter/scripts/toolcraft-delivery-receipt-strictness.test.mjs +3 -72
  253. package/templates/starter/scripts/toolcraft-delivery-receipt-test-helpers.mjs +7 -36
  254. package/templates/starter/scripts/toolcraft-delivery-receipt.d.mts +3 -5
  255. package/templates/starter/scripts/toolcraft-delivery-receipt.mjs +15 -31
  256. package/templates/starter/scripts/toolcraft-delivery-receipt.test.mjs +28 -20
  257. package/templates/starter/scripts/toolcraft-delivery-receipt.types.test.mts +22 -30
  258. package/templates/starter/scripts/toolcraft-feature-verification-plan.d.mts +20 -0
  259. package/templates/starter/scripts/toolcraft-feature-verification-plan.mjs +146 -0
  260. package/templates/starter/scripts/toolcraft-feature-verification-plan.test.mjs +96 -0
  261. package/templates/starter/scripts/toolcraft-functional-proof-model.d.mts +3 -18
  262. package/templates/starter/scripts/toolcraft-functional-proof-model.mjs +39 -127
  263. package/templates/starter/scripts/toolcraft-functional-proof-model.test.mjs +25 -362
  264. package/templates/starter/scripts/toolcraft-functional-proof-model.types.test.mts +6 -83
  265. package/templates/starter/scripts/toolcraft-functional-proof-primitives.d.mts +11 -0
  266. package/templates/starter/scripts/toolcraft-functional-proof-primitives.mjs +61 -0
  267. package/templates/starter/scripts/toolcraft-functional-proof-primitives.test.mjs +43 -0
  268. package/templates/starter/scripts/toolcraft-integrity-policy.mjs +13 -0
  269. package/templates/starter/scripts/toolcraft-integrity-test-utils.mjs +1 -1
  270. package/templates/starter/scripts/toolcraft-layer-evidence-facade.test.mjs +58 -22
  271. package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.mjs +111 -0
  272. package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.test.mjs +116 -0
  273. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.d.mts +37 -0
  274. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.mjs +308 -0
  275. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.test.mjs +420 -0
  276. package/templates/starter/scripts/toolcraft-motion-reference-artifacts.types.test.mts +50 -0
  277. package/templates/starter/scripts/toolcraft-motion-reference-command-options.mjs +195 -0
  278. package/templates/starter/scripts/toolcraft-motion-reference-command-options.test.mjs +224 -0
  279. package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.mjs +122 -0
  280. package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.test.mjs +153 -0
  281. package/templates/starter/scripts/toolcraft-motion-reference-evidence-assembly.mjs +270 -0
  282. package/templates/starter/scripts/toolcraft-motion-reference-evidence.test.mjs +432 -0
  283. package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.mjs +275 -0
  284. package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.test.mjs +294 -0
  285. package/templates/starter/scripts/toolcraft-motion-reference-group-inventory.mjs +148 -0
  286. package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.mjs +101 -0
  287. package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.test.mjs +124 -0
  288. package/templates/starter/scripts/toolcraft-motion-reference-image-source.mjs +259 -0
  289. package/templates/starter/scripts/toolcraft-motion-reference-image-source.test.mjs +338 -0
  290. package/templates/starter/scripts/toolcraft-motion-reference-image-timing.mjs +96 -0
  291. package/templates/starter/scripts/toolcraft-motion-reference-image-timing.test.mjs +81 -0
  292. package/templates/starter/scripts/toolcraft-motion-reference-lock-recovery.test.mjs +144 -0
  293. package/templates/starter/scripts/toolcraft-motion-reference-media-source.mjs +165 -0
  294. package/templates/starter/scripts/toolcraft-motion-reference-media-source.test.mjs +299 -0
  295. package/templates/starter/scripts/toolcraft-motion-reference-publication-discovery.test.mjs +142 -0
  296. package/templates/starter/scripts/toolcraft-motion-reference-publication-isolation.test.mjs +234 -0
  297. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-schema.mjs +122 -0
  298. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.mjs +89 -0
  299. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.test.mjs +74 -0
  300. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.mjs +264 -0
  301. package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.test.mjs +377 -0
  302. package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.mjs +254 -0
  303. package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.test.mjs +130 -0
  304. package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.mjs +128 -0
  305. package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.test.mjs +209 -0
  306. package/templates/starter/scripts/toolcraft-motion-reference-publication.fixtures.mjs +88 -0
  307. package/templates/starter/scripts/toolcraft-motion-reference-publication.mjs +249 -0
  308. package/templates/starter/scripts/toolcraft-motion-reference-publication.test.mjs +433 -0
  309. package/templates/starter/scripts/toolcraft-motion-reference-review-output.mjs +38 -0
  310. package/templates/starter/scripts/toolcraft-motion-reference-review-output.test.mjs +29 -0
  311. package/templates/starter/scripts/toolcraft-motion-reference-root-safety.test.mjs +84 -0
  312. package/templates/starter/scripts/toolcraft-motion-reference-roots.mjs +83 -0
  313. package/templates/starter/scripts/toolcraft-motion-reference-sampling.mjs +283 -0
  314. package/templates/starter/scripts/toolcraft-motion-reference-sampling.test.mjs +480 -0
  315. package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.mjs +39 -0
  316. package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.test.mjs +59 -0
  317. package/templates/starter/scripts/toolcraft-motion-reference-stage.mjs +71 -0
  318. package/templates/starter/scripts/toolcraft-motion-reference-stage.test.mjs +61 -0
  319. package/templates/starter/scripts/toolcraft-motion-review-numeric.mjs +74 -0
  320. package/templates/starter/scripts/toolcraft-motion-review-numeric.test.mjs +65 -0
  321. package/templates/starter/scripts/toolcraft-motion-review-partitioning.mjs +268 -0
  322. package/templates/starter/scripts/toolcraft-motion-review-partitioning.test.mjs +329 -0
  323. package/templates/starter/scripts/toolcraft-motion-review-protected-units.mjs +120 -0
  324. package/templates/starter/scripts/toolcraft-motion-review-protected-units.test.mjs +111 -0
  325. package/templates/starter/scripts/toolcraft-performance-escalation-policy.test.mjs +77 -345
  326. package/templates/starter/scripts/toolcraft-performance-receipt-validation.test.mjs +19 -21
  327. package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +85 -115
  328. package/templates/starter/scripts/toolcraft-product-boundary-module-policy.mjs +101 -0
  329. package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +0 -72
  330. package/templates/starter/scripts/toolcraft-product-control-bindings.mjs +182 -0
  331. package/templates/starter/scripts/toolcraft-product-control-boundary.mjs +146 -0
  332. package/templates/starter/scripts/toolcraft-product-control-boundary.test.mjs +186 -0
  333. package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +16 -18
  334. package/templates/starter/scripts/toolcraft-product-export-boundary.test.mjs +200 -0
  335. package/templates/starter/scripts/toolcraft-product-observable-facade.test.mjs +46 -1
  336. package/templates/starter/scripts/toolcraft-receipt-boundary.test.mjs +0 -1
  337. package/templates/starter/scripts/toolcraft-source-inventory.d.mts +5 -0
  338. package/templates/starter/scripts/toolcraft-source-inventory.mjs +25 -14
  339. package/templates/starter/scripts/toolcraft-source-inventory.test.mjs +48 -0
  340. package/templates/starter/scripts/toolcraft-source-ownership.mjs +0 -1
  341. package/templates/starter/scripts/toolcraft-source-ownership.test.mjs +30 -5
  342. package/templates/starter/scripts/toolcraft-typescript-source-evidence-structure.test.mjs +20 -0
  343. package/templates/starter/scripts/toolcraft-typescript-source-evidence.mjs +1 -0
  344. package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +2 -0
  345. package/templates/starter/scripts/toolcraft-verification-receipt-test-helpers.mjs +5 -26
  346. package/templates/starter/scripts/toolcraft-verification-receipt.d.mts +0 -7
  347. package/templates/starter/scripts/toolcraft-verification-receipt.mjs +3 -47
  348. package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +6 -87
  349. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.d.mts +19 -0
  350. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.mjs +107 -0
  351. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.test.mjs +114 -0
  352. package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.mjs +13 -2
  353. package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.test.mjs +110 -0
  354. package/templates/starter/src/app/acceptance/artifact-export-intent.ts +161 -0
  355. package/templates/starter/src/app/acceptance/canvas-coverage.ts +1 -0
  356. package/templates/starter/src/app/acceptance/color-bank-labels.ts +11 -15
  357. package/templates/starter/src/app/acceptance/color-row-grouping.ts +33 -0
  358. package/templates/starter/src/app/acceptance/conditions.ts +1 -1
  359. package/templates/starter/src/app/acceptance/control-acceptance-context.ts +2 -2
  360. package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +6 -31
  361. package/templates/starter/src/app/acceptance/control-acceptance-kind-rules.ts +24 -5
  362. package/templates/starter/src/app/acceptance/control-acceptance-policy.ts +4 -16
  363. package/templates/starter/src/app/acceptance/control-applicability-cases.test.ts +321 -0
  364. package/templates/starter/src/app/acceptance/control-applicability-cases.ts +290 -0
  365. package/templates/starter/src/app/acceptance/control-applicability.ts +332 -0
  366. package/templates/starter/src/app/acceptance/control-component-rules.ts +0 -10
  367. package/templates/starter/src/app/acceptance/control-labels.ts +30 -1
  368. package/templates/starter/src/app/acceptance/control-layout-dependency-rules.ts +20 -9
  369. package/templates/starter/src/app/acceptance/control-layout-entity-rules.ts +4 -6
  370. package/templates/starter/src/app/acceptance/control-layout-model.ts +4 -4
  371. package/templates/starter/src/app/acceptance/control-layout-section-rules.ts +21 -10
  372. package/templates/starter/src/app/acceptance/control-parts.ts +8 -0
  373. package/templates/starter/src/app/acceptance/control-section-entity-cohesion.test.ts +215 -0
  374. package/templates/starter/src/app/acceptance/control-section-entity-cohesion.ts +132 -0
  375. package/templates/starter/src/app/acceptance/control-section-inventory.test.ts +87 -0
  376. package/templates/starter/src/app/acceptance/control-section-inventory.ts +74 -44
  377. package/templates/starter/src/app/acceptance/custom-controls.ts +11 -3
  378. package/templates/starter/src/app/acceptance/export-artifact-coverage.ts +25 -17
  379. package/templates/starter/src/app/acceptance/feature-verification-selection.test.ts +295 -0
  380. package/templates/starter/src/app/acceptance/feature-verification-selection.ts +161 -0
  381. package/templates/starter/src/app/acceptance/infinity-canvas.ts +10 -0
  382. package/templates/starter/src/app/acceptance/inline-layout.ts +64 -9
  383. package/templates/starter/src/app/acceptance/interaction-ownership-intent.ts +19 -1
  384. package/templates/starter/src/app/acceptance/interaction-ownership.ts +18 -2
  385. package/templates/starter/src/app/acceptance/media-upload.ts +5 -1
  386. package/templates/starter/src/app/acceptance/motion-reference-evidence-validation.mjs +65 -0
  387. package/templates/starter/src/app/acceptance/motion-reference-evidence-windows.mjs +301 -0
  388. package/templates/starter/src/app/acceptance/motion-reference-evidence.d.mts +11 -0
  389. package/templates/starter/src/app/acceptance/motion-reference-evidence.mjs +145 -0
  390. package/templates/starter/src/app/acceptance/motion-reference-study-behaviors.ts +162 -0
  391. package/templates/starter/src/app/acceptance/motion-reference-study-coverage.ts +206 -0
  392. package/templates/starter/src/app/acceptance/motion-reference-study-identity.ts +129 -0
  393. package/templates/starter/src/app/acceptance/motion-reference-study-partitions.ts +186 -0
  394. package/templates/starter/src/app/acceptance/motion-reference-study.ts +90 -0
  395. package/templates/starter/src/app/acceptance/orientation-gizmo.ts +18 -11
  396. package/templates/starter/src/app/acceptance/output-background-rules.ts +2 -2
  397. package/templates/starter/src/app/acceptance/output-export-actions.test.ts +9 -1
  398. package/templates/starter/src/app/acceptance/output-export-actions.ts +14 -22
  399. package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +22 -10
  400. package/templates/starter/src/app/acceptance/output-export-model.ts +58 -11
  401. package/templates/starter/src/app/acceptance/output-export.ts +25 -10
  402. package/templates/starter/src/app/acceptance/output-video-export-rules.ts +99 -0
  403. package/templates/starter/src/app/acceptance/reference-study-types.ts +167 -17
  404. package/templates/starter/src/app/acceptance/runtime-coverage.ts +6 -1
  405. package/templates/starter/src/app/acceptance/selection-scope.test.ts +200 -0
  406. package/templates/starter/src/app/acceptance/selection-scope.ts +151 -0
  407. package/templates/starter/src/app/acceptance/transfer-mode-types.ts +114 -0
  408. package/templates/starter/src/app/acceptance/types.ts +65 -125
  409. package/templates/starter/src/app/acceptance/validate-coverage.ts +33 -5
  410. package/templates/starter/src/app/starter-acceptance-data.ts +1 -0
  411. package/templates/starter/src/app/starter-acceptance.animation-intent.test.ts +3 -0
  412. package/templates/starter/src/app/starter-acceptance.artifact-export-intent.test.ts +312 -0
  413. package/templates/starter/src/app/starter-acceptance.background-export.test.ts +35 -0
  414. package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +18 -1
  415. package/templates/starter/src/app/starter-acceptance.color-row-grouping.test.ts +118 -0
  416. package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +66 -1
  417. package/templates/starter/src/app/starter-acceptance.contract-fixtures.test.ts +41 -0
  418. package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +113 -16
  419. package/templates/starter/src/app/starter-acceptance.control-applicability.test.ts +225 -0
  420. package/templates/starter/src/app/starter-acceptance.control-label-context.test.ts +1 -0
  421. package/templates/starter/src/app/starter-acceptance.control-labels.test.ts +78 -3
  422. package/templates/starter/src/app/starter-acceptance.control-naming-rules.test.ts +77 -1
  423. package/templates/starter/src/app/starter-acceptance.control-order.test.ts +58 -3
  424. package/templates/starter/src/app/starter-acceptance.control-state.test.ts +0 -111
  425. package/templates/starter/src/app/starter-acceptance.custom-control-collections.test.ts +3 -1
  426. package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +1 -1
  427. package/templates/starter/src/app/starter-acceptance.custom-control-valid.test.ts +1 -1
  428. package/templates/starter/src/app/starter-acceptance.export-artifact.test.ts +74 -3
  429. package/templates/starter/src/app/starter-acceptance.export-test-utils.ts +26 -0
  430. package/templates/starter/src/app/{starter-acceptance.image-video-export-settings.test.ts → starter-acceptance.image-export-settings.test.ts} +39 -9
  431. package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +31 -3
  432. package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -1
  433. package/templates/starter/src/app/starter-acceptance.media-upload.fixtures.ts +11 -1
  434. package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +56 -0
  435. package/templates/starter/src/app/starter-acceptance.motion-reference-evidence.test.ts +17 -0
  436. package/templates/starter/src/app/starter-acceptance.motion-reference-identity.test.ts +163 -0
  437. package/templates/starter/src/app/starter-acceptance.motion-reference-mapping.test.ts +133 -0
  438. package/templates/starter/src/app/starter-acceptance.motion-reference-ownership.test.ts +121 -0
  439. package/templates/starter/src/app/starter-acceptance.motion-reference-partitions.test.ts +210 -0
  440. package/templates/starter/src/app/starter-acceptance.motion-reference-test-utils.ts +313 -0
  441. package/templates/starter/src/app/starter-acceptance.output-export-intent.test.ts +458 -0
  442. package/templates/starter/src/app/starter-acceptance.output-export-rules.test.ts +4 -0
  443. package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +116 -104
  444. package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +29 -0
  445. package/templates/starter/src/app/starter-acceptance.product-worklog.test.ts +123 -2
  446. package/templates/starter/src/app/starter-acceptance.reference-custom-timeline.test.ts +2 -0
  447. package/templates/starter/src/app/starter-acceptance.reference-foundation.test.ts +8 -0
  448. package/templates/starter/src/app/starter-acceptance.reference-timeline.test.ts +7 -0
  449. package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +3 -1
  450. package/templates/starter/src/app/starter-acceptance.section-dependencies.test.ts +35 -24
  451. package/templates/starter/src/app/starter-acceptance.section-size.test.ts +72 -0
  452. package/templates/starter/src/app/starter-acceptance.timeline-playback.test.ts +5 -0
  453. package/templates/starter/src/app/starter-acceptance.ts +45 -10
  454. package/templates/starter/src/app/starter-acceptance.video-export-settings.test.ts +338 -0
  455. package/templates/starter/src/app/starter-acceptance.video-reference-study.test.ts +34 -236
  456. package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +12 -0
  457. package/templates/starter/src/app/starter-acceptance.worklog-test-utils.ts +122 -6
  458. package/templates/starter/src/app/starter-acceptance.worklog.test.ts +152 -16
  459. package/templates/starter/src/app/starter-performance.gates.test.ts +20 -18
  460. package/templates/starter/src/app/starter-performance.lifecycle.test.ts +22 -6
  461. package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +5 -2
  462. package/templates/starter/src/routes/index.tsx +1 -0
  463. package/templates/starter/tsconfig.json +1 -0
  464. package/templates/ui/components/composites/tabs.tsx +2 -2
  465. package/templates/ui/components/controls/collection-actions/collection-item-groups.test.tsx +38 -0
  466. package/templates/ui/components/controls/collection-actions/collection-item-groups.tsx +36 -0
  467. package/templates/ui/components/controls/collection-actions/index.ts +2 -0
  468. package/templates/ui/components/controls/file-drop/file-drop-collection-control.tsx +137 -0
  469. package/templates/ui/components/controls/file-drop/file-drop-control.test.tsx +189 -0
  470. package/templates/ui/components/controls/file-drop/file-drop-control.tsx +81 -88
  471. package/templates/ui/components/controls/file-drop/file-drop-presentation.tsx +131 -9
  472. package/templates/ui/components/controls/file-drop/file-drop-types.ts +36 -22
  473. package/templates/ui/components/controls/file-drop/index.ts +1 -0
  474. package/templates/ui/components/controls/index.ts +3 -0
  475. package/templates/ui/components/controls/range-slider/range-slider-control.tsx +1 -1
  476. package/templates/ui/components/controls/range-slider/range-slider-value.test.ts +14 -0
  477. package/templates/ui/components/controls/range-slider/range-slider-value.ts +3 -2
  478. package/templates/starter/scripts/toolcraft-browser-impact-selection.mjs +0 -26
  479. package/templates/starter/scripts/toolcraft-delivery-framework-refresh.test.mjs +0 -141
  480. package/templates/starter/scripts/toolcraft-delivery-functional-changed.test.mjs +0 -468
  481. package/templates/starter/scripts/toolcraft-delivery-functional-model-lifecycle.test.mjs +0 -254
  482. package/templates/starter/scripts/toolcraft-delivery-functional-semantic-regression.test.mjs +0 -135
  483. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-durability.test.mjs +0 -329
  484. package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +0 -430
  485. package/templates/starter/scripts/toolcraft-delivery-plan-functional-model.test.mjs +0 -358
  486. package/templates/starter/scripts/toolcraft-functional-proof-regression-fixtures.mjs +0 -298
  487. package/templates/starter/scripts/toolcraft-verification-impact-inventory.d.mts +0 -62
  488. package/templates/starter/scripts/toolcraft-verification-impact-inventory.mjs +0 -344
  489. package/templates/starter/scripts/toolcraft-verification-impact-inventory.test.mjs +0 -204
  490. package/templates/starter/scripts/toolcraft-verification-impact-performance-candidates.test.mjs +0 -210
  491. package/templates/starter/scripts/toolcraft-verification-impact-resolution.mjs +0 -344
  492. package/templates/starter/scripts/toolcraft-verification-impact-resolution.test.mjs +0 -270
  493. package/templates/starter/scripts/toolcraft-verification-impact-semantic-resolution.test.mjs +0 -449
  494. package/templates/starter/scripts/toolcraft-verification-impact-support-resolution.test.mjs +0 -195
  495. package/templates/starter/scripts/toolcraft-verification-impact.d.mts +0 -132
  496. package/templates/starter/scripts/toolcraft-verification-impact.mjs +0 -169
  497. package/templates/starter/scripts/toolcraft-verification-impact.test.mjs +0 -300
  498. package/templates/starter/scripts/toolcraft-verification-input-roles.mjs +0 -197
  499. package/templates/starter/scripts/toolcraft-verification-input-roles.test.mjs +0 -225
  500. package/templates/starter/src/app/acceptance/condition-exclusivity.test.ts +0 -60
  501. package/templates/starter/src/app/acceptance/condition-exclusivity.ts +0 -221
  502. package/templates/starter/src/app/acceptance/video-reference-study.ts +0 -217
  503. package/templates/starter/src/app/starter-verification-impact.json +0 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixel-point/toolcraft",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "license": "SEE LICENSE IN LICENSE.md",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,7 +18,7 @@ import {
18
18
  } from "./dependency-install.mjs";
19
19
  import { generateToolcraft } from "./generate.mjs";
20
20
 
21
- test("fresh generated app runs initial proof then one semantic material delivery", async (t) => {
21
+ test("fresh generated app runs one initial proof then focused material verification", async (t) => {
22
22
  const tempRoot = await fs.mkdtemp(
23
23
  path.join(os.tmpdir(), "toolcraft-demand-only-lifecycle-"),
24
24
  );
@@ -97,6 +97,14 @@ test("fresh generated app runs initial proof then one semantic material delivery
97
97
  command: "pnpm",
98
98
  },
99
99
  { args: ["verify:delivery"], command: "pnpm" },
100
+ {
101
+ args: ["exec", "vitest", "run", "src/app/material-output.test.tsx"],
102
+ command: "pnpm",
103
+ },
104
+ {
105
+ args: ["test:feature", "--", "material.layer"],
106
+ command: "pnpm",
107
+ },
100
108
  { args: ["verify:delivery"], command: "pnpm" },
101
109
  ]);
102
110
  });
@@ -50,7 +50,7 @@ test("generated standalone app preserves authority-bound performance iteration l
50
50
  receiptModule.TOOLCRAFT_DELIVERY_RECEIPT_VERSION,
51
51
  targetedReportModule.TOOLCRAFT_TARGETED_PERFORMANCE_REPORT_VERSION,
52
52
  ],
53
- [1, 4, 7, 3],
53
+ [1, 6, 8, 3],
54
54
  );
55
55
  const authorityPolicySource = await fs.readFile(
56
56
  path.join(
@@ -99,7 +99,7 @@ test("generated standalone app preserves authority-bound performance iteration l
99
99
  }
100
100
  const output = `${stdout}\n${stderr}`;
101
101
  assert.doesNotMatch(output, /ERR_MODULE_NOT_FOUND/u);
102
- assert.match(output, /^# tests 11$/mu);
103
- assert.match(output, /^# pass 11$/mu);
102
+ assert.match(output, /^# tests 7$/mu);
103
+ assert.match(output, /^# pass 7$/mu);
104
104
  assert.match(output, /^# fail 0$/mu);
105
105
  });
@@ -1,13 +1,13 @@
1
1
  import assert from "node:assert/strict";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
- import { pathToFileURL } from "node:url";
5
4
 
6
5
  export const deliveryArchitecturePaths = Object.freeze([
7
6
  "e2e/toolcraft-delivery-catalog-reporter.ts",
8
7
  "scripts/run-delivery-verification.mjs",
9
8
  "scripts/toolcraft-delivery-anchor.mjs",
10
9
  "scripts/toolcraft-delivery-executor.mjs",
10
+ "scripts/toolcraft-delivery-lifecycle.mjs",
11
11
  "scripts/toolcraft-delivery-functional-context.d.mts",
12
12
  "scripts/toolcraft-delivery-functional-context.mjs",
13
13
  "scripts/toolcraft-delivery-plan-construction.mjs",
@@ -17,64 +17,12 @@ export const deliveryArchitecturePaths = Object.freeze([
17
17
  "scripts/toolcraft-functional-proof-primitives.d.mts",
18
18
  "scripts/toolcraft-functional-proof-primitives.mjs",
19
19
  "scripts/toolcraft-proof-process.mjs",
20
- "scripts/toolcraft-verification-impact-inventory.d.mts",
21
- "scripts/toolcraft-verification-impact-inventory.mjs",
22
- "scripts/toolcraft-verification-impact.mjs",
23
- "scripts/toolcraft-verification-input-roles.d.mts",
24
- "scripts/toolcraft-verification-input-roles.mjs",
25
20
  ]);
26
21
 
27
22
  async function readGeneratedScript(targetDir, relativePath) {
28
23
  return fs.readFile(path.join(targetDir, "scripts", relativePath), "utf8");
29
24
  }
30
25
 
31
- async function assertGeneratedInputRoleBehavior(targetDir) {
32
- const scriptsDir = path.join(targetDir, "scripts");
33
- const [
34
- { toolcraftVerificationInputRootFamilies },
35
- { createToolcraftProductVerificationContext },
36
- ] = await Promise.all([
37
- import(
38
- pathToFileURL(
39
- path.join(
40
- scriptsDir,
41
- "toolcraft-verification-input-roles.mjs",
42
- ),
43
- ).href
44
- ),
45
- import(
46
- pathToFileURL(
47
- path.join(scriptsDir, "toolcraft-verification-impact.mjs"),
48
- ).href
49
- ),
50
- ]);
51
- const { generated, starter } = toolcraftVerificationInputRootFamilies;
52
- const generatedPaths = [
53
- ...generated.runtimeRootPaths,
54
- ...generated.semanticProofRootPaths,
55
- ];
56
- const starterPaths = [
57
- ...starter.runtimeRootPaths,
58
- ...starter.semanticProofRootPaths,
59
- ];
60
- assert.equal(
61
- generatedPaths.some((repoPath) => starterPaths.includes(repoPath)),
62
- false,
63
- "Generated and starter semantic root families must stay distinct.",
64
- );
65
- const { inputRoles: roles } =
66
- await createToolcraftProductVerificationContext(targetDir);
67
- assert.equal(roles.rootFamily, generated.name);
68
- assert.equal(
69
- roles.impactInventoryPath,
70
- generated.impactInventoryPath,
71
- );
72
- assert.equal(
73
- roles.runtimeProductionPaths.includes(generated.compositionPath),
74
- true,
75
- );
76
- }
77
-
78
26
  export async function assertGeneratedDeliveryArchitecture(targetDir) {
79
27
  for (const relativePath of deliveryArchitecturePaths) {
80
28
  assert.ok(
@@ -82,15 +30,14 @@ export async function assertGeneratedDeliveryArchitecture(targetDir) {
82
30
  `Generated output must contain ${relativePath}.`,
83
31
  );
84
32
  }
85
-
86
33
  const sources = {
87
34
  catalog: await readGeneratedScript(
88
35
  targetDir,
89
36
  "playwright-test-title-selection.mjs",
90
37
  ),
91
- impact: await readGeneratedScript(
38
+ lifecycle: await readGeneratedScript(
92
39
  targetDir,
93
- "toolcraft-verification-impact-inventory.mjs",
40
+ "toolcraft-delivery-lifecycle.mjs",
94
41
  ),
95
42
  model: await readGeneratedScript(
96
43
  targetDir,
@@ -104,34 +51,25 @@ export async function assertGeneratedDeliveryArchitecture(targetDir) {
104
51
  targetDir,
105
52
  "toolcraft-delivery-receipt.mjs",
106
53
  ),
107
- resolution: await readGeneratedScript(
108
- targetDir,
109
- "toolcraft-verification-impact-resolution.mjs",
110
- ),
111
54
  };
112
55
 
113
56
  assert.match(sources.catalog, /Delivery catalog\.version must be 2/);
114
- assert.match(
115
- sources.impact,
116
- /TOOLCRAFT_VERIFICATION_IMPACT_VERSION = 3/,
117
- );
118
57
  assert.match(
119
58
  sources.model,
120
- /TOOLCRAFT_FUNCTIONAL_PROOF_MODEL_VERSION = 1/,
59
+ /TOOLCRAFT_FUNCTIONAL_PROOF_MODEL_VERSION = 2/,
121
60
  );
122
- assert.match(sources.plan, /TOOLCRAFT_DELIVERY_PLAN_VERSION = 4/);
123
- assert.match(sources.receipt, /TOOLCRAFT_DELIVERY_RECEIPT_VERSION = 7/);
124
- assert.doesNotMatch(
125
- sources.resolution,
126
- /createCompleteCurrentProof|requiresCompleteCurrentProofForPath/,
61
+ assert.match(sources.plan, /TOOLCRAFT_DELIVERY_PLAN_VERSION = 6/);
62
+ assert.match(sources.receipt, /TOOLCRAFT_DELIVERY_RECEIPT_VERSION = 8/);
63
+ assert.match(
64
+ sources.lifecycle,
65
+ /TOOLCRAFT_INITIAL_PROOF_ALREADY_COMPLETE/,
127
66
  );
128
67
  assert.doesNotMatch(
129
68
  sources.plan,
130
- /TOOLCRAFT_DELIVERY_PLAN_VERSION = [123]\b/,
69
+ /TOOLCRAFT_DELIVERY_PLAN_VERSION = [1-5]\b/,
131
70
  );
132
71
  assert.doesNotMatch(
133
72
  sources.receipt,
134
- /TOOLCRAFT_DELIVERY_RECEIPT_VERSION = [1-6]\b/,
73
+ /TOOLCRAFT_DELIVERY_RECEIPT_VERSION = [1-7]\b/,
135
74
  );
136
- await assertGeneratedInputRoleBehavior(targetDir);
137
75
  }
@@ -5,17 +5,17 @@ import path from "node:path";
5
5
  import {
6
6
  loadGeneratedProofModule,
7
7
  runGeneratedCommand,
8
+ runGeneratedExecutable,
9
+ runGeneratedScript,
8
10
  } from "./generate-test-dependency-sandbox.mjs";
9
11
  import {
10
12
  assertGeneratedInitialFunctionalDelivery,
11
- assertGeneratedLaterFunctionalDelivery,
12
13
  } from "./generate-test-standalone-delivery-stages.mjs";
13
14
  import {
14
15
  writeGeneratedProductFixture,
15
16
  } from "./generate-test-product-fixture.mjs";
16
17
  import {
17
18
  applyGeneratedProductMaterialIteration,
18
- generatedProductMaterialIterationFixturePaths,
19
19
  } from "./generate-test-product-iteration.mjs";
20
20
  const materialAcceptanceIds = Object.freeze([
21
21
  "material.chocolate",
@@ -35,30 +35,6 @@ const materialBrowserTestNames = Object.freeze([
35
35
  "browser: sprinkle color changes material output",
36
36
  "browser: sprinkles visibility changes material output",
37
37
  ]);
38
- const materialDeliveryBrowserTestNames = Object.freeze([
39
- "browser: ambient speed changes product output",
40
- ...materialBrowserTestNames,
41
- "browser: timeline playback drives product output",
42
- ]);
43
- const materialDeliveryAcceptanceIds = Object.freeze([
44
- "animation.speed",
45
- ...materialAcceptanceIds,
46
- "runtime.timeline",
47
- ]);
48
- const materialProductTestFiles = Object.freeze([
49
- "src/app/acceptance/validation-pipeline.test.ts",
50
- "src/app/app-acceptance.base-coverage.test.ts",
51
- "src/app/app-acceptance.product-output-export.test.ts",
52
- "src/app/app-acceptance.product-readiness.test.ts",
53
- "src/app/app-acceptance.product-worklog.test.ts",
54
- "src/app/app-automated-runtime-evidence.test.ts",
55
- "src/app/app-performance.fixture-helper.test.ts",
56
- "src/app/app-performance.gates.test.ts",
57
- "src/app/app-performance.lifecycle.test.ts",
58
- "src/app/app-schema.test.ts",
59
- "src/app/material-output.test.tsx",
60
- ]);
61
-
62
38
  function deepFreeze(value) {
63
39
  if (value && typeof value === "object" && !Object.isFrozen(value)) {
64
40
  Object.values(value).forEach(deepFreeze);
@@ -131,6 +107,7 @@ async function loadInitialPlan({ targetDir }) {
131
107
  const functionalContext =
132
108
  await collectToolcraftDeliveryFunctionalContext(targetDir);
133
109
  const planningInputs = await loadToolcraftDeliveryPlanningInputs({
110
+ authority: null,
134
111
  currentInventory,
135
112
  functionalContext,
136
113
  integrity,
@@ -200,10 +177,11 @@ async function assertMalformedFunctionalPlanFailsClosed({
200
177
  getEscalationRecommendation: () => null,
201
178
  loadPlanningInputs: async () => fixture.planningInputs,
202
179
  readDeliveryAnchor: async () => ({ missing: true }),
180
+ readPerformanceAuthority: async () => null,
203
181
  }),
204
182
  projectDir: targetDir,
205
183
  }),
206
- /functional.*performance/iu,
184
+ /initial delivery proof is not the fixed complete functional proof/iu,
207
185
  );
208
186
  assert.deepEqual(proofCalls, []);
209
187
  assert.equal(checkpointWrites, 0);
@@ -287,6 +265,7 @@ export async function assertGeneratedFreshDemandOnlyLifecycle({
287
265
  execFileAsync,
288
266
  targetDir,
289
267
  });
268
+ const initialCheckpointBytes = await fs.readFile(checkpointPath);
290
269
  await applyGeneratedProductMaterialIteration(targetDir);
291
270
  const materialCatalog = await collectToolcraftDeliveryCatalog(targetDir);
292
271
  const materialRows = materialCatalog.acceptance.filter(
@@ -300,15 +279,34 @@ export async function assertGeneratedFreshDemandOnlyLifecycle({
300
279
  materialRows.map(({ testName }) => testName).sort(),
301
280
  materialBrowserTestNames,
302
281
  );
303
- await assertGeneratedLaterFunctionalDelivery({
304
- acceptanceCatalog: materialCatalog.acceptance,
305
- browserEnv,
306
- checkpointPath,
282
+ await runGeneratedExecutable(
307
283
  execFileAsync,
308
- expectedAcceptanceIds: materialDeliveryAcceptanceIds,
309
- expectedBrowserTestNames: materialDeliveryBrowserTestNames,
310
- expectedChangedFiles: generatedProductMaterialIterationFixturePaths,
311
- expectedProductTestFiles: materialProductTestFiles,
312
284
  targetDir,
313
- });
285
+ "vitest",
286
+ ["run", "src/app/material-output.test.tsx"],
287
+ );
288
+ const focusedResult = await runGeneratedCommand(
289
+ execFileAsync,
290
+ targetDir,
291
+ ["test:feature", "--", "material.layer"],
292
+ { env: browserEnv },
293
+ );
294
+ const focusedOutput = `${focusedResult.stdout ?? ""}\n${focusedResult.stderr ?? ""}`;
295
+ for (const acceptanceId of materialAcceptanceIds.filter(
296
+ (id) => id !== "material.exportedAppearance",
297
+ )) {
298
+ assert.match(focusedOutput, new RegExp(acceptanceId.replace(".", "\\."), "u"));
299
+ }
300
+ assert.doesNotMatch(focusedOutput, /material\.exportedAppearance/u);
301
+ assert.doesNotMatch(focusedOutput, /actions\.output|canvas\.|lighting\./u);
302
+ await runGeneratedScript(
303
+ execFileAsync,
304
+ targetDir,
305
+ "verify:delivery",
306
+ );
307
+ assert.deepEqual(
308
+ await fs.readFile(checkpointPath),
309
+ initialCheckpointBytes,
310
+ "A repeated ordinary delivery command must preserve the initial checkpoint byte-for-byte.",
311
+ );
314
312
  }
@@ -103,7 +103,10 @@ export async function withDeclaredDependencySandbox(targetDir, callback) {
103
103
  }
104
104
  }
105
105
 
106
- function createGeneratedCommandEnvironment(packageManager, overrides = {}) {
106
+ export function createGeneratedCommandEnvironment(
107
+ packageManager,
108
+ overrides = {},
109
+ ) {
107
110
  const childEnv = {
108
111
  ...process.env,
109
112
  ...overrides,
@@ -2,6 +2,22 @@ import assert from "node:assert/strict";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
 
5
+ import {
6
+ assertGeneratedExportIntentDocsDoNotInferVideo,
7
+ collectGeneratedAgentFacingDocs,
8
+ getMissingGeneratedPerformanceLifecycleMarkers,
9
+ getStaleAgentPerformanceWorkflowFailures,
10
+ } from "./generate-test-doc-policy-assertions.mjs";
11
+ import { assertGeneratedExportDocs } from "./generate-test-export-doc-assertions.mjs";
12
+
13
+ export {
14
+ assertGeneratedExportIntentDocsDoNotInferVideo,
15
+ collectGeneratedAgentFacingDocs,
16
+ getMissingGeneratedPerformanceLifecycleMarkers,
17
+ getStaleAgentPerformanceWorkflowFailures,
18
+ staleAnimationDerivedVideoPattern,
19
+ } from "./generate-test-doc-policy-assertions.mjs";
20
+
5
21
  const generatedDocPaths = [
6
22
  "README.md",
7
23
  "workflow.md",
@@ -23,70 +39,6 @@ const generatedDocPaths = [
23
39
  "core/reference-study.md",
24
40
  ];
25
41
 
26
- const staleAgentPerformanceWorkflowPattern =
27
- /app-performance-impact|explicit-performance-work|test:browser:perf|verify:(?:final|quick|ui)|verify:perf:(?:playwright|record-iteration|refresh)|--reason=performance-iteration|--performance-test/iu;
28
-
29
- const generatedPerformanceLifecycleMarkers = [
30
- "<!-- toolcraft-performance-lifecycle: first-delivery=functional; later-delivery=functional-targeted; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only -->",
31
- "<!-- toolcraft-performance-iteration: authority=exact-request-evidence+canonical-path-ids; fixture=reachable-development; after-pass=return-app-to-user+stop -->",
32
- "<!-- toolcraft-performance-full-authority: automatic=forbidden; recommendation=two-compatible-iterations-or-broad-unlocalizable-problem; command=pnpm verify:perf; authority=explicit-user-request-or-accepted-offer -->",
33
- "<!-- toolcraft-performance-routing: localized=agent-targeted; ambiguous=one-user-facing-choice; broad=offer-targeted-or-full; full=explicit-only -->",
34
- ];
35
-
36
- export function getMissingGeneratedPerformanceLifecycleMarkers(sources) {
37
- return sources.flatMap(({ docPath, source }) =>
38
- generatedPerformanceLifecycleMarkers.flatMap((marker) =>
39
- source.includes(marker)
40
- ? []
41
- : [`docs/toolcraft/${docPath} must include canonical marker: ${marker}`],
42
- ),
43
- );
44
- }
45
-
46
- async function collectMarkdownPaths(rootDir, relativeDir = "") {
47
- const currentDir = path.join(rootDir, relativeDir);
48
- const entries = await fs.readdir(currentDir, { withFileTypes: true });
49
- const markdownPaths = [];
50
-
51
- for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
52
- const relativePath = path.join(relativeDir, entry.name);
53
- if (entry.isDirectory()) {
54
- markdownPaths.push(...(await collectMarkdownPaths(rootDir, relativePath)));
55
- } else if (entry.isFile() && entry.name.endsWith(".md")) {
56
- markdownPaths.push(relativePath);
57
- }
58
- }
59
-
60
- return markdownPaths;
61
- }
62
-
63
- export async function collectGeneratedAgentFacingDocs(targetDir) {
64
- const docsRoot = path.join(targetDir, "docs/toolcraft");
65
- const docPaths = await collectMarkdownPaths(docsRoot);
66
- const docs = await Promise.all(
67
- docPaths.map(async (docPath) => ({
68
- docPath: path.posix.join("docs/toolcraft", docPath.split(path.sep).join("/")),
69
- source: await fs.readFile(path.join(docsRoot, docPath), "utf8"),
70
- })),
71
- );
72
-
73
- return [
74
- {
75
- docPath: "AGENTS.md",
76
- source: await fs.readFile(path.join(targetDir, "AGENTS.md"), "utf8"),
77
- },
78
- ...docs,
79
- ];
80
- }
81
-
82
- export function getStaleAgentPerformanceWorkflowFailures(sources) {
83
- return sources.flatMap(({ docPath, source }) =>
84
- staleAgentPerformanceWorkflowPattern.test(source)
85
- ? [`${docPath} contains removed performance workflow guidance`]
86
- : [],
87
- );
88
- }
89
-
90
42
  export async function assertGeneratedDocs(targetDir) {
91
43
  await Promise.all(
92
44
  generatedDocPaths.map((docPath) => fs.stat(path.join(targetDir, "docs/toolcraft", docPath))),
@@ -96,8 +48,9 @@ export async function assertGeneratedDocs(targetDir) {
96
48
  const licenseSource = await fs.readFile(path.join(targetDir, "LICENSE.md"), "utf8");
97
49
  const noticeSource = await fs.readFile(path.join(targetDir, "NOTICE.md"), "utf8");
98
50
  const localDocPaths = generatedDocPaths.filter((docPath) => docPath !== "README.md");
51
+ const generatedAgentFacingDocs = await collectGeneratedAgentFacingDocs(targetDir);
99
52
  const staleWorkflowFailures = getStaleAgentPerformanceWorkflowFailures(
100
- await collectGeneratedAgentFacingDocs(targetDir),
53
+ generatedAgentFacingDocs,
101
54
  );
102
55
 
103
56
  assert.match(noticeSource, /Mediabunny/u);
@@ -109,6 +62,7 @@ export async function assertGeneratedDocs(targetDir) {
109
62
  [],
110
63
  `Generated agent-facing docs contain stale performance workflow guidance:\n${staleWorkflowFailures.join("\n")}`,
111
64
  );
65
+ assertGeneratedExportIntentDocsDoNotInferVideo(generatedAgentFacingDocs);
112
66
 
113
67
  assert.match(agentsSource, /Quick Entry Contract/);
114
68
  assert.match(agentsSource, /Local Reference Docs/);
@@ -127,12 +81,15 @@ export async function assertGeneratedDocs(targetDir) {
127
81
  assert.match(agentsSource, /Verification Tier Classifier/);
128
82
  assert.match(agentsSource, /Verification tier: Tier N/);
129
83
  assert.match(agentsSource, /npm run verify:delivery/);
130
- assert.match(agentsSource, /coherent user-visible delivery batch/i);
84
+ assert.match(agentsSource, /first product delivery/i);
85
+ assert.match(
86
+ agentsSource,
87
+ /toolcraft-performance-lifecycle: first-delivery=functional-complete; later-edits=focused-only; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only/,
88
+ );
131
89
  assert.match(
132
90
  agentsSource,
133
- /toolcraft-performance-lifecycle: first-delivery=functional; later-delivery=functional-targeted; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only/,
91
+ /repeated bare `verify:delivery` exits before inventory, build, tests, export, and performance work/is,
134
92
  );
135
- assert.match(agentsSource, /bare `npm run verify:delivery` derives the required proof/i);
136
93
  assert.match(
137
94
  agentsSource,
138
95
  /only exact request authority[^\n]*measured targeted performance/i,
@@ -141,7 +98,7 @@ export async function assertGeneratedDocs(targetDir) {
141
98
  agentsSource,
142
99
  /during development[^\n]*affected performance scenarios|targeted performance scenarios only for touched/i,
143
100
  );
144
- assert.match(agentsSource, /app-verification-impact\.json/);
101
+ assert.match(agentsSource, /ordinary edits use only the smallest feature-focused tests and browser checks/i);
145
102
  assert.match(agentsSource, /does not depend only on a mutable package script/i);
146
103
  assert.match(agentsSource, /pnpm ai:check/);
147
104
  assert.match(agentsSource, /use `brainstorming`/);
@@ -149,6 +106,7 @@ export async function assertGeneratedDocs(targetDir) {
149
106
  assert.match(agentsSource, /use `systematic-debugging`/);
150
107
  assert.match(agentsSource, /browser` workflow/);
151
108
  assert.match(agentsSource, /pnpm test:browser/);
109
+ assert.match(agentsSource, /npm run test:feature --/);
152
110
  assert.match(agentsSource, /signed local `AGENTS\.md` and `docs\/toolcraft\/\*` files are the mandatory workflow authority/i);
153
111
  assert.match(agentsSource, /generated with `--no-skills`, continue through the equivalent signed local workflow/i);
154
112
  assert.match(agentsSource, /Do not silently ignore a missing workflow capability/);
@@ -163,6 +121,8 @@ export async function assertGeneratedDocs(targetDir) {
163
121
  assert.match(agentsSource, /exportRenderer/);
164
122
  assert.match(agentsSource, /renderDefaultCanvasMedia=\{false\}/);
165
123
  assert.match(agentsSource, /onPanelAction/);
124
+ assert.match(agentsSource, /canonical runtime representation across defaults, live edits, persistence, settings import, and keyframes/i);
125
+ assert.match(agentsSource, /property edits declare `selectionScope` as global or selected-entity/i);
166
126
  assert.match(agentsSource, /MIT License/);
167
127
  assert.match(agentsSource, /LICENSE\.md/);
168
128
  assert.match(agentsSource, /NOTICE\.md/);
@@ -203,6 +163,10 @@ export async function assertGeneratedDocs(targetDir) {
203
163
  path.join(targetDir, "docs/toolcraft/core/timeline-animation.md"),
204
164
  "utf8",
205
165
  );
166
+ const coreReferenceStudySource = await fs.readFile(
167
+ path.join(targetDir, "docs/toolcraft/core/reference-study.md"),
168
+ "utf8",
169
+ );
206
170
 
207
171
  assert.match(componentRulesSource, /Slider `step` means numeric snapping only/);
208
172
  assert.match(componentRulesSource, /variant: "discrete"/);
@@ -236,16 +200,32 @@ export async function assertGeneratedDocs(targetDir) {
236
200
  assert.match(coreRuntimeBoundarySource, /copied runtime tree or its signed integrity manifest is missing/);
237
201
  assert.match(coreRuntimeBoundarySource, /modelPresentation/);
238
202
  assert.match(coreRuntimeBoundarySource, /exportRenderer/);
239
- assert.match(coreRuntimeBoundarySource, /runtime owns typed image\/video actions end to end/i);
240
203
  assert.match(coreRuntimeBoundarySource, /does not suppress runtime model layers/);
241
204
  assert.match(componentRulesSource, /Do not show Layers for a single-layer app/);
242
205
  assert.match(coreTimelineSource, /Any app with `Export Video` must enable the top Toolcraft timeline/);
243
- assert.match(coreSetupExportSource, /Every product exposes `Export PNG`/);
244
- assert.match(
206
+ for (const requiredReferenceStudyTerm of [
207
+ "npm run reference:study",
208
+ "--kind",
209
+ "--grid",
210
+ "--fps",
211
+ "--timestamps-file",
212
+ "12 FPS",
213
+ "120",
214
+ "referenceInputs",
215
+ "reference-parity",
216
+ "no-reference fast path",
217
+ ]) {
218
+ assert.match(
219
+ coreReferenceStudySource,
220
+ new RegExp(requiredReferenceStudyTerm.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"), "iu"),
221
+ `Core reference-study docs must mention ${requiredReferenceStudyTerm}.`,
222
+ );
223
+ }
224
+ assertGeneratedExportDocs({
225
+ agentsSource,
226
+ coreRuntimeBoundarySource,
245
227
  coreSetupExportSource,
246
- /Products whose requested delivery includes animation also expose `Export Video`/,
247
- );
248
- assert.match(coreSetupExportSource, /Clipboard copy is optional and never replaces export/);
228
+ });
249
229
  assert.match(coreSetupExportSource, /renderScaleCoverage/);
250
230
  assert.match(coreSetupExportSource, /selected-backing-pixels/);
251
231
  assert.match(coreSetupExportSource, /canvas-render-scale-backing/);
@@ -271,6 +251,10 @@ export async function assertGeneratedDocs(targetDir) {
271
251
  );
272
252
  assert.match(assemblyDocsSource, /@\/toolcraft\/runtime/);
273
253
  assert.match(assemblyDocsSource, /ToolcraftAppComposition/);
254
+ assert.match(
255
+ assemblyDocsSource,
256
+ /Every product declaration requires `productReadiness\.exportIntent`/,
257
+ );
274
258
  assert.match(assemblyDocsSource, /protected route/);
275
259
  assert.match(assemblyDocsSource, /transferMode: "reference-runtime-clone"/);
276
260
  assert.match(assemblyDocsSource, /`canvasContent` must not contain app UI/);
@@ -284,6 +268,7 @@ export async function assertGeneratedDocs(targetDir) {
284
268
  assert.match(acceptanceDocsSource, /automatedTestName/);
285
269
  assert.match(acceptanceDocsSource, /browserTestName/);
286
270
  assert.match(acceptanceDocsSource, /app-acceptance-data\.ts/);
271
+ assert.match(acceptanceDocsSource, /productReadiness\.exportIntent/);
287
272
  assert.match(
288
273
  acceptanceDocsSource,
289
274
  /Contract docs are signed except product-owned `agent-worklog\.md` and optional `workflow-observation\.md`; only the observation stays outside `sourceHash`/,
@@ -291,7 +276,8 @@ export async function assertGeneratedDocs(targetDir) {
291
276
  assert.match(acceptanceDocsSource, /Framework meta-tests are product-invariant/);
292
277
  assert.match(acceptanceDocsSource, /protected neutral contract fixtures/);
293
278
  assert.match(acceptanceDocsSource, /do not edit supplied `app-performance\.\*` meta-tests/i);
294
- assert.match(acceptanceDocsSource, /app-verification-impact\.json/);
279
+ assert.match(acceptanceDocsSource, /Later ordinary edits do not derive an aggregate proof model/i);
280
+ assert.match(acceptanceDocsSource, /^(?=[\s\S]*test:feature)(?=[\s\S]*semantic)(?=[\s\S]*--all[\s\S]*product acceptance)/i);
295
281
  assert.match(acceptanceDocsSource, /app-kernel-benchmarks\.ts/);
296
282
  assert.match(acceptanceDocsSource, /renderScaleCoverage/);
297
283
  assert.match(acceptanceDocsSource, /selected-backing-pixels/);
@@ -306,14 +292,8 @@ export async function assertGeneratedDocs(targetDir) {
306
292
  );
307
293
  assert.match(acceptanceDocsSource, /actual encoded packet metadata/i);
308
294
  assert.match(acceptanceDocsSource, /distinct decoded frame hashes/i);
309
- assert.match(
310
- acceptanceDocsSource,
311
- /Each browser file owns one acceptance domain/i,
312
- );
313
- assert.match(
314
- acceptanceDocsSource,
315
- /proof and test paths cannot own them/i,
316
- );
295
+ assert.match(acceptanceDocsSource, /selectionScopeCoverage: "two-entity-isolation"/);
296
+ assert.match(acceptanceDocsSource, /editing A changes only A, editing B changes only B/i);
317
297
  for (const coverage of [
318
298
  "package-extraction",
319
299
  "deterministic-root-selection",
@@ -349,6 +329,14 @@ export async function assertGeneratedDocs(targetDir) {
349
329
  path.join(targetDir, "docs/toolcraft/core/performance.md"),
350
330
  "utf8",
351
331
  );
332
+ const schemaDocsSource = await fs.readFile(
333
+ path.join(targetDir, "docs/toolcraft/schema-reference.md"),
334
+ "utf8",
335
+ );
336
+ assert.match(schemaDocsSource, /one canonical runtime value model/i);
337
+ assert.match(schemaDocsSource, /`color` state is an expanded uppercase `#RRGGBB` string/i);
338
+ assert.match(componentRulesSource, /Built-in controls own canonical runtime values/i);
339
+ assert.match(worklogDocsSource, /Canonical control values and selected-entity isolation/i);
352
340
  assert.deepEqual(
353
341
  getMissingGeneratedPerformanceLifecycleMarkers([
354
342
  { docPath: "workflow.md", source: workflowDocsSource },
@@ -367,6 +355,7 @@ export async function assertGeneratedDocs(targetDir) {
367
355
  assert.match(rendererDocsSource, /combined fixtures/i);
368
356
  assert.match(rendererDocsSource, /modelPresentation/);
369
357
  assert.match(rendererDocsSource, /ToolcraftAppComposition\.exportRenderer/);
358
+ assert.match(rendererDocsSource, /svgExportRenderer/);
370
359
  assert.match(rendererDocsSource, /useToolcraftModelPresentationConsumer/);
371
360
  assert.match(rendererDocsSource, /acquirePresentation/);
372
361
  assert.match(rendererDocsSource, /lease\.release/);
@@ -397,9 +386,12 @@ export async function assertGeneratedDocs(targetDir) {
397
386
  );
398
387
  assert.match(corePerformanceDocsSource, /exact 30 FPS packet cadence[\s\S]*functional correctness/i);
399
388
  assert.match(performanceDocsSource, /exact 30 FPS packet cadence[\s\S]*functional proof/i);
400
- assert.match(performanceDocsSource, /coherent (?:user-visible )?delivery batch/i);
389
+ assert.match(performanceDocsSource, /first product delivery/i);
401
390
  assert.match(performanceDocsSource, /verify:delivery/);
402
- assert.match(performanceDocsSource, /immediately previous successful delivery/i);
391
+ assert.match(
392
+ performanceDocsSource,
393
+ /repeated bare `verify:delivery` exits before inventory, build, tests, export, and performance work/i,
394
+ );
403
395
  assert.match(performanceDocsSource, /performance-iteration/);
404
396
  assert.match(performanceDocsSource, /renderScaleCoverage/);
405
397
  assert.match(performanceDocsSource, /canvas-render-scale-backing/);
@@ -426,15 +418,15 @@ export async function assertGeneratedDocs(targetDir) {
426
418
  assert.match(performanceDocsSource, /Use bare `npm run verify:delivery` once/i);
427
419
  assert.match(
428
420
  workflowDocsSource,
429
- /immediate previous and current semantic functional proof models/i,
421
+ /Later ordinary edits:[^\n]*exact unit\/component test[^\n]*npm run test:feature -- <acceptance-id>/i,
430
422
  );
431
423
  assert.match(
432
424
  workflowDocsSource,
433
- /unchanged `sourceHash` fast path does not collect the catalog, dependency graph, or functional proof model/i,
425
+ /repeated bare `npm run verify:delivery` is a protected no-op[^\n]*exits before inventory, build, tests, export, and performance work/i,
434
426
  );
435
427
  assert.match(
436
428
  workflowDocsSource,
437
- /do not rerun the aggregate, export, or performance matrix after every edit/i,
429
+ /do not rerun the aggregate, export, or performance matrix after edits/i,
438
430
  );
439
431
  assert.match(
440
432
  performanceDocsSource,