@pixel-point/toolcraft 0.0.15 → 0.0.16

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 (1212) hide show
  1. package/package.json +1 -1
  2. package/src/cli-package-manager-flow.test.mjs +9 -2
  3. package/src/cli.test.mjs +11 -16
  4. package/src/create-command.mjs +10 -4
  5. package/src/generate-demand-only-lifecycle.test.mjs +102 -0
  6. package/src/generate-performance-iteration-execution.test.mjs +105 -0
  7. package/src/generate-test-assertions.mjs +2 -0
  8. package/src/generate-test-browser-execution-ledger.mjs +138 -0
  9. package/src/generate-test-browser-execution-ledger.test.mjs +87 -0
  10. package/src/generate-test-delivery-architecture-assertions.mjs +137 -0
  11. package/src/generate-test-demand-only-lifecycle.mjs +303 -0
  12. package/src/generate-test-dependency-sandbox.mjs +158 -0
  13. package/src/generate-test-doc-assertions.mjs +286 -10
  14. package/src/generate-test-doc-assertions.test.mjs +43 -0
  15. package/src/generate-test-file-assertions.mjs +244 -6
  16. package/src/generate-test-fs-utils.mjs +4 -1
  17. package/src/generate-test-integrity-assertions.mjs +70 -3
  18. package/src/generate-test-integrity-framework-assertions.mjs +31 -1
  19. package/src/generate-test-integrity-manifest-assertions.mjs +58 -0
  20. package/src/generate-test-integrity-ownership-assertions.mjs +35 -2
  21. package/src/generate-test-managed-process.mjs +287 -0
  22. package/src/generate-test-managed-process.test.mjs +340 -0
  23. package/src/generate-test-package-assertions.mjs +75 -11
  24. package/src/generate-test-product-fixture.mjs +85 -7
  25. package/src/generate-test-product-fixture.test.mjs +227 -0
  26. package/src/generate-test-product-iteration.mjs +278 -0
  27. package/src/generate-test-product-iteration.test.mjs +241 -0
  28. package/src/generate-test-standalone-assertions.mjs +87 -149
  29. package/src/generate-test-standalone-delivery-stages.mjs +186 -0
  30. package/src/generate-test-windows-job-native.cs +496 -0
  31. package/src/generate-test-windows-job-wrapper.mjs +40 -0
  32. package/src/generate-test-windows-job.mjs +47 -0
  33. package/src/generate-test-windows-job.ps1 +17 -0
  34. package/src/generate.mjs +26 -0
  35. package/src/generate.test.mjs +76 -14
  36. package/src/generated-integrity-manifest.test.mjs +51 -2
  37. package/src/generated-source-policy.mjs +1 -1
  38. package/src/generated-source-policy.test.mjs +15 -2
  39. package/src/import-map.mjs +12 -0
  40. package/src/package-json.mjs +7 -6
  41. package/src/package-json.test.mjs +55 -31
  42. package/src/package-manager.mjs +71 -33
  43. package/src/package-manager.test.mjs +101 -18
  44. package/src/packaged-template-fallback.test.mjs +4 -0
  45. package/src/rewrite-imports.mjs +3 -0
  46. package/src/rewrite-imports.test.mjs +16 -1
  47. package/templates/runtime/contracts/component-contracts.choices.test.ts +49 -6
  48. package/templates/runtime/contracts/component-contracts.choices.ts +53 -10
  49. package/templates/runtime/contracts/component-contracts.inputs.test.ts +2 -2
  50. package/templates/runtime/contracts/component-contracts.inputs.ts +2 -2
  51. package/templates/runtime/contracts/component-contracts.media-custom.test.ts +19 -0
  52. package/templates/runtime/contracts/component-contracts.media-custom.ts +18 -2
  53. package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +57 -83
  54. package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +1 -1
  55. package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +16 -2
  56. package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +24 -8
  57. package/templates/runtime/contracts/component-contracts.runtime.ts +80 -39
  58. package/templates/runtime/contracts/component-contracts.test.ts +6 -1
  59. package/templates/runtime/contracts/component-contracts.visual.test.ts +44 -5
  60. package/templates/runtime/contracts/component-contracts.visual.ts +64 -17
  61. package/templates/runtime/contracts/decision-contracts.test.ts +106 -11
  62. package/templates/runtime/contracts/decision-contracts.ts +83 -6
  63. package/templates/runtime/contracts/index.ts +2 -0
  64. package/templates/runtime/contracts/performance-request-classifier-descriptions.ts +39 -0
  65. package/templates/runtime/contracts/performance-request-classifier-rules.ts +181 -0
  66. package/templates/runtime/contracts/performance-request-classifier-types.ts +50 -0
  67. package/templates/runtime/contracts/performance-request-classifier.test.ts +269 -0
  68. package/templates/runtime/contracts/performance-request-classifier.ts +224 -0
  69. package/templates/runtime/contracts/performance-request-evidence-policy.d.mts +21 -0
  70. package/templates/runtime/contracts/performance-request-evidence-policy.mjs +39 -0
  71. package/templates/runtime/contracts/performance-verification-policy.test.ts +129 -0
  72. package/templates/runtime/contracts/performance-verification-policy.ts +49 -0
  73. package/templates/runtime/contracts/segmented-control-fit.test.ts +71 -0
  74. package/templates/runtime/contracts/segmented-control-fit.ts +38 -0
  75. package/templates/runtime/export/export-frame.test.ts +80 -0
  76. package/templates/runtime/export/export-frame.ts +107 -0
  77. package/templates/runtime/export/export-sizing.ts +136 -0
  78. package/templates/runtime/export/export.test.ts +70 -1
  79. package/templates/runtime/export/export.ts +31 -146
  80. package/templates/runtime/export/index.ts +2 -0
  81. package/templates/runtime/index.ts +10 -0
  82. package/templates/runtime/model-import/canonical/index.ts +39 -0
  83. package/templates/runtime/model-import/canonical/model-appearance-data-uri.test.ts +43 -0
  84. package/templates/runtime/model-import/canonical/model-appearance-data-uri.ts +79 -0
  85. package/templates/runtime/model-import/canonical/model-appearance-image.ts +111 -0
  86. package/templates/runtime/model-import/canonical/model-appearance-input-snapshot.ts +189 -0
  87. package/templates/runtime/model-import/canonical/model-appearance-resource.test.ts +116 -0
  88. package/templates/runtime/model-import/canonical/model-appearance-resource.ts +165 -0
  89. package/templates/runtime/model-import/canonical/model-appearance-validation.test.ts +197 -0
  90. package/templates/runtime/model-import/canonical/model-appearance-validation.ts +458 -0
  91. package/templates/runtime/model-import/canonical/model-document-codec-adversarial.test.ts +151 -0
  92. package/templates/runtime/model-import/canonical/model-document-codec-appearance-metadata.ts +336 -0
  93. package/templates/runtime/model-import/canonical/model-document-codec-closure.test.ts +125 -0
  94. package/templates/runtime/model-import/canonical/model-document-codec-envelope.ts +363 -0
  95. package/templates/runtime/model-import/canonical/model-document-codec-error.ts +57 -0
  96. package/templates/runtime/model-import/canonical/model-document-codec-format.ts +83 -0
  97. package/templates/runtime/model-import/canonical/model-document-codec-layout.ts +163 -0
  98. package/templates/runtime/model-import/canonical/model-document-codec-metadata-adversarial.test.ts +169 -0
  99. package/templates/runtime/model-import/canonical/model-document-codec-metadata-preflight.ts +371 -0
  100. package/templates/runtime/model-import/canonical/model-document-codec-metadata-reader.ts +142 -0
  101. package/templates/runtime/model-import/canonical/model-document-codec-metadata.ts +420 -0
  102. package/templates/runtime/model-import/canonical/model-document-codec-payload.ts +311 -0
  103. package/templates/runtime/model-import/canonical/model-document-codec.test.ts +450 -0
  104. package/templates/runtime/model-import/canonical/model-document-codec.ts +161 -0
  105. package/templates/runtime/model-import/canonical/model-document-digest.ts +13 -0
  106. package/templates/runtime/model-import/canonical/model-document-hostile-decode.test.ts +100 -0
  107. package/templates/runtime/model-import/canonical/model-document-hostile-input.test.ts +140 -0
  108. package/templates/runtime/model-import/canonical/model-document-input-reader.ts +153 -0
  109. package/templates/runtime/model-import/canonical/model-document-input-snapshot.ts +413 -0
  110. package/templates/runtime/model-import/canonical/model-document-limit-options.test.ts +155 -0
  111. package/templates/runtime/model-import/canonical/model-document-limits.ts +151 -0
  112. package/templates/runtime/model-import/canonical/model-document-owned-geometry.test.ts +138 -0
  113. package/templates/runtime/model-import/canonical/model-document-safe-typed-array.ts +154 -0
  114. package/templates/runtime/model-import/canonical/model-document-test-support.ts +163 -0
  115. package/templates/runtime/model-import/canonical/model-document-validation-geometry.ts +330 -0
  116. package/templates/runtime/model-import/canonical/model-document-validation-helpers.ts +22 -0
  117. package/templates/runtime/model-import/canonical/model-document-validation-hierarchy.ts +314 -0
  118. package/templates/runtime/model-import/canonical/model-document-validation-provenance.ts +153 -0
  119. package/templates/runtime/model-import/canonical/model-document-validation-result.ts +118 -0
  120. package/templates/runtime/model-import/canonical/model-document-validation.test.ts +497 -0
  121. package/templates/runtime/model-import/canonical/model-document-validation.ts +276 -0
  122. package/templates/runtime/model-import/canonical/model-document-worker-memory.test.ts +95 -0
  123. package/templates/runtime/model-import/canonical/model-document-worker-memory.ts +365 -0
  124. package/templates/runtime/model-import/canonical/model-document.ts +187 -0
  125. package/templates/runtime/model-import/canonical/sha256.ts +144 -0
  126. package/templates/runtime/model-import/default-model-source-assets.test.ts +212 -0
  127. package/templates/runtime/model-import/default-model-source-assets.ts +235 -0
  128. package/templates/runtime/model-import/formats/fbx-appearance-test-fixtures.ts +144 -0
  129. package/templates/runtime/model-import/formats/fbx-ascii-appearance-test-fixtures.ts +123 -0
  130. package/templates/runtime/model-import/formats/fbx-binary-preflight-reader.ts +179 -0
  131. package/templates/runtime/model-import/formats/fbx-binary-preflight.ts +277 -0
  132. package/templates/runtime/model-import/formats/fbx-binary-test-fixture-builder.ts +129 -0
  133. package/templates/runtime/model-import/formats/fbx-model-format-adapter.test-fixtures.ts +119 -0
  134. package/templates/runtime/model-import/formats/fbx-model-format-adapter.test.ts +316 -0
  135. package/templates/runtime/model-import/formats/fbx-model-format-adapter.ts +96 -0
  136. package/templates/runtime/model-import/formats/fbx-model-format-preflight.ts +122 -0
  137. package/templates/runtime/model-import/formats/fbx-static-appearance.test.ts +93 -0
  138. package/templates/runtime/model-import/formats/fbx-static-appearance.ts +403 -0
  139. package/templates/runtime/model-import/formats/gltf-accessor-preflight.ts +321 -0
  140. package/templates/runtime/model-import/formats/gltf-attribute-encoding.ts +65 -0
  141. package/templates/runtime/model-import/formats/gltf-buffer-preflight.ts +320 -0
  142. package/templates/runtime/model-import/formats/gltf-canonical-appearance.ts +422 -0
  143. package/templates/runtime/model-import/formats/gltf-canonical-geometry.ts +276 -0
  144. package/templates/runtime/model-import/formats/gltf-canonical-hierarchy.ts +180 -0
  145. package/templates/runtime/model-import/formats/gltf-canonical-metadata.ts +100 -0
  146. package/templates/runtime/model-import/formats/gltf-decode-safety.ts +84 -0
  147. package/templates/runtime/model-import/formats/gltf-decoded-count-validation.ts +38 -0
  148. package/templates/runtime/model-import/formats/gltf-document-canonicalizer.ts +328 -0
  149. package/templates/runtime/model-import/formats/gltf-document-sanitizer.ts +269 -0
  150. package/templates/runtime/model-import/formats/gltf-extension-policy.ts +59 -0
  151. package/templates/runtime/model-import/formats/gltf-glb-document.ts +93 -0
  152. package/templates/runtime/model-import/formats/gltf-json-inspection.ts +152 -0
  153. package/templates/runtime/model-import/formats/gltf-json-preflight.ts +128 -0
  154. package/templates/runtime/model-import/formats/gltf-missing-appearance.ts +158 -0
  155. package/templates/runtime/model-import/formats/gltf-model-format-adapter-appearance.test.ts +181 -0
  156. package/templates/runtime/model-import/formats/gltf-model-format-adapter-resource-limits.test.ts +236 -0
  157. package/templates/runtime/model-import/formats/gltf-model-format-adapter-validation.test.ts +274 -0
  158. package/templates/runtime/model-import/formats/gltf-model-format-adapter.test.ts +229 -0
  159. package/templates/runtime/model-import/formats/gltf-model-format-adapter.ts +161 -0
  160. package/templates/runtime/model-import/formats/gltf-node-preflight.ts +218 -0
  161. package/templates/runtime/model-import/formats/gltf-primitive-preflight.ts +295 -0
  162. package/templates/runtime/model-import/formats/gltf-source-document.ts +234 -0
  163. package/templates/runtime/model-import/formats/gltf-source-snapshot.ts +187 -0
  164. package/templates/runtime/model-import/formats/gltf-texture-resource.ts +252 -0
  165. package/templates/runtime/model-import/formats/index.ts +28 -0
  166. package/templates/runtime/model-import/formats/model-format-adapter.test.ts +165 -0
  167. package/templates/runtime/model-import/formats/model-format-adapter.ts +165 -0
  168. package/templates/runtime/model-import/formats/obj-material-library.test.ts +124 -0
  169. package/templates/runtime/model-import/formats/obj-material-library.ts +432 -0
  170. package/templates/runtime/model-import/formats/obj-model-format-adapter.test.ts +251 -0
  171. package/templates/runtime/model-import/formats/obj-model-format-adapter.ts +85 -0
  172. package/templates/runtime/model-import/formats/obj-stl-ply-model-format-adapter-support.ts +335 -0
  173. package/templates/runtime/model-import/formats/ply-model-format-adapter.test.ts +151 -0
  174. package/templates/runtime/model-import/formats/ply-model-format-adapter.ts +195 -0
  175. package/templates/runtime/model-import/formats/production-model-format-main-bundle.test.ts +123 -0
  176. package/templates/runtime/model-import/formats/production-model-format-manifest.ts +135 -0
  177. package/templates/runtime/model-import/formats/production-model-format-registry.test.ts +253 -0
  178. package/templates/runtime/model-import/formats/production-model-format-registry.ts +16 -0
  179. package/templates/runtime/model-import/formats/production-model-format-worker-registry.ts +68 -0
  180. package/templates/runtime/model-import/formats/stl-model-format-adapter.test.ts +110 -0
  181. package/templates/runtime/model-import/formats/stl-model-format-adapter.ts +125 -0
  182. package/templates/runtime/model-import/formats/three-static-appearance-canonicalizer.ts +305 -0
  183. package/templates/runtime/model-import/formats/three-static-geometry-canonicalizer.test.ts +245 -0
  184. package/templates/runtime/model-import/formats/three-static-geometry-canonicalizer.ts +434 -0
  185. package/templates/runtime/model-import/formats/three-static-source-bundle.ts +146 -0
  186. package/templates/runtime/model-import/formats/vendor/draco/LICENSE +252 -0
  187. package/templates/runtime/model-import/formats/vendor/draco/README.md +15 -0
  188. package/templates/runtime/model-import/formats/vendor/draco/draco_decoder_gltf.wasm.json +1 -0
  189. package/templates/runtime/model-import/formats/vendor/draco/draco_wasm_wrapper.cjs +117 -0
  190. package/templates/runtime/model-import/formats/vendor/draco/draco_wasm_wrapper.d.cts +9 -0
  191. package/templates/runtime/model-import/index.ts +125 -0
  192. package/templates/runtime/model-import/model-analysis-summary.test.ts +179 -0
  193. package/templates/runtime/model-import/model-analysis-summary.ts +164 -0
  194. package/templates/runtime/model-import/model-asset-metadata.ts +71 -0
  195. package/templates/runtime/model-import/model-import-limit-values.ts +41 -0
  196. package/templates/runtime/model-import/model-import-limits.test.ts +125 -0
  197. package/templates/runtime/model-import/model-import-limits.ts +165 -0
  198. package/templates/runtime/model-import/model-import-types.ts +215 -0
  199. package/templates/runtime/model-import/model-package-path.ts +106 -0
  200. package/templates/runtime/model-import/model-package-types.ts +55 -0
  201. package/templates/runtime/model-import/model-package-zip-preflight.ts +405 -0
  202. package/templates/runtime/model-import/model-package-zip.test.ts +252 -0
  203. package/templates/runtime/model-import/model-package-zip.ts +227 -0
  204. package/templates/runtime/model-import/model-persistence-appearance-resources.test.ts +69 -0
  205. package/templates/runtime/model-import/model-persistence-hydration-appearance.test.ts +146 -0
  206. package/templates/runtime/model-import/model-persistence-hydration-resources.ts +281 -0
  207. package/templates/runtime/model-import/model-persistence-hydration-test-support.ts +97 -0
  208. package/templates/runtime/model-import/model-persistence-hydration.test.ts +370 -0
  209. package/templates/runtime/model-import/model-persistence-hydration.ts +323 -0
  210. package/templates/runtime/model-import/model-source-asset-coordinator.test.ts +414 -0
  211. package/templates/runtime/model-import/model-source-asset-handler-appearance-resources.ts +20 -0
  212. package/templates/runtime/model-import/model-source-asset-handler-appearance.test.ts +169 -0
  213. package/templates/runtime/model-import/model-source-asset-handler-repair-controller.ts +294 -0
  214. package/templates/runtime/model-import/model-source-asset-handler-repair.ts +233 -0
  215. package/templates/runtime/model-import/model-source-asset-handler-resources.ts +54 -0
  216. package/templates/runtime/model-import/model-source-asset-handler.ingestion.test.ts +236 -0
  217. package/templates/runtime/model-import/model-source-asset-handler.lifecycle.test.ts +176 -0
  218. package/templates/runtime/model-import/model-source-asset-handler.test-support.ts +231 -0
  219. package/templates/runtime/model-import/model-source-asset-handler.ts +479 -0
  220. package/templates/runtime/model-import/model-source-asset-repair-coordinator.test.ts +431 -0
  221. package/templates/runtime/model-import/model-source-bundle-codec.test.ts +423 -0
  222. package/templates/runtime/model-import/model-source-bundle-codec.ts +259 -0
  223. package/templates/runtime/model-import/model-source-bundle-descriptor-fields.ts +369 -0
  224. package/templates/runtime/model-import/model-source-bundle-descriptor-validation.ts +402 -0
  225. package/templates/runtime/model-import/model-source-bundle-error.ts +28 -0
  226. package/templates/runtime/model-import/model-source-bundle-limits.ts +108 -0
  227. package/templates/runtime/model-import/model-source-bundle-mime-type.test.ts +21 -0
  228. package/templates/runtime/model-import/model-source-bundle-preflight-test-support.ts +435 -0
  229. package/templates/runtime/model-import/model-source-bundle-security-test-support.ts +417 -0
  230. package/templates/runtime/model-import/model-source-bundle-test-support.ts +83 -0
  231. package/templates/runtime/model-import/model-source-bundle.test.ts +427 -0
  232. package/templates/runtime/model-import/model-source-bundle.ts +377 -0
  233. package/templates/runtime/model-import/model-source-bytes.ts +78 -0
  234. package/templates/runtime/model-import/model-source-data-uri.ts +74 -0
  235. package/templates/runtime/model-import/model-source-digest.test.ts +25 -0
  236. package/templates/runtime/model-import/model-source-digest.ts +288 -0
  237. package/templates/runtime/model-import/model-source-gltf.ts +184 -0
  238. package/templates/runtime/model-import/model-source-json-preflight.ts +382 -0
  239. package/templates/runtime/model-import/model-source-lookup.ts +134 -0
  240. package/templates/runtime/model-import/model-source-package-normalization.test.ts +106 -0
  241. package/templates/runtime/model-import/model-source-path.ts +233 -0
  242. package/templates/runtime/model-import/test-fixtures/gltf-appearance-fixtures.ts +188 -0
  243. package/templates/runtime/model-import/test-fixtures/model-fixtures.ts +612 -0
  244. package/templates/runtime/model-import/test-fixtures/obj-appearance-fixtures.ts +76 -0
  245. package/templates/runtime/model-import/topology/apply-model-repair.test.ts +236 -0
  246. package/templates/runtime/model-import/topology/apply-model-repair.ts +31 -0
  247. package/templates/runtime/model-import/topology/model-repair-execution.ts +364 -0
  248. package/templates/runtime/model-import/topology/model-repair-geometry.ts +60 -0
  249. package/templates/runtime/model-import/topology/model-repair-plan-codec.test.ts +125 -0
  250. package/templates/runtime/model-import/topology/model-repair-plan-codec.ts +96 -0
  251. package/templates/runtime/model-import/topology/model-repair-plan-envelope.ts +13 -0
  252. package/templates/runtime/model-import/topology/model-repair-plan-validation.ts +325 -0
  253. package/templates/runtime/model-import/topology/model-repair-plan.ts +275 -0
  254. package/templates/runtime/model-import/topology/model-topology-analysis.test.ts +448 -0
  255. package/templates/runtime/model-import/topology/model-topology-analysis.ts +426 -0
  256. package/templates/runtime/model-import/topology/model-topology-digest.ts +117 -0
  257. package/templates/runtime/model-import/topology/model-topology-graph.ts +455 -0
  258. package/templates/runtime/model-import/topology/model-topology-math.ts +140 -0
  259. package/templates/runtime/model-import/topology/model-topology-resources.ts +126 -0
  260. package/templates/runtime/model-import/topology/model-topology-test-support.ts +163 -0
  261. package/templates/runtime/model-import/topology/model-topology-types.ts +14 -0
  262. package/templates/runtime/model-import/worker/bounded-worker-cache.test.ts +47 -0
  263. package/templates/runtime/model-import/worker/bounded-worker-cache.ts +147 -0
  264. package/templates/runtime/model-import/worker/cooperative-buffer-snapshot.ts +195 -0
  265. package/templates/runtime/model-import/worker/model-import-worker-appearance-receipt.test.ts +273 -0
  266. package/templates/runtime/model-import/worker/model-import-worker-client-draft-verification.ts +39 -0
  267. package/templates/runtime/model-import/worker/model-import-worker-client-receipt.test.ts +217 -0
  268. package/templates/runtime/model-import/worker/model-import-worker-client-repair-validation.test.ts +357 -0
  269. package/templates/runtime/model-import/worker/model-import-worker-client-repair-verification.ts +44 -0
  270. package/templates/runtime/model-import/worker/model-import-worker-client-result-verification.ts +68 -0
  271. package/templates/runtime/model-import/worker/model-import-worker-client-snapshot.test.ts +368 -0
  272. package/templates/runtime/model-import/worker/model-import-worker-client-snapshot.ts +478 -0
  273. package/templates/runtime/model-import/worker/model-import-worker-client-test-support.ts +198 -0
  274. package/templates/runtime/model-import/worker/model-import-worker-client-validation.test.ts +301 -0
  275. package/templates/runtime/model-import/worker/model-import-worker-client.test.ts +484 -0
  276. package/templates/runtime/model-import/worker/model-import-worker-client.ts +715 -0
  277. package/templates/runtime/model-import/worker/model-import-worker-diagnostics.ts +298 -0
  278. package/templates/runtime/model-import/worker/model-import-worker-protocol-validation.ts +714 -0
  279. package/templates/runtime/model-import/worker/model-import-worker-protocol.ts +192 -0
  280. package/templates/runtime/model-import/worker/model-import-worker-receipt.ts +221 -0
  281. package/templates/runtime/model-import/worker/model-import-worker-result-verification.ts +22 -0
  282. package/templates/runtime/model-import/worker/model-import-worker-runtime-appearance.test.ts +81 -0
  283. package/templates/runtime/model-import/worker/model-import-worker-runtime-envelope.test.ts +126 -0
  284. package/templates/runtime/model-import/worker/model-import-worker-runtime-lifecycle.test.ts +342 -0
  285. package/templates/runtime/model-import/worker/model-import-worker-runtime-package.test.ts +85 -0
  286. package/templates/runtime/model-import/worker/model-import-worker-runtime-production.test.ts +51 -0
  287. package/templates/runtime/model-import/worker/model-import-worker-runtime-repair.test.ts +75 -0
  288. package/templates/runtime/model-import/worker/model-import-worker-runtime-test-support.ts +126 -0
  289. package/templates/runtime/model-import/worker/model-import-worker-runtime.test.ts +472 -0
  290. package/templates/runtime/model-import/worker/model-import-worker-runtime.ts +804 -0
  291. package/templates/runtime/model-import/worker/model-import-worker-trust-boundary.test.ts +243 -0
  292. package/templates/runtime/model-import/worker/model-import-worker-vite-smoke.test.ts +132 -0
  293. package/templates/runtime/model-import/worker/model-import.worker.bundle.js +3691 -0
  294. package/templates/runtime/model-import/worker/model-import.worker.ts +25 -0
  295. package/templates/runtime/performance/index.ts +1 -0
  296. package/templates/runtime/performance/profile-catalog-manifest.d.mts +27 -0
  297. package/templates/runtime/performance/profile-catalog-manifest.mjs +42 -0
  298. package/templates/runtime/performance/profile-catalog.test.ts +49 -0
  299. package/templates/runtime/performance/profile-catalog.ts +56 -0
  300. package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +388 -5
  301. package/templates/runtime/react/app-shell/settings-transfer-canvas.ts +68 -0
  302. package/templates/runtime/react/app-shell/settings-transfer.test.ts +94 -1
  303. package/templates/runtime/react/app-shell/settings-transfer.ts +61 -89
  304. package/templates/runtime/react/app-shell/storage-key-migration.test.ts +40 -0
  305. package/templates/runtime/react/app-shell/storage-key-migration.ts +13 -9
  306. package/templates/runtime/react/app-shell/toolbar-panel.tsx +31 -13
  307. package/templates/runtime/react/app-shell/toolcraft-app-panel-workspace.test.tsx +125 -0
  308. package/templates/runtime/react/app-shell/toolcraft-app-test-utils.tsx +72 -0
  309. package/templates/runtime/react/app-shell/toolcraft-app.integration.test.tsx +21 -1
  310. package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +68 -0
  311. package/templates/runtime/react/app-shell/toolcraft-app.test.tsx +10 -55
  312. package/templates/runtime/react/app-shell/toolcraft-app.tsx +73 -15
  313. package/templates/runtime/react/app-shell/toolcraft-media-presentation.test.tsx +135 -0
  314. package/templates/runtime/react/app-shell/toolcraft-media-presentation.tsx +190 -0
  315. package/templates/runtime/react/app-shell/toolcraft-model-presentation-composition.test.tsx +99 -0
  316. package/templates/runtime/react/app-shell/toolcraft-persistence-bootstrap.ts +111 -0
  317. package/templates/runtime/react/app-shell/toolcraft-pipeline-context.test.tsx +252 -0
  318. package/templates/runtime/react/app-shell/toolcraft-pipeline-context.tsx +44 -0
  319. package/templates/runtime/react/app-shell/toolcraft-pipeline-evidence.tsx +41 -0
  320. package/templates/runtime/react/app-shell/toolcraft-pipeline-initialization.test.tsx +301 -0
  321. package/templates/runtime/react/app-shell/toolcraft-playback-persistence.test.tsx +116 -0
  322. package/templates/runtime/react/app-shell/toolcraft-render-isolation.test.tsx +418 -0
  323. package/templates/runtime/react/app-shell/toolcraft-root-persistence-migration.test.tsx +297 -0
  324. package/templates/runtime/react/app-shell/toolcraft-root-persistence-test-utils.tsx +163 -0
  325. package/templates/runtime/react/app-shell/toolcraft-root-persistence.test.tsx +357 -0
  326. package/templates/runtime/react/app-shell/toolcraft-root.test.tsx +57 -6
  327. package/templates/runtime/react/app-shell/toolcraft-root.tsx +106 -94
  328. package/templates/runtime/react/app-shell/toolcraft-selector-lanes.test.tsx +338 -0
  329. package/templates/runtime/react/app-shell/toolcraft-selectors.test.tsx +241 -0
  330. package/templates/runtime/react/app-shell/toolcraft-selectors.ts +133 -0
  331. package/templates/runtime/react/app-shell/toolcraft-source-asset-context.test.tsx +467 -0
  332. package/templates/runtime/react/app-shell/toolcraft-source-asset-context.tsx +646 -0
  333. package/templates/runtime/react/app-shell/toolcraft-store-context.tsx +18 -0
  334. package/templates/runtime/react/app-shell/use-toolcraft-persistence.ts +203 -0
  335. package/templates/runtime/react/app-shell/use-toolcraft-pipeline-pass.test.tsx +220 -0
  336. package/templates/runtime/react/app-shell/use-toolcraft-pipeline-pass.ts +175 -0
  337. package/templates/runtime/react/app-shell/use-toolcraft-pipeline.ts +10 -0
  338. package/templates/runtime/react/app-shell/use-toolcraft-values.test.tsx +288 -0
  339. package/templates/runtime/react/app-shell/use-toolcraft.ts +188 -7
  340. package/templates/runtime/react/canvas/canvas-default-media-layer.tsx +52 -14
  341. package/templates/runtime/react/canvas/canvas-media-transform.ts +2 -1
  342. package/templates/runtime/react/canvas/canvas-scene-surface.test.tsx +51 -0
  343. package/templates/runtime/react/canvas/canvas-scene-surface.tsx +54 -0
  344. package/templates/runtime/react/canvas/canvas-shell-interactions.test.tsx +225 -3
  345. package/templates/runtime/react/canvas/canvas-shell-media-rendering.test.tsx +83 -0
  346. package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +88 -0
  347. package/templates/runtime/react/canvas/canvas-shell-test-utils.tsx +42 -2
  348. package/templates/runtime/react/canvas/canvas-shell-upload.test.tsx +231 -16
  349. package/templates/runtime/react/canvas/canvas-shell.tsx +154 -63
  350. package/templates/runtime/react/canvas/canvas-source-asset-feedback.test.tsx +211 -0
  351. package/templates/runtime/react/canvas/canvas-upload-routing.ts +65 -56
  352. package/templates/runtime/react/canvas/canvas-viewport-world.tsx +66 -0
  353. package/templates/runtime/react/canvas/media-file.test.ts +102 -0
  354. package/templates/runtime/react/canvas/media-file.ts +80 -35
  355. package/templates/runtime/react/canvas/runtime-scene-export.test.ts +279 -0
  356. package/templates/runtime/react/canvas/runtime-scene-export.ts +167 -0
  357. package/templates/runtime/react/canvas/scene-element-presentation-rect.ts +35 -0
  358. package/templates/runtime/react/canvas/use-canvas-drop-import.ts +65 -94
  359. package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +52 -17
  360. package/templates/runtime/react/canvas/use-toolcraft-canvas-frame.ts +20 -0
  361. package/templates/runtime/react/canvas-handles/canvas-handle-layer-registry.test.ts +33 -0
  362. package/templates/runtime/react/canvas-handles/canvas-handle-layer-registry.tsx +64 -0
  363. package/templates/runtime/react/controls-panel/__tests__/actions-control-loading.test.tsx +59 -0
  364. package/templates/runtime/react/controls-panel/__tests__/controls-panel-filedrop-reorder.test.tsx +29 -11
  365. package/templates/runtime/react/controls-panel/__tests__/controls-panel.control-visibility.test.tsx +52 -0
  366. package/templates/runtime/react/controls-panel/__tests__/controls-panel.dependency-isolation.test.tsx +332 -0
  367. package/templates/runtime/react/controls-panel/__tests__/controls-panel.extensions-live-state.test.tsx +135 -0
  368. package/templates/runtime/react/controls-panel/__tests__/controls-panel.footer-actions.test.tsx +50 -0
  369. package/templates/runtime/react/controls-panel/__tests__/controls-panel.inline-layout.test.tsx +25 -9
  370. package/templates/runtime/react/controls-panel/__tests__/controls-panel.media-upload-files.test.tsx +35 -3
  371. package/templates/runtime/react/controls-panel/__tests__/controls-panel.media-upload-image.test.tsx +11 -5
  372. package/templates/runtime/react/controls-panel/__tests__/controls-panel.media-upload-multi-image.test.tsx +167 -5
  373. package/templates/runtime/react/controls-panel/__tests__/controls-panel.render-isolation.test.tsx +496 -0
  374. package/templates/runtime/react/controls-panel/__tests__/controls-panel.reset-dependency-isolation.test.tsx +226 -0
  375. package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +187 -0
  376. package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-isolation.test.tsx +441 -0
  377. package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-navigation-overflow.test.tsx +247 -0
  378. package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-navigation.test.tsx +486 -0
  379. package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-shell.test.tsx +24 -2
  380. package/templates/runtime/react/controls-panel/__tests__/controls-panel.setup-controls.test.tsx +10 -5
  381. package/templates/runtime/react/controls-panel/__tests__/controls-panel.tabs.test.tsx +93 -0
  382. package/templates/runtime/react/controls-panel/__tests__/file-drop-folder-selection.test.tsx +62 -0
  383. package/templates/runtime/react/controls-panel/__tests__/file-drop-presentation-accessibility.test.tsx +45 -0
  384. package/templates/runtime/react/controls-panel/__tests__/file-drop-presentation.test.tsx +459 -0
  385. package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +159 -12
  386. package/templates/runtime/react/controls-panel/actions/panel-action-feedback.tsx +24 -0
  387. package/templates/runtime/react/controls-panel/conditions/control-condition-dependencies.ts +39 -0
  388. package/templates/runtime/react/controls-panel/conditions/control-conditions.ts +40 -0
  389. package/templates/runtime/react/controls-panel/controls-panel.tsx +286 -170
  390. package/templates/runtime/react/controls-panel/keyframes/controls-panel-keyframes.tsx +27 -20
  391. package/templates/runtime/react/controls-panel/layout/controls-panel-control-group.tsx +509 -0
  392. package/templates/runtime/react/controls-panel/layout/controls-panel-inline-layout.tsx +5 -3
  393. package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +33 -5
  394. package/templates/runtime/react/controls-panel/layout/controls-panel-section-navigation-layout.ts +169 -0
  395. package/templates/runtime/react/controls-panel/layout/controls-panel-section-navigation.tsx +458 -0
  396. package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +324 -324
  397. package/templates/runtime/react/controls-panel/live-custom-control.tsx +52 -0
  398. package/templates/runtime/react/controls-panel/renderers/controls-panel-basic-renderers.tsx +15 -0
  399. package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.test.tsx +242 -0
  400. package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.tsx +203 -129
  401. package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.test.ts +26 -0
  402. package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.ts +29 -0
  403. package/templates/runtime/react/controls-panel/renderers/controls-panel-settings-transfer-renderer.tsx +4 -4
  404. package/templates/runtime/react/controls-panel/testing/controls-panel-test-utils.tsx +8 -2
  405. package/templates/runtime/react/controls-panel/values/controls-panel-value-labels.ts +1 -0
  406. package/templates/runtime/react/index.ts +32 -1
  407. package/templates/runtime/react/layers/layer-tree.ts +5 -32
  408. package/templates/runtime/react/layers/layers-panel-test-utils.tsx +3 -1
  409. package/templates/runtime/react/layers/layers-panel.tsx +44 -30
  410. package/templates/runtime/react/model-rendering/lazy-three-model-render-binding.test.ts +92 -0
  411. package/templates/runtime/react/model-rendering/lazy-three-model-render-binding.ts +49 -0
  412. package/templates/runtime/react/model-rendering/model-canvas-layer.test.tsx +491 -0
  413. package/templates/runtime/react/model-rendering/model-canvas-layer.tsx +459 -0
  414. package/templates/runtime/react/model-rendering/model-display-fit.test.ts +57 -0
  415. package/templates/runtime/react/model-rendering/model-display-fit.ts +110 -0
  416. package/templates/runtime/react/model-rendering/model-export.test.ts +179 -0
  417. package/templates/runtime/react/model-rendering/model-export.ts +90 -0
  418. package/templates/runtime/react/model-rendering/model-presentation-consumer.test.tsx +225 -0
  419. package/templates/runtime/react/model-rendering/model-presentation-consumer.tsx +189 -0
  420. package/templates/runtime/react/model-rendering/model-presentation-feedback.ts +15 -0
  421. package/templates/runtime/react/model-rendering/model-presentation-mode.ts +112 -0
  422. package/templates/runtime/react/model-rendering/model-presentation-resource-manager.test.ts +244 -0
  423. package/templates/runtime/react/model-rendering/model-presentation-resource-manager.ts +426 -0
  424. package/templates/runtime/react/model-rendering/model-render-binding.ts +233 -0
  425. package/templates/runtime/react/model-rendering/model-render-host.ts +339 -0
  426. package/templates/runtime/react/model-rendering/model-render-provider.test.tsx +457 -0
  427. package/templates/runtime/react/model-rendering/model-render-provider.tsx +172 -0
  428. package/templates/runtime/react/model-rendering/model-render-registry.test.ts +86 -0
  429. package/templates/runtime/react/model-rendering/model-render-registry.ts +64 -0
  430. package/templates/runtime/react/model-rendering/model-render-state.ts +79 -0
  431. package/templates/runtime/react/model-rendering/three-canonical-geometry.ts +346 -0
  432. package/templates/runtime/react/model-rendering/three-canonical-model.ts +150 -0
  433. package/templates/runtime/react/model-rendering/three-model-appearance.test.ts +125 -0
  434. package/templates/runtime/react/model-rendering/three-model-appearance.ts +199 -0
  435. package/templates/runtime/react/model-rendering/three-model-prewarm.ts +61 -0
  436. package/templates/runtime/react/model-rendering/three-model-render-adapter-lifecycle.test.ts +293 -0
  437. package/templates/runtime/react/model-rendering/three-model-render-adapter.test-support.ts +70 -0
  438. package/templates/runtime/react/model-rendering/three-model-render-adapter.test.ts +379 -0
  439. package/templates/runtime/react/model-rendering/three-model-render-adapter.ts +484 -0
  440. package/templates/runtime/react/orientation-gizmo/model-orbit-interaction.integration.test.tsx +129 -0
  441. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-layer.tsx +44 -0
  442. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.test.ts +217 -0
  443. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +299 -0
  444. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-public-api.test.ts +12 -0
  445. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.test.ts +115 -0
  446. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.ts +46 -0
  447. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-snap.integration.test.tsx +179 -0
  448. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-test-harness.tsx +208 -0
  449. package/templates/runtime/react/orientation-gizmo/orientation-gizmo.integration.test.tsx +167 -0
  450. package/templates/runtime/react/orientation-gizmo/orientation-gizmo.tsx +544 -0
  451. package/templates/runtime/react/orientation-gizmo/orientation-interaction-coordinator.ts +112 -0
  452. package/templates/runtime/react/orientation-gizmo/orientation-quaternion.ts +264 -0
  453. package/templates/runtime/react/orientation-gizmo/use-toolcraft-model-orbit-interaction.ts +233 -0
  454. package/templates/runtime/react/orientation-gizmo/use-toolcraft-orientation-control-selection.ts +78 -0
  455. package/templates/runtime/react/panel-host/panel-host-geometry.test.ts +38 -1
  456. package/templates/runtime/react/panel-host/panel-host-geometry.ts +64 -6
  457. package/templates/runtime/react/panel-host/panel-host-runtime-placement.test.tsx +198 -0
  458. package/templates/runtime/react/panel-host/panel-host-types.ts +13 -2
  459. package/templates/runtime/react/panel-host/panel-host.test.tsx +13 -1
  460. package/templates/runtime/react/panel-host/panel-host.tsx +105 -20
  461. package/templates/runtime/react/panel-host/use-toolcraft-panel-binding.test.tsx +161 -0
  462. package/templates/runtime/react/panel-host/use-toolcraft-panel-binding.ts +55 -0
  463. package/templates/runtime/react/timeline/timeline-expanded-content.tsx +3 -0
  464. package/templates/runtime/react/timeline/timeline-panel-header.tsx +6 -0
  465. package/templates/runtime/react/timeline/timeline-panel-test-utils.tsx +1 -0
  466. package/templates/runtime/react/timeline/timeline-panel-transport.test.tsx +176 -2
  467. package/templates/runtime/react/timeline/timeline-panel.tsx +72 -19
  468. package/templates/runtime/react/timeline/timeline-playback-hooks.ts +58 -21
  469. package/templates/runtime/react/timeline/timeline-scrub-lifecycle.test.tsx +154 -0
  470. package/templates/runtime/rendering/index.ts +3 -0
  471. package/templates/runtime/rendering/renderer-pipeline-cache.ts +171 -0
  472. package/templates/runtime/rendering/renderer-pipeline-pass-generation.test.ts +151 -0
  473. package/templates/runtime/rendering/renderer-pipeline-pass-generation.ts +267 -0
  474. package/templates/runtime/rendering/renderer-pipeline-registration.test.ts +356 -0
  475. package/templates/runtime/rendering/renderer-pipeline-registration.ts +760 -0
  476. package/templates/runtime/rendering/renderer-pipeline-resource-lifecycle.test.ts +248 -0
  477. package/templates/runtime/rendering/renderer-pipeline-runtime-owner-inspection.ts +23 -0
  478. package/templates/runtime/rendering/renderer-pipeline-runtime-owner.test.ts +353 -0
  479. package/templates/runtime/rendering/renderer-pipeline-runtime-owner.ts +369 -0
  480. package/templates/runtime/rendering/renderer-pipeline-runtime.lifecycle.test.ts +440 -0
  481. package/templates/runtime/rendering/renderer-pipeline-runtime.test.ts +495 -0
  482. package/templates/runtime/rendering/renderer-pipeline-runtime.ts +611 -0
  483. package/templates/runtime/rendering/renderer-pipeline-runtime.types.test.ts +93 -0
  484. package/templates/runtime/rendering/renderer-pipeline-source-invalidation.test.ts +208 -0
  485. package/templates/runtime/rendering/structured-key-trie.test.ts +31 -0
  486. package/templates/runtime/rendering/structured-key-trie.ts +91 -0
  487. package/templates/runtime/scene/index.ts +1 -0
  488. package/templates/runtime/scene/scene-bounds.test.ts +242 -0
  489. package/templates/runtime/scene/scene-bounds.ts +190 -0
  490. package/templates/runtime/schema/additional-value-targets.ts +15 -0
  491. package/templates/runtime/schema/app-capabilities.test.ts +70 -0
  492. package/templates/runtime/schema/app-capabilities.ts +28 -0
  493. package/templates/runtime/schema/app-identity.test.ts +68 -0
  494. package/templates/runtime/schema/app-identity.ts +30 -0
  495. package/templates/runtime/schema/assembly-contract.ts +18 -2
  496. package/templates/runtime/schema/control-schema-normalization.ts +144 -3
  497. package/templates/runtime/schema/controls-panel-actions.ts +111 -44
  498. package/templates/runtime/schema/controls-panel-layout-groups.ts +17 -6
  499. package/templates/runtime/schema/controls-panel-normalization.ts +42 -7
  500. package/templates/runtime/schema/controls-panel-section-id.test.ts +418 -0
  501. package/templates/runtime/schema/controls-panel-section-id.ts +208 -0
  502. package/templates/runtime/schema/controls-panel-section-layout.ts +62 -23
  503. package/templates/runtime/schema/controls-panel-section-roundtrip.test.ts +157 -0
  504. package/templates/runtime/schema/controls-panel-section-titles.ts +19 -7
  505. package/templates/runtime/schema/define-toolcraft.assembly.test.ts +73 -0
  506. package/templates/runtime/schema/define-toolcraft.control-sections.test-support.ts +46 -0
  507. package/templates/runtime/schema/define-toolcraft.control-sections.test.ts +2 -4
  508. package/templates/runtime/schema/define-toolcraft.file-drop-normalization.test.ts +177 -0
  509. package/templates/runtime/schema/define-toolcraft.model-file-drop-formats.test.ts +181 -0
  510. package/templates/runtime/schema/define-toolcraft.model-file-drop-limits.test.ts +175 -0
  511. package/templates/runtime/schema/define-toolcraft.segmented-control-fit.test.ts +167 -0
  512. package/templates/runtime/schema/define-toolcraft.setup-background.test.ts +142 -0
  513. package/templates/runtime/schema/define-toolcraft.setup-canvas.test.ts +38 -0
  514. package/templates/runtime/schema/define-toolcraft.setup-persistence.test.ts +39 -31
  515. package/templates/runtime/schema/define-toolcraft.setup-render-scale-timeline.test.ts +33 -13
  516. package/templates/runtime/schema/define-toolcraft.setup-settings-transfer.test.ts +61 -1
  517. package/templates/runtime/schema/define-toolcraft.ts +32 -55
  518. package/templates/runtime/schema/keyframe-capability.test.ts +16 -5
  519. package/templates/runtime/schema/panels-schema-normalization.ts +17 -2
  520. package/templates/runtime/schema/persistence-plan.test.ts +201 -0
  521. package/templates/runtime/schema/persistence-plan.ts +70 -0
  522. package/templates/runtime/schema/runtime-setup-background.ts +158 -0
  523. package/templates/runtime/schema/runtime-setup-section.ts +122 -57
  524. package/templates/runtime/schema/runtime-targets.ts +14 -0
  525. package/templates/runtime/schema/schema-resolvers.ts +0 -18
  526. package/templates/runtime/schema/types.ts +167 -17
  527. package/templates/runtime/source-assets/binary-media-hydration.ts +73 -0
  528. package/templates/runtime/source-assets/default-binary-media-hydration.test.ts +92 -0
  529. package/templates/runtime/source-assets/default-model-hydration.test.ts +200 -0
  530. package/templates/runtime/source-assets/file-source-asset-handler.ts +157 -0
  531. package/templates/runtime/source-assets/image-file-source-asset-handler.test.ts +78 -0
  532. package/templates/runtime/source-assets/image-source-asset-handler.test.ts +202 -0
  533. package/templates/runtime/source-assets/image-source-asset-handler.ts +123 -0
  534. package/templates/runtime/source-assets/index.ts +20 -0
  535. package/templates/runtime/source-assets/media-resource-ref.test.ts +33 -0
  536. package/templates/runtime/source-assets/media-resource-ref.ts +49 -0
  537. package/templates/runtime/source-assets/production-source-asset-registry.ts +18 -0
  538. package/templates/runtime/source-assets/repository/binary-asset-dependencies.test.ts +184 -0
  539. package/templates/runtime/source-assets/repository/binary-asset-reachability.ts +26 -0
  540. package/templates/runtime/source-assets/repository/binary-asset-repository.ts +139 -0
  541. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-lifecycle.test.ts +111 -0
  542. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-lifecycle.ts +248 -0
  543. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-liveness.test.ts +68 -0
  544. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-liveness.ts +156 -0
  545. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-metadata.ts +242 -0
  546. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-options.ts +130 -0
  547. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository-leases.test.ts +305 -0
  548. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository-liveness.test.ts +217 -0
  549. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository-migration.test.ts +198 -0
  550. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository.test-support.ts +48 -0
  551. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository.test.ts +242 -0
  552. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository.ts +390 -0
  553. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-storage.ts +238 -0
  554. package/templates/runtime/source-assets/repository/indexeddb-binary-asset-test-support.ts +163 -0
  555. package/templates/runtime/source-assets/repository/memory-binary-asset-repository.test.ts +211 -0
  556. package/templates/runtime/source-assets/repository/memory-binary-asset-repository.ts +149 -0
  557. package/templates/runtime/source-assets/repository/resource-manifest.test.ts +67 -0
  558. package/templates/runtime/source-assets/repository/resource-manifest.ts +122 -0
  559. package/templates/runtime/source-assets/repository/resource-reachability.test.ts +227 -0
  560. package/templates/runtime/source-assets/repository/resource-reachability.ts +153 -0
  561. package/templates/runtime/source-assets/repository/unavailable-binary-asset-repository.ts +24 -0
  562. package/templates/runtime/source-assets/source-asset-admission.ts +63 -0
  563. package/templates/runtime/source-assets/source-asset-batch-preparation.ts +42 -0
  564. package/templates/runtime/source-assets/source-asset-binary-media-hydrator.ts +137 -0
  565. package/templates/runtime/source-assets/source-asset-cleanup-manager.ts +110 -0
  566. package/templates/runtime/source-assets/source-asset-coordinator-admission.test.ts +365 -0
  567. package/templates/runtime/source-assets/source-asset-coordinator-lifecycle.test.ts +230 -0
  568. package/templates/runtime/source-assets/source-asset-coordinator-planning.test.ts +121 -0
  569. package/templates/runtime/source-assets/source-asset-coordinator-presentation-reachability.test.ts +54 -0
  570. package/templates/runtime/source-assets/source-asset-coordinator-test-support.ts +197 -0
  571. package/templates/runtime/source-assets/source-asset-coordinator.test.ts +495 -0
  572. package/templates/runtime/source-assets/source-asset-coordinator.ts +328 -0
  573. package/templates/runtime/source-assets/source-asset-feedback.ts +40 -0
  574. package/templates/runtime/source-assets/source-asset-handler-cancellation.test.ts +157 -0
  575. package/templates/runtime/source-assets/source-asset-import-runner.ts +462 -0
  576. package/templates/runtime/source-assets/source-asset-job-manager.ts +186 -0
  577. package/templates/runtime/source-assets/source-asset-model-hydrator.ts +241 -0
  578. package/templates/runtime/source-assets/source-asset-operation-store.test.ts +53 -0
  579. package/templates/runtime/source-assets/source-asset-operation-store.ts +132 -0
  580. package/templates/runtime/source-assets/source-asset-prepared-result.ts +108 -0
  581. package/templates/runtime/source-assets/source-asset-presentation-feedback.test.ts +34 -0
  582. package/templates/runtime/source-assets/source-asset-presentation-resources.test.ts +43 -0
  583. package/templates/runtime/source-assets/source-asset-presentation-resources.ts +144 -0
  584. package/templates/runtime/source-assets/source-asset-presentation.test.ts +196 -0
  585. package/templates/runtime/source-assets/source-asset-presentation.ts +182 -0
  586. package/templates/runtime/source-assets/source-asset-registry.test.ts +282 -0
  587. package/templates/runtime/source-assets/source-asset-registry.ts +165 -0
  588. package/templates/runtime/source-assets/source-asset-resource-resolver.test.ts +47 -0
  589. package/templates/runtime/source-assets/source-asset-resource-resolver.ts +86 -0
  590. package/templates/runtime/source-assets/source-asset-types.ts +173 -0
  591. package/templates/runtime/state/canvas-background-state.ts +73 -0
  592. package/templates/runtime/state/canvas-control-target-reducer.test.ts +272 -0
  593. package/templates/runtime/state/canvas-control-target-reducer.ts +349 -0
  594. package/templates/runtime/state/canvas-frame.test.ts +68 -0
  595. package/templates/runtime/state/canvas-frame.ts +79 -0
  596. package/templates/runtime/state/canvas-reducer.ts +90 -5
  597. package/templates/runtime/state/control-value-normalization.test.ts +141 -0
  598. package/templates/runtime/state/control-value-normalization.ts +222 -0
  599. package/templates/runtime/state/controls-reducer.ts +45 -145
  600. package/templates/runtime/state/create-template-state.test.ts +43 -2
  601. package/templates/runtime/state/create-template-state.ts +36 -5
  602. package/templates/runtime/state/history-patch-metadata.test.ts +36 -0
  603. package/templates/runtime/state/history-patch-metadata.ts +74 -0
  604. package/templates/runtime/state/history-patches.ts +49 -12
  605. package/templates/runtime/state/layer-visibility.ts +36 -0
  606. package/templates/runtime/state/media-defaults.ts +93 -6
  607. package/templates/runtime/state/media-discriminated-union.test.ts +204 -0
  608. package/templates/runtime/state/media-import-allocation.ts +129 -0
  609. package/templates/runtime/state/media-reducer.ts +395 -99
  610. package/templates/runtime/state/media-resource-state.ts +34 -0
  611. package/templates/runtime/state/media-state.ts +1 -1
  612. package/templates/runtime/state/panels-reducer.ts +80 -27
  613. package/templates/runtime/state/persistence-additional-value-targets.test.ts +67 -0
  614. package/templates/runtime/state/persistence-controller.test.ts +187 -0
  615. package/templates/runtime/state/persistence-controller.ts +195 -0
  616. package/templates/runtime/state/persistence-legacy-section-collapse.test.ts +75 -0
  617. package/templates/runtime/state/persistence-legacy-section-collapse.ts +138 -0
  618. package/templates/runtime/state/persistence-media-migration.test.ts +163 -0
  619. package/templates/runtime/state/persistence-migrations.test.ts +51 -0
  620. package/templates/runtime/state/persistence-migrations.ts +101 -0
  621. package/templates/runtime/state/persistence-reader-canvas.ts +4 -0
  622. package/templates/runtime/state/persistence-reader-media.ts +298 -39
  623. package/templates/runtime/state/persistence-reader-panels.ts +52 -5
  624. package/templates/runtime/state/persistence-reader-values.ts +19 -21
  625. package/templates/runtime/state/persistence-readers.ts +1 -1
  626. package/templates/runtime/state/persistence-snapshot.ts +15 -4
  627. package/templates/runtime/state/persistence.test.ts +228 -3
  628. package/templates/runtime/state/persistence.ts +53 -14
  629. package/templates/runtime/state/reducer-canvas-panels.test.ts +63 -0
  630. package/templates/runtime/state/reducer-controls.test.ts +114 -0
  631. package/templates/runtime/state/reducer-media-import-batch.test.ts +90 -0
  632. package/templates/runtime/state/reducer-media-import-sizing.test.ts +5 -3
  633. package/templates/runtime/state/reducer-media-reset.test.ts +18 -2
  634. package/templates/runtime/state/reducer-media-test-utils.ts +11 -6
  635. package/templates/runtime/state/reducer-media-transform.test.ts +11 -3
  636. package/templates/runtime/state/reducer-model-lifecycle.test.ts +307 -0
  637. package/templates/runtime/state/reducer.ts +9 -0
  638. package/templates/runtime/state/scene-element-frame.test.ts +32 -0
  639. package/templates/runtime/state/scene-element-frame.ts +46 -0
  640. package/templates/runtime/state/toolcraft-external-store-cross-lane.test.ts +475 -0
  641. package/templates/runtime/state/toolcraft-external-store-dependencies.test.ts +226 -0
  642. package/templates/runtime/state/toolcraft-external-store-dependencies.ts +291 -0
  643. package/templates/runtime/state/toolcraft-external-store-field-intent.test.ts +202 -0
  644. package/templates/runtime/state/toolcraft-external-store-history-boundary.test.ts +243 -0
  645. package/templates/runtime/state/toolcraft-external-store-history.ts +254 -0
  646. package/templates/runtime/state/toolcraft-external-store-publication.test.ts +135 -0
  647. package/templates/runtime/state/toolcraft-external-store-transition.ts +143 -0
  648. package/templates/runtime/state/toolcraft-external-store.test.ts +330 -0
  649. package/templates/runtime/state/toolcraft-external-store.ts +401 -0
  650. package/templates/runtime/state/toolcraft-keyframe-equality.ts +78 -0
  651. package/templates/runtime/state/types.ts +215 -13
  652. package/templates/runtime/testing/model-import-performance-workload.test.ts +265 -0
  653. package/templates/runtime/testing/model-import-performance-workload.ts +468 -0
  654. package/templates/runtime/testing/performance-config.ts +7 -0
  655. package/templates/runtime/testing/performance-control-classification.ts +3 -59
  656. package/templates/runtime/testing/performance-coverage-policy.ts +13 -0
  657. package/templates/runtime/testing/performance-coverage-validator.ts +39 -24
  658. package/templates/runtime/testing/performance-envelope-validation-context.ts +33 -0
  659. package/templates/runtime/testing/performance-fixture-adapter-types.ts +74 -0
  660. package/templates/runtime/testing/performance-fixture-adapters.ts +24 -0
  661. package/templates/runtime/testing/performance-fixture-cost-model.ts +216 -0
  662. package/templates/runtime/testing/performance-fixture-dimensions.ts +83 -0
  663. package/templates/runtime/testing/performance-fixture-discrete-adapters.ts +150 -0
  664. package/templates/runtime/testing/performance-fixture-discrete-domain.test.ts +274 -0
  665. package/templates/runtime/testing/performance-fixture-discrete-search.test.ts +119 -0
  666. package/templates/runtime/testing/performance-fixture-discrete-search.ts +96 -0
  667. package/templates/runtime/testing/performance-fixture-execution.test.ts +248 -0
  668. package/templates/runtime/testing/performance-fixture-execution.ts +109 -0
  669. package/templates/runtime/testing/performance-fixture-numeric.test.ts +15 -0
  670. package/templates/runtime/testing/performance-fixture-numeric.ts +24 -0
  671. package/templates/runtime/testing/performance-fixture-plan-analysis.ts +385 -0
  672. package/templates/runtime/testing/performance-fixture-plan.test-fixtures.ts +115 -0
  673. package/templates/runtime/testing/performance-fixture-plan.test.ts +443 -0
  674. package/templates/runtime/testing/performance-fixture-plan.ts +105 -0
  675. package/templates/runtime/testing/performance-fixture-reachable-values.test.ts +406 -0
  676. package/templates/runtime/testing/performance-fixture-record.ts +14 -0
  677. package/templates/runtime/testing/performance-fixture-registry-validation.ts +341 -0
  678. package/templates/runtime/testing/performance-fixture-validation-pure.test.ts +378 -0
  679. package/templates/runtime/testing/performance-interaction-policy.test.ts +35 -0
  680. package/templates/runtime/testing/performance-interaction-policy.ts +9 -0
  681. package/templates/runtime/testing/performance-no-legacy-semantics.test.ts +109 -0
  682. package/templates/runtime/testing/performance-path-codec.d.mts +42 -0
  683. package/templates/runtime/testing/performance-path-codec.mjs +112 -0
  684. package/templates/runtime/testing/performance-path-codec.test.ts +96 -0
  685. package/templates/runtime/testing/performance-path-coverage-policy.ts +111 -0
  686. package/templates/runtime/testing/performance-path-coverage.test.ts +219 -0
  687. package/templates/runtime/testing/performance-path-model.ts +15 -0
  688. package/templates/runtime/testing/performance-paths.test-fixtures.ts +165 -0
  689. package/templates/runtime/testing/performance-paths.test.ts +208 -0
  690. package/templates/runtime/testing/performance-paths.ts +84 -0
  691. package/templates/runtime/testing/performance-profile-validation.test.ts +42 -0
  692. package/templates/runtime/testing/performance-profile-validation.ts +19 -0
  693. package/templates/runtime/testing/performance-render-plan-assessment.test.ts +492 -0
  694. package/templates/runtime/testing/performance-render-plan-assessment.ts +121 -0
  695. package/templates/runtime/testing/performance-render-plan-benchmark-evidence.test.ts +225 -0
  696. package/templates/runtime/testing/performance-render-plan-benchmark-evidence.ts +185 -0
  697. package/templates/runtime/testing/performance-render-plan-integration.test.ts +250 -0
  698. package/templates/runtime/testing/performance-render-plan-model.ts +91 -0
  699. package/templates/runtime/testing/performance-render-plan-pass-assessment.ts +353 -0
  700. package/templates/runtime/testing/performance-render-plan-registration.test.ts +78 -0
  701. package/templates/runtime/testing/performance-render-plan-test-fixtures.ts +123 -0
  702. package/templates/runtime/testing/performance-render-plan-utils.ts +65 -0
  703. package/templates/runtime/testing/performance-renderer-pipeline-parser.ts +202 -0
  704. package/templates/runtime/testing/performance-renderer-pipeline-validation.ts +93 -98
  705. package/templates/runtime/testing/performance-renderer-technique-validation.ts +0 -155
  706. package/templates/runtime/testing/performance-scenario-common-validation.ts +101 -0
  707. package/templates/runtime/testing/performance-scenario-validation.ts +3 -40
  708. package/templates/runtime/testing/performance-schema-queries.ts +3 -1
  709. package/templates/runtime/testing/performance-test-fixtures/index.ts +0 -2
  710. package/templates/runtime/testing/performance-test-fixtures/renderer-pipelines.ts +0 -14
  711. package/templates/runtime/testing/performance-types.ts +128 -182
  712. package/templates/runtime/testing/performance-workload-envelope-derived-validation.test.ts +152 -0
  713. package/templates/runtime/testing/performance-workload-envelope-derived-validation.ts +109 -0
  714. package/templates/runtime/testing/performance-workload-envelope-schema-validation.test.ts +384 -0
  715. package/templates/runtime/testing/performance-workload-envelope-schema-validation.ts +201 -0
  716. package/templates/runtime/testing/performance-workload-envelope-shared.ts +97 -0
  717. package/templates/runtime/testing/performance-workload-envelope-test-fixtures.ts +102 -0
  718. package/templates/runtime/testing/performance-workload-envelope-validation.test.ts +293 -0
  719. package/templates/runtime/testing/performance-workload-envelope-validation.ts +222 -0
  720. package/templates/runtime/testing/performance-workload-types.test.ts +65 -0
  721. package/templates/runtime/testing/performance-workload-types.ts +34 -0
  722. package/templates/runtime/testing/performance.ts +47 -5
  723. package/templates/starter/AGENTS.md +45 -37
  724. package/templates/starter/docs/toolcraft/README.md +14 -16
  725. package/templates/starter/docs/toolcraft/acceptance-testing.md +86 -33
  726. package/templates/starter/docs/toolcraft/agent-worklog.md +121 -22
  727. package/templates/starter/docs/toolcraft/assembly-workflow.md +29 -13
  728. package/templates/starter/docs/toolcraft/component-rules.md +43 -5
  729. package/templates/starter/docs/toolcraft/core/control-selection.md +66 -0
  730. package/templates/starter/docs/toolcraft/core/layout.md +5 -3
  731. package/templates/starter/docs/toolcraft/core/media-upload.md +44 -1
  732. package/templates/starter/docs/toolcraft/core/performance.md +100 -67
  733. package/templates/starter/docs/toolcraft/core/runtime-boundary.md +14 -2
  734. package/templates/starter/docs/toolcraft/core/setup-export.md +40 -16
  735. package/templates/starter/docs/toolcraft/core/timeline-animation.md +2 -1
  736. package/templates/starter/docs/toolcraft/custom-controls.md +7 -1
  737. package/templates/starter/docs/toolcraft/decision-contract.md +8 -4
  738. package/templates/starter/docs/toolcraft/performance.md +115 -143
  739. package/templates/starter/docs/toolcraft/renderer-technique.md +90 -25
  740. package/templates/starter/docs/toolcraft/schema-reference.md +200 -44
  741. package/templates/starter/docs/toolcraft/workflow.md +35 -20
  742. package/templates/starter/e2e/app-browser-control-coverage.spec.ts +0 -54
  743. package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +86 -0
  744. package/templates/starter/e2e/app-browser-model-appearance-evidence.spec.ts +214 -0
  745. package/templates/starter/e2e/app-browser-model-import-evidence.spec.ts +422 -0
  746. package/templates/starter/e2e/app-browser-model-performance.spec.ts +140 -0
  747. package/templates/starter/e2e/app-browser-model-runtime-requirements.spec.ts +71 -0
  748. package/templates/starter/e2e/app-browser-orientation-evidence.spec.ts +276 -0
  749. package/templates/starter/e2e/app-browser-performance-evidence.spec.ts +164 -90
  750. package/templates/starter/e2e/app-browser-performance-probe.spec.ts +61 -0
  751. package/templates/starter/e2e/app-browser-proof-session.spec.ts +19 -0
  752. package/templates/starter/e2e/app-browser-render-scale-evidence.spec.ts +193 -0
  753. package/templates/starter/e2e/app-browser-render-scale-requirements.spec.ts +71 -0
  754. package/templates/starter/e2e/app-browser-runtime-provenance.spec.ts +12 -64
  755. package/templates/starter/e2e/app-browser-runtime-reporter.spec.ts +100 -50
  756. package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +179 -46
  757. package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +34 -56
  758. package/templates/starter/e2e/app-controls.spec.ts +1 -1
  759. package/templates/starter/e2e/app-kernel-benchmarks.ts +3 -0
  760. package/templates/starter/e2e/app-performance-path-adapters.ts +4 -0
  761. package/templates/starter/e2e/app-performance.spec.ts +49 -0
  762. package/templates/starter/e2e/app-persistence.spec.ts +209 -0
  763. package/templates/starter/e2e/browser-acceptance-outcome-helpers.ts +5 -1
  764. package/templates/starter/e2e/browser-conditional-output-evidence-helpers.ts +5 -0
  765. package/templates/starter/e2e/browser-execution-ledger.spec.ts +79 -0
  766. package/templates/starter/e2e/browser-execution-ledger.ts +115 -0
  767. package/templates/starter/e2e/browser-infinity-canvas-evidence.ts +729 -0
  768. package/templates/starter/e2e/browser-layer-evidence-helpers.ts +66 -9
  769. package/templates/starter/e2e/browser-model-appearance-evidence-helpers.ts +65 -0
  770. package/templates/starter/e2e/browser-model-appearance-evidence.ts +171 -0
  771. package/templates/starter/e2e/browser-model-import-evidence-helpers.ts +426 -0
  772. package/templates/starter/e2e/browser-orientation-gizmo-actions.ts +256 -0
  773. package/templates/starter/e2e/browser-orientation-gizmo-evidence-helpers.ts +433 -0
  774. package/templates/starter/e2e/browser-performance-evidence.ts +22 -0
  775. package/templates/starter/e2e/browser-performance-measurement-evidence.ts +25 -0
  776. package/templates/starter/e2e/browser-performance-measurement-report.spec.ts +73 -0
  777. package/templates/starter/e2e/browser-performance-measurement-report.ts +218 -0
  778. package/templates/starter/e2e/browser-performance-report.ts +246 -0
  779. package/templates/starter/e2e/browser-performance-reporter-evaluation.ts +317 -0
  780. package/templates/starter/e2e/browser-performance-reporter.spec.ts +456 -0
  781. package/templates/starter/e2e/browser-performance-targeted-selection.spec.ts +145 -0
  782. package/templates/starter/e2e/browser-proof-session.ts +31 -1
  783. package/templates/starter/e2e/browser-render-scale-evidence.ts +245 -0
  784. package/templates/starter/e2e/browser-runtime-evidence-reporter-test-fixtures.ts +55 -0
  785. package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +146 -4
  786. package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +133 -52
  787. package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +57 -0
  788. package/templates/starter/e2e/browser-state-evidence-helpers.ts +7 -1
  789. package/templates/starter/e2e/browser-timeline-evidence-helpers.ts +4 -0
  790. package/templates/starter/e2e/canvas-handle-helpers.ts +3 -3
  791. package/templates/starter/e2e/kernel-benchmark-contract.ts +19 -0
  792. package/templates/starter/e2e/model-import-evidence-test-support.ts +125 -0
  793. package/templates/starter/e2e/performance-budget-helpers.ts +3 -107
  794. package/templates/starter/e2e/performance-canvas-helpers.ts +8 -8
  795. package/templates/starter/e2e/performance-checkpoint-report.ts +89 -0
  796. package/templates/starter/e2e/performance-compiled-fixture-runtime.ts +120 -0
  797. package/templates/starter/e2e/performance-control-helpers.ts +1 -1
  798. package/templates/starter/e2e/performance-control-layout-helpers.ts +24 -0
  799. package/templates/starter/e2e/performance-environment-evidence.ts +205 -0
  800. package/templates/starter/e2e/performance-fixture-helpers.ts +37 -210
  801. package/templates/starter/e2e/performance-fixture-selection.spec.ts +167 -0
  802. package/templates/starter/e2e/performance-fixture-selection.ts +82 -0
  803. package/templates/starter/e2e/performance-frame-metrics.spec.ts +21 -0
  804. package/templates/starter/e2e/performance-frame-metrics.ts +50 -0
  805. package/templates/starter/e2e/performance-frame-probe.ts +74 -49
  806. package/templates/starter/e2e/performance-helpers.ts +1 -0
  807. package/templates/starter/e2e/performance-interaction-measurement.ts +5 -11
  808. package/templates/starter/e2e/performance-measurement-evidence.ts +52 -8
  809. package/templates/starter/e2e/performance-model-appearance-contract.ts +11 -0
  810. package/templates/starter/e2e/performance-model-import-appearance-fixture-support.ts +32 -0
  811. package/templates/starter/e2e/performance-model-import-appearance-fixtures.spec.ts +56 -0
  812. package/templates/starter/e2e/performance-model-import-appearance-fixtures.ts +434 -0
  813. package/templates/starter/e2e/performance-model-import-binary-appearance-fixtures.ts +39 -0
  814. package/templates/starter/e2e/performance-model-import-fixtures.spec.ts +133 -0
  815. package/templates/starter/e2e/performance-model-import-fixtures.ts +439 -0
  816. package/templates/starter/e2e/performance-model-import-geometry-fixtures.ts +158 -0
  817. package/templates/starter/e2e/performance-model-import-helpers.ts +409 -0
  818. package/templates/starter/e2e/performance-model-import-zip-fixtures.ts +57 -0
  819. package/templates/starter/e2e/performance-model-orientation-helpers.ts +34 -0
  820. package/templates/starter/e2e/performance-model-pixel-helpers.ts +135 -0
  821. package/templates/starter/e2e/performance-output-action-helpers.ts +4 -4
  822. package/templates/starter/e2e/performance-path-adapter-contract.ts +55 -0
  823. package/templates/starter/e2e/performance-path-helpers.spec.ts +171 -0
  824. package/templates/starter/e2e/performance-path-helpers.ts +291 -0
  825. package/templates/starter/e2e/performance-pipeline-browser-helper.spec.ts +175 -0
  826. package/templates/starter/e2e/performance-pipeline-cache-fallback.spec.ts +204 -0
  827. package/templates/starter/e2e/performance-pipeline-evidence-continuity.spec.ts +134 -0
  828. package/templates/starter/e2e/performance-pipeline-evidence-test-fixtures.ts +409 -0
  829. package/templates/starter/e2e/performance-pipeline-evidence.spec.ts +441 -0
  830. package/templates/starter/e2e/performance-pipeline-evidence.ts +175 -0
  831. package/templates/starter/e2e/performance-pipeline-invariants.ts +359 -0
  832. package/templates/starter/e2e/performance-pipeline-resource-evidence.spec.ts +119 -0
  833. package/templates/starter/e2e/performance-profile-helpers.spec.ts +103 -0
  834. package/templates/starter/e2e/performance-profile-helpers.ts +52 -0
  835. package/templates/starter/e2e/performance-render-scale-runner.spec.ts +266 -0
  836. package/templates/starter/e2e/performance-slider-helpers.ts +7 -123
  837. package/templates/starter/e2e/product-observable-helpers.ts +109 -103
  838. package/templates/starter/e2e/toolcraft-delivery-catalog-reporter.ts +31 -0
  839. package/templates/starter/e2e/toolcraft-kernel-benchmark.spec.ts +107 -0
  840. package/templates/starter/e2e/toolcraft-product-test.spec.ts +14 -0
  841. package/templates/starter/e2e/toolcraft-product-test.ts +33 -0
  842. package/templates/starter/index.html +8 -0
  843. package/templates/starter/package.json +14 -11
  844. package/templates/starter/playwright.config.ts +124 -2
  845. package/templates/starter/scripts/check-toolcraft-code-health.mjs +66 -19
  846. package/templates/starter/scripts/check-toolcraft-code-health.test.mjs +151 -0
  847. package/templates/starter/scripts/check-toolcraft-docs.mjs +49 -3
  848. package/templates/starter/scripts/check-toolcraft-integrity.mjs +229 -117
  849. package/templates/starter/scripts/check-toolcraft-integrity.test.mjs +271 -0
  850. package/templates/starter/scripts/playwright-containing-file.mjs +48 -0
  851. package/templates/starter/scripts/playwright-test-shim-fixture.mjs +204 -0
  852. package/templates/starter/scripts/playwright-test-shim-fixture.test.mjs +69 -0
  853. package/templates/starter/scripts/playwright-test-title-selection-performance-path.test.mjs +129 -0
  854. package/templates/starter/scripts/playwright-test-title-selection.mjs +350 -0
  855. package/templates/starter/scripts/playwright-test-title-selection.test.mjs +465 -0
  856. package/templates/starter/scripts/run-browser-performance-test-helpers.mjs +335 -0
  857. package/templates/starter/scripts/run-browser-performance.mjs +71 -98
  858. package/templates/starter/scripts/run-browser-performance.test.mjs +266 -27
  859. package/templates/starter/scripts/run-delivery-verification-test-helpers.mjs +210 -0
  860. package/templates/starter/scripts/run-delivery-verification.mjs +47 -0
  861. package/templates/starter/scripts/run-delivery-verification.test.mjs +101 -0
  862. package/templates/starter/scripts/run-kernel-benchmarks.mjs +104 -0
  863. package/templates/starter/scripts/toolcraft-browser-impact-selection.mjs +26 -0
  864. package/templates/starter/scripts/toolcraft-checkpoint-bundle.mjs +198 -0
  865. package/templates/starter/scripts/toolcraft-checkpoint-bundle.test.mjs +297 -0
  866. package/templates/starter/scripts/toolcraft-checkpoint-capability-invariants.test.mjs +389 -0
  867. package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.mjs +106 -0
  868. package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.test.mjs +279 -0
  869. package/templates/starter/scripts/toolcraft-checkpoint-durability.test.mjs +49 -0
  870. package/templates/starter/scripts/toolcraft-checkpoint-durable-fs.mjs +90 -0
  871. package/templates/starter/scripts/toolcraft-checkpoint-ownership-policy.mjs +217 -0
  872. package/templates/starter/scripts/toolcraft-checkpoint-paths.mjs +35 -0
  873. package/templates/starter/scripts/toolcraft-checkpoint-transaction-test-helpers.mjs +12 -0
  874. package/templates/starter/scripts/toolcraft-checkpoint-transaction.mjs +125 -0
  875. package/templates/starter/scripts/toolcraft-checkpoint-transaction.test.mjs +167 -0
  876. package/templates/starter/scripts/toolcraft-checkpoint-write-capability.mjs +196 -0
  877. package/templates/starter/scripts/toolcraft-code-health-core.d.mts +46 -0
  878. package/templates/starter/scripts/toolcraft-code-health-core.mjs +80 -99
  879. package/templates/starter/scripts/toolcraft-code-health-line-budget.mjs +80 -0
  880. package/templates/starter/scripts/toolcraft-contract-doc-integrity.mjs +7 -3
  881. package/templates/starter/scripts/toolcraft-contract-doc-integrity.test.mjs +16 -0
  882. package/templates/starter/scripts/toolcraft-contract-manifest.json +42 -0
  883. package/templates/starter/scripts/toolcraft-contract-manifest.mjs +8 -0
  884. package/templates/starter/scripts/toolcraft-contract-manifest.test.mjs +40 -0
  885. package/templates/starter/scripts/toolcraft-css-source-evidence.mjs +192 -0
  886. package/templates/starter/scripts/toolcraft-css-source-evidence.test.mjs +336 -0
  887. package/templates/starter/scripts/toolcraft-css-url-graph-evidence.test.mjs +157 -0
  888. package/templates/starter/scripts/toolcraft-css-url-scanner.mjs +333 -0
  889. package/templates/starter/scripts/toolcraft-css-url-scanner.test.mjs +210 -0
  890. package/templates/starter/scripts/toolcraft-delivery-anchor.d.mts +46 -0
  891. package/templates/starter/scripts/toolcraft-delivery-anchor.mjs +84 -0
  892. package/templates/starter/scripts/toolcraft-delivery-anchor.test.mjs +131 -0
  893. package/templates/starter/scripts/toolcraft-delivery-architecture-inventory.mjs +86 -0
  894. package/templates/starter/scripts/toolcraft-delivery-architecture-policy.d.mts +51 -0
  895. package/templates/starter/scripts/toolcraft-delivery-architecture-policy.mjs +248 -0
  896. package/templates/starter/scripts/toolcraft-delivery-architecture-test-helpers.mjs +40 -0
  897. package/templates/starter/scripts/toolcraft-delivery-catalog-collector.mjs +55 -0
  898. package/templates/starter/scripts/toolcraft-delivery-catalog-collector.test.mjs +167 -0
  899. package/templates/starter/scripts/toolcraft-delivery-evidence.mjs +187 -0
  900. package/templates/starter/scripts/toolcraft-delivery-evidence.test.mjs +268 -0
  901. package/templates/starter/scripts/toolcraft-delivery-executor.mjs +294 -0
  902. package/templates/starter/scripts/toolcraft-delivery-executor.test.mjs +463 -0
  903. package/templates/starter/scripts/toolcraft-delivery-framework-refresh.test.mjs +141 -0
  904. package/templates/starter/scripts/toolcraft-delivery-functional-changed.test.mjs +468 -0
  905. package/templates/starter/scripts/toolcraft-delivery-functional-context.d.mts +72 -0
  906. package/templates/starter/scripts/toolcraft-delivery-functional-context.mjs +56 -0
  907. package/templates/starter/scripts/toolcraft-delivery-functional-context.test.mjs +231 -0
  908. package/templates/starter/scripts/toolcraft-delivery-functional-initial.test.mjs +212 -0
  909. package/templates/starter/scripts/toolcraft-delivery-functional-model-lifecycle.test.mjs +254 -0
  910. package/templates/starter/scripts/toolcraft-delivery-functional-semantic-regression.test.mjs +135 -0
  911. package/templates/starter/scripts/toolcraft-delivery-lifecycle-state.mjs +226 -0
  912. package/templates/starter/scripts/toolcraft-delivery-lifecycle-state.test.mjs +83 -0
  913. package/templates/starter/scripts/toolcraft-delivery-lifecycle.mjs +340 -0
  914. package/templates/starter/scripts/toolcraft-delivery-module-graph.test.mjs +393 -0
  915. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-authority.test.mjs +88 -0
  916. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-durability.test.mjs +329 -0
  917. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-evidence.test.mjs +104 -0
  918. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-lifecycle.test.mjs +478 -0
  919. package/templates/starter/scripts/toolcraft-delivery-performance-iteration-test-helpers.mjs +19 -0
  920. package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +282 -0
  921. package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +166 -0
  922. package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +425 -0
  923. package/templates/starter/scripts/toolcraft-delivery-plan-functional-model.test.mjs +358 -0
  924. package/templates/starter/scripts/toolcraft-delivery-plan.d.mts +155 -0
  925. package/templates/starter/scripts/toolcraft-delivery-plan.mjs +334 -0
  926. package/templates/starter/scripts/toolcraft-delivery-plan.test.mjs +487 -0
  927. package/templates/starter/scripts/toolcraft-delivery-receipt-performance.test.mjs +156 -0
  928. package/templates/starter/scripts/toolcraft-delivery-receipt-strictness.test.mjs +220 -0
  929. package/templates/starter/scripts/toolcraft-delivery-receipt-test-helpers.mjs +226 -0
  930. package/templates/starter/scripts/toolcraft-delivery-receipt.d.mts +83 -0
  931. package/templates/starter/scripts/toolcraft-delivery-receipt.mjs +216 -0
  932. package/templates/starter/scripts/toolcraft-delivery-receipt.test.mjs +195 -0
  933. package/templates/starter/scripts/toolcraft-delivery-receipt.types.test.mts +161 -0
  934. package/templates/starter/scripts/toolcraft-dependency-source-record.mjs +59 -0
  935. package/templates/starter/scripts/toolcraft-fixture-module-closure.mjs +279 -0
  936. package/templates/starter/scripts/toolcraft-fixture-module-closure.test.mjs +184 -0
  937. package/templates/starter/scripts/toolcraft-full-performance-test-helpers.mjs +67 -0
  938. package/templates/starter/scripts/toolcraft-functional-proof-model.d.mts +47 -0
  939. package/templates/starter/scripts/toolcraft-functional-proof-model.mjs +198 -0
  940. package/templates/starter/scripts/toolcraft-functional-proof-model.test.mjs +453 -0
  941. package/templates/starter/scripts/toolcraft-functional-proof-model.types.test.mts +102 -0
  942. package/templates/starter/scripts/toolcraft-functional-proof-primitives.d.mts +6 -0
  943. package/templates/starter/scripts/toolcraft-functional-proof-primitives.mjs +98 -0
  944. package/templates/starter/scripts/toolcraft-functional-proof-primitives.test.mjs +67 -0
  945. package/templates/starter/scripts/toolcraft-functional-proof-regression-fixtures.mjs +298 -0
  946. package/templates/starter/scripts/toolcraft-graph-reachability.mjs +73 -0
  947. package/templates/starter/scripts/toolcraft-integrity-manifest.mjs +5 -2
  948. package/templates/starter/scripts/toolcraft-integrity-policy.d.mts +6 -0
  949. package/templates/starter/scripts/toolcraft-integrity-policy.mjs +14 -6
  950. package/templates/starter/scripts/toolcraft-integrity-test-utils.mjs +84 -0
  951. package/templates/starter/scripts/toolcraft-kernel-benchmark-receipt.d.mts +47 -0
  952. package/templates/starter/scripts/toolcraft-kernel-benchmark-receipt.mjs +306 -0
  953. package/templates/starter/scripts/toolcraft-kernel-benchmark-receipt.test.mjs +169 -0
  954. package/templates/starter/scripts/toolcraft-layer-evidence-facade.test.mjs +256 -0
  955. package/templates/starter/scripts/toolcraft-layer-evidence-reporter.test.mjs +106 -0
  956. package/templates/starter/scripts/toolcraft-local-dependency-evidence.test.mjs +453 -0
  957. package/templates/starter/scripts/toolcraft-local-dependency-graph.mjs +344 -0
  958. package/templates/starter/scripts/toolcraft-local-dependency-graph.test.mjs +372 -0
  959. package/templates/starter/scripts/toolcraft-performance-authority-policy.d.mts +40 -0
  960. package/templates/starter/scripts/toolcraft-performance-authority-policy.mjs +274 -0
  961. package/templates/starter/scripts/toolcraft-performance-checkpoint-runner.mjs +87 -0
  962. package/templates/starter/scripts/toolcraft-performance-checkpoint-runner.test.mjs +50 -0
  963. package/templates/starter/scripts/toolcraft-performance-escalation-policy.mjs +72 -0
  964. package/templates/starter/scripts/toolcraft-performance-escalation-policy.test.mjs +393 -0
  965. package/templates/starter/scripts/toolcraft-performance-iteration-comparison.mjs +127 -0
  966. package/templates/starter/scripts/toolcraft-performance-iteration-comparison.test.mjs +133 -0
  967. package/templates/starter/scripts/toolcraft-performance-receipt-policy.mjs +127 -0
  968. package/templates/starter/scripts/toolcraft-performance-receipt-validation.test.mjs +214 -0
  969. package/templates/starter/scripts/toolcraft-performance-report.d.mts +34 -0
  970. package/templates/starter/scripts/toolcraft-performance-report.mjs +244 -0
  971. package/templates/starter/scripts/toolcraft-performance-report.test.mjs +138 -0
  972. package/templates/starter/scripts/toolcraft-performance-request-authority.mjs +64 -0
  973. package/templates/starter/scripts/toolcraft-performance-request-authority.test.mjs +488 -0
  974. package/templates/starter/scripts/toolcraft-plan-execution-authority.mjs +143 -0
  975. package/templates/starter/scripts/toolcraft-playwright-evidence-authority.mjs +96 -0
  976. package/templates/starter/scripts/toolcraft-playwright-evidence-authority.test.mjs +94 -0
  977. package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +65 -51
  978. package/templates/starter/scripts/toolcraft-product-boundary-graph-evidence.test.mjs +161 -0
  979. package/templates/starter/scripts/toolcraft-product-boundary.mjs +104 -129
  980. package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +46 -0
  981. package/templates/starter/scripts/toolcraft-product-dependency-resolution.mjs +61 -118
  982. package/templates/starter/scripts/toolcraft-product-evidence-boundary-ast.mjs +97 -31
  983. package/templates/starter/scripts/toolcraft-product-evidence-boundary.test.mjs +204 -1
  984. package/templates/starter/scripts/toolcraft-product-model-presentation-boundary.test.mjs +49 -0
  985. package/templates/starter/scripts/toolcraft-product-observable-facade.test.mjs +223 -0
  986. package/templates/starter/scripts/toolcraft-product-style-boundary.mjs +0 -136
  987. package/templates/starter/scripts/toolcraft-proof-process.mjs +199 -0
  988. package/templates/starter/scripts/toolcraft-proof-process.test.mjs +466 -0
  989. package/templates/starter/scripts/toolcraft-protected-browser-build.mjs +32 -0
  990. package/templates/starter/scripts/toolcraft-readonly-adjacency.mjs +44 -0
  991. package/templates/starter/scripts/toolcraft-receipt-boundary.test.mjs +285 -0
  992. package/templates/starter/scripts/toolcraft-receipt-file-io.mjs +16 -0
  993. package/templates/starter/scripts/toolcraft-source-inventory.mjs +100 -1
  994. package/templates/starter/scripts/toolcraft-source-inventory.test.mjs +106 -0
  995. package/templates/starter/scripts/toolcraft-source-ownership.mjs +15 -0
  996. package/templates/starter/scripts/toolcraft-source-ownership.test.mjs +31 -1
  997. package/templates/starter/scripts/toolcraft-state-evidence-facade.test.mjs +258 -0
  998. package/templates/starter/scripts/toolcraft-state-evidence-reporter.test.mjs +78 -0
  999. package/templates/starter/scripts/toolcraft-static-string.mjs +234 -28
  1000. package/templates/starter/scripts/toolcraft-targeted-performance-execution.mjs +274 -0
  1001. package/templates/starter/scripts/toolcraft-targeted-performance-execution.test.mjs +225 -0
  1002. package/templates/starter/scripts/toolcraft-targeted-performance-report-combination.mjs +83 -0
  1003. package/templates/starter/scripts/toolcraft-targeted-performance-report-combination.test.mjs +131 -0
  1004. package/templates/starter/scripts/toolcraft-targeted-performance-report.d.mts +89 -0
  1005. package/templates/starter/scripts/toolcraft-targeted-performance-report.mjs +321 -0
  1006. package/templates/starter/scripts/toolcraft-targeted-performance-report.test.mjs +225 -0
  1007. package/templates/starter/scripts/toolcraft-targeted-performance-report.types.test.mts +71 -0
  1008. package/templates/starter/scripts/toolcraft-typescript-analysis.mjs +334 -0
  1009. package/templates/starter/scripts/toolcraft-typescript-architecture-invariants.test.mjs +202 -0
  1010. package/templates/starter/scripts/toolcraft-typescript-callables.mjs +83 -0
  1011. package/templates/starter/scripts/toolcraft-typescript-module-shape.mjs +156 -0
  1012. package/templates/starter/scripts/toolcraft-typescript-semantic-evidence.mjs +66 -0
  1013. package/templates/starter/scripts/toolcraft-typescript-source-evidence-structure.test.mjs +44 -0
  1014. package/templates/starter/scripts/toolcraft-typescript-source-evidence.d.mts +86 -0
  1015. package/templates/starter/scripts/toolcraft-typescript-source-evidence.mjs +334 -0
  1016. package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +439 -0
  1017. package/templates/starter/scripts/toolcraft-verification-impact-inventory.d.mts +62 -0
  1018. package/templates/starter/scripts/toolcraft-verification-impact-inventory.mjs +344 -0
  1019. package/templates/starter/scripts/toolcraft-verification-impact-inventory.test.mjs +204 -0
  1020. package/templates/starter/scripts/toolcraft-verification-impact-performance-candidates.test.mjs +210 -0
  1021. package/templates/starter/scripts/toolcraft-verification-impact-resolution.mjs +344 -0
  1022. package/templates/starter/scripts/toolcraft-verification-impact-resolution.test.mjs +270 -0
  1023. package/templates/starter/scripts/toolcraft-verification-impact-semantic-resolution.test.mjs +449 -0
  1024. package/templates/starter/scripts/toolcraft-verification-impact-support-resolution.test.mjs +195 -0
  1025. package/templates/starter/scripts/toolcraft-verification-impact.d.mts +132 -0
  1026. package/templates/starter/scripts/toolcraft-verification-impact.mjs +169 -0
  1027. package/templates/starter/scripts/toolcraft-verification-impact.test.mjs +300 -0
  1028. package/templates/starter/scripts/toolcraft-verification-input-roles.d.mts +60 -0
  1029. package/templates/starter/scripts/toolcraft-verification-input-roles.mjs +197 -0
  1030. package/templates/starter/scripts/toolcraft-verification-input-roles.test.mjs +225 -0
  1031. package/templates/starter/scripts/toolcraft-verification-inventory.mjs +138 -42
  1032. package/templates/starter/scripts/toolcraft-verification-lock.mjs +64 -0
  1033. package/templates/starter/scripts/toolcraft-verification-receipt-test-helpers.mjs +245 -0
  1034. package/templates/starter/scripts/toolcraft-verification-receipt.d.mts +40 -6
  1035. package/templates/starter/scripts/toolcraft-verification-receipt.mjs +95 -229
  1036. package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +325 -210
  1037. package/templates/starter/scripts/toolcraft-vite-env-activation.test.mjs +131 -0
  1038. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.mjs +18 -0
  1039. package/templates/starter/scripts/toolcraft-vitest-runtime-contract.test.mjs +36 -0
  1040. package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.test.mjs +7 -0
  1041. package/templates/starter/scripts/toolcraft-worklog-decision-trail.d.mts +14 -0
  1042. package/templates/starter/scripts/toolcraft-worklog-decision-trail.mjs +170 -0
  1043. package/templates/starter/src/app/acceptance/canvas-coverage.ts +18 -0
  1044. package/templates/starter/src/app/acceptance/canvas-handle-acceptance.ts +5 -14
  1045. package/templates/starter/src/app/acceptance/condition-exclusivity.test.ts +60 -0
  1046. package/templates/starter/src/app/acceptance/condition-exclusivity.ts +221 -0
  1047. package/templates/starter/src/app/acceptance/control-acceptance-context.ts +20 -6
  1048. package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +60 -10
  1049. package/templates/starter/src/app/acceptance/control-acceptance-kind-rules.ts +55 -7
  1050. package/templates/starter/src/app/acceptance/control-acceptance.ts +3 -0
  1051. package/templates/starter/src/app/acceptance/control-component-rules.ts +0 -32
  1052. package/templates/starter/src/app/acceptance/control-layout-entity-rules.ts +7 -4
  1053. package/templates/starter/src/app/acceptance/control-layout-model.ts +12 -4
  1054. package/templates/starter/src/app/acceptance/control-section-inventory.test.ts +136 -0
  1055. package/templates/starter/src/app/acceptance/control-section-inventory.ts +69 -24
  1056. package/templates/starter/src/app/acceptance/controls.ts +4 -0
  1057. package/templates/starter/src/app/acceptance/infinity-canvas.ts +81 -0
  1058. package/templates/starter/src/app/acceptance/inline-layout.ts +14 -3
  1059. package/templates/starter/src/app/acceptance/interaction-ownership-intent.ts +31 -0
  1060. package/templates/starter/src/app/acceptance/interaction-ownership.ts +283 -0
  1061. package/templates/starter/src/app/acceptance/interaction-targets.ts +18 -0
  1062. package/templates/starter/src/app/acceptance/media-upload.ts +115 -10
  1063. package/templates/starter/src/app/acceptance/model-import-coverage.ts +42 -0
  1064. package/templates/starter/src/app/acceptance/orientation-gizmo.ts +176 -0
  1065. package/templates/starter/src/app/acceptance/output-background-rules.ts +58 -18
  1066. package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +4 -8
  1067. package/templates/starter/src/app/acceptance/output-export-model.ts +17 -7
  1068. package/templates/starter/src/app/acceptance/reference-study-types.ts +60 -0
  1069. package/templates/starter/src/app/acceptance/render-scale.ts +107 -0
  1070. package/templates/starter/src/app/acceptance/runtime-coverage.ts +45 -0
  1071. package/templates/starter/src/app/acceptance/runtime-setup.ts +4 -2
  1072. package/templates/starter/src/app/acceptance/types.ts +66 -63
  1073. package/templates/starter/src/app/acceptance/validate-coverage.ts +76 -4
  1074. package/templates/starter/src/app/acceptance/validation-pipeline.test.ts +5 -1
  1075. package/templates/starter/src/app/acceptance/validation-pipeline.ts +2 -0
  1076. package/templates/starter/src/app/acceptance/view-interaction-intent.ts +23 -0
  1077. package/templates/starter/src/app/acceptance/view-interaction.ts +148 -0
  1078. package/templates/starter/src/app/starter-acceptance-data.ts +28 -1
  1079. package/templates/starter/src/app/starter-acceptance.animation-intent.test.ts +7 -4
  1080. package/templates/starter/src/app/starter-acceptance.background-export.test.ts +17 -14
  1081. package/templates/starter/src/app/starter-acceptance.base-coverage.test.ts +3 -0
  1082. package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +133 -4
  1083. package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +6 -4
  1084. package/templates/starter/src/app/starter-acceptance.contract-fixtures.test.ts +40 -0
  1085. package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +20 -2
  1086. package/templates/starter/src/app/starter-acceptance.control-label-context.test.ts +7 -5
  1087. package/templates/starter/src/app/starter-acceptance.control-labels.test.ts +10 -8
  1088. package/templates/starter/src/app/starter-acceptance.control-naming-rules.test.ts +6 -7
  1089. package/templates/starter/src/app/starter-acceptance.control-order.test.ts +110 -2
  1090. package/templates/starter/src/app/starter-acceptance.control-state.test.ts +6 -7
  1091. package/templates/starter/src/app/starter-acceptance.curves-rules.test.ts +4 -5
  1092. package/templates/starter/src/app/starter-acceptance.custom-control-collections.test.ts +7 -5
  1093. package/templates/starter/src/app/starter-acceptance.custom-control-coverage.test.ts +3 -4
  1094. package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +6 -4
  1095. package/templates/starter/src/app/starter-acceptance.custom-control-valid.test.ts +5 -3
  1096. package/templates/starter/src/app/starter-acceptance.image-video-export-settings.test.ts +5 -6
  1097. package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +408 -0
  1098. package/templates/starter/src/app/starter-acceptance.keyframes.test.ts +3 -2
  1099. package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -0
  1100. package/templates/starter/src/app/starter-acceptance.media-upload.fixtures.ts +34 -4
  1101. package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +225 -2
  1102. package/templates/starter/src/app/starter-acceptance.orientation-gizmo.test.ts +265 -0
  1103. package/templates/starter/src/app/starter-acceptance.output-export-rules.test.ts +14 -24
  1104. package/templates/starter/src/app/starter-acceptance.persistence-coverage.test.ts +50 -0
  1105. package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +7 -7
  1106. package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +2 -0
  1107. package/templates/starter/src/app/starter-acceptance.product-worklog.test.ts +1 -7
  1108. package/templates/starter/src/app/starter-acceptance.range-slider-rules.test.ts +3 -4
  1109. package/templates/starter/src/app/starter-acceptance.reference-foundation.test.ts +2 -2
  1110. package/templates/starter/src/app/starter-acceptance.render-scale.test.ts +305 -0
  1111. package/templates/starter/src/app/starter-acceptance.schema-test-utils.ts +1 -1
  1112. package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +5 -5
  1113. package/templates/starter/src/app/starter-acceptance.section-dependencies.test.ts +11 -5
  1114. package/templates/starter/src/app/starter-acceptance.section-titles.test.ts +4 -5
  1115. package/templates/starter/src/app/starter-acceptance.setup-readiness.test.ts +26 -9
  1116. package/templates/starter/src/app/starter-acceptance.slider-rules.test.ts +9 -7
  1117. package/templates/starter/src/app/starter-acceptance.slider-unit-rules.test.ts +2 -3
  1118. package/templates/starter/src/app/starter-acceptance.text-control-kind.test.ts +3 -4
  1119. package/templates/starter/src/app/starter-acceptance.toggle-pair-layout.test.ts +5 -6
  1120. package/templates/starter/src/app/starter-acceptance.toggle-parameter-layout.test.ts +63 -7
  1121. package/templates/starter/src/app/starter-acceptance.ts +29 -0
  1122. package/templates/starter/src/app/starter-acceptance.video-reference-study.test.ts +3 -3
  1123. package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +282 -0
  1124. package/templates/starter/src/app/starter-acceptance.worklog-command-authority.test.ts +123 -0
  1125. package/templates/starter/src/app/starter-acceptance.worklog-performance-command-cases.ts +34 -0
  1126. package/templates/starter/src/app/starter-acceptance.worklog-performance-intent-test-utils.ts +98 -0
  1127. package/templates/starter/src/app/starter-acceptance.worklog-performance-intent.test.ts +299 -0
  1128. package/templates/starter/src/app/starter-acceptance.worklog-test-utils.ts +76 -173
  1129. package/templates/starter/src/app/starter-acceptance.worklog.test.ts +92 -114
  1130. package/templates/starter/src/app/starter-automated-runtime-evidence.test.ts +0 -8
  1131. package/templates/starter/src/app/starter-composition.tsx +1 -0
  1132. package/templates/starter/src/app/starter-identity.ts +4 -0
  1133. package/templates/starter/src/app/starter-performance-test-utils.ts +0 -87
  1134. package/templates/starter/src/app/starter-performance.fixture-helper.test.ts +191 -0
  1135. package/templates/starter/src/app/starter-performance.gates.test.ts +385 -39
  1136. package/templates/starter/src/app/starter-performance.ts +8 -13
  1137. package/templates/starter/src/app/starter-schema.test.ts +26 -2
  1138. package/templates/starter/src/app/starter-schema.ts +3 -0
  1139. package/templates/starter/src/app/starter-verification-impact.json +15 -0
  1140. package/templates/starter/src/app/test-evidence/browser-performance-contract.ts +387 -0
  1141. package/templates/starter/src/app/test-evidence/browser-performance-measurement-contract.ts +258 -0
  1142. package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +31 -2
  1143. package/templates/starter/src/router.tsx +3 -0
  1144. package/templates/starter/src/routes/index.tsx +3 -0
  1145. package/templates/starter/tsconfig.json +7 -1
  1146. package/templates/ui/components/composites/tabs.tsx +10 -0
  1147. package/templates/ui/components/controls/actions/actions-control.tsx +17 -1
  1148. package/templates/ui/components/controls/actions/index.ts +1 -0
  1149. package/templates/ui/components/controls/boolean/boolean-controls.tsx +5 -0
  1150. package/templates/ui/components/controls/file-drop/file-drop-control.test.tsx +96 -0
  1151. package/templates/ui/components/controls/file-drop/file-drop-control.tsx +325 -104
  1152. package/templates/ui/components/controls/file-drop/file-drop-empty-state.tsx +51 -17
  1153. package/templates/ui/components/controls/file-drop/file-drop-file-list.tsx +85 -61
  1154. package/templates/ui/components/controls/file-drop/file-drop-folder-input.tsx +39 -0
  1155. package/templates/ui/components/controls/file-drop/file-drop-image-grid.tsx +64 -43
  1156. package/templates/ui/components/controls/file-drop/file-drop-presentation-messages.tsx +57 -0
  1157. package/templates/ui/components/controls/file-drop/file-drop-presentation.test.ts +58 -0
  1158. package/templates/ui/components/controls/file-drop/{file-drop-model.tsx → file-drop-presentation.tsx} +128 -2
  1159. package/templates/ui/components/controls/file-drop/file-drop-single-preview.tsx +32 -25
  1160. package/templates/ui/components/controls/file-drop/file-drop-types.ts +99 -8
  1161. package/templates/ui/components/controls/file-drop/index.ts +5 -1
  1162. package/templates/ui/components/controls/font-picker/font-catalog.node-import.test.ts +24 -0
  1163. package/templates/ui/components/controls/font-picker/font-catalog.ts +1 -1
  1164. package/templates/ui/components/controls/index.ts +7 -0
  1165. package/templates/ui/components/controls/tabs/index.ts +4 -0
  1166. package/templates/ui/components/controls/tabs/tabs-control.tsx +166 -0
  1167. package/templates/ui/components/panel/panel-section.tsx +6 -1
  1168. package/templates/ui/components/panel/panel.tsx +6 -2
  1169. package/templates/ui/components/primitives/index.ts +1 -0
  1170. package/templates/ui/components/primitives/scroll-fade-render.tsx +11 -2
  1171. package/templates/ui/components/primitives/scroll-fade-types.ts +2 -0
  1172. package/templates/ui/components/primitives/scroll-fade.test.tsx +63 -0
  1173. package/templates/ui/components/primitives/scroll-fade.tsx +2 -0
  1174. package/templates/ui/index.ts +1 -0
  1175. package/templates/runtime/react/controls-panel/layout/controls-panel-collapse-storage.ts +0 -131
  1176. package/templates/runtime/testing/performance-browser-policy.test.ts +0 -81
  1177. package/templates/runtime/testing/performance-browser-policy.ts +0 -102
  1178. package/templates/runtime/testing/performance-budget-validation.ts +0 -84
  1179. package/templates/runtime/testing/performance-control-classification.test.ts +0 -106
  1180. package/templates/runtime/testing/performance-coverage-context.ts +0 -44
  1181. package/templates/runtime/testing/performance-coverage-renderer-policy.ts +0 -221
  1182. package/templates/runtime/testing/performance-coverage-scenario-policy.ts +0 -147
  1183. package/templates/runtime/testing/performance-coverage-target-policy.ts +0 -121
  1184. package/templates/runtime/testing/performance-export-coverage.test.ts +0 -234
  1185. package/templates/runtime/testing/performance-fixture-load-profile.test.ts +0 -360
  1186. package/templates/runtime/testing/performance-fixture-media.test.ts +0 -80
  1187. package/templates/runtime/testing/performance-fixture-stress.test.ts +0 -314
  1188. package/templates/runtime/testing/performance-fixture-validation.ts +0 -255
  1189. package/templates/runtime/testing/performance-fixture-values.ts +0 -275
  1190. package/templates/runtime/testing/performance-fixture-workload.test.ts +0 -140
  1191. package/templates/runtime/testing/performance-load-profile-validation.ts +0 -467
  1192. package/templates/runtime/testing/performance-renderer-coverage.test.ts +0 -325
  1193. package/templates/runtime/testing/performance-renderer-pipeline-coverage.test.ts +0 -115
  1194. package/templates/runtime/testing/performance-renderer-pipeline-interactions.test.ts +0 -201
  1195. package/templates/runtime/testing/performance-renderer-pipeline-passes.test.ts +0 -247
  1196. package/templates/runtime/testing/performance-renderer-technique.test.ts +0 -275
  1197. package/templates/runtime/testing/performance-renderer-validation.ts +0 -2
  1198. package/templates/runtime/testing/performance-scenario-coverage.test.ts +0 -303
  1199. package/templates/runtime/testing/performance-schema-derived-workloads.test.ts +0 -231
  1200. package/templates/runtime/testing/performance-test-fixtures/scenarios.ts +0 -172
  1201. package/templates/runtime/testing/performance-test-fixtures/stress-fixtures.ts +0 -133
  1202. package/templates/starter/e2e/performance-render-scale-helpers.ts +0 -55
  1203. package/templates/starter/scripts/check-ai-skills.mjs +0 -136
  1204. package/templates/starter/scripts/check-ai-skills.test.mjs +0 -64
  1205. package/templates/starter/scripts/toolcraft-product-boundary-ast-utils.mjs +0 -23
  1206. package/templates/starter/scripts/toolcraft-product-dependency-graph.mjs +0 -176
  1207. package/templates/starter/scripts/toolcraft-product-dependency-graph.test.mjs +0 -196
  1208. package/templates/starter/src/app/starter-acceptance.video-export-test-utils.ts +0 -37
  1209. package/templates/starter/src/app/starter-performance.budgets.test.ts +0 -374
  1210. package/templates/starter/src/app/starter-performance.renderer-source.test.ts +0 -136
  1211. package/templates/starter/src/app/starter-performance.renderer-technique.test.ts +0 -291
  1212. package/templates/starter/src/app/starter-performance.scenarios.test.ts +0 -355
