@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
|
@@ -15,6 +15,10 @@ export {
|
|
|
15
15
|
getToolcraftControlApplicabilityCases,
|
|
16
16
|
type ToolcraftControlApplicabilityCase,
|
|
17
17
|
} from "./acceptance/control-applicability-cases";
|
|
18
|
+
export {
|
|
19
|
+
createToolcraftFeatureVerificationSelection,
|
|
20
|
+
type ToolcraftFeatureVerificationSelection,
|
|
21
|
+
} from "./acceptance/feature-verification-selection";
|
|
18
22
|
import {
|
|
19
23
|
getToolcraftControlOrder as getToolcraftControlOrderForSchema,
|
|
20
24
|
getToolcraftControlOrderTargets as getToolcraftControlOrderTargetsForSchema,
|
|
@@ -42,11 +46,25 @@ import type {
|
|
|
42
46
|
ToolcraftInfinityCanvasCoverage,
|
|
43
47
|
ToolcraftMediaLifecycleCoverage,
|
|
44
48
|
ToolcraftModelImportCoverage,
|
|
49
|
+
ToolcraftMotionReferenceBehavior,
|
|
50
|
+
ToolcraftMotionReferenceCoverage,
|
|
51
|
+
ToolcraftMotionReferenceEvent,
|
|
52
|
+
ToolcraftMotionReferenceEvidence,
|
|
53
|
+
ToolcraftMotionReferenceEvidenceEvent,
|
|
54
|
+
ToolcraftMotionReferenceInput,
|
|
55
|
+
ToolcraftMotionReferenceOrdinalFrame,
|
|
56
|
+
ToolcraftMotionReferencePhase,
|
|
57
|
+
ToolcraftMotionReferenceSourceKind,
|
|
58
|
+
ToolcraftMotionReferenceStudy,
|
|
59
|
+
ToolcraftMotionReferenceTimedFrame,
|
|
60
|
+
ToolcraftMotionReferenceTimingClaim,
|
|
61
|
+
ToolcraftMotionReferenceTimingMode,
|
|
45
62
|
ToolcraftPersistenceCoverage,
|
|
46
63
|
ToolcraftProductReadiness,
|
|
47
64
|
ToolcraftReferenceCoverage,
|
|
48
65
|
ToolcraftReferenceFeatureInventoryItem,
|
|
49
66
|
ToolcraftReferenceFeatureStatus,
|
|
67
|
+
ToolcraftReferenceInput,
|
|
50
68
|
ToolcraftReferenceStudyEvidence,
|
|
51
69
|
ToolcraftReferenceStudyStatus,
|
|
52
70
|
ToolcraftReferenceTimelineContract,
|
|
@@ -55,16 +73,13 @@ import type {
|
|
|
55
73
|
ToolcraftRenderScaleCoverage,
|
|
56
74
|
ToolcraftRenderScaleState,
|
|
57
75
|
ToolcraftSettingsTransferCoverage,
|
|
76
|
+
ToolcraftSelectionScopeCoverage,
|
|
58
77
|
ToolcraftTimelineLoopDurationIntent,
|
|
59
78
|
ToolcraftTimelineLoopDurationSource,
|
|
60
79
|
ToolcraftTimelinePlaybackCoverage,
|
|
61
80
|
ToolcraftTransferMode,
|
|
62
81
|
ToolcraftViewInteractionEvidenceSource,
|
|
63
82
|
ToolcraftViewInteractionIntent,
|
|
64
|
-
ToolcraftVideoReferenceAcceptanceMapping,
|
|
65
|
-
ToolcraftVideoReferenceStoryboardFrame,
|
|
66
|
-
ToolcraftVideoReferenceStudyEvidence,
|
|
67
|
-
ToolcraftVideoReferenceTransition,
|
|
68
83
|
ToolcraftVisibleControl,
|
|
69
84
|
} from "./acceptance/types";
|
|
70
85
|
import { TOOLCRAFT_REQUIRED_MODEL_IMPORT_COVERAGE } from "./acceptance/types";
|
|
@@ -115,11 +130,25 @@ export type {
|
|
|
115
130
|
ToolcraftInfinityCanvasCoverage,
|
|
116
131
|
ToolcraftMediaLifecycleCoverage,
|
|
117
132
|
ToolcraftModelImportCoverage,
|
|
133
|
+
ToolcraftMotionReferenceBehavior,
|
|
134
|
+
ToolcraftMotionReferenceCoverage,
|
|
135
|
+
ToolcraftMotionReferenceEvent,
|
|
136
|
+
ToolcraftMotionReferenceEvidence,
|
|
137
|
+
ToolcraftMotionReferenceEvidenceEvent,
|
|
138
|
+
ToolcraftMotionReferenceInput,
|
|
139
|
+
ToolcraftMotionReferenceOrdinalFrame,
|
|
140
|
+
ToolcraftMotionReferencePhase,
|
|
141
|
+
ToolcraftMotionReferenceSourceKind,
|
|
142
|
+
ToolcraftMotionReferenceStudy,
|
|
143
|
+
ToolcraftMotionReferenceTimedFrame,
|
|
144
|
+
ToolcraftMotionReferenceTimingClaim,
|
|
145
|
+
ToolcraftMotionReferenceTimingMode,
|
|
118
146
|
ToolcraftPersistenceCoverage,
|
|
119
147
|
ToolcraftProductReadiness,
|
|
120
148
|
ToolcraftReferenceCoverage,
|
|
121
149
|
ToolcraftReferenceFeatureInventoryItem,
|
|
122
150
|
ToolcraftReferenceFeatureStatus,
|
|
151
|
+
ToolcraftReferenceInput,
|
|
123
152
|
ToolcraftReferenceStudyEvidence,
|
|
124
153
|
ToolcraftReferenceStudyStatus,
|
|
125
154
|
ToolcraftReferenceTimelineContract,
|
|
@@ -128,16 +157,13 @@ export type {
|
|
|
128
157
|
ToolcraftRenderScaleCoverage,
|
|
129
158
|
ToolcraftRenderScaleState,
|
|
130
159
|
ToolcraftSettingsTransferCoverage,
|
|
160
|
+
ToolcraftSelectionScopeCoverage,
|
|
131
161
|
ToolcraftTimelineLoopDurationIntent,
|
|
132
162
|
ToolcraftTimelineLoopDurationSource,
|
|
133
163
|
ToolcraftTimelinePlaybackCoverage,
|
|
134
164
|
ToolcraftTransferMode,
|
|
135
165
|
ToolcraftViewInteractionEvidenceSource,
|
|
136
166
|
ToolcraftViewInteractionIntent,
|
|
137
|
-
ToolcraftVideoReferenceAcceptanceMapping,
|
|
138
|
-
ToolcraftVideoReferenceStoryboardFrame,
|
|
139
|
-
ToolcraftVideoReferenceStudyEvidence,
|
|
140
|
-
ToolcraftVideoReferenceTransition,
|
|
141
167
|
ToolcraftVisibleControl,
|
|
142
168
|
};
|
|
143
169
|
|
|
@@ -83,6 +83,7 @@ describe("Toolcraft video export settings acceptance contract", () => {
|
|
|
83
83
|
evidence: "The user explicitly removed image delivery.",
|
|
84
84
|
mode: "user-removed",
|
|
85
85
|
},
|
|
86
|
+
svg: { mode: "not-requested" },
|
|
86
87
|
video: {
|
|
87
88
|
evidence: "The user explicitly requested video delivery.",
|
|
88
89
|
mode: "user-requested",
|
|
@@ -314,6 +315,7 @@ describe("Toolcraft video export settings acceptance contract", () => {
|
|
|
314
315
|
evidence: "The user explicitly removed image delivery.",
|
|
315
316
|
mode: "user-removed",
|
|
316
317
|
},
|
|
318
|
+
svg: { mode: "not-requested" },
|
|
317
319
|
video: {
|
|
318
320
|
evidence: "The user explicitly requested video delivery.",
|
|
319
321
|
mode: "user-requested",
|
|
@@ -1,262 +1,60 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
4
|
-
ToolcraftComponentAcceptance,
|
|
5
|
-
ToolcraftVideoReferenceStudyEvidence,
|
|
6
|
-
} from "./acceptance/types";
|
|
7
3
|
import {
|
|
4
|
+
contractAcceptanceFixture,
|
|
8
5
|
contractSchemaFixture,
|
|
9
|
-
|
|
6
|
+
contractTransferModeFixture,
|
|
10
7
|
validateContractAcceptance,
|
|
11
8
|
} from "./starter-acceptance.contract-fixtures";
|
|
12
|
-
import {
|
|
13
|
-
playbackTimelineAcceptance,
|
|
14
|
-
} from "./starter-acceptance.timeline-test-utils";
|
|
15
|
-
|
|
16
|
-
const videoReferenceMotionAcceptance: ToolcraftComponentAcceptance = {
|
|
17
|
-
automated: true,
|
|
18
|
-
automatedTestName: "video reference motion matches frame delta study",
|
|
19
|
-
browser: true,
|
|
20
|
-
browserTestName: "browser: video reference motion matches frame delta study",
|
|
21
|
-
componentType: "custom-renderer",
|
|
22
|
-
evidence: "product-output",
|
|
23
|
-
expectedObservable:
|
|
24
|
-
"The renderer preserves the video reference behavior observed across the storyboard transitions.",
|
|
25
|
-
fixture: "video reference storyboard fixture",
|
|
26
|
-
id: "reference.video.motion",
|
|
27
|
-
kind: "runtime",
|
|
28
|
-
target: "reference.video.motion",
|
|
29
|
-
userAction:
|
|
30
|
-
"Compare the implemented renderer against the storyboard frames and frame-to-frame behavior deltas.",
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const videoReferenceStudyEvidence = {
|
|
34
|
-
acceptanceMapping: [
|
|
35
|
-
{
|
|
36
|
-
acceptanceId: "reference.video.motion",
|
|
37
|
-
behavior: "Planted contact points stretch across adjacent frames before retargeting.",
|
|
38
|
-
frameIds: ["f000", "f012", "f024"],
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
behaviorDecomposition:
|
|
42
|
-
"The video reference is decomposed into body movement, persistent contact points, delayed release, and retargeted anchors. The implementation copies those behaviors rather than a single static frame.",
|
|
43
|
-
extractionEvidence:
|
|
44
|
-
"Extracted frames with ffmpeg and reviewed contact sheets before implementation.",
|
|
45
|
-
referenceLocation: "/fixtures/reference-motion/ref.mp4",
|
|
46
|
-
storyboard: [
|
|
47
|
-
{
|
|
48
|
-
behaviorObservation:
|
|
49
|
-
"Body starts moving while several endpoints remain planted in canvas space.",
|
|
50
|
-
frameId: "f000",
|
|
51
|
-
frameSource: "frames/frame_000.png",
|
|
52
|
-
timeSeconds: 0,
|
|
53
|
-
visualObservation: "The body is near the left side with legs extended outward.",
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
behaviorObservation:
|
|
57
|
-
"Body advances and planted endpoints stretch instead of following immediately.",
|
|
58
|
-
frameId: "f012",
|
|
59
|
-
frameSource: "frames/frame_012.png",
|
|
60
|
-
timeSeconds: 0.2,
|
|
61
|
-
visualObservation: "Several endpoints stay near the earlier canvas positions.",
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
behaviorObservation:
|
|
65
|
-
"Over-extended legs begin to release and choose new anchors.",
|
|
66
|
-
frameId: "f024",
|
|
67
|
-
frameSource: "frames/frame_024.png",
|
|
68
|
-
timeSeconds: 0.4,
|
|
69
|
-
visualObservation: "One side shows a retargeted leg group closer to the body.",
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
behaviorObservation:
|
|
73
|
-
"The new anchor pattern stabilizes before the next release.",
|
|
74
|
-
frameId: "f036",
|
|
75
|
-
frameSource: "frames/frame_036.png",
|
|
76
|
-
timeSeconds: 0.6,
|
|
77
|
-
visualObservation: "Legs settle into a new spread with the body further right.",
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
transitionAnalysis: [
|
|
81
|
-
{
|
|
82
|
-
behaviorDelta:
|
|
83
|
-
"Between f000 and f012, body position changes faster than several leg endpoints, proving contact memory.",
|
|
84
|
-
fromFrameId: "f000",
|
|
85
|
-
id: "f000-f012",
|
|
86
|
-
toFrameId: "f012",
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
behaviorDelta:
|
|
90
|
-
"Between f012 and f024, over-extension triggers release and retargeting instead of continuous sine motion.",
|
|
91
|
-
fromFrameId: "f012",
|
|
92
|
-
id: "f012-f024",
|
|
93
|
-
toFrameId: "f024",
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
behaviorDelta:
|
|
97
|
-
"Between f024 and f036, newly planted anchors remain stable while the body keeps moving.",
|
|
98
|
-
fromFrameId: "f024",
|
|
99
|
-
id: "f024-f036",
|
|
100
|
-
toFrameId: "f036",
|
|
101
|
-
},
|
|
102
|
-
],
|
|
103
|
-
} satisfies ToolcraftVideoReferenceStudyEvidence;
|
|
104
|
-
|
|
105
|
-
function createPlaybackTimelineSchema(durationSeconds = 5.8) {
|
|
106
|
-
return {
|
|
107
|
-
...contractSchemaFixture,
|
|
108
|
-
panels: {
|
|
109
|
-
...contractSchemaFixture.panels,
|
|
110
|
-
timeline: {
|
|
111
|
-
defaultDurationSeconds: durationSeconds,
|
|
112
|
-
enabled: true,
|
|
113
|
-
mode: "playback" as const,
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
describe("starter acceptance video reference study contract", () => {
|
|
120
|
-
it("requires video reference study when a new app cites video reference evidence", () => {
|
|
121
|
-
expect(
|
|
122
|
-
validateContractAcceptance({
|
|
123
|
-
schema: createPlaybackTimelineSchema(),
|
|
124
|
-
acceptance: [playbackTimelineAcceptance],
|
|
125
|
-
transferMode: {
|
|
126
|
-
animationIntent: {
|
|
127
|
-
loopDuration: {
|
|
128
|
-
evidence: "The source reference video /fixtures/reference-motion/ref.mp4 was inspected for motion behavior.",
|
|
129
|
-
seconds: 5.8,
|
|
130
|
-
source: "reference",
|
|
131
|
-
},
|
|
132
|
-
mode: "timeline-playback",
|
|
133
|
-
},
|
|
134
|
-
mode: "new-toolcraft-app",
|
|
135
|
-
},
|
|
136
|
-
}),
|
|
137
|
-
).toContain(
|
|
138
|
-
"starterTransferMode cites a video reference, screen recording, GIF, extracted frames, or contact sheet; declare videoReferenceStudy with storyboard frames, frame-to-frame transition analysis, behavior decomposition, and acceptance mapping before implementation.",
|
|
139
|
-
);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it("does not require video reference study for ordinary video export intent", () => {
|
|
143
|
-
const schemaWithPlaybackTimeline = defineContractSchemaFixture({
|
|
144
|
-
canvas: {
|
|
145
|
-
enabled: true,
|
|
146
|
-
upload: true,
|
|
147
|
-
},
|
|
148
|
-
panels: {
|
|
149
|
-
controls: {
|
|
150
|
-
sections: [],
|
|
151
|
-
title: "Controls",
|
|
152
|
-
},
|
|
153
|
-
timeline: { defaultDurationSeconds: 6, enabled: true, mode: "playback" as const },
|
|
154
|
-
},
|
|
155
|
-
toolbar: {
|
|
156
|
-
history: true,
|
|
157
|
-
radar: true,
|
|
158
|
-
zoom: true,
|
|
159
|
-
},
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
expect(
|
|
163
|
-
validateContractAcceptance({
|
|
164
|
-
schema: schemaWithPlaybackTimeline,
|
|
165
|
-
acceptance: [playbackTimelineAcceptance],
|
|
166
|
-
transferMode: {
|
|
167
|
-
animationIntent: {
|
|
168
|
-
loopDuration: {
|
|
169
|
-
evidence: "The product timing model derives a six second cycle for exported video output.",
|
|
170
|
-
seconds: 6,
|
|
171
|
-
source: "product-derived",
|
|
172
|
-
},
|
|
173
|
-
mode: "timeline-playback",
|
|
174
|
-
},
|
|
175
|
-
mode: "new-toolcraft-app",
|
|
176
|
-
},
|
|
177
|
-
}),
|
|
178
|
-
).toEqual([]);
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
it("accepts a new app video reference only with storyboard and transition acceptance mapping", () => {
|
|
182
|
-
const schemaWithPlaybackTimeline = defineContractSchemaFixture({
|
|
183
|
-
canvas: {
|
|
184
|
-
enabled: true,
|
|
185
|
-
upload: true,
|
|
186
|
-
},
|
|
187
|
-
panels: {
|
|
188
|
-
controls: {
|
|
189
|
-
sections: [],
|
|
190
|
-
title: "Controls",
|
|
191
|
-
},
|
|
192
|
-
timeline: { defaultDurationSeconds: 5.8, enabled: true, mode: "playback" as const },
|
|
193
|
-
},
|
|
194
|
-
toolbar: {
|
|
195
|
-
history: true,
|
|
196
|
-
radar: true,
|
|
197
|
-
zoom: true,
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
9
|
|
|
10
|
+
describe("starter acceptance motion reference pipeline", () => {
|
|
11
|
+
it("does not infer reference authority from prose when referenceInputs is explicitly empty", () => {
|
|
201
12
|
expect(
|
|
202
13
|
validateContractAcceptance({
|
|
203
|
-
|
|
204
|
-
|
|
14
|
+
acceptance: contractAcceptanceFixture,
|
|
15
|
+
schema: contractSchemaFixture,
|
|
205
16
|
transferMode: {
|
|
17
|
+
...contractTransferModeFixture,
|
|
206
18
|
animationIntent: {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
19
|
+
mode: "autonomous",
|
|
20
|
+
behaviorCoverage: [
|
|
21
|
+
"no-duration-control",
|
|
22
|
+
"no-export-at-time",
|
|
23
|
+
"no-loop-control",
|
|
24
|
+
"no-play-pause",
|
|
25
|
+
"no-scrub",
|
|
26
|
+
"no-user-facing-transport",
|
|
27
|
+
],
|
|
28
|
+
reason:
|
|
29
|
+
"A decorative loop happens to mention an inspected video but owns no product time transport.",
|
|
213
30
|
},
|
|
214
|
-
|
|
215
|
-
videoReferenceStudy: videoReferenceStudyEvidence,
|
|
31
|
+
referenceInputs: [],
|
|
216
32
|
},
|
|
217
33
|
}),
|
|
218
34
|
).toEqual([]);
|
|
219
35
|
});
|
|
220
36
|
|
|
221
|
-
it("
|
|
37
|
+
it("routes explicit normalized reference inputs through the semantic validator", () => {
|
|
222
38
|
expect(
|
|
223
39
|
validateContractAcceptance({
|
|
40
|
+
acceptance: contractAcceptanceFixture,
|
|
224
41
|
schema: contractSchemaFixture,
|
|
225
|
-
acceptance: [],
|
|
226
42
|
transferMode: {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
extractionEvidence: "",
|
|
238
|
-
referenceLocation: "/fixtures/reference-motion/ref.mp4",
|
|
239
|
-
storyboard: [
|
|
240
|
-
{
|
|
241
|
-
behaviorObservation: "Only one frame was inspected.",
|
|
242
|
-
frameId: "f001",
|
|
243
|
-
frameSource: "frames/frame_001.png",
|
|
244
|
-
timeSeconds: 0,
|
|
245
|
-
visualObservation: "A single static state.",
|
|
246
|
-
},
|
|
247
|
-
],
|
|
248
|
-
transitionAnalysis: [],
|
|
249
|
-
},
|
|
43
|
+
...contractTransferModeFixture,
|
|
44
|
+
referenceInputs: [
|
|
45
|
+
{
|
|
46
|
+
behaviors: [],
|
|
47
|
+
kind: "motion-reference",
|
|
48
|
+
referenceId:
|
|
49
|
+
"motion-reference-v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
50
|
+
studies: [],
|
|
51
|
+
},
|
|
52
|
+
],
|
|
250
53
|
},
|
|
251
54
|
}),
|
|
252
|
-
).
|
|
253
|
-
|
|
254
|
-
"videoReferenceStudy.extractionEvidence must explain how frames were inspected or extracted before implementation.",
|
|
255
|
-
"videoReferenceStudy.behaviorDecomposition must decompose the observed frame-to-frame changes into product behavior to preserve.",
|
|
256
|
-
"videoReferenceStudy.storyboard must include at least four timecoded frames so the reference is studied as motion, not a single screenshot.",
|
|
257
|
-
"videoReferenceStudy.transitionAnalysis must include at least three frame-to-frame deltas proving how behavior changes between sampled frames.",
|
|
258
|
-
'videoReferenceStudy.acceptanceMapping "Motion behavior" points to missing acceptanceId "missing.acceptance".',
|
|
259
|
-
]),
|
|
55
|
+
).toContain(
|
|
56
|
+
'motion reference "motion-reference-v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" must declare at least one study.',
|
|
260
57
|
);
|
|
261
58
|
});
|
|
59
|
+
|
|
262
60
|
});
|
|
@@ -20,6 +20,7 @@ const defaultPose = {
|
|
|
20
20
|
const noAnimation: ToolcraftTransferMode = {
|
|
21
21
|
animationIntent: { mode: "none" },
|
|
22
22
|
mode: "new-toolcraft-app",
|
|
23
|
+
referenceInputs: [],
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
const timelineAnimation: ToolcraftTransferMode = {
|
|
@@ -32,6 +33,7 @@ const timelineAnimation: ToolcraftTransferMode = {
|
|
|
32
33
|
mode: "timeline-playback",
|
|
33
34
|
},
|
|
34
35
|
mode: "new-toolcraft-app",
|
|
36
|
+
referenceInputs: [],
|
|
35
37
|
};
|
|
36
38
|
|
|
37
39
|
function createProductReadiness(
|
|
@@ -40,6 +42,7 @@ function createProductReadiness(
|
|
|
40
42
|
return {
|
|
41
43
|
exportIntent: {
|
|
42
44
|
image: { mode: "toolcraft-default" },
|
|
45
|
+
svg: { mode: "not-requested" },
|
|
43
46
|
video: { mode: "not-requested" },
|
|
44
47
|
},
|
|
45
48
|
interactionOwnership: [],
|
|
@@ -117,6 +120,7 @@ describe("Toolcraft spatial view interaction intent", () => {
|
|
|
117
120
|
const productReadiness = {
|
|
118
121
|
exportIntent: {
|
|
119
122
|
image: { mode: "toolcraft-default" },
|
|
123
|
+
svg: { mode: "not-requested" },
|
|
120
124
|
video: { mode: "not-requested" },
|
|
121
125
|
},
|
|
122
126
|
mode: "product",
|
|
@@ -13,6 +13,9 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
TOOLCRAFT_DELIVERY_VERIFICATION_COMMAND,
|
|
15
15
|
} from "../../scripts/toolcraft-performance-authority-policy.mjs";
|
|
16
|
+
import type {
|
|
17
|
+
ToolcraftMotionReferenceTimingMode,
|
|
18
|
+
} from "./acceptance/types";
|
|
16
19
|
|
|
17
20
|
const appDir = dirname(fileURLToPath(import.meta.url));
|
|
18
21
|
const projectDir = join(appDir, "../..");
|
|
@@ -92,10 +95,21 @@ export type AgentWorklogFixtureOptions = {
|
|
|
92
95
|
trailHeading?: string;
|
|
93
96
|
verificationLines?: readonly string[];
|
|
94
97
|
};
|
|
98
|
+
export type WorklogMotionReference = Readonly<{
|
|
99
|
+
contactSheetPath: string;
|
|
100
|
+
referenceId: string;
|
|
101
|
+
requiresRealTimeReview: boolean;
|
|
102
|
+
requiresSlowedReview: boolean;
|
|
103
|
+
sourceSha256: string;
|
|
104
|
+
studyId: string;
|
|
105
|
+
timingMode: ToolcraftMotionReferenceTimingMode;
|
|
106
|
+
}>;
|
|
95
107
|
const worklogVideoReferencePattern =
|
|
96
108
|
/\b(?:source\/reference checked|source reviewed|reference inputs):[^\n]*(?:reference\s+(?:video|gif)|screen\s*recording|contact[-\s]*sheet|storyboard|frame[-\s]*by[-\s]*frame|extracted[-\s]*frames?|cleanshot|ffprobe|[^\s]+\.(?:mp4|mov|webm|gif))\b/i;
|
|
97
|
-
const
|
|
98
|
-
|
|
109
|
+
const motionReferenceRecordPattern =
|
|
110
|
+
/^\s*[-*]\s+Motion reference study:\s*(?<fields>\S.*)$/iu;
|
|
111
|
+
const motionReferenceFieldPattern =
|
|
112
|
+
/\b(?<name>referenceId|studyId|sourceSha256|timingMode|contactSheetPath|review)=(?<value>[^;]+?)(?=;\s*|$)/giu;
|
|
99
113
|
export function readToolcraftDoc(relativePath: string): string {
|
|
100
114
|
return readFileSync(join(projectDir, "docs/toolcraft", relativePath), "utf8");
|
|
101
115
|
}
|
|
@@ -252,8 +266,96 @@ function escapeRegExp(value: string): string {
|
|
|
252
266
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
253
267
|
}
|
|
254
268
|
|
|
255
|
-
|
|
269
|
+
type MotionReferenceRecord = Readonly<{
|
|
270
|
+
contactSheetPath?: string;
|
|
271
|
+
referenceId?: string;
|
|
272
|
+
review?: string;
|
|
273
|
+
sourceSha256?: string;
|
|
274
|
+
studyId?: string;
|
|
275
|
+
timingMode?: string;
|
|
276
|
+
}>;
|
|
277
|
+
|
|
278
|
+
function getAuthoritativeWorklogSource(source: string): string {
|
|
279
|
+
return requiredAgentWorklogSections
|
|
280
|
+
.map((section) => getMarkdownSectionBody(source, section))
|
|
281
|
+
.join("\n");
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function getMotionReferenceRecords(
|
|
285
|
+
authoritativeSource: string,
|
|
286
|
+
): readonly MotionReferenceRecord[] {
|
|
287
|
+
return authoritativeSource.split(/\r?\n/u).flatMap((line) => {
|
|
288
|
+
const recordMatch = motionReferenceRecordPattern.exec(line);
|
|
289
|
+
if (!recordMatch?.groups?.fields) return [];
|
|
290
|
+
|
|
291
|
+
const fields: Record<string, string> = {};
|
|
292
|
+
for (const match of recordMatch.groups.fields.matchAll(
|
|
293
|
+
motionReferenceFieldPattern,
|
|
294
|
+
)) {
|
|
295
|
+
if (!match.groups) continue;
|
|
296
|
+
fields[match.groups.name] = match.groups.value
|
|
297
|
+
.trim()
|
|
298
|
+
.replace(/[.]$/u, "");
|
|
299
|
+
}
|
|
300
|
+
return [fields];
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function recordMatchesMotionReference(
|
|
305
|
+
record: MotionReferenceRecord,
|
|
306
|
+
motionReference: WorklogMotionReference,
|
|
307
|
+
): boolean {
|
|
308
|
+
if (
|
|
309
|
+
record.contactSheetPath !== motionReference.contactSheetPath ||
|
|
310
|
+
record.referenceId !== motionReference.referenceId ||
|
|
311
|
+
record.sourceSha256 !== motionReference.sourceSha256 ||
|
|
312
|
+
record.studyId !== motionReference.studyId ||
|
|
313
|
+
record.timingMode !== motionReference.timingMode
|
|
314
|
+
) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
const reviewModes = new Set(
|
|
319
|
+
(record.review ?? "")
|
|
320
|
+
.split(",")
|
|
321
|
+
.map((value) => value.trim())
|
|
322
|
+
.filter(Boolean),
|
|
323
|
+
);
|
|
324
|
+
if (motionReference.timingMode === "ordinal") {
|
|
325
|
+
return (
|
|
326
|
+
reviewModes.has("ordered-frames") &&
|
|
327
|
+
!reviewModes.has("real-time") &&
|
|
328
|
+
!reviewModes.has("slowed")
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
if (
|
|
332
|
+
(motionReference.timingMode === "seconds" ||
|
|
333
|
+
motionReference.requiresRealTimeReview) &&
|
|
334
|
+
!reviewModes.has("real-time")
|
|
335
|
+
) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
return (
|
|
339
|
+
!motionReference.requiresSlowedReview || reviewModes.has("slowed")
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function describeRequiredReview(motionReference: WorklogMotionReference): string {
|
|
344
|
+
if (motionReference.timingMode === "ordinal") return "ordered-frames";
|
|
345
|
+
return motionReference.requiresSlowedReview
|
|
346
|
+
? "real-time,slowed"
|
|
347
|
+
: "real-time";
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export function getAgentWorklogValidationErrors(
|
|
351
|
+
source: string,
|
|
352
|
+
options: Readonly<{
|
|
353
|
+
motionReferences?: readonly WorklogMotionReference[];
|
|
354
|
+
}> = {},
|
|
355
|
+
): string[] {
|
|
256
356
|
const errors: string[] = [];
|
|
357
|
+
const motionReferences = options.motionReferences ?? [];
|
|
358
|
+
const authoritativeSource = getAuthoritativeWorklogSource(source);
|
|
257
359
|
|
|
258
360
|
for (const section of requiredAgentWorklogSections) {
|
|
259
361
|
if (!getMarkdownSectionBody(source, section)) {
|
|
@@ -315,11 +417,25 @@ export function getAgentWorklogValidationErrors(source: string): string[] {
|
|
|
315
417
|
}
|
|
316
418
|
|
|
317
419
|
if (
|
|
318
|
-
worklogVideoReferencePattern.test(
|
|
319
|
-
|
|
420
|
+
worklogVideoReferencePattern.test(authoritativeSource) &&
|
|
421
|
+
motionReferences.length === 0
|
|
320
422
|
) {
|
|
321
423
|
errors.push(
|
|
322
|
-
"agent-worklog.md cites a video reference, screen recording, GIF, extracted frames, or contact sheet
|
|
424
|
+
"agent-worklog.md cites a video reference, screen recording, GIF, extracted frames, or contact sheet, but starterTransferMode.referenceInputs registers no motion reference input.",
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const motionReferenceRecords = getMotionReferenceRecords(authoritativeSource);
|
|
429
|
+
for (const motionReference of motionReferences) {
|
|
430
|
+
if (
|
|
431
|
+
motionReferenceRecords.some((record) =>
|
|
432
|
+
recordMatchesMotionReference(record, motionReference),
|
|
433
|
+
)
|
|
434
|
+
) {
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
errors.push(
|
|
438
|
+
`agent-worklog.md motion reference study "${motionReference.studyId}" for reference "${motionReference.referenceId}" must include one exact "Motion reference study:" record with referenceId=${motionReference.referenceId}; studyId=${motionReference.studyId}; sourceSha256=${motionReference.sourceSha256}; timingMode=${motionReference.timingMode}; contactSheetPath=${motionReference.contactSheetPath}; review=${describeRequiredReview(motionReference)}.`,
|
|
323
439
|
);
|
|
324
440
|
}
|
|
325
441
|
|