@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.
- package/package.json +1 -1
- package/src/cli-package-manager-flow.test.mjs +9 -2
- package/src/cli.test.mjs +11 -16
- package/src/create-command.mjs +10 -4
- package/src/generate-demand-only-lifecycle.test.mjs +102 -0
- package/src/generate-performance-iteration-execution.test.mjs +105 -0
- package/src/generate-test-assertions.mjs +2 -0
- package/src/generate-test-browser-execution-ledger.mjs +138 -0
- package/src/generate-test-browser-execution-ledger.test.mjs +87 -0
- package/src/generate-test-delivery-architecture-assertions.mjs +137 -0
- package/src/generate-test-demand-only-lifecycle.mjs +303 -0
- package/src/generate-test-dependency-sandbox.mjs +158 -0
- package/src/generate-test-doc-assertions.mjs +286 -10
- package/src/generate-test-doc-assertions.test.mjs +43 -0
- package/src/generate-test-file-assertions.mjs +244 -6
- package/src/generate-test-fs-utils.mjs +4 -1
- package/src/generate-test-integrity-assertions.mjs +70 -3
- package/src/generate-test-integrity-framework-assertions.mjs +31 -1
- package/src/generate-test-integrity-manifest-assertions.mjs +58 -0
- package/src/generate-test-integrity-ownership-assertions.mjs +35 -2
- package/src/generate-test-managed-process.mjs +287 -0
- package/src/generate-test-managed-process.test.mjs +340 -0
- package/src/generate-test-package-assertions.mjs +75 -11
- package/src/generate-test-product-fixture.mjs +85 -7
- package/src/generate-test-product-fixture.test.mjs +227 -0
- package/src/generate-test-product-iteration.mjs +278 -0
- package/src/generate-test-product-iteration.test.mjs +241 -0
- package/src/generate-test-standalone-assertions.mjs +87 -149
- package/src/generate-test-standalone-delivery-stages.mjs +186 -0
- package/src/generate-test-windows-job-native.cs +496 -0
- package/src/generate-test-windows-job-wrapper.mjs +40 -0
- package/src/generate-test-windows-job.mjs +47 -0
- package/src/generate-test-windows-job.ps1 +17 -0
- package/src/generate.mjs +26 -0
- package/src/generate.test.mjs +76 -14
- package/src/generated-integrity-manifest.test.mjs +51 -2
- package/src/generated-source-policy.mjs +1 -1
- package/src/generated-source-policy.test.mjs +15 -2
- package/src/import-map.mjs +12 -0
- package/src/package-json.mjs +7 -6
- package/src/package-json.test.mjs +55 -31
- package/src/package-manager.mjs +71 -33
- package/src/package-manager.test.mjs +101 -18
- package/src/packaged-template-fallback.test.mjs +4 -0
- package/src/rewrite-imports.mjs +3 -0
- package/src/rewrite-imports.test.mjs +16 -1
- package/templates/runtime/contracts/component-contracts.choices.test.ts +49 -6
- package/templates/runtime/contracts/component-contracts.choices.ts +53 -10
- package/templates/runtime/contracts/component-contracts.inputs.test.ts +2 -2
- package/templates/runtime/contracts/component-contracts.inputs.ts +2 -2
- package/templates/runtime/contracts/component-contracts.media-custom.test.ts +19 -0
- package/templates/runtime/contracts/component-contracts.media-custom.ts +18 -2
- package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +57 -83
- package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +1 -1
- package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +16 -2
- package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +24 -8
- package/templates/runtime/contracts/component-contracts.runtime.ts +80 -39
- package/templates/runtime/contracts/component-contracts.test.ts +6 -1
- package/templates/runtime/contracts/component-contracts.visual.test.ts +44 -5
- package/templates/runtime/contracts/component-contracts.visual.ts +64 -17
- package/templates/runtime/contracts/decision-contracts.test.ts +106 -11
- package/templates/runtime/contracts/decision-contracts.ts +83 -6
- package/templates/runtime/contracts/index.ts +2 -0
- package/templates/runtime/contracts/performance-request-classifier-descriptions.ts +39 -0
- package/templates/runtime/contracts/performance-request-classifier-rules.ts +181 -0
- package/templates/runtime/contracts/performance-request-classifier-types.ts +50 -0
- package/templates/runtime/contracts/performance-request-classifier.test.ts +269 -0
- package/templates/runtime/contracts/performance-request-classifier.ts +224 -0
- package/templates/runtime/contracts/performance-request-evidence-policy.d.mts +21 -0
- package/templates/runtime/contracts/performance-request-evidence-policy.mjs +39 -0
- package/templates/runtime/contracts/performance-verification-policy.test.ts +129 -0
- package/templates/runtime/contracts/performance-verification-policy.ts +49 -0
- package/templates/runtime/contracts/segmented-control-fit.test.ts +71 -0
- package/templates/runtime/contracts/segmented-control-fit.ts +38 -0
- package/templates/runtime/export/export-frame.test.ts +80 -0
- package/templates/runtime/export/export-frame.ts +107 -0
- package/templates/runtime/export/export-sizing.ts +136 -0
- package/templates/runtime/export/export.test.ts +70 -1
- package/templates/runtime/export/export.ts +31 -146
- package/templates/runtime/export/index.ts +2 -0
- package/templates/runtime/index.ts +10 -0
- package/templates/runtime/model-import/canonical/index.ts +39 -0
- package/templates/runtime/model-import/canonical/model-appearance-data-uri.test.ts +43 -0
- package/templates/runtime/model-import/canonical/model-appearance-data-uri.ts +79 -0
- package/templates/runtime/model-import/canonical/model-appearance-image.ts +111 -0
- package/templates/runtime/model-import/canonical/model-appearance-input-snapshot.ts +189 -0
- package/templates/runtime/model-import/canonical/model-appearance-resource.test.ts +116 -0
- package/templates/runtime/model-import/canonical/model-appearance-resource.ts +165 -0
- package/templates/runtime/model-import/canonical/model-appearance-validation.test.ts +197 -0
- package/templates/runtime/model-import/canonical/model-appearance-validation.ts +458 -0
- package/templates/runtime/model-import/canonical/model-document-codec-adversarial.test.ts +151 -0
- package/templates/runtime/model-import/canonical/model-document-codec-appearance-metadata.ts +336 -0
- package/templates/runtime/model-import/canonical/model-document-codec-closure.test.ts +125 -0
- package/templates/runtime/model-import/canonical/model-document-codec-envelope.ts +363 -0
- package/templates/runtime/model-import/canonical/model-document-codec-error.ts +57 -0
- package/templates/runtime/model-import/canonical/model-document-codec-format.ts +83 -0
- package/templates/runtime/model-import/canonical/model-document-codec-layout.ts +163 -0
- package/templates/runtime/model-import/canonical/model-document-codec-metadata-adversarial.test.ts +169 -0
- package/templates/runtime/model-import/canonical/model-document-codec-metadata-preflight.ts +371 -0
- package/templates/runtime/model-import/canonical/model-document-codec-metadata-reader.ts +142 -0
- package/templates/runtime/model-import/canonical/model-document-codec-metadata.ts +420 -0
- package/templates/runtime/model-import/canonical/model-document-codec-payload.ts +311 -0
- package/templates/runtime/model-import/canonical/model-document-codec.test.ts +450 -0
- package/templates/runtime/model-import/canonical/model-document-codec.ts +161 -0
- package/templates/runtime/model-import/canonical/model-document-digest.ts +13 -0
- package/templates/runtime/model-import/canonical/model-document-hostile-decode.test.ts +100 -0
- package/templates/runtime/model-import/canonical/model-document-hostile-input.test.ts +140 -0
- package/templates/runtime/model-import/canonical/model-document-input-reader.ts +153 -0
- package/templates/runtime/model-import/canonical/model-document-input-snapshot.ts +413 -0
- package/templates/runtime/model-import/canonical/model-document-limit-options.test.ts +155 -0
- package/templates/runtime/model-import/canonical/model-document-limits.ts +151 -0
- package/templates/runtime/model-import/canonical/model-document-owned-geometry.test.ts +138 -0
- package/templates/runtime/model-import/canonical/model-document-safe-typed-array.ts +154 -0
- package/templates/runtime/model-import/canonical/model-document-test-support.ts +163 -0
- package/templates/runtime/model-import/canonical/model-document-validation-geometry.ts +330 -0
- package/templates/runtime/model-import/canonical/model-document-validation-helpers.ts +22 -0
- package/templates/runtime/model-import/canonical/model-document-validation-hierarchy.ts +314 -0
- package/templates/runtime/model-import/canonical/model-document-validation-provenance.ts +153 -0
- package/templates/runtime/model-import/canonical/model-document-validation-result.ts +118 -0
- package/templates/runtime/model-import/canonical/model-document-validation.test.ts +497 -0
- package/templates/runtime/model-import/canonical/model-document-validation.ts +276 -0
- package/templates/runtime/model-import/canonical/model-document-worker-memory.test.ts +95 -0
- package/templates/runtime/model-import/canonical/model-document-worker-memory.ts +365 -0
- package/templates/runtime/model-import/canonical/model-document.ts +187 -0
- package/templates/runtime/model-import/canonical/sha256.ts +144 -0
- package/templates/runtime/model-import/default-model-source-assets.test.ts +212 -0
- package/templates/runtime/model-import/default-model-source-assets.ts +235 -0
- package/templates/runtime/model-import/formats/fbx-appearance-test-fixtures.ts +144 -0
- package/templates/runtime/model-import/formats/fbx-ascii-appearance-test-fixtures.ts +123 -0
- package/templates/runtime/model-import/formats/fbx-binary-preflight-reader.ts +179 -0
- package/templates/runtime/model-import/formats/fbx-binary-preflight.ts +277 -0
- package/templates/runtime/model-import/formats/fbx-binary-test-fixture-builder.ts +129 -0
- package/templates/runtime/model-import/formats/fbx-model-format-adapter.test-fixtures.ts +119 -0
- package/templates/runtime/model-import/formats/fbx-model-format-adapter.test.ts +316 -0
- package/templates/runtime/model-import/formats/fbx-model-format-adapter.ts +96 -0
- package/templates/runtime/model-import/formats/fbx-model-format-preflight.ts +122 -0
- package/templates/runtime/model-import/formats/fbx-static-appearance.test.ts +93 -0
- package/templates/runtime/model-import/formats/fbx-static-appearance.ts +403 -0
- package/templates/runtime/model-import/formats/gltf-accessor-preflight.ts +321 -0
- package/templates/runtime/model-import/formats/gltf-attribute-encoding.ts +65 -0
- package/templates/runtime/model-import/formats/gltf-buffer-preflight.ts +320 -0
- package/templates/runtime/model-import/formats/gltf-canonical-appearance.ts +422 -0
- package/templates/runtime/model-import/formats/gltf-canonical-geometry.ts +276 -0
- package/templates/runtime/model-import/formats/gltf-canonical-hierarchy.ts +180 -0
- package/templates/runtime/model-import/formats/gltf-canonical-metadata.ts +100 -0
- package/templates/runtime/model-import/formats/gltf-decode-safety.ts +84 -0
- package/templates/runtime/model-import/formats/gltf-decoded-count-validation.ts +38 -0
- package/templates/runtime/model-import/formats/gltf-document-canonicalizer.ts +328 -0
- package/templates/runtime/model-import/formats/gltf-document-sanitizer.ts +269 -0
- package/templates/runtime/model-import/formats/gltf-extension-policy.ts +59 -0
- package/templates/runtime/model-import/formats/gltf-glb-document.ts +93 -0
- package/templates/runtime/model-import/formats/gltf-json-inspection.ts +152 -0
- package/templates/runtime/model-import/formats/gltf-json-preflight.ts +128 -0
- package/templates/runtime/model-import/formats/gltf-missing-appearance.ts +158 -0
- package/templates/runtime/model-import/formats/gltf-model-format-adapter-appearance.test.ts +181 -0
- package/templates/runtime/model-import/formats/gltf-model-format-adapter-resource-limits.test.ts +236 -0
- package/templates/runtime/model-import/formats/gltf-model-format-adapter-validation.test.ts +274 -0
- package/templates/runtime/model-import/formats/gltf-model-format-adapter.test.ts +229 -0
- package/templates/runtime/model-import/formats/gltf-model-format-adapter.ts +161 -0
- package/templates/runtime/model-import/formats/gltf-node-preflight.ts +218 -0
- package/templates/runtime/model-import/formats/gltf-primitive-preflight.ts +295 -0
- package/templates/runtime/model-import/formats/gltf-source-document.ts +234 -0
- package/templates/runtime/model-import/formats/gltf-source-snapshot.ts +187 -0
- package/templates/runtime/model-import/formats/gltf-texture-resource.ts +252 -0
- package/templates/runtime/model-import/formats/index.ts +28 -0
- package/templates/runtime/model-import/formats/model-format-adapter.test.ts +165 -0
- package/templates/runtime/model-import/formats/model-format-adapter.ts +165 -0
- package/templates/runtime/model-import/formats/obj-material-library.test.ts +124 -0
- package/templates/runtime/model-import/formats/obj-material-library.ts +432 -0
- package/templates/runtime/model-import/formats/obj-model-format-adapter.test.ts +251 -0
- package/templates/runtime/model-import/formats/obj-model-format-adapter.ts +85 -0
- package/templates/runtime/model-import/formats/obj-stl-ply-model-format-adapter-support.ts +335 -0
- package/templates/runtime/model-import/formats/ply-model-format-adapter.test.ts +151 -0
- package/templates/runtime/model-import/formats/ply-model-format-adapter.ts +195 -0
- package/templates/runtime/model-import/formats/production-model-format-main-bundle.test.ts +123 -0
- package/templates/runtime/model-import/formats/production-model-format-manifest.ts +135 -0
- package/templates/runtime/model-import/formats/production-model-format-registry.test.ts +253 -0
- package/templates/runtime/model-import/formats/production-model-format-registry.ts +16 -0
- package/templates/runtime/model-import/formats/production-model-format-worker-registry.ts +68 -0
- package/templates/runtime/model-import/formats/stl-model-format-adapter.test.ts +110 -0
- package/templates/runtime/model-import/formats/stl-model-format-adapter.ts +125 -0
- package/templates/runtime/model-import/formats/three-static-appearance-canonicalizer.ts +305 -0
- package/templates/runtime/model-import/formats/three-static-geometry-canonicalizer.test.ts +245 -0
- package/templates/runtime/model-import/formats/three-static-geometry-canonicalizer.ts +434 -0
- package/templates/runtime/model-import/formats/three-static-source-bundle.ts +146 -0
- package/templates/runtime/model-import/formats/vendor/draco/LICENSE +252 -0
- package/templates/runtime/model-import/formats/vendor/draco/README.md +15 -0
- package/templates/runtime/model-import/formats/vendor/draco/draco_decoder_gltf.wasm.json +1 -0
- package/templates/runtime/model-import/formats/vendor/draco/draco_wasm_wrapper.cjs +117 -0
- package/templates/runtime/model-import/formats/vendor/draco/draco_wasm_wrapper.d.cts +9 -0
- package/templates/runtime/model-import/index.ts +125 -0
- package/templates/runtime/model-import/model-analysis-summary.test.ts +179 -0
- package/templates/runtime/model-import/model-analysis-summary.ts +164 -0
- package/templates/runtime/model-import/model-asset-metadata.ts +71 -0
- package/templates/runtime/model-import/model-import-limit-values.ts +41 -0
- package/templates/runtime/model-import/model-import-limits.test.ts +125 -0
- package/templates/runtime/model-import/model-import-limits.ts +165 -0
- package/templates/runtime/model-import/model-import-types.ts +215 -0
- package/templates/runtime/model-import/model-package-path.ts +106 -0
- package/templates/runtime/model-import/model-package-types.ts +55 -0
- package/templates/runtime/model-import/model-package-zip-preflight.ts +405 -0
- package/templates/runtime/model-import/model-package-zip.test.ts +252 -0
- package/templates/runtime/model-import/model-package-zip.ts +227 -0
- package/templates/runtime/model-import/model-persistence-appearance-resources.test.ts +69 -0
- package/templates/runtime/model-import/model-persistence-hydration-appearance.test.ts +146 -0
- package/templates/runtime/model-import/model-persistence-hydration-resources.ts +281 -0
- package/templates/runtime/model-import/model-persistence-hydration-test-support.ts +97 -0
- package/templates/runtime/model-import/model-persistence-hydration.test.ts +370 -0
- package/templates/runtime/model-import/model-persistence-hydration.ts +323 -0
- package/templates/runtime/model-import/model-source-asset-coordinator.test.ts +414 -0
- package/templates/runtime/model-import/model-source-asset-handler-appearance-resources.ts +20 -0
- package/templates/runtime/model-import/model-source-asset-handler-appearance.test.ts +169 -0
- package/templates/runtime/model-import/model-source-asset-handler-repair-controller.ts +294 -0
- package/templates/runtime/model-import/model-source-asset-handler-repair.ts +233 -0
- package/templates/runtime/model-import/model-source-asset-handler-resources.ts +54 -0
- package/templates/runtime/model-import/model-source-asset-handler.ingestion.test.ts +236 -0
- package/templates/runtime/model-import/model-source-asset-handler.lifecycle.test.ts +176 -0
- package/templates/runtime/model-import/model-source-asset-handler.test-support.ts +231 -0
- package/templates/runtime/model-import/model-source-asset-handler.ts +479 -0
- package/templates/runtime/model-import/model-source-asset-repair-coordinator.test.ts +431 -0
- package/templates/runtime/model-import/model-source-bundle-codec.test.ts +423 -0
- package/templates/runtime/model-import/model-source-bundle-codec.ts +259 -0
- package/templates/runtime/model-import/model-source-bundle-descriptor-fields.ts +369 -0
- package/templates/runtime/model-import/model-source-bundle-descriptor-validation.ts +402 -0
- package/templates/runtime/model-import/model-source-bundle-error.ts +28 -0
- package/templates/runtime/model-import/model-source-bundle-limits.ts +108 -0
- package/templates/runtime/model-import/model-source-bundle-mime-type.test.ts +21 -0
- package/templates/runtime/model-import/model-source-bundle-preflight-test-support.ts +435 -0
- package/templates/runtime/model-import/model-source-bundle-security-test-support.ts +417 -0
- package/templates/runtime/model-import/model-source-bundle-test-support.ts +83 -0
- package/templates/runtime/model-import/model-source-bundle.test.ts +427 -0
- package/templates/runtime/model-import/model-source-bundle.ts +377 -0
- package/templates/runtime/model-import/model-source-bytes.ts +78 -0
- package/templates/runtime/model-import/model-source-data-uri.ts +74 -0
- package/templates/runtime/model-import/model-source-digest.test.ts +25 -0
- package/templates/runtime/model-import/model-source-digest.ts +288 -0
- package/templates/runtime/model-import/model-source-gltf.ts +184 -0
- package/templates/runtime/model-import/model-source-json-preflight.ts +382 -0
- package/templates/runtime/model-import/model-source-lookup.ts +134 -0
- package/templates/runtime/model-import/model-source-package-normalization.test.ts +106 -0
- package/templates/runtime/model-import/model-source-path.ts +233 -0
- package/templates/runtime/model-import/test-fixtures/gltf-appearance-fixtures.ts +188 -0
- package/templates/runtime/model-import/test-fixtures/model-fixtures.ts +612 -0
- package/templates/runtime/model-import/test-fixtures/obj-appearance-fixtures.ts +76 -0
- package/templates/runtime/model-import/topology/apply-model-repair.test.ts +236 -0
- package/templates/runtime/model-import/topology/apply-model-repair.ts +31 -0
- package/templates/runtime/model-import/topology/model-repair-execution.ts +364 -0
- package/templates/runtime/model-import/topology/model-repair-geometry.ts +60 -0
- package/templates/runtime/model-import/topology/model-repair-plan-codec.test.ts +125 -0
- package/templates/runtime/model-import/topology/model-repair-plan-codec.ts +96 -0
- package/templates/runtime/model-import/topology/model-repair-plan-envelope.ts +13 -0
- package/templates/runtime/model-import/topology/model-repair-plan-validation.ts +325 -0
- package/templates/runtime/model-import/topology/model-repair-plan.ts +275 -0
- package/templates/runtime/model-import/topology/model-topology-analysis.test.ts +448 -0
- package/templates/runtime/model-import/topology/model-topology-analysis.ts +426 -0
- package/templates/runtime/model-import/topology/model-topology-digest.ts +117 -0
- package/templates/runtime/model-import/topology/model-topology-graph.ts +455 -0
- package/templates/runtime/model-import/topology/model-topology-math.ts +140 -0
- package/templates/runtime/model-import/topology/model-topology-resources.ts +126 -0
- package/templates/runtime/model-import/topology/model-topology-test-support.ts +163 -0
- package/templates/runtime/model-import/topology/model-topology-types.ts +14 -0
- package/templates/runtime/model-import/worker/bounded-worker-cache.test.ts +47 -0
- package/templates/runtime/model-import/worker/bounded-worker-cache.ts +147 -0
- package/templates/runtime/model-import/worker/cooperative-buffer-snapshot.ts +195 -0
- package/templates/runtime/model-import/worker/model-import-worker-appearance-receipt.test.ts +273 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-draft-verification.ts +39 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-receipt.test.ts +217 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-repair-validation.test.ts +357 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-repair-verification.ts +44 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-result-verification.ts +68 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-snapshot.test.ts +368 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-snapshot.ts +478 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-test-support.ts +198 -0
- package/templates/runtime/model-import/worker/model-import-worker-client-validation.test.ts +301 -0
- package/templates/runtime/model-import/worker/model-import-worker-client.test.ts +484 -0
- package/templates/runtime/model-import/worker/model-import-worker-client.ts +715 -0
- package/templates/runtime/model-import/worker/model-import-worker-diagnostics.ts +298 -0
- package/templates/runtime/model-import/worker/model-import-worker-protocol-validation.ts +714 -0
- package/templates/runtime/model-import/worker/model-import-worker-protocol.ts +192 -0
- package/templates/runtime/model-import/worker/model-import-worker-receipt.ts +221 -0
- package/templates/runtime/model-import/worker/model-import-worker-result-verification.ts +22 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-appearance.test.ts +81 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-envelope.test.ts +126 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-lifecycle.test.ts +342 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-package.test.ts +85 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-production.test.ts +51 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-repair.test.ts +75 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime-test-support.ts +126 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime.test.ts +472 -0
- package/templates/runtime/model-import/worker/model-import-worker-runtime.ts +804 -0
- package/templates/runtime/model-import/worker/model-import-worker-trust-boundary.test.ts +243 -0
- package/templates/runtime/model-import/worker/model-import-worker-vite-smoke.test.ts +132 -0
- package/templates/runtime/model-import/worker/model-import.worker.bundle.js +3691 -0
- package/templates/runtime/model-import/worker/model-import.worker.ts +25 -0
- package/templates/runtime/performance/index.ts +1 -0
- package/templates/runtime/performance/profile-catalog-manifest.d.mts +27 -0
- package/templates/runtime/performance/profile-catalog-manifest.mjs +42 -0
- package/templates/runtime/performance/profile-catalog.test.ts +49 -0
- package/templates/runtime/performance/profile-catalog.ts +56 -0
- package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +388 -5
- package/templates/runtime/react/app-shell/settings-transfer-canvas.ts +68 -0
- package/templates/runtime/react/app-shell/settings-transfer.test.ts +94 -1
- package/templates/runtime/react/app-shell/settings-transfer.ts +61 -89
- package/templates/runtime/react/app-shell/storage-key-migration.test.ts +40 -0
- package/templates/runtime/react/app-shell/storage-key-migration.ts +13 -9
- package/templates/runtime/react/app-shell/toolbar-panel.tsx +31 -13
- package/templates/runtime/react/app-shell/toolcraft-app-panel-workspace.test.tsx +125 -0
- package/templates/runtime/react/app-shell/toolcraft-app-test-utils.tsx +72 -0
- package/templates/runtime/react/app-shell/toolcraft-app.integration.test.tsx +21 -1
- package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +68 -0
- package/templates/runtime/react/app-shell/toolcraft-app.test.tsx +10 -55
- package/templates/runtime/react/app-shell/toolcraft-app.tsx +73 -15
- package/templates/runtime/react/app-shell/toolcraft-media-presentation.test.tsx +135 -0
- package/templates/runtime/react/app-shell/toolcraft-media-presentation.tsx +190 -0
- package/templates/runtime/react/app-shell/toolcraft-model-presentation-composition.test.tsx +99 -0
- package/templates/runtime/react/app-shell/toolcraft-persistence-bootstrap.ts +111 -0
- package/templates/runtime/react/app-shell/toolcraft-pipeline-context.test.tsx +252 -0
- package/templates/runtime/react/app-shell/toolcraft-pipeline-context.tsx +44 -0
- package/templates/runtime/react/app-shell/toolcraft-pipeline-evidence.tsx +41 -0
- package/templates/runtime/react/app-shell/toolcraft-pipeline-initialization.test.tsx +301 -0
- package/templates/runtime/react/app-shell/toolcraft-playback-persistence.test.tsx +116 -0
- package/templates/runtime/react/app-shell/toolcraft-render-isolation.test.tsx +418 -0
- package/templates/runtime/react/app-shell/toolcraft-root-persistence-migration.test.tsx +297 -0
- package/templates/runtime/react/app-shell/toolcraft-root-persistence-test-utils.tsx +163 -0
- package/templates/runtime/react/app-shell/toolcraft-root-persistence.test.tsx +357 -0
- package/templates/runtime/react/app-shell/toolcraft-root.test.tsx +57 -6
- package/templates/runtime/react/app-shell/toolcraft-root.tsx +106 -94
- package/templates/runtime/react/app-shell/toolcraft-selector-lanes.test.tsx +338 -0
- package/templates/runtime/react/app-shell/toolcraft-selectors.test.tsx +241 -0
- package/templates/runtime/react/app-shell/toolcraft-selectors.ts +133 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-context.test.tsx +467 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-context.tsx +646 -0
- package/templates/runtime/react/app-shell/toolcraft-store-context.tsx +18 -0
- package/templates/runtime/react/app-shell/use-toolcraft-persistence.ts +203 -0
- package/templates/runtime/react/app-shell/use-toolcraft-pipeline-pass.test.tsx +220 -0
- package/templates/runtime/react/app-shell/use-toolcraft-pipeline-pass.ts +175 -0
- package/templates/runtime/react/app-shell/use-toolcraft-pipeline.ts +10 -0
- package/templates/runtime/react/app-shell/use-toolcraft-values.test.tsx +288 -0
- package/templates/runtime/react/app-shell/use-toolcraft.ts +188 -7
- package/templates/runtime/react/canvas/canvas-default-media-layer.tsx +52 -14
- package/templates/runtime/react/canvas/canvas-media-transform.ts +2 -1
- package/templates/runtime/react/canvas/canvas-scene-surface.test.tsx +51 -0
- package/templates/runtime/react/canvas/canvas-scene-surface.tsx +54 -0
- package/templates/runtime/react/canvas/canvas-shell-interactions.test.tsx +225 -3
- package/templates/runtime/react/canvas/canvas-shell-media-rendering.test.tsx +83 -0
- package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +88 -0
- package/templates/runtime/react/canvas/canvas-shell-test-utils.tsx +42 -2
- package/templates/runtime/react/canvas/canvas-shell-upload.test.tsx +231 -16
- package/templates/runtime/react/canvas/canvas-shell.tsx +154 -63
- package/templates/runtime/react/canvas/canvas-source-asset-feedback.test.tsx +211 -0
- package/templates/runtime/react/canvas/canvas-upload-routing.ts +65 -56
- package/templates/runtime/react/canvas/canvas-viewport-world.tsx +66 -0
- package/templates/runtime/react/canvas/media-file.test.ts +102 -0
- package/templates/runtime/react/canvas/media-file.ts +80 -35
- package/templates/runtime/react/canvas/runtime-scene-export.test.ts +279 -0
- package/templates/runtime/react/canvas/runtime-scene-export.ts +167 -0
- package/templates/runtime/react/canvas/scene-element-presentation-rect.ts +35 -0
- package/templates/runtime/react/canvas/use-canvas-drop-import.ts +65 -94
- package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +52 -17
- package/templates/runtime/react/canvas/use-toolcraft-canvas-frame.ts +20 -0
- package/templates/runtime/react/canvas-handles/canvas-handle-layer-registry.test.ts +33 -0
- package/templates/runtime/react/canvas-handles/canvas-handle-layer-registry.tsx +64 -0
- package/templates/runtime/react/controls-panel/__tests__/actions-control-loading.test.tsx +59 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel-filedrop-reorder.test.tsx +29 -11
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.control-visibility.test.tsx +52 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.dependency-isolation.test.tsx +332 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.extensions-live-state.test.tsx +135 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.footer-actions.test.tsx +50 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.inline-layout.test.tsx +25 -9
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.media-upload-files.test.tsx +35 -3
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.media-upload-image.test.tsx +11 -5
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.media-upload-multi-image.test.tsx +167 -5
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.render-isolation.test.tsx +496 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.reset-dependency-isolation.test.tsx +226 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +187 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-isolation.test.tsx +441 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-navigation-overflow.test.tsx +247 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-navigation.test.tsx +486 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.section-shell.test.tsx +24 -2
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.setup-controls.test.tsx +10 -5
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.tabs.test.tsx +93 -0
- package/templates/runtime/react/controls-panel/__tests__/file-drop-folder-selection.test.tsx +62 -0
- package/templates/runtime/react/controls-panel/__tests__/file-drop-presentation-accessibility.test.tsx +45 -0
- package/templates/runtime/react/controls-panel/__tests__/file-drop-presentation.test.tsx +459 -0
- package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +159 -12
- package/templates/runtime/react/controls-panel/actions/panel-action-feedback.tsx +24 -0
- package/templates/runtime/react/controls-panel/conditions/control-condition-dependencies.ts +39 -0
- package/templates/runtime/react/controls-panel/conditions/control-conditions.ts +40 -0
- package/templates/runtime/react/controls-panel/controls-panel.tsx +286 -170
- package/templates/runtime/react/controls-panel/keyframes/controls-panel-keyframes.tsx +27 -20
- package/templates/runtime/react/controls-panel/layout/controls-panel-control-group.tsx +509 -0
- package/templates/runtime/react/controls-panel/layout/controls-panel-inline-layout.tsx +5 -3
- package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +33 -5
- package/templates/runtime/react/controls-panel/layout/controls-panel-section-navigation-layout.ts +169 -0
- package/templates/runtime/react/controls-panel/layout/controls-panel-section-navigation.tsx +458 -0
- package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +324 -324
- package/templates/runtime/react/controls-panel/live-custom-control.tsx +52 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-basic-renderers.tsx +15 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.test.tsx +242 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.tsx +203 -129
- package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.test.ts +26 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.ts +29 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-settings-transfer-renderer.tsx +4 -4
- package/templates/runtime/react/controls-panel/testing/controls-panel-test-utils.tsx +8 -2
- package/templates/runtime/react/controls-panel/values/controls-panel-value-labels.ts +1 -0
- package/templates/runtime/react/index.ts +32 -1
- package/templates/runtime/react/layers/layer-tree.ts +5 -32
- package/templates/runtime/react/layers/layers-panel-test-utils.tsx +3 -1
- package/templates/runtime/react/layers/layers-panel.tsx +44 -30
- package/templates/runtime/react/model-rendering/lazy-three-model-render-binding.test.ts +92 -0
- package/templates/runtime/react/model-rendering/lazy-three-model-render-binding.ts +49 -0
- package/templates/runtime/react/model-rendering/model-canvas-layer.test.tsx +491 -0
- package/templates/runtime/react/model-rendering/model-canvas-layer.tsx +459 -0
- package/templates/runtime/react/model-rendering/model-display-fit.test.ts +57 -0
- package/templates/runtime/react/model-rendering/model-display-fit.ts +110 -0
- package/templates/runtime/react/model-rendering/model-export.test.ts +179 -0
- package/templates/runtime/react/model-rendering/model-export.ts +90 -0
- package/templates/runtime/react/model-rendering/model-presentation-consumer.test.tsx +225 -0
- package/templates/runtime/react/model-rendering/model-presentation-consumer.tsx +189 -0
- package/templates/runtime/react/model-rendering/model-presentation-feedback.ts +15 -0
- package/templates/runtime/react/model-rendering/model-presentation-mode.ts +112 -0
- package/templates/runtime/react/model-rendering/model-presentation-resource-manager.test.ts +244 -0
- package/templates/runtime/react/model-rendering/model-presentation-resource-manager.ts +426 -0
- package/templates/runtime/react/model-rendering/model-render-binding.ts +233 -0
- package/templates/runtime/react/model-rendering/model-render-host.ts +339 -0
- package/templates/runtime/react/model-rendering/model-render-provider.test.tsx +457 -0
- package/templates/runtime/react/model-rendering/model-render-provider.tsx +172 -0
- package/templates/runtime/react/model-rendering/model-render-registry.test.ts +86 -0
- package/templates/runtime/react/model-rendering/model-render-registry.ts +64 -0
- package/templates/runtime/react/model-rendering/model-render-state.ts +79 -0
- package/templates/runtime/react/model-rendering/three-canonical-geometry.ts +346 -0
- package/templates/runtime/react/model-rendering/three-canonical-model.ts +150 -0
- package/templates/runtime/react/model-rendering/three-model-appearance.test.ts +125 -0
- package/templates/runtime/react/model-rendering/three-model-appearance.ts +199 -0
- package/templates/runtime/react/model-rendering/three-model-prewarm.ts +61 -0
- package/templates/runtime/react/model-rendering/three-model-render-adapter-lifecycle.test.ts +293 -0
- package/templates/runtime/react/model-rendering/three-model-render-adapter.test-support.ts +70 -0
- package/templates/runtime/react/model-rendering/three-model-render-adapter.test.ts +379 -0
- package/templates/runtime/react/model-rendering/three-model-render-adapter.ts +484 -0
- package/templates/runtime/react/orientation-gizmo/model-orbit-interaction.integration.test.tsx +129 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-layer.tsx +44 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.test.ts +217 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +299 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-public-api.test.ts +12 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.test.ts +115 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.ts +46 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-snap.integration.test.tsx +179 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-test-harness.tsx +208 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo.integration.test.tsx +167 -0
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo.tsx +544 -0
- package/templates/runtime/react/orientation-gizmo/orientation-interaction-coordinator.ts +112 -0
- package/templates/runtime/react/orientation-gizmo/orientation-quaternion.ts +264 -0
- package/templates/runtime/react/orientation-gizmo/use-toolcraft-model-orbit-interaction.ts +233 -0
- package/templates/runtime/react/orientation-gizmo/use-toolcraft-orientation-control-selection.ts +78 -0
- package/templates/runtime/react/panel-host/panel-host-geometry.test.ts +38 -1
- package/templates/runtime/react/panel-host/panel-host-geometry.ts +64 -6
- package/templates/runtime/react/panel-host/panel-host-runtime-placement.test.tsx +198 -0
- package/templates/runtime/react/panel-host/panel-host-types.ts +13 -2
- package/templates/runtime/react/panel-host/panel-host.test.tsx +13 -1
- package/templates/runtime/react/panel-host/panel-host.tsx +105 -20
- package/templates/runtime/react/panel-host/use-toolcraft-panel-binding.test.tsx +161 -0
- package/templates/runtime/react/panel-host/use-toolcraft-panel-binding.ts +55 -0
- package/templates/runtime/react/timeline/timeline-expanded-content.tsx +3 -0
- package/templates/runtime/react/timeline/timeline-panel-header.tsx +6 -0
- package/templates/runtime/react/timeline/timeline-panel-test-utils.tsx +1 -0
- package/templates/runtime/react/timeline/timeline-panel-transport.test.tsx +176 -2
- package/templates/runtime/react/timeline/timeline-panel.tsx +72 -19
- package/templates/runtime/react/timeline/timeline-playback-hooks.ts +58 -21
- package/templates/runtime/react/timeline/timeline-scrub-lifecycle.test.tsx +154 -0
- package/templates/runtime/rendering/index.ts +3 -0
- package/templates/runtime/rendering/renderer-pipeline-cache.ts +171 -0
- package/templates/runtime/rendering/renderer-pipeline-pass-generation.test.ts +151 -0
- package/templates/runtime/rendering/renderer-pipeline-pass-generation.ts +267 -0
- package/templates/runtime/rendering/renderer-pipeline-registration.test.ts +356 -0
- package/templates/runtime/rendering/renderer-pipeline-registration.ts +760 -0
- package/templates/runtime/rendering/renderer-pipeline-resource-lifecycle.test.ts +248 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime-owner-inspection.ts +23 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime-owner.test.ts +353 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime-owner.ts +369 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime.lifecycle.test.ts +440 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime.test.ts +495 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime.ts +611 -0
- package/templates/runtime/rendering/renderer-pipeline-runtime.types.test.ts +93 -0
- package/templates/runtime/rendering/renderer-pipeline-source-invalidation.test.ts +208 -0
- package/templates/runtime/rendering/structured-key-trie.test.ts +31 -0
- package/templates/runtime/rendering/structured-key-trie.ts +91 -0
- package/templates/runtime/scene/index.ts +1 -0
- package/templates/runtime/scene/scene-bounds.test.ts +242 -0
- package/templates/runtime/scene/scene-bounds.ts +190 -0
- package/templates/runtime/schema/additional-value-targets.ts +15 -0
- package/templates/runtime/schema/app-capabilities.test.ts +70 -0
- package/templates/runtime/schema/app-capabilities.ts +28 -0
- package/templates/runtime/schema/app-identity.test.ts +68 -0
- package/templates/runtime/schema/app-identity.ts +30 -0
- package/templates/runtime/schema/assembly-contract.ts +18 -2
- package/templates/runtime/schema/control-schema-normalization.ts +144 -3
- package/templates/runtime/schema/controls-panel-actions.ts +111 -44
- package/templates/runtime/schema/controls-panel-layout-groups.ts +17 -6
- package/templates/runtime/schema/controls-panel-normalization.ts +42 -7
- package/templates/runtime/schema/controls-panel-section-id.test.ts +418 -0
- package/templates/runtime/schema/controls-panel-section-id.ts +208 -0
- package/templates/runtime/schema/controls-panel-section-layout.ts +62 -23
- package/templates/runtime/schema/controls-panel-section-roundtrip.test.ts +157 -0
- package/templates/runtime/schema/controls-panel-section-titles.ts +19 -7
- package/templates/runtime/schema/define-toolcraft.assembly.test.ts +73 -0
- package/templates/runtime/schema/define-toolcraft.control-sections.test-support.ts +46 -0
- package/templates/runtime/schema/define-toolcraft.control-sections.test.ts +2 -4
- package/templates/runtime/schema/define-toolcraft.file-drop-normalization.test.ts +177 -0
- package/templates/runtime/schema/define-toolcraft.model-file-drop-formats.test.ts +181 -0
- package/templates/runtime/schema/define-toolcraft.model-file-drop-limits.test.ts +175 -0
- package/templates/runtime/schema/define-toolcraft.segmented-control-fit.test.ts +167 -0
- package/templates/runtime/schema/define-toolcraft.setup-background.test.ts +142 -0
- package/templates/runtime/schema/define-toolcraft.setup-canvas.test.ts +38 -0
- package/templates/runtime/schema/define-toolcraft.setup-persistence.test.ts +39 -31
- package/templates/runtime/schema/define-toolcraft.setup-render-scale-timeline.test.ts +33 -13
- package/templates/runtime/schema/define-toolcraft.setup-settings-transfer.test.ts +61 -1
- package/templates/runtime/schema/define-toolcraft.ts +32 -55
- package/templates/runtime/schema/keyframe-capability.test.ts +16 -5
- package/templates/runtime/schema/panels-schema-normalization.ts +17 -2
- package/templates/runtime/schema/persistence-plan.test.ts +201 -0
- package/templates/runtime/schema/persistence-plan.ts +70 -0
- package/templates/runtime/schema/runtime-setup-background.ts +158 -0
- package/templates/runtime/schema/runtime-setup-section.ts +122 -57
- package/templates/runtime/schema/runtime-targets.ts +14 -0
- package/templates/runtime/schema/schema-resolvers.ts +0 -18
- package/templates/runtime/schema/types.ts +167 -17
- package/templates/runtime/source-assets/binary-media-hydration.ts +73 -0
- package/templates/runtime/source-assets/default-binary-media-hydration.test.ts +92 -0
- package/templates/runtime/source-assets/default-model-hydration.test.ts +200 -0
- package/templates/runtime/source-assets/file-source-asset-handler.ts +157 -0
- package/templates/runtime/source-assets/image-file-source-asset-handler.test.ts +78 -0
- package/templates/runtime/source-assets/image-source-asset-handler.test.ts +202 -0
- package/templates/runtime/source-assets/image-source-asset-handler.ts +123 -0
- package/templates/runtime/source-assets/index.ts +20 -0
- package/templates/runtime/source-assets/media-resource-ref.test.ts +33 -0
- package/templates/runtime/source-assets/media-resource-ref.ts +49 -0
- package/templates/runtime/source-assets/production-source-asset-registry.ts +18 -0
- package/templates/runtime/source-assets/repository/binary-asset-dependencies.test.ts +184 -0
- package/templates/runtime/source-assets/repository/binary-asset-reachability.ts +26 -0
- package/templates/runtime/source-assets/repository/binary-asset-repository.ts +139 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-lifecycle.test.ts +111 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-lifecycle.ts +248 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-liveness.test.ts +68 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-liveness.ts +156 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-metadata.ts +242 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-options.ts +130 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository-leases.test.ts +305 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository-liveness.test.ts +217 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository-migration.test.ts +198 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository.test-support.ts +48 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository.test.ts +242 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-repository.ts +390 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-storage.ts +238 -0
- package/templates/runtime/source-assets/repository/indexeddb-binary-asset-test-support.ts +163 -0
- package/templates/runtime/source-assets/repository/memory-binary-asset-repository.test.ts +211 -0
- package/templates/runtime/source-assets/repository/memory-binary-asset-repository.ts +149 -0
- package/templates/runtime/source-assets/repository/resource-manifest.test.ts +67 -0
- package/templates/runtime/source-assets/repository/resource-manifest.ts +122 -0
- package/templates/runtime/source-assets/repository/resource-reachability.test.ts +227 -0
- package/templates/runtime/source-assets/repository/resource-reachability.ts +153 -0
- package/templates/runtime/source-assets/repository/unavailable-binary-asset-repository.ts +24 -0
- package/templates/runtime/source-assets/source-asset-admission.ts +63 -0
- package/templates/runtime/source-assets/source-asset-batch-preparation.ts +42 -0
- package/templates/runtime/source-assets/source-asset-binary-media-hydrator.ts +137 -0
- package/templates/runtime/source-assets/source-asset-cleanup-manager.ts +110 -0
- package/templates/runtime/source-assets/source-asset-coordinator-admission.test.ts +365 -0
- package/templates/runtime/source-assets/source-asset-coordinator-lifecycle.test.ts +230 -0
- package/templates/runtime/source-assets/source-asset-coordinator-planning.test.ts +121 -0
- package/templates/runtime/source-assets/source-asset-coordinator-presentation-reachability.test.ts +54 -0
- package/templates/runtime/source-assets/source-asset-coordinator-test-support.ts +197 -0
- package/templates/runtime/source-assets/source-asset-coordinator.test.ts +495 -0
- package/templates/runtime/source-assets/source-asset-coordinator.ts +328 -0
- package/templates/runtime/source-assets/source-asset-feedback.ts +40 -0
- package/templates/runtime/source-assets/source-asset-handler-cancellation.test.ts +157 -0
- package/templates/runtime/source-assets/source-asset-import-runner.ts +462 -0
- package/templates/runtime/source-assets/source-asset-job-manager.ts +186 -0
- package/templates/runtime/source-assets/source-asset-model-hydrator.ts +241 -0
- package/templates/runtime/source-assets/source-asset-operation-store.test.ts +53 -0
- package/templates/runtime/source-assets/source-asset-operation-store.ts +132 -0
- package/templates/runtime/source-assets/source-asset-prepared-result.ts +108 -0
- package/templates/runtime/source-assets/source-asset-presentation-feedback.test.ts +34 -0
- package/templates/runtime/source-assets/source-asset-presentation-resources.test.ts +43 -0
- package/templates/runtime/source-assets/source-asset-presentation-resources.ts +144 -0
- package/templates/runtime/source-assets/source-asset-presentation.test.ts +196 -0
- package/templates/runtime/source-assets/source-asset-presentation.ts +182 -0
- package/templates/runtime/source-assets/source-asset-registry.test.ts +282 -0
- package/templates/runtime/source-assets/source-asset-registry.ts +165 -0
- package/templates/runtime/source-assets/source-asset-resource-resolver.test.ts +47 -0
- package/templates/runtime/source-assets/source-asset-resource-resolver.ts +86 -0
- package/templates/runtime/source-assets/source-asset-types.ts +173 -0
- package/templates/runtime/state/canvas-background-state.ts +73 -0
- package/templates/runtime/state/canvas-control-target-reducer.test.ts +272 -0
- package/templates/runtime/state/canvas-control-target-reducer.ts +349 -0
- package/templates/runtime/state/canvas-frame.test.ts +68 -0
- package/templates/runtime/state/canvas-frame.ts +79 -0
- package/templates/runtime/state/canvas-reducer.ts +90 -5
- package/templates/runtime/state/control-value-normalization.test.ts +141 -0
- package/templates/runtime/state/control-value-normalization.ts +222 -0
- package/templates/runtime/state/controls-reducer.ts +45 -145
- package/templates/runtime/state/create-template-state.test.ts +43 -2
- package/templates/runtime/state/create-template-state.ts +36 -5
- package/templates/runtime/state/history-patch-metadata.test.ts +36 -0
- package/templates/runtime/state/history-patch-metadata.ts +74 -0
- package/templates/runtime/state/history-patches.ts +49 -12
- package/templates/runtime/state/layer-visibility.ts +36 -0
- package/templates/runtime/state/media-defaults.ts +93 -6
- package/templates/runtime/state/media-discriminated-union.test.ts +204 -0
- package/templates/runtime/state/media-import-allocation.ts +129 -0
- package/templates/runtime/state/media-reducer.ts +395 -99
- package/templates/runtime/state/media-resource-state.ts +34 -0
- package/templates/runtime/state/media-state.ts +1 -1
- package/templates/runtime/state/panels-reducer.ts +80 -27
- package/templates/runtime/state/persistence-additional-value-targets.test.ts +67 -0
- package/templates/runtime/state/persistence-controller.test.ts +187 -0
- package/templates/runtime/state/persistence-controller.ts +195 -0
- package/templates/runtime/state/persistence-legacy-section-collapse.test.ts +75 -0
- package/templates/runtime/state/persistence-legacy-section-collapse.ts +138 -0
- package/templates/runtime/state/persistence-media-migration.test.ts +163 -0
- package/templates/runtime/state/persistence-migrations.test.ts +51 -0
- package/templates/runtime/state/persistence-migrations.ts +101 -0
- package/templates/runtime/state/persistence-reader-canvas.ts +4 -0
- package/templates/runtime/state/persistence-reader-media.ts +298 -39
- package/templates/runtime/state/persistence-reader-panels.ts +52 -5
- package/templates/runtime/state/persistence-reader-values.ts +19 -21
- package/templates/runtime/state/persistence-readers.ts +1 -1
- package/templates/runtime/state/persistence-snapshot.ts +15 -4
- package/templates/runtime/state/persistence.test.ts +228 -3
- package/templates/runtime/state/persistence.ts +53 -14
- package/templates/runtime/state/reducer-canvas-panels.test.ts +63 -0
- package/templates/runtime/state/reducer-controls.test.ts +114 -0
- package/templates/runtime/state/reducer-media-import-batch.test.ts +90 -0
- package/templates/runtime/state/reducer-media-import-sizing.test.ts +5 -3
- package/templates/runtime/state/reducer-media-reset.test.ts +18 -2
- package/templates/runtime/state/reducer-media-test-utils.ts +11 -6
- package/templates/runtime/state/reducer-media-transform.test.ts +11 -3
- package/templates/runtime/state/reducer-model-lifecycle.test.ts +307 -0
- package/templates/runtime/state/reducer.ts +9 -0
- package/templates/runtime/state/scene-element-frame.test.ts +32 -0
- package/templates/runtime/state/scene-element-frame.ts +46 -0
- package/templates/runtime/state/toolcraft-external-store-cross-lane.test.ts +475 -0
- package/templates/runtime/state/toolcraft-external-store-dependencies.test.ts +226 -0
- package/templates/runtime/state/toolcraft-external-store-dependencies.ts +291 -0
- package/templates/runtime/state/toolcraft-external-store-field-intent.test.ts +202 -0
- package/templates/runtime/state/toolcraft-external-store-history-boundary.test.ts +243 -0
- package/templates/runtime/state/toolcraft-external-store-history.ts +254 -0
- package/templates/runtime/state/toolcraft-external-store-publication.test.ts +135 -0
- package/templates/runtime/state/toolcraft-external-store-transition.ts +143 -0
- package/templates/runtime/state/toolcraft-external-store.test.ts +330 -0
- package/templates/runtime/state/toolcraft-external-store.ts +401 -0
- package/templates/runtime/state/toolcraft-keyframe-equality.ts +78 -0
- package/templates/runtime/state/types.ts +215 -13
- package/templates/runtime/testing/model-import-performance-workload.test.ts +265 -0
- package/templates/runtime/testing/model-import-performance-workload.ts +468 -0
- package/templates/runtime/testing/performance-config.ts +7 -0
- package/templates/runtime/testing/performance-control-classification.ts +3 -59
- package/templates/runtime/testing/performance-coverage-policy.ts +13 -0
- package/templates/runtime/testing/performance-coverage-validator.ts +39 -24
- package/templates/runtime/testing/performance-envelope-validation-context.ts +33 -0
- package/templates/runtime/testing/performance-fixture-adapter-types.ts +74 -0
- package/templates/runtime/testing/performance-fixture-adapters.ts +24 -0
- package/templates/runtime/testing/performance-fixture-cost-model.ts +216 -0
- package/templates/runtime/testing/performance-fixture-dimensions.ts +83 -0
- package/templates/runtime/testing/performance-fixture-discrete-adapters.ts +150 -0
- package/templates/runtime/testing/performance-fixture-discrete-domain.test.ts +274 -0
- package/templates/runtime/testing/performance-fixture-discrete-search.test.ts +119 -0
- package/templates/runtime/testing/performance-fixture-discrete-search.ts +96 -0
- package/templates/runtime/testing/performance-fixture-execution.test.ts +248 -0
- package/templates/runtime/testing/performance-fixture-execution.ts +109 -0
- package/templates/runtime/testing/performance-fixture-numeric.test.ts +15 -0
- package/templates/runtime/testing/performance-fixture-numeric.ts +24 -0
- package/templates/runtime/testing/performance-fixture-plan-analysis.ts +385 -0
- package/templates/runtime/testing/performance-fixture-plan.test-fixtures.ts +115 -0
- package/templates/runtime/testing/performance-fixture-plan.test.ts +443 -0
- package/templates/runtime/testing/performance-fixture-plan.ts +105 -0
- package/templates/runtime/testing/performance-fixture-reachable-values.test.ts +406 -0
- package/templates/runtime/testing/performance-fixture-record.ts +14 -0
- package/templates/runtime/testing/performance-fixture-registry-validation.ts +341 -0
- package/templates/runtime/testing/performance-fixture-validation-pure.test.ts +378 -0
- package/templates/runtime/testing/performance-interaction-policy.test.ts +35 -0
- package/templates/runtime/testing/performance-interaction-policy.ts +9 -0
- package/templates/runtime/testing/performance-no-legacy-semantics.test.ts +109 -0
- package/templates/runtime/testing/performance-path-codec.d.mts +42 -0
- package/templates/runtime/testing/performance-path-codec.mjs +112 -0
- package/templates/runtime/testing/performance-path-codec.test.ts +96 -0
- package/templates/runtime/testing/performance-path-coverage-policy.ts +111 -0
- package/templates/runtime/testing/performance-path-coverage.test.ts +219 -0
- package/templates/runtime/testing/performance-path-model.ts +15 -0
- package/templates/runtime/testing/performance-paths.test-fixtures.ts +165 -0
- package/templates/runtime/testing/performance-paths.test.ts +208 -0
- package/templates/runtime/testing/performance-paths.ts +84 -0
- package/templates/runtime/testing/performance-profile-validation.test.ts +42 -0
- package/templates/runtime/testing/performance-profile-validation.ts +19 -0
- package/templates/runtime/testing/performance-render-plan-assessment.test.ts +492 -0
- package/templates/runtime/testing/performance-render-plan-assessment.ts +121 -0
- package/templates/runtime/testing/performance-render-plan-benchmark-evidence.test.ts +225 -0
- package/templates/runtime/testing/performance-render-plan-benchmark-evidence.ts +185 -0
- package/templates/runtime/testing/performance-render-plan-integration.test.ts +250 -0
- package/templates/runtime/testing/performance-render-plan-model.ts +91 -0
- package/templates/runtime/testing/performance-render-plan-pass-assessment.ts +353 -0
- package/templates/runtime/testing/performance-render-plan-registration.test.ts +78 -0
- package/templates/runtime/testing/performance-render-plan-test-fixtures.ts +123 -0
- package/templates/runtime/testing/performance-render-plan-utils.ts +65 -0
- package/templates/runtime/testing/performance-renderer-pipeline-parser.ts +202 -0
- package/templates/runtime/testing/performance-renderer-pipeline-validation.ts +93 -98
- package/templates/runtime/testing/performance-renderer-technique-validation.ts +0 -155
- package/templates/runtime/testing/performance-scenario-common-validation.ts +101 -0
- package/templates/runtime/testing/performance-scenario-validation.ts +3 -40
- package/templates/runtime/testing/performance-schema-queries.ts +3 -1
- package/templates/runtime/testing/performance-test-fixtures/index.ts +0 -2
- package/templates/runtime/testing/performance-test-fixtures/renderer-pipelines.ts +0 -14
- package/templates/runtime/testing/performance-types.ts +128 -182
- package/templates/runtime/testing/performance-workload-envelope-derived-validation.test.ts +152 -0
- package/templates/runtime/testing/performance-workload-envelope-derived-validation.ts +109 -0
- package/templates/runtime/testing/performance-workload-envelope-schema-validation.test.ts +384 -0
- package/templates/runtime/testing/performance-workload-envelope-schema-validation.ts +201 -0
- package/templates/runtime/testing/performance-workload-envelope-shared.ts +97 -0
- package/templates/runtime/testing/performance-workload-envelope-test-fixtures.ts +102 -0
- package/templates/runtime/testing/performance-workload-envelope-validation.test.ts +293 -0
- package/templates/runtime/testing/performance-workload-envelope-validation.ts +222 -0
- package/templates/runtime/testing/performance-workload-types.test.ts +65 -0
- package/templates/runtime/testing/performance-workload-types.ts +34 -0
- package/templates/runtime/testing/performance.ts +47 -5
- package/templates/starter/AGENTS.md +45 -37
- package/templates/starter/docs/toolcraft/README.md +14 -16
- package/templates/starter/docs/toolcraft/acceptance-testing.md +86 -33
- package/templates/starter/docs/toolcraft/agent-worklog.md +121 -22
- package/templates/starter/docs/toolcraft/assembly-workflow.md +29 -13
- package/templates/starter/docs/toolcraft/component-rules.md +43 -5
- package/templates/starter/docs/toolcraft/core/control-selection.md +66 -0
- package/templates/starter/docs/toolcraft/core/layout.md +5 -3
- package/templates/starter/docs/toolcraft/core/media-upload.md +44 -1
- package/templates/starter/docs/toolcraft/core/performance.md +100 -67
- package/templates/starter/docs/toolcraft/core/runtime-boundary.md +14 -2
- package/templates/starter/docs/toolcraft/core/setup-export.md +40 -16
- package/templates/starter/docs/toolcraft/core/timeline-animation.md +2 -1
- package/templates/starter/docs/toolcraft/custom-controls.md +7 -1
- package/templates/starter/docs/toolcraft/decision-contract.md +8 -4
- package/templates/starter/docs/toolcraft/performance.md +115 -143
- package/templates/starter/docs/toolcraft/renderer-technique.md +90 -25
- package/templates/starter/docs/toolcraft/schema-reference.md +200 -44
- package/templates/starter/docs/toolcraft/workflow.md +35 -20
- package/templates/starter/e2e/app-browser-control-coverage.spec.ts +0 -54
- package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +86 -0
- package/templates/starter/e2e/app-browser-model-appearance-evidence.spec.ts +214 -0
- package/templates/starter/e2e/app-browser-model-import-evidence.spec.ts +422 -0
- package/templates/starter/e2e/app-browser-model-performance.spec.ts +140 -0
- package/templates/starter/e2e/app-browser-model-runtime-requirements.spec.ts +71 -0
- package/templates/starter/e2e/app-browser-orientation-evidence.spec.ts +276 -0
- package/templates/starter/e2e/app-browser-performance-evidence.spec.ts +164 -90
- package/templates/starter/e2e/app-browser-performance-probe.spec.ts +61 -0
- package/templates/starter/e2e/app-browser-proof-session.spec.ts +19 -0
- package/templates/starter/e2e/app-browser-render-scale-evidence.spec.ts +193 -0
- package/templates/starter/e2e/app-browser-render-scale-requirements.spec.ts +71 -0
- package/templates/starter/e2e/app-browser-runtime-provenance.spec.ts +12 -64
- package/templates/starter/e2e/app-browser-runtime-reporter.spec.ts +100 -50
- package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +179 -46
- package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +34 -56
- package/templates/starter/e2e/app-controls.spec.ts +1 -1
- package/templates/starter/e2e/app-kernel-benchmarks.ts +3 -0
- package/templates/starter/e2e/app-performance-path-adapters.ts +4 -0
- package/templates/starter/e2e/app-performance.spec.ts +49 -0
- package/templates/starter/e2e/app-persistence.spec.ts +209 -0
- package/templates/starter/e2e/browser-acceptance-outcome-helpers.ts +5 -1
- package/templates/starter/e2e/browser-conditional-output-evidence-helpers.ts +5 -0
- package/templates/starter/e2e/browser-execution-ledger.spec.ts +79 -0
- package/templates/starter/e2e/browser-execution-ledger.ts +115 -0
- package/templates/starter/e2e/browser-infinity-canvas-evidence.ts +729 -0
- package/templates/starter/e2e/browser-layer-evidence-helpers.ts +66 -9
- package/templates/starter/e2e/browser-model-appearance-evidence-helpers.ts +65 -0
- package/templates/starter/e2e/browser-model-appearance-evidence.ts +171 -0
- package/templates/starter/e2e/browser-model-import-evidence-helpers.ts +426 -0
- package/templates/starter/e2e/browser-orientation-gizmo-actions.ts +256 -0
- package/templates/starter/e2e/browser-orientation-gizmo-evidence-helpers.ts +433 -0
- package/templates/starter/e2e/browser-performance-evidence.ts +22 -0
- package/templates/starter/e2e/browser-performance-measurement-evidence.ts +25 -0
- package/templates/starter/e2e/browser-performance-measurement-report.spec.ts +73 -0
- package/templates/starter/e2e/browser-performance-measurement-report.ts +218 -0
- package/templates/starter/e2e/browser-performance-report.ts +246 -0
- package/templates/starter/e2e/browser-performance-reporter-evaluation.ts +317 -0
- package/templates/starter/e2e/browser-performance-reporter.spec.ts +456 -0
- package/templates/starter/e2e/browser-performance-targeted-selection.spec.ts +145 -0
- package/templates/starter/e2e/browser-proof-session.ts +31 -1
- package/templates/starter/e2e/browser-render-scale-evidence.ts +245 -0
- package/templates/starter/e2e/browser-runtime-evidence-reporter-test-fixtures.ts +55 -0
- package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +146 -4
- package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +133 -52
- package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +57 -0
- package/templates/starter/e2e/browser-state-evidence-helpers.ts +7 -1
- package/templates/starter/e2e/browser-timeline-evidence-helpers.ts +4 -0
- package/templates/starter/e2e/canvas-handle-helpers.ts +3 -3
- package/templates/starter/e2e/kernel-benchmark-contract.ts +19 -0
- package/templates/starter/e2e/model-import-evidence-test-support.ts +125 -0
- package/templates/starter/e2e/performance-budget-helpers.ts +3 -107
- package/templates/starter/e2e/performance-canvas-helpers.ts +8 -8
- package/templates/starter/e2e/performance-checkpoint-report.ts +89 -0
- package/templates/starter/e2e/performance-compiled-fixture-runtime.ts +120 -0
- package/templates/starter/e2e/performance-control-helpers.ts +1 -1
- package/templates/starter/e2e/performance-control-layout-helpers.ts +24 -0
- package/templates/starter/e2e/performance-environment-evidence.ts +205 -0
- package/templates/starter/e2e/performance-fixture-helpers.ts +37 -210
- package/templates/starter/e2e/performance-fixture-selection.spec.ts +167 -0
- package/templates/starter/e2e/performance-fixture-selection.ts +82 -0
- package/templates/starter/e2e/performance-frame-metrics.spec.ts +21 -0
- package/templates/starter/e2e/performance-frame-metrics.ts +50 -0
- package/templates/starter/e2e/performance-frame-probe.ts +74 -49
- package/templates/starter/e2e/performance-helpers.ts +1 -0
- package/templates/starter/e2e/performance-interaction-measurement.ts +5 -11
- package/templates/starter/e2e/performance-measurement-evidence.ts +52 -8
- package/templates/starter/e2e/performance-model-appearance-contract.ts +11 -0
- package/templates/starter/e2e/performance-model-import-appearance-fixture-support.ts +32 -0
- package/templates/starter/e2e/performance-model-import-appearance-fixtures.spec.ts +56 -0
- package/templates/starter/e2e/performance-model-import-appearance-fixtures.ts +434 -0
- package/templates/starter/e2e/performance-model-import-binary-appearance-fixtures.ts +39 -0
- package/templates/starter/e2e/performance-model-import-fixtures.spec.ts +133 -0
- package/templates/starter/e2e/performance-model-import-fixtures.ts +439 -0
- package/templates/starter/e2e/performance-model-import-geometry-fixtures.ts +158 -0
- package/templates/starter/e2e/performance-model-import-helpers.ts +409 -0
- package/templates/starter/e2e/performance-model-import-zip-fixtures.ts +57 -0
- package/templates/starter/e2e/performance-model-orientation-helpers.ts +34 -0
- package/templates/starter/e2e/performance-model-pixel-helpers.ts +135 -0
- package/templates/starter/e2e/performance-output-action-helpers.ts +4 -4
- package/templates/starter/e2e/performance-path-adapter-contract.ts +55 -0
- package/templates/starter/e2e/performance-path-helpers.spec.ts +171 -0
- package/templates/starter/e2e/performance-path-helpers.ts +291 -0
- package/templates/starter/e2e/performance-pipeline-browser-helper.spec.ts +175 -0
- package/templates/starter/e2e/performance-pipeline-cache-fallback.spec.ts +204 -0
- package/templates/starter/e2e/performance-pipeline-evidence-continuity.spec.ts +134 -0
- package/templates/starter/e2e/performance-pipeline-evidence-test-fixtures.ts +409 -0
- package/templates/starter/e2e/performance-pipeline-evidence.spec.ts +441 -0
- package/templates/starter/e2e/performance-pipeline-evidence.ts +175 -0
- package/templates/starter/e2e/performance-pipeline-invariants.ts +359 -0
- package/templates/starter/e2e/performance-pipeline-resource-evidence.spec.ts +119 -0
- package/templates/starter/e2e/performance-profile-helpers.spec.ts +103 -0
- package/templates/starter/e2e/performance-profile-helpers.ts +52 -0
- package/templates/starter/e2e/performance-render-scale-runner.spec.ts +266 -0
- package/templates/starter/e2e/performance-slider-helpers.ts +7 -123
- package/templates/starter/e2e/product-observable-helpers.ts +109 -103
- package/templates/starter/e2e/toolcraft-delivery-catalog-reporter.ts +31 -0
- package/templates/starter/e2e/toolcraft-kernel-benchmark.spec.ts +107 -0
- package/templates/starter/e2e/toolcraft-product-test.spec.ts +14 -0
- package/templates/starter/e2e/toolcraft-product-test.ts +33 -0
- package/templates/starter/index.html +8 -0
- package/templates/starter/package.json +14 -11
- package/templates/starter/playwright.config.ts +124 -2
- package/templates/starter/scripts/check-toolcraft-code-health.mjs +66 -19
- package/templates/starter/scripts/check-toolcraft-code-health.test.mjs +151 -0
- package/templates/starter/scripts/check-toolcraft-docs.mjs +49 -3
- package/templates/starter/scripts/check-toolcraft-integrity.mjs +229 -117
- package/templates/starter/scripts/check-toolcraft-integrity.test.mjs +271 -0
- package/templates/starter/scripts/playwright-containing-file.mjs +48 -0
- package/templates/starter/scripts/playwright-test-shim-fixture.mjs +204 -0
- package/templates/starter/scripts/playwright-test-shim-fixture.test.mjs +69 -0
- package/templates/starter/scripts/playwright-test-title-selection-performance-path.test.mjs +129 -0
- package/templates/starter/scripts/playwright-test-title-selection.mjs +350 -0
- package/templates/starter/scripts/playwright-test-title-selection.test.mjs +465 -0
- package/templates/starter/scripts/run-browser-performance-test-helpers.mjs +335 -0
- package/templates/starter/scripts/run-browser-performance.mjs +71 -98
- package/templates/starter/scripts/run-browser-performance.test.mjs +266 -27
- package/templates/starter/scripts/run-delivery-verification-test-helpers.mjs +210 -0
- package/templates/starter/scripts/run-delivery-verification.mjs +47 -0
- package/templates/starter/scripts/run-delivery-verification.test.mjs +101 -0
- package/templates/starter/scripts/run-kernel-benchmarks.mjs +104 -0
- package/templates/starter/scripts/toolcraft-browser-impact-selection.mjs +26 -0
- package/templates/starter/scripts/toolcraft-checkpoint-bundle.mjs +198 -0
- package/templates/starter/scripts/toolcraft-checkpoint-bundle.test.mjs +297 -0
- package/templates/starter/scripts/toolcraft-checkpoint-capability-invariants.test.mjs +389 -0
- package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.mjs +106 -0
- package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.test.mjs +279 -0
- package/templates/starter/scripts/toolcraft-checkpoint-durability.test.mjs +49 -0
- package/templates/starter/scripts/toolcraft-checkpoint-durable-fs.mjs +90 -0
- package/templates/starter/scripts/toolcraft-checkpoint-ownership-policy.mjs +217 -0
- package/templates/starter/scripts/toolcraft-checkpoint-paths.mjs +35 -0
- package/templates/starter/scripts/toolcraft-checkpoint-transaction-test-helpers.mjs +12 -0
- package/templates/starter/scripts/toolcraft-checkpoint-transaction.mjs +125 -0
- package/templates/starter/scripts/toolcraft-checkpoint-transaction.test.mjs +167 -0
- package/templates/starter/scripts/toolcraft-checkpoint-write-capability.mjs +196 -0
- package/templates/starter/scripts/toolcraft-code-health-core.d.mts +46 -0
- package/templates/starter/scripts/toolcraft-code-health-core.mjs +80 -99
- package/templates/starter/scripts/toolcraft-code-health-line-budget.mjs +80 -0
- package/templates/starter/scripts/toolcraft-contract-doc-integrity.mjs +7 -3
- package/templates/starter/scripts/toolcraft-contract-doc-integrity.test.mjs +16 -0
- package/templates/starter/scripts/toolcraft-contract-manifest.json +42 -0
- package/templates/starter/scripts/toolcraft-contract-manifest.mjs +8 -0
- package/templates/starter/scripts/toolcraft-contract-manifest.test.mjs +40 -0
- package/templates/starter/scripts/toolcraft-css-source-evidence.mjs +192 -0
- package/templates/starter/scripts/toolcraft-css-source-evidence.test.mjs +336 -0
- package/templates/starter/scripts/toolcraft-css-url-graph-evidence.test.mjs +157 -0
- package/templates/starter/scripts/toolcraft-css-url-scanner.mjs +333 -0
- package/templates/starter/scripts/toolcraft-css-url-scanner.test.mjs +210 -0
- package/templates/starter/scripts/toolcraft-delivery-anchor.d.mts +46 -0
- package/templates/starter/scripts/toolcraft-delivery-anchor.mjs +84 -0
- package/templates/starter/scripts/toolcraft-delivery-anchor.test.mjs +131 -0
- package/templates/starter/scripts/toolcraft-delivery-architecture-inventory.mjs +86 -0
- package/templates/starter/scripts/toolcraft-delivery-architecture-policy.d.mts +51 -0
- package/templates/starter/scripts/toolcraft-delivery-architecture-policy.mjs +248 -0
- package/templates/starter/scripts/toolcraft-delivery-architecture-test-helpers.mjs +40 -0
- package/templates/starter/scripts/toolcraft-delivery-catalog-collector.mjs +55 -0
- package/templates/starter/scripts/toolcraft-delivery-catalog-collector.test.mjs +167 -0
- package/templates/starter/scripts/toolcraft-delivery-evidence.mjs +187 -0
- package/templates/starter/scripts/toolcraft-delivery-evidence.test.mjs +268 -0
- package/templates/starter/scripts/toolcraft-delivery-executor.mjs +294 -0
- package/templates/starter/scripts/toolcraft-delivery-executor.test.mjs +463 -0
- package/templates/starter/scripts/toolcraft-delivery-framework-refresh.test.mjs +141 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-changed.test.mjs +468 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-context.d.mts +72 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-context.mjs +56 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-context.test.mjs +231 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-initial.test.mjs +212 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-model-lifecycle.test.mjs +254 -0
- package/templates/starter/scripts/toolcraft-delivery-functional-semantic-regression.test.mjs +135 -0
- package/templates/starter/scripts/toolcraft-delivery-lifecycle-state.mjs +226 -0
- package/templates/starter/scripts/toolcraft-delivery-lifecycle-state.test.mjs +83 -0
- package/templates/starter/scripts/toolcraft-delivery-lifecycle.mjs +340 -0
- package/templates/starter/scripts/toolcraft-delivery-module-graph.test.mjs +393 -0
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-authority.test.mjs +88 -0
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-durability.test.mjs +329 -0
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-evidence.test.mjs +104 -0
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-lifecycle.test.mjs +478 -0
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-test-helpers.mjs +19 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +282 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +166 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +425 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-functional-model.test.mjs +358 -0
- package/templates/starter/scripts/toolcraft-delivery-plan.d.mts +155 -0
- package/templates/starter/scripts/toolcraft-delivery-plan.mjs +334 -0
- package/templates/starter/scripts/toolcraft-delivery-plan.test.mjs +487 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt-performance.test.mjs +156 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt-strictness.test.mjs +220 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt-test-helpers.mjs +226 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt.d.mts +83 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt.mjs +216 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt.test.mjs +195 -0
- package/templates/starter/scripts/toolcraft-delivery-receipt.types.test.mts +161 -0
- package/templates/starter/scripts/toolcraft-dependency-source-record.mjs +59 -0
- package/templates/starter/scripts/toolcraft-fixture-module-closure.mjs +279 -0
- package/templates/starter/scripts/toolcraft-fixture-module-closure.test.mjs +184 -0
- package/templates/starter/scripts/toolcraft-full-performance-test-helpers.mjs +67 -0
- package/templates/starter/scripts/toolcraft-functional-proof-model.d.mts +47 -0
- package/templates/starter/scripts/toolcraft-functional-proof-model.mjs +198 -0
- package/templates/starter/scripts/toolcraft-functional-proof-model.test.mjs +453 -0
- package/templates/starter/scripts/toolcraft-functional-proof-model.types.test.mts +102 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.d.mts +6 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.mjs +98 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.test.mjs +67 -0
- package/templates/starter/scripts/toolcraft-functional-proof-regression-fixtures.mjs +298 -0
- package/templates/starter/scripts/toolcraft-graph-reachability.mjs +73 -0
- package/templates/starter/scripts/toolcraft-integrity-manifest.mjs +5 -2
- package/templates/starter/scripts/toolcraft-integrity-policy.d.mts +6 -0
- package/templates/starter/scripts/toolcraft-integrity-policy.mjs +14 -6
- package/templates/starter/scripts/toolcraft-integrity-test-utils.mjs +84 -0
- package/templates/starter/scripts/toolcraft-kernel-benchmark-receipt.d.mts +47 -0
- package/templates/starter/scripts/toolcraft-kernel-benchmark-receipt.mjs +306 -0
- package/templates/starter/scripts/toolcraft-kernel-benchmark-receipt.test.mjs +169 -0
- package/templates/starter/scripts/toolcraft-layer-evidence-facade.test.mjs +256 -0
- package/templates/starter/scripts/toolcraft-layer-evidence-reporter.test.mjs +106 -0
- package/templates/starter/scripts/toolcraft-local-dependency-evidence.test.mjs +453 -0
- package/templates/starter/scripts/toolcraft-local-dependency-graph.mjs +344 -0
- package/templates/starter/scripts/toolcraft-local-dependency-graph.test.mjs +372 -0
- package/templates/starter/scripts/toolcraft-performance-authority-policy.d.mts +40 -0
- package/templates/starter/scripts/toolcraft-performance-authority-policy.mjs +274 -0
- package/templates/starter/scripts/toolcraft-performance-checkpoint-runner.mjs +87 -0
- package/templates/starter/scripts/toolcraft-performance-checkpoint-runner.test.mjs +50 -0
- package/templates/starter/scripts/toolcraft-performance-escalation-policy.mjs +72 -0
- package/templates/starter/scripts/toolcraft-performance-escalation-policy.test.mjs +393 -0
- package/templates/starter/scripts/toolcraft-performance-iteration-comparison.mjs +127 -0
- package/templates/starter/scripts/toolcraft-performance-iteration-comparison.test.mjs +133 -0
- package/templates/starter/scripts/toolcraft-performance-receipt-policy.mjs +127 -0
- package/templates/starter/scripts/toolcraft-performance-receipt-validation.test.mjs +214 -0
- package/templates/starter/scripts/toolcraft-performance-report.d.mts +34 -0
- package/templates/starter/scripts/toolcraft-performance-report.mjs +244 -0
- package/templates/starter/scripts/toolcraft-performance-report.test.mjs +138 -0
- package/templates/starter/scripts/toolcraft-performance-request-authority.mjs +64 -0
- package/templates/starter/scripts/toolcraft-performance-request-authority.test.mjs +488 -0
- package/templates/starter/scripts/toolcraft-plan-execution-authority.mjs +143 -0
- package/templates/starter/scripts/toolcraft-playwright-evidence-authority.mjs +96 -0
- package/templates/starter/scripts/toolcraft-playwright-evidence-authority.test.mjs +94 -0
- package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +65 -51
- package/templates/starter/scripts/toolcraft-product-boundary-graph-evidence.test.mjs +161 -0
- package/templates/starter/scripts/toolcraft-product-boundary.mjs +104 -129
- package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +46 -0
- package/templates/starter/scripts/toolcraft-product-dependency-resolution.mjs +61 -118
- package/templates/starter/scripts/toolcraft-product-evidence-boundary-ast.mjs +97 -31
- package/templates/starter/scripts/toolcraft-product-evidence-boundary.test.mjs +204 -1
- package/templates/starter/scripts/toolcraft-product-model-presentation-boundary.test.mjs +49 -0
- package/templates/starter/scripts/toolcraft-product-observable-facade.test.mjs +223 -0
- package/templates/starter/scripts/toolcraft-product-style-boundary.mjs +0 -136
- package/templates/starter/scripts/toolcraft-proof-process.mjs +199 -0
- package/templates/starter/scripts/toolcraft-proof-process.test.mjs +466 -0
- package/templates/starter/scripts/toolcraft-protected-browser-build.mjs +32 -0
- package/templates/starter/scripts/toolcraft-readonly-adjacency.mjs +44 -0
- package/templates/starter/scripts/toolcraft-receipt-boundary.test.mjs +285 -0
- package/templates/starter/scripts/toolcraft-receipt-file-io.mjs +16 -0
- package/templates/starter/scripts/toolcraft-source-inventory.mjs +100 -1
- package/templates/starter/scripts/toolcraft-source-inventory.test.mjs +106 -0
- package/templates/starter/scripts/toolcraft-source-ownership.mjs +15 -0
- package/templates/starter/scripts/toolcraft-source-ownership.test.mjs +31 -1
- package/templates/starter/scripts/toolcraft-state-evidence-facade.test.mjs +258 -0
- package/templates/starter/scripts/toolcraft-state-evidence-reporter.test.mjs +78 -0
- package/templates/starter/scripts/toolcraft-static-string.mjs +234 -28
- package/templates/starter/scripts/toolcraft-targeted-performance-execution.mjs +274 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-execution.test.mjs +225 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-report-combination.mjs +83 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-report-combination.test.mjs +131 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-report.d.mts +89 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-report.mjs +321 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-report.test.mjs +225 -0
- package/templates/starter/scripts/toolcraft-targeted-performance-report.types.test.mts +71 -0
- package/templates/starter/scripts/toolcraft-typescript-analysis.mjs +334 -0
- package/templates/starter/scripts/toolcraft-typescript-architecture-invariants.test.mjs +202 -0
- package/templates/starter/scripts/toolcraft-typescript-callables.mjs +83 -0
- package/templates/starter/scripts/toolcraft-typescript-module-shape.mjs +156 -0
- package/templates/starter/scripts/toolcraft-typescript-semantic-evidence.mjs +66 -0
- package/templates/starter/scripts/toolcraft-typescript-source-evidence-structure.test.mjs +44 -0
- package/templates/starter/scripts/toolcraft-typescript-source-evidence.d.mts +86 -0
- package/templates/starter/scripts/toolcraft-typescript-source-evidence.mjs +334 -0
- package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +439 -0
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.d.mts +62 -0
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.mjs +344 -0
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.test.mjs +204 -0
- package/templates/starter/scripts/toolcraft-verification-impact-performance-candidates.test.mjs +210 -0
- package/templates/starter/scripts/toolcraft-verification-impact-resolution.mjs +344 -0
- package/templates/starter/scripts/toolcraft-verification-impact-resolution.test.mjs +270 -0
- package/templates/starter/scripts/toolcraft-verification-impact-semantic-resolution.test.mjs +449 -0
- package/templates/starter/scripts/toolcraft-verification-impact-support-resolution.test.mjs +195 -0
- package/templates/starter/scripts/toolcraft-verification-impact.d.mts +132 -0
- package/templates/starter/scripts/toolcraft-verification-impact.mjs +169 -0
- package/templates/starter/scripts/toolcraft-verification-impact.test.mjs +300 -0
- package/templates/starter/scripts/toolcraft-verification-input-roles.d.mts +60 -0
- package/templates/starter/scripts/toolcraft-verification-input-roles.mjs +197 -0
- package/templates/starter/scripts/toolcraft-verification-input-roles.test.mjs +225 -0
- package/templates/starter/scripts/toolcraft-verification-inventory.mjs +138 -42
- package/templates/starter/scripts/toolcraft-verification-lock.mjs +64 -0
- package/templates/starter/scripts/toolcraft-verification-receipt-test-helpers.mjs +245 -0
- package/templates/starter/scripts/toolcraft-verification-receipt.d.mts +40 -6
- package/templates/starter/scripts/toolcraft-verification-receipt.mjs +95 -229
- package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +325 -210
- package/templates/starter/scripts/toolcraft-vite-env-activation.test.mjs +131 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.mjs +18 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.test.mjs +36 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.test.mjs +7 -0
- package/templates/starter/scripts/toolcraft-worklog-decision-trail.d.mts +14 -0
- package/templates/starter/scripts/toolcraft-worklog-decision-trail.mjs +170 -0
- package/templates/starter/src/app/acceptance/canvas-coverage.ts +18 -0
- package/templates/starter/src/app/acceptance/canvas-handle-acceptance.ts +5 -14
- package/templates/starter/src/app/acceptance/condition-exclusivity.test.ts +60 -0
- package/templates/starter/src/app/acceptance/condition-exclusivity.ts +221 -0
- package/templates/starter/src/app/acceptance/control-acceptance-context.ts +20 -6
- package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +60 -10
- package/templates/starter/src/app/acceptance/control-acceptance-kind-rules.ts +55 -7
- package/templates/starter/src/app/acceptance/control-acceptance.ts +3 -0
- package/templates/starter/src/app/acceptance/control-component-rules.ts +0 -32
- package/templates/starter/src/app/acceptance/control-layout-entity-rules.ts +7 -4
- package/templates/starter/src/app/acceptance/control-layout-model.ts +12 -4
- package/templates/starter/src/app/acceptance/control-section-inventory.test.ts +136 -0
- package/templates/starter/src/app/acceptance/control-section-inventory.ts +69 -24
- package/templates/starter/src/app/acceptance/controls.ts +4 -0
- package/templates/starter/src/app/acceptance/infinity-canvas.ts +81 -0
- package/templates/starter/src/app/acceptance/inline-layout.ts +14 -3
- package/templates/starter/src/app/acceptance/interaction-ownership-intent.ts +31 -0
- package/templates/starter/src/app/acceptance/interaction-ownership.ts +283 -0
- package/templates/starter/src/app/acceptance/interaction-targets.ts +18 -0
- package/templates/starter/src/app/acceptance/media-upload.ts +115 -10
- package/templates/starter/src/app/acceptance/model-import-coverage.ts +42 -0
- package/templates/starter/src/app/acceptance/orientation-gizmo.ts +176 -0
- package/templates/starter/src/app/acceptance/output-background-rules.ts +58 -18
- package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +4 -8
- package/templates/starter/src/app/acceptance/output-export-model.ts +17 -7
- package/templates/starter/src/app/acceptance/reference-study-types.ts +60 -0
- package/templates/starter/src/app/acceptance/render-scale.ts +107 -0
- package/templates/starter/src/app/acceptance/runtime-coverage.ts +45 -0
- package/templates/starter/src/app/acceptance/runtime-setup.ts +4 -2
- package/templates/starter/src/app/acceptance/types.ts +66 -63
- package/templates/starter/src/app/acceptance/validate-coverage.ts +76 -4
- package/templates/starter/src/app/acceptance/validation-pipeline.test.ts +5 -1
- package/templates/starter/src/app/acceptance/validation-pipeline.ts +2 -0
- package/templates/starter/src/app/acceptance/view-interaction-intent.ts +23 -0
- package/templates/starter/src/app/acceptance/view-interaction.ts +148 -0
- package/templates/starter/src/app/starter-acceptance-data.ts +28 -1
- package/templates/starter/src/app/starter-acceptance.animation-intent.test.ts +7 -4
- package/templates/starter/src/app/starter-acceptance.background-export.test.ts +17 -14
- package/templates/starter/src/app/starter-acceptance.base-coverage.test.ts +3 -0
- package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +133 -4
- package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +6 -4
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.test.ts +40 -0
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +20 -2
- package/templates/starter/src/app/starter-acceptance.control-label-context.test.ts +7 -5
- package/templates/starter/src/app/starter-acceptance.control-labels.test.ts +10 -8
- package/templates/starter/src/app/starter-acceptance.control-naming-rules.test.ts +6 -7
- package/templates/starter/src/app/starter-acceptance.control-order.test.ts +110 -2
- package/templates/starter/src/app/starter-acceptance.control-state.test.ts +6 -7
- package/templates/starter/src/app/starter-acceptance.curves-rules.test.ts +4 -5
- package/templates/starter/src/app/starter-acceptance.custom-control-collections.test.ts +7 -5
- package/templates/starter/src/app/starter-acceptance.custom-control-coverage.test.ts +3 -4
- package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +6 -4
- package/templates/starter/src/app/starter-acceptance.custom-control-valid.test.ts +5 -3
- package/templates/starter/src/app/starter-acceptance.image-video-export-settings.test.ts +5 -6
- package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +408 -0
- package/templates/starter/src/app/starter-acceptance.keyframes.test.ts +3 -2
- package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.media-upload.fixtures.ts +34 -4
- package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +225 -2
- package/templates/starter/src/app/starter-acceptance.orientation-gizmo.test.ts +265 -0
- package/templates/starter/src/app/starter-acceptance.output-export-rules.test.ts +14 -24
- package/templates/starter/src/app/starter-acceptance.persistence-coverage.test.ts +50 -0
- package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +7 -7
- package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.product-worklog.test.ts +1 -7
- package/templates/starter/src/app/starter-acceptance.range-slider-rules.test.ts +3 -4
- package/templates/starter/src/app/starter-acceptance.reference-foundation.test.ts +2 -2
- package/templates/starter/src/app/starter-acceptance.render-scale.test.ts +305 -0
- package/templates/starter/src/app/starter-acceptance.schema-test-utils.ts +1 -1
- package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +5 -5
- package/templates/starter/src/app/starter-acceptance.section-dependencies.test.ts +11 -5
- package/templates/starter/src/app/starter-acceptance.section-titles.test.ts +4 -5
- package/templates/starter/src/app/starter-acceptance.setup-readiness.test.ts +26 -9
- package/templates/starter/src/app/starter-acceptance.slider-rules.test.ts +9 -7
- package/templates/starter/src/app/starter-acceptance.slider-unit-rules.test.ts +2 -3
- package/templates/starter/src/app/starter-acceptance.text-control-kind.test.ts +3 -4
- package/templates/starter/src/app/starter-acceptance.toggle-pair-layout.test.ts +5 -6
- package/templates/starter/src/app/starter-acceptance.toggle-parameter-layout.test.ts +63 -7
- package/templates/starter/src/app/starter-acceptance.ts +29 -0
- package/templates/starter/src/app/starter-acceptance.video-reference-study.test.ts +3 -3
- package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +282 -0
- package/templates/starter/src/app/starter-acceptance.worklog-command-authority.test.ts +123 -0
- package/templates/starter/src/app/starter-acceptance.worklog-performance-command-cases.ts +34 -0
- package/templates/starter/src/app/starter-acceptance.worklog-performance-intent-test-utils.ts +98 -0
- package/templates/starter/src/app/starter-acceptance.worklog-performance-intent.test.ts +299 -0
- package/templates/starter/src/app/starter-acceptance.worklog-test-utils.ts +76 -173
- package/templates/starter/src/app/starter-acceptance.worklog.test.ts +92 -114
- package/templates/starter/src/app/starter-automated-runtime-evidence.test.ts +0 -8
- package/templates/starter/src/app/starter-composition.tsx +1 -0
- package/templates/starter/src/app/starter-identity.ts +4 -0
- package/templates/starter/src/app/starter-performance-test-utils.ts +0 -87
- package/templates/starter/src/app/starter-performance.fixture-helper.test.ts +191 -0
- package/templates/starter/src/app/starter-performance.gates.test.ts +385 -39
- package/templates/starter/src/app/starter-performance.ts +8 -13
- package/templates/starter/src/app/starter-schema.test.ts +26 -2
- package/templates/starter/src/app/starter-schema.ts +3 -0
- package/templates/starter/src/app/starter-verification-impact.json +15 -0
- package/templates/starter/src/app/test-evidence/browser-performance-contract.ts +387 -0
- package/templates/starter/src/app/test-evidence/browser-performance-measurement-contract.ts +258 -0
- package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +31 -2
- package/templates/starter/src/router.tsx +3 -0
- package/templates/starter/src/routes/index.tsx +3 -0
- package/templates/starter/tsconfig.json +7 -1
- package/templates/ui/components/composites/tabs.tsx +10 -0
- package/templates/ui/components/controls/actions/actions-control.tsx +17 -1
- package/templates/ui/components/controls/actions/index.ts +1 -0
- package/templates/ui/components/controls/boolean/boolean-controls.tsx +5 -0
- package/templates/ui/components/controls/file-drop/file-drop-control.test.tsx +96 -0
- package/templates/ui/components/controls/file-drop/file-drop-control.tsx +325 -104
- package/templates/ui/components/controls/file-drop/file-drop-empty-state.tsx +51 -17
- package/templates/ui/components/controls/file-drop/file-drop-file-list.tsx +85 -61
- package/templates/ui/components/controls/file-drop/file-drop-folder-input.tsx +39 -0
- package/templates/ui/components/controls/file-drop/file-drop-image-grid.tsx +64 -43
- package/templates/ui/components/controls/file-drop/file-drop-presentation-messages.tsx +57 -0
- package/templates/ui/components/controls/file-drop/file-drop-presentation.test.ts +58 -0
- package/templates/ui/components/controls/file-drop/{file-drop-model.tsx → file-drop-presentation.tsx} +128 -2
- package/templates/ui/components/controls/file-drop/file-drop-single-preview.tsx +32 -25
- package/templates/ui/components/controls/file-drop/file-drop-types.ts +99 -8
- package/templates/ui/components/controls/file-drop/index.ts +5 -1
- package/templates/ui/components/controls/font-picker/font-catalog.node-import.test.ts +24 -0
- package/templates/ui/components/controls/font-picker/font-catalog.ts +1 -1
- package/templates/ui/components/controls/index.ts +7 -0
- package/templates/ui/components/controls/tabs/index.ts +4 -0
- package/templates/ui/components/controls/tabs/tabs-control.tsx +166 -0
- package/templates/ui/components/panel/panel-section.tsx +6 -1
- package/templates/ui/components/panel/panel.tsx +6 -2
- package/templates/ui/components/primitives/index.ts +1 -0
- package/templates/ui/components/primitives/scroll-fade-render.tsx +11 -2
- package/templates/ui/components/primitives/scroll-fade-types.ts +2 -0
- package/templates/ui/components/primitives/scroll-fade.test.tsx +63 -0
- package/templates/ui/components/primitives/scroll-fade.tsx +2 -0
- package/templates/ui/index.ts +1 -0
- package/templates/runtime/react/controls-panel/layout/controls-panel-collapse-storage.ts +0 -131
- package/templates/runtime/testing/performance-browser-policy.test.ts +0 -81
- package/templates/runtime/testing/performance-browser-policy.ts +0 -102
- package/templates/runtime/testing/performance-budget-validation.ts +0 -84
- package/templates/runtime/testing/performance-control-classification.test.ts +0 -106
- package/templates/runtime/testing/performance-coverage-context.ts +0 -44
- package/templates/runtime/testing/performance-coverage-renderer-policy.ts +0 -221
- package/templates/runtime/testing/performance-coverage-scenario-policy.ts +0 -147
- package/templates/runtime/testing/performance-coverage-target-policy.ts +0 -121
- package/templates/runtime/testing/performance-export-coverage.test.ts +0 -234
- package/templates/runtime/testing/performance-fixture-load-profile.test.ts +0 -360
- package/templates/runtime/testing/performance-fixture-media.test.ts +0 -80
- package/templates/runtime/testing/performance-fixture-stress.test.ts +0 -314
- package/templates/runtime/testing/performance-fixture-validation.ts +0 -255
- package/templates/runtime/testing/performance-fixture-values.ts +0 -275
- package/templates/runtime/testing/performance-fixture-workload.test.ts +0 -140
- package/templates/runtime/testing/performance-load-profile-validation.ts +0 -467
- package/templates/runtime/testing/performance-renderer-coverage.test.ts +0 -325
- package/templates/runtime/testing/performance-renderer-pipeline-coverage.test.ts +0 -115
- package/templates/runtime/testing/performance-renderer-pipeline-interactions.test.ts +0 -201
- package/templates/runtime/testing/performance-renderer-pipeline-passes.test.ts +0 -247
- package/templates/runtime/testing/performance-renderer-technique.test.ts +0 -275
- package/templates/runtime/testing/performance-renderer-validation.ts +0 -2
- package/templates/runtime/testing/performance-scenario-coverage.test.ts +0 -303
- package/templates/runtime/testing/performance-schema-derived-workloads.test.ts +0 -231
- package/templates/runtime/testing/performance-test-fixtures/scenarios.ts +0 -172
- package/templates/runtime/testing/performance-test-fixtures/stress-fixtures.ts +0 -133
- package/templates/starter/e2e/performance-render-scale-helpers.ts +0 -55
- package/templates/starter/scripts/check-ai-skills.mjs +0 -136
- package/templates/starter/scripts/check-ai-skills.test.mjs +0 -64
- package/templates/starter/scripts/toolcraft-product-boundary-ast-utils.mjs +0 -23
- package/templates/starter/scripts/toolcraft-product-dependency-graph.mjs +0 -176
- package/templates/starter/scripts/toolcraft-product-dependency-graph.test.mjs +0 -196
- package/templates/starter/src/app/starter-acceptance.video-export-test-utils.ts +0 -37
- package/templates/starter/src/app/starter-performance.budgets.test.ts +0 -374
- package/templates/starter/src/app/starter-performance.renderer-source.test.ts +0 -136
- package/templates/starter/src/app/starter-performance.renderer-technique.test.ts +0 -291
- package/templates/starter/src/app/starter-performance.scenarios.test.ts +0 -355
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { isToolcraftRuntimeOwnedTarget } from "../schema/runtime-targets";
|
|
2
|
+
import type { ResolvedToolcraftAppSchema } from "../schema/types";
|
|
3
|
+
import type { ToolcraftEnvelopeValidationContext } from "./performance-envelope-validation-context";
|
|
4
|
+
import { collectToolcraftWorkloadControls } from "./performance-control-classification";
|
|
5
|
+
import { getSchemaBoundErrors, groupControlsByTarget } from "./performance-workload-envelope-schema-validation";
|
|
6
|
+
import {
|
|
7
|
+
formatUnknownValue,
|
|
8
|
+
getDimensionLabel,
|
|
9
|
+
getEnvelopeDimensions,
|
|
10
|
+
getNumericErrors,
|
|
11
|
+
isNonNullObject,
|
|
12
|
+
isSupportedMapping,
|
|
13
|
+
isTrimmedNonEmptyString,
|
|
14
|
+
type UnknownRecord,
|
|
15
|
+
} from "./performance-workload-envelope-shared";
|
|
16
|
+
import { getDerivedDependencyCycleErrors } from "./performance-workload-envelope-derived-validation";
|
|
17
|
+
import { getAllSchemaControls } from "./performance-schema-queries";
|
|
18
|
+
import type { ToolcraftEnvelopePerformanceConfig } from "./performance-types";
|
|
19
|
+
|
|
20
|
+
type RuntimeDimensionEntry = {
|
|
21
|
+
dimension: UnknownRecord;
|
|
22
|
+
index: number;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export function getToolcraftWorkloadEnvelopeErrors(
|
|
26
|
+
schema: ResolvedToolcraftAppSchema,
|
|
27
|
+
config: ToolcraftEnvelopePerformanceConfig,
|
|
28
|
+
): string[] {
|
|
29
|
+
const envelope = getEnvelopeDimensions(config);
|
|
30
|
+
if (!envelope.dimensions) {
|
|
31
|
+
return [...envelope.errors];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const dimensions = envelope.dimensions;
|
|
35
|
+
const errors: string[] = [];
|
|
36
|
+
const schemaControlsByTarget = groupControlsByTarget(getAllSchemaControls(schema));
|
|
37
|
+
const workloadControls = collectToolcraftWorkloadControls(schema);
|
|
38
|
+
const workloadControlsByTarget = groupControlsByTarget(
|
|
39
|
+
workloadControls.map(({ control }) => control),
|
|
40
|
+
);
|
|
41
|
+
const dimensionEntries: RuntimeDimensionEntry[] = dimensions.flatMap(
|
|
42
|
+
(dimension, index) =>
|
|
43
|
+
isNonNullObject(dimension) ? [{ dimension, index }] : [],
|
|
44
|
+
);
|
|
45
|
+
const dimensionIdCounts = new Map<string, number>();
|
|
46
|
+
|
|
47
|
+
for (const { dimension } of dimensionEntries) {
|
|
48
|
+
if (isTrimmedNonEmptyString(dimension.id)) {
|
|
49
|
+
dimensionIdCounts.set(
|
|
50
|
+
dimension.id,
|
|
51
|
+
(dimensionIdCounts.get(dimension.id) ?? 0) + 1,
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const knownDimensionIds = new Set(dimensionIdCounts.keys());
|
|
57
|
+
const seenDimensionIds = new Set<string>();
|
|
58
|
+
const schemaTargetCounts = new Map<string, number>();
|
|
59
|
+
|
|
60
|
+
for (const [index, rawDimension] of dimensions.entries()) {
|
|
61
|
+
if (!isNonNullObject(rawDimension)) {
|
|
62
|
+
errors.push(
|
|
63
|
+
`workloadEnvelope.dimensions[${index}] must be a non-null object.`,
|
|
64
|
+
);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const dimension = rawDimension;
|
|
69
|
+
const label = getDimensionLabel(dimension, index);
|
|
70
|
+
|
|
71
|
+
if (!isTrimmedNonEmptyString(dimension.id)) {
|
|
72
|
+
errors.push(
|
|
73
|
+
`workloadEnvelope.dimensions[${index}].id must be trimmed and non-empty.`,
|
|
74
|
+
);
|
|
75
|
+
} else if (seenDimensionIds.has(dimension.id)) {
|
|
76
|
+
errors.push(`Workload dimension id "${dimension.id}" must be unique.`);
|
|
77
|
+
} else {
|
|
78
|
+
seenDimensionIds.add(dimension.id);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!isTrimmedNonEmptyString(dimension.unit)) {
|
|
82
|
+
errors.push(`${label} unit must be trimmed and non-empty.`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
errors.push(...getNumericErrors(dimension, label));
|
|
86
|
+
|
|
87
|
+
if (!isSupportedMapping(dimension.mapping)) {
|
|
88
|
+
errors.push(
|
|
89
|
+
`${label} mapping "${formatUnknownValue(dimension.mapping)}" is not supported.`,
|
|
90
|
+
);
|
|
91
|
+
} else if (
|
|
92
|
+
dimension.mapping === "custom" &&
|
|
93
|
+
(typeof dimension.customMappingReason !== "string" ||
|
|
94
|
+
!dimension.customMappingReason.trim())
|
|
95
|
+
) {
|
|
96
|
+
errors.push(
|
|
97
|
+
`${label} with custom mapping must provide a non-empty customMappingReason.`,
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const source = dimension.source;
|
|
102
|
+
if (!isNonNullObject(source)) {
|
|
103
|
+
errors.push(`${label} source must be a non-null object.`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
switch (source.kind) {
|
|
108
|
+
case "runtime-state":
|
|
109
|
+
if (!isTrimmedNonEmptyString(source.path)) {
|
|
110
|
+
errors.push(`${label} runtime-state path must be trimmed and non-empty.`);
|
|
111
|
+
}
|
|
112
|
+
break;
|
|
113
|
+
case "external-input":
|
|
114
|
+
if (!isTrimmedNonEmptyString(source.id)) {
|
|
115
|
+
errors.push(`${label} external-input id must be trimmed and non-empty.`);
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
case "derived": {
|
|
119
|
+
if (!Array.isArray(source.inputs)) {
|
|
120
|
+
errors.push(`${label} derived inputs must be an array.`);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (source.inputs.length === 0) {
|
|
125
|
+
errors.push(`${label} derived inputs must not be empty.`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
for (const [inputIndex, input] of source.inputs.entries()) {
|
|
129
|
+
if (!isTrimmedNonEmptyString(input)) {
|
|
130
|
+
errors.push(
|
|
131
|
+
`${label} derived input at index ${inputIndex} must be trimmed and non-empty.`,
|
|
132
|
+
);
|
|
133
|
+
} else if (input === dimension.id) {
|
|
134
|
+
errors.push(`${label} cannot reference itself as a derived input.`);
|
|
135
|
+
} else if (!knownDimensionIds.has(input)) {
|
|
136
|
+
errors.push(`${label} references unknown derived input "${input}".`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case "schema-target": {
|
|
142
|
+
const target = source.target;
|
|
143
|
+
|
|
144
|
+
if (!isTrimmedNonEmptyString(target)) {
|
|
145
|
+
errors.push(`${label} schema-target target must be trimmed and non-empty.`);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (isToolcraftRuntimeOwnedTarget(target)) {
|
|
150
|
+
errors.push(`${label} schema target "${target}" is runtime-owned.`);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const targetCount = (schemaTargetCounts.get(target) ?? 0) + 1;
|
|
155
|
+
schemaTargetCounts.set(target, targetCount);
|
|
156
|
+
if (targetCount === 2) {
|
|
157
|
+
errors.push(
|
|
158
|
+
`Schema target "${target}" must not map to more than one workloadEnvelope dimension.`,
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const schemaControls = schemaControlsByTarget.get(target) ?? [];
|
|
163
|
+
if (schemaControls.length === 0) {
|
|
164
|
+
errors.push(`${label} references unknown schema target "${target}".`);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const explicitWorkloadControls = workloadControlsByTarget.get(target) ?? [];
|
|
169
|
+
if (explicitWorkloadControls.length !== 1) {
|
|
170
|
+
errors.push(
|
|
171
|
+
`${label} schema target "${target}" must reference exactly one explicit workload control.`,
|
|
172
|
+
);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
errors.push(
|
|
177
|
+
...getSchemaBoundErrors(
|
|
178
|
+
dimension,
|
|
179
|
+
label,
|
|
180
|
+
target,
|
|
181
|
+
explicitWorkloadControls[0]!,
|
|
182
|
+
source.workloadBoundary,
|
|
183
|
+
),
|
|
184
|
+
);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
default:
|
|
188
|
+
errors.push(
|
|
189
|
+
`${label} source kind "${formatUnknownValue(source.kind)}" is not supported.`,
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
errors.push(
|
|
195
|
+
...getDerivedDependencyCycleErrors(
|
|
196
|
+
dimensionEntries.map(({ dimension }) => dimension),
|
|
197
|
+
dimensionIdCounts,
|
|
198
|
+
),
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
const checkedWorkloadTargets = new Set<string>();
|
|
202
|
+
for (const { target } of workloadControls) {
|
|
203
|
+
if (checkedWorkloadTargets.has(target)) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
checkedWorkloadTargets.add(target);
|
|
207
|
+
|
|
208
|
+
if ((schemaTargetCounts.get(target) ?? 0) !== 1) {
|
|
209
|
+
errors.push(
|
|
210
|
+
`Workload control ${target} must map to exactly one workloadEnvelope dimension.`,
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return errors;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export function getToolcraftWorkloadEnvelopeErrorsForContext(
|
|
219
|
+
context: ToolcraftEnvelopeValidationContext,
|
|
220
|
+
): string[] {
|
|
221
|
+
return getToolcraftWorkloadEnvelopeErrors(context.schema, context.config);
|
|
222
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, expectTypeOf, it } from "vitest";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
TOOLCRAFT_PERFORMANCE_PROFILE_NAMES,
|
|
5
|
+
defineToolcraftPerformance,
|
|
6
|
+
isToolcraftPerformanceProfileName,
|
|
7
|
+
type ToolcraftEnvelopePerformanceConfig,
|
|
8
|
+
type ToolcraftPerformanceProfileName,
|
|
9
|
+
type ToolcraftWorkloadDimension,
|
|
10
|
+
type ToolcraftWorkloadEnvelope,
|
|
11
|
+
type ToolcraftWorkloadSource,
|
|
12
|
+
} from "./performance";
|
|
13
|
+
|
|
14
|
+
describe("Toolcraft performance workload types", () => {
|
|
15
|
+
it("requires a workload envelope in the canonical config", () => {
|
|
16
|
+
const source: ToolcraftWorkloadSource = {
|
|
17
|
+
kind: "schema-target",
|
|
18
|
+
target: "render.count",
|
|
19
|
+
workloadBoundary: "maximum",
|
|
20
|
+
};
|
|
21
|
+
const dimension: ToolcraftWorkloadDimension = {
|
|
22
|
+
defaultValue: 1,
|
|
23
|
+
id: "output-units",
|
|
24
|
+
interactiveMax: 100,
|
|
25
|
+
mapping: "direct",
|
|
26
|
+
source,
|
|
27
|
+
unit: "units",
|
|
28
|
+
};
|
|
29
|
+
const envelope: ToolcraftWorkloadEnvelope = {
|
|
30
|
+
dimensions: [dimension],
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const config = defineToolcraftPerformance({
|
|
34
|
+
rendererStrategy: "canvas-2d",
|
|
35
|
+
scenarios: [],
|
|
36
|
+
usesCustomRenderer: true,
|
|
37
|
+
workloadEnvelope: envelope,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
expect(config.workloadEnvelope).toBe(envelope);
|
|
41
|
+
expect("rendererWorkload" in config).toBe(false);
|
|
42
|
+
expect("workloadTargets" in config).toBe(false);
|
|
43
|
+
expectTypeOf(config).toMatchTypeOf<ToolcraftEnvelopePerformanceConfig>();
|
|
44
|
+
expectTypeOf(config.rendererStrategy).toEqualTypeOf<"canvas-2d">();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("exposes exactly the supported performance profile names", () => {
|
|
48
|
+
expect(TOOLCRAFT_PERFORMANCE_PROFILE_NAMES).toEqual([
|
|
49
|
+
"interactive-continuous",
|
|
50
|
+
"interactive-discrete",
|
|
51
|
+
"batch-responsive",
|
|
52
|
+
"initial-render",
|
|
53
|
+
]);
|
|
54
|
+
expect(isToolcraftPerformanceProfileName("interactive-continuous")).toBe(
|
|
55
|
+
true,
|
|
56
|
+
);
|
|
57
|
+
expect(isToolcraftPerformanceProfileName("custom-profile")).toBe(false);
|
|
58
|
+
expectTypeOf<ToolcraftPerformanceProfileName>().toEqualTypeOf<
|
|
59
|
+
| "interactive-continuous"
|
|
60
|
+
| "interactive-discrete"
|
|
61
|
+
| "batch-responsive"
|
|
62
|
+
| "initial-render"
|
|
63
|
+
>();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type ToolcraftWorkloadSource =
|
|
2
|
+
| {
|
|
3
|
+
kind: "schema-target";
|
|
4
|
+
target: string;
|
|
5
|
+
workloadBoundary?: "minimum" | "maximum";
|
|
6
|
+
}
|
|
7
|
+
| { kind: "runtime-state"; path: string }
|
|
8
|
+
| { kind: "external-input"; id: string }
|
|
9
|
+
| { kind: "derived"; inputs: readonly string[] };
|
|
10
|
+
|
|
11
|
+
export type ToolcraftWorkloadDimension = {
|
|
12
|
+
batchMax?: number;
|
|
13
|
+
customMappingReason?: string;
|
|
14
|
+
defaultValue: number;
|
|
15
|
+
id: string;
|
|
16
|
+
interactiveMax?: number;
|
|
17
|
+
mapping: "direct" | "area" | "quadratic" | "custom";
|
|
18
|
+
source: ToolcraftWorkloadSource;
|
|
19
|
+
unit: string;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type ToolcraftWorkloadEnvelope = {
|
|
23
|
+
dimensions: readonly ToolcraftWorkloadDimension[];
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
TOOLCRAFT_PERFORMANCE_PROFILE_NAMES,
|
|
28
|
+
isToolcraftPerformanceProfileName,
|
|
29
|
+
} from "../performance/profile-catalog";
|
|
30
|
+
export type { ToolcraftPerformanceProfileName } from "../performance/profile-catalog";
|
|
31
|
+
export type {
|
|
32
|
+
ToolcraftRenderPassCost,
|
|
33
|
+
ToolcraftRenderPassLifecycle,
|
|
34
|
+
} from "../rendering/renderer-pipeline-registration";
|
|
@@ -1,15 +1,57 @@
|
|
|
1
1
|
export * from "./performance-types";
|
|
2
|
+
export * from "./performance-workload-types";
|
|
2
3
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
TOOLCRAFT_MODEL_PERFORMANCE_DEVELOPMENT_PRESSURE,
|
|
5
|
+
deriveToolcraftModelPerformancePaths,
|
|
6
|
+
type ToolcraftModelPerformanceCheckpoint,
|
|
7
|
+
type ToolcraftModelPerformanceDimension,
|
|
8
|
+
type ToolcraftModelPerformanceDimensionId,
|
|
9
|
+
type ToolcraftModelPerformancePath,
|
|
10
|
+
type ToolcraftModelPerformancePathKind,
|
|
11
|
+
} from "./model-import-performance-workload";
|
|
12
|
+
export { defineToolcraftPerformance } from "./performance-config";
|
|
6
13
|
export {
|
|
7
|
-
collectToolcraftPerformanceSensitiveControls,
|
|
8
14
|
collectToolcraftUnclassifiedPerformanceControls,
|
|
15
|
+
collectToolcraftWorkloadControls,
|
|
9
16
|
} from "./performance-control-classification";
|
|
10
17
|
export {
|
|
11
18
|
getToolcraftControlPerformanceValues,
|
|
12
19
|
getToolcraftSchemaPerformanceValues,
|
|
13
20
|
requireToolcraftSchemaPerformanceValues,
|
|
14
21
|
} from "./performance-schema-queries";
|
|
15
|
-
export {
|
|
22
|
+
export {
|
|
23
|
+
TOOLCRAFT_FUNCTIONAL_PERFORMANCE_COVERAGE_POLICY,
|
|
24
|
+
TOOLCRAFT_STRICT_PERFORMANCE_COVERAGE_POLICY,
|
|
25
|
+
type ToolcraftPerformanceCoverageValidationPolicy,
|
|
26
|
+
validateToolcraftPerformanceCoverage,
|
|
27
|
+
} from "./performance-coverage-validator";
|
|
28
|
+
export { getToolcraftPerformanceProfileErrors } from "./performance-profile-validation";
|
|
29
|
+
export { getToolcraftWorkloadEnvelopeErrors } from "./performance-workload-envelope-validation";
|
|
30
|
+
export {
|
|
31
|
+
deriveToolcraftPerformancePaths,
|
|
32
|
+
type ToolcraftPerformancePath,
|
|
33
|
+
} from "./performance-paths";
|
|
34
|
+
export {
|
|
35
|
+
assessToolcraftRenderPlan,
|
|
36
|
+
type ToolcraftRenderPlanAssessment,
|
|
37
|
+
type ToolcraftRenderPlanBenchmarkRequirement,
|
|
38
|
+
type ToolcraftRenderPlanInvariants,
|
|
39
|
+
} from "./performance-render-plan-assessment";
|
|
40
|
+
export {
|
|
41
|
+
defineToolcraftFixtureAdapter,
|
|
42
|
+
} from "./performance-fixture-adapters";
|
|
43
|
+
export {
|
|
44
|
+
defineToolcraftDiscreteFixtureAdapter,
|
|
45
|
+
defineToolcraftSchemaDiscreteFixtureAdapter,
|
|
46
|
+
} from "./performance-fixture-discrete-adapters";
|
|
47
|
+
export {
|
|
48
|
+
toolcraftDiscreteCombinationBudget,
|
|
49
|
+
toolcraftDiscreteDimensionBudget,
|
|
50
|
+
} from "./performance-fixture-discrete-search";
|
|
51
|
+
export {
|
|
52
|
+
compileToolcraftPerformanceFixturePlan,
|
|
53
|
+
} from "./performance-fixture-plan";
|
|
54
|
+
export {
|
|
55
|
+
executeToolcraftPerformanceFixtureCheckpoint,
|
|
56
|
+
} from "./performance-fixture-execution";
|
|
57
|
+
export { areToolcraftFixtureValuesEqual } from "./performance-fixture-numeric";
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Toolcraft App Template Assembly Guide
|
|
2
2
|
|
|
3
|
+
<!-- toolcraft-performance-lifecycle: first-delivery=functional; later-delivery=functional-targeted; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only -->
|
|
4
|
+
|
|
3
5
|
This is a standalone Toolcraft template app generated from the base starter.
|
|
4
6
|
|
|
5
7
|
## Required Preflight
|
|
@@ -12,14 +14,14 @@ Treat this `AGENTS.md` as the active project contract. Before planning or editin
|
|
|
12
14
|
4. Read their Implementation phase immediately before editing code.
|
|
13
15
|
5. Read their Verification phase before writing or running proof.
|
|
14
16
|
|
|
15
|
-
Process matching routes sequentially within the current phase and skip repeated documents already read in that phase. Open exactly one listed document per terminal or tool read, including documents from the same route and phase. Do not concatenate multiple documents, routes, or phases into one large output, and never continue from truncated output. Choose and record
|
|
17
|
+
Process matching routes sequentially within the current phase and skip repeated documents already read in that phase. Open exactly one listed document per terminal or tool read, including documents from the same route and phase. Do not concatenate multiple documents, routes, or phases into one large output, and never continue from truncated output. Choose and record one verification tier for the coherent user-visible delivery batch before implementation. Do not edit implementation files until the Plan and Implementation preflight is complete.
|
|
16
18
|
|
|
17
19
|
## Quick Entry Contract
|
|
18
20
|
|
|
19
21
|
1. Build through `defineToolcraft` and `ToolcraftApp`.
|
|
20
22
|
2. Keep app state in Toolcraft runtime schema and commands.
|
|
21
|
-
3. Keep product output in `canvasContent`; never render app UI there. The signed host owns `ToolcraftApp`, bootstrap, routes, and global runtime styles; product code supplies only `ToolcraftAppComposition`. If upload/import is part of the source-material flow, do not invent canvas placeholder artwork, CTA copy, helper text, fake sample output, or preset source designs before real content exists.
|
|
22
|
-
4. Use built-in Toolcraft controls before custom controls.
|
|
23
|
+
3. Keep product output in `canvasContent`; never render app UI there. The signed host owns `ToolcraftApp`, bootstrap, routes, and global runtime styles; product code supplies only `ToolcraftAppComposition`. Model upload preserves supported authored appearance from standalone files, folders, and bounded ZIP packages; declare typed `modelPresentation`, using runtime presentation by default and checked consumers for custom presentation. `renderDefaultCanvasMedia={false}` never hides runtime model layers. If upload/import is part of the source-material flow, do not invent canvas placeholder artwork, CTA copy, helper text, fake sample output, or preset source designs before real content exists.
|
|
24
|
+
4. Use built-in Toolcraft controls before custom controls. Before controls or canvas interactions, declare typed `interactionOwnership`: user request, inspected reference, or product usability selects one primary surface for each operation; complementary operations may share related state, but canvas and panel must not mirror the same operation. Every product also declares typed `viewInteraction` before renderer code; a visible editable spatial scene defaults to `orbit` and uses schema `orientationGizmo` plus runtime model-orbit interaction. Fixed or timeline-owned cameras require an explicit user request or inspected-reference evidence.
|
|
23
25
|
5. Do not hand-compose runtime surfaces or render built-in control components directly in app code; use `ToolcraftApp`, schema controls, `canvasContent`, `controlRenderers`, `onPanelAction`, and runtime commands.
|
|
24
26
|
6. Before writing controls, make and export `starterControlSectionInventory`: each product controls section declares its title, product entity or workflow stage, targets, and grouping reason. Group by product meaning, not UI component type.
|
|
25
27
|
7. Keep control `label` short but semantically sufficient with the nearest visible section/group context, and put product-specific behavior help in schema `description`; runtime renders the label help tooltip only when that description adds meaning beyond the label.
|
|
@@ -27,20 +29,20 @@ Process matching routes sequentially within the current phase and skip repeated
|
|
|
27
29
|
9. Animated preview renderers suspend or coalesce non-essential animation work during canvas drag, pan, pinch, zoom, and radar/center interactions, then resume without changing user playback state.
|
|
28
30
|
10. If a Figma URL is provided, inspect the Figma file through MCP and rebuild from its structure; never implement from a screenshot or by eye.
|
|
29
31
|
11. If a video, GIF, screen recording, contact sheet, or extracted-frame sequence is provided as a reference, write a Video Reference Study before implementation: storyboard frames, frame-to-frame transition analysis, behavior decomposition, and acceptance mapping. Do not implement video references from a single screenshot or high-level summary.
|
|
30
|
-
12.
|
|
31
|
-
13. Generated apps follow the mandatory runtime Setup, canvas sizing, render scale, Timeline switch, Background, Image Export, Video Export, and sticky action rules in `docs/toolcraft/core/setup-export.md`. Do not duplicate or reinterpret those controls in app-authored sections.
|
|
32
|
+
12. Runtime workspace persistence is enabled locally by default: values, canvas, and panels are the base plan, while enabled timeline, layers, and media add their slices. `{ storage: "none" }` is the only opt-out and requires a recorded reason. Test exact resolved slices through a real reload; product code never writes localStorage or IndexedDB directly.
|
|
33
|
+
13. Generated apps follow the mandatory runtime Setup, Infinity canvas/finite canvas sizing, render scale, Timeline switch, Background, Image Export, Video Export, and sticky action rules in `docs/toolcraft/core/setup-export.md`. Do not duplicate or reinterpret those controls in app-authored sections.
|
|
32
34
|
14. Media uploads, image/file mode, source images, multi-upload sorting, default assets, and image transform actions follow `docs/toolcraft/core/media-upload.md`.
|
|
33
35
|
15. Keep `docs/toolcraft/agent-worklog.md` current with a decision trail, product decisions, explicit reference inputs, evidence, verification, and risks. Reference-runtime-clone apps also declare `referenceStudy` plus `referenceFeatureInventory` so every inspected reference feature has feature-level behavior evidence and maps to Toolcraft implementation and acceptance coverage.
|
|
34
|
-
16. Prove every visible entity through acceptance, browser, and performance coverage. Browser acceptance and performance pass only when protected helpers emit matching runtime evidence after successful assertions; source-code spelling and acceptance prose are not outcome authority. Declare typed conditional-visibility and background-output coverage, then use their fixed protected browser recipes. Generic acceptance outcomes prove command side effects only; use the fixed media, persistence, viewport, compound-control, layer, and timeline semantic recipes for specialized evidence.
|
|
35
|
-
17. Performance workload
|
|
36
|
-
18. Custom renderer apps
|
|
37
|
-
19. Classify
|
|
36
|
+
16. Prove every visible entity through acceptance, browser, and performance coverage. Browser acceptance and performance pass only when protected helpers emit matching runtime evidence after successful assertions; source-code spelling and acceptance prose are not outcome authority. Declare typed conditional-visibility and background-output coverage, then use their fixed protected browser recipes. Raster products with `canvas.renderScale` declare `renderScaleCoverage` for interaction and steady state, plus playback when timeline is enabled, and prove real backing pixels with `canvas-render-scale-backing`; clamping quality is a functional failure without measured performance. Generic acceptance outcomes prove command side effects only; use the fixed media, persistence, viewport, compound-control, layer, and timeline semantic recipes for specialized evidence.
|
|
37
|
+
17. Performance planning follows 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; targeted functional/browser development checks; lifecycle-appropriate delivery proof. Keep `src/app/app-verification-impact.json` complete so later functional changes derive exact verification scope. Only exact request authority may create a measured targeted performance iteration. Details live in `docs/toolcraft/core/performance.md` and `docs/toolcraft/performance.md`.
|
|
38
|
+
18. Custom renderer apps compile one canonical `rendererPipelineRegistration`, supply it through `ToolcraftAppComposition`, reuse that registration as `rendererPipeline` in performance assessment, and derive paths and fixtures from it. The neutral starter has no registration, runtime provider, or fixture adapters.
|
|
39
|
+
19. Classify each coherent user-visible delivery batch with a verification tier before editing. Steering and fixes inside the same request stay in that batch. Use targeted checks for development feedback, then run the protected delivery gate once when the batch is ready.
|
|
38
40
|
|
|
39
41
|
## Starter Baseline
|
|
40
42
|
|
|
41
|
-
The generated folder starts as a neutral Toolcraft shell: canvas upload plus toolbar. It intentionally does not include demo controls, prompt fields, layers, or timeline. Do not treat test fixtures or documentation examples as product requirements. Add controls, timeline, layers, sticky actions,
|
|
43
|
+
The generated folder starts as a neutral Toolcraft shell: canvas upload plus toolbar. It intentionally does not include demo controls, prompt fields, layers, or timeline. Do not treat test fixtures or documentation examples as product requirements. Add controls, timeline, layers, sticky actions, and custom renderers only after the requested product or reference app requires them; base workspace persistence already exists.
|
|
42
44
|
|
|
43
|
-
When the folder becomes a real product, update `src/app/app-acceptance-data.ts` from `appProductReadiness.mode: "starter"` to `mode: "product"` and fill `productName`, `productSummary`, and `
|
|
45
|
+
When the folder becomes a real product, update `src/app/app-acceptance-data.ts` from `appProductReadiness.mode: "starter"` to `mode: "product"` and fill `productName`, `productSummary`, `requestedBehavior`, typed `interactionOwnership`, and typed `viewInteraction`. Compare canvas and panel for each operation that could plausibly live on either surface. A visible editable 3D scene uses `orbit`; `fixed-camera` and `timeline-camera` require explicit request/reference evidence. Renamed product folders are not allowed to keep neutral starter readiness.
|
|
44
46
|
|
|
45
47
|
## License
|
|
46
48
|
|
|
@@ -55,7 +57,7 @@ Use this `AGENTS.md` as the entry contract. Use local docs for detail; the app m
|
|
|
55
57
|
- `docs/toolcraft/assembly-workflow.md` — runtime assembly, canvas output, and reference clone path.
|
|
56
58
|
- `docs/toolcraft/decision-contract.md` — rule ids, levels, and enforcement expectations.
|
|
57
59
|
- `docs/toolcraft/schema-reference.md` — schema authoring rules for `src/app/app-schema.ts`.
|
|
58
|
-
- `docs/toolcraft/component-rules.md` — slider, segmented, color, upload, image picker, vector, layers, timeline, and footer action rules.
|
|
60
|
+
- `docs/toolcraft/component-rules.md` — slider, segmented, color, upload, image picker, vector, orientation gizmo, layers, timeline, and footer action rules.
|
|
59
61
|
- `docs/toolcraft/acceptance-testing.md` — app entity matrix and browser acceptance for `src/app/app-acceptance-data.ts`.
|
|
60
62
|
- `docs/toolcraft/performance.md` — performance roles, scenarios, and workload coverage for `src/app/app-performance.ts`.
|
|
61
63
|
- `docs/toolcraft/renderer-technique.md` — DOM, SVG, Canvas 2D, WebGL, and mixed renderer choices.
|
|
@@ -73,10 +75,12 @@ Use this `AGENTS.md` as the entry contract. Use local docs for detail; the app m
|
|
|
73
75
|
- Keep `src/app/app-acceptance-data.ts` aligned with every visible product entity.
|
|
74
76
|
- Do not edit `src/app/app-acceptance.ts`, `src/app/acceptance`, supplied `app-acceptance.*` meta-tests, or the generic browser acceptance harness. They are framework-owned files covered by the signed integrity manifest; add product-specific Vitest and Playwright tests in separate app-owned files.
|
|
75
77
|
- Keep `src/app/app-performance.ts` as app-specific performance matrix config only.
|
|
78
|
+
- Keep `src/app/app-verification-impact.json` aligned with every product production module, nearest acceptance coverage, and renderer pass. Classify presentation, functional, and performance ownership there; do not infer verification scope from filenames during a later iteration.
|
|
79
|
+
- Use `e2e/app-kernel-benchmarks.ts` only for executable candidates required by `assessToolcraftRenderPlan`, then run protected `pnpm verify:kernel`. Do not put authored timing evidence in product files.
|
|
76
80
|
- Do not paste, restore, or duplicate runtime validators inside `src/app/app-performance.ts`.
|
|
77
81
|
- Do not edit the generated contract files under `docs/toolcraft` or the generated `LICENSE.md` and `NOTICE.md`; they are framework-owned and covered by the signed integrity manifest. `docs/toolcraft/agent-worklog.md` is the explicit editable exception for product decisions and verification evidence.
|
|
78
82
|
- Do not edit `src/toolcraft`. It is an immutable signed copy of the shared Toolcraft runtime; change the monorepo runtime and regenerate the app instead.
|
|
79
|
-
- Before
|
|
83
|
+
- Before delivery, replace the starter worklog with `Mode: product`, add one `Decision Trail` entry per coherent user-visible delivery batch, and record concrete decisions for renderer, timeline, layers, controls, export, and performance. Each entry keeps human intent: request, user-visible result, source/reference checked, contract rules applied, rejected alternatives, state/output mapping, known risks, and domain-shaped performance authority when applicable. Protected receipts own changed files, the plan, executed checks, reports, measurements, and pass/fail evidence. `pnpm test` fails if the worklog is missing, lacks the decision trail, or still describes the neutral starter.
|
|
80
84
|
- `pnpm test` includes Toolcraft source integrity and local docs checks. If a desired control style is missing, fix the schema or regenerate from the upstream template/runtime; do not patch copied `src/toolcraft` files for one app.
|
|
81
85
|
|
|
82
86
|
## Decision Contract Rule IDs
|
|
@@ -87,7 +91,9 @@ These ids mirror `TOOLCRAFT_DECISION_CONTRACT` in `@/toolcraft/runtime`. Keep th
|
|
|
87
91
|
- `runtime-shell-required`
|
|
88
92
|
- `canvas-no-app-ui`
|
|
89
93
|
- `canvas-surface-preserved`
|
|
94
|
+
- `infinity-canvas-scene-bounds`
|
|
90
95
|
- `canvas-handle-placement`
|
|
96
|
+
- `interaction-surface-ownership`
|
|
91
97
|
- `panel-host-behavior`
|
|
92
98
|
- `layers-enable-only-when-needed`
|
|
93
99
|
- `layers-enabled-behavior`
|
|
@@ -99,6 +105,8 @@ These ids mirror `TOOLCRAFT_DECISION_CONTRACT` in `@/toolcraft/runtime`. Keep th
|
|
|
99
105
|
- `controls-component-layout-invariants`
|
|
100
106
|
- `controls-layout-heuristics`
|
|
101
107
|
- `renderer-technique-inventory`
|
|
108
|
+
- `renderer-view-interaction`
|
|
109
|
+
- `model-appearance-presentation`
|
|
102
110
|
- `reference-clone-source-of-truth`
|
|
103
111
|
- `video-reference-analysis`
|
|
104
112
|
- `acceptance-product-observable`
|
|
@@ -111,9 +119,10 @@ These ids mirror `TOOLCRAFT_DECISION_CONTRACT` in `@/toolcraft/runtime`. Keep th
|
|
|
111
119
|
|
|
112
120
|
- Use `defineToolcraft` from `@/toolcraft/runtime`.
|
|
113
121
|
- Export an `appComposition` satisfying `ToolcraftAppComposition` from `src/app/app-composition.tsx`.
|
|
114
|
-
- Keep product composition limited to `schema`, `canvasContent`, `controlRenderers`, `onPanelAction`, and `
|
|
122
|
+
- Keep product composition limited to `schema`, `canvasContent`, `controlRenderers`, `modelPresentation`, `onPanelAction`, `renderDefaultCanvasMedia`, and optional `rendererPipelineRegistration`; host `className` and `style` are not product extension points.
|
|
123
|
+
- Custom renderers use one compiled `rendererPipelineRegistration` as the canonical declaration for runtime execution and new-envelope performance assessment. Product code receives only the disposal-free pipeline client through hooks and panel action context.
|
|
115
124
|
- Do not import `ToolcraftApp`, low-level runtime surfaces, or built-in controls into product modules. The signed host renders the shell; product modules use schema controls and supported composition fields.
|
|
116
|
-
- Use `renderDefaultCanvasMedia={false}` when a custom renderer replaces
|
|
125
|
+
- Use `renderDefaultCanvasMedia={false}` when a custom renderer replaces generic image/file preview. This flag does not suppress runtime model layers; use typed `modelPresentation` custom mode with checked consumers for declared model targets.
|
|
117
126
|
- Use `ToolcraftApp onPanelAction` for sticky footer product actions such as Generate, Apply, Export, Copy, or Download.
|
|
118
127
|
- Keep final app behavior in the schema and runtime command bus, not in isolated local control state.
|
|
119
128
|
- For animated products, write an Animation Intent Inventory before coding: use top playback timeline for product transport, keyframes timeline for editable property animation, and no timeline only for explicitly autonomous decorative output with no video export. Any app with `Export Video` must enable the top Toolcraft timeline.
|
|
@@ -129,8 +138,8 @@ The signed local `AGENTS.md` and `docs/toolcraft/*` files are the mandatory work
|
|
|
129
138
|
- Before editing code from an approved spec, use `writing-plans` to produce a deterministic implementation plan focused on app files, tests, build, and browser verification.
|
|
130
139
|
- Before fixing any broken control, failed test, build failure, visual mismatch, export issue, or runtime regression, use `systematic-debugging` to find the root cause first.
|
|
131
140
|
- When the prompt includes a Figma URL, use Figma MCP/design context before implementation. Read the actual node, layer, component, variable, and asset structure; screenshots are only for final visual QA, not the source of truth.
|
|
132
|
-
- After implementation, use the `browser` workflow or equivalent local browser verification to test the running app, not only typecheck/build output. The default browser gate is `pnpm test:browser`; it excludes every Playwright test whose name contains `browser perf
|
|
133
|
-
- Run `pnpm ai:check` before app generation or major changes. It enforces local code health
|
|
141
|
+
- After implementation, use the `browser` workflow or equivalent local browser verification to test the running app, not only typecheck/build output. The default browser gate is `pnpm test:browser`; it excludes every Playwright test whose name contains `browser perf:`. Protected delivery owns exact targeted performance iterations. The complete matrix is reserved for the operator/CI `pnpm verify:perf` command.
|
|
142
|
+
- Run `pnpm ai:check` before app generation or major changes. It enforces local code health and the product AST boundary. With an explicit `--no-install` generation the AST pass reports that it is deferred; normal `pnpm test` and every final gate require installed dependencies and run the full boundary.
|
|
134
143
|
- If a workflow skill is missing and installation is available, install it and refresh the session. If installation is unavailable or the app was generated with `--no-skills`, continue through the equivalent signed local workflow instead of stopping or weakening verification.
|
|
135
144
|
- Do not silently ignore a missing workflow capability: follow the matching local requirement in this file and `docs/toolcraft/workflow.md`, and record the fallback in the implementation plan or worklog.
|
|
136
145
|
- The Toolcraft app contract overrides generic brainstorming approval and visual-companion rituals. If the user asks to build or port an app, that request is approval to produce the spec, plan, implementation, tests, build, and local run unless a product-critical ambiguity remains.
|
|
@@ -140,7 +149,7 @@ The signed local `AGENTS.md` and `docs/toolcraft/*` files are the mandatory work
|
|
|
140
149
|
|
|
141
150
|
## Verification Tier Classifier
|
|
142
151
|
|
|
143
|
-
Before editing, write
|
|
152
|
+
Before editing, write one short verification note for the coherent delivery batch:
|
|
144
153
|
|
|
145
154
|
```md
|
|
146
155
|
Verification tier: Tier N
|
|
@@ -151,39 +160,38 @@ Skip: <checks not needed for this pass and why>
|
|
|
151
160
|
|
|
152
161
|
Choose the tier by blast radius, not by line count. If uncertain, move one tier higher, not automatically to the full final gate.
|
|
153
162
|
|
|
154
|
-
| Tier
|
|
155
|
-
|
|
|
156
|
-
| Tier 0 — docs/copy
|
|
157
|
-
| Tier 1 — local control presentation
|
|
158
|
-
| Tier 2 — schema/product behavior
|
|
159
|
-
| Tier 3 — renderer/canvas/runtime feature
|
|
160
|
-
| Tier 4 — final delivery/template architecture | Fresh generated app completion, folder export, commit-ready delivery, dependency changes, runtime/template/contract/CLI changes, broad refactors, or major post-generation iterations that rewrite renderer, canvas, animation, timeline/keyframes, layers, media, export, or control mapping. | Fresh folders run `pnpm install` once.
|
|
163
|
+
| Tier | Use When | Required Checks |
|
|
164
|
+
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
165
|
+
| Tier 0 — docs/copy | Documentation, comments, copy, labels, or titles change without schema targets, values, runtime behavior, renderer output, or layout mechanics. | Targeted docs/typecheck or targeted app test. Browser is not required unless visual text fitting is the risk. |
|
|
166
|
+
| Tier 1 — local control presentation | One control or panel visual state changes: spacing, hover, focus, disabled, marker visibility, label fit, or component variant display. Runtime state shape and product renderer are unchanged. | Targeted unit/component test plus one focused browser check for the affected control or panel. |
|
|
167
|
+
| Tier 2 — schema/product behavior | Controls, sections, defaults, persistence, panel actions, export actions, acceptance rows, or product behavior mapping changes. | During development run relevant targeted tests and browser acceptance. At delivery, bare `pnpm verify:delivery` derives the required proof. |
|
|
168
|
+
| Tier 3 — renderer/canvas/runtime feature | Custom renderer, animation loop, canvas sizing, upload/media, timeline, layers, toolbar, export bytes, WebGL/Canvas/SVG output, zoom, radar, history, heavy control behavior changes, or a post-generation iteration that touches renderer workload or viewport stability. | During development run targeted functional and browser acceptance checks. The tier and changed surface do not authorize measured performance. At delivery, `verify:delivery` runs ownership-derived functional proof unless exact request authority creates one performance iteration. |
|
|
169
|
+
| Tier 4 — final delivery/template architecture | Fresh generated app completion, folder export, commit-ready delivery, dependency changes, runtime/template/contract/CLI changes, broad refactors, or major post-generation iterations that rewrite renderer, canvas, animation, timeline/keyframes, layers, media, export, or control mapping. | Fresh folders run `pnpm install` once. Run `pnpm verify:delivery` once when the coherent batch is ready, then start `pnpm dev`. Its protected lifecycle selects functional proof or an exact targeted performance iteration from the request and prior receipt state. |
|
|
161
170
|
|
|
162
171
|
Do not rerun `pnpm install` after every edit. Run it after fresh export, dependency changes, lockfile changes, or a missing package error.
|
|
163
172
|
|
|
164
173
|
Do not run the full browser performance suite for Tier 0-2 edits.
|
|
165
174
|
|
|
166
|
-
|
|
175
|
+
The automatic lifecycle is sequential. First product delivery uses bare `pnpm verify:delivery` for complete product contracts, one production build, full functional acceptance, and zero measured performance. Later delivery is functional-targeted: it compares the immediately previous and current semantic functional proof models and derives exact direct-owner, domain, and affected-unit-graph proof. A performance complaint may authorize one targeted iteration; a full audit remains explicit-only. The canonical selection and evidence rules live in `docs/toolcraft/workflow.md`, `docs/toolcraft/acceptance-testing.md`, and `docs/toolcraft/performance.md`; do not duplicate their algorithm here.
|
|
167
176
|
|
|
168
|
-
Feature loops after the first working version
|
|
177
|
+
Feature loops after the first working version run only the smallest focused functional and browser checks while implementation is changing, then one bare `verify:delivery` at the coherent boundary. Do not rerun aggregate, export, or performance matrices after every edit. An unchanged `sourceHash` uses the protected fast path and does not recollect semantic proof inputs.
|
|
169
178
|
|
|
170
|
-
The
|
|
179
|
+
The app is not complete until bare `pnpm verify:delivery` produces the lifecycle-appropriate protected receipt. An initial functional receipt proves complete functional acceptance without measured performance; later functional receipts prove exact ownership-derived checks. Agent-controlled browser checks remain useful for targeted diagnosis and visual verification, but terminal prose cannot mint or upgrade a receipt. The impact inventory derives the required checks and affected passes from the immediately previous successful delivery. Tier is human diagnostic vocabulary only and never grants execution authority.
|
|
171
180
|
|
|
172
181
|
## Required Checks
|
|
173
182
|
|
|
174
|
-
For
|
|
183
|
+
For a coherent delivery batch, run:
|
|
175
184
|
|
|
176
185
|
```bash
|
|
177
|
-
|
|
178
|
-
pnpm verify:final
|
|
186
|
+
pnpm verify:delivery
|
|
179
187
|
pnpm dev
|
|
180
188
|
```
|
|
181
189
|
|
|
182
|
-
|
|
190
|
+
The protected runner selects first-delivery functional proof, later `functional-targeted` ownership-derived proof, or one complaint-authorized targeted performance iteration from protected state. `pnpm verify:perf` is the separate operator/CI full-audit command; run it only after an explicit user request or accepted agent offer, never as an inferred continuation of a complaint.
|
|
183
191
|
|
|
184
192
|
Use `pnpm install` before this final gate when the folder is fresh or dependencies changed.
|
|
185
193
|
|
|
186
|
-
|
|
194
|
+
`verify:delivery` runs the protected integrity checker directly and does not depend only on a mutable package script. `pnpm test` includes local docs and app tests. The internal `pnpm test:browser` gate runs against the real app UI and product output but excludes Playwright tests whose names contain `browser perf:`. The protected full-audit path builds and serves the current production bundle, then runs the complete browser performance matrix sequentially so budgets exclude dev-server transformation and unrelated parallel e2e noise.
|
|
187
195
|
|
|
188
196
|
Do not stop or kill existing local servers to free a port during a first start. `pnpm dev`, `pnpm preview`, and browser verification prefer port `3002`, but automatically move to the next free port only while assigning this app's first saved port. After a saved port exists, normal `pnpm dev` / `pnpm preview` uses that same port; if that port is already serving this app, report that existing URL instead of starting a duplicate. Use `TOOLCRAFT_PORT`, `TOOLCRAFT_DEV_PORT`, or `TOOLCRAFT_TEST_PORT` only to change the preferred starting port before a saved port exists. A dev/preview launch is successful only after the selected port serves this app's Toolcraft server identity endpoint plus the `toolcraft-app-title` marker from `index.html`; never report a URL just because some server is listening there. When deliberately restarting this app server, use `pnpm dev:restart` or `pnpm preview:restart`; restart mode reuses the previously saved app port, stops the listener on that exact port if it is still running, force-stops it if it does not release the port, starts on the same port again, and verifies the identity before saving/reporting the port.
|
|
189
197
|
|
|
@@ -197,15 +205,15 @@ The app is complete only when:
|
|
|
197
205
|
- every visible control affects runtime state and product output or a command side effect;
|
|
198
206
|
- reset returns schema controls to `defaultValue`;
|
|
199
207
|
- sticky footer export actions operate on final product output at `state.canvas.size`;
|
|
200
|
-
-
|
|
201
|
-
- PNG export uses the
|
|
208
|
+
- every product exposes Export PNG; products whose requested delivery includes animation also expose Export Video;
|
|
209
|
+
- PNG export uses the background controls normalized into runtime Setup: `Background` beside `Infinity canvas`, then `Background color`; live preview hides product background when Background is off, and video keeps background;
|
|
202
210
|
- every PNG export includes `Image Export` format/resolution `select` controls, and passes `export.image.resolution` into `createToolcraftPngExportCanvas`;
|
|
203
|
-
-
|
|
211
|
+
- products with both PNG and video export place `Image Export` immediately before `Video Export`;
|
|
204
212
|
- export paths use the standard export helpers: PNG uses selected image resolution or retina fallback, while video uses current canvas/output size or the selected 4K target;
|
|
205
213
|
- layers are absent for single-layer apps and fully working when enabled;
|
|
206
214
|
- timeline is absent, playback, keyframes, or custom reference timeline according to product behavior;
|
|
207
215
|
- performance checks cover workload and responsiveness for all relevant controls;
|
|
208
216
|
- detail-heavy or animated custom renderers pass real viewport drag and zoom stress checks;
|
|
209
|
-
- workload browser perf tests
|
|
217
|
+
- workload browser perf tests execute the compiled development or maximum fixture for the canonical derived path, apply every adapter value through the real UI, and observe every dimension before measurement;
|
|
210
218
|
- bounded numeric workload ranges and hard limits are derived from schema; scenario values cannot redefine them, custom metrics cannot bypass them, many-item fixtures apply at least 10 real items, and degraded ceilings prove every exact 10 percent step with matching scenario/target identity;
|
|
211
219
|
- browser tests verify upload/clear, controls, canvas sizing, toolbar, timeline/layers when enabled, sticky actions, output dimensions, and viewport stability.
|