@@ -25,7 +25,7 @@ export const appComposition = {
25
25
  } satisfies ToolcraftAppComposition;
26
26
  ```
27
27
 
28
- Edit `src/app/app-composition.tsx`, not the signed route. Product composition may provide only `schema`, `canvasContent`, `controlRenderers`, `onPanelAction`, and `renderDefaultCanvasMedia`; the protected route owns `className` and other host layout. Do not compose `ToolcraftRoot`, `CanvasShell`, `ControlsPanel`, `LayersPanel`, `TimelinePanel`, or `ToolbarPanel` by hand. If a runtime surface has a performance or behavior issue, fix the shared runtime instead of replacing the surface locally.
28
+ Edit `src/app/app-composition.tsx`, not the signed route. Product composition may provide only `schema`, `canvasContent`, `controlRenderers`, `modelPresentation`, `onPanelAction`, `renderDefaultCanvasMedia`, and optional `rendererPipelineRegistration`; the protected route owns `className` and other host layout. Model products default to `modelPresentation: { mode: "runtime" }`. Custom presentation declares checked consumers and suppresses only their model targets; `renderDefaultCanvasMedia={false}` affects generic image/file preview, not runtime models. Do not compose `ToolcraftRoot`, `CanvasShell`, `ControlsPanel`, `LayersPanel`, `TimelinePanel`, or `ToolbarPanel` by hand. If a runtime surface has a performance or behavior issue, fix the shared runtime instead of replacing the surface locally.
29
29
 
30
30
  Supporting product modules may be organized anywhere under `src`; there is no folder allowlist. The product boundary follows all product production files and rejects host/runtime surface imports, built-in control imports/re-exports, dynamic bypasses, and production dependencies on test/spec modules.
31
31
 
@@ -37,6 +37,7 @@ Allowed app extension points:
37
37
  | `canvasContent` | Product output only. |
38
38
  | `controlRenderers` | True custom controls only after the built-in fit check. |
39
39
  | `onPanelAction` | Sticky footer product actions. |
40
+ | `rendererPipelineRegistration` | One compiled executable pipeline shared by render work, actions, evidence, and new-envelope assessment. |
40
41
  | Runtime commands/hooks | History, media, canvas, timeline, layers, and controlled app behavior. |
41
42
 
42
43
  Do not render built-in controls such as `SliderControl`, `SelectControl`, `ColorControl`, `GradientControl`, `FontPickerControl`, `FileDropControl`, or `PanelActionsControl` directly in app code. Declare them in schema so layout, reset, history, visibility, keyframes, labels, and tests stay runtime-owned.
@@ -49,13 +50,28 @@ Once the folder is a real product, switch `src/app/app-acceptance-data.ts` from
49
50
 
50
51
  ```ts
