@pixel-point/toolcraft 0.0.17 → 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 +81 -89
- package/src/generate-test-doc-assertions.test.mjs +44 -1
- package/src/generate-test-doc-policy-assertions.mjs +92 -0
- package/src/generate-test-export-doc-assertions.mjs +53 -0
- package/src/generate-test-file-assertions.mjs +77 -83
- 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 +17 -1
- package/src/generate-test-runtime-boundary-assertions.mjs +178 -0
- package/src/generate-test-standalone-assertions.mjs +7 -13
- 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 +64 -5
- package/templates/runtime/contracts/component-contracts.choices.ts +55 -5
- package/templates/runtime/contracts/component-contracts.inputs.test.ts +6 -6
- package/templates/runtime/contracts/component-contracts.inputs.ts +8 -7
- package/templates/runtime/contracts/component-contracts.media-custom.test.ts +8 -2
- package/templates/runtime/contracts/component-contracts.media-custom.ts +8 -2
- package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +22 -8
- package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +7 -1
- package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +3 -0
- package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +4 -1
- package/templates/runtime/contracts/component-contracts.runtime.ts +19 -12
- package/templates/runtime/contracts/component-contracts.test.ts +2 -0
- 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 +35 -11
- package/templates/runtime/contracts/decision-contracts.ts +12 -12
- 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-background.ts +0 -19
- package/templates/runtime/export/export-error.ts +5 -0
- package/templates/runtime/export/export-renderer-coverage.ts +54 -0
- package/templates/runtime/export/export.test.ts +45 -42
- package/templates/runtime/export/image-artifact-export.ts +2 -2
- package/templates/runtime/export/index.ts +57 -16
- 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 +3 -0
- package/templates/runtime/model-import/model-import-limits.ts +15 -4
- package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +21 -1
- package/templates/runtime/react/app-shell/settings-transfer.test.ts +21 -0
- package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +75 -1
- package/templates/runtime/react/app-shell/toolcraft-app.tsx +24 -9
- 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 +77 -1
- package/templates/runtime/react/canvas/canvas-shell-test-utils.tsx +13 -1
- package/templates/runtime/react/canvas/canvas-shell.tsx +32 -6
- package/templates/runtime/react/canvas/canvas-viewport-geometry.ts +133 -0
- package/templates/runtime/react/canvas/product-scene-surface.test.tsx +195 -0
- package/templates/runtime/react/canvas/product-scene-surface.tsx +155 -0
- package/templates/runtime/react/canvas/runtime-scene-export.ts +1 -1
- package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +285 -36
- package/templates/runtime/react/controls-panel/__tests__/control-conditions.test.ts +61 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.collection-actions.test.tsx +89 -0
- 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.control-visibility.test.tsx +40 -19
- 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 +40 -1
- 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 +59 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-color-bank.test.tsx +67 -0
- 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 +4 -6
- package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +41 -6
- package/templates/runtime/react/controls-panel/conditions/control-conditions.ts +32 -119
- package/templates/runtime/react/controls-panel/layout/controls-panel-control-group.tsx +5 -2
- package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +41 -10
- package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +7 -4
- 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/renderers/controls-panel-collection-item-fields.test.tsx +63 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.tsx +138 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-items.tsx +104 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-renderer.tsx +115 -236
- package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.test.tsx +95 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.tsx +82 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.test.tsx +73 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.tsx +50 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.test.ts +1 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.ts +2 -1
- package/templates/runtime/react/controls-panel/values/controls-panel-collection-values.ts +38 -6
- 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/controls-panel/values/controls-panel-value-labels.ts +1 -0
- package/templates/runtime/react/index.ts +4 -0
- package/templates/runtime/react/model-rendering/model-export.ts +1 -1
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +9 -69
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.ts +5 -5
- package/templates/runtime/react/orientation-gizmo/use-toolcraft-orientation-control-selection.ts +2 -2
- package/templates/runtime/scene/scene-bounds.test.ts +23 -0
- package/templates/runtime/scene/scene-bounds.ts +31 -17
- package/templates/runtime/schema/app-capabilities.test.ts +4 -0
- 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/collection-item-controls.ts +29 -0
- package/templates/runtime/schema/control-applicability.test.ts +127 -0
- package/templates/runtime/schema/control-applicability.ts +433 -0
- package/templates/runtime/schema/control-schema-normalization.ts +177 -11
- package/templates/runtime/schema/controls-panel-actions.ts +2 -2
- package/templates/runtime/schema/controls-panel-section-layout.ts +14 -9
- package/templates/runtime/schema/controls-panel-section-roundtrip.test.ts +59 -0
- package/templates/runtime/schema/define-toolcraft.collection-actions-item-controls.test.ts +127 -0
- package/templates/runtime/schema/define-toolcraft.control-sections.test.ts +10 -4
- package/templates/runtime/schema/define-toolcraft.file-drop-item-controls.test.ts +98 -0
- package/templates/runtime/schema/define-toolcraft.file-drop-normalization.test.ts +27 -0
- package/templates/runtime/schema/define-toolcraft.segmented-control-fit.test.ts +20 -2
- package/templates/runtime/schema/define-toolcraft.setup-canvas.test.ts +16 -3
- package/templates/runtime/schema/define-toolcraft.source-collection.test.ts +79 -0
- package/templates/runtime/schema/runtime-setup-section.ts +24 -5
- package/templates/runtime/schema/types.ts +69 -13
- 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 +29 -28
- package/templates/starter/docs/toolcraft/README.md +6 -6
- package/templates/starter/docs/toolcraft/acceptance-testing.md +34 -48
- package/templates/starter/docs/toolcraft/agent-worklog.md +103 -1
- package/templates/starter/docs/toolcraft/assembly-workflow.md +16 -8
- package/templates/starter/docs/toolcraft/component-rules.md +9 -7
- package/templates/starter/docs/toolcraft/core/control-selection.md +9 -3
- package/templates/starter/docs/toolcraft/core/layout.md +13 -8
- package/templates/starter/docs/toolcraft/core/media-upload.md +3 -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 +15 -3
- package/templates/starter/docs/toolcraft/core/setup-export.md +67 -11
- package/templates/starter/docs/toolcraft/custom-controls.md +6 -4
- package/templates/starter/docs/toolcraft/decision-contract.md +4 -2
- package/templates/starter/docs/toolcraft/performance.md +8 -10
- package/templates/starter/docs/toolcraft/renderer-technique.md +6 -2
- package/templates/starter/docs/toolcraft/schema-reference.md +24 -22
- package/templates/starter/docs/toolcraft/workflow.md +14 -14
- package/templates/starter/e2e/app-browser-control-applicability-requirements.spec.ts +163 -0
- package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +45 -2
- package/templates/starter/e2e/app-browser-motion-reference-requirements.spec.ts +411 -0
- package/templates/starter/e2e/app-browser-orientation-evidence.spec.ts +174 -21
- package/templates/starter/e2e/app-browser-proof-session.spec.ts +85 -0
- package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +63 -33
- package/templates/starter/e2e/app-browser-selection-scope-evidence.spec.ts +137 -0
- package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +61 -15
- package/templates/starter/e2e/{browser-conditional-output-evidence-helpers.ts → browser-background-output-evidence.ts} +0 -68
- package/templates/starter/e2e/browser-control-applicability-evidence.ts +114 -0
- package/templates/starter/e2e/browser-infinity-canvas-evidence.ts +20 -11
- 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-orientation-gizmo-evidence-helpers.ts +4 -0
- package/templates/starter/e2e/browser-orientation-gizmo-live-preconditions.ts +86 -0
- 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-applicability-requirements.ts +84 -0
- package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +9 -2
- package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +51 -32
- package/templates/starter/e2e/browser-selection-scope-evidence.ts +269 -0
- package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +122 -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-contract-manifest.json +1 -0
- 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 +85 -115
- package/templates/starter/scripts/toolcraft-product-boundary-module-policy.mjs +101 -0
- package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +0 -72
- package/templates/starter/scripts/toolcraft-product-control-bindings.mjs +182 -0
- package/templates/starter/scripts/toolcraft-product-control-boundary.mjs +146 -0
- package/templates/starter/scripts/toolcraft-product-control-boundary.test.mjs +186 -0
- package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +16 -18
- package/templates/starter/scripts/toolcraft-product-export-boundary.test.mjs +200 -0
- 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-typescript-source-evidence-structure.test.mjs +20 -0
- package/templates/starter/scripts/toolcraft-typescript-source-evidence.mjs +1 -0
- package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +2 -0
- 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 +161 -0
- 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/conditions.ts +1 -1
- package/templates/starter/src/app/acceptance/control-acceptance-context.ts +2 -2
- package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +6 -31
- package/templates/starter/src/app/acceptance/control-acceptance-kind-rules.ts +24 -5
- package/templates/starter/src/app/acceptance/control-acceptance-policy.ts +4 -16
- package/templates/starter/src/app/acceptance/control-applicability-cases.test.ts +321 -0
- package/templates/starter/src/app/acceptance/control-applicability-cases.ts +290 -0
- package/templates/starter/src/app/acceptance/control-applicability.ts +332 -0
- 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-dependency-rules.ts +20 -9
- package/templates/starter/src/app/acceptance/control-layout-entity-rules.ts +4 -6
- package/templates/starter/src/app/acceptance/control-layout-model.ts +4 -4
- package/templates/starter/src/app/acceptance/control-layout-section-rules.ts +21 -10
- package/templates/starter/src/app/acceptance/control-parts.ts +8 -0
- package/templates/starter/src/app/acceptance/control-section-entity-cohesion.test.ts +215 -0
- package/templates/starter/src/app/acceptance/control-section-entity-cohesion.ts +132 -0
- package/templates/starter/src/app/acceptance/control-section-inventory.test.ts +87 -0
- package/templates/starter/src/app/acceptance/control-section-inventory.ts +74 -44
- package/templates/starter/src/app/acceptance/custom-controls.ts +11 -3
- 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/inline-layout.ts +64 -9
- 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/media-upload.ts +5 -1
- 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/orientation-gizmo.ts +18 -11
- package/templates/starter/src/app/acceptance/output-background-rules.ts +2 -2
- 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 +22 -10
- package/templates/starter/src/app/acceptance/output-export-model.ts +58 -11
- package/templates/starter/src/app/acceptance/output-export.ts +25 -10
- package/templates/starter/src/app/acceptance/output-video-export-rules.ts +99 -0
- 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 +65 -125
- package/templates/starter/src/app/acceptance/validate-coverage.ts +33 -5
- 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 +312 -0
- package/templates/starter/src/app/starter-acceptance.background-export.test.ts +35 -0
- package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +18 -1
- 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 +66 -1
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.test.ts +41 -0
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +113 -16
- package/templates/starter/src/app/starter-acceptance.control-applicability.test.ts +225 -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.control-order.test.ts +58 -3
- package/templates/starter/src/app/starter-acceptance.control-state.test.ts +0 -111
- package/templates/starter/src/app/starter-acceptance.custom-control-collections.test.ts +3 -1
- package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +1 -1
- package/templates/starter/src/app/starter-acceptance.custom-control-valid.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 +26 -0
- package/templates/starter/src/app/{starter-acceptance.image-video-export-settings.test.ts → starter-acceptance.image-export-settings.test.ts} +39 -9
- package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +31 -3
- package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -1
- package/templates/starter/src/app/starter-acceptance.media-upload.fixtures.ts +11 -1
- package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +56 -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 +458 -0
- package/templates/starter/src/app/starter-acceptance.output-export-rules.test.ts +4 -0
- package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +116 -104
- package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +29 -0
- 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 +3 -1
- package/templates/starter/src/app/starter-acceptance.section-dependencies.test.ts +35 -24
- package/templates/starter/src/app/starter-acceptance.section-size.test.ts +72 -0
- package/templates/starter/src/app/starter-acceptance.timeline-playback.test.ts +5 -0
- package/templates/starter/src/app/starter-acceptance.ts +45 -10
- package/templates/starter/src/app/starter-acceptance.video-export-settings.test.ts +338 -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 +12 -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 +5 -2
- package/templates/starter/src/routes/index.tsx +1 -0
- package/templates/starter/tsconfig.json +1 -0
- package/templates/ui/components/composites/tabs.tsx +2 -2
- package/templates/ui/components/controls/collection-actions/collection-item-groups.test.tsx +38 -0
- package/templates/ui/components/controls/collection-actions/collection-item-groups.tsx +36 -0
- package/templates/ui/components/controls/collection-actions/index.ts +2 -0
- package/templates/ui/components/controls/file-drop/file-drop-collection-control.tsx +137 -0
- package/templates/ui/components/controls/file-drop/file-drop-control.test.tsx +189 -0
- package/templates/ui/components/controls/file-drop/file-drop-control.tsx +81 -88
- package/templates/ui/components/controls/file-drop/file-drop-presentation.tsx +131 -9
- package/templates/ui/components/controls/file-drop/file-drop-types.ts +36 -22
- package/templates/ui/components/controls/file-drop/index.ts +1 -0
- package/templates/ui/components/controls/index.ts +3 -0
- package/templates/ui/components/controls/range-slider/range-slider-control.tsx +1 -1
- package/templates/ui/components/controls/range-slider/range-slider-value.test.ts +14 -0
- package/templates/ui/components/controls/range-slider/range-slider-value.ts +3 -2
- 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/condition-exclusivity.test.ts +0 -60
- package/templates/starter/src/app/acceptance/condition-exclusivity.ts +0 -221
- package/templates/starter/src/app/acceptance/video-reference-study.ts +0 -217
- package/templates/starter/src/app/starter-verification-impact.json +0 -15
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
} from "./dependency-install.mjs";
|
|
19
19
|
import { generateToolcraft } from "./generate.mjs";
|
|
20
20
|
|
|
21
|
-
test("fresh generated app runs initial proof then
|
|
21
|
+
test("fresh generated app runs one initial proof then focused material verification", async (t) => {
|
|
22
22
|
const tempRoot = await fs.mkdtemp(
|
|
23
23
|
path.join(os.tmpdir(), "toolcraft-demand-only-lifecycle-"),
|
|
24
24
|
);
|
|
@@ -97,6 +97,14 @@ test("fresh generated app runs initial proof then one semantic material delivery
|
|
|
97
97
|
command: "pnpm",
|
|
98
98
|
},
|
|
99
99
|
{ args: ["verify:delivery"], command: "pnpm" },
|
|
100
|
+
{
|
|
101
|
+
args: ["exec", "vitest", "run", "src/app/material-output.test.tsx"],
|
|
102
|
+
command: "pnpm",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
args: ["test:feature", "--", "material.layer"],
|
|
106
|
+
command: "pnpm",
|
|
107
|
+
},
|
|
100
108
|
{ args: ["verify:delivery"], command: "pnpm" },
|
|
101
109
|
]);
|
|
102
110
|
});
|
|
@@ -50,7 +50,7 @@ test("generated standalone app preserves authority-bound performance iteration l
|
|
|
50
50
|
receiptModule.TOOLCRAFT_DELIVERY_RECEIPT_VERSION,
|
|
51
51
|
targetedReportModule.TOOLCRAFT_TARGETED_PERFORMANCE_REPORT_VERSION,
|
|
52
52
|
],
|
|
53
|
-
[1,
|
|
53
|
+
[1, 6, 8, 3],
|
|
54
54
|
);
|
|
55
55
|
const authorityPolicySource = await fs.readFile(
|
|
56
56
|
path.join(
|
|
@@ -99,7 +99,7 @@ test("generated standalone app preserves authority-bound performance iteration l
|
|
|
99
99
|
}
|
|
100
100
|
const output = `${stdout}\n${stderr}`;
|
|
101
101
|
assert.doesNotMatch(output, /ERR_MODULE_NOT_FOUND/u);
|
|
102
|
-
assert.match(output, /^# tests
|
|
103
|
-
assert.match(output, /^# pass
|
|
102
|
+
assert.match(output, /^# tests 7$/mu);
|
|
103
|
+
assert.match(output, /^# pass 7$/mu);
|
|
104
104
|
assert.match(output, /^# fail 0$/mu);
|
|
105
105
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { pathToFileURL } from "node:url";
|
|
5
4
|
|
|
6
5
|
export const deliveryArchitecturePaths = Object.freeze([
|
|
7
6
|
"e2e/toolcraft-delivery-catalog-reporter.ts",
|
|
8
7
|
"scripts/run-delivery-verification.mjs",
|
|
9
8
|
"scripts/toolcraft-delivery-anchor.mjs",
|
|
10
9
|
"scripts/toolcraft-delivery-executor.mjs",
|
|
10
|
+
"scripts/toolcraft-delivery-lifecycle.mjs",
|
|
11
11
|
"scripts/toolcraft-delivery-functional-context.d.mts",
|
|
12
12
|
"scripts/toolcraft-delivery-functional-context.mjs",
|
|
13
13
|
"scripts/toolcraft-delivery-plan-construction.mjs",
|
|
@@ -17,64 +17,12 @@ export const deliveryArchitecturePaths = Object.freeze([
|
|
|
17
17
|
"scripts/toolcraft-functional-proof-primitives.d.mts",
|
|
18
18
|
"scripts/toolcraft-functional-proof-primitives.mjs",
|
|
19
19
|
"scripts/toolcraft-proof-process.mjs",
|
|
20
|
-
"scripts/toolcraft-verification-impact-inventory.d.mts",
|
|
21
|
-
"scripts/toolcraft-verification-impact-inventory.mjs",
|
|
22
|
-
"scripts/toolcraft-verification-impact.mjs",
|
|
23
|
-
"scripts/toolcraft-verification-input-roles.d.mts",
|
|
24
|
-
"scripts/toolcraft-verification-input-roles.mjs",
|
|
25
20
|
]);
|
|
26
21
|
|
|
27
22
|
async function readGeneratedScript(targetDir, relativePath) {
|
|
28
23
|
return fs.readFile(path.join(targetDir, "scripts", relativePath), "utf8");
|
|
29
24
|
}
|
|
30
25
|
|
|
31
|
-
async function assertGeneratedInputRoleBehavior(targetDir) {
|
|
32
|
-
const scriptsDir = path.join(targetDir, "scripts");
|
|
33
|
-
const [
|
|
34
|
-
{ toolcraftVerificationInputRootFamilies },
|
|
35
|
-
{ createToolcraftProductVerificationContext },
|
|
36
|
-
] = await Promise.all([
|
|
37
|
-
import(
|
|
38
|
-
pathToFileURL(
|
|
39
|
-
path.join(
|
|
40
|
-
scriptsDir,
|
|
41
|
-
"toolcraft-verification-input-roles.mjs",
|
|
42
|
-
),
|
|
43
|
-
).href
|
|
44
|
-
),
|
|
45
|
-
import(
|
|
46
|
-
pathToFileURL(
|
|
47
|
-
path.join(scriptsDir, "toolcraft-verification-impact.mjs"),
|
|
48
|
-
).href
|
|
49
|
-
),
|
|
50
|
-
]);
|
|
51
|
-
const { generated, starter } = toolcraftVerificationInputRootFamilies;
|
|
52
|
-
const generatedPaths = [
|
|
53
|
-
...generated.runtimeRootPaths,
|
|
54
|
-
...generated.semanticProofRootPaths,
|
|
55
|
-
];
|
|
56
|
-
const starterPaths = [
|
|
57
|
-
...starter.runtimeRootPaths,
|
|
58
|
-
...starter.semanticProofRootPaths,
|
|
59
|
-
];
|
|
60
|
-
assert.equal(
|
|
61
|
-
generatedPaths.some((repoPath) => starterPaths.includes(repoPath)),
|
|
62
|
-
false,
|
|
63
|
-
"Generated and starter semantic root families must stay distinct.",
|
|
64
|
-
);
|
|
65
|
-
const { inputRoles: roles } =
|
|
66
|
-
await createToolcraftProductVerificationContext(targetDir);
|
|
67
|
-
assert.equal(roles.rootFamily, generated.name);
|
|
68
|
-
assert.equal(
|
|
69
|
-
roles.impactInventoryPath,
|
|
70
|
-
generated.impactInventoryPath,
|
|
71
|
-
);
|
|
72
|
-
assert.equal(
|
|
73
|
-
roles.runtimeProductionPaths.includes(generated.compositionPath),
|
|
74
|
-
true,
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
26
|
export async function assertGeneratedDeliveryArchitecture(targetDir) {
|
|
79
27
|
for (const relativePath of deliveryArchitecturePaths) {
|
|
80
28
|
assert.ok(
|
|
@@ -82,15 +30,14 @@ export async function assertGeneratedDeliveryArchitecture(targetDir) {
|
|
|
82
30
|
`Generated output must contain ${relativePath}.`,
|
|
83
31
|
);
|
|
84
32
|
}
|
|
85
|
-
|
|
86
33
|
const sources = {
|
|
87
34
|
catalog: await readGeneratedScript(
|
|
88
35
|
targetDir,
|
|
89
36
|
"playwright-test-title-selection.mjs",
|
|
90
37
|
),
|
|
91
|
-
|
|
38
|
+
lifecycle: await readGeneratedScript(
|
|
92
39
|
targetDir,
|
|
93
|
-
"toolcraft-
|
|
40
|
+
"toolcraft-delivery-lifecycle.mjs",
|
|
94
41
|
),
|
|
95
42
|
model: await readGeneratedScript(
|
|
96
43
|
targetDir,
|
|
@@ -104,34 +51,25 @@ export async function assertGeneratedDeliveryArchitecture(targetDir) {
|
|
|
104
51
|
targetDir,
|
|
105
52
|
"toolcraft-delivery-receipt.mjs",
|
|
106
53
|
),
|
|
107
|
-
resolution: await readGeneratedScript(
|
|
108
|
-
targetDir,
|
|
109
|
-
"toolcraft-verification-impact-resolution.mjs",
|
|
110
|
-
),
|
|
111
54
|
};
|
|
112
55
|
|
|
113
56
|
assert.match(sources.catalog, /Delivery catalog\.version must be 2/);
|
|
114
|
-
assert.match(
|
|
115
|
-
sources.impact,
|
|
116
|
-
/TOOLCRAFT_VERIFICATION_IMPACT_VERSION = 3/,
|
|
117
|
-
);
|
|
118
57
|
assert.match(
|
|
119
58
|
sources.model,
|
|
120
|
-
/TOOLCRAFT_FUNCTIONAL_PROOF_MODEL_VERSION =
|
|
59
|
+
/TOOLCRAFT_FUNCTIONAL_PROOF_MODEL_VERSION = 2/,
|
|
121
60
|
);
|
|
122
|
-
assert.match(sources.plan, /TOOLCRAFT_DELIVERY_PLAN_VERSION =
|
|
123
|
-
assert.match(sources.receipt, /TOOLCRAFT_DELIVERY_RECEIPT_VERSION =
|
|
124
|
-
assert.
|
|
125
|
-
sources.
|
|
126
|
-
/
|
|
61
|
+
assert.match(sources.plan, /TOOLCRAFT_DELIVERY_PLAN_VERSION = 6/);
|
|
62
|
+
assert.match(sources.receipt, /TOOLCRAFT_DELIVERY_RECEIPT_VERSION = 8/);
|
|
63
|
+
assert.match(
|
|
64
|
+
sources.lifecycle,
|
|
65
|
+
/TOOLCRAFT_INITIAL_PROOF_ALREADY_COMPLETE/,
|
|
127
66
|
);
|
|
128
67
|
assert.doesNotMatch(
|
|
129
68
|
sources.plan,
|
|
130
|
-
/TOOLCRAFT_DELIVERY_PLAN_VERSION = [
|
|
69
|
+
/TOOLCRAFT_DELIVERY_PLAN_VERSION = [1-5]\b/,
|
|
131
70
|
);
|
|
132
71
|
assert.doesNotMatch(
|
|
133
72
|
sources.receipt,
|
|
134
|
-
/TOOLCRAFT_DELIVERY_RECEIPT_VERSION = [1-
|
|
73
|
+
/TOOLCRAFT_DELIVERY_RECEIPT_VERSION = [1-7]\b/,
|
|
135
74
|
);
|
|
136
|
-
await assertGeneratedInputRoleBehavior(targetDir);
|
|
137
75
|
}
|
|
@@ -5,17 +5,17 @@ import path from "node:path";
|
|
|
5
5
|
import {
|
|
6
6
|
loadGeneratedProofModule,
|
|
7
7
|
runGeneratedCommand,
|
|
8
|
+
runGeneratedExecutable,
|
|
9
|
+
runGeneratedScript,
|
|
8
10
|
} from "./generate-test-dependency-sandbox.mjs";
|
|
9
11
|
import {
|
|
10
12
|
assertGeneratedInitialFunctionalDelivery,
|
|
11
|
-
assertGeneratedLaterFunctionalDelivery,
|
|
12
13
|
} from "./generate-test-standalone-delivery-stages.mjs";
|
|
13
14
|
import {
|
|
14
15
|
writeGeneratedProductFixture,
|
|
15
16
|
} from "./generate-test-product-fixture.mjs";
|
|
16
17
|
import {
|
|
17
18
|
applyGeneratedProductMaterialIteration,
|
|
18
|
-
generatedProductMaterialIterationFixturePaths,
|
|
19
19
|
} from "./generate-test-product-iteration.mjs";
|
|
20
20
|
const materialAcceptanceIds = Object.freeze([
|
|
21
21
|
"material.chocolate",
|
|
@@ -35,30 +35,6 @@ const materialBrowserTestNames = Object.freeze([
|
|
|
35
35
|
"browser: sprinkle color changes material output",
|
|
36
36
|
"browser: sprinkles visibility changes material output",
|
|
37
37
|
]);
|
|
38
|
-
const materialDeliveryBrowserTestNames = Object.freeze([
|
|
39
|
-
"browser: ambient speed changes product output",
|
|
40
|
-
...materialBrowserTestNames,
|
|
41
|
-
"browser: timeline playback drives product output",
|
|
42
|
-
]);
|
|
43
|
-
const materialDeliveryAcceptanceIds = Object.freeze([
|
|
44
|
-
"animation.speed",
|
|
45
|
-
...materialAcceptanceIds,
|
|
46
|
-
"runtime.timeline",
|
|
47
|
-
]);
|
|
48
|
-
const materialProductTestFiles = Object.freeze([
|
|
49
|
-
"src/app/acceptance/validation-pipeline.test.ts",
|
|
50
|
-
"src/app/app-acceptance.base-coverage.test.ts",
|
|
51
|
-
"src/app/app-acceptance.product-output-export.test.ts",
|
|
52
|
-
"src/app/app-acceptance.product-readiness.test.ts",
|
|
53
|
-
"src/app/app-acceptance.product-worklog.test.ts",
|
|
54
|
-
"src/app/app-automated-runtime-evidence.test.ts",
|
|
55
|
-
"src/app/app-performance.fixture-helper.test.ts",
|
|
56
|
-
"src/app/app-performance.gates.test.ts",
|
|
57
|
-
"src/app/app-performance.lifecycle.test.ts",
|
|
58
|
-
"src/app/app-schema.test.ts",
|
|
59
|
-
"src/app/material-output.test.tsx",
|
|
60
|
-
]);
|
|
61
|
-
|
|
62
38
|
function deepFreeze(value) {
|
|
63
39
|
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
64
40
|
Object.values(value).forEach(deepFreeze);
|
|
@@ -131,6 +107,7 @@ async function loadInitialPlan({ targetDir }) {
|
|
|
131
107
|
const functionalContext =
|
|
132
108
|
await collectToolcraftDeliveryFunctionalContext(targetDir);
|
|
133
109
|
const planningInputs = await loadToolcraftDeliveryPlanningInputs({
|
|
110
|
+
authority: null,
|
|
134
111
|
currentInventory,
|
|
135
112
|
functionalContext,
|
|
136
113
|
integrity,
|
|
@@ -200,10 +177,11 @@ async function assertMalformedFunctionalPlanFailsClosed({
|
|
|
200
177
|
getEscalationRecommendation: () => null,
|
|
201
178
|
loadPlanningInputs: async () => fixture.planningInputs,
|
|
202
179
|
readDeliveryAnchor: async () => ({ missing: true }),
|
|
180
|
+
readPerformanceAuthority: async () => null,
|
|
203
181
|
}),
|
|
204
182
|
projectDir: targetDir,
|
|
205
183
|
}),
|
|
206
|
-
/functional
|
|
184
|
+
/initial delivery proof is not the fixed complete functional proof/iu,
|
|
207
185
|
);
|
|
208
186
|
assert.deepEqual(proofCalls, []);
|
|
209
187
|
assert.equal(checkpointWrites, 0);
|
|
@@ -287,6 +265,7 @@ export async function assertGeneratedFreshDemandOnlyLifecycle({
|
|
|
287
265
|
execFileAsync,
|
|
288
266
|
targetDir,
|
|
289
267
|
});
|
|
268
|
+
const initialCheckpointBytes = await fs.readFile(checkpointPath);
|
|
290
269
|
await applyGeneratedProductMaterialIteration(targetDir);
|
|
291
270
|
const materialCatalog = await collectToolcraftDeliveryCatalog(targetDir);
|
|
292
271
|
const materialRows = materialCatalog.acceptance.filter(
|
|
@@ -300,15 +279,34 @@ export async function assertGeneratedFreshDemandOnlyLifecycle({
|
|
|
300
279
|
materialRows.map(({ testName }) => testName).sort(),
|
|
301
280
|
materialBrowserTestNames,
|
|
302
281
|
);
|
|
303
|
-
await
|
|
304
|
-
acceptanceCatalog: materialCatalog.acceptance,
|
|
305
|
-
browserEnv,
|
|
306
|
-
checkpointPath,
|
|
282
|
+
await runGeneratedExecutable(
|
|
307
283
|
execFileAsync,
|
|
308
|
-
expectedAcceptanceIds: materialDeliveryAcceptanceIds,
|
|
309
|
-
expectedBrowserTestNames: materialDeliveryBrowserTestNames,
|
|
310
|
-
expectedChangedFiles: generatedProductMaterialIterationFixturePaths,
|
|
311
|
-
expectedProductTestFiles: materialProductTestFiles,
|
|
312
284
|
targetDir,
|
|
313
|
-
|
|
285
|
+
"vitest",
|
|
286
|
+
["run", "src/app/material-output.test.tsx"],
|
|
287
|
+
);
|
|
288
|
+
const focusedResult = await runGeneratedCommand(
|
|
289
|
+
execFileAsync,
|
|
290
|
+
targetDir,
|
|
291
|
+
["test:feature", "--", "material.layer"],
|
|
292
|
+
{ env: browserEnv },
|
|
293
|
+
);
|
|
294
|
+
const focusedOutput = `${focusedResult.stdout ?? ""}\n${focusedResult.stderr ?? ""}`;
|
|
295
|
+
for (const acceptanceId of materialAcceptanceIds.filter(
|
|
296
|
+
(id) => id !== "material.exportedAppearance",
|
|
297
|
+
)) {
|
|
298
|
+
assert.match(focusedOutput, new RegExp(acceptanceId.replace(".", "\\."), "u"));
|
|
299
|
+
}
|
|
300
|
+
assert.doesNotMatch(focusedOutput, /material\.exportedAppearance/u);
|
|
301
|
+
assert.doesNotMatch(focusedOutput, /actions\.output|canvas\.|lighting\./u);
|
|
302
|
+
await runGeneratedScript(
|
|
303
|
+
execFileAsync,
|
|
304
|
+
targetDir,
|
|
305
|
+
"verify:delivery",
|
|
306
|
+
);
|
|
307
|
+
assert.deepEqual(
|
|
308
|
+
await fs.readFile(checkpointPath),
|
|
309
|
+
initialCheckpointBytes,
|
|
310
|
+
"A repeated ordinary delivery command must preserve the initial checkpoint byte-for-byte.",
|
|
311
|
+
);
|
|
314
312
|
}
|
|
@@ -103,7 +103,10 @@ export async function withDeclaredDependencySandbox(targetDir, callback) {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
function createGeneratedCommandEnvironment(
|
|
106
|
+
export function createGeneratedCommandEnvironment(
|
|
107
|
+
packageManager,
|
|
108
|
+
overrides = {},
|
|
109
|
+
) {
|
|
107
110
|
const childEnv = {
|
|
108
111
|
...process.env,
|
|
109
112
|
...overrides,
|
|
@@ -2,6 +2,22 @@ import assert from "node:assert/strict";
|
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
|
+
import {
|
|
6
|
+
assertGeneratedExportIntentDocsDoNotInferVideo,
|
|
7
|
+
collectGeneratedAgentFacingDocs,
|
|
8
|
+
getMissingGeneratedPerformanceLifecycleMarkers,
|
|
9
|
+
getStaleAgentPerformanceWorkflowFailures,
|
|
10
|
+
} from "./generate-test-doc-policy-assertions.mjs";
|
|
11
|
+
import { assertGeneratedExportDocs } from "./generate-test-export-doc-assertions.mjs";
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
assertGeneratedExportIntentDocsDoNotInferVideo,
|
|
15
|
+
collectGeneratedAgentFacingDocs,
|
|
16
|
+
getMissingGeneratedPerformanceLifecycleMarkers,
|
|
17
|
+
getStaleAgentPerformanceWorkflowFailures,
|
|
18
|
+
staleAnimationDerivedVideoPattern,
|
|
19
|
+
} from "./generate-test-doc-policy-assertions.mjs";
|
|
20
|
+
|
|
5
21
|
const generatedDocPaths = [
|
|
6
22
|
"README.md",
|
|
7
23
|
"workflow.md",
|
|
@@ -23,70 +39,6 @@ const generatedDocPaths = [
|
|
|
23
39
|
"core/reference-study.md",
|
|
24
40
|
];
|
|
25
41
|
|
|
26
|
-
const staleAgentPerformanceWorkflowPattern =
|
|
27
|
-
/app-performance-impact|explicit-performance-work|test:browser:perf|verify:(?:final|quick|ui)|verify:perf:(?:playwright|record-iteration|refresh)|--reason=performance-iteration|--performance-test/iu;
|
|
28
|
-
|
|
29
|
-
const generatedPerformanceLifecycleMarkers = [
|
|
30
|
-
"<!-- toolcraft-performance-lifecycle: first-delivery=functional; later-delivery=functional-targeted; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only -->",
|
|
31
|
-
"<!-- toolcraft-performance-iteration: authority=exact-request-evidence+canonical-path-ids; fixture=reachable-development; after-pass=return-app-to-user+stop -->",
|
|
32
|
-
"<!-- toolcraft-performance-full-authority: automatic=forbidden; recommendation=two-compatible-iterations-or-broad-unlocalizable-problem; command=pnpm verify:perf; authority=explicit-user-request-or-accepted-offer -->",
|
|
33
|
-
"<!-- toolcraft-performance-routing: localized=agent-targeted; ambiguous=one-user-facing-choice; broad=offer-targeted-or-full; full=explicit-only -->",
|
|
34
|
-
];
|
|
35
|
-
|
|
36
|
-
export function getMissingGeneratedPerformanceLifecycleMarkers(sources) {
|
|
37
|
-
return sources.flatMap(({ docPath, source }) =>
|
|
38
|
-
generatedPerformanceLifecycleMarkers.flatMap((marker) =>
|
|
39
|
-
source.includes(marker)
|
|
40
|
-
? []
|
|
41
|
-
: [`docs/toolcraft/${docPath} must include canonical marker: ${marker}`],
|
|
42
|
-
),
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async function collectMarkdownPaths(rootDir, relativeDir = "") {
|
|
47
|
-
const currentDir = path.join(rootDir, relativeDir);
|
|
48
|
-
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
49
|
-
const markdownPaths = [];
|
|
50
|
-
|
|
51
|
-
for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
52
|
-
const relativePath = path.join(relativeDir, entry.name);
|
|
53
|
-
if (entry.isDirectory()) {
|
|
54
|
-
markdownPaths.push(...(await collectMarkdownPaths(rootDir, relativePath)));
|
|
55
|
-
} else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
56
|
-
markdownPaths.push(relativePath);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return markdownPaths;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export async function collectGeneratedAgentFacingDocs(targetDir) {
|
|
64
|
-
const docsRoot = path.join(targetDir, "docs/toolcraft");
|
|
65
|
-
const docPaths = await collectMarkdownPaths(docsRoot);
|
|
66
|
-
const docs = await Promise.all(
|
|
67
|
-
docPaths.map(async (docPath) => ({
|
|
68
|
-
docPath: path.posix.join("docs/toolcraft", docPath.split(path.sep).join("/")),
|
|
69
|
-
source: await fs.readFile(path.join(docsRoot, docPath), "utf8"),
|
|
70
|
-
})),
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
return [
|
|
74
|
-
{
|
|
75
|
-
docPath: "AGENTS.md",
|
|
76
|
-
source: await fs.readFile(path.join(targetDir, "AGENTS.md"), "utf8"),
|
|
77
|
-
},
|
|
78
|
-
...docs,
|
|
79
|
-
];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function getStaleAgentPerformanceWorkflowFailures(sources) {
|
|
83
|
-
return sources.flatMap(({ docPath, source }) =>
|
|
84
|
-
staleAgentPerformanceWorkflowPattern.test(source)
|
|
85
|
-
? [`${docPath} contains removed performance workflow guidance`]
|
|
86
|
-
: [],
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
42
|
export async function assertGeneratedDocs(targetDir) {
|
|
91
43
|
await Promise.all(
|
|
92
44
|
generatedDocPaths.map((docPath) => fs.stat(path.join(targetDir, "docs/toolcraft", docPath))),
|
|
@@ -96,8 +48,9 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
96
48
|
const licenseSource = await fs.readFile(path.join(targetDir, "LICENSE.md"), "utf8");
|
|
97
49
|
const noticeSource = await fs.readFile(path.join(targetDir, "NOTICE.md"), "utf8");
|
|
98
50
|
const localDocPaths = generatedDocPaths.filter((docPath) => docPath !== "README.md");
|
|
51
|
+
const generatedAgentFacingDocs = await collectGeneratedAgentFacingDocs(targetDir);
|
|
99
52
|
const staleWorkflowFailures = getStaleAgentPerformanceWorkflowFailures(
|
|
100
|
-
|
|
53
|
+
generatedAgentFacingDocs,
|
|
101
54
|
);
|
|
102
55
|
|
|
103
56
|
assert.match(noticeSource, /Mediabunny/u);
|
|
@@ -109,6 +62,7 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
109
62
|
[],
|
|
110
63
|
`Generated agent-facing docs contain stale performance workflow guidance:\n${staleWorkflowFailures.join("\n")}`,
|
|
111
64
|
);
|
|
65
|
+
assertGeneratedExportIntentDocsDoNotInferVideo(generatedAgentFacingDocs);
|
|
112
66
|
|
|
113
67
|
assert.match(agentsSource, /Quick Entry Contract/);
|
|
114
68
|
assert.match(agentsSource, /Local Reference Docs/);
|
|
@@ -127,12 +81,15 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
127
81
|
assert.match(agentsSource, /Verification Tier Classifier/);
|
|
128
82
|
assert.match(agentsSource, /Verification tier: Tier N/);
|
|
129
83
|
assert.match(agentsSource, /npm run verify:delivery/);
|
|
130
|
-
assert.match(agentsSource, /
|
|
84
|
+
assert.match(agentsSource, /first product delivery/i);
|
|
85
|
+
assert.match(
|
|
86
|
+
agentsSource,
|
|
87
|
+
/toolcraft-performance-lifecycle: first-delivery=functional-complete; later-edits=focused-only; complaint=one-authority-targeted-performance-iteration; full-audit=explicit-only/,
|
|
88
|
+
);
|
|
131
89
|
assert.match(
|
|
132
90
|
agentsSource,
|
|
133
|
-
/
|
|
91
|
+
/repeated bare `verify:delivery` exits before inventory, build, tests, export, and performance work/is,
|
|
134
92
|
);
|
|
135
|
-
assert.match(agentsSource, /bare `npm run verify:delivery` derives the required proof/i);
|
|
136
93
|
assert.match(
|
|
137
94
|
agentsSource,
|
|
138
95
|
/only exact request authority[^\n]*measured targeted performance/i,
|
|
@@ -141,7 +98,7 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
141
98
|
agentsSource,
|
|
142
99
|
/during development[^\n]*affected performance scenarios|targeted performance scenarios only for touched/i,
|
|
143
100
|
);
|
|
144
|
-
assert.match(agentsSource, /
|
|
101
|
+
assert.match(agentsSource, /ordinary edits use only the smallest feature-focused tests and browser checks/i);
|
|
145
102
|
assert.match(agentsSource, /does not depend only on a mutable package script/i);
|
|
146
103
|
assert.match(agentsSource, /pnpm ai:check/);
|
|
147
104
|
assert.match(agentsSource, /use `brainstorming`/);
|
|
@@ -149,6 +106,7 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
149
106
|
assert.match(agentsSource, /use `systematic-debugging`/);
|
|
150
107
|
assert.match(agentsSource, /browser` workflow/);
|
|
151
108
|
assert.match(agentsSource, /pnpm test:browser/);
|
|
109
|
+
assert.match(agentsSource, /npm run test:feature --/);
|
|
152
110
|
assert.match(agentsSource, /signed local `AGENTS\.md` and `docs\/toolcraft\/\*` files are the mandatory workflow authority/i);
|
|
153
111
|
assert.match(agentsSource, /generated with `--no-skills`, continue through the equivalent signed local workflow/i);
|
|
154
112
|
assert.match(agentsSource, /Do not silently ignore a missing workflow capability/);
|
|
@@ -163,6 +121,8 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
163
121
|
assert.match(agentsSource, /exportRenderer/);
|
|
164
122
|
assert.match(agentsSource, /renderDefaultCanvasMedia=\{false\}/);
|
|
165
123
|
assert.match(agentsSource, /onPanelAction/);
|
|
124
|
+
assert.match(agentsSource, /canonical runtime representation across defaults, live edits, persistence, settings import, and keyframes/i);
|
|
125
|
+
assert.match(agentsSource, /property edits declare `selectionScope` as global or selected-entity/i);
|
|
166
126
|
assert.match(agentsSource, /MIT License/);
|
|
167
127
|
assert.match(agentsSource, /LICENSE\.md/);
|
|
168
128
|
assert.match(agentsSource, /NOTICE\.md/);
|
|
@@ -203,6 +163,10 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
203
163
|
path.join(targetDir, "docs/toolcraft/core/timeline-animation.md"),
|
|
204
164
|
"utf8",
|
|
205
165
|
);
|
|
166
|
+
const coreReferenceStudySource = await fs.readFile(
|
|
167
|
+
path.join(targetDir, "docs/toolcraft/core/reference-study.md"),
|
|
168
|
+
"utf8",
|
|
169
|
+
);
|
|
206
170
|
|
|
207
171
|
assert.match(componentRulesSource, /Slider `step` means numeric snapping only/);
|
|
208
172
|
assert.match(componentRulesSource, /variant: "discrete"/);
|
|
@@ -236,16 +200,32 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
236
200
|
assert.match(coreRuntimeBoundarySource, /copied runtime tree or its signed integrity manifest is missing/);
|
|
237
201
|
assert.match(coreRuntimeBoundarySource, /modelPresentation/);
|
|
238
202
|
assert.match(coreRuntimeBoundarySource, /exportRenderer/);
|
|
239
|
-
assert.match(coreRuntimeBoundarySource, /runtime owns typed image\/video actions end to end/i);
|
|
240
203
|
assert.match(coreRuntimeBoundarySource, /does not suppress runtime model layers/);
|
|
241
204
|
assert.match(componentRulesSource, /Do not show Layers for a single-layer app/);
|
|
242
205
|
assert.match(coreTimelineSource, /Any app with `Export Video` must enable the top Toolcraft timeline/);
|
|
243
|
-
|
|
244
|
-
|
|
206
|
+
for (const requiredReferenceStudyTerm of [
|
|
207
|
+
"npm run reference:study",
|
|
208
|
+
"--kind",
|
|
209
|
+
"--grid",
|
|
210
|
+
"--fps",
|
|
211
|
+
"--timestamps-file",
|
|
212
|
+
"12 FPS",
|
|
213
|
+
"120",
|
|
214
|
+
"referenceInputs",
|
|
215
|
+
"reference-parity",
|
|
216
|
+
"no-reference fast path",
|
|
217
|
+
]) {
|
|
218
|
+
assert.match(
|
|
219
|
+
coreReferenceStudySource,
|
|
220
|
+
new RegExp(requiredReferenceStudyTerm.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"), "iu"),
|
|
221
|
+
`Core reference-study docs must mention ${requiredReferenceStudyTerm}.`,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
assertGeneratedExportDocs({
|
|
225
|
+
agentsSource,
|
|
226
|
+
coreRuntimeBoundarySource,
|
|
245
227
|
coreSetupExportSource,
|
|
246
|
-
|
|
247
|
-
);
|
|
248
|
-
assert.match(coreSetupExportSource, /Clipboard copy is optional and never replaces export/);
|
|
228
|
+
});
|
|
249
229
|
assert.match(coreSetupExportSource, /renderScaleCoverage/);
|
|
250
230
|
assert.match(coreSetupExportSource, /selected-backing-pixels/);
|
|
251
231
|
assert.match(coreSetupExportSource, /canvas-render-scale-backing/);
|
|
@@ -271,6 +251,10 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
271
251
|
);
|
|
272
252
|
assert.match(assemblyDocsSource, /@\/toolcraft\/runtime/);
|
|
273
253
|
assert.match(assemblyDocsSource, /ToolcraftAppComposition/);
|
|
254
|
+
assert.match(
|
|
255
|
+
assemblyDocsSource,
|
|
256
|
+
/Every product declaration requires `productReadiness\.exportIntent`/,
|
|
257
|
+
);
|
|
274
258
|
assert.match(assemblyDocsSource, /protected route/);
|
|
275
259
|
assert.match(assemblyDocsSource, /transferMode: "reference-runtime-clone"/);
|
|
276
260
|
assert.match(assemblyDocsSource, /`canvasContent` must not contain app UI/);
|
|
@@ -284,6 +268,7 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
284
268
|
assert.match(acceptanceDocsSource, /automatedTestName/);
|
|
285
269
|
assert.match(acceptanceDocsSource, /browserTestName/);
|
|
286
270
|
assert.match(acceptanceDocsSource, /app-acceptance-data\.ts/);
|
|
271
|
+
assert.match(acceptanceDocsSource, /productReadiness\.exportIntent/);
|
|
287
272
|
assert.match(
|
|
288
273
|
acceptanceDocsSource,
|
|
289
274
|
/Contract docs are signed except product-owned `agent-worklog\.md` and optional `workflow-observation\.md`; only the observation stays outside `sourceHash`/,
|
|
@@ -291,7 +276,8 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
291
276
|
assert.match(acceptanceDocsSource, /Framework meta-tests are product-invariant/);
|
|
292
277
|
assert.match(acceptanceDocsSource, /protected neutral contract fixtures/);
|
|
293
278
|
assert.match(acceptanceDocsSource, /do not edit supplied `app-performance\.\*` meta-tests/i);
|
|
294
|
-
assert.match(acceptanceDocsSource, /
|
|
279
|
+
assert.match(acceptanceDocsSource, /Later ordinary edits do not derive an aggregate proof model/i);
|
|
280
|
+
assert.match(acceptanceDocsSource, /^(?=[\s\S]*test:feature)(?=[\s\S]*semantic)(?=[\s\S]*--all[\s\S]*product acceptance)/i);
|
|
295
281
|
assert.match(acceptanceDocsSource, /app-kernel-benchmarks\.ts/);
|
|
296
282
|
assert.match(acceptanceDocsSource, /renderScaleCoverage/);
|
|
297
283
|
assert.match(acceptanceDocsSource, /selected-backing-pixels/);
|
|
@@ -306,14 +292,8 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
306
292
|
);
|
|
307
293
|
assert.match(acceptanceDocsSource, /actual encoded packet metadata/i);
|
|
308
294
|
assert.match(acceptanceDocsSource, /distinct decoded frame hashes/i);
|
|
309
|
-
assert.match(
|
|
310
|
-
|
|
311
|
-
/Each browser file owns one acceptance domain/i,
|
|
312
|
-
);
|
|
313
|
-
assert.match(
|
|
314
|
-
acceptanceDocsSource,
|
|
315
|
-
/proof and test paths cannot own them/i,
|
|
316
|
-
);
|
|
295
|
+
assert.match(acceptanceDocsSource, /selectionScopeCoverage: "two-entity-isolation"/);
|
|
296
|
+
assert.match(acceptanceDocsSource, /editing A changes only A, editing B changes only B/i);
|
|
317
297
|
for (const coverage of [
|
|
318
298
|
"package-extraction",
|
|
319
299
|
"deterministic-root-selection",
|
|
@@ -349,6 +329,14 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
349
329
|
path.join(targetDir, "docs/toolcraft/core/performance.md"),
|
|
350
330
|
"utf8",
|
|
351
331
|
);
|
|
332
|
+
const schemaDocsSource = await fs.readFile(
|
|
333
|
+
path.join(targetDir, "docs/toolcraft/schema-reference.md"),
|
|
334
|
+
"utf8",
|
|
335
|
+
);
|
|
336
|
+
assert.match(schemaDocsSource, /one canonical runtime value model/i);
|
|
337
|
+
assert.match(schemaDocsSource, /`color` state is an expanded uppercase `#RRGGBB` string/i);
|
|
338
|
+
assert.match(componentRulesSource, /Built-in controls own canonical runtime values/i);
|
|
339
|
+
assert.match(worklogDocsSource, /Canonical control values and selected-entity isolation/i);
|
|
352
340
|
assert.deepEqual(
|
|
353
341
|
getMissingGeneratedPerformanceLifecycleMarkers([
|
|
354
342
|
{ docPath: "workflow.md", source: workflowDocsSource },
|
|
@@ -367,6 +355,7 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
367
355
|
assert.match(rendererDocsSource, /combined fixtures/i);
|
|
368
356
|
assert.match(rendererDocsSource, /modelPresentation/);
|
|
369
357
|
assert.match(rendererDocsSource, /ToolcraftAppComposition\.exportRenderer/);
|
|
358
|
+
assert.match(rendererDocsSource, /svgExportRenderer/);
|
|
370
359
|
assert.match(rendererDocsSource, /useToolcraftModelPresentationConsumer/);
|
|
371
360
|
assert.match(rendererDocsSource, /acquirePresentation/);
|
|
372
361
|
assert.match(rendererDocsSource, /lease\.release/);
|
|
@@ -397,9 +386,12 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
397
386
|
);
|
|
398
387
|
assert.match(corePerformanceDocsSource, /exact 30 FPS packet cadence[\s\S]*functional correctness/i);
|
|
399
388
|
assert.match(performanceDocsSource, /exact 30 FPS packet cadence[\s\S]*functional proof/i);
|
|
400
|
-
assert.match(performanceDocsSource, /
|
|
389
|
+
assert.match(performanceDocsSource, /first product delivery/i);
|
|
401
390
|
assert.match(performanceDocsSource, /verify:delivery/);
|
|
402
|
-
assert.match(
|
|
391
|
+
assert.match(
|
|
392
|
+
performanceDocsSource,
|
|
393
|
+
/repeated bare `verify:delivery` exits before inventory, build, tests, export, and performance work/i,
|
|
394
|
+
);
|
|
403
395
|
assert.match(performanceDocsSource, /performance-iteration/);
|
|
404
396
|
assert.match(performanceDocsSource, /renderScaleCoverage/);
|
|
405
397
|
assert.match(performanceDocsSource, /canvas-render-scale-backing/);
|
|
@@ -426,15 +418,15 @@ export async function assertGeneratedDocs(targetDir) {
|
|
|
426
418
|
assert.match(performanceDocsSource, /Use bare `npm run verify:delivery` once/i);
|
|
427
419
|
assert.match(
|
|
428
420
|
workflowDocsSource,
|
|
429
|
-
/
|
|
421
|
+
/Later ordinary edits:[^\n]*exact unit\/component test[^\n]*npm run test:feature -- <acceptance-id>/i,
|
|
430
422
|
);
|
|
431
423
|
assert.match(
|
|
432
424
|
workflowDocsSource,
|
|
433
|
-
/
|
|
425
|
+
/repeated bare `npm run verify:delivery` is a protected no-op[^\n]*exits before inventory, build, tests, export, and performance work/i,
|
|
434
426
|
);
|
|
435
427
|
assert.match(
|
|
436
428
|
workflowDocsSource,
|
|
437
|
-
/do not rerun the aggregate, export, or performance matrix after
|
|
429
|
+
/do not rerun the aggregate, export, or performance matrix after edits/i,
|
|
438
430
|
);
|
|
439
431
|
assert.match(
|
|
440
432
|
performanceDocsSource,
|