@zxyycom/vibe-check 0.0.2 → 0.0.3
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/README.md +36 -5
- package/dist/esm/check/check.mjs +4 -0
- package/dist/esm/check/check.mjs.map +1 -1
- package/dist/esm/check/flag-enablement.mjs +32 -0
- package/dist/esm/check/flag-enablement.mjs.map +1 -0
- package/dist/esm/check/handoff-provider-identity.mjs +18 -0
- package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +1 -1
- package/dist/esm/check/inherited-collection.mjs.map +1 -1
- package/dist/esm/check/project-changes.mjs +2 -0
- package/dist/esm/check/project-changes.mjs.map +1 -0
- package/dist/esm/check/project-context.mjs +2 -0
- package/dist/esm/check/project-context.mjs.map +1 -0
- package/dist/esm/check-settlement/facts.mjs.map +1 -1
- package/dist/esm/check-settlement/record-store.mjs +1 -1
- package/dist/esm/check-settlement/record-store.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-data.mjs +36 -7
- package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
- package/dist/esm/data-boundary/closed-values.mjs +28 -4
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
- package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
- package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
- package/dist/esm/data-boundary/project-path.mjs +19 -0
- package/dist/esm/data-boundary/project-path.mjs.map +1 -0
- package/dist/esm/index.mjs +12 -5
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs +4 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
- package/dist/esm/package-checks/check-authoring.mjs +69 -0
- package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -1
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -1
- package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
- package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/contract.mjs +2 -0
- package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/execution.mjs +134 -0
- package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/options.mjs +284 -0
- package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
- package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +9 -11
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +2 -4
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/execution.mjs +2 -4
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +102 -29
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +7 -2
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +1 -3
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +3 -2
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +6 -6
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +9 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +12 -7
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +6 -6
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +5 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +9 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +9 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +3 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +3 -1
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +12 -5
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +20 -8
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +2 -4
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs +3 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/git.mjs +11 -0
- package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/path.mjs +1 -17
- package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
- package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
- package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/local-cache-options.mjs +28 -0
- package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -33
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +3 -18
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +2 -14
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +4 -5
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/collection.mjs +23 -19
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +2 -5
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +22 -6
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
- package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +11 -15
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/default-check.mjs +9 -11
- package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/execution.mjs +2 -2
- package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs +46 -7
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +3 -4
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -1
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
- package/dist/esm/{cache → package-tools/cache}/cache-json-by-key.mjs +13 -14
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
- package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
- package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.mjs +2 -2
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.mjs +4 -2
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.mjs +8 -8
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.mjs +1 -2
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/strategy.mjs +3 -3
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +8 -5
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +79 -66
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs +13 -8
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +7 -6
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
- package/dist/esm/project-definition/declarative-snapshot.mjs +2 -1
- package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -1
- package/dist/esm/project-definition/project-changes.mjs +70 -0
- package/dist/esm/project-definition/project-changes.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition-validation.mjs +40 -8
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +22 -15
- package/dist/esm/project-definition/project-definition.mjs.map +1 -1
- package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -1
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +9 -6
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -1
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -1
- package/dist/esm/project-run/aggregation.mjs +42 -59
- package/dist/esm/project-run/aggregation.mjs.map +1 -1
- package/dist/esm/project-run/changes/git.mjs +161 -0
- package/dist/esm/project-run/changes/git.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/callback.mjs +3 -2
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/dependencies.mjs +80 -5
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +5 -3
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +37 -16
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +15 -7
- package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
- package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/{preflight.mjs → preparation.mjs} +52 -52
- package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +27 -164
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
- package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
- package/dist/esm/project-run/completion/completion.mjs +18 -1
- package/dist/esm/project-run/completion/completion.mjs.map +1 -1
- package/dist/esm/project-run/controls/contract.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation.mjs +7 -54
- package/dist/esm/project-run/controls/validation.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -1
- package/dist/esm/project-run/invocation/candidate.mjs +17 -13
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -1
- package/dist/esm/project-run/invocation/candidates.mjs +26 -0
- package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
- package/dist/esm/project-run/invocation/creation.mjs +7 -3
- package/dist/esm/project-run/invocation/creation.mjs.map +1 -1
- package/dist/esm/project-run/invocation/execution.mjs +98 -0
- package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
- package/dist/esm/project-run/invocation/run.mjs +13 -112
- package/dist/esm/project-run/invocation/run.mjs.map +1 -1
- package/dist/esm/project-run/invocation/scheduler.mjs +13 -6
- package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -1
- package/dist/esm/project-run/outputs/status.mjs +12 -12
- package/dist/esm/project-run/outputs/status.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/presentation.mjs +31 -11
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +11 -4
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +20 -6
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +6 -2
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +2 -1
- package/dist/esm/project-run/project-context.mjs.map +1 -1
- package/dist/esm/project-run/result.mjs +2 -2
- package/dist/esm/project-run/result.mjs.map +1 -1
- package/dist/esm/project-run/run.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +9 -4
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +3 -5
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +25 -8
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +8 -8
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +8 -4
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +12 -6
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +3 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +17 -17
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +18 -6
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +147 -28
- package/docs/changelog.md +145 -2
- package/docs/checks/duplicate-detection.md +22 -3
- package/docs/checks/file-metrics.md +25 -6
- package/docs/checks/function-metrics.md +21 -2
- package/docs/checks/json-schema-validation.md +25 -4
- package/docs/checks/json-validation.md +24 -5
- package/docs/checks/maintenance-reminders.md +30 -6
- package/docs/checks/markdown-link-validation.md +24 -4
- package/docs/checks/markdown-lint.md +167 -0
- package/docs/checks/secret-detection.md +31 -7
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +10 -10
- package/docs/guides/building-project-gate.md +706 -0
- package/docs/guides/callbacks.md +81 -22
- package/docs/guides/check-dependencies.md +41 -10
- package/docs/guides/collecting-project-files.md +7 -7
- package/docs/guides/command-check.md +155 -0
- package/docs/guides/data-boundaries.md +140 -0
- package/docs/guides/extending-check-lifecycle.md +77 -25
- package/docs/guides/finding-waivers.md +43 -1
- package/docs/guides/learned-scheduling.md +1 -1
- package/docs/guides/run-outputs.md +35 -9
- package/docs/guides/scheduling.md +15 -15
- package/docs/output.md +6 -5
- package/package.json +2 -1
- package/src/check/check.ts +332 -92
- package/src/check/flag-enablement.ts +76 -0
- package/src/check/handoff-provider-identity.ts +34 -0
- package/src/check/inherited-collection.ts +1 -1
- package/src/check/project-changes.ts +14 -0
- package/src/check/project-context.ts +11 -0
- package/src/check-settlement/facts.ts +1 -1
- package/src/check-settlement/record-store.ts +1 -1
- package/src/data-boundary/canonical-data.ts +36 -9
- package/src/data-boundary/canonical-json.ts +18 -1
- package/src/data-boundary/closed-values.ts +26 -6
- package/src/data-boundary/config-glob.ts +17 -0
- package/src/data-boundary/project-path.ts +21 -0
- package/src/index.ts +72 -11
- package/src/machine-output/v4/atomic-publication.ts +3 -1
- package/src/package-checks/check-authoring.ts +136 -0
- package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +1 -1
- package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +1 -1
- package/src/package-checks/command-check/command-check.ts +152 -0
- package/src/package-checks/command-check/contract.ts +168 -0
- package/src/package-checks/command-check/execution.ts +211 -0
- package/src/package-checks/command-check/options.ts +331 -0
- package/src/package-checks/command-check/transcript.ts +35 -0
- package/src/package-checks/duplicate-detection/default-check.ts +37 -6
- package/src/package-checks/duplicate-detection/execution.ts +2 -4
- package/src/package-checks/duplicate-detection/finding-messages.ts +2 -2
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
- package/src/package-checks/duplicate-detection/options.ts +6 -3
- package/src/package-checks/duplicate-detection/records.ts +1 -1
- package/src/package-checks/file-metrics/constructor.ts +29 -6
- package/src/package-checks/file-metrics/execution.ts +2 -4
- package/src/package-checks/file-metrics/finding-messages.ts +1 -1
- package/src/package-checks/file-metrics/options.ts +6 -3
- package/src/package-checks/file-metrics/records.ts +1 -1
- package/src/package-checks/file-metrics/scc/availability.ts +1 -1
- package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
- package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
- package/src/package-checks/file-metrics/scc/scanner.ts +134 -32
- package/src/package-checks/function-metrics/analysis.ts +7 -2
- package/src/package-checks/function-metrics/analyzer/analysis-model.ts +1 -1
- package/src/package-checks/function-metrics/analyzer/extension-output.ts +14 -6
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +1 -3
- package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +3 -3
- package/src/package-checks/function-metrics/analyzer/pipeline.ts +4 -2
- package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +6 -6
- package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +1 -1
- package/src/package-checks/function-metrics/analyzer/readers/objc.ts +9 -3
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +14 -7
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +8 -4
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +4 -3
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +2 -1
- package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +9 -3
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +9 -3
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +2 -1
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +3 -1
- package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +10 -5
- package/src/package-checks/function-metrics/analyzer-worker-port.ts +20 -6
- package/src/package-checks/function-metrics/constructor.ts +30 -7
- package/src/package-checks/function-metrics/execution.ts +2 -4
- package/src/package-checks/function-metrics/finding-messages.ts +2 -2
- package/src/package-checks/function-metrics/measurement.ts +3 -1
- package/src/package-checks/function-metrics/options.ts +6 -3
- package/src/package-checks/function-metrics/records.ts +1 -1
- package/src/package-checks/host-environment/git.ts +11 -0
- package/src/package-checks/host-environment/path.ts +1 -20
- package/src/package-checks/host-environment/process/contract.ts +17 -9
- package/src/package-checks/host-environment/process/result.ts +48 -20
- package/src/package-checks/host-environment/process/runner.ts +8 -4
- package/src/package-checks/json-schema-validation/default-check.ts +38 -5
- package/src/package-checks/json-schema-validation/options.ts +4 -1
- package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
- package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
- package/src/package-checks/json-validation/default-check.ts +27 -6
- package/src/package-checks/json-validation/options.ts +4 -1
- package/src/package-checks/local-cache-options.ts +40 -0
- package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
- package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
- package/src/package-checks/markdown-link-validation/default-check.ts +48 -5
- package/src/package-checks/markdown-link-validation/execution.ts +1 -1
- package/src/package-checks/markdown-link-validation/finding-messages.ts +1 -1
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
- package/src/package-checks/markdown-link-validation/options-resolution.ts +2 -19
- package/src/package-checks/markdown-link-validation/options-validation.ts +2 -17
- package/src/package-checks/markdown-link-validation/options.ts +6 -7
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +4 -5
- package/src/package-checks/markdown-lint/adapter.ts +167 -0
- package/src/package-checks/markdown-lint/default-check.ts +92 -0
- package/src/package-checks/markdown-lint/execution.ts +266 -0
- package/src/package-checks/markdown-lint/final-data.ts +33 -0
- package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
- package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
- package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
- package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
- package/src/package-checks/markdown-lint/options-validation.ts +50 -0
- package/src/package-checks/markdown-lint/options.ts +82 -0
- package/src/package-checks/markdown-lint/records.ts +132 -0
- package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
- package/src/package-checks/project-files/collection.ts +38 -22
- package/src/package-checks/project-files/config-glob.ts +1 -17
- package/src/package-checks/project-files/configuration.ts +1 -1
- package/src/package-checks/project-files/gitlink-revision.ts +4 -6
- package/src/package-checks/project-files/gitlink-worktree.ts +35 -7
- package/src/package-checks/project-files/public-collection.ts +1 -1
- package/src/package-checks/project-files/revision-paths.ts +3 -3
- package/src/package-checks/project-files/revision-worktree-files.ts +16 -16
- package/src/package-checks/secret-detection/default-check.ts +29 -6
- package/src/package-checks/secret-detection/execution.ts +2 -2
- package/src/package-checks/secret-detection/input-preparation.ts +64 -7
- package/src/package-checks/secret-detection/options.ts +5 -2
- package/src/package-checks/secret-detection/records.ts +1 -1
- package/src/package-checks/secret-detection/secretlint/adapter.ts +3 -4
- package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
- package/src/{cache → package-tools/cache}/cache-json-by-key.ts +13 -17
- package/src/{check → package-tools/finding-presentation}/finding-presentation.ts +3 -1
- package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.ts +5 -2
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.ts +5 -3
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.ts +5 -4
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.ts +9 -10
- package/src/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.ts +2 -3
- package/src/{learned-critical-path → package-tools/learned-critical-path}/static-decision.ts +1 -1
- package/src/{learned-critical-path → package-tools/learned-critical-path}/strategy.ts +7 -4
- package/src/project-definition/check-tree/authoring.ts +15 -8
- package/src/project-definition/check-tree/check-fields-authoring.ts +106 -91
- package/src/project-definition/check-tree/flag-conditions.ts +99 -0
- package/src/project-definition/check-tree/materialization.ts +12 -8
- package/src/project-definition/check-tree/resolution.ts +13 -15
- package/src/project-definition/declarative-snapshot.ts +9 -2
- package/src/project-definition/project-changes.ts +112 -0
- package/src/project-definition/project-definition-validation.ts +58 -10
- package/src/project-definition/project-definition.ts +41 -68
- package/src/project-definition/scheduler-policy.ts +6 -3
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +11 -8
- package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +2 -2
- package/src/project-run/aggregation.ts +51 -74
- package/src/project-run/changes/git.ts +206 -0
- package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
- package/src/project-run/check-execution/callback.ts +3 -2
- package/src/project-run/check-execution/dependencies.ts +120 -6
- package/src/project-run/check-execution/execution-finalization.ts +6 -4
- package/src/project-run/check-execution/execution-settlement.ts +88 -29
- package/src/project-run/check-execution/flag-controls.ts +22 -8
- package/src/project-run/check-execution/lifecycle.ts +14 -6
- package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
- package/src/project-run/check-execution/{preflight.ts → preparation.ts} +92 -84
- package/src/project-run/check-execution/ready-check-execution.ts +97 -0
- package/src/project-run/check-execution/resolved-checks.ts +40 -219
- package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
- package/src/project-run/check-execution/terminal-result.ts +108 -29
- package/src/project-run/completion/completion.ts +17 -3
- package/src/project-run/controls/contract.ts +6 -16
- package/src/project-run/controls/validation.ts +7 -60
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
- package/src/project-run/diagnostic-logging/observation-rendering.ts +1 -1
- package/src/project-run/invocation/candidate.ts +28 -15
- package/src/project-run/invocation/candidates.ts +56 -0
- package/src/project-run/invocation/creation.ts +7 -3
- package/src/project-run/invocation/execution.ts +136 -0
- package/src/project-run/invocation/run.ts +15 -179
- package/src/project-run/invocation/scheduler.ts +13 -6
- package/src/project-run/outputs/status.ts +15 -15
- package/src/project-run/progress-rendering/presentation.ts +35 -13
- package/src/project-run/progress-rendering/renderer-formatting.ts +20 -7
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +23 -6
- package/src/project-run/progress-rendering/renderer.ts +10 -4
- package/src/project-run/project-context.ts +8 -4
- package/src/project-run/result.ts +5 -5
- package/src/project-run/run.ts +1 -1
- package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
- package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +9 -4
- package/src/project-run/task-scheduler/admission-core/selection-query.ts +6 -4
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +36 -6
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +17 -8
- package/src/project-run/task-scheduler/execution-state.ts +4 -4
- package/src/project-run/task-scheduler/measurement/diagnostics.ts +10 -4
- package/src/project-run/task-scheduler/measurement/timing.ts +13 -5
- package/src/project-run/task-scheduler/scheduler-observation.ts +3 -1
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +24 -22
- package/src/project-run/task-scheduler/scheduler.ts +23 -6
- package/types/check/check.d.ts +178 -67
- package/types/check/flag-enablement.d.ts +42 -0
- package/types/check/handoff-provider-identity.d.ts +12 -0
- package/types/check/project-changes.d.ts +13 -0
- package/types/check/project-context.d.ts +10 -0
- package/types/check-settlement/facts.d.ts +1 -1
- package/types/data-boundary/canonical-data.d.ts +28 -5
- package/types/data-boundary/canonical-json.d.ts +18 -1
- package/types/data-boundary/closed-values.d.ts +17 -1
- package/types/data-boundary/config-glob.d.ts +5 -0
- package/types/data-boundary/project-path.d.ts +4 -0
- package/types/index.d.ts +27 -11
- package/types/package-checks/check-authoring.d.ts +45 -0
- package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +1 -1
- package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +1 -1
- package/types/package-checks/command-check/command-check.d.ts +48 -0
- package/types/package-checks/command-check/contract.d.ts +108 -0
- package/types/package-checks/command-check/execution.d.ts +7 -0
- package/types/package-checks/command-check/options.d.ts +11 -0
- package/types/package-checks/command-check/transcript.d.ts +8 -0
- package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
- package/types/package-checks/duplicate-detection/finding-messages.d.ts +1 -1
- package/types/package-checks/duplicate-detection/options.d.ts +4 -3
- package/types/package-checks/duplicate-detection/records.d.ts +1 -1
- package/types/package-checks/file-metrics/constructor.d.ts +5 -2
- package/types/package-checks/file-metrics/options.d.ts +4 -3
- package/types/package-checks/file-metrics/records.d.ts +1 -1
- package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
- package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
- package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +3 -3
- package/types/package-checks/function-metrics/constructor.d.ts +5 -2
- package/types/package-checks/function-metrics/finding-messages.d.ts +1 -1
- package/types/package-checks/function-metrics/options.d.ts +4 -3
- package/types/package-checks/function-metrics/records.d.ts +1 -1
- package/types/package-checks/host-environment/git.d.ts +2 -0
- package/types/package-checks/host-environment/path.d.ts +1 -3
- package/types/package-checks/host-environment/process/contract.d.ts +17 -9
- package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-schema-validation/options.d.ts +2 -1
- package/types/package-checks/json-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-validation/options.d.ts +2 -1
- package/types/package-checks/local-cache-options.d.ts +9 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
- package/types/package-checks/markdown-link-validation/default-check.d.ts +4 -1
- package/types/package-checks/markdown-link-validation/options.d.ts +4 -7
- package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
- package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
- package/types/package-checks/markdown-lint/execution.d.ts +24 -0
- package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
- package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
- package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
- package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
- package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
- package/types/package-checks/markdown-lint/options.d.ts +65 -0
- package/types/package-checks/markdown-lint/records.d.ts +39 -0
- package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
- package/types/package-checks/secret-detection/default-check.d.ts +4 -1
- package/types/package-checks/secret-detection/options.d.ts +3 -2
- package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
- package/types/{check → package-tools/finding-presentation}/finding-presentation.d.ts +3 -1
- package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
- package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.d.ts +2 -2
- package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/static-decision.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/strategy.d.ts +1 -1
- package/types/project-definition/check-tree/authoring.d.ts +5 -3
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +12 -7
- package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
- package/types/project-definition/check-tree/resolution.d.ts +6 -4
- package/types/project-definition/declarative-snapshot.d.ts +4 -1
- package/types/project-definition/project-changes.d.ts +30 -0
- package/types/project-definition/project-definition.d.ts +15 -30
- package/types/project-definition/scheduler-policy.d.ts +3 -3
- package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +2 -2
- package/types/project-run/aggregation.d.ts +8 -6
- package/types/project-run/changes/git.d.ts +14 -0
- package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/dependencies.d.ts +3 -0
- package/types/project-run/check-execution/execution-finalization.d.ts +1 -1
- package/types/project-run/check-execution/execution-settlement.d.ts +15 -7
- package/types/project-run/check-execution/flag-controls.d.ts +1 -1
- package/types/project-run/check-execution/lifecycle.d.ts +9 -5
- package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
- package/types/project-run/check-execution/{preflight.d.ts → preparation.d.ts} +10 -9
- package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +12 -13
- package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
- package/types/project-run/check-execution/terminal-result.d.ts +13 -1
- package/types/project-run/completion/completion.d.ts +3 -1
- package/types/project-run/controls/contract.d.ts +6 -16
- package/types/project-run/invocation/candidates.d.ts +8 -0
- package/types/project-run/invocation/execution.d.ts +5 -0
- package/types/project-run/invocation/run.d.ts +2 -2
- package/types/project-run/outputs/status.d.ts +4 -4
- package/types/project-run/progress-rendering/presentation.d.ts +4 -3
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +5 -2
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +2 -0
- package/types/project-run/progress-rendering/renderer.d.ts +4 -2
- package/types/project-run/project-context.d.ts +3 -3
- package/types/project-run/result.d.ts +3 -3
- package/types/project-run/run.d.ts +1 -1
- package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +4 -4
- package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +2 -2
- package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +1 -1
- package/dist/esm/cache/cache-json-by-key.mjs.map +0 -1
- package/dist/esm/check/finding-presentation.mjs.map +0 -1
- package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +0 -1
- package/dist/esm/learned-critical-path/selection-layers.mjs.map +0 -1
- package/dist/esm/learned-critical-path/static-decision.mjs.map +0 -1
- package/dist/esm/learned-critical-path/strategy.mjs.map +0 -1
- package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
- package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +0 -1
- package/types/package-checks/project-files/config-glob.d.ts +0 -5
- /package/dist/esm/{check → package-tools/finding-presentation}/finding-presentation.mjs +0 -0
- /package/dist/esm/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.mjs +0 -0
- /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.mjs +0 -0
- /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.mjs +0 -0
- /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/static-decision.mjs +0 -0
- /package/src/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.ts +0 -0
- /package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.ts +0 -0
- /package/types/{cache → package-tools/cache}/cache-json-by-key.d.ts +0 -0
- /package/types/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.d.ts +0 -0
- /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.d.ts +0 -0
- /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregation.mjs","sourceRoot":"","sources":["../../../src/project-run/aggregation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aggregation.mjs","sourceRoot":"","sources":["../../../src/project-run/aggregation.ts"],"names":[],"mappings":"AAGA,uGAAuG;AACvG,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,aAAa,CAAQ;IAE9B,YAAmB,aAAoB;QACrC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAED,yGAAyG;AACzG,MAAM,UAAU,wBAAwB,CACtC,QAAsB,EACtB,iBAAoC,EACpC,WAAyC;IAEzC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC5D,OAAO,WAAW,KAAK,SAAS;QAC9B,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CACtB,QAAsB,EACtB,iBAAoC;IAEpC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,eAAe,CAAC,MAA4B;IACnD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;QACpF,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CACxB,WAA6B,EAC7B,MAA4B;IAE5B,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,uBAAuB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,IAAI,uBAAuB,CAC/B,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAC9E,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,CACL,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,gBAAgB;QAC1B,KAAK,KAAK,aAAa,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,OAAO;QAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AACjG,CAAC","sourcesContent":["import type { CoreCheck, CoreSnapshot } from \"../check-settlement/facts.ts\";\nimport type { CheckAggregate, CheckAggregation } from \"./controls/contract.ts\";\n\n/** Identifies a callback failure so the invocation boundary can close outputs before rethrowing it. */\nexport class CheckAggregationFailure extends Error {\n readonly originalError: Error;\n\n public constructor(originalError: Error) {\n super(\"Check aggregation failed\", { cause: originalError });\n this.originalError = originalError;\n }\n}\n\n/** Builds the canonical ordered, read-only effective Check list and derives its invocation aggregate. */\nexport function aggregateEffectiveChecks(\n snapshot: CoreSnapshot,\n effectiveCheckIds: readonly string[],\n aggregation: CheckAggregation | undefined\n): CheckAggregate {\n const checks = effectiveChecks(snapshot, effectiveCheckIds);\n return aggregation === undefined\n ? strictAggregate(checks)\n : invokeAggregation(aggregation, checks);\n}\n\nfunction effectiveChecks(\n snapshot: CoreSnapshot,\n effectiveCheckIds: readonly string[]\n): readonly CoreCheck[] {\n const effectiveCheckIdSet = new Set(effectiveCheckIds);\n return Object.freeze(snapshot.checks.filter((check) => effectiveCheckIdSet.has(check.checkId)));\n}\n\nfunction strictAggregate(checks: readonly CoreCheck[]): CheckAggregate {\n return checks.length > 0 && checks.every((check) => check.outcome.status === \"passed\")\n ? \"passed\"\n : \"failed\";\n}\n\nfunction invokeAggregation(\n aggregation: CheckAggregation,\n checks: readonly CoreCheck[]\n): CheckAggregate {\n let aggregate: unknown;\n try {\n aggregate = aggregation(checks);\n } catch (error) {\n throw new CheckAggregationFailure(errorFromThrownValue(error));\n }\n if (isCheckAggregate(aggregate)) return aggregate;\n discardPromiseRejection(aggregate);\n throw new CheckAggregationFailure(\n new TypeError(\"Check aggregation must synchronously return a CheckAggregate\")\n );\n}\n\nfunction isCheckAggregate(value: unknown): value is CheckAggregate {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"not-applicable\" ||\n value === \"unavailable\"\n );\n}\n\nfunction discardPromiseRejection(value: unknown): void {\n if (value instanceof Promise) void value.catch(() => undefined);\n}\n\nfunction errorFromThrownValue(value: unknown): Error {\n return value instanceof Error ? value : new Error(\"Check aggregation threw a non-Error value\");\n}\n"]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
2
|
+
import { execaSync } from "execa";
|
|
3
|
+
import { matchesAnyConfigGlob } from "../../data-boundary/config-glob.mjs";
|
|
4
|
+
import { isNormalizedProjectRelativePath } from "../../data-boundary/project-path.mjs";
|
|
5
|
+
export const CHANGE_FLAG_PREFIX = "vibe-check:change:";
|
|
6
|
+
export const GIT_CHANGES_UNAVAILABLE_CODE = "git-changes-unavailable";
|
|
7
|
+
/** Prepares one configured Git change snapshot before Run flag selection. */
|
|
8
|
+
export function prepareProjectChanges(input) {
|
|
9
|
+
const declaredFlags = declaredChangeFlags(input.changes);
|
|
10
|
+
try {
|
|
11
|
+
const paths = collectGitChangedPaths(input.projectRoot, input.changes.source.compareWith);
|
|
12
|
+
const projectChanges = matchedProjectChanges(paths, input.changes);
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
effectiveFlags: combineFlags(input.callerFlags, projectChanges.files.flatMap(({ flags }) => flags)),
|
|
15
|
+
projectChanges
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return Object.freeze({
|
|
20
|
+
effectiveFlags: combineFlags(input.callerFlags, declaredFlags),
|
|
21
|
+
projectChanges: Object.freeze({
|
|
22
|
+
ok: false,
|
|
23
|
+
reason: Object.freeze({ code: GIT_CHANGES_UNAVAILABLE_CODE })
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function declaredChangeFlags(changes) {
|
|
29
|
+
return Object.freeze(Object.keys(changes.flags)
|
|
30
|
+
.sort(compareText)
|
|
31
|
+
.map((flagId) => `${CHANGE_FLAG_PREFIX}${flagId}`));
|
|
32
|
+
}
|
|
33
|
+
function collectGitChangedPaths(projectRoot, compareWith) {
|
|
34
|
+
const root = resolve(projectRoot);
|
|
35
|
+
const repositoryRoot = gitText(root, ["rev-parse", "--show-toplevel"]);
|
|
36
|
+
if (!isProjectRootInRepository(root, resolve(repositoryRoot))) {
|
|
37
|
+
throw new Error("project root is outside the Git repository");
|
|
38
|
+
}
|
|
39
|
+
const committed = gitNameStatus(root, [
|
|
40
|
+
"diff",
|
|
41
|
+
"--relative",
|
|
42
|
+
"--name-status",
|
|
43
|
+
"-z",
|
|
44
|
+
"--find-renames",
|
|
45
|
+
`${compareWith}...HEAD`
|
|
46
|
+
]);
|
|
47
|
+
const staged = gitNameStatus(root, [
|
|
48
|
+
"diff",
|
|
49
|
+
"--cached",
|
|
50
|
+
"--relative",
|
|
51
|
+
"--name-status",
|
|
52
|
+
"-z",
|
|
53
|
+
"--find-renames"
|
|
54
|
+
]);
|
|
55
|
+
const unstaged = gitNameStatus(root, [
|
|
56
|
+
"diff",
|
|
57
|
+
"--relative",
|
|
58
|
+
"--name-status",
|
|
59
|
+
"-z",
|
|
60
|
+
"--find-renames"
|
|
61
|
+
]);
|
|
62
|
+
const untracked = gitNulPaths(root, [
|
|
63
|
+
"ls-files",
|
|
64
|
+
"--others",
|
|
65
|
+
"--exclude-standard",
|
|
66
|
+
"-z",
|
|
67
|
+
"--",
|
|
68
|
+
"."
|
|
69
|
+
]);
|
|
70
|
+
return Object.freeze([
|
|
71
|
+
...new Set([...committed, ...staged, ...unstaged, ...untracked].map(normalizedChangedPath))
|
|
72
|
+
].sort(compareText));
|
|
73
|
+
}
|
|
74
|
+
function isProjectRootInRepository(projectRoot, repositoryRoot) {
|
|
75
|
+
const fromRepository = relative(repositoryRoot, projectRoot);
|
|
76
|
+
return (!isAbsolute(fromRepository) && fromRepository !== ".." && !fromRepository.startsWith(`..${sep}`));
|
|
77
|
+
}
|
|
78
|
+
function gitText(cwd, args) {
|
|
79
|
+
const text = gitOutput(cwd, args).trim();
|
|
80
|
+
if (text.length === 0)
|
|
81
|
+
throw new Error("Git command returned no text");
|
|
82
|
+
return text;
|
|
83
|
+
}
|
|
84
|
+
function gitOutput(cwd, args) {
|
|
85
|
+
const result = execaSync("git", args, {
|
|
86
|
+
cwd,
|
|
87
|
+
encoding: "utf8",
|
|
88
|
+
reject: false,
|
|
89
|
+
stripFinalNewline: false,
|
|
90
|
+
windowsHide: true
|
|
91
|
+
});
|
|
92
|
+
if (result.failed || result.exitCode !== 0)
|
|
93
|
+
throw new Error("Git command failed");
|
|
94
|
+
if (typeof result.stdout !== "string")
|
|
95
|
+
throw new Error("Git command returned non-text output");
|
|
96
|
+
return result.stdout;
|
|
97
|
+
}
|
|
98
|
+
function gitNameStatus(cwd, args) {
|
|
99
|
+
return parseGitNameStatus(gitOutput(cwd, args));
|
|
100
|
+
}
|
|
101
|
+
function gitNulPaths(cwd, args) {
|
|
102
|
+
return gitOutput(cwd, args)
|
|
103
|
+
.split("\0")
|
|
104
|
+
.filter((path) => path.length > 0);
|
|
105
|
+
}
|
|
106
|
+
/** Parses Git's `--name-status -z` protocol without line or tab splitting. */
|
|
107
|
+
function parseGitNameStatus(stdout) {
|
|
108
|
+
const tokens = stdout.split("\0");
|
|
109
|
+
if (tokens.at(-1) === "")
|
|
110
|
+
tokens.pop();
|
|
111
|
+
const paths = [];
|
|
112
|
+
for (let index = 0; index < tokens.length;) {
|
|
113
|
+
const entry = parseGitNameStatusEntry(tokens, index);
|
|
114
|
+
paths.push(...entry.paths);
|
|
115
|
+
index = entry.nextIndex;
|
|
116
|
+
}
|
|
117
|
+
return Object.freeze(paths);
|
|
118
|
+
}
|
|
119
|
+
function parseGitNameStatusEntry(tokens, statusIndex) {
|
|
120
|
+
const status = tokens[statusIndex];
|
|
121
|
+
if (status === undefined || !isNameStatus(status))
|
|
122
|
+
throw new Error("invalid Git name-status output");
|
|
123
|
+
const pathCount = nameStatusPathCount(status);
|
|
124
|
+
const paths = tokens.slice(statusIndex + 1, statusIndex + 1 + pathCount);
|
|
125
|
+
if (paths.length !== pathCount || paths.some((path) => path.length === 0))
|
|
126
|
+
throw new Error("missing Git changed path");
|
|
127
|
+
return Object.freeze({ nextIndex: statusIndex + 1 + pathCount, paths: Object.freeze(paths) });
|
|
128
|
+
}
|
|
129
|
+
function nameStatusPathCount(status) {
|
|
130
|
+
return status.startsWith("R") || status.startsWith("C") ? 2 : 1;
|
|
131
|
+
}
|
|
132
|
+
function isNameStatus(value) {
|
|
133
|
+
return /^(?:[ACDMRTUXB][0-9]*|[RC][0-9]+)$/u.test(value);
|
|
134
|
+
}
|
|
135
|
+
function normalizedChangedPath(path) {
|
|
136
|
+
if (!isNormalizedProjectRelativePath(path))
|
|
137
|
+
throw new Error("invalid Git project-relative path");
|
|
138
|
+
return path;
|
|
139
|
+
}
|
|
140
|
+
function matchedProjectChanges(paths, changes) {
|
|
141
|
+
const regions = Object.entries(changes.flags).sort(([left], [right]) => compareText(left, right));
|
|
142
|
+
const files = paths.flatMap((path) => {
|
|
143
|
+
const flags = regions.flatMap(([flagId, region]) => matchesRegion(path, region) ? [`${CHANGE_FLAG_PREFIX}${flagId}`] : []);
|
|
144
|
+
return flags.length === 0 ? [] : [Object.freeze({ flags: Object.freeze(flags), path })];
|
|
145
|
+
});
|
|
146
|
+
return Object.freeze({ ok: true, files: Object.freeze(files) });
|
|
147
|
+
}
|
|
148
|
+
function matchesRegion(path, region) {
|
|
149
|
+
return matchesAnyConfigGlob(path, region.include) && !matchesAnyConfigGlob(path, region.exclude);
|
|
150
|
+
}
|
|
151
|
+
function combineFlags(...sets) {
|
|
152
|
+
return Object.freeze([...new Set(sets.flat())].sort(compareText));
|
|
153
|
+
}
|
|
154
|
+
function compareText(left, right) {
|
|
155
|
+
if (left < right)
|
|
156
|
+
return -1;
|
|
157
|
+
if (left > right)
|
|
158
|
+
return 1;
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=git.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.mjs","sourceRoot":"","sources":["../../../../src/project-run/changes/git.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\n\nimport { execaSync } from \"execa\";\n\nimport { matchesAnyConfigGlob } from \"../../data-boundary/config-glob.ts\";\nimport { isNormalizedProjectRelativePath } from \"../../data-boundary/project-path.ts\";\nimport type { ProjectChanges } from \"../../check/check.ts\";\nimport type { NormalizedProjectChangesConfiguration } from \"../../project-definition/project-changes.ts\";\n\nexport const CHANGE_FLAG_PREFIX = \"vibe-check:change:\";\nexport const GIT_CHANGES_UNAVAILABLE_CODE = \"git-changes-unavailable\";\n\nexport type PreparedProjectChanges = Readonly<{\n readonly effectiveFlags: readonly string[];\n readonly projectChanges: ProjectChanges;\n}>;\n\n/** Prepares one configured Git change snapshot before Run flag selection. */\nexport function prepareProjectChanges(\n input: Readonly<{\n readonly callerFlags: readonly string[];\n readonly changes: NormalizedProjectChangesConfiguration;\n readonly projectRoot: string;\n }>\n): PreparedProjectChanges {\n const declaredFlags = declaredChangeFlags(input.changes);\n try {\n const paths = collectGitChangedPaths(input.projectRoot, input.changes.source.compareWith);\n const projectChanges = matchedProjectChanges(paths, input.changes);\n return Object.freeze({\n effectiveFlags: combineFlags(\n input.callerFlags,\n projectChanges.files.flatMap(({ flags }) => flags)\n ),\n projectChanges\n });\n } catch {\n return Object.freeze({\n effectiveFlags: combineFlags(input.callerFlags, declaredFlags),\n projectChanges: Object.freeze({\n ok: false,\n reason: Object.freeze({ code: GIT_CHANGES_UNAVAILABLE_CODE })\n })\n });\n }\n}\n\nfunction declaredChangeFlags(changes: NormalizedProjectChangesConfiguration): readonly string[] {\n return Object.freeze(\n Object.keys(changes.flags)\n .sort(compareText)\n .map((flagId) => `${CHANGE_FLAG_PREFIX}${flagId}`)\n );\n}\n\nfunction collectGitChangedPaths(projectRoot: string, compareWith: string): readonly string[] {\n const root = resolve(projectRoot);\n const repositoryRoot = gitText(root, [\"rev-parse\", \"--show-toplevel\"]);\n if (!isProjectRootInRepository(root, resolve(repositoryRoot))) {\n throw new Error(\"project root is outside the Git repository\");\n }\n\n const committed = gitNameStatus(root, [\n \"diff\",\n \"--relative\",\n \"--name-status\",\n \"-z\",\n \"--find-renames\",\n `${compareWith}...HEAD`\n ]);\n const staged = gitNameStatus(root, [\n \"diff\",\n \"--cached\",\n \"--relative\",\n \"--name-status\",\n \"-z\",\n \"--find-renames\"\n ]);\n const unstaged = gitNameStatus(root, [\n \"diff\",\n \"--relative\",\n \"--name-status\",\n \"-z\",\n \"--find-renames\"\n ]);\n const untracked = gitNulPaths(root, [\n \"ls-files\",\n \"--others\",\n \"--exclude-standard\",\n \"-z\",\n \"--\",\n \".\"\n ]);\n return Object.freeze(\n [\n ...new Set([...committed, ...staged, ...unstaged, ...untracked].map(normalizedChangedPath))\n ].sort(compareText)\n );\n}\n\nfunction isProjectRootInRepository(projectRoot: string, repositoryRoot: string): boolean {\n const fromRepository = relative(repositoryRoot, projectRoot);\n return (\n !isAbsolute(fromRepository) && fromRepository !== \"..\" && !fromRepository.startsWith(`..${sep}`)\n );\n}\n\nfunction gitText(cwd: string, args: readonly string[]): string {\n const text = gitOutput(cwd, args).trim();\n if (text.length === 0) throw new Error(\"Git command returned no text\");\n return text;\n}\n\nfunction gitOutput(cwd: string, args: readonly string[]): string {\n const result = execaSync(\"git\", args, {\n cwd,\n encoding: \"utf8\",\n reject: false,\n stripFinalNewline: false,\n windowsHide: true\n });\n if (result.failed || result.exitCode !== 0) throw new Error(\"Git command failed\");\n if (typeof result.stdout !== \"string\") throw new Error(\"Git command returned non-text output\");\n return result.stdout;\n}\n\nfunction gitNameStatus(cwd: string, args: readonly string[]): readonly string[] {\n return parseGitNameStatus(gitOutput(cwd, args));\n}\n\nfunction gitNulPaths(cwd: string, args: readonly string[]): readonly string[] {\n return gitOutput(cwd, args)\n .split(\"\\0\")\n .filter((path) => path.length > 0);\n}\n\n/** Parses Git's `--name-status -z` protocol without line or tab splitting. */\nfunction parseGitNameStatus(stdout: string): readonly string[] {\n const tokens = stdout.split(\"\\0\");\n if (tokens.at(-1) === \"\") tokens.pop();\n const paths: string[] = [];\n for (let index = 0; index < tokens.length;) {\n const entry = parseGitNameStatusEntry(tokens, index);\n paths.push(...entry.paths);\n index = entry.nextIndex;\n }\n return Object.freeze(paths);\n}\n\nfunction parseGitNameStatusEntry(\n tokens: readonly string[],\n statusIndex: number\n): Readonly<{ readonly nextIndex: number; readonly paths: readonly string[] }> {\n const status = tokens[statusIndex];\n if (status === undefined || !isNameStatus(status))\n throw new Error(\"invalid Git name-status output\");\n const pathCount = nameStatusPathCount(status);\n const paths = tokens.slice(statusIndex + 1, statusIndex + 1 + pathCount);\n if (paths.length !== pathCount || paths.some((path) => path.length === 0))\n throw new Error(\"missing Git changed path\");\n return Object.freeze({ nextIndex: statusIndex + 1 + pathCount, paths: Object.freeze(paths) });\n}\n\nfunction nameStatusPathCount(status: string): 1 | 2 {\n return status.startsWith(\"R\") || status.startsWith(\"C\") ? 2 : 1;\n}\n\nfunction isNameStatus(value: string): boolean {\n return /^(?:[ACDMRTUXB][0-9]*|[RC][0-9]+)$/u.test(value);\n}\n\nfunction normalizedChangedPath(path: string): string {\n if (!isNormalizedProjectRelativePath(path)) throw new Error(\"invalid Git project-relative path\");\n return path;\n}\n\nfunction matchedProjectChanges(\n paths: readonly string[],\n changes: NormalizedProjectChangesConfiguration\n): Extract<ProjectChanges, { readonly ok: true }> {\n const regions = Object.entries(changes.flags).sort(([left], [right]) => compareText(left, right));\n const files = paths.flatMap((path) => {\n const flags = regions.flatMap(([flagId, region]) =>\n matchesRegion(path, region) ? [`${CHANGE_FLAG_PREFIX}${flagId}`] : []\n );\n return flags.length === 0 ? [] : [Object.freeze({ flags: Object.freeze(flags), path })];\n });\n return Object.freeze({ ok: true, files: Object.freeze(files) });\n}\n\nfunction matchesRegion(\n path: string,\n region: NormalizedProjectChangesConfiguration[\"flags\"][string]\n): boolean {\n return matchesAnyConfigGlob(path, region.include) && !matchesAnyConfigGlob(path, region.exclude);\n}\n\nfunction combineFlags(...sets: readonly (readonly string[])[]): readonly string[] {\n return Object.freeze([...new Set(sets.flat())].sort(compareText));\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Handles one admitted Check's preparation boundary and ready callback handoff. */
|
|
2
|
+
import { checkIdentity } from "./execution-finalization.mjs";
|
|
3
|
+
import { recordSettledCheck } from "./execution-settlement.mjs";
|
|
4
|
+
import { prepareCheck } from "./preparation.mjs";
|
|
5
|
+
import { executeReadyCheck } from "./ready-check-execution.mjs";
|
|
6
|
+
export async function executeAdmittedCheck(input) {
|
|
7
|
+
observeAdmittedCheck(input);
|
|
8
|
+
const preparation = await prepareCheck({
|
|
9
|
+
check: input.check,
|
|
10
|
+
diagnosticLogger: input.diagnosticLogger,
|
|
11
|
+
project: input.project,
|
|
12
|
+
signal: input.signal
|
|
13
|
+
});
|
|
14
|
+
if (preparation.kind === "blocked") {
|
|
15
|
+
settleBlockedPreparation(input, preparation);
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return executeReadyCheck({ ...input, prepare: preparation });
|
|
19
|
+
}
|
|
20
|
+
function settleBlockedPreparation(state, prepare) {
|
|
21
|
+
const scope = state.session.openCheckScope(prepare.check.definition.checkId);
|
|
22
|
+
const outcome = scope.settleProduct(prepare.outcome);
|
|
23
|
+
recordSettledCheck({
|
|
24
|
+
check: checkIdentity(prepare.check),
|
|
25
|
+
durationMs: null,
|
|
26
|
+
messages: prepare.check.preparationMessages,
|
|
27
|
+
outcome,
|
|
28
|
+
phase: "preparation",
|
|
29
|
+
state
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** Diagnostic observation belongs to the invocation; it cannot revise admitted Task facts. */
|
|
33
|
+
function observeAdmittedCheck(input) {
|
|
34
|
+
try {
|
|
35
|
+
input.onAdmittedCheck?.(input.check);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Learned diagnostic output is best-effort and has no execution consequence.
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=admitted-check-execution.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admitted-check-execution.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/admitted-check-execution.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAKpF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAA4B,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAmC,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAe/D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAkC;IAC3E,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA0B,EAC1B,OAA0E;IAE1E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,kBAAkB,CAAC;QACjB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB;QAC3C,OAAO;QACP,KAAK,EAAE,aAAa;QACpB,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,8FAA8F;AAC9F,SAAS,oBAAoB,CAAC,KAAkC;IAC9D,IAAI,CAAC;QACH,KAAK,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;IAC/E,CAAC;AACH,CAAC","sourcesContent":["/** Handles one admitted Check's preparation boundary and ready callback handoff. */\n\nimport type { CheckProjectContext } from \"../../check/check.ts\";\nimport type { NormalizedCheck } from \"../../project-definition/project-definition.ts\";\nimport type { ResolvedInvocationPaths } from \"../invocation/paths.ts\";\nimport { checkIdentity } from \"./execution-finalization.ts\";\nimport { recordSettledCheck, type CheckExecutionState } from \"./execution-settlement.ts\";\nimport { prepareCheck, type CheckPreparationResolution } from \"./preparation.ts\";\nimport { executeReadyCheck } from \"./ready-check-execution.ts\";\n\nexport type CheckExecutionClock = Readonly<{ now(): number }>;\n\nexport type AdmittedCheckExecutionInput = CheckExecutionState &\n Readonly<{\n readonly check: NormalizedCheck;\n readonly clock: CheckExecutionClock;\n readonly onAdmittedCheck: ((check: NormalizedCheck) => void) | undefined;\n readonly invocationId: string;\n readonly paths: ResolvedInvocationPaths | undefined;\n readonly project: CheckProjectContext;\n readonly signal: AbortSignal;\n }>;\n\nexport async function executeAdmittedCheck(input: AdmittedCheckExecutionInput): Promise<boolean> {\n observeAdmittedCheck(input);\n const preparation = await prepareCheck({\n check: input.check,\n diagnosticLogger: input.diagnosticLogger,\n project: input.project,\n signal: input.signal\n });\n if (preparation.kind === \"blocked\") {\n settleBlockedPreparation(input, preparation);\n return false;\n }\n return executeReadyCheck({ ...input, prepare: preparation });\n}\n\nfunction settleBlockedPreparation(\n state: CheckExecutionState,\n prepare: Extract<CheckPreparationResolution, { readonly kind: \"blocked\" }>\n): void {\n const scope = state.session.openCheckScope(prepare.check.definition.checkId);\n const outcome = scope.settleProduct(prepare.outcome);\n recordSettledCheck({\n check: checkIdentity(prepare.check),\n durationMs: null,\n messages: prepare.check.preparationMessages,\n outcome,\n phase: \"preparation\",\n state\n });\n}\n\n/** Diagnostic observation belongs to the invocation; it cannot revise admitted Task facts. */\nfunction observeAdmittedCheck(input: AdmittedCheckExecutionInput): void {\n try {\n input.onAdmittedCheck?.(input.check);\n } catch {\n // Learned diagnostic output is best-effort and has no execution consequence.\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import { CoreInvariantFailure } from "../../check-settlement/session.mjs";
|
|
|
2
2
|
import { diagnosticTags } from "../diagnostic-logging/logger.mjs";
|
|
3
3
|
import { snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
4
4
|
import { invokeWithCapturedConsole } from "./console-capture.mjs";
|
|
5
|
+
import { diagnosticCallbackResult } from "./terminal-result.mjs";
|
|
5
6
|
const EMPTY_MESSAGES = Object.freeze([]);
|
|
6
7
|
/** Runs one trusted callback and closes its Check-owned reporter before return. */
|
|
7
8
|
export async function executeCheckCallback(input) {
|
|
@@ -20,7 +21,7 @@ export async function executeCheckCallback(input) {
|
|
|
20
21
|
records: reporter.records,
|
|
21
22
|
signal: input.signal
|
|
22
23
|
});
|
|
23
|
-
const invocation = await invokeWithCapturedConsole(() => input.check.
|
|
24
|
+
const invocation = await invokeWithCapturedConsole(() => input.check.execute(context));
|
|
24
25
|
consoleMessages = invocation.messages;
|
|
25
26
|
if (invocation.kind === "threw")
|
|
26
27
|
throw invocation.error;
|
|
@@ -29,7 +30,7 @@ export async function executeCheckCallback(input) {
|
|
|
29
30
|
input.diagnosticLogger?.observe({
|
|
30
31
|
event: "callback.cancelled",
|
|
31
32
|
tags: diagnosticTags(...checkTags, "CANCELLED"),
|
|
32
|
-
details: { result: callbackResult }
|
|
33
|
+
details: { result: diagnosticCallbackResult(callbackResult, input.check.handoff) }
|
|
33
34
|
});
|
|
34
35
|
}
|
|
35
36
|
result = input.signal.aborted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/callback.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAA0B,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,cAAc,EAAyB,MAAM,iCAAiC,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"callback.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/callback.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CheckDependencies,\n CheckExecutionContext,\n CheckMessage,\n CheckOutcome,\n CheckProjectContext\n} from \"../../check/check.ts\";\nimport type { NormalizedCheck } from \"../../project-definition/project-definition.ts\";\nimport { CoreInvariantFailure, type TrustedCheckScope } from \"../../check-settlement/session.ts\";\nimport { diagnosticTags, type DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\nimport { snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport { invokeWithCapturedConsole } from \"./console-capture.ts\";\nimport { diagnosticCallbackResult } from \"./terminal-result.ts\";\n\nconst EMPTY_MESSAGES: readonly CheckMessage[] = Object.freeze([]);\n\nexport type CallbackExecution = Readonly<\n | {\n /** Raw author result; Core owns its sole validation and canonicalization. */\n readonly source: \"author\";\n readonly result: unknown;\n readonly consoleMessages: readonly CheckMessage[];\n }\n | {\n /** Only callback containment may create a Product-controlled outcome. */\n readonly source: \"product\";\n readonly result: CheckOutcome;\n readonly consoleMessages: readonly CheckMessage[];\n }\n>;\n\ninterface CheckCallbackInput {\n readonly artifactDirectory: string | null;\n readonly check: NormalizedCheck;\n readonly dependencies: CheckDependencies;\n readonly diagnosticLogger?: DiagnosticLogger;\n readonly invocationId: string;\n readonly project: CheckProjectContext;\n readonly scope: TrustedCheckScope;\n readonly signal: AbortSignal;\n}\n\ninterface CheckReporterLifecycle {\n readonly records: CheckExecutionContext<object>[\"records\"];\n close(): void;\n}\n\n/** Runs one trusted callback and closes its Check-owned reporter before return. */\nexport async function executeCheckCallback(input: CheckCallbackInput): Promise<CallbackExecution> {\n const checkId = input.check.definition.checkId;\n const checkTags = diagnosticTags(`CHECK:${checkId}`, \"EXECUTION\");\n const reporter = createCheckReporter(input.scope, input.diagnosticLogger, checkTags, checkId);\n let result: CallbackExecution;\n let consoleMessages = EMPTY_MESSAGES;\n try {\n const context = Object.freeze({\n artifactDirectory: input.artifactDirectory,\n dependencies: input.dependencies,\n invocationId: input.invocationId,\n options: input.check.options,\n project: input.project,\n records: reporter.records,\n signal: input.signal\n });\n const invocation = await invokeWithCapturedConsole(() => input.check.execute(context));\n consoleMessages = invocation.messages;\n if (invocation.kind === \"threw\") throw invocation.error;\n const callbackResult = invocation.output;\n if (input.signal.aborted) {\n input.diagnosticLogger?.observe({\n event: \"callback.cancelled\",\n tags: diagnosticTags(...checkTags, \"CANCELLED\"),\n details: { result: diagnosticCallbackResult(callbackResult, input.check.handoff) }\n });\n }\n result = input.signal.aborted\n ? productResult(\"execution-cancelled\", consoleMessages)\n : Object.freeze({\n source: \"author\",\n result: callbackResult,\n consoleMessages\n });\n } catch (error) {\n if (error instanceof CoreInvariantFailure) throw error;\n input.diagnosticLogger?.observe({\n event: input.signal.aborted ? \"callback.cancelled\" : \"callback.threw\",\n tags: diagnosticTags(...checkTags, input.signal.aborted ? \"CANCELLED\" : \"THREW\"),\n details: { error }\n });\n result = productResult(\n input.signal.aborted ? \"execution-cancelled\" : \"execution-threw\",\n consoleMessages\n );\n } finally {\n reporter.close();\n }\n return result;\n}\n\nfunction createCheckReporter(\n scope: TrustedCheckScope,\n diagnosticLogger: DiagnosticLogger | undefined,\n checkTags: readonly string[],\n checkId: string\n): CheckReporterLifecycle {\n let isOpen = true;\n return Object.freeze({\n close: (): void => {\n isOpen = false;\n },\n records: Object.freeze({\n report: (identity: unknown, data: unknown): void => {\n if (!isOpen) throw new Error(\"Check record reporter is closed\");\n const result = scope.records.report(identity, data);\n diagnosticLogger?.observe({\n event: \"record.reported\",\n tags: diagnosticTags(...checkTags, \"RECORD\", result.toUpperCase()),\n details: recordDiagnosticDetails(checkId, identity, result)\n });\n }\n })\n });\n}\n\nfunction productResult(code: string, consoleMessages: readonly CheckMessage[]): CallbackExecution {\n return Object.freeze({\n consoleMessages,\n source: \"product\",\n result: Object.freeze({ status: \"unavailable\", reason: Object.freeze({ code }) })\n });\n}\n\nfunction recordDiagnosticDetails(\n checkId: string,\n identity: unknown,\n result: \"committed\" | \"rejected\"\n): Readonly<Record<string, unknown>> {\n const record = snapshotClosedRecord(identity);\n const recordId =\n record !== undefined &&\n Object.keys(record).length === 1 &&\n Object.hasOwn(record, \"id\") &&\n typeof record.id === \"string\"\n ? record.id\n : null;\n return result === \"committed\"\n ? Object.freeze({ checkId, recordId, result })\n : Object.freeze({ checkId, rejectionCategory: \"record-invalid-or-conflict\", result });\n}\n"]}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
|
+
import { getDefinedHandoffProviderIdentity } from "../../check/handoff-provider-identity.mjs";
|
|
2
|
+
import { snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
1
3
|
import { diagnosticTags } from "../diagnostic-logging/logger.mjs";
|
|
2
4
|
export function createCheckDependencies(input) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const result = readDirectRelation(input.session, input.directRelationCheckIds,
|
|
5
|
+
function get(dependency) {
|
|
6
|
+
if (dependency === null || typeof dependency !== "object") {
|
|
7
|
+
const result = readDirectRelation(input.session, input.directRelationCheckIds, dependency);
|
|
6
8
|
input.diagnosticLogger?.observe({
|
|
7
9
|
event: "dependency.read",
|
|
8
10
|
tags: diagnosticTags(`CHECK:${input.checkId}`, "EXECUTION", "DEPENDENCY-READ"),
|
|
9
|
-
details: dependencyReadDetails(
|
|
11
|
+
details: dependencyReadDetails(dependency, result)
|
|
10
12
|
});
|
|
11
13
|
return result;
|
|
12
|
-
}
|
|
14
|
+
}
|
|
15
|
+
const result = readDirectDependencyHandoff(input, dependency);
|
|
16
|
+
input.diagnosticLogger?.observe({
|
|
17
|
+
event: "dependency.read",
|
|
18
|
+
tags: diagnosticTags(`CHECK:${input.checkId}`, "EXECUTION", "DEPENDENCY-READ"),
|
|
19
|
+
details: handoffDependencyReadDetails(dependency, result)
|
|
20
|
+
});
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
return Object.freeze({
|
|
24
|
+
get,
|
|
13
25
|
list: () => {
|
|
14
26
|
const observations = listDirectRelationObservations(input.session, input.directRelationCheckIds);
|
|
15
27
|
input.diagnosticLogger?.observe({
|
|
@@ -21,6 +33,54 @@ export function createCheckDependencies(input) {
|
|
|
21
33
|
}
|
|
22
34
|
});
|
|
23
35
|
}
|
|
36
|
+
function readDirectDependencyHandoff(input, provider) {
|
|
37
|
+
const providerIdentity = handoffProviderIdentity(provider);
|
|
38
|
+
if (providerIdentity === undefined ||
|
|
39
|
+
!input.directDependsOnCheckIds.includes(providerIdentity.checkId)) {
|
|
40
|
+
return handoffDependencyNotDeclared(providerIdentity?.checkId ?? handoffCheckId(provider));
|
|
41
|
+
}
|
|
42
|
+
const settledHandoff = input.handoffsByCheckId.get(providerIdentity.checkId);
|
|
43
|
+
const outcome = input.session.readSettledCheckOutcome(providerIdentity.checkId);
|
|
44
|
+
if (settledHandoff === undefined ||
|
|
45
|
+
settledHandoff.identity !== providerIdentity.identity ||
|
|
46
|
+
outcome.status !== "passed") {
|
|
47
|
+
return handoffUnavailable(providerIdentity.checkId);
|
|
48
|
+
}
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
ok: true,
|
|
51
|
+
checkId: providerIdentity.checkId,
|
|
52
|
+
status: "passed",
|
|
53
|
+
data: outcome.data,
|
|
54
|
+
handoff: settledHandoff.value
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function handoffProviderIdentity(provider) {
|
|
58
|
+
const identity = getDefinedHandoffProviderIdentity(provider);
|
|
59
|
+
const record = snapshotClosedRecord(provider);
|
|
60
|
+
if (identity === undefined ||
|
|
61
|
+
record === undefined ||
|
|
62
|
+
typeof record.checkId !== "string" ||
|
|
63
|
+
record.handoff !== true) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return Object.freeze({ checkId: record.checkId, identity });
|
|
67
|
+
}
|
|
68
|
+
function handoffCheckId(provider) {
|
|
69
|
+
const record = snapshotClosedRecord(provider);
|
|
70
|
+
return record !== undefined && typeof record.checkId === "string" ? record.checkId : "";
|
|
71
|
+
}
|
|
72
|
+
function handoffDependencyNotDeclared(checkId) {
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
ok: false,
|
|
75
|
+
error: Object.freeze({ code: "dependency-not-declared", checkId })
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function handoffUnavailable(checkId) {
|
|
79
|
+
return Object.freeze({
|
|
80
|
+
ok: false,
|
|
81
|
+
error: Object.freeze({ code: "upstream-handoff-unavailable", checkId })
|
|
82
|
+
});
|
|
83
|
+
}
|
|
24
84
|
function listDirectRelationObservations(session, directRelationCheckIds) {
|
|
25
85
|
return Object.freeze(directRelationCheckIds.map((checkId) => Object.freeze({ checkId, outcome: session.readSettledCheckOutcome(checkId) })));
|
|
26
86
|
}
|
|
@@ -41,6 +101,21 @@ function dependencyReadDetails(requestedCheckId, result) {
|
|
|
41
101
|
status: result.status
|
|
42
102
|
});
|
|
43
103
|
}
|
|
104
|
+
function handoffDependencyReadDetails(requestedProvider, result) {
|
|
105
|
+
if (!result.ok) {
|
|
106
|
+
return Object.freeze({
|
|
107
|
+
error: result.error,
|
|
108
|
+
ok: false,
|
|
109
|
+
requestedCheckId: handoffCheckId(requestedProvider)
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return Object.freeze({
|
|
113
|
+
hasData: true,
|
|
114
|
+
ok: true,
|
|
115
|
+
producer: result.checkId,
|
|
116
|
+
status: result.status
|
|
117
|
+
});
|
|
118
|
+
}
|
|
44
119
|
function readDirectRelation(session, directRelationCheckIds, checkId) {
|
|
45
120
|
if (typeof checkId !== "string" || !directRelationCheckIds.includes(checkId)) {
|
|
46
121
|
return dependencyNotDeclared(checkId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CheckDependencies,\n CheckOutcome,\n DependencyObservation,\n DependencyReadResult\n} from \"../../check/check.ts\";\nimport type { CoreCheckSession } from \"../../check-settlement/session.ts\";\nimport { diagnosticTags, type DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\n\nexport function createCheckDependencies(\n input: Readonly<{\n readonly checkId: string;\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly directRelationCheckIds: readonly string[];\n readonly session: CoreCheckSession;\n }>\n): CheckDependencies {\n return Object.freeze({\n get: (dependencyId: string): DependencyReadResult => {\n const result = readDirectRelation(input.session, input.directRelationCheckIds, dependencyId);\n input.diagnosticLogger?.observe({\n event: \"dependency.read\",\n tags: diagnosticTags(`CHECK:${input.checkId}`, \"EXECUTION\", \"DEPENDENCY-READ\"),\n details: dependencyReadDetails(dependencyId, result)\n });\n return result;\n },\n list: (): readonly DependencyObservation[] => {\n const observations = listDirectRelationObservations(\n input.session,\n input.directRelationCheckIds\n );\n input.diagnosticLogger?.observe({\n event: \"dependency.list\",\n tags: diagnosticTags(`CHECK:${input.checkId}`, \"EXECUTION\", \"DEPENDENCY-LIST\"),\n details: directRelationListDetails(observations)\n });\n return observations;\n }\n });\n}\n\nfunction listDirectRelationObservations(\n session: CoreCheckSession,\n directRelationCheckIds: readonly string[]\n): readonly DependencyObservation[] {\n return Object.freeze(\n directRelationCheckIds.map((checkId) =>\n Object.freeze({ checkId, outcome: session.readSettledCheckOutcome(checkId) })\n )\n );\n}\n\nfunction directRelationListDetails(\n observations: readonly DependencyObservation[]\n): Readonly<Record<string, unknown>> {\n return Object.freeze({\n dependencyIds: Object.freeze(observations.map(({ checkId }) => checkId)),\n count: observations.length\n });\n}\n\nfunction dependencyReadDetails(\n requestedCheckId: unknown,\n result: DependencyReadResult\n): Readonly<Record<string, unknown>> {\n if (!result.ok) {\n return Object.freeze({ error: result.error, ok: false, requestedCheckId });\n }\n return Object.freeze({\n hasData: true,\n ok: true,\n producer: result.checkId,\n status: result.status\n });\n}\n\nfunction readDirectRelation(\n session: CoreCheckSession,\n directRelationCheckIds: readonly string[],\n checkId: string\n): DependencyReadResult {\n if (typeof checkId !== \"string\" || !directRelationCheckIds.includes(checkId)) {\n return dependencyNotDeclared(checkId);\n }\n return dependencyReadResult(checkId, session.readSettledCheckOutcome(checkId));\n}\n\nfunction dependencyReadResult(checkId: string, outcome: CheckOutcome): DependencyReadResult {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n return Object.freeze({ ok: true, checkId, status: outcome.status, data: outcome.data });\n }\n return Object.freeze({\n ok: false,\n error: Object.freeze({ code: \"upstream-data-unavailable\", checkId, status: outcome.status })\n });\n}\n\nfunction dependencyNotDeclared(checkId: unknown): DependencyReadResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({\n code: \"dependency-not-declared\",\n checkId: typeof checkId === \"string\" ? checkId : \"\"\n })\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dependencies.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CheckHandoffProvider,\n CheckDependencies,\n CheckOutcome,\n DependencyHandoffReadResult,\n DependencyObservation,\n DependencyReadResult\n} from \"../../check/check.ts\";\nimport {\n getDefinedHandoffProviderIdentity,\n type HandoffProviderIdentity\n} from \"../../check/handoff-provider-identity.ts\";\nimport type { CoreCheckSession } from \"../../check-settlement/session.ts\";\nimport { snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport { diagnosticTags, type DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\nimport type { ParsedCheckTerminalHandoff } from \"./terminal-result.ts\";\n\ntype RuntimeDependencyHandoffReadResult = DependencyHandoffReadResult<string, object>;\n\nexport function createCheckDependencies(\n input: Readonly<{\n readonly checkId: string;\n readonly directDependsOnCheckIds: readonly string[];\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly directRelationCheckIds: readonly string[];\n readonly handoffsByCheckId: ReadonlyMap<string, ParsedCheckTerminalHandoff>;\n readonly session: CoreCheckSession;\n }>\n): CheckDependencies {\n function get<Id extends string, Handoff extends object>(\n dependency: CheckHandoffProvider<Id, Handoff>\n ): DependencyHandoffReadResult<Id, Handoff>;\n function get(dependency: string): DependencyReadResult;\n function get(dependency: unknown): DependencyReadResult | RuntimeDependencyHandoffReadResult;\n function get(dependency: unknown): DependencyReadResult | RuntimeDependencyHandoffReadResult {\n if (dependency === null || typeof dependency !== \"object\") {\n const result = readDirectRelation(input.session, input.directRelationCheckIds, dependency);\n input.diagnosticLogger?.observe({\n event: \"dependency.read\",\n tags: diagnosticTags(`CHECK:${input.checkId}`, \"EXECUTION\", \"DEPENDENCY-READ\"),\n details: dependencyReadDetails(dependency, result)\n });\n return result;\n }\n const result = readDirectDependencyHandoff(input, dependency);\n input.diagnosticLogger?.observe({\n event: \"dependency.read\",\n tags: diagnosticTags(`CHECK:${input.checkId}`, \"EXECUTION\", \"DEPENDENCY-READ\"),\n details: handoffDependencyReadDetails(dependency, result)\n });\n return result;\n }\n return Object.freeze({\n get,\n list: (): readonly DependencyObservation[] => {\n const observations = listDirectRelationObservations(\n input.session,\n input.directRelationCheckIds\n );\n input.diagnosticLogger?.observe({\n event: \"dependency.list\",\n tags: diagnosticTags(`CHECK:${input.checkId}`, \"EXECUTION\", \"DEPENDENCY-LIST\"),\n details: directRelationListDetails(observations)\n });\n return observations;\n }\n });\n}\n\nfunction readDirectDependencyHandoff(\n input: Readonly<{\n readonly directDependsOnCheckIds: readonly string[];\n readonly handoffsByCheckId: ReadonlyMap<string, ParsedCheckTerminalHandoff>;\n readonly session: CoreCheckSession;\n }>,\n provider: unknown\n): RuntimeDependencyHandoffReadResult {\n const providerIdentity = handoffProviderIdentity(provider);\n if (\n providerIdentity === undefined ||\n !input.directDependsOnCheckIds.includes(providerIdentity.checkId)\n ) {\n return handoffDependencyNotDeclared(providerIdentity?.checkId ?? handoffCheckId(provider));\n }\n const settledHandoff = input.handoffsByCheckId.get(providerIdentity.checkId);\n const outcome = input.session.readSettledCheckOutcome(providerIdentity.checkId);\n if (\n settledHandoff === undefined ||\n settledHandoff.identity !== providerIdentity.identity ||\n outcome.status !== \"passed\"\n ) {\n return handoffUnavailable(providerIdentity.checkId);\n }\n return Object.freeze({\n ok: true,\n checkId: providerIdentity.checkId,\n status: \"passed\",\n data: outcome.data,\n handoff: settledHandoff.value\n });\n}\n\nfunction handoffProviderIdentity(\n provider: unknown\n): Readonly<{ readonly checkId: string; readonly identity: HandoffProviderIdentity }> | undefined {\n const identity = getDefinedHandoffProviderIdentity(provider);\n const record = snapshotClosedRecord(provider);\n if (\n identity === undefined ||\n record === undefined ||\n typeof record.checkId !== \"string\" ||\n record.handoff !== true\n ) {\n return undefined;\n }\n return Object.freeze({ checkId: record.checkId, identity });\n}\n\nfunction handoffCheckId(provider: unknown): string {\n const record = snapshotClosedRecord(provider);\n return record !== undefined && typeof record.checkId === \"string\" ? record.checkId : \"\";\n}\n\nfunction handoffDependencyNotDeclared(checkId: string): RuntimeDependencyHandoffReadResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({ code: \"dependency-not-declared\", checkId })\n });\n}\n\nfunction handoffUnavailable(checkId: string): RuntimeDependencyHandoffReadResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({ code: \"upstream-handoff-unavailable\", checkId })\n });\n}\n\nfunction listDirectRelationObservations(\n session: CoreCheckSession,\n directRelationCheckIds: readonly string[]\n): readonly DependencyObservation[] {\n return Object.freeze(\n directRelationCheckIds.map((checkId) =>\n Object.freeze({ checkId, outcome: session.readSettledCheckOutcome(checkId) })\n )\n );\n}\n\nfunction directRelationListDetails(\n observations: readonly DependencyObservation[]\n): Readonly<Record<string, unknown>> {\n return Object.freeze({\n dependencyIds: Object.freeze(observations.map(({ checkId }) => checkId)),\n count: observations.length\n });\n}\n\nfunction dependencyReadDetails(\n requestedCheckId: unknown,\n result: DependencyReadResult\n): Readonly<Record<string, unknown>> {\n if (!result.ok) {\n return Object.freeze({ error: result.error, ok: false, requestedCheckId });\n }\n return Object.freeze({\n hasData: true,\n ok: true,\n producer: result.checkId,\n status: result.status\n });\n}\n\nfunction handoffDependencyReadDetails(\n requestedProvider: unknown,\n result: RuntimeDependencyHandoffReadResult\n): Readonly<Record<string, unknown>> {\n if (!result.ok) {\n return Object.freeze({\n error: result.error,\n ok: false,\n requestedCheckId: handoffCheckId(requestedProvider)\n });\n }\n return Object.freeze({\n hasData: true,\n ok: true,\n producer: result.checkId,\n status: result.status\n });\n}\n\nfunction readDirectRelation(\n session: CoreCheckSession,\n directRelationCheckIds: readonly string[],\n checkId: unknown\n): DependencyReadResult {\n if (typeof checkId !== \"string\" || !directRelationCheckIds.includes(checkId)) {\n return dependencyNotDeclared(checkId);\n }\n return dependencyReadResult(checkId, session.readSettledCheckOutcome(checkId));\n}\n\nfunction dependencyReadResult(checkId: string, outcome: CheckOutcome): DependencyReadResult {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n return Object.freeze({ ok: true, checkId, status: outcome.status, data: outcome.data });\n }\n return Object.freeze({\n ok: false,\n error: Object.freeze({ code: \"upstream-data-unavailable\", checkId, status: outcome.status })\n });\n}\n\nfunction dependencyNotDeclared(checkId: unknown): DependencyReadResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({\n code: \"dependency-not-declared\",\n checkId: typeof checkId === \"string\" ? checkId : \"\"\n })\n });\n}\n"]}
|
|
@@ -5,17 +5,19 @@ export function closeResolvedChecks(input) {
|
|
|
5
5
|
try {
|
|
6
6
|
assertNoTaskEngineFailures(input.graphRun.settlements);
|
|
7
7
|
if (input.graphRun.admissionPolicyFault !== undefined) {
|
|
8
|
+
const terminalSchedulerMeasurement = input.graphRun.terminalMeasurement;
|
|
8
9
|
return closeAdmissionPolicyFailed({
|
|
9
10
|
normalizedChecks: input.allChecks,
|
|
10
11
|
state: input.state,
|
|
11
|
-
terminalSchedulerMeasurement:
|
|
12
|
+
...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })
|
|
12
13
|
});
|
|
13
14
|
}
|
|
14
15
|
if (input.graphRun.cancelled) {
|
|
16
|
+
const terminalSchedulerMeasurement = input.graphRun.terminalMeasurement;
|
|
15
17
|
return closeCancelledExecution({
|
|
16
18
|
normalizedChecks: input.allChecks,
|
|
17
19
|
state: input.state,
|
|
18
|
-
terminalSchedulerMeasurement:
|
|
20
|
+
...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })
|
|
19
21
|
});
|
|
20
22
|
}
|
|
21
23
|
assertEveryCheckClosed(input.allChecks, input.graphRun.settlements);
|
|
@@ -41,7 +43,7 @@ export function checkIdentity(check) {
|
|
|
41
43
|
return Object.freeze({
|
|
42
44
|
checkId: check.definition.checkId,
|
|
43
45
|
displayName: check.definition.displayName,
|
|
44
|
-
|
|
46
|
+
omitQuietPassedRow: check.omitQuietPassedRow
|
|
45
47
|
});
|
|
46
48
|
}
|
|
47
49
|
export function trustedFailure(error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-finalization.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/execution-finalization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckMessage } from \"../../check/check.ts\";\nimport type { CoreSnapshot } from \"../../check-settlement/facts.ts\";\nimport type {\n NormalizedCheck,\n SchedulerMeasurementContext\n} from \"../../project-definition/project-definition.ts\";\nimport type { SettledTask } from \"../task-scheduler/scheduler.ts\";\nimport type { CheckDuration, CheckRunMessage } from \"../result.ts\";\nimport {\n CheckExecutionInvariantFailure,\n recordSettledCheck,\n type CheckIdentity,\n type CheckExecutionState,\n type SettledCheckFacts\n} from \"./execution-settlement.ts\";\nimport type { ResolvedCheckExecution } from \"./resolved-execution-result.ts\";\n\nconst EMPTY_MESSAGES: readonly CheckMessage[] = Object.freeze([]);\n\n/** Closes the task graph, lifecycle facts, and canonical Check summaries as one Run boundary. */\nexport function closeResolvedChecks(\n input: Readonly<{\n readonly allChecks: readonly NormalizedCheck[];\n readonly effectiveCheckIds: readonly string[];\n readonly graphRun: Awaited<\n ReturnType<typeof import(\"../task-scheduler/scheduler.ts\").runTaskGraph<boolean>>\n >;\n readonly state: CheckExecutionState;\n }>\n): ResolvedCheckExecution {\n try {\n assertNoTaskEngineFailures(input.graphRun.settlements);\n if (input.graphRun.admissionPolicyFault !== undefined) {\n return closeAdmissionPolicyFailed({\n normalizedChecks: input.allChecks,\n state: input.state,\n terminalSchedulerMeasurement: input.graphRun.terminalMeasurement\n });\n }\n if (input.graphRun.cancelled) {\n return closeCancelledExecution({\n normalizedChecks: input.allChecks,\n state: input.state,\n terminalSchedulerMeasurement: input.graphRun.terminalMeasurement\n });\n }\n assertEveryCheckClosed(input.allChecks, input.graphRun.settlements);\n return completedResolvedExecution(\n input.effectiveCheckIds,\n input.state.session.freeze(),\n input.state,\n input.graphRun.terminalMeasurement\n );\n } catch (error) {\n throw trustedFailure(error);\n }\n}\n\nexport function closeAdmissionPolicyFailed(\n input: Readonly<{\n readonly normalizedChecks: readonly NormalizedCheck[];\n readonly state: CheckExecutionState;\n readonly terminalSchedulerMeasurement?: SchedulerMeasurementContext;\n }>\n): ResolvedCheckExecution {\n input.state.session.closeUnresolvedAsCancelled();\n const snapshot = input.state.session.freeze();\n settleUnstartedCancelledChecks({ ...input, snapshot });\n return resolvedExecution(\n \"admission-policy-failed\",\n snapshot,\n input.state,\n input.terminalSchedulerMeasurement\n );\n}\n\nexport function closeCancelledExecution(\n input: Readonly<{\n readonly normalizedChecks: readonly NormalizedCheck[];\n readonly state: CheckExecutionState;\n readonly terminalSchedulerMeasurement?: SchedulerMeasurementContext;\n }>\n): ResolvedCheckExecution {\n input.state.session.closeUnresolvedAsCancelled();\n const snapshot = input.state.session.freeze();\n settleUnstartedCancelledChecks({ ...input, snapshot });\n return resolvedExecution(\"cancelled\", snapshot, input.state, input.terminalSchedulerMeasurement);\n}\n\nexport function checkIdentity(\n check: Pick<NormalizedCheck, \"definition\" | \"visibility\">\n): CheckIdentity {\n return Object.freeze({\n checkId: check.definition.checkId,\n displayName: check.definition.displayName,\n visibility: check.visibility\n });\n}\n\nexport function trustedFailure(error: unknown): CheckExecutionInvariantFailure {\n return error instanceof CheckExecutionInvariantFailure\n ? error\n : new CheckExecutionInvariantFailure(\n \"Check execution adapter escaped its contained failure boundary\"\n );\n}\n\nfunction resolvedExecution(\n kind: Exclude<ResolvedCheckExecution[\"kind\"], \"completed\">,\n snapshot: CoreSnapshot,\n state: CheckExecutionState,\n terminalSchedulerMeasurement: SchedulerMeasurementContext | undefined\n): ResolvedCheckExecution {\n return Object.freeze({\n kind,\n ...checkRunSummaries(snapshot, state.settledFactsByCheckId),\n snapshot,\n ...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })\n });\n}\n\nfunction completedResolvedExecution(\n effectiveCheckIds: readonly string[],\n snapshot: CoreSnapshot,\n state: CheckExecutionState,\n terminalSchedulerMeasurement: SchedulerMeasurementContext | undefined\n): Extract<ResolvedCheckExecution, { readonly kind: \"completed\" }> {\n return Object.freeze({\n kind: \"completed\",\n ...checkRunSummaries(snapshot, state.settledFactsByCheckId),\n effectiveCheckIds,\n snapshot,\n ...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })\n });\n}\n\nfunction settleUnstartedCancelledChecks(\n input: Readonly<{\n readonly normalizedChecks: readonly NormalizedCheck[];\n readonly snapshot: CoreSnapshot;\n readonly state: CheckExecutionState;\n }>\n): void {\n const normalizedByCheckId = new Map(\n input.normalizedChecks.map((check) => [check.definition.checkId, check])\n );\n for (const check of input.snapshot.checks) {\n if (input.state.settledFactsByCheckId.has(check.checkId)) continue;\n const normalized = normalizedByCheckId.get(check.checkId);\n if (normalized === undefined) {\n throw new CheckExecutionInvariantFailure(\n \"Cancelled Check does not identify a normalized Check\"\n );\n }\n recordSettledCheck({\n check: checkIdentity(normalized),\n durationMs: null,\n messages: EMPTY_MESSAGES,\n outcome: check.outcome,\n phase: \"execution\",\n state: input.state\n });\n }\n}\n\nfunction checkRunSummaries(\n snapshot: CoreSnapshot,\n settledFactsByCheckId: ReadonlyMap<string, SettledCheckFacts>\n): Readonly<{\n readonly checkDurations: readonly CheckDuration[];\n readonly checkMessages: readonly CheckRunMessage[];\n}> {\n if (snapshot.checks.length !== settledFactsByCheckId.size) {\n throw new CheckExecutionInvariantFailure(\"Check settled facts do not close every Check\");\n }\n const checkDurations: CheckDuration[] = [];\n const messages: CheckRunMessage[] = [];\n for (const check of snapshot.checks) {\n const settledFacts = settledFactsByCheckId.get(check.checkId);\n if (settledFacts === undefined) {\n throw new CheckExecutionInvariantFailure(\"Check settled facts are missing a Check\");\n }\n checkDurations.push(\n Object.freeze({\n checkId: check.checkId,\n durationMs: settledFacts.durationMs\n })\n );\n messages.push(\n ...settledFacts.messages.map((message) =>\n Object.freeze({ checkId: check.checkId, ...message })\n )\n );\n }\n return Object.freeze({\n checkDurations: Object.freeze(checkDurations),\n checkMessages: messages.length === 0 ? Object.freeze([]) : Object.freeze(messages)\n });\n}\n\n/** Closes one Scheduler-blocked Check before a terminal observer may start. */\nexport function settleBlockedDependent(\n input: Readonly<{\n readonly check: NormalizedCheck;\n readonly dependencyIds: readonly string[];\n readonly state: CheckExecutionState;\n }>\n): void {\n const scope = input.state.session.openCheckScope(input.check.definition.checkId);\n const outcome = scope.settleProduct(\n Object.freeze({\n status: \"unavailable\" as const,\n reason: Object.freeze({\n code: \"dependency-not-passed\",\n checkIds: Object.freeze([...input.dependencyIds])\n })\n })\n );\n recordSettledCheck({\n check: checkIdentity(input.check),\n durationMs: null,\n messages: EMPTY_MESSAGES,\n outcome,\n phase: \"dependency\",\n state: input.state\n });\n}\n\nfunction assertNoTaskEngineFailures(settlements: readonly SettledTask<boolean>[]): void {\n for (const settled of settlements) {\n if (settled.settlement.kind === \"failed\") {\n throw new CheckExecutionInvariantFailure(\n \"Task engine received an unexpected execution failure\"\n );\n }\n }\n}\n\nfunction assertEveryCheckClosed(\n checks: readonly NormalizedCheck[],\n settlements: readonly SettledTask<boolean>[]\n): void {\n if (settlements.some((settled) => settled.settlement.kind === \"cancelled-before-start\")) {\n throw new CheckExecutionInvariantFailure(\"Non-cancelled Task graph left a Check unstarted\");\n }\n if (checks.length !== settlements.length) {\n throw new CheckExecutionInvariantFailure(\n \"Task graph does not have one Task per executable Check\"\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"execution-finalization.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/execution-finalization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckMessage } from \"../../check/check.ts\";\nimport type { CoreSnapshot } from \"../../check-settlement/facts.ts\";\nimport type {\n NormalizedCheck,\n SchedulerMeasurementContext\n} from \"../../project-definition/project-definition.ts\";\nimport type { SettledTask } from \"../task-scheduler/scheduler.ts\";\nimport type { CheckDuration, CheckRunMessage } from \"../result.ts\";\nimport {\n CheckExecutionInvariantFailure,\n recordSettledCheck,\n type CheckIdentity,\n type CheckExecutionState,\n type SettledCheckFacts\n} from \"./execution-settlement.ts\";\nimport type { ResolvedCheckExecution } from \"./resolved-execution-result.ts\";\n\nconst EMPTY_MESSAGES: readonly CheckMessage[] = Object.freeze([]);\n\n/** Closes the task graph, lifecycle facts, and canonical Check summaries as one Run boundary. */\nexport function closeResolvedChecks(\n input: Readonly<{\n readonly allChecks: readonly NormalizedCheck[];\n readonly effectiveCheckIds: readonly string[];\n readonly graphRun: Awaited<\n ReturnType<typeof import(\"../task-scheduler/scheduler.ts\").runTaskGraph<boolean>>\n >;\n readonly state: CheckExecutionState;\n }>\n): ResolvedCheckExecution {\n try {\n assertNoTaskEngineFailures(input.graphRun.settlements);\n if (input.graphRun.admissionPolicyFault !== undefined) {\n const terminalSchedulerMeasurement = input.graphRun.terminalMeasurement;\n return closeAdmissionPolicyFailed({\n normalizedChecks: input.allChecks,\n state: input.state,\n ...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })\n });\n }\n if (input.graphRun.cancelled) {\n const terminalSchedulerMeasurement = input.graphRun.terminalMeasurement;\n return closeCancelledExecution({\n normalizedChecks: input.allChecks,\n state: input.state,\n ...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })\n });\n }\n assertEveryCheckClosed(input.allChecks, input.graphRun.settlements);\n return completedResolvedExecution(\n input.effectiveCheckIds,\n input.state.session.freeze(),\n input.state,\n input.graphRun.terminalMeasurement\n );\n } catch (error) {\n throw trustedFailure(error);\n }\n}\n\nexport function closeAdmissionPolicyFailed(\n input: Readonly<{\n readonly normalizedChecks: readonly NormalizedCheck[];\n readonly state: CheckExecutionState;\n readonly terminalSchedulerMeasurement?: SchedulerMeasurementContext;\n }>\n): ResolvedCheckExecution {\n input.state.session.closeUnresolvedAsCancelled();\n const snapshot = input.state.session.freeze();\n settleUnstartedCancelledChecks({ ...input, snapshot });\n return resolvedExecution(\n \"admission-policy-failed\",\n snapshot,\n input.state,\n input.terminalSchedulerMeasurement\n );\n}\n\nexport function closeCancelledExecution(\n input: Readonly<{\n readonly normalizedChecks: readonly NormalizedCheck[];\n readonly state: CheckExecutionState;\n readonly terminalSchedulerMeasurement?: SchedulerMeasurementContext;\n }>\n): ResolvedCheckExecution {\n input.state.session.closeUnresolvedAsCancelled();\n const snapshot = input.state.session.freeze();\n settleUnstartedCancelledChecks({ ...input, snapshot });\n return resolvedExecution(\"cancelled\", snapshot, input.state, input.terminalSchedulerMeasurement);\n}\n\nexport function checkIdentity(\n check: Pick<NormalizedCheck, \"definition\" | \"omitQuietPassedRow\">\n): CheckIdentity {\n return Object.freeze({\n checkId: check.definition.checkId,\n displayName: check.definition.displayName,\n omitQuietPassedRow: check.omitQuietPassedRow\n });\n}\n\nexport function trustedFailure(error: unknown): CheckExecutionInvariantFailure {\n return error instanceof CheckExecutionInvariantFailure\n ? error\n : new CheckExecutionInvariantFailure(\n \"Check execution adapter escaped its contained failure boundary\"\n );\n}\n\nfunction resolvedExecution(\n kind: Exclude<ResolvedCheckExecution[\"kind\"], \"completed\">,\n snapshot: CoreSnapshot,\n state: CheckExecutionState,\n terminalSchedulerMeasurement: SchedulerMeasurementContext | undefined\n): ResolvedCheckExecution {\n return Object.freeze({\n kind,\n ...checkRunSummaries(snapshot, state.settledFactsByCheckId),\n snapshot,\n ...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })\n });\n}\n\nfunction completedResolvedExecution(\n effectiveCheckIds: readonly string[],\n snapshot: CoreSnapshot,\n state: CheckExecutionState,\n terminalSchedulerMeasurement: SchedulerMeasurementContext | undefined\n): Extract<ResolvedCheckExecution, { readonly kind: \"completed\" }> {\n return Object.freeze({\n kind: \"completed\",\n ...checkRunSummaries(snapshot, state.settledFactsByCheckId),\n effectiveCheckIds,\n snapshot,\n ...(terminalSchedulerMeasurement === undefined ? {} : { terminalSchedulerMeasurement })\n });\n}\n\nfunction settleUnstartedCancelledChecks(\n input: Readonly<{\n readonly normalizedChecks: readonly NormalizedCheck[];\n readonly snapshot: CoreSnapshot;\n readonly state: CheckExecutionState;\n }>\n): void {\n const normalizedByCheckId = new Map(\n input.normalizedChecks.map((check) => [check.definition.checkId, check])\n );\n for (const check of input.snapshot.checks) {\n if (input.state.settledFactsByCheckId.has(check.checkId)) continue;\n const normalized = normalizedByCheckId.get(check.checkId);\n if (normalized === undefined) {\n throw new CheckExecutionInvariantFailure(\n \"Cancelled Check does not identify a normalized Check\"\n );\n }\n recordSettledCheck({\n check: checkIdentity(normalized),\n durationMs: null,\n messages: EMPTY_MESSAGES,\n outcome: check.outcome,\n phase: \"execution\",\n state: input.state\n });\n }\n}\n\nfunction checkRunSummaries(\n snapshot: CoreSnapshot,\n settledFactsByCheckId: ReadonlyMap<string, SettledCheckFacts>\n): Readonly<{\n readonly checkDurations: readonly CheckDuration[];\n readonly checkMessages: readonly CheckRunMessage[];\n}> {\n if (snapshot.checks.length !== settledFactsByCheckId.size) {\n throw new CheckExecutionInvariantFailure(\"Check settled facts do not close every Check\");\n }\n const checkDurations: CheckDuration[] = [];\n const messages: CheckRunMessage[] = [];\n for (const check of snapshot.checks) {\n const settledFacts = settledFactsByCheckId.get(check.checkId);\n if (settledFacts === undefined) {\n throw new CheckExecutionInvariantFailure(\"Check settled facts are missing a Check\");\n }\n checkDurations.push(\n Object.freeze({\n checkId: check.checkId,\n durationMs: settledFacts.durationMs\n })\n );\n messages.push(\n ...settledFacts.messages.map((message) =>\n Object.freeze({ checkId: check.checkId, ...message })\n )\n );\n }\n return Object.freeze({\n checkDurations: Object.freeze(checkDurations),\n checkMessages: messages.length === 0 ? Object.freeze([]) : Object.freeze(messages)\n });\n}\n\n/** Closes one Scheduler-blocked Check before a terminal observer may start. */\nexport function settleBlockedDependent(\n input: Readonly<{\n readonly check: NormalizedCheck;\n readonly dependencyIds: readonly string[];\n readonly state: CheckExecutionState;\n }>\n): void {\n const scope = input.state.session.openCheckScope(input.check.definition.checkId);\n const outcome = scope.settleProduct(\n Object.freeze({\n status: \"unavailable\" as const,\n reason: Object.freeze({\n code: \"dependency-not-passed\",\n checkIds: Object.freeze([...input.dependencyIds])\n })\n })\n );\n recordSettledCheck({\n check: checkIdentity(input.check),\n durationMs: null,\n messages: EMPTY_MESSAGES,\n outcome,\n phase: \"dependency\",\n state: input.state\n });\n}\n\nfunction assertNoTaskEngineFailures(settlements: readonly SettledTask<boolean>[]): void {\n for (const settled of settlements) {\n if (settled.settlement.kind === \"failed\") {\n throw new CheckExecutionInvariantFailure(\n \"Task engine received an unexpected execution failure\"\n );\n }\n }\n}\n\nfunction assertEveryCheckClosed(\n checks: readonly NormalizedCheck[],\n settlements: readonly SettledTask<boolean>[]\n): void {\n if (settlements.some((settled) => settled.settlement.kind === \"cancelled-before-start\")) {\n throw new CheckExecutionInvariantFailure(\"Non-cancelled Task graph left a Check unstarted\");\n }\n if (checks.length !== settlements.length) {\n throw new CheckExecutionInvariantFailure(\n \"Task graph does not have one Task per executable Check\"\n );\n }\n}\n"]}
|