51
52
  export const appProductReadiness = {
53
+ interactionOwnership: [],
52
54
  mode: "product",
53
55
  productName: "Product name",
54
56
  productSummary: "What the app creates or edits.",
55
57
  requestedBehavior: "The user-facing behavior this app must implement.",
58
+ viewInteraction: {
59
+ mode: "non-spatial",
60
+ reason: "This product has no visible three-dimensional scene or model.",
61
+ },
56
62
  } as const;
57
63
  ```
58
64
 
65
+ Populate `interactionOwnership` before adding canvas handles or custom
66
+ interactions. One operation has one primary `canvas` or `panel` surface chosen
67
+ from user request, inspected reference, or product usability evidence. Different
68
+ operations may share related state across surfaces; mirrored operations may not.
69
+
70
+ Use `viewInteraction.mode: "orbit"` for a visible editable spatial scene and
71
+ list its `orientationGizmo` targets. `fixed-camera` or `timeline-camera` require
72
+ explicit request/reference evidence; do not infer fixed framing merely because
73
+ the prompt did not separately request rotation.
74
+
59
75
  ## Controls
60
76
 
61
77
  Before writing product sections, export `starterControlSectionInventory`. Each product section declares its title, targets, product entity or workflow stage, and grouping reason.
@@ -88,26 +104,26 @@ Use `core/timeline-animation.md` for timeline mode, compact/extended timeline, s
88
104
 
89
105
  ## Renderer Work
90
106
 
91
- For custom renderers, write the Renderer Technique Decision Matrix and Render Pipeline Inventory before code. The implementation plan maps every performance-sensitive control to the render pass it invalidates.
107
+ For custom renderers, write the Renderer Technique Decision Matrix and typed performance model before code. Follow one sequence: reachable controls and inputs; workload dimensions and enforced boundaries; pass cost, frequency, lifecycle, and invalidation; render-plan assessment and protected kernel benchmark when required; derived paths and combined fixtures; impact-derived functional/browser development checks; lifecycle-appropriate delivery proof. Only exact request authority may add measured targeted performance.
92
108
 
93
- Use `renderer-technique.md` and `core/performance.md` for renderer strategy, cache keys, workload fixtures, render scale, and optimization evidence.
109
+ Compile one lightweight renderer pipeline registration outside test modules. Supply that exact registration as `rendererPipelineRegistration` in the composition and as `rendererPipeline` to new-envelope performance assessment. Run `assessToolcraftRenderPlan` before implementing the renderer. Derive path ids from the assessed registration and compile workload fixtures from those paths; do not classify workload by target names or author scenario-specific maxima. Renderer work uses `useToolcraftPipelinePass`; retained resources are available only from its generation-bound pass execution context. Product code never receives runtime disposal ownership.
94
110
 
95
- ## Verification Tiers
111
+ Use `renderer-technique.md`, `core/performance.md`, and `performance.md` for renderer strategy, envelope dimensions, pass metadata, adapters, derived paths, render scale, and optimization evidence.
96
112
 
97
- Before every edit, classify blast radius and record the planned checks:
113
+ ## Automatic Delivery Lifecycle
98
114
 
99
- ```md
100
- Verification tier: Tier N
101
- Reason: <changed surface and expected blast radius>
102
- Run: <commands and browser checks>
103
- Skip: <checks not needed for this pass and why>
104
- ```
115
+ Use one normal sequence: assemble or change the product, gather focused functional feedback, finish the coherent delivery batch, run protected functional delivery once, and return the app for user evaluation. Focused checks while implementation is changing do not mint delivery evidence.
116
+
117
+ 1. First product delivery uses bare `pnpm verify:delivery` for complete product contracts, one production build, full functional acceptance, and no measured performance.
118
+ 2. Later `functional-targeted` delivery uses the same bare command for exact ownership-derived functional proof relative to the immediately previous successful delivery.
119
+ 3. A performance complaint records its exact request quote and canonical affected path IDs in the worklog, then one bare delivery runs one targeted iteration and returns the app for evaluation.
120
+ 4. A full audit requires an explicit operator request or accepted offer; only then run `pnpm verify:perf` for one fresh build and the complete maximum-fixture performance matrix.
105
121
 
106
- Use `pnpm verify:ui` when browser acceptance is required without the performance suite. Run `pnpm verify:final` for first working product delivery, folder export, runtime/template/contract/CLI changes, broad refactors, and final gates. Full performance checkpoints run only for the first working product version or explicit performance complaints; otherwise run targeted performance checks only for touched paths.
122
+ Protected receipts own changed files, the derived plan, executed checks, reports, measurements, and pass/fail evidence. The worklog keeps product intent and decisions.
107
123
 
108
124
  For final delivery, run:
109
125
 
110
126
  ```bash
