@pixel-point/toolcraft 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/generate-demand-only-lifecycle.test.mjs +9 -1
- package/src/generate-performance-iteration-execution.test.mjs +3 -3
- package/src/generate-test-delivery-architecture-assertions.mjs +11 -73
- package/src/generate-test-demand-only-lifecycle.mjs +34 -36
- package/src/generate-test-dependency-sandbox.mjs +4 -1
- package/src/generate-test-doc-assertions.mjs +55 -53
- package/src/generate-test-doc-assertions.test.mjs +1 -1
- package/src/generate-test-doc-policy-assertions.mjs +1 -1
- package/src/generate-test-export-doc-assertions.mjs +53 -0
- package/src/generate-test-file-assertions.mjs +51 -8
- package/src/generate-test-integrity-assertions.mjs +5 -2
- package/src/generate-test-integrity-manifest-assertions.mjs +16 -5
- package/src/generate-test-integrity-ownership-assertions.mjs +36 -4
- package/src/generate-test-package-assertions.mjs +4 -0
- package/src/generate-test-product-fixture.mjs +1 -1
- package/src/generate-test-product-fixture.test.mjs +35 -38
- package/src/generate-test-product-iteration.mjs +0 -1
- package/src/generate-test-product-iteration.test.mjs +0 -1
- package/src/generate-test-runtime-boundary-assertions.mjs +20 -0
- package/src/generate-test-standalone-assertions.mjs +0 -16
- package/src/generate-test-standalone-delivery-stages.mjs +2 -86
- package/src/generate.test.mjs +4 -0
- package/src/generated-integrity-manifest.test.mjs +5 -2
- package/src/generated-source-policy.test.mjs +0 -4
- package/src/package-json.mjs +5 -0
- package/src/package-json.test.mjs +21 -0
- package/src/package-manager.mjs +2 -0
- package/src/package-manager.test.mjs +8 -0
- package/src/packaged-template-fallback-helpers.mjs +254 -0
- package/src/packaged-template-fallback.test.mjs +121 -46
- package/src/packaged-template-runtime-assertions.mjs +150 -0
- package/templates/runtime/contracts/component-contracts.choices.test.ts +18 -3
- package/templates/runtime/contracts/component-contracts.choices.ts +8 -3
- package/templates/runtime/contracts/component-contracts.inputs.ts +2 -1
- package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +18 -4
- package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +1 -1
- package/templates/runtime/contracts/component-contracts.runtime.ts +7 -4
- package/templates/runtime/contracts/component-contracts.visual.test.ts +20 -0
- package/templates/runtime/contracts/component-contracts.visual.ts +4 -0
- package/templates/runtime/contracts/decision-contracts.test.ts +18 -12
- package/templates/runtime/contracts/decision-contracts.ts +4 -4
- package/templates/runtime/contracts/performance-verification-policy.test.ts +12 -12
- package/templates/runtime/contracts/performance-verification-policy.ts +8 -8
- package/templates/runtime/export/artifact-download.ts +1 -0
- package/templates/runtime/export/artifact-frame-renderer.ts +2 -15
- package/templates/runtime/export/artifact-frame-state.ts +16 -0
- package/templates/runtime/export/artifact-scene-frame.test.ts +3 -3
- package/templates/runtime/export/artifact-scene-frame.ts +3 -3
- package/templates/runtime/export/export-error.ts +5 -0
- package/templates/runtime/export/export-renderer-coverage.ts +54 -0
- package/templates/runtime/export/image-artifact-export.ts +2 -2
- package/templates/runtime/export/index.ts +13 -0
- package/templates/runtime/export/product-export-renderer.test.ts +38 -4
- package/templates/runtime/export/product-export-renderer.ts +0 -41
- package/templates/runtime/export/product-svg-export-renderer.ts +21 -0
- package/templates/runtime/export/svg-artifact-export.test.ts +98 -0
- package/templates/runtime/export/svg-artifact-export.ts +120 -0
- package/templates/runtime/export/svg-document.test.ts +221 -0
- package/templates/runtime/export/svg-document.ts +400 -0
- package/templates/runtime/export/svg-policy.ts +47 -0
- package/templates/runtime/index.ts +1 -0
- package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +10 -0
- package/templates/runtime/react/app-shell/settings-transfer.test.ts +21 -0
- package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +46 -1
- package/templates/runtime/react/app-shell/toolcraft-app.tsx +7 -2
- package/templates/runtime/react/canvas/canvas-shell-interactions.test.tsx +30 -0
- package/templates/runtime/react/canvas/canvas-shell-pinch-interactions.test.tsx +155 -0
- package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +1 -1
- package/templates/runtime/react/canvas/canvas-shell.tsx +16 -5
- package/templates/runtime/react/canvas/canvas-viewport-geometry.ts +133 -0
- package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +285 -36
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-applicability-layout.test.tsx +134 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-layout.test.tsx +16 -1
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.render-isolation.test.tsx +2 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +39 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.setup-controls.test.tsx +3 -3
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-collection.test.tsx +1 -4
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-color-bank.test.tsx +2 -2
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.vector-interaction.test.tsx +6 -6
- package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +2 -2
- package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +40 -11
- package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +31 -2
- package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +4 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-action-renderer.tsx +2 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-basic-renderers.tsx +2 -52
- package/templates/runtime/react/controls-panel/values/controls-panel-color-values.ts +1 -9
- package/templates/runtime/react/controls-panel/values/controls-panel-spatial-values.ts +7 -2
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +9 -69
- package/templates/runtime/schema/artifact-export-actions.test.ts +47 -0
- package/templates/runtime/schema/artifact-export-actions.ts +49 -0
- package/templates/runtime/schema/types.ts +1 -0
- package/templates/runtime/state/canvas-background-state.ts +1 -16
- package/templates/runtime/state/canvas-state.ts +32 -20
- package/templates/runtime/state/control-value-codecs.test.ts +98 -0
- package/templates/runtime/state/control-value-codecs.ts +700 -0
- package/templates/runtime/state/control-value-normalization.test.ts +1 -1
- package/templates/runtime/state/control-value-normalization.ts +127 -135
- package/templates/runtime/state/controls-reducer.ts +26 -3
- package/templates/runtime/state/create-template-state.test.ts +30 -0
- package/templates/runtime/state/create-template-state.ts +52 -31
- package/templates/runtime/state/orientation-pose.ts +80 -0
- package/templates/runtime/state/persistence-control-values.test.ts +59 -0
- package/templates/runtime/state/reducer-controls.test.ts +45 -0
- package/templates/runtime/state/reducer-media-reset.test.ts +1 -1
- package/templates/runtime/state/reducer-timeline.test.ts +70 -0
- package/templates/runtime/state/timeline-reducer.ts +40 -2
- package/templates/runtime/testing/performance-schema-queries.ts +2 -2
- package/templates/starter/AGENTS.md +21 -22
- package/templates/starter/docs/toolcraft/README.md +6 -6
- package/templates/starter/docs/toolcraft/acceptance-testing.md +20 -20
- package/templates/starter/docs/toolcraft/agent-worklog.md +88 -1
- package/templates/starter/docs/toolcraft/assembly-workflow.md +7 -6
- package/templates/starter/docs/toolcraft/component-rules.md +2 -2
- package/templates/starter/docs/toolcraft/core/layout.md +6 -1
- package/templates/starter/docs/toolcraft/core/media-upload.md +1 -1
- package/templates/starter/docs/toolcraft/core/performance.md +8 -10
- package/templates/starter/docs/toolcraft/core/reference-study.md +80 -19
- package/templates/starter/docs/toolcraft/core/runtime-boundary.md +2 -1
- package/templates/starter/docs/toolcraft/core/setup-export.md +43 -13
- package/templates/starter/docs/toolcraft/decision-contract.md +2 -2
- package/templates/starter/docs/toolcraft/performance.md +8 -10
- package/templates/starter/docs/toolcraft/renderer-technique.md +2 -2
- package/templates/starter/docs/toolcraft/schema-reference.md +8 -8
- package/templates/starter/docs/toolcraft/workflow.md +14 -14
- package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +38 -0
- package/templates/starter/e2e/app-browser-motion-reference-requirements.spec.ts +411 -0
- package/templates/starter/e2e/app-browser-proof-session.spec.ts +85 -0
- package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +62 -0
- package/templates/starter/e2e/app-browser-selection-scope-evidence.spec.ts +137 -0
- package/templates/starter/e2e/browser-infinity-canvas-svg-evidence.ts +42 -0
- package/templates/starter/e2e/browser-layer-evidence-helpers.ts +15 -36
- package/templates/starter/e2e/browser-product-raster-snapshot.ts +213 -0
- package/templates/starter/e2e/browser-proof-session.ts +43 -15
- package/templates/starter/e2e/browser-proof-surface-action.ts +79 -0
- package/templates/starter/e2e/browser-proof-types.ts +15 -0
- package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +22 -6
- package/templates/starter/e2e/browser-selection-scope-evidence.ts +269 -0
- package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +97 -0
- package/templates/starter/e2e/browser-svg-export-evidence.spec.ts +79 -0
- package/templates/starter/e2e/browser-svg-export-evidence.ts +152 -0
- package/templates/starter/e2e/export-artifact-helpers.ts +70 -0
- package/templates/starter/e2e/product-observable-helpers.ts +8 -129
- package/templates/starter/e2e/svg-artifact-inspection.spec.ts +136 -0
- package/templates/starter/e2e/svg-artifact-inspection.ts +331 -0
- package/templates/starter/e2e/svg-download-test-fixtures.ts +34 -0
- package/templates/starter/e2e/toolcraft-delivery-catalog-reporter.ts +198 -15
- package/templates/starter/e2e/toolcraft-feature-verification-reporter.spec.ts +149 -0
- package/templates/starter/e2e/toolcraft-feature-verification-reporter.ts +223 -0
- package/templates/starter/package.json +2 -0
- package/templates/starter/scripts/check-toolcraft-docs.mjs +1 -0
- package/templates/starter/scripts/create-toolcraft-motion-reference-study.mjs +233 -0
- package/templates/starter/scripts/create-toolcraft-motion-reference-study.test.mjs +459 -0
- package/templates/starter/scripts/playwright-test-title-selection.d.mts +45 -0
- package/templates/starter/scripts/run-browser-performance-test-helpers.mjs +0 -27
- package/templates/starter/scripts/run-browser-performance.mjs +0 -6
- package/templates/starter/scripts/run-browser-performance.test.mjs +5 -13
- package/templates/starter/scripts/run-delivery-verification-test-helpers.mjs +0 -34
- package/templates/starter/scripts/run-delivery-verification.test.mjs +135 -31
- package/templates/starter/scripts/run-feature-verification.mjs +212 -0
- package/templates/starter/scripts/run-feature-verification.test.mjs +226 -0
- package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.mjs +21 -8
- package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.test.mjs +32 -92
- package/templates/starter/scripts/toolcraft-checkpoint-transaction.mjs +28 -6
- package/templates/starter/scripts/toolcraft-checkpoint-transaction.test.mjs +8 -63
- package/templates/starter/scripts/toolcraft-delivery-anchor.mjs +28 -8
- package/templates/starter/scripts/toolcraft-delivery-anchor.test.mjs +50 -61
- package/templates/starter/scripts/toolcraft-delivery-architecture-inventory.mjs +0 -4
- package/templates/starter/scripts/toolcraft-delivery-architecture-policy.mjs +0 -1
- package/templates/starter/scripts/toolcraft-delivery-evidence.test.mjs +2 -3
- package/templates/starter/scripts/toolcraft-delivery-executor.mjs +5 -1
- package/templates/starter/scripts/toolcraft-delivery-executor.test.mjs +5 -12
- package/templates/starter/scripts/toolcraft-delivery-functional-context.d.mts +1 -48
- package/templates/starter/scripts/toolcraft-delivery-functional-context.mjs +2 -30
- package/templates/starter/scripts/toolcraft-delivery-functional-context.test.mjs +4 -166
- package/templates/starter/scripts/toolcraft-delivery-functional-initial.test.mjs +4 -20
- package/templates/starter/scripts/toolcraft-delivery-lifecycle.mjs +43 -192
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-lifecycle.test.mjs +79 -440
- package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +102 -297
- package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +46 -97
- package/templates/starter/scripts/toolcraft-delivery-plan-test-helpers.mjs +125 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-validation.test.mjs +58 -0
- package/templates/starter/scripts/toolcraft-delivery-plan.d.mts +19 -31
- package/templates/starter/scripts/toolcraft-delivery-plan.mjs +254 -252
- package/templates/starter/scripts/toolcraft-delivery-plan.test.mjs +29 -457
- package/templates/starter/scripts/toolcraft-delivery-receipt-performance.test.mjs +1 -1
- package/templates/starter/scripts/toolcraft-delivery-receipt-strictness.test.mjs +3 -72
- package/templates/starter/scripts/toolcraft-delivery-receipt-test-helpers.mjs +7 -36
- package/templates/starter/scripts/toolcraft-delivery-receipt.d.mts +3 -5
- package/templates/starter/scripts/toolcraft-delivery-receipt.mjs +15 -31
- package/templates/starter/scripts/toolcraft-delivery-receipt.test.mjs +28 -20
- package/templates/starter/scripts/toolcraft-delivery-receipt.types.test.mts +22 -30
- package/templates/starter/scripts/toolcraft-feature-verification-plan.d.mts +20 -0
- package/templates/starter/scripts/toolcraft-feature-verification-plan.mjs +146 -0
- package/templates/starter/scripts/toolcraft-feature-verification-plan.test.mjs +96 -0
- package/templates/starter/scripts/toolcraft-functional-proof-model.d.mts +3 -18
- package/templates/starter/scripts/toolcraft-functional-proof-model.mjs +39 -127
- package/templates/starter/scripts/toolcraft-functional-proof-model.test.mjs +25 -362
- package/templates/starter/scripts/toolcraft-functional-proof-model.types.test.mts +6 -83
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.d.mts +11 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.mjs +61 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.test.mjs +43 -0
- package/templates/starter/scripts/toolcraft-integrity-policy.mjs +13 -0
- package/templates/starter/scripts/toolcraft-integrity-test-utils.mjs +1 -1
- package/templates/starter/scripts/toolcraft-layer-evidence-facade.test.mjs +58 -22
- package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.mjs +111 -0
- package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.test.mjs +116 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.d.mts +37 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.mjs +308 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.test.mjs +420 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.types.test.mts +50 -0
- package/templates/starter/scripts/toolcraft-motion-reference-command-options.mjs +195 -0
- package/templates/starter/scripts/toolcraft-motion-reference-command-options.test.mjs +224 -0
- package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.mjs +122 -0
- package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.test.mjs +153 -0
- package/templates/starter/scripts/toolcraft-motion-reference-evidence-assembly.mjs +270 -0
- package/templates/starter/scripts/toolcraft-motion-reference-evidence.test.mjs +432 -0
- package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.mjs +275 -0
- package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.test.mjs +294 -0
- package/templates/starter/scripts/toolcraft-motion-reference-group-inventory.mjs +148 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.mjs +101 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.test.mjs +124 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-source.mjs +259 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-source.test.mjs +338 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-timing.mjs +96 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-timing.test.mjs +81 -0
- package/templates/starter/scripts/toolcraft-motion-reference-lock-recovery.test.mjs +144 -0
- package/templates/starter/scripts/toolcraft-motion-reference-media-source.mjs +165 -0
- package/templates/starter/scripts/toolcraft-motion-reference-media-source.test.mjs +299 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-discovery.test.mjs +142 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-isolation.test.mjs +234 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-schema.mjs +122 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.mjs +89 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.test.mjs +74 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.mjs +264 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.test.mjs +377 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.mjs +254 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.test.mjs +130 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.mjs +128 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.test.mjs +209 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication.fixtures.mjs +88 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication.mjs +249 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication.test.mjs +433 -0
- package/templates/starter/scripts/toolcraft-motion-reference-review-output.mjs +38 -0
- package/templates/starter/scripts/toolcraft-motion-reference-review-output.test.mjs +29 -0
- package/templates/starter/scripts/toolcraft-motion-reference-root-safety.test.mjs +84 -0
- package/templates/starter/scripts/toolcraft-motion-reference-roots.mjs +83 -0
- package/templates/starter/scripts/toolcraft-motion-reference-sampling.mjs +283 -0
- package/templates/starter/scripts/toolcraft-motion-reference-sampling.test.mjs +480 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.mjs +39 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.test.mjs +59 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage.mjs +71 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage.test.mjs +61 -0
- package/templates/starter/scripts/toolcraft-motion-review-numeric.mjs +74 -0
- package/templates/starter/scripts/toolcraft-motion-review-numeric.test.mjs +65 -0
- package/templates/starter/scripts/toolcraft-motion-review-partitioning.mjs +268 -0
- package/templates/starter/scripts/toolcraft-motion-review-partitioning.test.mjs +329 -0
- package/templates/starter/scripts/toolcraft-motion-review-protected-units.mjs +120 -0
- package/templates/starter/scripts/toolcraft-motion-review-protected-units.test.mjs +111 -0
- package/templates/starter/scripts/toolcraft-performance-escalation-policy.test.mjs +77 -345
- package/templates/starter/scripts/toolcraft-performance-receipt-validation.test.mjs +19 -21
- package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +1 -1
- package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +10 -1
- package/templates/starter/scripts/toolcraft-product-export-boundary.test.mjs +5 -1
- package/templates/starter/scripts/toolcraft-product-observable-facade.test.mjs +46 -1
- package/templates/starter/scripts/toolcraft-receipt-boundary.test.mjs +0 -1
- package/templates/starter/scripts/toolcraft-source-inventory.d.mts +5 -0
- package/templates/starter/scripts/toolcraft-source-inventory.mjs +25 -14
- package/templates/starter/scripts/toolcraft-source-inventory.test.mjs +48 -0
- package/templates/starter/scripts/toolcraft-source-ownership.mjs +0 -1
- package/templates/starter/scripts/toolcraft-source-ownership.test.mjs +30 -5
- package/templates/starter/scripts/toolcraft-verification-receipt-test-helpers.mjs +5 -26
- package/templates/starter/scripts/toolcraft-verification-receipt.d.mts +0 -7
- package/templates/starter/scripts/toolcraft-verification-receipt.mjs +3 -47
- package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +6 -87
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.d.mts +19 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.mjs +107 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.test.mjs +114 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.mjs +13 -2
- package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.test.mjs +110 -0
- package/templates/starter/src/app/acceptance/artifact-export-intent.ts +51 -20
- package/templates/starter/src/app/acceptance/canvas-coverage.ts +1 -0
- package/templates/starter/src/app/acceptance/color-bank-labels.ts +11 -15
- package/templates/starter/src/app/acceptance/color-row-grouping.ts +33 -0
- package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +0 -11
- package/templates/starter/src/app/acceptance/control-acceptance-policy.ts +2 -3
- package/templates/starter/src/app/acceptance/control-component-rules.ts +0 -10
- package/templates/starter/src/app/acceptance/control-labels.ts +30 -1
- package/templates/starter/src/app/acceptance/control-layout-section-rules.ts +18 -0
- package/templates/starter/src/app/acceptance/export-artifact-coverage.ts +25 -17
- package/templates/starter/src/app/acceptance/feature-verification-selection.test.ts +295 -0
- package/templates/starter/src/app/acceptance/feature-verification-selection.ts +161 -0
- package/templates/starter/src/app/acceptance/infinity-canvas.ts +10 -0
- package/templates/starter/src/app/acceptance/interaction-ownership-intent.ts +19 -1
- package/templates/starter/src/app/acceptance/interaction-ownership.ts +18 -2
- package/templates/starter/src/app/acceptance/motion-reference-evidence-validation.mjs +65 -0
- package/templates/starter/src/app/acceptance/motion-reference-evidence-windows.mjs +301 -0
- package/templates/starter/src/app/acceptance/motion-reference-evidence.d.mts +11 -0
- package/templates/starter/src/app/acceptance/motion-reference-evidence.mjs +145 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-behaviors.ts +162 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-coverage.ts +206 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-identity.ts +129 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-partitions.ts +186 -0
- package/templates/starter/src/app/acceptance/motion-reference-study.ts +90 -0
- package/templates/starter/src/app/acceptance/output-export-actions.test.ts +9 -1
- package/templates/starter/src/app/acceptance/output-export-actions.ts +14 -22
- package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +5 -1
- package/templates/starter/src/app/acceptance/output-export-model.ts +4 -0
- package/templates/starter/src/app/acceptance/output-export.ts +4 -1
- package/templates/starter/src/app/acceptance/reference-study-types.ts +167 -17
- package/templates/starter/src/app/acceptance/runtime-coverage.ts +6 -1
- package/templates/starter/src/app/acceptance/selection-scope.test.ts +200 -0
- package/templates/starter/src/app/acceptance/selection-scope.ts +151 -0
- package/templates/starter/src/app/acceptance/transfer-mode-types.ts +114 -0
- package/templates/starter/src/app/acceptance/types.ts +43 -118
- package/templates/starter/src/app/acceptance/validate-coverage.ts +14 -3
- package/templates/starter/src/app/starter-acceptance-data.ts +1 -0
- package/templates/starter/src/app/starter-acceptance.animation-intent.test.ts +3 -0
- package/templates/starter/src/app/starter-acceptance.artifact-export-intent.test.ts +81 -8
- package/templates/starter/src/app/starter-acceptance.background-export.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.color-row-grouping.test.ts +118 -0
- package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +1 -1
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +1 -0
- package/templates/starter/src/app/starter-acceptance.control-applicability.test.ts +1 -0
- package/templates/starter/src/app/starter-acceptance.control-label-context.test.ts +1 -0
- package/templates/starter/src/app/starter-acceptance.control-labels.test.ts +78 -3
- package/templates/starter/src/app/starter-acceptance.control-naming-rules.test.ts +77 -1
- package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +1 -1
- package/templates/starter/src/app/starter-acceptance.export-artifact.test.ts +74 -3
- package/templates/starter/src/app/starter-acceptance.export-test-utils.ts +5 -1
- package/templates/starter/src/app/starter-acceptance.image-export-settings.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +19 -3
- package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -1
- package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +28 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-evidence.test.ts +17 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-identity.test.ts +163 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-mapping.test.ts +133 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-ownership.test.ts +121 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-partitions.test.ts +210 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-test-utils.ts +313 -0
- package/templates/starter/src/app/starter-acceptance.output-export-intent.test.ts +78 -4
- package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +6 -1
- package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +18 -1
- package/templates/starter/src/app/starter-acceptance.product-worklog.test.ts +123 -2
- package/templates/starter/src/app/starter-acceptance.reference-custom-timeline.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.reference-foundation.test.ts +8 -0
- package/templates/starter/src/app/starter-acceptance.reference-timeline.test.ts +7 -0
- package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.timeline-playback.test.ts +5 -0
- package/templates/starter/src/app/starter-acceptance.ts +34 -8
- package/templates/starter/src/app/starter-acceptance.video-export-settings.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.video-reference-study.test.ts +34 -236
- package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +4 -0
- package/templates/starter/src/app/starter-acceptance.worklog-test-utils.ts +122 -6
- package/templates/starter/src/app/starter-acceptance.worklog.test.ts +152 -16
- package/templates/starter/src/app/starter-performance.gates.test.ts +20 -18
- package/templates/starter/src/app/starter-performance.lifecycle.test.ts +22 -6
- package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +3 -0
- package/templates/starter/tsconfig.json +1 -0
- package/templates/starter/scripts/toolcraft-browser-impact-selection.mjs +0 -26
- package/templates/starter/scripts/toolcraft-delivery-framework-refresh.test.mjs +0 -141
- package/templates/starter/scripts/toolcraft-delivery-functional-changed.test.mjs +0 -468
- package/templates/starter/scripts/toolcraft-delivery-functional-model-lifecycle.test.mjs +0 -254
- package/templates/starter/scripts/toolcraft-delivery-functional-semantic-regression.test.mjs +0 -135
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-durability.test.mjs +0 -329
- package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +0 -430
- package/templates/starter/scripts/toolcraft-delivery-plan-functional-model.test.mjs +0 -358
- package/templates/starter/scripts/toolcraft-functional-proof-regression-fixtures.mjs +0 -298
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.d.mts +0 -62
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.mjs +0 -344
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.test.mjs +0 -204
- package/templates/starter/scripts/toolcraft-verification-impact-performance-candidates.test.mjs +0 -210
- package/templates/starter/scripts/toolcraft-verification-impact-resolution.mjs +0 -344
- package/templates/starter/scripts/toolcraft-verification-impact-resolution.test.mjs +0 -270
- package/templates/starter/scripts/toolcraft-verification-impact-semantic-resolution.test.mjs +0 -449
- package/templates/starter/scripts/toolcraft-verification-impact-support-resolution.test.mjs +0 -195
- package/templates/starter/scripts/toolcraft-verification-impact.d.mts +0 -132
- package/templates/starter/scripts/toolcraft-verification-impact.mjs +0 -169
- package/templates/starter/scripts/toolcraft-verification-impact.test.mjs +0 -300
- package/templates/starter/scripts/toolcraft-verification-input-roles.mjs +0 -197
- package/templates/starter/scripts/toolcraft-verification-input-roles.test.mjs +0 -225
- package/templates/starter/src/app/acceptance/video-reference-study.ts +0 -217
- package/templates/starter/src/app/starter-verification-impact.json +0 -15
|
@@ -8,6 +8,7 @@ import { describe, expect, it } from "vitest";
|
|
|
8
8
|
import {
|
|
9
9
|
getToolcraftOutputExportErrors,
|
|
10
10
|
schemaHasPngExportPanelAction,
|
|
11
|
+
schemaHasSvgExportPanelAction,
|
|
11
12
|
schemaHasVideoExportPanelAction,
|
|
12
13
|
} from "./acceptance/output-export";
|
|
13
14
|
import { buildToolcraftOutputExportFacts } from "./acceptance/output-export-model";
|
|
@@ -46,9 +47,11 @@ function makeProductReadiness(
|
|
|
46
47
|
|
|
47
48
|
function makeOutputActionsSection({
|
|
48
49
|
image,
|
|
50
|
+
svg,
|
|
49
51
|
video,
|
|
50
52
|
}: {
|
|
51
53
|
image: boolean;
|
|
54
|
+
svg: boolean;
|
|
52
55
|
video: boolean;
|
|
53
56
|
}): ToolcraftControlSectionSchema {
|
|
54
57
|
const actions: ToolcraftActionSchema[] = [];
|
|
@@ -62,6 +65,15 @@ function makeOutputActionsSection({
|
|
|
62
65
|
});
|
|
63
66
|
}
|
|
64
67
|
|
|
68
|
+
if (svg) {
|
|
69
|
+
actions.push({
|
|
70
|
+
icon: "upload-simple",
|
|
71
|
+
label: "Export SVG",
|
|
72
|
+
role: "export-svg",
|
|
73
|
+
value: "export.svg",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
65
77
|
if (video) {
|
|
66
78
|
actions.push({
|
|
67
79
|
icon: "upload-simple",
|
|
@@ -87,19 +99,21 @@ function makeOutputActionsSection({
|
|
|
87
99
|
function makeExportSchema({
|
|
88
100
|
imageAction = false,
|
|
89
101
|
imageSection = false,
|
|
102
|
+
svgAction = false,
|
|
90
103
|
timeline = false,
|
|
91
104
|
videoAction = false,
|
|
92
105
|
videoSection = false,
|
|
93
106
|
}: {
|
|
94
107
|
imageAction?: boolean;
|
|
95
108
|
imageSection?: boolean;
|
|
109
|
+
svgAction?: boolean;
|
|
96
110
|
timeline?: boolean;
|
|
97
111
|
videoAction?: boolean;
|
|
98
112
|
videoSection?: boolean;
|
|
99
113
|
} = {}) {
|
|
100
114
|
const sections: ToolcraftControlSectionSchema[] = [];
|
|
101
115
|
|
|
102
|
-
if (imageAction || videoAction) {
|
|
116
|
+
if (imageAction || svgAction || videoAction) {
|
|
103
117
|
sections.push(makeBackgroundSection());
|
|
104
118
|
}
|
|
105
119
|
if (imageSection) {
|
|
@@ -108,8 +122,14 @@ function makeExportSchema({
|
|
|
108
122
|
if (videoSection) {
|
|
109
123
|
sections.push(makeVideoExportSection());
|
|
110
124
|
}
|
|
111
|
-
if (imageAction || videoAction) {
|
|
112
|
-
sections.push(
|
|
125
|
+
if (imageAction || svgAction || videoAction) {
|
|
126
|
+
sections.push(
|
|
127
|
+
makeOutputActionsSection({
|
|
128
|
+
image: imageAction,
|
|
129
|
+
svg: svgAction,
|
|
130
|
+
video: videoAction,
|
|
131
|
+
}),
|
|
132
|
+
);
|
|
113
133
|
}
|
|
114
134
|
|
|
115
135
|
const panels: ToolcraftAppSchema["panels"] = {
|
|
@@ -133,12 +153,14 @@ function makeExportSchema({
|
|
|
133
153
|
|
|
134
154
|
function makeArtifactCoverage({
|
|
135
155
|
image,
|
|
156
|
+
svg,
|
|
136
157
|
video,
|
|
137
158
|
}: {
|
|
138
159
|
image: boolean;
|
|
160
|
+
svg: boolean;
|
|
139
161
|
video: boolean;
|
|
140
162
|
}): readonly ToolcraftComponentAcceptance[] {
|
|
141
|
-
if (!image && !video) {
|
|
163
|
+
if (!image && !svg && !video) {
|
|
142
164
|
return [];
|
|
143
165
|
}
|
|
144
166
|
|
|
@@ -147,6 +169,9 @@ function makeArtifactCoverage({
|
|
|
147
169
|
if (image) {
|
|
148
170
|
exportArtifactCoverage.push("all-required-image-export-behavior");
|
|
149
171
|
}
|
|
172
|
+
if (svg) {
|
|
173
|
+
exportArtifactCoverage.push("all-required-svg-export-behavior");
|
|
174
|
+
}
|
|
150
175
|
if (video) {
|
|
151
176
|
exportArtifactCoverage.push("all-required-video-export-behavior");
|
|
152
177
|
}
|
|
@@ -155,6 +180,7 @@ function makeArtifactCoverage({
|
|
|
155
180
|
{
|
|
156
181
|
actionCoverage: [
|
|
157
182
|
...(image ? ["export.png"] : []),
|
|
183
|
+
...(svg ? ["export.svg"] : []),
|
|
158
184
|
...(video ? ["export.video"] : []),
|
|
159
185
|
],
|
|
160
186
|
automated: true,
|
|
@@ -184,6 +210,7 @@ function getExplicitExportErrors({
|
|
|
184
210
|
return getToolcraftOutputExportErrors({
|
|
185
211
|
acceptance: makeArtifactCoverage({
|
|
186
212
|
image: schemaHasPngExportPanelAction(schema),
|
|
213
|
+
svg: schemaHasSvgExportPanelAction(schema),
|
|
187
214
|
video: schemaHasVideoExportPanelAction(schema),
|
|
188
215
|
}),
|
|
189
216
|
controls: collectToolcraftVisibleAcceptanceControls(schema),
|
|
@@ -197,6 +224,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
197
224
|
const errors = getExplicitExportErrors({
|
|
198
225
|
intent: {
|
|
199
226
|
image: { mode: "toolcraft-default" },
|
|
227
|
+
svg: { mode: "not-requested" },
|
|
200
228
|
video: { mode: "not-requested" },
|
|
201
229
|
},
|
|
202
230
|
schema: makeExportSchema({
|
|
@@ -219,6 +247,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
219
247
|
const errors = getExplicitExportErrors({
|
|
220
248
|
intent: {
|
|
221
249
|
image: { mode: "toolcraft-default" },
|
|
250
|
+
svg: { mode: "not-requested" },
|
|
222
251
|
video: {
|
|
223
252
|
evidence: "The user explicitly requested MP4 delivery.",
|
|
224
253
|
mode: "user-requested",
|
|
@@ -265,6 +294,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
265
294
|
evidence: "The user explicitly requested no image artifact.",
|
|
266
295
|
mode: "user-removed",
|
|
267
296
|
},
|
|
297
|
+
svg: { mode: "not-requested" },
|
|
268
298
|
video: { mode: "not-requested" },
|
|
269
299
|
},
|
|
270
300
|
schema: makeExportSchema({ imageAction, imageSection }),
|
|
@@ -277,6 +307,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
277
307
|
getExplicitExportErrors({
|
|
278
308
|
intent: {
|
|
279
309
|
image: { mode: "toolcraft-default" },
|
|
310
|
+
svg: { mode: "not-requested" },
|
|
280
311
|
video: { mode: "not-requested" },
|
|
281
312
|
},
|
|
282
313
|
schema: makeExportSchema(),
|
|
@@ -291,6 +322,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
291
322
|
getExplicitExportErrors({
|
|
292
323
|
intent: {
|
|
293
324
|
image: { evidence: " \n\t", mode: "user-removed" },
|
|
325
|
+
svg: { mode: "not-requested" },
|
|
294
326
|
video: { mode: "not-requested" },
|
|
295
327
|
},
|
|
296
328
|
schema: makeExportSchema(),
|
|
@@ -308,6 +340,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
308
340
|
evidence: "The user explicitly requested no image artifact.",
|
|
309
341
|
mode: "user-removed",
|
|
310
342
|
},
|
|
343
|
+
svg: { mode: "not-requested" },
|
|
311
344
|
video: {
|
|
312
345
|
evidence: "The user explicitly requested MP4 delivery.",
|
|
313
346
|
mode: "user-requested",
|
|
@@ -326,6 +359,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
326
359
|
evidence: "The user explicitly requested no downloadable artifacts.",
|
|
327
360
|
mode: "user-removed",
|
|
328
361
|
},
|
|
362
|
+
svg: { mode: "not-requested" },
|
|
329
363
|
video: { mode: "not-requested" },
|
|
330
364
|
},
|
|
331
365
|
schema: makeExportSchema(),
|
|
@@ -333,10 +367,48 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
333
367
|
).toEqual([]);
|
|
334
368
|
});
|
|
335
369
|
|
|
370
|
+
it("accepts explicit editable SVG-only delivery without inventing a settings section", () => {
|
|
371
|
+
expect(
|
|
372
|
+
getExplicitExportErrors({
|
|
373
|
+
intent: {
|
|
374
|
+
image: {
|
|
375
|
+
evidence: "The user requested SVG instead of image export.",
|
|
376
|
+
mode: "user-removed",
|
|
377
|
+
},
|
|
378
|
+
svg: {
|
|
379
|
+
evidence: "The user explicitly requested editable SVG delivery.",
|
|
380
|
+
mode: "user-requested",
|
|
381
|
+
},
|
|
382
|
+
video: { mode: "not-requested" },
|
|
383
|
+
},
|
|
384
|
+
schema: makeExportSchema({ svgAction: true }),
|
|
385
|
+
}),
|
|
386
|
+
).toEqual([]);
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
it("requires the typed SVG action when SVG delivery was requested", () => {
|
|
390
|
+
expect(
|
|
391
|
+
getExplicitExportErrors({
|
|
392
|
+
intent: {
|
|
393
|
+
image: { mode: "toolcraft-default" },
|
|
394
|
+
svg: {
|
|
395
|
+
evidence: "The user explicitly requested editable SVG delivery.",
|
|
396
|
+
mode: "user-requested",
|
|
397
|
+
},
|
|
398
|
+
video: { mode: "not-requested" },
|
|
399
|
+
},
|
|
400
|
+
schema: makeExportSchema({ imageAction: true, imageSection: true }),
|
|
401
|
+
}),
|
|
402
|
+
).toContain(
|
|
403
|
+
'SVG export intent "user-requested" requires an export-svg panel action.',
|
|
404
|
+
);
|
|
405
|
+
});
|
|
406
|
+
|
|
336
407
|
it("does not infer video delivery from an enabled playback timeline", () => {
|
|
337
408
|
const errors = getExplicitExportErrors({
|
|
338
409
|
intent: {
|
|
339
410
|
image: { mode: "toolcraft-default" },
|
|
411
|
+
svg: { mode: "not-requested" },
|
|
340
412
|
video: { mode: "not-requested" },
|
|
341
413
|
},
|
|
342
414
|
schema: makeExportSchema({
|
|
@@ -356,6 +428,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
356
428
|
getExplicitExportErrors({
|
|
357
429
|
intent: {
|
|
358
430
|
image: { mode: "toolcraft-default" },
|
|
431
|
+
svg: { mode: "not-requested" },
|
|
359
432
|
video: {
|
|
360
433
|
evidence: "The user explicitly requested video delivery.",
|
|
361
434
|
mode: "user-requested",
|
|
@@ -377,6 +450,7 @@ describe("Toolcraft explicit output export intent", () => {
|
|
|
377
450
|
});
|
|
378
451
|
|
|
379
452
|
expect(facts.hasImageExportAction).toBe(false);
|
|
453
|
+
expect(facts.hasSvgExportAction).toBe(false);
|
|
380
454
|
expect(facts.hasVideoExportAction).toBe(false);
|
|
381
455
|
expect(facts.imageExportSectionIndex).toBeGreaterThanOrEqual(0);
|
|
382
456
|
expect(facts.finalExportSettingsIndex).toBe(-1);
|
|
@@ -4,6 +4,7 @@ import { resolveToolcraftArtifactExportIntent } from "./acceptance/artifact-expo
|
|
|
4
4
|
import { starterProductReadiness } from "./starter-acceptance";
|
|
5
5
|
import {
|
|
6
6
|
textLooksLikePngExport,
|
|
7
|
+
textLooksLikeSvgExport,
|
|
7
8
|
textLooksLikeVideoExport,
|
|
8
9
|
} from "./starter-acceptance.export-test-utils";
|
|
9
10
|
import {
|
|
@@ -31,7 +32,7 @@ describe("Toolcraft output export acceptance contract", () => {
|
|
|
31
32
|
new Set(["checkbox", "select", "segmented", "switch"]),
|
|
32
33
|
);
|
|
33
34
|
|
|
34
|
-
if (delivery.imageEnabled || delivery.videoEnabled) {
|
|
35
|
+
if (delivery.imageEnabled || delivery.svgEnabled || delivery.videoEnabled) {
|
|
35
36
|
expect(
|
|
36
37
|
panelActionTexts.length,
|
|
37
38
|
"Product apps with artifact delivery must define panelActions in the controls panel sticky footer.",
|
|
@@ -84,6 +85,10 @@ describe("Toolcraft output export acceptance contract", () => {
|
|
|
84
85
|
imageExportSection !== undefined,
|
|
85
86
|
'"Image Export" section presence must match resolved product export intent.',
|
|
86
87
|
).toBe(delivery.imageEnabled);
|
|
88
|
+
expect(
|
|
89
|
+
panelActionTexts.some(textLooksLikeSvgExport),
|
|
90
|
+
"SVG export action presence must match resolved product export intent.",
|
|
91
|
+
).toBe(delivery.svgEnabled);
|
|
87
92
|
|
|
88
93
|
if (delivery.imageEnabled) {
|
|
89
94
|
expect(
|
|
@@ -4,7 +4,10 @@ import {
|
|
|
4
4
|
starterProductReadiness,
|
|
5
5
|
starterTransferMode,
|
|
6
6
|
} from "./starter-acceptance";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
schemaHasSvgExportPanelAction,
|
|
9
|
+
schemaHasVideoExportPanelAction,
|
|
10
|
+
} from "./acceptance/output-export";
|
|
8
11
|
import { isNeutralTemplateProject } from "./starter-acceptance.product-readiness-test-utils";
|
|
9
12
|
import { schemaHasProductSurface } from "./starter-acceptance.schema-test-utils";
|
|
10
13
|
import { starterSchema } from "./starter-schema";
|
|
@@ -18,9 +21,18 @@ describe("Toolcraft product readiness", () => {
|
|
|
18
21
|
expect(starterTransferMode).toEqual({
|
|
19
22
|
animationIntent: { mode: "none" },
|
|
20
23
|
mode: "new-toolcraft-app",
|
|
24
|
+
referenceInputs: [],
|
|
21
25
|
});
|
|
22
26
|
});
|
|
23
27
|
|
|
28
|
+
it("makes the no-reference decision explicit", () => {
|
|
29
|
+
if (starterProductReadiness.mode !== "starter") {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
expect(starterTransferMode.referenceInputs).toEqual([]);
|
|
34
|
+
});
|
|
35
|
+
|
|
24
36
|
it("allows neutral readiness only for the source starter/template folder", () => {
|
|
25
37
|
if (starterProductReadiness.mode === "product") {
|
|
26
38
|
expect(starterProductReadiness.exportIntent).toBeDefined();
|
|
@@ -34,6 +46,11 @@ describe("Toolcraft product readiness", () => {
|
|
|
34
46
|
? "user-requested"
|
|
35
47
|
: "not-requested",
|
|
36
48
|
);
|
|
49
|
+
expect(starterProductReadiness.exportIntent.svg.mode).toBe(
|
|
50
|
+
schemaHasSvgExportPanelAction(starterSchema)
|
|
51
|
+
? "user-requested"
|
|
52
|
+
: "not-requested",
|
|
53
|
+
);
|
|
37
54
|
expect(starterProductReadiness.productName.trim()).not.toBe("");
|
|
38
55
|
expect(starterProductReadiness.productSummary.trim()).not.toBe("");
|
|
39
56
|
expect(starterProductReadiness.requestedBehavior.trim()).not.toBe("");
|
|
@@ -2,20 +2,141 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
2
2
|
|
|
3
3
|
import { describe, expect, it } from "vitest";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
starterProductReadiness,
|
|
7
|
+
starterTransferMode,
|
|
8
|
+
} from "./starter-acceptance";
|
|
9
|
+
import type { ToolcraftTransferMode } from "./starter-acceptance";
|
|
10
|
+
import {
|
|
11
|
+
createMotionReferenceBehavior,
|
|
12
|
+
createMotionReferenceInput,
|
|
13
|
+
createOrdinalMotionReferenceStudy,
|
|
14
|
+
createTimedMotionReferenceStudy,
|
|
15
|
+
} from "./starter-acceptance.motion-reference-test-utils";
|
|
6
16
|
import { schemaHasProductSurface } from "./starter-acceptance.schema-test-utils";
|
|
7
17
|
import {
|
|
8
18
|
agentWorklogPath,
|
|
9
19
|
getAgentWorklogValidationErrors,
|
|
20
|
+
type WorklogMotionReference,
|
|
10
21
|
} from "./starter-acceptance.worklog-test-utils";
|
|
11
22
|
|
|
23
|
+
function getWorklogMotionReferences(
|
|
24
|
+
transferMode: ToolcraftTransferMode,
|
|
25
|
+
): readonly WorklogMotionReference[] {
|
|
26
|
+
return transferMode.referenceInputs.flatMap((referenceInput) =>
|
|
27
|
+
referenceInput.studies.map((study) => {
|
|
28
|
+
const requiresRealTimeReview =
|
|
29
|
+
study.evidence.timingMode === "seconds";
|
|
30
|
+
const requiresSlowedReview =
|
|
31
|
+
requiresRealTimeReview &&
|
|
32
|
+
(study.events.some(
|
|
33
|
+
({ classification }) => classification === "product-behavior",
|
|
34
|
+
) ||
|
|
35
|
+
referenceInput.behaviors.some((behavior) =>
|
|
36
|
+
behavior.timingClaims.some(
|
|
37
|
+
(claim) => claim.studyId === study.studyId,
|
|
38
|
+
),
|
|
39
|
+
));
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
contactSheetPath: study.evidence.contactSheet.path,
|
|
43
|
+
referenceId: referenceInput.referenceId,
|
|
44
|
+
requiresRealTimeReview,
|
|
45
|
+
requiresSlowedReview,
|
|
46
|
+
sourceSha256: study.evidence.sourceSha256,
|
|
47
|
+
studyId: study.studyId,
|
|
48
|
+
timingMode: study.evidence.timingMode,
|
|
49
|
+
} satisfies WorklogMotionReference;
|
|
50
|
+
}),
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const worklogMotionReferences = getWorklogMotionReferences(starterTransferMode);
|
|
55
|
+
|
|
12
56
|
describe("Toolcraft product worklog", () => {
|
|
57
|
+
it("derives real-time, slowed, and ordered-frame review requirements per nested study", () => {
|
|
58
|
+
const transferMode: ToolcraftTransferMode = {
|
|
59
|
+
animationIntent: { mode: "none" },
|
|
60
|
+
mode: "new-toolcraft-app",
|
|
61
|
+
referenceInputs: [
|
|
62
|
+
createMotionReferenceInput({
|
|
63
|
+
behaviors: [
|
|
64
|
+
createMotionReferenceBehavior({
|
|
65
|
+
timingClaims: [{ claim: "duration", studyId: "study-claim" }],
|
|
66
|
+
}),
|
|
67
|
+
],
|
|
68
|
+
studies: [
|
|
69
|
+
createTimedMotionReferenceStudy({
|
|
70
|
+
pathId: "study-event",
|
|
71
|
+
studyId: "study-event",
|
|
72
|
+
}),
|
|
73
|
+
createTimedMotionReferenceStudy({
|
|
74
|
+
pathId: "study-claim",
|
|
75
|
+
studyId: "study-claim",
|
|
76
|
+
withEvent: false,
|
|
77
|
+
}),
|
|
78
|
+
createTimedMotionReferenceStudy({
|
|
79
|
+
pathId: "study-quiet",
|
|
80
|
+
studyId: "study-quiet",
|
|
81
|
+
withEvent: false,
|
|
82
|
+
}),
|
|
83
|
+
createOrdinalMotionReferenceStudy({
|
|
84
|
+
pathId: "study-ordinal",
|
|
85
|
+
studyId: "study-ordinal",
|
|
86
|
+
}),
|
|
87
|
+
],
|
|
88
|
+
}),
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
expect(
|
|
93
|
+
getWorklogMotionReferences(transferMode).map(
|
|
94
|
+
({ requiresRealTimeReview, requiresSlowedReview, studyId, timingMode }) =>
|
|
95
|
+
({
|
|
96
|
+
requiresRealTimeReview,
|
|
97
|
+
requiresSlowedReview,
|
|
98
|
+
studyId,
|
|
99
|
+
timingMode,
|
|
100
|
+
}),
|
|
101
|
+
),
|
|
102
|
+
).toEqual([
|
|
103
|
+
{
|
|
104
|
+
requiresRealTimeReview: true,
|
|
105
|
+
requiresSlowedReview: true,
|
|
106
|
+
studyId: "study-event",
|
|
107
|
+
timingMode: "seconds",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
requiresRealTimeReview: true,
|
|
111
|
+
requiresSlowedReview: true,
|
|
112
|
+
studyId: "study-claim",
|
|
113
|
+
timingMode: "seconds",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
requiresRealTimeReview: true,
|
|
117
|
+
requiresSlowedReview: false,
|
|
118
|
+
studyId: "study-quiet",
|
|
119
|
+
timingMode: "seconds",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
requiresRealTimeReview: false,
|
|
123
|
+
requiresSlowedReview: false,
|
|
124
|
+
studyId: "study-ordinal",
|
|
125
|
+
timingMode: "ordinal",
|
|
126
|
+
},
|
|
127
|
+
]);
|
|
128
|
+
});
|
|
129
|
+
|
|
13
130
|
it("requires product apps to replace the starter worklog with decision evidence", () => {
|
|
14
131
|
if (starterProductReadiness.mode !== "product" && !schemaHasProductSurface()) {
|
|
15
132
|
return;
|
|
16
133
|
}
|
|
17
134
|
|
|
18
135
|
expect(existsSync(agentWorklogPath)).toBe(true);
|
|
19
|
-
expect(
|
|
136
|
+
expect(
|
|
137
|
+
getAgentWorklogValidationErrors(readFileSync(agentWorklogPath, "utf8"), {
|
|
138
|
+
motionReferences: worklogMotionReferences,
|
|
139
|
+
}),
|
|
140
|
+
).toEqual([]);
|
|
20
141
|
});
|
|
21
142
|
});
|
|
@@ -19,6 +19,7 @@ describe("starter acceptance custom reference timeline contract", () => {
|
|
|
19
19
|
transferMode: {
|
|
20
20
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
21
21
|
mode: "reference-runtime-clone",
|
|
22
|
+
referenceInputs: [],
|
|
22
23
|
referenceName: "legacy state timeline",
|
|
23
24
|
referenceTimeline: {
|
|
24
25
|
behaviorCoverage: ["state-jump", "trim-range"],
|
|
@@ -117,6 +118,7 @@ describe("starter acceptance custom reference timeline contract", () => {
|
|
|
117
118
|
transferMode: {
|
|
118
119
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
119
120
|
mode: "reference-runtime-clone",
|
|
121
|
+
referenceInputs: [],
|
|
120
122
|
referenceFeatureInventory: makeReferenceFeatureInventory([
|
|
121
123
|
{
|
|
122
124
|
acceptanceId: "reference.timeline.stateJump",
|
|
@@ -27,6 +27,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
27
27
|
"renderer-loop",
|
|
28
28
|
],
|
|
29
29
|
mode: "reference-runtime-clone",
|
|
30
|
+
referenceInputs: [],
|
|
30
31
|
referenceName: "legacy badge wall",
|
|
31
32
|
sourceOfTruth: "reference-runtime",
|
|
32
33
|
} as never,
|
|
@@ -57,6 +58,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
57
58
|
transferMode: {
|
|
58
59
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
59
60
|
mode: "reference-runtime-clone",
|
|
61
|
+
referenceInputs: [],
|
|
60
62
|
referenceName: "legacy badge wall",
|
|
61
63
|
referenceTimeline: { behaviorCoverage: [], mode: "none" },
|
|
62
64
|
sourceOfTruth: "reference-runtime",
|
|
@@ -86,6 +88,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
86
88
|
transferMode: {
|
|
87
89
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
88
90
|
mode: "reference-runtime-clone",
|
|
91
|
+
referenceInputs: [],
|
|
89
92
|
referenceFeatureInventory: makeReferenceFeatureInventory(),
|
|
90
93
|
referenceName: "legacy badge wall",
|
|
91
94
|
referenceTimeline: { behaviorCoverage: [], mode: "none" },
|
|
@@ -110,6 +113,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
110
113
|
transferMode: {
|
|
111
114
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
112
115
|
mode: "reference-runtime-clone",
|
|
116
|
+
referenceInputs: [],
|
|
113
117
|
referenceFeatureInventory: makeReferenceFeatureInventory(),
|
|
114
118
|
referenceName: "legacy badge wall",
|
|
115
119
|
referenceStudy: {
|
|
@@ -141,6 +145,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
141
145
|
transferMode: {
|
|
142
146
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
143
147
|
mode: "reference-runtime-clone",
|
|
148
|
+
referenceInputs: [],
|
|
144
149
|
referenceFeatureInventory: [
|
|
145
150
|
{
|
|
146
151
|
acceptanceId: "appearance.opacity",
|
|
@@ -180,6 +185,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
180
185
|
transferMode: {
|
|
181
186
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
182
187
|
mode: "reference-runtime-clone",
|
|
188
|
+
referenceInputs: [],
|
|
183
189
|
referenceFeatureInventory: [
|
|
184
190
|
{ ...makeReferenceFeatureInventory()[0], behaviorEvidence: "" },
|
|
185
191
|
...makeReferenceFeatureInventory().slice(1),
|
|
@@ -208,6 +214,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
208
214
|
transferMode: {
|
|
209
215
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
210
216
|
mode: "reference-runtime-clone",
|
|
217
|
+
referenceInputs: [],
|
|
211
218
|
referenceFeatureInventory: [
|
|
212
219
|
{
|
|
213
220
|
...makeReferenceFeatureInventory()[0],
|
|
@@ -292,6 +299,7 @@ describe("starter acceptance reference-runtime foundation", () => {
|
|
|
292
299
|
transferMode: {
|
|
293
300
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
294
301
|
mode: "reference-runtime-clone",
|
|
302
|
+
referenceInputs: [],
|
|
295
303
|
referenceName: "legacy iframe shell",
|
|
296
304
|
referenceTimeline: { behaviorCoverage: [], mode: "none" },
|
|
297
305
|
sourceOfTruth: "reference-runtime",
|
|
@@ -67,6 +67,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
67
67
|
transferMode: {
|
|
68
68
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
69
69
|
mode: "reference-runtime-clone",
|
|
70
|
+
referenceInputs: [],
|
|
70
71
|
referenceFeatureInventory: makeReferenceFeatureInventory(),
|
|
71
72
|
referenceName: "legacy badge wall",
|
|
72
73
|
referenceStudy: referenceStudyEvidence,
|
|
@@ -90,6 +91,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
90
91
|
"pause-resume",
|
|
91
92
|
],
|
|
92
93
|
mode: "reference-runtime-clone",
|
|
94
|
+
referenceInputs: [],
|
|
93
95
|
referenceName: "legacy pause animation",
|
|
94
96
|
referenceTimeline: { behaviorCoverage: [], mode: "none" },
|
|
95
97
|
sourceOfTruth: "reference-runtime",
|
|
@@ -114,6 +116,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
114
116
|
"time-progress",
|
|
115
117
|
],
|
|
116
118
|
mode: "reference-runtime-clone",
|
|
119
|
+
referenceInputs: [],
|
|
117
120
|
referenceName: "legacy restart animation",
|
|
118
121
|
referenceTimeline: { behaviorCoverage: [], mode: "none" },
|
|
119
122
|
sourceOfTruth: "reference-runtime",
|
|
@@ -132,6 +135,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
132
135
|
transferMode: {
|
|
133
136
|
behaviorCoverage: ["canvas-sizing", "control-mapping", "renderer-state"],
|
|
134
137
|
mode: "reference-runtime-clone",
|
|
138
|
+
referenceInputs: [],
|
|
135
139
|
referenceName: "legacy playback animation",
|
|
136
140
|
referenceTimeline: { behaviorCoverage: [], mode: "toolcraft-playback" },
|
|
137
141
|
sourceOfTruth: "reference-runtime",
|
|
@@ -170,6 +174,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
170
174
|
"pause-resume",
|
|
171
175
|
],
|
|
172
176
|
mode: "reference-runtime-clone",
|
|
177
|
+
referenceInputs: [],
|
|
173
178
|
referenceName: "legacy playback animation",
|
|
174
179
|
referenceTimeline: { behaviorCoverage: ["playback"], mode: "toolcraft-playback" },
|
|
175
180
|
sourceOfTruth: "reference-runtime",
|
|
@@ -208,6 +213,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
208
213
|
"pause-resume",
|
|
209
214
|
],
|
|
210
215
|
mode: "reference-runtime-clone",
|
|
216
|
+
referenceInputs: [],
|
|
211
217
|
referenceName: "legacy playback animation",
|
|
212
218
|
referenceTimeline: {
|
|
213
219
|
behaviorCoverage: ["playback"],
|
|
@@ -255,6 +261,7 @@ describe("starter acceptance reference timeline contract", () => {
|
|
|
255
261
|
"time-progress",
|
|
256
262
|
],
|
|
257
263
|
mode: "reference-runtime-clone",
|
|
264
|
+
referenceInputs: [],
|
|
258
265
|
referenceName: "legacy keyframe animation",
|
|
259
266
|
referenceTimeline: { behaviorCoverage: ["keyframes"], mode: "toolcraft-keyframes" },
|
|
260
267
|
sourceOfTruth: "reference-runtime",
|
|
@@ -162,6 +162,7 @@ describe("starter acceptance section cohesion contract", () => {
|
|
|
162
162
|
reason: "The flow speed is a decorative self-running effect and does not expose product time transport.",
|
|
163
163
|
},
|
|
164
164
|
mode: "new-toolcraft-app",
|
|
165
|
+
referenceInputs: [],
|
|
165
166
|
},
|
|
166
167
|
});
|
|
167
168
|
|
|
@@ -247,6 +248,7 @@ describe("starter acceptance section cohesion contract", () => {
|
|
|
247
248
|
reason: "The flow speed is a decorative self-running effect and does not expose product time transport.",
|
|
248
249
|
},
|
|
249
250
|
mode: "new-toolcraft-app",
|
|
251
|
+
referenceInputs: [],
|
|
250
252
|
},
|
|
251
253
|
}),
|
|
252
254
|
).toEqual([]);
|
|
@@ -67,6 +67,7 @@ describe("starter acceptance timeline playback contract", () => {
|
|
|
67
67
|
transferMode: {
|
|
68
68
|
animationIntent: { mode: "timeline-playback" },
|
|
69
69
|
mode: "new-toolcraft-app",
|
|
70
|
+
referenceInputs: [],
|
|
70
71
|
} as unknown as ToolcraftTransferMode,
|
|
71
72
|
}),
|
|
72
73
|
).toContain(
|
|
@@ -82,6 +83,7 @@ describe("starter acceptance timeline playback contract", () => {
|
|
|
82
83
|
transferMode: {
|
|
83
84
|
animationIntent: { mode: "none" },
|
|
84
85
|
mode: "new-toolcraft-app",
|
|
86
|
+
referenceInputs: [],
|
|
85
87
|
},
|
|
86
88
|
}),
|
|
87
89
|
).toContain(
|
|
@@ -97,6 +99,7 @@ describe("starter acceptance timeline playback contract", () => {
|
|
|
97
99
|
transferMode: {
|
|
98
100
|
animationIntent: { mode: "none" },
|
|
99
101
|
mode: "new-toolcraft-app",
|
|
102
|
+
referenceInputs: [],
|
|
100
103
|
},
|
|
101
104
|
}),
|
|
102
105
|
).toContain(
|
|
@@ -119,6 +122,7 @@ describe("starter acceptance timeline playback contract", () => {
|
|
|
119
122
|
mode: "timeline-playback",
|
|
120
123
|
},
|
|
121
124
|
mode: "new-toolcraft-app",
|
|
125
|
+
referenceInputs: [],
|
|
122
126
|
},
|
|
123
127
|
}),
|
|
124
128
|
).toContain(
|
|
@@ -141,6 +145,7 @@ describe("starter acceptance timeline playback contract", () => {
|
|
|
141
145
|
mode: "timeline-playback",
|
|
142
146
|
},
|
|
143
147
|
mode: "new-toolcraft-app",
|
|
148
|
+
referenceInputs: [],
|
|
144
149
|
},
|
|
145
150
|
}),
|
|
146
151
|
).toContain(
|