@pixel-point/toolcraft 0.0.15 → 0.0.17
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 +314 -0
- package/src/generate-test-dependency-sandbox.mjs +195 -0
- package/src/generate-test-doc-assertions.mjs +336 -10
- package/src/generate-test-doc-assertions.test.mjs +65 -0
- package/src/generate-test-file-assertions.mjs +258 -53
- 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-output-assertions.mjs +95 -0
- package/src/generate-test-package-assertions.mjs +81 -11
- package/src/generate-test-performance-boundary-assertions.mjs +45 -0
- package/src/generate-test-product-fixture.mjs +86 -7
- package/src/generate-test-product-fixture.test.mjs +245 -0
- package/src/generate-test-product-iteration.mjs +279 -0
- package/src/generate-test-product-iteration.test.mjs +242 -0
- package/src/generate-test-standalone-assertions.mjs +87 -149
- package/src/generate-test-standalone-delivery-stages.mjs +194 -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 +90 -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 +59 -13
- package/templates/runtime/contracts/component-contracts.choices.ts +61 -17
- 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 +67 -78
- package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +1 -1
- package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +17 -3
- package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +24 -8
- package/templates/runtime/contracts/component-contracts.runtime.ts +82 -40
- 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 +127 -11
- package/templates/runtime/contracts/decision-contracts.ts +84 -7
- 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 +182 -0
- package/templates/runtime/contracts/performance-verification-policy.ts +52 -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/artifact-download.test.ts +71 -0
- package/templates/runtime/export/artifact-download.ts +80 -0
- package/templates/runtime/export/artifact-export-request.ts +23 -0
- package/templates/runtime/export/artifact-export-settings.test.ts +75 -0
- package/templates/runtime/export/artifact-export-settings.ts +96 -0
- package/templates/runtime/export/artifact-frame-renderer.test.ts +107 -0
- package/templates/runtime/export/artifact-frame-renderer.ts +96 -0
- package/templates/runtime/export/artifact-frame-state.test.ts +54 -0
- package/templates/runtime/export/artifact-frame-state.ts +44 -0
- package/templates/runtime/export/artifact-scene-frame.test.ts +84 -0
- package/templates/runtime/export/artifact-scene-frame.ts +118 -0
- package/templates/runtime/export/export-background.ts +65 -0
- package/templates/runtime/export/export-error.ts +43 -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 +24 -135
- package/templates/runtime/export/image-artifact-export.test.ts +111 -0
- package/templates/runtime/export/image-artifact-export.ts +145 -0
- package/templates/runtime/export/index.ts +16 -1
- package/templates/runtime/export/product-export-renderer.test.ts +77 -0
- package/templates/runtime/export/product-export-renderer.ts +63 -0
- package/templates/runtime/export/video-artifact-export.test.ts +166 -0
- package/templates/runtime/export/video-artifact-export.ts +164 -0
- package/templates/runtime/export/video-encoding-backend.ts +124 -0
- package/templates/runtime/export/video-encoding-policy.test.ts +68 -0
- package/templates/runtime/export/video-encoding-policy.ts +86 -0
- package/templates/runtime/export/video-frame-schedule.test.ts +58 -0
- package/templates/runtime/export/video-frame-schedule.ts +42 -0
- package/templates/runtime/index.ts +11 -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-runtime.test.tsx +291 -0
- package/templates/runtime/react/app-shell/runtime-public-api-test-support.ts +21 -0
- package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +93 -9
- 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 +53 -0
- package/templates/runtime/react/app-shell/toolcraft-app.test.tsx +10 -55
- package/templates/runtime/react/app-shell/toolcraft-app.tsx +91 -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 +426 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-context.tsx +287 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-owner.test.ts +194 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-owner.ts +227 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-provider-ownership.test.tsx +243 -0
- package/templates/runtime/react/app-shell/toolcraft-source-asset-test-support.ts +51 -0
- package/templates/runtime/react/app-shell/toolcraft-store-context.tsx +18 -0
- package/templates/runtime/react/app-shell/toolcraft-unavailable-resource-proof.test.ts +138 -0
- package/templates/runtime/react/app-shell/toolcraft-unavailable-resource-proof.ts +378 -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 +45 -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 +121 -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 +118 -13
- package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +62 -0
- 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 +228 -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 +109 -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 +189 -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/canvas-render-scale.ts +62 -0
- 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 +102 -14
- package/templates/runtime/schema/define-toolcraft.setup-settings-transfer.test.ts +61 -1
- package/templates/runtime/schema/define-toolcraft.ts +33 -56
- 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 -74
- package/templates/runtime/schema/types.ts +171 -21
- 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 +79 -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 +314 -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 +111 -99
- 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 +49 -40
- package/templates/starter/NOTICE.md +6 -0
- package/templates/starter/docs/toolcraft/README.md +15 -16
- package/templates/starter/docs/toolcraft/acceptance-testing.md +90 -35
- package/templates/starter/docs/toolcraft/agent-worklog.md +121 -22
- package/templates/starter/docs/toolcraft/assembly-workflow.md +31 -14
- 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 +111 -67
- package/templates/starter/docs/toolcraft/core/runtime-boundary.md +17 -3
- package/templates/starter/docs/toolcraft/core/setup-export.md +50 -22
- package/templates/starter/docs/toolcraft/core/timeline-animation.md +6 -5
- 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 +127 -141
- package/templates/starter/docs/toolcraft/renderer-technique.md +90 -25
- package/templates/starter/docs/toolcraft/schema-reference.md +201 -49
- package/templates/starter/docs/toolcraft/workflow.md +40 -20
- package/templates/starter/e2e/app-browser-control-coverage.spec.ts +33 -54
- package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +128 -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 +247 -0
- package/templates/starter/e2e/app-browser-render-scale-requirements.spec.ts +147 -0
- package/templates/starter/e2e/app-browser-runtime-provenance.spec.ts +20 -64
- package/templates/starter/e2e/app-browser-runtime-reporter.spec.ts +135 -50
- package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +181 -45
- package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +33 -56
- package/templates/starter/e2e/app-browser-shell.spec.ts +13 -5
- 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 +11 -0
- package/templates/starter/e2e/app-performance.spec.ts +56 -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 +408 -0
- package/templates/starter/e2e/browser-infinity-canvas-unavailable-image-evidence.ts +370 -0
- package/templates/starter/e2e/browser-layer-evidence-helpers.ts +66 -9
- package/templates/starter/e2e/browser-media-export-evidence.spec.ts +77 -0
- package/templates/starter/e2e/browser-media-export-evidence.ts +208 -0
- 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 +253 -0
- package/templates/starter/e2e/browser-runtime-evidence-reporter-test-fixtures.ts +55 -0
- package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +149 -4
- package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +170 -55
- package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +57 -0
- package/templates/starter/e2e/browser-standard-timeline-evidence.ts +106 -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/decoded-pixel-observation.spec.ts +74 -0
- package/templates/starter/e2e/decoded-pixel-observation.ts +227 -0
- package/templates/starter/e2e/export-artifact-helpers.ts +206 -25
- package/templates/starter/e2e/image-artifact-inspection.spec.ts +41 -0
- package/templates/starter/e2e/image-artifact-inspection.ts +99 -0
- 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 +29 -28
- package/templates/starter/e2e/performance-canvas-quality-guard.spec.ts +312 -0
- package/templates/starter/e2e/performance-canvas-quality-guard.ts +196 -0
- package/templates/starter/e2e/performance-canvas-quality-observer.ts +351 -0
- 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 +304 -0
- package/templates/starter/e2e/performance-path-helpers.ts +410 -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 +210 -0
- package/templates/starter/e2e/performance-pipeline-evidence-test-fixtures.ts +418 -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 +402 -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 +368 -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/e2e/video-artifact-inspection.spec.ts +64 -0
- package/templates/starter/e2e/video-artifact-inspection.ts +281 -0
- package/templates/starter/gitignore +1 -0
- package/templates/starter/index.html +8 -0
- package/templates/starter/package.json +15 -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 +66 -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 +342 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +166 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +430 -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 +338 -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 +87 -51
- package/templates/starter/scripts/toolcraft-product-boundary-graph-evidence.test.mjs +161 -0
- package/templates/starter/scripts/toolcraft-product-boundary.mjs +116 -129
- package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +92 -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 +269 -1
- package/templates/starter/scripts/toolcraft-product-evidence-import-policy.mjs +43 -0
- package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +168 -0
- 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.d.mts +73 -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-helpers.mjs +318 -0
- package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +388 -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 +139 -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 +373 -207
- package/templates/starter/scripts/toolcraft-vite-env-activation.test.mjs +200 -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/export-artifact-coverage.ts +113 -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/output-export.ts +13 -2
- 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 +73 -63
- package/templates/starter/src/app/acceptance/validate-coverage.ts +78 -5
- 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.export-artifact.test.ts +131 -0
- 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 +17 -6
- 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 +52 -21
- 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 +31 -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 +103 -87
- package/templates/starter/src/app/starter-performance.fixture-helper.test.ts +191 -0
- package/templates/starter/src/app/starter-performance.gates.test.ts +379 -80
- package/templates/starter/src/app/starter-performance.lifecycle.test.ts +261 -0
- 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 +33 -2
- package/templates/starter/src/router.tsx +3 -0
- package/templates/starter/src/routes/index.tsx +4 -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/export/export.ts +0 -281
- 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
|
@@ -9,16 +9,16 @@ Every visible product entity must prove it works. A control is not accepted beca
|
|
|
9
9
|
- `src/app/app-acceptance-data.ts`
|
|
10
10
|
- app-specific tests under `src/app` outside the reserved `app-acceptance.*` framework namespace
|
|
11
11
|
- `src/app/app-performance.ts`
|
|
12
|
+
- `src/app/app-verification-impact.json` (presentation, functional, and performance ownership with nearest acceptance ids and exact performance pass ids)
|
|
12
13
|
- `src/app/app-performance.test.ts`
|
|
13
14
|
- `docs/toolcraft/agent-worklog.md`
|
|
14
15
|
- `e2e/app-browser-acceptance.spec.ts`
|
|
15
16
|
- `e2e/app-controls.spec.ts`
|
|
16
17
|
- `e2e/app-performance.spec.ts`
|
|
18
|
+
- `e2e/app-kernel-benchmarks.ts`
|
|
17
19
|
- `e2e/product-observable-helpers.ts`
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
A full performance checkpoint is triggered only by the first working app version, or by a user request to optimize performance, fix lag, remove jank, speed up animation, stabilize drag/zoom, or otherwise investigate poor performance.
|
|
21
|
+
Use focused checks during edits. First delivery and later delivery run bare `pnpm verify:delivery` per `workflow.md`. Performance complaint authority adds an iteration; explicit full audit authority permits `pnpm verify:perf`.
|
|
22
22
|
|
|
23
23
|
## Product Readiness
|
|
24
24
|
|
|
@@ -27,14 +27,23 @@ The exported starter may keep `appProductReadiness.mode: "starter"` only while i
|
|
|
27
27
|
- `productName`;
|
|
28
28
|
- `productSummary`;
|
|
29
29
|
- `requestedBehavior`.
|
|
30
|
+
- `viewInteraction`.
|
|
31
|
+
|
|
32
|
+
`viewInteraction` classifies the product as `non-spatial`, `orbit`,
|
|
33
|
+
`fixed-camera`, or `timeline-camera`. Editable spatial scenes default to orbit;
|
|
34
|
+
fixed/timeline modes require explicit request/reference evidence.
|
|
30
35
|
|
|
31
36
|
Product readiness also requires product surface: controls, layers, timeline, `canvasContent`, or acceptance coverage. A renamed product folder must not pass tests as a neutral starter.
|
|
32
37
|
|
|
33
38
|
## Implementation Worklog
|
|
34
39
|
|
|
35
|
-
Product apps must update `docs/toolcraft/agent-worklog.md` before final delivery. The file records why the app chose its renderer, timeline mode, layer policy, control grouping, export behavior, and performance strategy.
|
|
40
|
+
Product apps must update `docs/toolcraft/agent-worklog.md` before final delivery. The file records why the app chose its renderer, view interaction mode, timeline mode, layer policy, control grouping, export behavior, and performance strategy.
|
|
41
|
+
|
|
42
|
+
The worklog must declare `Mode: product`. Every `Decision Trail` records human intent: `Request:`, `Task type:`, `User-visible result:`, `Source/reference checked:`, `Reference inputs:`, `Docs/contracts read:`, `Contract rules applied:`, `View interaction intent:`, `Interaction ownership:`, `Decision:`, `Alternatives rejected:`, `State/output mapping:`, `Performance intent:`, bare-delivery `Verification:`, and `Risks:`. Steering within one request stays in that batch. `Reference inputs:` lists every prompt/reference asset or `None`; `State/output mapping:` connects state to visible output or export.
|
|
36
43
|
|
|
37
|
-
|
|
44
|
+
Each decision section (`Renderer`, `View Interaction`, `Interaction Ownership`, `Timeline`, `Layers`, `Controls`, `Export`, `Performance`) includes `Decision:`, `Reason:`, and `Evidence:`. View interaction records mode, source, alternatives, and orientation targets. Performance records the modeled workload, pass lifecycle, assessment, and affected paths. A complaint adds an exact `Performance request evidence:` quote and unique canonical `Performance paths:`.
|
|
45
|
+
|
|
46
|
+
Protected receipts own changed files, the immutable plan, executed checks, reports, measurements, and pass/fail evidence. A Decision Trail does not duplicate those fields or supply command-shaped authority. `Risks` includes either `Risk:` entries or `None:` with a reason.
|
|
38
47
|
|
|
39
48
|
The acceptance gate fails if the worklog is missing, still says `Mode: starter`, or lacks concrete decision evidence.
|
|
40
49
|
|
|
@@ -58,29 +67,44 @@ Each row should name:
|
|
|
58
67
|
- `canvasSizingCoverage: "fixed-output-size"` only for non-product/internal `fixed-output` fixtures.
|
|
59
68
|
- `canvasSizingCoverage: "intrinsic-media-size"` only for explicit media-viewer/source-native upload apps where imported media natural dimensions intentionally own `canvas.size`.
|
|
60
69
|
- `persistenceCoverage: "reload"` when schema `persistence.storage` is `"localStorage"`.
|
|
70
|
+
- `persistenceSlices` exactly equal to resolved `schema.persistence.include` for reload coverage.
|
|
61
71
|
- `timelineLoopProof` on playback rows whose `timelinePlaybackCoverage` includes `"loop"`. It declares `direction: "forward-only"`, `reversePlayback: "forbidden"`, `seam: "first-last-match"`, and `durationChange: "reproved-after-edit"`; browser evidence still proves the real sampled frames.
|
|
62
72
|
|
|
63
73
|
The test gate rejects rows unless the real Vitest and Playwright runners select exactly one product-owned test with the declared name and that test finishes passed. A matching name in a comment, string, local fake runner, focused/skipped test, conditional branch, or uncalled registration function is not execution evidence.
|
|
64
74
|
|
|
65
|
-
|
|
75
|
+
Protected Vitest and Playwright reporters evaluate passed runner results plus matching runtime evidence instead of test-source spelling. They reject missing, duplicate, skipped, failed, retry-failed, invalid, or forged evidence.
|
|
76
|
+
|
|
77
|
+
`src/app/app-acceptance.ts`, `src/app/acceptance`, supplied `app-acceptance.*` meta-tests, and the generic browser harness are framework-owned and signed. Edit only `app-acceptance-data.ts` for product rows/readiness/inventory/transfer intent. Put registered browser scenarios in `e2e/product-<domain>.spec.ts`; reserve `app-controls.spec.ts` for unregistered smoke checks or the `app` domain.
|
|
66
78
|
|
|
67
|
-
|
|
79
|
+
The `e2e/app-browser-*` prefix is reserved for signed framework specs.
|
|
68
80
|
|
|
69
|
-
|
|
81
|
+
## Semantic Proof Ownership
|
|
70
82
|
|
|
71
|
-
|
|
83
|
+
Every runtime production module/resource has a direct owner in `src/app/app-verification-impact.json`; proof and test paths cannot own them. Each browser file owns one acceptance domain (the first ID segment). Later delivery compares semantic models and selects changed contracts, owners/domains, and product-unit tests—not filenames or reverse imports. Additive owner deltas select only new IDs; other deltas retain affected IDs.
|
|
84
|
+
|
|
85
|
+
Classifier output establishes complaint authority only; unresolved localization creates no intent/path regardless of result. Only localized/clarified work starts an iteration.
|
|
86
|
+
|
|
87
|
+
Contract docs are signed except product-owned `agent-worklog.md` and optional `workflow-observation.md`; only the observation stays outside `sourceHash`.
|
|
72
88
|
|
|
73
89
|
Framework meta-tests are product-invariant: their synthetic validator cases use protected neutral contract fixtures, never the editable app schema, product acceptance rows, transfer intent, or section inventory. Put exact product targets, defaults, option values, and product-specific expectations in separate app-owned tests. The product gates still read `app-schema.ts`, `app-acceptance-data.ts`, product test names, worklog evidence, and browser scenarios dynamically.
|
|
74
90
|
|
|
75
|
-
The same ownership split applies to performance: edit `app-performance.ts`,
|
|
91
|
+
The same ownership split applies to performance: edit `app-performance.ts`, `app-verification-impact.json`, product performance path adapters, and the kernel candidate harness when assessment requires it. Do not edit supplied `app-performance.*` meta-tests, protected reporters, receipt writers, or `app-performance-test-utils.ts`; they validate product inputs and own execution evidence.
|
|
76
92
|
|
|
77
93
|
Slider and range slider rows must prove live behavior. Browser tests should drag the real thumb and assert the runtime value and product-level canvas observable update during the drag, not only after pointer release, blur, an Apply action, or a final commit. Performance-sensitive sliders still need this live acceptance; jank is handled through renderer optimization and targeted performance coverage, not by making the slider deferred by default.
|
|
78
94
|
|
|
79
|
-
`fixed-output`
|
|
95
|
+
`fixed-output` is invalid for generated product/export apps; prompt/reference dimensions are editable `canvas.size` defaults. Use `intrinsic-media` only for source-native viewers. Product background/source uploads stay `editable-output`; browser proof uses a mismatched aspect ratio to confirm upload preserves canvas size and renders cover/crop.
|
|
96
|
+
|
|
97
|
+
## Infinity Canvas Coverage
|
|
98
|
+
|
|
99
|
+
Every editable-output app proves `infinityCanvasCoverage` mode/restoration. With Background, proof changes its color, verifies the infinite viewport, turns it off to restore finite mode/disable Infinity, then on without enabling Infinity. Image/video proof decodes scene-bounds output from `sceneBoundsProvider`; runtime video unions exact bounds from every scheduled frame state. Fixed recipes cover excluded content and exact empty, unavailable, and oversized failures. See `core/setup-export.md`.
|
|
100
|
+
|
|
101
|
+
## Render Scale Coverage
|
|
80
102
|
|
|
81
|
-
|
|
103
|
+
For a raster product with render scale, add one `canvas.renderScale` browser row: `renderScaleCoverage: { kind: "selected-backing-pixels", states: ["interaction", "steady"] }`; timeline adds `"playback"`.
|
|
82
104
|
|
|
83
|
-
|
|
105
|
+
Run `expectToolcraftCanvasRenderScaleEvidence` per state. CSS size stays fixed and backing must equal `CSS × devicePixelRatio × selected scale` within one pixel before `canvas-render-scale-backing`; mismatch fails. Every measured path in that product proves exact `CSS × devicePixelRatio × 2` after each phase.
|
|
106
|
+
|
|
107
|
+
Default local persistence requires one runtime row with `evidence: "persistence-state"`, `persistenceCoverage: "reload"`, and `persistenceSlices` equal to the resolved plan. Browser proof changes each slice, waits for status `success`, reloads, then verifies restored state and real output before evidence. Settings import/export is not reload proof.
|
|
84
108
|
|
|
85
109
|
## Compound Controls
|
|
86
110
|
|
|
@@ -88,19 +112,19 @@ Compound controls have multiple semantic value parts inside one visible control.
|
|
|
88
112
|
|
|
89
113
|
Required parts:
|
|
90
114
|
|
|
91
|
-
| Control
|
|
92
|
-
|
|
|
93
|
-
| `anchorGrid`
|
|
94
|
-
| `channelMixer`
|
|
95
|
-
| `collectionActions` | `collectionActions.add`, `collectionActions.remove`, `collectionActions.items`
|
|
96
|
-
| `colorOpacity`
|
|
97
|
-
| `curves`
|
|
98
|
-
| `fontPicker`
|
|
99
|
-
| `gradient`
|
|
100
|
-
| `palette`
|
|
101
|
-
| `rangeInput`
|
|
102
|
-
| `rangeSlider`
|
|
103
|
-
| `vector`
|
|
115
|
+
| Control | Required `controlPartCoverage` |
|
|
116
|
+
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
117
|
+
| `anchorGrid` | `anchorGrid.position` |
|
|
118
|
+
| `channelMixer` | `channelMixer.activeChannel`, `channelMixer.values`; only for RGB channel matrix behavior |
|
|
119
|
+
| `collectionActions` | `collectionActions.add`, `collectionActions.remove`, `collectionActions.items` |
|
|
120
|
+
| `colorOpacity` | `colorOpacity.hex`, `colorOpacity.opacity` |
|
|
121
|
+
| `curves` | RGB variant: `curves.activeChannel`, `curves.points`; `variant: "single"`: `curves.points` |
|
|
122
|
+
| `fontPicker` | `fontPicker.fontId`, `fontPicker.fontWeight`, `fontPicker.fontSize`, `fontPicker.letterSpacing`, `fontPicker.lineHeight`, `fontPicker.textCase`, `fontPicker.color`, `fontPicker.opacity` |
|
|
123
|
+
| `gradient` | `gradient.gradientType`, `gradient.angle`, `gradient.stops.position`, `gradient.stops.color`, `gradient.stops.opacity` |
|
|
124
|
+
| `palette` | `palette.family`, `palette.shade` |
|
|
125
|
+
| `rangeInput` | `rangeInput.start`, `rangeInput.end` |
|
|
126
|
+
| `rangeSlider` | `rangeSlider.lower`, `rangeSlider.upper` |
|
|
127
|
+
| `vector` | `vector.x`, `vector.y` |
|
|
104
128
|
|
|
105
129
|
Testing only one sub-control is not enough. For example, a `gradient` test that changes only a stop color must fail if the app also renders Gradient type, Angle, Position, or Opacity controls.
|
|
106
130
|
|
|
@@ -112,6 +136,19 @@ For `fontPicker`, product output evidence must come from actual rendered/exporte
|
|
|
112
136
|
|
|
113
137
|
For `vector`, acceptance must prove both axes affect output and that the pad represents a user-authored stable two-axis parameter. Do not accept `vector` controls for current animation state, keyboard/pointer movement, physics state, timeline phase, velocity, target pose, current pose, or simulated position/direction; those belong to timeline/input/simulation state plus higher-level tuning controls such as Speed, Step, Spread, Path, Duration, or Timeline.
|
|
114
138
|
|
|
139
|
+
For `orientationGizmo`, use one `kind: "canvas-handle"` row per declared handle whose `canvasHandle.writesTarget` is the schema pose target and whose `testId` is `toolcraft-orientation-gizmo`. Declare `orientationGizmoCoverage: "all-required-orientation-gizmo-behavior"` or every required part: axis drag, axis snap, model drag, canvas miss-pan, shared pose/output, undo/reset, and export-clean.
|
|
140
|
+
|
|
141
|
+
Orientation coverage begins with product readiness, not with an already-present
|
|
142
|
+
control. Every product declares `viewInteraction`. `orbit` must list a non-empty,
|
|
143
|
+
unique set of targets that exactly matches all schema `orientationGizmo`
|
|
144
|
+
targets. `non-spatial`, `fixed-camera`, and `timeline-camera` reject direct-orbit
|
|
145
|
+
gizmos. Fixed and timeline camera modes require explicit request/reference
|
|
146
|
+
evidence; timeline camera additionally requires timeline playback or keyframes
|
|
147
|
+
intent and an enabled Toolcraft timeline. This prevents a renderer from silently
|
|
148
|
+
choosing a fixed camera and thereby escaping gizmo acceptance.
|
|
149
|
+
|
|
150
|
+
Use protected `expectToolcraftOrientationAxisDrag`/`AxisSnap`/`ModelDrag`/`CanvasMissPan`/`UndoReset` recipes. Axis drag finds blank circular background and performs the pointer drag; axis snap projects and clicks the requested endpoint from canonical pose. Evidence follows pose/output/ownership/history assertions. Arbitrary mutations, endpoint-only or generic drag, source spelling, and value changes do not qualify. Use `expectExportExcludesCanvasHandles` for export-clean proof.
|
|
151
|
+
|
|
115
152
|
## Control Selection Gates
|
|
116
153
|
|
|
117
154
|
Acceptance must catch wrong-substitution failures. If the prompt, spec, or app behavior needs a value model owned by a built-in control, the schema must use that built-in or include a documented built-in fit check.
|
|
@@ -126,12 +163,23 @@ High-confidence wrong-substitution cases:
|
|
|
126
163
|
- from/to range without `rangeSlider` or `rangeInput`;
|
|
127
164
|
- curve, remap, easing, or response without `curves`;
|
|
128
165
|
- manual stable two-axis position, direction, focus, anchor, light, or vector parameters without `vector`;
|
|
166
|
+
- user-rotatable 3D model/view orientation implemented as `vector`, paired sliders, axis buttons, or custom gizmo instead of `orientationGizmo`;
|
|
167
|
+
- a visible editable spatial scene classified as fixed/non-spatial without explicit request or inspected-reference evidence;
|
|
129
168
|
- source upload without `fileDrop`;
|
|
130
169
|
- app-wide transport in the controls panel instead of timeline;
|
|
131
170
|
- segmented choices that clip instead of falling back to `select`;
|
|
132
171
|
- custom controls recreating built-ins.
|
|
172
|
+
- one user operation mirrored across canvas and panel, even when the two copies use different labels, ids, or chrome.
|
|
173
|
+
|
|
174
|
+
## Interaction Ownership Evidence
|
|
133
175
|
|
|
134
|
-
|
|
176
|
+
Product readiness declares `interactionOwnership`. Canvas handles, custom interactions, and panel controls sharing a canvas target bind `interactionId`. Acceptance rejects one id on both surfaces, renamed copies of the same target/capability, bad links, or choices lacking evidence and an alternate-surface reason. Distinct capabilities may share state across surfaces and are proved separately.
|
|
177
|
+
|
|
178
|
+
`fileDrop` rows prove upload/admission, clear/remove, reset/default restoration, and binary/model lifecycle. Without Layers ownership they also prove image rotate/flip and `multiple` reorder. With `panels.layers` and typed media-management ownership, omit those claims from `fileDrop`: runtime `layerCoverage: "reorder"` and `"selected-layer-controls"` rows prove order and selected-transform output. Clear-only proof is invalid; Reset restores defaults or removes uploaded media.
|
|
179
|
+
|
|
180
|
+
A model `fileDrop` row declares `modelImportCoverage: "all-required-model-import-behavior"` or every typed item: `advertised-format-import`, `staged-preview`, `clean-commit`, `package-extraction`, `deterministic-root-selection`, `appearance-preservation`, `fallback-appearance`, `presentation-consumer-readiness`, `pixel-output`, `repairable-diagnosis`, `repair-action`, `repair-progress`, `verified-repair`, `fatal-rejection`, `persistence-restore`, `resource-unavailable`, `preview-output`, `export-output`, and `history-reset`.
|
|
181
|
+
|
|
182
|
+
Protected browser evidence imports every format plus folder/ZIP; proves first-root choice, runtime/custom readiness, nontransparent RGBA, and authored signatures versus fallback. Metadata, changed pose, or a canvas node is not proof. Fatal input keeps the prior commit. `Fix model` requires a deterministic topology plan and verified result; appearance warnings never expose it. Processing preview is `40%`; committed preview/export is `100%`. Both share document, appearance key, pose pixels, and omit gizmo chrome. Reload proves repository-backed appearance; corrupt refs become `unavailable`. History/reset proves removal, enabled undo/redo, and default restore through import.
|
|
135
183
|
|
|
136
184
|
Rows that use custom controls must include `customControlCoverage` and typed `builtInFitCheck`.
|
|
137
185
|
|
|
@@ -155,6 +203,11 @@ builtInFitCheck: {
|
|
|
155
203
|
|
|
156
204
|
The fit check declares broad typed capabilities, names real checked built-ins, the closest built-in or `"none"`, why it is insufficient, and the product-observable evidence that proves the custom control works. At least one of `custom-interaction`, `custom-value-model`, or `custom-visualization` is required; collection/command chrome alone does not justify custom UI.
|
|
157
205
|
|
|
206
|
+
A fit check containing `custom-interaction` also requires `interactionId` and a
|
|
207
|
+
panel ownership entry. The fit check compares built-in controls; ownership
|
|
208
|
+
separately proves why the operation belongs in the panel instead of directly on
|
|
209
|
+
the canvas. Passing one gate never bypasses the other.
|
|
210
|
+
|
|
158
211
|
For collection-like custom controls, the fit check must include `collectionActions` and `actions`. Collection-like is decided from the runtime value model and workflow: arrays, `{ items: [...] }` objects, selected-item state, grow/shrink item sets, ordering, add, remove, delete, or reorder behavior. Acceptance should fail if the row compares only unrelated built-ins such as `vector` or `select` while the actual value model is a collection.
|
|
159
212
|
|
|
160
213
|
Custom controls cannot be justified by icons, layout, styling, compactness, or custom buttons alone. `whyInsufficient` must name the product interaction or value model that built-ins cannot express.
|
|
@@ -173,13 +226,15 @@ Valid acceptance evidence includes:
|
|
|
173
226
|
- changed timeline playback state plus rendered frame.
|
|
174
227
|
- restored persisted value or product output after browser reload.
|
|
175
228
|
|
|
176
|
-
Product apps must include output delivery acceptance.
|
|
229
|
+
Product apps must include output delivery acceptance. Every product needs `Export PNG` evidence. Apps whose requested delivery includes animation also need `Export Video` evidence; timeline playback or keyframes alone do not invent video delivery. Clipboard copy can be tested as an additional behavior, but it cannot replace export coverage.
|
|
230
|
+
|
|
231
|
+
Export-content proof is distinct from export mechanics: content inspects selected artifact semantics; mechanics proves lifecycle, format, dimensions, transport, and errors. Neither substitutes.
|
|
177
232
|
|
|
178
233
|
Every app with `Export PNG` must exercise the separate `Image Export` section: choose at least two `export.image.format` values, choose at least two `export.image.resolution` values, export the image, and decode the result to prove file type and actual pixel dimensions changed. Animated apps with both `Export PNG` and `Export Video` still need this image-export coverage; `Video Export` does not replace it.
|
|
179
234
|
|
|
180
|
-
|
|
235
|
+
Runtime Export acceptance must prove the sticky footer top accent indicator advances through real render/encode/download work and hides only after the artifact settles. Async non-export Download, Copy, Generate, or Apply acceptance must prove the indicator is visible while the returned `onPanelAction` Promise is pending, advances when `reportProgress(0..1)` is called, and hides after it settles.
|
|
181
236
|
|
|
182
|
-
Animated app acceptance
|
|
237
|
+
Animated app acceptance exercises two video formats and resolutions. It proves real bytes, dimensions, actual MIME/container or typed capability failure, timeline duration, 30 FPS timestamps/durations from actual encoded packet metadata, decoded product motion, current even-safe sizing, and aspect-preserving 4K inside 3840x2160. Renderer/encoder/muxer errors reject; `blobSize`, metadata alone, assumed FPS, synthetic frame counts, or substituted expectations are invalid. Animated output requires distinct decoded frame hashes.
|
|
183
238
|
|
|
184
239
|
Footer action acceptance must not include Reset. Reset is already available in the controls panel header and uses schema `defaultValue`; duplicating it in sticky `panelActions` fails acceptance.
|
|
185
240
|
|
|
@@ -187,14 +242,14 @@ Local `actions` acceptance must click every visible action and prove the nearby
|
|
|
187
242
|
|
|
188
243
|
`collectionActions` acceptance must click plus and minus in the real panel, prove the runtime target array length changes, prove `minItems` prevents invalid removal, prove `recommendedMaxItems` is not a hidden hard limit, and prove preview/export consumes the changed item list.
|
|
189
244
|
|
|
190
|
-
|
|
245
|
+
Image export proves background changes in preview/artifact/infinite viewport; Background off restores finite mode, disables Infinity, hides bounded preview background, and makes PNG transparent while JPEG/video stay opaque. Restoring it enables Infinity availability without entering that mode. Protected proof decodes real type, selected dimensions, product bounds/pixels, and pixel hash; bytes or dimensions alone are insufficient.
|
|
191
246
|
|
|
192
247
|
Hard acceptance semantics are typed, not inferred from English prose. Every `visibleWhen` acceptance row declares `visibilityCoverage` for both `hidden` and `visible`; the protected conditional-visibility recipe must remove the dependent target from the rendered panel and restore it through the same target-scoped gating control. The `export.includeBackground` row declares `backgroundOutputCoverage` for preview exclusion and transparent image alpha, plus preserved video background when the schema exposes video export. Its protected recipe verifies the preview transition, decodes a non-empty image artifact and checks background alpha, and inspects video background behavior when applicable. `expectedObservable` and `userAction` remain human-readable context and may use any language; matching words such as “hidden”, “PNG”, or “video” never satisfy these requirements by themselves.
|
|
193
248
|
|
|
194
249
|
Invalid final acceptance evidence:
|
|
195
250
|
|
|
196
251
|
- control exists;
|
|
197
|
-
- `data-*`
|
|
252
|
+
- app `data-*` or SVG signature changed;
|
|
198
253
|
- runtime state was mutated directly;
|
|
199
254
|
- DOM text changed but product output did not;
|
|
200
255
|
- shader uniform changed without output proof;
|
|
@@ -221,7 +276,7 @@ Specialized state, layer, compound, and timeline recipes begin with `createToolc
|
|
|
221
276
|
|
|
222
277
|
Exported-byte rows use `expectToolcraftExportedArtifact`. The action produces a non-empty artifact and the verifier returns a typed inspection with positive integer `byteLength`; decoded `width`, `height`, and `frameCount` are positive integers, `durationMs` is positive and finite, and `mediaType`/`contentHash` are non-empty strings when present. Missing/empty artifacts, void callbacks, `{ ok: true }`, fractional or zero-byte observations, and fractional decoded dimensions cannot emit evidence. Clean-export checks for canvas handles compare decoded product semantics through `contentHash` plus media metadata, not raw encoded bytes or file size, because two valid encoders may produce different bytes for the same output.
|
|
223
278
|
|
|
224
|
-
Specialized metadata adds evidence for the same row: canvas handles prove drag and a separate clean-export test compares real exported artifacts with handles visible and hidden; segmented/discrete controls use their protected layout helpers; every declared compound-control part uses `expectToolcraftCompoundControlPartOutcome` and gets its own `row-id#part` evidence;
|
|
279
|
+
Specialized metadata adds evidence for the same row: canvas handles prove drag and a separate clean-export test compares real exported artifacts with handles visible and hidden; segmented/discrete controls use their protected layout helpers; every declared compound-control part uses `expectToolcraftCompoundControlPartOutcome` and gets its own `row-id#part` evidence; layer selection emits only `layer-selection`; output rows separately use the public pixel/export helper. Other layer recipes emit base evidence only after output changes; reference parity uses `expectToolcraftReferenceParity` to compare the inspected result with the reference baseline. Playback uses the fixed `expectToolcraftTimeline*` recipes. Duration binds runtime duration and renderer cycle to the same expected value; scrub binds time to rendered output; pause/resume proves a stable paused window and resumed time/output; keyframes bind keyframe data, evaluated value, and output. Loop evidence requires normalized forward samples with exactly one end-to-start wrap, equal seam signatures, and the same proof again after changing duration. The reporter derives these requirements from acceptance plus schema; naming a helper in source or passing a desired evidence type to a generic helper is never proof.
|
|
225
280
|
|
|
226
281
|
Animated viewport tests must also prove that canvas drag, pan, pinch, zoom, and radar/center interactions suspend or coalesce non-essential animation preview work without changing the user's play/pause state. After the interaction, the renderer must resume from the correct timeline or autonomous time and keep canvas zoom/offset stable.
|
|
227
282
|
|
|
@@ -271,9 +326,9 @@ Component variants are acceptance requirements.
|
|
|
271
326
|
- Range sliders must stay full-width, start with different lower and upper defaults, and accept built-in manual range separators such as slash, hyphen, spaces, and dashes.
|
|
272
327
|
- Segmented controls must preserve cell padding and avoid label collision.
|
|
273
328
|
- Select, segmented, and image-picker controls should cover every visible option unless options come from separately tested runtime data.
|
|
274
|
-
- Custom controls must declare `customControlCoverage` and `builtInFitCheck`. Coverage proves the custom control is not a built-in replacement, uses kit chrome, keeps only necessary UI, writes through runtime state, and changes product output; the fit check proves which built-ins were considered and why the custom interaction is necessary.
|
|
329
|
+
- Custom controls must declare `customControlCoverage` and `builtInFitCheck`. Coverage proves the custom control is not a built-in replacement, uses kit chrome, keeps only necessary UI, writes through runtime state, and changes product output; the fit check proves which built-ins were considered and why the custom interaction is necessary. Custom interactions also bind `interactionId` so surface ownership is validated independently from built-in fit.
|
|
275
330
|
|
|
276
|
-
Performance browser tests
|
|
331
|
+
Performance browser tests use the derived path matrix. Each path has one browser adapter, compiled development and maximum fixtures, a centrally profiled budget, and protected measurement evidence bound to the same `pathId`. Every mutating measurement supplies `observeOutcome`; generic change evidence first proves a stable baseline and then requires the product outcome to remain different through the stability window. Autonomous products use `expectedOutcome` with a stable semantic observation or measure at a deterministic fixed phase. Latency ends at that expected result, never at an incidental animation frame. Fixture adapters apply and observe every compiled dimension exactly before measurement. The reporter requires matching path, fixture phase, product outcome, measurement, pipeline, completion/interaction, and budget evidence. Do not hardcode budget numbers, toy values, or toy baseline app states; `app-performance.ts`, the runtime profile catalog, and derived paths are the authoritative inputs.
|
|
277
332
|
|
|
278
333
|
## Fixtures
|
|
279
334
|
|
|
@@ -8,26 +8,113 @@ Mode: starter
|
|
|
8
8
|
|
|
9
9
|
The neutral starter has no product renderer, timeline, layers, export behavior, or performance workload yet. Replace this status with `Mode: product` when the folder becomes a real app.
|
|
10
10
|
|
|
11
|
+
## Automatic Delivery Lifecycle
|
|
12
|
+
|
|
13
|
+
Keep this worklog human-shaped. For the first product delivery, record the request, decisions, state/output mapping, reference evidence, rejected alternatives, and known risks; one bare `pnpm verify:delivery` derives complete contract proof, one build, full functional acceptance, and no measured performance. For later `functional-targeted` delivery, record only the new intent and decisions; the same bare command derives exact ownership-required proof from protected state.
|
|
14
|
+
|
|
15
|
+
Classifier output establishes complaint authority only and never path localization. A localized performance complaint adds the domain authority below, then one bare `pnpm verify:delivery` runs one targeted iteration. If localization remains unresolved regardless of classifier result, ask one user-facing question naming visible operations and offering targeted diagnosis or a complete review; record neither `performance-iteration` intent nor canonical path authority until the answer supplies exact localization evidence. Never ask the user to choose internal path IDs. A broad or honestly unlocalizable problem may present that single choice with a recommendation for complete review, but the user still chooses. A direct complete-review request needs no further clarification. The full audit remains separate and requires an explicit operator request or accepted offer before `pnpm verify:perf` may run. Protected receipts own changed files, plans, checks, reports, measurements, and pass/fail evidence.
|
|
16
|
+
|
|
17
|
+
When `canvas.renderScale` is enabled, record the renderer decision to preserve selected backing quality and map it to functional `renderScaleCoverage` for interaction and steady state, plus playback when timeline is enabled. The worklog may name the protected `canvas-render-scale-backing` recipe, but it cannot claim its evidence or turn a quality failure into performance authority.
|
|
18
|
+
|
|
19
|
+
## Performance Iteration Entry Contract
|
|
20
|
+
|
|
21
|
+
For high-confidence ordinary work, record `Performance intent: ordinary-product-work`. For unresolved localization, whether classification returned high-confidence `performance-iteration` or `needs-agent-judgment`, record the unresolved visible operation but no `Performance intent: performance-iteration` field or `Performance paths` until the user's one clarification provides exact localization. For a localized performance complaint or post-clarification targeted choice, record exactly these domain fields in the latest iteration:
|
|
22
|
+
|
|
23
|
+
```md
|
|
24
|
+
- Performance intent: performance-iteration
|
|
25
|
+
- Performance request evidence: "<verbatim exact Request quote>"
|
|
26
|
+
- Performance paths: ["performance-path:%5B...%5D"]
|
|
27
|
+
- Verification: One bare `pnpm verify:delivery` will derive and run the protected proof.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The quoted evidence must be an exact nontrivial raw substring of `Request` with identical whitespace and Unicode code units. `Performance paths` must be a non-empty unique JSON array of canonical path IDs. Do not record command arguments, changed-file inventory, executed checks, reports, or measurements; the protected planner and receipt own that machine evidence. Each localized complaint or post-clarification targeted choice authorizes one bounded iteration; after it passes, return the app and wait for user evaluation. Classifier output or complaint evidence alone never supplies path localization or authorizes full certification. The separate operator command is permitted only after the user explicitly requests a complete audit or explicitly accepts the agent's offer; the user does not need to name the command.
|
|
31
|
+
|
|
11
32
|
## Decision Trail
|
|
12
33
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- Decision:
|
|
25
|
-
- Alternatives rejected:
|
|
26
|
-
- State/output mapping:
|
|
27
|
-
-
|
|
28
|
-
- Verification:
|
|
29
|
-
-
|
|
30
|
-
|
|
34
|
+
### Iteration 1 — Model appearance and presentation runtime contract
|
|
35
|
+
|
|
36
|
+
- Request: Preserve authored model materials and textures from folders or ZIP packages, use a Blender-like fallback only when authored appearance is absent, render the result on the canvas, and keep direct orbit synchronized with the orientation gizmo.
|
|
37
|
+
- Task type: Runtime, starter, contract, CLI, and generated-app delivery.
|
|
38
|
+
- User-visible result: GLB/glTF/OBJ/FBX/PLY/STL imports now retain the supported authored appearance subset, folder and ZIP resources remain durable, missing appearance resources surface typed warnings, and materialless geometry uses the canonical fallback. Runtime preview keeps one presentation lease and one camera pose for canvas rendering, direct model drag, gizmo snap, history, reset, and export.
|
|
39
|
+
- Source/reference checked: `/Users/kusnizza/Projects/toolcraft-apps/rain-drops`, the production model adapters, canonical document codecs, binary repository reachability, runtime canvas/model presentation, and generated-app browser evidence.
|
|
40
|
+
- Reference inputs: The user selected preservation for both folder and ZIP imports, fallback only when authored material is absent, and the current Toolcraft application contract as the source of truth.
|
|
41
|
+
- Docs/contracts read: `core/runtime-boundary.md`, `core/media-upload.md`, `core/performance.md`, `renderer-technique.md`, `acceptance-testing.md`, and the runtime decision/component contracts.
|
|
42
|
+
- Contract rules applied: `canvas-surface-preserved`, `interaction-surface-ownership`, `renderer-view-interaction`, `renderer-technique-inventory`, `acceptance-product-observable`, `performance-coverage-levels`, and `persistence-policy-explicit`.
|
|
43
|
+
- View interaction intent: A visible editable model uses `orbit`; runtime canvas drag and `orientationGizmo` consume the same orientation target without mutating canonical source data.
|
|
44
|
+
- Interaction ownership: Canvas owns direct spatial orbit and gizmo snap. The panel owns source package selection, status, warning, repair, and removal actions.
|
|
45
|
+
- Decision: Preserve immutable source packages and canonical appearance data; build a disposable Three.js projection with bounded batching/deduplication only for pixel-equivalent opaque geometry. Retain the renderer prewarm resource across remove/reimport and dispose it with the owning presentation host.
|
|
46
|
+
- Alternatives rejected: Product-owned model loaders, remote texture fallback, storing Three.js objects in state, appearance-driven topology repair, duplicate standard/custom presentation owners, and metadata-only browser evidence.
|
|
47
|
+
- State/output mapping: Durable package refs and canonical document refs live in runtime media state; resolved appearance resources feed a shared presentation lease; evaluated orientation state feeds preview, hit testing, gizmo, history/reset, and export.
|
|
48
|
+
- Performance intent: ordinary-product-work
|
|
49
|
+
- Verification: One bare `pnpm verify:delivery` will derive and run the protected proof.
|
|
50
|
+
- Risks: The canonical contract intentionally covers static geometry and the documented PBR subset; unsupported skins, morph targets, animation clips, texture transforms, or missing resources remain nonfatal diagnostics when possible. Synthetic browser fixtures prove contract behavior but cannot guarantee every malformed third-party exporter file.
|
|
51
|
+
|
|
52
|
+
### Iteration 2 — Infinity canvas runtime and scene-cropped export
|
|
53
|
+
|
|
54
|
+
- Request: Add an `Infinity canvas` toggle to the first Project Settings section; when enabled, remove canvas size controls and artboard limits, use the whole workspace, and export a crop around scene elements.
|
|
55
|
+
- Task type: Runtime, canvas, export, acceptance, starter contract, documentation, CLI, and generated-app delivery.
|
|
56
|
+
- User-visible result: Project Settings now starts with `Infinity canvas`. Enabling it removes aspect ratio, width, and height controls plus the finite artboard boundary; disabling it restores the exact previous finite dimensions. Image export remains full-artboard in finite mode and crops to visible scene bounds in infinite mode.
|
|
57
|
+
- Source/reference checked: Current Toolcraft canvas state, canvas viewport, image/model presentation, panel action boundary, generated product fixture, export pipeline, and the user-approved crop behavior.
|
|
58
|
+
- Reference inputs: The user explicitly selected an unrestricted infinite workspace, preservation of the current finite size, and export by the outer scene-element bounds.
|
|
59
|
+
- Docs/contracts read: `core/setup-export.md`, `core/runtime-boundary.md`, `acceptance-testing.md`, `schema-reference.md`, and the runtime decision/component contracts.
|
|
60
|
+
- Contract rules applied: `canvas-surface-preserved`, `controls-product-coverage`, `output-export-required`, `acceptance-product-observable`, and `infinity-canvas-scene-bounds`.
|
|
61
|
+
- View interaction intent: Infinity mode changes the canvas extent only; existing product `viewInteraction` and model orbit/gizmo ownership remain unchanged.
|
|
62
|
+
- Interaction ownership: Project Settings owns the finite/infinite mode. The canvas owns navigation across the unbounded workspace. Export actions consume canonical scene bounds without adding a second editing surface.
|
|
63
|
+
- Decision: Store the mode in canonical runtime state and history; retain finite dimensions while infinite; give runtime images and models explicit world frames; accept product bounds through the signed composition boundary; union only visible exportable entities; and reject empty, unavailable, or oversized scene exports with typed visible feedback.
|
|
64
|
+
- Alternatives rejected: Encoding Infinity as a sentinel width/height, deriving bounds from DOM pixels, always calling product bounds in finite mode, exporting the current viewport, retaining hidden/editor-only entities, and an implicit global bounds registry.
|
|
65
|
+
- State/output mapping: `canvas.setMode` drives settings visibility and artboard layout. Runtime image/model frames and `sceneBoundsProvider` feed one canonical resolver. Image and model compositors render the resolved scene frame at export scale; video exporters must resolve a bound over their explicit time range.
|
|
66
|
+
- Performance intent: ordinary-product-work
|
|
67
|
+
- Verification: One bare `pnpm verify:delivery` will derive and run the protected proof.
|
|
68
|
+
- Risks: Product-owned visual entities must provide truthful bounds through `sceneBoundsProvider`; the runtime fails closed with `scene-bounds-unavailable` instead of silently cropping them out.
|
|
69
|
+
|
|
70
|
+
### Iteration 3 — Grass controls-panel section navigation parity
|
|
71
|
+
|
|
72
|
+
- Request: "возьми механику навигации по секциям панели из этого проекта. перенеси полностью дизайн и поведение в стартер. панель появляется когда секции не влезают в высоту одного экрана"
|
|
73
|
+
- Task type: Shared runtime, controls-panel interaction, generated browser evidence, starter documentation, and standalone generation.
|
|
74
|
+
- User-visible result: Generated Toolcraft apps use the Grass section-navigation popup only while the controls body overflows its available viewport. A fitting panel cannot reveal the popup; losing overflow clears pending hover intent, and restoring overflow requires a fresh 300ms dwell.
|
|
75
|
+
- Source/reference checked: `/Users/kusnizza/Projects/toolcraft-apps/grass`, its generated runtime copy, the live app at `http://127.0.0.1:3003/`, canonical runtime/UI sources, and computed popup geometry and typography.
|
|
76
|
+
- Reference inputs: The user selected full Grass design and behavior, with navigation eligibility determined by sections not fitting within one screen height.
|
|
77
|
+
- Docs/contracts read: `component-rules.md`, `workflow.md`, `acceptance-testing.md`, and the runtime panel component contract.
|
|
78
|
+
- Contract rules applied: `panel-host-behavior`, `controls-component-layout-invariants`, `controls-layout-heuristics`, and `acceptance-product-observable`.
|
|
79
|
+
- Interaction ownership: The runtime controls panel owns overflow measurement, hover intent, section scroll-spy, and popup navigation. Product code supplies sections only and cannot render a duplicate navigation surface.
|
|
80
|
+
- Decision: Keep one runtime implementation, retain the complete Grass surface, spacing, type, scrolling, pointer corridor, timing, click, and keyboard behavior, and reset every pending popup timer when overflow disappears.
|
|
81
|
+
- Alternatives rejected: Copying the component into starter product code, retaining navigation state after overflow disappears, showing navigation persistently, and editing the exported Grass folder instead of the source runtime.
|
|
82
|
+
- State/output mapping: `scrollHeight > clientHeight + 1` makes navigation eligible; a 300ms dwell in the inner-left 12px strip mounts the runtime popup; its items map visible non-sticky sections to immediate viewport scroll positions.
|
|
83
|
+
- Performance intent: ordinary-product-work
|
|
84
|
+
- Verification: One bare `pnpm verify:delivery` will derive and run the protected proof.
|
|
85
|
+
- Risks: Already-exported applications retain their copied runtime until regenerated; the Grass reference remains unchanged.
|
|
86
|
+
|
|
87
|
+
### Iteration 4 — Runtime history keyboard shortcuts from focused controls
|
|
88
|
+
|
|
89
|
+
- Request: Make Undo and Redo work through standard keyboard shortcuts in generated apps.
|
|
90
|
+
- Task type: Shared runtime, generated keyboard interaction, contract, and standalone browser evidence.
|
|
91
|
+
- User-visible result: Cmd/Ctrl+Z, Cmd/Ctrl+Shift+Z, and Ctrl+Y operate Toolcraft history while focus remains on sliders, switches, checkboxes, and other non-text controls; active text editors keep native text undo.
|
|
92
|
+
- Source/reference checked: The runtime ToolcraftRoot shortcut listener, its unit tests, and a built standalone app where the focused Blur slider input reproduced the failure.
|
|
93
|
+
- Contract rules applied: `runtime-shell-required`, `interaction-surface-ownership`, `acceptance-product-observable`, and `workflow-required`.
|
|
94
|
+
- Interaction ownership: ToolcraftRoot owns one document-level history shortcut listener; product apps do not register duplicates.
|
|
95
|
+
- Decision: Classify input targets by native text-editing capability instead of treating every input as a text editor.
|
|
96
|
+
- Alternatives rejected: Always stealing text undo, per-control marker attributes, and app-local shortcut listeners.
|
|
97
|
+
- State/output mapping: Recognized shortcuts dispatch `history.undo`/`history.redo` through the runtime command bus; native text editors return before dispatch.
|
|
98
|
+
- Performance intent: ordinary-product-work
|
|
99
|
+
- Verification: One bare `pnpm verify:delivery` will derive and run the protected proof.
|
|
100
|
+
- Risks: Previously exported apps retain their copied runtime until regenerated; newly generated apps receive the fix through the CLI copy path.
|
|
101
|
+
|
|
102
|
+
### Iteration 5 — Blender-compatible orientation gizmo interaction
|
|
103
|
+
|
|
104
|
+
- Request: Make the orientation gizmo behave "все как в блендере": click signed points to return to axes and drag the gizmo with Blender-equivalent rotation.
|
|
105
|
+
- Task type: Shared runtime interaction, generated browser evidence, starter contract, and website documentation.
|
|
106
|
+
- User-visible result: The existing 70px Toolcraft gizmo keeps its size, colors, hover treatment, and 16px placement. Users can now drag anywhere inside its circular surface; gizmo and direct model drag share Blender factory Turntable sensitivity and pole recovery; signed-axis clicks use Blender Smooth View timing.
|
|
107
|
+
- Source/reference checked: Blender 4.5.2 LTS factory preferences plus the official navigation gizmo, view rotate, axis view, and smooth-view source. Factory Turntable sensitivity is 0.4 degrees per CSS pixel and Smooth View is 200ms maximum, scaled by quaternion angle.
|
|
108
|
+
- Contract rules applied: `canvas-handle-placement`, `interaction-surface-ownership`, `renderer-view-interaction`, `acceptance-product-observable`, `performance-coverage-levels`, and `workflow-required`.
|
|
109
|
+
- View interaction intent: A visible editable spatial model remains `orbit`; the runtime gizmo and visible-model hit surface consume one canonical `{ position, up }` target.
|
|
110
|
+
- Interaction ownership: An unmodified primary press inside the gizmo circle owns Turntable drag; a signed endpoint also owns click-to-axis; blank click is inert; outside-circle and model-miss presses remain canvas pan.
|
|
111
|
+
- Decision: Map Blender Z-up behavior to Toolcraft Y-up, use fixed world-up yaw plus screen-horizontal pitch with Blender's pole horizon blend, keep a 3px click/drag threshold, and use cubic smoothstep quaternion slerp with `200ms * angle / pi` duration.
|
|
112
|
+
- Alternatives rejected: Keeping endpoint-only sphere projection, changing only gizmo math while direct model drag remains viewport-scaled, and adopting a Three.js helper that owns a separate camera/controller.
|
|
113
|
+
- Licensing: This is an independent behavioral and mathematical reimplementation from documented behavior and observed source structure; no Blender GPL source code is copied.
|
|
114
|
+
- State/output mapping: Every drag or snap writes the canonical runtime pose under one history group and target-scoped interaction lease. Preview, hit testing, gizmo projection, reset/undo/redo, persistence, and export continue to consume that pose; stale gestures cannot write after a newer owner.
|
|
115
|
+
- Performance intent: ordinary-product-work
|
|
116
|
+
- Verification: One bare `pnpm verify:delivery` will derive and run the protected proof.
|
|
117
|
+
- Risks: Already-exported applications retain their copied runtime until regenerated. Browser proof relies on the runtime gizmo's canonical pose/target attributes and intentionally fails closed if the real handle is absent or ambiguous.
|
|
31
118
|
|
|
32
119
|
## Decisions
|
|
33
120
|
|
|
@@ -35,7 +122,7 @@ No product iterations yet. When this folder becomes a product, replace this note
|
|
|
35
122
|
|
|
36
123
|
- Decision: No product renderer yet.
|
|
37
124
|
- Reason: The starter is intentionally neutral.
|
|
38
|
-
- Evidence: No `canvasContent` product renderer is declared.
|
|
125
|
+
- Evidence: No `canvasContent` product renderer is declared. The neutral composition still declares `modelPresentation: { mode: "runtime" }` so future model uploads have one standard owner until a product explicitly declares checked custom consumers.
|
|
39
126
|
|
|
40
127
|
### Timeline
|
|
41
128
|
|
|
@@ -55,6 +142,18 @@ No product iterations yet. When this folder becomes a product, replace this note
|
|
|
55
142
|
- Reason: Controls are added only after the requested product behavior is known.
|
|
56
143
|
- Evidence: The starter schema exposes no product control sections.
|
|
57
144
|
|
|
145
|
+
### View Interaction
|
|
146
|
+
|
|
147
|
+
- Decision: No spatial product view yet.
|
|
148
|
+
- Reason: The neutral starter has no visible three-dimensional scene or model.
|
|
149
|
+
- Evidence: Product readiness remains in starter mode; product apps must declare typed `viewInteraction` before controls or renderer code.
|
|
150
|
+
|
|
151
|
+
### Interaction Ownership
|
|
152
|
+
|
|
153
|
+
- Decision: No product interaction surfaces yet.
|
|
154
|
+
- Reason: The neutral starter has no canvas handles or product controls to compare.
|
|
155
|
+
- Evidence: Product apps must declare typed `interactionOwnership` before implementing controls or canvas interactions.
|
|
156
|
+
|
|
58
157
|
### Export
|
|
59
158
|
|
|
60
159
|
- Decision: No product export yet.
|
|
@@ -70,13 +169,13 @@ No product iterations yet. When this folder becomes a product, replace this note
|
|
|
70
169
|
## Evidence
|
|
71
170
|
|
|
72
171
|
- Source reviewed: neutral starter schema and local Toolcraft docs.
|
|
73
|
-
- Contract applied: starter baseline remains neutral until product behavior exists.
|
|
172
|
+
- Contract applied: starter baseline remains neutral until product behavior exists; `model-appearance-presentation` keeps package import, appearance leases, model canvas output, gizmo pose, and export ownership explicit.
|
|
74
173
|
|
|
75
174
|
## Verification
|
|
76
175
|
|
|
77
|
-
|
|
78
|
-
- Run: `pnpm verify:final` after turning this folder into a product app.
|
|
176
|
+
Protected receipts own changed files, the derived plan, commands, selectors, reports, measurements, and pass/fail evidence. Decision Trail iterations record only one bare `pnpm verify:delivery` narrative.
|
|
79
177
|
|
|
80
178
|
## Risks
|
|
81
179
|
|
|
82
180
|
- Risk: This template must be replaced with product-specific decisions before final delivery.
|
|
181
|
+
- Risk: A product that selects custom model presentation must mount every declared checked consumer; otherwise runtime reports typed retryable presentation feedback and suppresses only that declared target.
|
|
@@ -25,7 +25,7 @@ export const appComposition = {
|
|
|
25
25
|
} satisfies ToolcraftAppComposition;
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Edit `src/app/app-composition.tsx`, not the signed route. Product composition may provide only `schema`, `canvasContent`, `controlRenderers`, `onPanelAction`, and `
|
|
28
|
+
Edit `src/app/app-composition.tsx`, not the signed route. Product composition may provide only `schema`, `canvasContent`, `controlRenderers`, `exportRenderer`, `modelPresentation`, `onPanelAction`, `renderDefaultCanvasMedia`, and optional `rendererPipelineRegistration`; the protected route owns `className` and other host layout. Model products default to `modelPresentation: { mode: "runtime" }`. Custom presentation declares checked consumers and suppresses only their model targets; `renderDefaultCanvasMedia={false}` affects generic image/file preview, not runtime models. Do not compose `ToolcraftRoot`, `CanvasShell`, `ControlsPanel`, `LayersPanel`, `TimelinePanel`, or `ToolbarPanel` by hand. If a runtime surface has a performance or behavior issue, fix the shared runtime instead of replacing the surface locally.
|
|
29
29
|
|
|
30
30
|
Supporting product modules may be organized anywhere under `src`; there is no folder allowlist. The product boundary follows all product production files and rejects host/runtime surface imports, built-in control imports/re-exports, dynamic bypasses, and production dependencies on test/spec modules.
|
|
31
31
|
|
|
@@ -36,7 +36,9 @@ Allowed app extension points:
|
|
|
36
36
|
| Schema controls | Built-in controls, targets, defaults, visibility, panel actions. |
|
|
37
37
|
| `canvasContent` | Product output only. |
|
|
38
38
|
| `controlRenderers` | True custom controls only after the built-in fit check. |
|
|
39
|
-
| `
|
|
39
|
+
| `exportRenderer` | One deterministic scene-coordinate product frame shared by runtime image and video export. |
|
|
40
|
+
| `onPanelAction` | Non-export sticky footer product actions. |
|
|
41
|
+
| `rendererPipelineRegistration` | One compiled executable pipeline shared by render work, actions, evidence, and new-envelope assessment. |
|
|
40
42
|
| Runtime commands/hooks | History, media, canvas, timeline, layers, and controlled app behavior. |
|
|
41
43
|
|
|
42
44
|
Do not render built-in controls such as `SliderControl`, `SelectControl`, `ColorControl`, `GradientControl`, `FontPickerControl`, `FileDropControl`, or `PanelActionsControl` directly in app code. Declare them in schema so layout, reset, history, visibility, keyframes, labels, and tests stay runtime-owned.
|
|
@@ -49,13 +51,28 @@ Once the folder is a real product, switch `src/app/app-acceptance-data.ts` from
|
|
|
49
51
|
|
|
50
52
|
```ts
|
|
51
53
|
export const appProductReadiness = {
|
|
54
|
+
interactionOwnership: [],
|
|
52
55
|
mode: "product",
|
|
53
56
|
productName: "Product name",
|
|
54
57
|
productSummary: "What the app creates or edits.",
|
|
55
58
|
requestedBehavior: "The user-facing behavior this app must implement.",
|
|
59
|
+
viewInteraction: {
|
|
60
|
+
mode: "non-spatial",
|
|
61
|
+
reason: "This product has no visible three-dimensional scene or model.",
|
|
62
|
+
},
|
|
56
63
|
} as const;
|
|
57
64
|
```
|
|
58
65
|
|
|
66
|
+
Populate `interactionOwnership` before adding canvas handles or custom
|
|
67
|
+
interactions. One operation has one primary `canvas` or `panel` surface chosen
|
|
68
|
+
from user request, inspected reference, or product usability evidence. Different
|
|
69
|
+
operations may share related state across surfaces; mirrored operations may not.
|
|
70
|
+
|
|
71
|
+
Use `viewInteraction.mode: "orbit"` for a visible editable spatial scene and
|
|
72
|
+
list its `orientationGizmo` targets. `fixed-camera` or `timeline-camera` require
|
|
73
|
+
explicit request/reference evidence; do not infer fixed framing merely because
|
|
74
|
+
the prompt did not separately request rotation.
|
|
75
|
+
|
|
59
76
|
## Controls
|
|
60
77
|
|
|
61
78
|
Before writing product sections, export `starterControlSectionInventory`. Each product section declares its title, targets, product entity or workflow stage, and grouping reason.
|
|
@@ -88,26 +105,26 @@ Use `core/timeline-animation.md` for timeline mode, compact/extended timeline, s
|
|
|
88
105
|
|
|
89
106
|
## Renderer Work
|
|
90
107
|
|
|
91
|
-
For custom renderers, write the Renderer Technique Decision Matrix and
|
|
108
|
+
For custom renderers, write the Renderer Technique Decision Matrix and typed performance model before code. Follow one sequence: reachable controls and inputs; workload dimensions and enforced boundaries; pass cost, frequency, lifecycle, and invalidation; render-plan assessment and protected kernel benchmark when required; derived paths and combined fixtures; impact-derived functional/browser development checks; lifecycle-appropriate delivery proof. Only exact request authority may add measured targeted performance.
|
|
92
109
|
|
|
93
|
-
|
|
110
|
+
Compile one lightweight renderer pipeline registration outside test modules. Supply that exact registration as `rendererPipelineRegistration` in the composition and as `rendererPipeline` to new-envelope performance assessment. Run `assessToolcraftRenderPlan` before implementing the renderer. Derive path ids from the assessed registration and compile workload fixtures from those paths; do not classify workload by target names or author scenario-specific maxima. Renderer work uses `useToolcraftPipelinePass`; retained resources are available only from its generation-bound pass execution context. Product code never receives runtime disposal ownership.
|
|
94
111
|
|
|
95
|
-
|
|
112
|
+
Use `renderer-technique.md`, `core/performance.md`, and `performance.md` for renderer strategy, envelope dimensions, pass metadata, adapters, derived paths, render scale, and optimization evidence.
|
|
96
113
|
|
|
97
|
-
|
|
114
|
+
## Automatic Delivery Lifecycle
|
|
98
115
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
116
|
+
Use one normal sequence: assemble or change the product, gather focused functional feedback, finish the coherent delivery batch, run protected functional delivery once, and return the app for user evaluation. Focused checks while implementation is changing do not mint delivery evidence.
|
|
117
|
+
|
|
118
|
+
1. First product delivery uses bare `pnpm verify:delivery` for complete product contracts, one production build, full functional acceptance, and no measured performance.
|
|
119
|
+
2. Later `functional-targeted` delivery uses the same bare command for exact ownership-derived functional proof relative to the immediately previous successful delivery.
|
|
120
|
+
3. Classifier output establishes complaint authority only and never path localization. Only a localized complaint or a post-clarification targeted choice records an exact request quote and canonical affected path IDs in the worklog, then one bare delivery runs one targeted iteration and returns the app for evaluation. Unresolved localization creates neither performance-iteration intent nor canonical path authority regardless of classifier result.
|
|
121
|
+
4. A full audit requires an explicit operator request or accepted offer; only then run `pnpm verify:perf` for one fresh build and the complete maximum-fixture performance matrix.
|
|
105
122
|
|
|
106
|
-
|
|
123
|
+
Protected receipts own changed files, the derived plan, executed checks, reports, measurements, and pass/fail evidence. The worklog keeps product intent and decisions.
|
|
107
124
|
|
|
108
125
|
For final delivery, run:
|
|
109
126
|
|
|
110
127
|
```bash
|
|
111
|
-
pnpm verify:
|
|
128
|
+
pnpm verify:delivery
|
|
112
129
|
pnpm dev
|
|
113
130
|
```
|