111
- pnpm verify:final
127
+ pnpm verify:delivery
112
128
  pnpm dev
113
129
  ```
@@ -56,14 +56,20 @@ Use segmented controls only for compact mode choices that preserve every cell's
56
56
 
57
57
  Segmented controls are full-width. Do not place `segmented` beside Switch, Color, Select, or another control in a two-column inline row; use `select` when a finite choice must occupy a half-width column.
58
58
 
59
- Limits:
59
+ Text segmented controls allow at most 4 options, no option label longer than 9 characters, and no more than 24 total option-label characters.
60
60
 
61
- - at most four options;
62
- - no option label longer than nine characters;
63
- - no more than twenty-four total option-label characters.
61
+ `defineToolcraft` rejects over-budget text segmented schemas before controls render. Shorten labels or use `select`; there is no silent conversion.
64
62
 
65
63
  If cells clip, collide, lose padding, or force labels into adjacent cells, shorten labels first. If compact labels still fail, use `select`.
66
64
 
65
+ ## Tabs Controls
66
+
67
+ Use `tabs` when one finite choice replaces the content or workflow view shown below the control. Use `segmented` instead for a compact mode setting that leaves the surrounding view unchanged.
68
+
69
+ Tabs are full-width and never render a separate visible field label. The schema `label` supplies the accessible tab-list name; the nearest section title supplies visible context. Do not place `tabs` in a two-column inline row.
70
+
71
+ Tabs preserve the same controlled value while adapting to available width. When every tab cell cannot keep its text and internal padding on one row, the runtime renders the choices through `Select`; when the width returns, it restores the tab row without changing the selected value.
72
+
67
73
  ## Select Controls
68
74
 
69
75
  Standalone `select` controls render stacked and full-width: label above, dropdown below. Do not use the old compact side-label form with label on the left and dropdown on the right.
@@ -80,7 +86,7 @@ Use `core/layout.md` for section grouping, dependency cohesion, headers, reset,
80
86
 
81
87
  ## Colors
82
88
 
83
- Use `core/layout.md` for semantic color grouping, color labels, row fit, and color/opacity layout. Use `core/setup-export.md` for the required output `Background` section and export background behavior.
89
+ Use `core/layout.md` for semantic color grouping, color labels, row fit, and color/opacity layout. Use `core/setup-export.md` for the authored background source pair, its runtime Setup placement, and export background behavior.
84
90
 
85
91
  ## File Upload
86
92
 
@@ -145,6 +151,36 @@ Holding Shift while dragging a vector pad locks movement to the dominant axis an
145
151
 
146
152
  Do not add custom vector sizing props. Choose the right number, variant, and section grouping, then let runtime sizing handle the pad.
147
153
 
154
+ Do not use Vector for camera orbit, object orbit, or a visually flat object that users rotate through 3D space. Use Orientation Gizmo.
155
+
156
+ ## Orientation Gizmo
157
+
158
+ `orientationGizmo` is runtime-owned canvas chrome for a visible model that users can rotate in three dimensions. It is not a panel pad and it must not be recreated in product code.
159
+
160
+ Declare `starterProductReadiness.viewInteraction` first. A visible editable
161
+ spatial scene defaults to `orbit`; the fact that rotation was not separately
162
+ requested does not justify a fixed camera. `fixed-camera` and `timeline-camera`
163
+ are evidence-backed modes for explicit user/reference behavior, not agent design
164
+ shortcuts.
165
+
166
+ Declare one control for the active model mode in its semantic model/view section:
167
+
168
+ ```ts
169
+ orientation: {
170
+ defaultValue: { position: [0, 0, 5], up: [0, 1, 0] },
171
+ keyframeable: false,
172
+ label: false,
173
+ target: "view.orbit",
174
+ type: "orientationGizmo",
175
+ }
176
+ ```
177
+
178
+ Use `useToolcraftModelOrbitInteraction` on the product renderer and provide a hit test against actual visible geometry. A plain primary drag starting on the model rotates the shared pose; a drag starting outside the model bubbles to `CanvasShell` and pans. The owner is locked at pointer-down. Preview, raycasting, reset/history, PNG, and video consume the same pose target.
179
+
180
+ Multiple `orientationGizmo` declarations are allowed only for model modes whose combined section/control visibility conditions are statically provable as mutually exclusive. Runtime renders at most one active canvas handle and rejects an ambiguous state instead of selecting the first declaration.
181
+
182
+ Click a signed axis endpoint to return to that view. Drag anywhere inside the circular gizmo to orbit with Blender-style Turntable behavior: horizontal movement rotates around world up, vertical movement rotates around the screen-horizontal axis, and sensitivity is 0.4 degrees per CSS pixel. Direct model drag uses the same rotation kernel. Axis snaps use angle-scaled Blender Smooth View timing with a 200ms maximum. Gizmo drag, snap, and direct model drag share target-scoped ownership, so a newer gesture, reset, undo/redo, or external target write cancels stale work. A background click is inert; pointer cancel and lost capture end the gesture. The runtime handle is fixed under canvas pan/zoom, uses one history group per completed gesture, and is excluded from export. Product code selects it through schema and must not import or render the visual gizmo directly.
183
+
148
184
  ## Curves
149
185
 
150
186
  Use `curves` for editable remapping curves. First decide the curve variant by product meaning; do not rely on the runtime default.
@@ -199,3 +235,5 @@ Use `core/setup-export.md` for mandatory runtime Setup, background, Image Export
199
235
  Use product editing handles only when direct manipulation is better than panel-only editing: gradient stops, focus points, light vectors, crop bounds, mask points, transforms, bezier anchors, or perspective corners.
200
236
 
201
237
  Handles are visual overlays, not app UI. They must be textless, tokenized, bound to runtime state, and excluded from export/copy output.
238
+
239
+ Three-dimensional view rotation is the built-in Orientation Gizmo case. Use generic product handles only for geometry/value interactions the gizmo does not own.
@@ -28,6 +28,47 @@ Acceptance coverage:
28
28
 
29
29
  This inventory can be in implementation notes, `starterControlSectionInventory`, or `docs/toolcraft/agent-worklog.md`, but the decision must exist before custom UI is introduced.
30
30
 
31
+ ## Spatial View Intent Before Controls
32
+
33
+ Before choosing a gizmo, Vector, camera controls, or renderer interaction, declare
34
+ `starterProductReadiness.viewInteraction`:
35
+
36
+ - `non-spatial`: no visible three-dimensional scene/model; include a concrete reason.
37
+ - `orbit`: the default for a visible editable spatial scene; list every mutually exclusive `orientationGizmo` target.
38
+ - `fixed-camera`: only when an explicit user request or inspected reference requires fixed framing; record source and evidence.
39
+ - `timeline-camera`: only when an explicit user request or inspected reference owns an authored camera path driven by Toolcraft timeline intent.
40
+
41
+ The absence of an explicit rotation request is not evidence for `fixed-camera`.
42
+ Do not first make a 3D scene non-rotatable and then use that implementation
43
+ choice to omit Orientation Gizmo. Renderer technology is not the classifier:
44
+ WebGL, WebGPU, Canvas2D, and DOM/SVG may each render spatial or non-spatial
45
+ output.
46
+
47
+ ## Interaction Surface Ownership
48
+
49
+ Before implementing controls or canvas editing, declare
50
+ `starterProductReadiness.interactionOwnership` for every operation that could
51
+ plausibly live on either surface. Each entry records the runtime target,
52
+ operation capability, selected `canvas` or `panel` surface, evidence, the
53
+ selection reason, and why the other surface does not own the same operation.
54
+
55
+ Choose from evidence in this order:
56
+
57
+ - an explicit user request owns the location when it states one;
58
+ - an inspected reference is direct evidence for the interaction it demonstrates;
59
+ - otherwise compare spatial correspondence, feedback, precision, discoverability,
60
+ output clutter, accessibility, off-screen use, and collection/configuration needs.
61
+
62
+ One user operation has one primary surface. Do not recreate a canvas drag,
63
+ selection, spatial map, property edit, collection edit, or command in the panel
64
+ with different chrome, and do not recreate a panel operation as canvas UI.
65
+
66
+ Related state may expose genuinely different operations on both surfaces. A
67
+ canvas can select or directly manipulate an entity while the panel edits any
68
+ useful properties, modes, constraints, colors, collections, commands, or exact
69
+ values. These are complementary only when their typed capabilities differ; a
70
+ renamed copy of the same capability is still duplication.
71
+
31
72
  ## Exact Owners
32
73
 
33
74
  - Use `gradient` for adjustable gradients, color transitions, gradient fills, stops, type, and angle. Do not replace it with two `color` controls.
@@ -36,9 +77,12 @@ This inventory can be in implementation notes, `starterControlSectionInventory`,
36
77
  - Use `rangeSlider` or `rangeInput` for lower/upper bounds or from/to ranges.
37
78
  - Use `curves` for editable tone, response, easing, remapping, opacity, depth, mask, or channel curves.
38
79
  - Use `vector` only for stable manually-authored two-axis product parameters such as position, offset, direction, focus, anchor, light direction, white balance, color balance, chroma offset, or tone bias.
80
+ - Use `orientationGizmo` whenever users can rotate a visible canvas model through 3D space, including a visually flat object presented with 3D rotation.
39
81
  - Use `fileDrop` for source material uploads.
40
82
  - Use `imagePicker` for choosing one visual option from a set.
41
83
  - Use `palette` only for constrained design-token color choices with both family and shade.
84
+ - Use `tabs` for finite choices that replace the content or workflow view below the control; the runtime changes overflowing tabs to Select without changing the value.
85
+ - Use `segmented` for compact finite mode settings that leave the surrounding view unchanged.
42
86
  - Use `actions` for local section commands that affect only the nearby entity.
43
87
  - Use `collectionActions` for repeatable product entities whose actual item list can grow or shrink.
44
88
  - Use `panelActions` for sticky final product actions such as export, copy, generate, apply, or download.
@@ -82,6 +126,27 @@ Before adding Vector to an animated or interactive product, classify movement ow
82
126
 
83
127
  Do not expose a pad for current animation state, keyboard movement, pointer movement, physics state, timeline phase, velocity, target pose, current pose, or simulated position/direction just because the internal value has `x` and `y`.
84
128
 
129
+ Do not use Vector for camera orbit, object orbit, or a three-dimensional view orientation. Those interactions belong to Orientation Gizmo.
130
+
131
+ ## Orientation Gizmo Ownership
132
+
133
+ Use schema `orientationGizmo` whenever a visible model can be rotated through three-dimensional space. This is the exact owner for both volumetric 3D models and visually flat planes/cards that expose a 3D orbit.
134
+
135
+ For a visible editable spatial scene, `viewInteraction.mode: "orbit"` is the
136
+ default and every `orientationTargets` entry must match a schema gizmo target.
137
+ Fixed framing is not a default alternative; it is accepted only through the
138
+ typed evidence-backed `fixed-camera` escape hatch.
139
+
140
+ - Declare one shared pose target for the active model mode with `{ position: [x, y, z], up: [x, y, z] }`, `label: false`, and `keyframeable: false`.
141
+ - At most one orientation gizmo may be visible at a time. Multiple declarations are valid only when their combined section/control visibility conditions are statically provable as mutually exclusive; runtime rejects ambiguous active states.
142
+ - Keep the hidden control in the semantic section that owns the model or view so section/global reset owns its target; do not create an empty panel section only for the gizmo.
143
+ - Product preview, geometry hit testing, gizmo drag, direct model drag, history/reset, image export, and video export all consume that same target.
144
+ - Bind the rendered model with `useToolcraftModelOrbitInteraction` and supply a product-owned `hitTest` based on actual visible geometry.
145
+ - Pointer ownership is decided on pointer-down: higher-priority product editing may claim first; a plain primary hit on the visible model rotates it; a miss remains untouched so `CanvasShell` pans. Modified primary and non-primary presses are not claimed by model orbit.
146
+ - Gizmo drag, snap, and direct model orbit share target-scoped ownership. Starting newer work or writing reset/undo/redo to the target cancels stale in-flight interaction before it can overwrite current state.
147
+ - The runtime gizmo stays fixed 16px from the canvas viewport's left and bottom edges, does not scale or move with canvas pan/zoom, and never appears in export.
148
+ - Do not use Vector, paired angle sliders, segmented axis buttons, or custom canvas chrome as a substitute.
149
+
85
150
  ## Custom Control Gate
86
151
 
87
152
  - Custom controls are for product interactions that built-ins cannot represent.
@@ -91,3 +156,4 @@ Do not expose a pad for current animation state, keyboard movement, pointer move
91
156
  - Remove file names, helper text, and captions that do not help distinguish items or explain state.
92
157
  - Do not make tiny item-level action buttons below kit comfort sizes.
93
158
  - Do not recreate built-in controls, panels, toolbar, timeline, layers, canvas shell, or runtime surfaces.
159
+ - A custom control with `custom-interaction` must reference its typed interaction owner. Its built-in fit check does not justify panel UI when the same operation is already owned by a canvas interaction.
@@ -36,7 +36,7 @@ Read this module before changing sections, labels, helper icons, inline rows, di
36
36
 
37
37
  ## Section Spacing
38
38
 
39
- - Runtime `Setup` and ordinary body sections use 8px top spacing and 24px bottom spacing for control content.
39
+ - Runtime `Setup` uses 12px top spacing so its first control row has equal top, left, and right insets. Ordinary body sections keep 8px top spacing. Both use 24px bottom spacing.
40
40
  - Sticky footer action sections keep their dedicated spacing.
41
41
  - Do not add custom padding in generated apps to compensate for a local section issue. Fix the shared layout rule.
42
42
 
@@ -60,7 +60,7 @@ Read this module before changing sections, labels, helper icons, inline rows, di
60
60
  - Do not use descriptions that recap the label, such as `Adjusts Opacity`.
61
61
  - Do not add helper icons to obvious homogeneous groups when the section title and label already explain the control.
62
62
  - In toggle components, do not prefix labels with `Enable`; the switch already communicates on/off.
63
- - When a section title supplies the context, remove repeated nouns from nearby labels. For example, in `Background`, the switch label is `Include`, not `Include background`.
63
+ - When a section title supplies the context, remove repeated nouns from nearby labels. Runtime Setup is the exception for its normalized output pair: the switch is `Background` and the color below it is `Background color`.
64
64
 
65
65
  ## Inline Rows
66
66
 
@@ -101,5 +101,7 @@ Read this module before changing sections, labels, helper icons, inline rows, di
101
101
 
102
102
  - Standalone `select` controls render stacked and full-width.
103
103
  - Use compact two-column select layout only for related short pairs that tune one workflow or entity.
104
- - Segmented controls are full-width compact choices with at most four options, no option label longer than nine characters, and no more than twenty-four total option-label characters.
104
+ - Text segmented controls allow at most 4 options, no option label longer than 9 characters, and no more than 24 total option-label characters.
105
+ - The static segmented option/label budget rejects over-budget schemas before render; there is no silent conversion to `select`.
106
+ - Browser geometry verification remains required for actual font metrics, localization, zoom, and panel width.
105
107
  - If segmented cells clip, collide, lose padding, or force labels into adjacent cells, shorten labels first. If compact labels still fail, use `select`.
@@ -9,6 +9,7 @@ Read this module before changing image upload, file upload, source material impo
9
9
  - Do not build custom file lists, custom upload buttons, or custom sorting when `fileDrop` can represent the source set.
10
10
  - Use `assetKind: "image"` for image-only source uploads.
11
11
  - Use `assetKind: "file"` for arbitrary uploaded files.
12
+ - Use `assetKind: "model"` for one 3D model package whose supported authored appearance should survive import.
12
13
  - Image mode accepts images only by default.
13
14
  - File mode accepts any file by default unless `accept` narrows extensions or MIME types.
14
15
 
@@ -43,6 +44,10 @@ Read this module before changing image upload, file upload, source material impo
43
44
  ## Multiple Uploads And Sorting
44
45
 
45
46
  - Use `multiple: true` when the app needs several uploaded images or files as one source set.
47
+ - `recommendedMaxItems` is advisory and never rejects an import.
48
+ - Use `hardMaxItems` only for a real product or technical boundary. It must be a finite nonnegative safe integer and is enforced as an upload admission limit.
49
+ - Additive imports count existing assets for the same `sourceTarget` plus the incoming logical batch. Replacement imports count only the replacement batch. Assets for other targets do not consume this capacity, and deleting an item frees capacity.
50
+ - A batch above `hardMaxItems` is rejected with typed resource-limit feedback before media decode, worker preparation, or binary repository allocation.
46
51
  - Multiple image uploads render as a sortable four-column thumbnail grid.
47
52
  - The add-more tile is last.
48
53
  - Per-image removal stays inside the file control.
@@ -61,6 +66,44 @@ Read this module before changing image upload, file upload, source material impo
61
66
  - file uploaders may accept images only when no image uploader matches.
62
67
  - Product renderers filter `state.mediaAssets` by `sourceTarget`.
63
68
 
69
+ ## 3D Model Uploads
70
+
71
+ - A model `fileDrop` is a runtime-owned compound control. Product code declares the target, optional `modelFormats`, optional narrowed `modelLimits`, and `topologyProfile`; it does not build loaders, topology UI, repair buttons, workers, or a parallel model state.
72
+ - Production formats are `glb`, `gltf`, `fbx`, `obj`, `stl`, and `ply`. The normalized default advertises every production format. Narrow the list only when product semantics require it; never advertise an adapter that is absent from the production worker registry.
73
+ - Import consumes a standalone root, the complete selected folder `File[]` batch, or one bounded ZIP archive. ZIP extraction runs in the model worker with path, entry-count, byte, compression-ratio, encryption, and source limits. Remote resources and path traversal are never fetched.
74
+ - Supported root paths are normalized and sorted; the first root is selected deterministically. Folder and equivalent ZIP inputs therefore resolve the same root and dependencies.
75
+ - The model pipeline preserves static authored materials, PBR factors, supported textures/samplers, alpha/double-sided flags, vertex colors, and supported static transforms. Lights, cameras, animation clips, rigs, skins, morph animation, unsupported extensions, and remote resources do not become renderer authority.
76
+ - If no authored material exists, preview and export use the Blender-compatible fallback: linear base color `[0.8, 0.8, 0.8]`, metallic `0`, roughness `0.5`, emissive `[0, 0, 0]`, opacity `1`. Missing appearance dependencies produce typed warnings and retain renderable geometry; they do not silently fabricate a texture.
77
+ - One accepted package becomes one model item and one model layer. The original selected files or ZIP archive remain immutable durable source. Canonical geometry/appearance version 2, repair plans, decoded bitmaps, and Three/GPU resources are derived artifacts outside Toolcraft state, history, and localStorage; serializable state stores validated resource references and analysis summaries.
78
+
79
+ ### Analysis And Repair
80
+
81
+ - Import decodes and structurally validates in the runtime module worker before topology analysis or canvas presentation.
82
+ - Lifecycle is `clean`, `repairable`, `fixed`, `restoring`, or `unavailable`. Fatal input is rejected atomically and must not replace the last committed model.
83
+ - Runtime shows `Fix model` only when it has already compiled a deterministic safe repair plan. The action uses the built-in actions control and its canonical button loader; duplicate repair is disabled while the worker runs.
84
+ - Safe repair may remove invalid or duplicate triangles, compact unused vertices, regenerate normals, repair locally provable winding, and recalculate bounds. It must not weld, remesh, fill holes, smooth, merge shells, guess indices, or mutate authored transforms.
85
+ - Appearance diagnostics never expose `Fix model`. Repair changes only canonical geometry/topology and reattaches the validated appearance references; it does not recolor, replace materials, invent textures, or rewrite the durable source package.
86
+ - Repair commits only after the derived canonical document is structurally validated and topology is reanalyzed. Failure keeps the original committed model and exposes typed feedback.
87
+
88
+ ### Preview, Orientation, And Export
89
+
90
+ - `ToolcraftAppComposition.modelPresentation` selects exactly one visible owner. `{ mode: "runtime" }` is the standard lazy Three preview/export path. `{ mode: "custom", consumers }` suppresses standard layers only for declared model targets and requires each checked consumer to acquire/release a runtime presentation lease.
91
+ - `renderDefaultCanvasMedia={false}` hides generic image/file preview only. It does not hide standard runtime model layers.
92
+ - A structurally valid staged draft may preview during analysis without replacing committed state.
93
+ - Analyzing and repairing preview opacity is `40%`; committed preview and export opacity is `100%`.
94
+ - Rotatable model products use `orientationGizmo`. Direct drag on model geometry and the gizmo write the same orientation target against the same presentation lease; a canvas miss remains viewport pan. Preview, undo/reset, and export read that shared pose, canonical document reference, and appearance cache key.
95
+ - Product image export creates its normal target canvas, renders product-owned pixels, then awaits `renderModelsToCanvas(exportCanvas)` from `onPanelAction` before encoding or downloading. This composites visible committed model layers at the current canvas size, target pixel ratio, and shared orientation. Do not enumerate model assets or call Three loaders in product export code.
96
+ - Video export must render the same visible models and shared pose through the runtime model binding for every exported frame; it cannot substitute the panel preview or omit model layers.
97
+
98
+ ### Persistence And Proof
99
+
100
+ - Apps with image, file, or model media automatically resolve `"media"` into the default persistence plan. Serializable state and localStorage snapshots contain metadata plus durable resource references; binary bytes live in the Toolcraft IndexedDB repository and never enter runtime state, history, or snapshots as data URLs.
101
+ - Image, file, and model records restore asynchronously through the shared source-asset coordinator. Missing, corrupt, forged, stale, or unavailable resources mark only the affected asset `unavailable` rather than publishing a partial migration, losing other persisted slices, or crashing.
102
+ - Legacy data-URL snapshots migrate through a repository lease before a new snapshot is published. Failed migration preserves the original recoverable snapshot and reports persistence as unavailable.
103
+ - Reset restores default model attachments through the same async import pipeline. Delete, replacement, undo, redo, reset, hydration, and active jobs participate in repository reachability and cleanup.
104
+ - Model acceptance uses complete `modelImportCoverage` and protected browser recipes. Required proof covers every advertised format, package extraction, deterministic root selection, authored appearance, exact fallback, checked presentation readiness, nontransparent RGBA output, staged/committed output, repair diagnosis/action/progress/result, fatal preservation, persistence/unavailable restoration, preview/export parity, and history/reset.
105
+ - Model workload and responsiveness checks derive from normalized model limits and run as targeted model paths. Package extraction and canonical decode are worker passes; presentation, orbit, export, and cleanup are main-thread/GPU passes with frame and completion budgets. The combined geometry-plus-texture envelope, cache reuse, and disposal lifecycle are measured without refreshing the full checkpoint during later functional feature work.
106
+
64
107
  ## Canvas Source Images
65
108
 
66
109
  - Uploaded background/source images inside product canvases use `editable-output`.
@@ -75,7 +118,7 @@ Read this module before changing image upload, file upload, source material impo
75
118
  - Use `media.defaultAssets` when an app starts with predefined files, source images, masks, symbol sets, or background images.
76
119
  - Each default asset sets `sourceTarget` to the matching `fileDrop` target.
77
120
  - Runtime treats these as attached files: users see them in the uploader, can remove them, and Reset restores them.
78
- - If removal, reorder, or transforms of predefined media should survive reload, add `"media"` to `persistence.include`.
121
+ - Removal, reorder, and transforms of predefined media survive reload through the capability-derived `"media"` slice unless the whole app explicitly opts out with `{ storage: "none" }`.
79
122
  - Do not mirror the file list into product `values`.
80
123
  - Do not hard-code default source files inside `canvasContent` or the renderer.
81
124
 
@@ -1,86 +1,119 @@
1
1
  # Performance
2
2
 
3
- Read this module before changing renderer technique, animation, canvas, media, export, render scale, heavy controls, or performance tests.
3
+ <!-- toolcraft-performance-lifecycle: first-delivery=functional; later-delivery=functional-targeted; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only -->
4
+ <!-- toolcraft-performance-iteration: authority=exact-request-evidence+canonical-path-ids; fixture=reachable-development; after-pass=return-app-to-user+stop -->
5
+ <!-- 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 -->
6
+
7
+ Read this module before changing renderer technique, animation, canvas, media, export, render scale, workload controls, or performance tests.
8
+
9
+ ## Normative Sequence
10
+
11
+ Use this order for every product:
12
+
13
+ 1. Reachable controls and inputs.
14
+ 2. Workload dimensions and enforced boundaries.
15
+ 3. Pass cost, frequency, lifecycle, and invalidation.
16
+ 4. Render-plan assessment and capture of any protected kernel benchmark requirement.
17
+ 5. Derived paths and combined fixtures.
18
+ 6. Targeted functional and browser development checks.
19
+ 7. Lifecycle-appropriate delivery proof: first-delivery functional proof with no measured performance, later `functional-targeted` proof, or one authority-backed targeted performance iteration. Full certification is a separate explicit operator/CI action.
20
+
21
+ Do not begin renderer implementation before steps 1-4 are represented in typed configuration and the render-plan assessment has no structural errors. An unresolved kernel benchmark requirement remains explicit pending work; first and later functional delivery defer it without weakening envelope, pipeline, path, fixture, or adapter validation.
22
+
23
+ ## Envelope
24
+
25
+ - Inventory every reachable schema control, runtime-state input, and external input.
26
+ - Mark workload controls explicitly with `performanceRole: "workload"`; never infer workload from labels, target names, units, option text, or keywords.
27
+ - Map every workload role to exactly one numeric `workloadEnvelope` dimension.
28
+ - Each dimension declares a stable id, unit, source, mapping, `defaultValue`, and every applicable `interactiveMax` or `batchMax`.
29
+ - `interactiveMax` and `batchMax` mean maximum workload for that profile, not the numerically largest value. A numeric `schema-target` source declares `workloadBoundary: "minimum" | "maximum"`; every declared profile boundary equals that selected schema endpoint. A lower endpoint is valid when smaller values create more work.
30
+ - Declare only boundaries consumed by passes of that profile. A control may change a batch-only dimension without claiming an `interactiveMax` when interactive passes do not consume it.
31
+ - Schema-backed limits equal schema limits. Other limits equal enforced runtime or input boundaries.
32
+ - Slider and range controls use their effective numeric domain. Any other schema control is numeric only when it declares a complete finite `min`, `max`, and numeric `defaultValue`; partial, inverted, or out-of-range domains fail validation instead of being guessed from the control type.
33
+ - The neutral starter declares `workloadEnvelope: { dimensions: [] }` and omits `fixtureAdapters`.
34
+
35
+ ## Render Plan
36
+
37
+ Custom renderers declare `rendererPipeline.runtimeId`, passes, and exact interaction invalidation before renderer code. Every pass declares:
38
+
39
+ - workload dimensions and cost relationship;
40
+ - execution frequency;
41
+ - lifecycle and resource scope;
42
+ - execution location and output quality;
43
+ - concrete inputs, invalidators, and cache keys where applicable.
44
+
45
+ Include `initial-render` and every reachable interaction that executes or intentionally avoids renderer work. Run `assessToolcraftRenderPlan` and resolve every structural error. If it returns a benchmark requirement, keep that requirement pending during functional work and delivery. Declare `kernelBenchmarkDecisions`, implement only their executable candidates in `e2e/app-kernel-benchmarks.ts`, and run protected `pnpm verify:kernel` only inside an exact request-authorized performance iteration or explicit full audit. The protected runner measures the exact workload, verifies equal deterministic full-quality output, and records a current-source receipt; authored timing values are invalid. High-frequency variable-cost pixel-transform, rasterize, and composite passes compare a Canvas 2D baseline with WebGL, independent of the already-selected execution location; WebGPU joins the comparison only when it is the selected implementation.
46
+
47
+ ## Compiled Fixtures And Paths
48
+
49
+ - Derive paths with `deriveToolcraftPerformancePaths`; never author path ids by hand.
50
+ - Declare exactly one scenario for each canonical path. The scenario uses that path's `pathId` and exact `coversTargets`; do not create one scenario per equivalent control.
51
+ - Equivalent controls share a path when interaction, invalidated passes, execution locations, workload dimensions, and profile are equal.
52
+ - Register one `fixtureAdapters.dimensions` adapter per envelope dimension. Each adapter only applies and observes exact numeric values; envelope boundaries and central path profiles remain the sole sources of load and budget policy.
53
+ - Finite inputs use an `exhaustive-discrete` entries domain that binds each numeric workload value to the product value actually applied. Schema `select` and `segmented` domains match all schema options one-to-one; other finite sources carry exhaustive provenance aligned with the dimension source.
54
+ - A development checkpoint moves from each `defaultValue` toward its declared maximum-workload boundary, including numerically downward ranges. It is available only when the combined vector has exact normalized development pressure `0.8` within the runtime tolerance. For discrete dimensions every value must also belong to the exhaustive domain; otherwise development is unavailable. Maximum remains independently available and execution observes every applied value exactly. Inverse checkpoints use the same domain.
55
+ - Discrete path search is deterministic and lazy. The runtime-owned `toolcraftDiscreteDimensionBudget` is 256 searched dimensions and `toolcraftDiscreteCombinationBudget` is 4096 combinations. Dimension overflow, cardinality overflow, or a path above either budget is an actionable planning error, not an unavailable exact vector. A valid exact inverse checkpoint for a custom or benchmark development path bypasses search budgets because no search runs, while its full vector still requires exhaustive-domain membership and exact normalized pressure `0.8` within tolerance.
56
+ - Compile development and maximum vectors with `compileToolcraftPerformanceFixturePlan`.
57
+ - Combined fixtures include every dimension on the path.
58
+ - Add measured inverse full-vector evidence only when a dimension mapping is `custom` or a pass relationship is `benchmark`.
59
+ - Performance profile names and budgets come from the runtime-owned profile manifest shared by runtime validation and generated runners. Product scenarios and copied scripts do not redefine those thresholds.
60
+
61
+ Browser checks apply compiled values through the real UI, observe every dimension, exercise the real preview or export path, assert the product result, and then check the budget. Export scenarios keep exact `actionValue`, visible `controlLabel`, and `completionEvidence` proof.
4
62
 
5
63
  ## Verification Triggers
6
64
 
7
- Run a full performance checkpoint only when:
65
+ Keep `src/app/app-verification-impact.json` complete: every product production module is `presentation`, `functional`, or `performance`, every owner names its nearest acceptance ids, and performance owners name their exact renderer pass ids. `performance` means the module can change a named pass's execution, invalidation, workload, resource lifecycle, or measured output. Shared modules name only the acceptance and pass coverage they can actually change; blanket every-module ownership is invalid. The protected delivery runner compares the inventory with the immediately previous successful delivery and requires ownership-derived functional proof for changed implementation. Performance ownership constrains which passes and paths an exact request may authorize; it does not authorize measurements by itself. A durable full-performance baseline, when one exists, remains historical evidence rather than the functional change anchor. Missing modules, stale paths, unknown acceptance or pass ids, and blanket ownership fail before a receipt can be written.
66
+
67
+ Run targeted functional and browser checks during development. Only exact request authority can create a measured targeted performance iteration; a changed pipeline, workload boundary, adapter, interaction, measured output, owner, pass, path, filename, tier, or subsystem cannot. During an authorized iteration, the targeted Playwright reporter binds passed test names, pass ids, canonical path ids, nonce, and current source hash; product code and prose cannot mint that evidence.
68
+
69
+ Functional performance coverage uses the runtime-owned deferred validation policy: all structural envelope, renderer pipeline, path, fixture, and adapter errors still fail, while unresolved kernel benchmark decisions remain visible as pending assessment requirements and require no kernel receipt. Strict/default validation and every authorized performance run continue to require the decision and protected current-source evidence.
70
+
71
+ Targeted performance iteration verification requests the compiled development fixture at exact normalized pressure `0.8`. Each selected path must have its exact reachable development fixture or verification fails with a configuration error; it never falls back to maximum. The separate operator/CI certification command uses compiled maximum fixtures across the complete current matrix.
8
72
 
9
- - the first working product app version exists;
10
- - the user explicitly asks to optimize performance, fix lag, remove jank, speed up animation, stabilize drag/zoom, or otherwise complains about performance.
73
+ The protected conversational lifecycle is automatic:
11
74
 
12
- After the first working version, feature loops do not run the full performance suite by default. Renderer, canvas, animation, export, timeline, layers, `canvas.renderScale`, bug fixes, and performance-sensitive controls still need targeted functional/browser checks first, plus targeted performance scenarios only when they directly exercise the touched workload, viewport, or export path.
75
+ - **First product delivery:** bare `pnpm verify:delivery` runs complete product contracts, one production build, and full functional acceptance with no measured performance. It preserves any independent full-performance baseline and cannot claim targeted or full performance evidence.
76
+ - **Later functional-targeted delivery:** the same bare command runs exact ownership-derived functional checks for the changed implementation. It preserves any existing baseline and cannot silently invoke measured performance.
77
+ - **Performance complaint:** record only domain authority in the latest Decision Trail—an exact request quote and canonical affected path IDs—then one bare `pnpm verify:delivery` runs one targeted iteration against the reachable development fixture. The same authority cannot produce a second successful iteration. Deliver the verified app, then stop and wait for user evaluation. A later complaint creates a new Decision Trail authority and starts another bounded iteration from the immediately previous successful delivery.
13
78
 
14
- ## Verification Tiers
79
+ Request classification is tri-state. High-confidence performance language selects `performance-iteration`; high-confidence ordinary product work remains ordinary; ambiguous or unrecognized language becomes `needs-agent-judgment`, and the AI decides from the complete request. Local negation and product commands are interpreted in their own clause rather than through a global phrase list. Before a performance iteration, the worklog must contain a nontrivial exact raw substring of Request as evidence. Whitespace and Unicode code units must match exactly; invented, whitespace-collapsed, NFKC-equivalent, or otherwise mismatched text is rejected. Complaint wording, repetition, filename, diagnostic classification, and touched subsystem never launch the complete matrix automatically.
15
80
 
16
- - Tier 0-1: targeted docs/typecheck/unit plus focused browser when visual.
17
- - Tier 2: `pnpm verify:quick` plus relevant browser acceptance.
18
- - Tier 3: `pnpm verify:quick`, targeted browser acceptance, and targeted performance scenarios for touched workload/viewport/export paths.
19
- - Tier 4: for the first working product version, run and receipt the browser performance checkpoint first, then run `pnpm verify:final` against the current receipt.
81
+ Every protected targeted performance report stores the independently validated `cold`, `warm`, and `sustained` numeric observations for each selected canonical path. When the immediately previous successful delivery contains compatible targeted measurements, the next complaint records metric deltas against that report; otherwise it records an explicit non-comparable result. Deltas are diagnostic evidence, not a noisy strict-improvement gate: the current iteration must pass its absolute profile budgets, then return to the user without launching another optimization pass.
20
82
 
21
- Record skipped full performance runs and reason in the verification note or worklog.
83
+ The preferred conversational delivery boundary is `pnpm verify:delivery`. A targeted failure starts targeted diagnosis and architecture repair; it does not automatically expand into the full suite. After the selected evidence passes, return the app to the user instead of continuing speculative optimization. When two consecutive compatible protected performance iterations have passed, the runner emits an evidence-backed recommendation and the agent must offer the user a slower complete audit if performance remains unacceptable. A demonstrably broad or unlocalizable cross-system problem may justify the same offer earlier through agent judgment; a path-count threshold is not authority.
22
84
 
23
- ## Workload Fixtures
85
+ `pnpm verify:perf` is the single protected operator/CI full-audit command: it performs one fresh production build, runs maximum fixtures across every canonical path, writes `full-performance` evidence, and creates or refreshes the durable baseline without advancing the delivery anchor. It runs only after an explicit natural-language request for the complete audit or explicit acceptance of the agent's offer; the user does not need to know the command name. A complaint, repeated complaint, filename, diagnostic classification, or changed subsystem alone never authorizes it. The full audit is diagnostic and certification evidence, not an automatic optimization loop: repair failed paths with focused checks, then run the complete matrix once at the requested certification boundary.
24
86
 
25
- - Performance scenarios declare `stressFixture` for the tested control value.
26
- - `export-copy` scenarios declare the exact `panelActions` `actionValue`, visible `controlLabel`, and `completionEvidence` (`download` or `clipboard`). Their browser test uses the matching protected output-action helper with `scenarioId`; the helper owns the click and real download/clipboard completion. The signed reporter rejects missing completion evidence, skipped/failed tests, and evidence from failed retries.
27
- - Browser perf tests apply scalar values with `applyToolcraftPerformanceStressValue` / `applyToolcraftPerformanceWorkloadValue` and object fixtures with `applyToolcraftPerformanceStressFixture` / `applyToolcraftPerformanceWorkloadFixture`. Every fixture mapping supplies `applyValue` plus `observeValue`; evidence attaches only after the observed UI/runtime value exactly matches the declared fixture.
28
- - Mutating measurements pass a structured-cloneable `observeOutcome`. Generic change evidence first proves that its baseline stays stable before the action, timestamps the first live changed response, then requires the final post-action outcome to remain changed through the stability window. Autonomous or animated output uses `expectedOutcome` with a stable semantic observation, or the test fixes playback to a deterministic phase; an incidental next frame cannot satisfy the interaction. The immutable result stays bound to the same `scenarioId` as its budget. `durationMs` uses a runner monotonic clock from interaction start to the first changed or expected response; required frame sampling survives document navigation, and settle/stability checks still finish before evidence is emitted without replacing product-response latency with action completion or inflating it with the post-change window. Non-mutating measurements end at action completion.
29
- - When the tested control is not itself the whole heavy source, declare `workloadFixture` and apply it first.
30
- - Numeric control ranges and hard limits come from schema; scenarios may omit duplicated `values`, and any supplied values must match schema exactly. A bounded numeric control cannot switch to `metric: "custom"` to avoid its min/max.
31
- - Numeric maximums, density, item counts, canvas/media size, and combined heavy states declare `loadProfile` with `hardLimit`, `smoothTarget`, and `smoothTargetRatio`. `many-items` applies at least 10 real items; lowering an authored `minCount` is not evidence.
32
- - Try the hard limit first.
33
- - Lower the guaranteed smooth target only in 10 percent steps with failed-measurement and optimization evidence. Every entry names the exact `attemptedRatio`, schema-reachable `attemptedTarget`, scenario id, and target for that step.
34
- - Ranges above `smoothTarget` are experimental, not silently guaranteed.
87
+ `TOOLCRAFT_PERFORMANCE_VERIFICATION_LIFECYCLE` is runtime-owned: protected Playwright owns functional, performance-iteration, and operator full-certification receipts. Product config cannot override this lifecycle.
35
88
 
36
- ## Media And Pixel Workloads
89
+ Completion wording must name the evidence level. Functional delivery reports functional proof only and states that measured performance was not run. A performance iteration reports only its exact targeted proof and asks the user to evaluate the verified app. After the second consecutive compatible iteration it also offers the slower complete audit without launching it. Never describe targeted iteration evidence as a complete audit, baseline, maximum-workload proof, or full certification. Only the separate explicitly authorized operator command may report certification after `full-performance` evidence and its durable baseline pass.
37
90
 
38
- - Media import and image-processing workloads use realistic `kind: "media"` fixtures at least `1920x1080`-equivalent.
39
- - Heavy upload/preview tests must cover realistic source dimensions such as 2K/4K when the app accepts images.
40
- - Heavy pixel/media Canvas 2D must evaluate WebGL or WebGPU with measured evidence before staying on CPU.
41
- - Do not stay on CPU for millions of per-pixel operations on the main thread unless measurement proves it remains responsive and alternatives were evaluated.
91
+ ## Render Scale And Quality
42
92
 
43
- ## Render Scale
93
+ Render Scale preserves selected backing resolution and visible quality. A raster product with `canvas.renderScale` declares typed `renderScaleCoverage: { kind: "selected-backing-pixels", states }` on one browser runtime row targeting `canvas.renderScale`. Exact sorted states are `["interaction", "steady"]`, plus `"playback"` when timeline is enabled.
44
94
 
45
- - Non-vector raster, Canvas 2D, WebGL, and WebGPU previews set `canvas.renderScale: true`.
46
- - Runtime `Resolution scale` defaults to `2` and changes backing pixels without changing CSS/output size.
47
- - Performance fixes must preserve selected render scale and visible output quality.
48
- - Do not downsample, blur, stretch low-resolution backing pixels, or clamp render scale below the user's chosen value to pass budgets.
95
+ The product browser scenario supplies real state transitions to `expectToolcraftCanvasRenderScaleEvidence`. The protected helper keeps CSS size stable, checks actual canvas backing pixels against `css size × devicePixelRatio × selected scale` in every state, and only then emits `canvas-render-scale-backing` for each `<acceptance-id>#<state>`. A clamp or downsample is a functional failure without measured performance. In an explicitly authorized render-scale performance path, `performance-render-scale` may be emitted only after the same real backing assertion passes.
96
+
97
+ Do not pass budgets by silently reducing selected quality, backing resolution, product range, source fidelity, export fidelity, or live interaction semantics. Diagnose pass cost, invalidation, cache lifetime, scheduling, and execution location first.
49
98
 
50
99
  ## Slider Responsiveness
51
100
 
52
- - Slider and range slider controls are live canvas controls.
53
- - Dragging a thumb updates runtime state and product output while the drag is in progress.
54
- - If live updates are slow, fix renderer path first:
55
- - update uniforms or stable buffers;
56
- - cache decoded media and expensive derived inputs;
57
- - coalesce preview work to `requestAnimationFrame`;
58
- - cancel stale async renders;
59
- - move heavy work off React renders;
60
- - change renderer strategy when measured evidence supports it.
61
- - Only at an extreme measured ceiling may the app use degraded live preview or delayed heavy refinement; even then, immediate canvas feedback is required.
62
-
63
- ## Renderer Pipeline Inventory
64
-
65
- Custom renderer apps declare a typed `rendererPipeline`:
66
-
67
- - render passes;
68
- - cache keys;
69
- - execution location;
70
- - preview/export quality;
71
- - interaction invalidation;
72
- - control-to-pass mapping.
73
-
74
- Every performance-sensitive control maps to the pass it invalidates.
75
-
76
- ## Optimization Evidence
77
-
78
- Optimization worklogs record:
79
-
80
- - bottleneck diagnosis;
81
- - renderer technique evaluated;
82
- - fixtures used;
83
- - measurements before and after;
84
- - rejected alternatives;
85
- - remaining risks;
86
- - why quality was preserved.
101
+ Slider Responsiveness means the real product response remains live through the gesture. Model the slider's reachable interaction and invalidated passes, then measure its derived path; a label, target name, or control kind never classifies workload by itself.
102
+
103
+ Source lifecycle guards remain mandatory: resources are created outside React render, retained according to the declared lifecycle, reused across unrelated interactions, and released during cleanup. Animation frames are cancelled during cleanup, and timeline-only updates do not recreate source-bound resources.
104
+
105
+ ## Non-Normative Examples
106
+
107
+ These examples illustrate the model; they do not define product categories or minimum fixture sizes:
108
+
109
+ - An export selector can adapt an option value to a numeric output-width dimension.
110
+ - A collection editor can adapt runtime items to a numeric item-count dimension.
111
+ - A source importer can expose numeric source dimensions as external-input dimensions.
112
+
113
+ Choose dimensions from the real product cost model and enforced boundaries, not from these examples.
114
+
115
+ ## Model Appearance Paths
116
+
117
+ Model `fileDrop` performance proof names six affected passes: `package-extraction`, `canonical-decode`, `model-presentation`, `canvas-orbit`, `export`, and `resource-cleanup`. Extraction and canonical decode execute in the worker; presentation, orbit, export, and cleanup execute on the main thread/GPU boundary.
118
+
119
+ Use fixtures for authored textures/materials, vertex colors, fallback-only models, equivalent folder/ZIP packages, missing dependencies, multiple roots, and hostile archives. Derive a combined geometry-plus-texture envelope from normalized `modelLimits`; source bytes alone are insufficient because decoded RGBA pixels and GPU resources coexist with canonical geometry. Measure visible completion and frame gaps, cache reuse across preview/export or replacement, and zero active presentation leases after remove/reset/failure/unmount. Do not pass by dropping textures, changing the selected root, replacing authored appearance with fallback, or rendering only metadata.