@zxyycom/vibe-check 0.0.1 → 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 +79 -75
- 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 +2 -2
- 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/fact-validation.mjs +17 -23
- package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
- package/dist/esm/check-settlement/facts.mjs.map +1 -1
- package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
- package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
- package/dist/esm/check-settlement/reason-shape.mjs +12 -0
- package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
- package/dist/esm/check-settlement/record-store.mjs +14 -17
- package/dist/esm/check-settlement/record-store.mjs.map +1 -1
- package/dist/esm/check-settlement/session.mjs +8 -2
- package/dist/esm/check-settlement/session.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 +43 -3
- 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/data-boundary/value-shapes.mjs +9 -0
- package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
- package/dist/esm/index.mjs +16 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs +5 -16
- 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 +40 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
- package/dist/esm/package-checks/code-quality-findings/policy.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/area-policy.mjs +15 -7
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +10 -12
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -20
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +2 -2
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
- package/dist/esm/package-checks/duplicate-detection/options-validation.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 +27 -6
- 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 +11 -20
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
- package/dist/esm/package-checks/file-metrics/options-validation.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 +2 -9
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +2 -2
- 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/parser.mjs +4 -4
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +104 -31
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +61 -15
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +218 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +106 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +265 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +404 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +216 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +85 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +612 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +25 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +544 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +69 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +120 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/constructor.mjs +10 -12
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +51 -35
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs +163 -26
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
- package/dist/esm/package-checks/function-metrics/options-validation.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 +31 -1
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
- package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
- package/dist/esm/package-checks/{function-metrics/lizard → host-environment}/csv.mjs +1 -0
- package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/git.mjs +12 -1
- 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/host-environment/process.mjs +5 -0
- package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
- 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/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
- package/dist/esm/package-checks/json-schema-validation/options-validation.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/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
- package/dist/esm/package-checks/json-validation/options-validation.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/final-data.mjs.map +1 -1
- 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 -27
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.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 +10 -3
- 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 +12 -11
- 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 +184 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
- 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 +24 -20
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +3 -11
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +3 -6
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +23 -7
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
- package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
- 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 +12 -16
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
- package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs +37 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs +192 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
- package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
- package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +84 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
- 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/package-tools/cache/cache-json-by-key.mjs +188 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs +40 -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 +46 -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 +56 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs +122 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs +43 -0
- 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 +109 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs +187 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs +27 -0
- 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 +55 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs +179 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +19 -176
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +184 -0
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
- 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 +22 -9
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +52 -19
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs +74 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
- package/dist/esm/project-definition/output-defaults.mjs +18 -1
- package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
- package/dist/esm/project-definition/output-validation.mjs +15 -15
- package/dist/esm/project-definition/output-validation.mjs.map +1 -1
- package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
- package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
- 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 +132 -16
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +62 -50
- package/dist/esm/project-definition/project-definition.mjs.map +1 -1
- package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
- package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
- package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
- package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +57 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
- package/dist/esm/project-run/aggregation.mjs +42 -57
- 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 +37 -9
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
- package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/dependencies.mjs +99 -6
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +57 -14
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +44 -19
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +95 -0
- package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/messages.mjs +5 -0
- package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/plan.mjs +9 -5
- package/dist/esm/project-run/check-execution/plan.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/preparation.mjs +172 -0
- 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 +44 -139
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
- 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.mjs → completion/completion.mjs} +34 -39
- package/dist/esm/project-run/completion/completion.mjs.map +1 -0
- package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
- package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
- package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
- package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
- package/dist/esm/project-run/controls/contract.mjs.map +1 -1
- package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
- package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation.mjs +79 -62
- 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/logger.mjs +100 -161
- package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidate.mjs +65 -0
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
- 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 +83 -0
- package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
- 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/paths.mjs +77 -0
- package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
- package/dist/esm/project-run/invocation/progress.mjs +30 -0
- package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
- package/dist/esm/project-run/invocation/run.mjs +82 -0
- package/dist/esm/project-run/invocation/run.mjs.map +1 -0
- package/dist/esm/project-run/invocation/scheduler.mjs +64 -0
- package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
- package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
- package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
- package/dist/esm/project-run/outputs/status.mjs +105 -0
- package/dist/esm/project-run/outputs/status.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/presentation.mjs +140 -26
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +118 -22
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +50 -10
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +11 -4
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +3 -2
- package/dist/esm/project-run/project-context.mjs.map +1 -1
- package/dist/esm/project-run/result.mjs +2 -0
- package/dist/esm/project-run/result.mjs.map +1 -1
- package/dist/esm/project-run/run.mjs +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 +171 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +196 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +168 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
- package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +211 -0
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +164 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +91 -0
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +183 -114
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +167 -121
- package/docs/changelog.md +300 -0
- package/docs/checks/duplicate-detection.md +131 -60
- package/docs/checks/file-metrics.md +68 -46
- package/docs/checks/function-metrics.md +119 -163
- package/docs/checks/json-schema-validation.md +65 -37
- package/docs/checks/json-validation.md +59 -27
- package/docs/checks/maintenance-reminders.md +68 -32
- package/docs/checks/markdown-link-validation.md +104 -56
- package/docs/checks/markdown-lint.md +167 -0
- package/docs/checks/secret-detection.md +153 -0
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +14 -14
- package/docs/guides/building-project-gate.md +706 -0
- package/docs/guides/cache-results.md +63 -0
- package/docs/guides/callbacks.md +93 -0
- package/docs/guides/check-dependencies.md +152 -0
- package/docs/guides/collecting-project-files.md +59 -0
- package/docs/guides/command-check.md +155 -0
- package/docs/guides/data-boundaries.md +140 -0
- package/docs/guides/extending-check-lifecycle.md +164 -0
- package/docs/guides/finding-waivers.md +87 -0
- package/docs/guides/learned-scheduling.md +83 -0
- package/docs/guides/presenting-findings.md +54 -0
- package/docs/guides/run-outputs.md +171 -0
- package/docs/guides/scheduling.md +208 -0
- package/docs/guides/simulating-admission.md +55 -0
- package/docs/output.md +13 -21
- package/licenses/Lizard-1.24.0-MIT.txt +30 -0
- package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
- package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
- package/licenses/analyzer-translations-NOTICE.md +24 -0
- package/licenses/lizard-1.24.0-provenance.json +957 -0
- package/package.json +19 -6
- package/src/check/check.ts +382 -92
- package/src/check/flag-enablement.ts +76 -0
- package/src/check/handoff-provider-identity.ts +34 -0
- package/src/check/inherited-collection.ts +2 -2
- package/src/check/project-changes.ts +14 -0
- package/src/check/project-context.ts +11 -0
- package/src/check-settlement/fact-validation.ts +29 -39
- package/src/check-settlement/facts.ts +1 -1
- package/src/check-settlement/outcome-normalization.ts +17 -35
- package/src/check-settlement/reason-shape.ts +20 -0
- package/src/check-settlement/record-store.ts +18 -15
- package/src/check-settlement/session.ts +12 -3
- 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 +54 -5
- package/src/data-boundary/config-glob.ts +17 -0
- package/src/data-boundary/project-path.ts +21 -0
- package/src/data-boundary/value-shapes.ts +12 -0
- package/src/index.ts +134 -5
- package/src/machine-output/v4/atomic-publication.ts +4 -17
- package/src/package-checks/check-authoring.ts +136 -0
- package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
- package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
- package/src/package-checks/code-quality-findings/policy.ts +23 -0
- 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/area-policy.ts +24 -13
- package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
- package/src/package-checks/duplicate-detection/default-check.ts +38 -7
- package/src/package-checks/duplicate-detection/execution.ts +82 -24
- package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
- package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +2 -2
- package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
- package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
- package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
- package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
- package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
- package/src/package-checks/duplicate-detection/options.ts +26 -3
- package/src/package-checks/duplicate-detection/records.ts +65 -12
- package/src/package-checks/file-metrics/constructor.ts +29 -6
- package/src/package-checks/file-metrics/execution.ts +17 -20
- package/src/package-checks/file-metrics/finding-messages.ts +29 -0
- package/src/package-checks/file-metrics/options-resolution.ts +19 -52
- package/src/package-checks/file-metrics/options-validation.ts +23 -32
- package/src/package-checks/file-metrics/options.ts +6 -3
- package/src/package-checks/file-metrics/records.ts +11 -23
- package/src/package-checks/file-metrics/scc/availability.ts +2 -2
- 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/parser.ts +4 -4
- package/src/package-checks/file-metrics/scc/scanner.ts +135 -33
- package/src/package-checks/function-metrics/analysis.ts +81 -21
- package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
- package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
- package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
- package/src/package-checks/function-metrics/analyzer/extension-output.ts +269 -0
- package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +25 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
- package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
- package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
- package/src/package-checks/function-metrics/analyzer/pipeline.ts +313 -0
- package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
- package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
- package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
- package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
- package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
- package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
- package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
- package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
- package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
- package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
- package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
- package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
- package/src/package-checks/function-metrics/analyzer/readers/objc.ts +113 -0
- package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +253 -0
- package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +310 -0
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +432 -0
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +235 -0
- package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
- package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
- package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
- package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
- package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
- package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
- package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +96 -0
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +599 -0
- package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +36 -0
- package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +684 -0
- package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
- package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +80 -0
- package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
- package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
- package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
- package/src/package-checks/function-metrics/analyzer-worker-port.ts +164 -0
- package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
- package/src/package-checks/function-metrics/constructor.ts +32 -9
- package/src/package-checks/function-metrics/execution.ts +94 -41
- package/src/package-checks/function-metrics/finding-messages.ts +95 -0
- package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
- package/src/package-checks/function-metrics/measurement-model.ts +15 -1
- package/src/package-checks/function-metrics/measurement.ts +223 -36
- package/src/package-checks/function-metrics/options-resolution.ts +39 -75
- package/src/package-checks/function-metrics/options-validation.ts +30 -39
- package/src/package-checks/function-metrics/options.ts +32 -13
- package/src/package-checks/function-metrics/records.ts +73 -7
- package/src/package-checks/function-metrics/target-files.ts +10 -70
- package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
- package/src/package-checks/host-environment/git.ts +13 -2
- 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/host-environment/process.ts +10 -0
- package/src/package-checks/json-schema-validation/default-check.ts +38 -5
- package/src/package-checks/json-schema-validation/final-data.ts +8 -0
- package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
- package/src/package-checks/json-schema-validation/options.ts +27 -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/final-data.ts +5 -0
- package/src/package-checks/json-validation/options-validation.ts +4 -18
- 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/final-data.ts +18 -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 +57 -8
- package/src/package-checks/markdown-link-validation/execution.ts +51 -57
- package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
- package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
- package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
- package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
- package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
- package/src/package-checks/markdown-link-validation/options-resolution.ts +14 -3
- package/src/package-checks/markdown-link-validation/options-validation.ts +12 -19
- package/src/package-checks/markdown-link-validation/options.ts +15 -1
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +245 -0
- package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
- package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
- package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
- package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
- 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 +39 -23
- package/src/package-checks/project-files/config-glob.ts +1 -17
- package/src/package-checks/project-files/configuration.ts +4 -15
- package/src/package-checks/project-files/gitlink-revision.ts +5 -7
- package/src/package-checks/project-files/gitlink-worktree.ts +36 -8
- package/src/package-checks/project-files/public-collection.ts +92 -0
- package/src/package-checks/project-files/revision-paths.ts +3 -3
- package/src/package-checks/project-files/revision-worktree-files.ts +17 -17
- package/src/package-checks/secret-detection/classification.ts +30 -0
- package/src/package-checks/secret-detection/default-check.ts +73 -0
- package/src/package-checks/secret-detection/execution.ts +247 -0
- package/src/package-checks/secret-detection/final-data.ts +57 -0
- package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
- package/src/package-checks/secret-detection/input-preparation.ts +290 -0
- package/src/package-checks/secret-detection/options-resolution.ts +65 -0
- package/src/package-checks/secret-detection/options-validation.ts +27 -0
- package/src/package-checks/secret-detection/options.ts +39 -0
- package/src/package-checks/secret-detection/records.ts +77 -0
- package/src/package-checks/secret-detection/secretlint/adapter.ts +122 -0
- package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
- package/src/package-tools/cache/cache-json-by-key.ts +300 -0
- package/src/package-tools/finding-presentation/finding-presentation.ts +69 -0
- package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
- package/src/package-tools/learned-critical-path/critical-path-ranking.ts +76 -0
- package/src/package-tools/learned-critical-path/duration-model/bounded-history.ts +108 -0
- package/src/package-tools/learned-critical-path/duration-model/prediction.ts +184 -0
- package/src/package-tools/learned-critical-path/duration-model/preparation.ts +79 -0
- package/src/package-tools/learned-critical-path/duration-model/recording.ts +209 -0
- package/src/package-tools/learned-critical-path/duration-model/storage.ts +251 -0
- package/src/package-tools/learned-critical-path/selection-layers.ts +71 -0
- package/src/package-tools/learned-critical-path/static-decision.ts +105 -0
- package/src/package-tools/learned-critical-path/strategy.ts +302 -0
- package/src/project-definition/check-tree/authoring.ts +40 -234
- package/src/project-definition/check-tree/check-fields-authoring.ts +242 -0
- package/src/project-definition/check-tree/collection-authoring.ts +13 -0
- package/src/project-definition/check-tree/flag-conditions.ts +99 -0
- package/src/project-definition/check-tree/materialization.ts +21 -9
- package/src/project-definition/check-tree/resolution.ts +84 -28
- package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
- package/src/project-definition/declarative-snapshot.ts +94 -0
- package/src/project-definition/output-defaults.ts +32 -1
- package/src/project-definition/output-validation.ts +15 -15
- package/src/project-definition/progress-rendering-output.ts +121 -0
- package/src/project-definition/project-changes.ts +112 -0
- package/src/project-definition/project-definition-validation.ts +166 -19
- package/src/project-definition/project-definition.ts +177 -67
- package/src/project-definition/resource-unit-mapping.ts +25 -0
- package/src/project-definition/scheduler-policy.ts +556 -0
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +83 -0
- package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
- package/src/project-run/admission-strategy-provider/provider.ts +45 -0
- package/src/project-run/aggregation.ts +52 -70
- 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 +52 -9
- package/src/project-run/check-execution/console-capture.ts +262 -0
- package/src/project-run/check-execution/dependencies.ts +161 -10
- package/src/project-run/check-execution/execution-finalization.ts +103 -27
- package/src/project-run/check-execution/execution-settlement.ts +99 -32
- package/src/project-run/check-execution/flag-controls.ts +146 -0
- package/src/project-run/check-execution/lifecycle.ts +29 -0
- package/src/project-run/check-execution/messages.ts +8 -0
- package/src/project-run/check-execution/plan.ts +12 -8
- package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
- package/src/project-run/check-execution/preparation.ts +309 -0
- package/src/project-run/check-execution/ready-check-execution.ts +97 -0
- package/src/project-run/check-execution/resolved-checks.ts +92 -232
- package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
- 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.ts → completion/completion.ts} +33 -59
- package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
- package/src/project-run/completion/result-resolver.ts +60 -0
- package/src/project-run/controls/contract.ts +22 -9
- package/src/project-run/controls/outputs-override-validation.ts +83 -60
- package/src/project-run/controls/validation-result.ts +17 -6
- package/src/project-run/controls/validation.ts +110 -68
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
- package/src/project-run/diagnostic-logging/logger.ts +132 -207
- package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
- package/src/project-run/invocation/candidate.ts +99 -0
- package/src/project-run/invocation/candidates.ts +56 -0
- package/src/project-run/invocation/creation.ts +120 -0
- package/src/project-run/invocation/execution.ts +136 -0
- package/src/project-run/invocation/paths.ts +154 -0
- package/src/project-run/invocation/progress.ts +38 -0
- package/src/project-run/invocation/run.ts +144 -0
- package/src/project-run/invocation/scheduler.ts +82 -0
- package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
- package/src/project-run/outputs/status.ts +161 -0
- package/src/project-run/progress-rendering/presentation.ts +150 -36
- package/src/project-run/progress-rendering/renderer-formatting.ts +185 -25
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +61 -9
- package/src/project-run/progress-rendering/renderer.ts +23 -6
- package/src/project-run/project-context.ts +10 -5
- package/src/project-run/result.ts +50 -4
- package/src/project-run/run.ts +7 -6
- 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 +321 -0
- package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
- package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
- package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
- package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
- package/src/project-run/task-scheduler/admission-core/selection-query.ts +297 -0
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +282 -0
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +245 -0
- package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
- package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
- package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
- package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
- package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
- package/src/project-run/task-scheduler/execution-state.ts +97 -6
- package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
- package/src/project-run/task-scheduler/graph-validation.ts +77 -31
- package/src/project-run/task-scheduler/graph.ts +111 -3
- package/src/project-run/task-scheduler/measurement/diagnostics.ts +267 -0
- package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
- package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
- package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
- package/src/project-run/task-scheduler/measurement/timing.ts +198 -0
- package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
- package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
- package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
- package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
- package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
- package/src/project-run/task-scheduler/scheduler-observation.ts +126 -0
- package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +97 -0
- package/src/project-run/task-scheduler/scheduler.ts +233 -171
- package/types/check/check.d.ts +225 -69
- package/types/check/flag-enablement.d.ts +42 -0
- package/types/check/handoff-provider-identity.d.ts +12 -0
- package/types/check/inherited-collection.d.ts +1 -1
- 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/check-settlement/reason-shape.d.ts +5 -0
- package/types/check-settlement/record-store.d.ts +2 -2
- package/types/check-settlement/session.d.ts +3 -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 +24 -0
- package/types/data-boundary/config-glob.d.ts +5 -0
- package/types/data-boundary/project-path.d.ts +4 -0
- package/types/data-boundary/value-shapes.d.ts +3 -0
- package/types/index.d.ts +40 -9
- package/types/package-checks/check-authoring.d.ts +45 -0
- package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
- package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
- package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
- 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/area-policy.d.ts +1 -1
- package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
- package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
- package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
- package/types/package-checks/duplicate-detection/options.d.ts +21 -3
- package/types/package-checks/duplicate-detection/records.d.ts +20 -3
- package/types/package-checks/file-metrics/constructor.d.ts +5 -2
- package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
- package/types/package-checks/file-metrics/options.d.ts +4 -3
- package/types/package-checks/file-metrics/records.d.ts +5 -10
- 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/file-metrics/scc/parser.d.ts +4 -4
- package/types/package-checks/function-metrics/analysis.d.ts +1 -1
- package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
- package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
- package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
- package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
- package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
- package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
- package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
- package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
- package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
- package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
- package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
- package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
- package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
- package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
- package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
- package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
- package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
- package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
- package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
- package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
- package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
- package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
- package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
- package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
- package/types/package-checks/function-metrics/constructor.d.ts +6 -3
- package/types/package-checks/function-metrics/execution.d.ts +5 -2
- package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
- package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
- package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
- package/types/package-checks/function-metrics/measurement.d.ts +22 -7
- package/types/package-checks/function-metrics/options.d.ts +26 -12
- package/types/package-checks/function-metrics/records.d.ts +24 -5
- package/types/package-checks/function-metrics/target-files.d.ts +4 -3
- package/types/package-checks/host-environment/csv.d.ts +2 -0
- package/types/package-checks/host-environment/git.d.ts +3 -1
- 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/host-environment/process.d.ts +5 -0
- package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
- package/types/package-checks/json-schema-validation/options.d.ts +33 -4
- package/types/package-checks/json-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-validation/final-data.d.ts +5 -0
- 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/final-data.d.ts +18 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
- package/types/package-checks/markdown-link-validation/default-check.d.ts +13 -4
- package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
- package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
- package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
- package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
- package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
- package/types/package-checks/markdown-link-validation/options.d.ts +13 -1
- package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
- package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
- package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
- package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
- package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
- 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/project-files/public-collection.d.ts +16 -0
- package/types/package-checks/secret-detection/classification.d.ts +12 -0
- package/types/package-checks/secret-detection/default-check.d.ts +14 -0
- package/types/package-checks/secret-detection/execution.d.ts +14 -0
- package/types/package-checks/secret-detection/final-data.d.ts +15 -0
- package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
- package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
- package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
- package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
- package/types/package-checks/secret-detection/options.d.ts +33 -0
- package/types/package-checks/secret-detection/records.d.ts +35 -0
- package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
- package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
- package/types/package-tools/cache/cache-json-by-key.d.ts +53 -0
- package/types/package-tools/finding-presentation/finding-presentation.d.ts +27 -0
- package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
- package/types/package-tools/learned-critical-path/critical-path-ranking.d.ts +19 -0
- package/types/package-tools/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
- package/types/package-tools/learned-critical-path/duration-model/prediction.d.ts +32 -0
- package/types/package-tools/learned-critical-path/duration-model/preparation.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/recording.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/storage.d.ts +12 -0
- package/types/package-tools/learned-critical-path/selection-layers.d.ts +14 -0
- package/types/package-tools/learned-critical-path/static-decision.d.ts +3 -0
- package/types/package-tools/learned-critical-path/strategy.d.ts +35 -0
- package/types/project-definition/check-tree/authoring.d.ts +13 -14
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +30 -0
- package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
- package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
- package/types/project-definition/check-tree/resolution.d.ts +13 -6
- package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
- package/types/project-definition/declarative-snapshot.d.ts +10 -0
- package/types/project-definition/output-defaults.d.ts +7 -0
- package/types/project-definition/output-validation.d.ts +2 -1
- package/types/project-definition/progress-rendering-output.d.ts +41 -0
- package/types/project-definition/project-changes.d.ts +30 -0
- package/types/project-definition/project-definition.d.ts +49 -19
- package/types/project-definition/resource-unit-mapping.d.ts +4 -0
- package/types/project-definition/scheduler-policy.d.ts +497 -0
- package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
- package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
- package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
- 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/callback.d.ts +5 -1
- package/types/project-run/check-execution/console-capture.d.ts +18 -0
- package/types/project-run/check-execution/dependencies.d.ts +4 -1
- package/types/project-run/check-execution/execution-finalization.d.ts +18 -8
- package/types/project-run/check-execution/execution-settlement.d.ts +18 -7
- package/types/project-run/check-execution/flag-controls.d.ts +27 -0
- package/types/project-run/check-execution/lifecycle.d.ts +24 -0
- package/types/project-run/check-execution/messages.d.ts +2 -0
- package/types/project-run/check-execution/plan.d.ts +2 -3
- package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
- package/types/project-run/check-execution/preparation.d.ts +29 -0
- package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +37 -44
- package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
- 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.d.ts → completion/completion.d.ts} +7 -5
- package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
- package/types/project-run/completion/result-resolver.d.ts +4 -0
- package/types/project-run/controls/contract.d.ts +22 -9
- package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
- package/types/project-run/controls/validation-result.d.ts +12 -4
- package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
- package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
- package/types/project-run/invocation/candidate.d.ts +12 -0
- package/types/project-run/invocation/candidates.d.ts +8 -0
- package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
- package/types/project-run/invocation/execution.d.ts +5 -0
- package/types/project-run/invocation/paths.d.ts +40 -0
- package/types/project-run/invocation/progress.d.ts +11 -0
- package/types/project-run/invocation/run.d.ts +43 -0
- package/types/project-run/invocation/scheduler.d.ts +16 -0
- package/types/project-run/outputs/configuration.d.ts +3 -0
- package/types/project-run/outputs/status.d.ts +48 -0
- package/types/project-run/progress-rendering/presentation.d.ts +12 -7
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +13 -2
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +8 -1
- package/types/project-run/progress-rendering/renderer.d.ts +11 -3
- package/types/project-run/project-context.d.ts +5 -4
- package/types/project-run/result.d.ts +38 -4
- package/types/project-run/run.d.ts +6 -5
- package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
- package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
- package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
- package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
- package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
- package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
- package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
- package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
- package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
- package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
- package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
- package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
- package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
- package/types/project-run/task-scheduler/graph.d.ts +15 -0
- package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
- package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
- package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
- package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
- package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
- package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
- package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
- package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
- package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
- package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
- package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
- package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
- package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs +0 -17
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
- package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
- package/dist/esm/package-checks/host-environment/process/command.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 +0 -186
- package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
- package/dist/esm/project-run/completion.mjs.map +0 -1
- package/dist/esm/project-run/invocation-creation.mjs +0 -111
- package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
- package/dist/esm/project-run/invocation.mjs +0 -195
- package/dist/esm/project-run/invocation.mjs.map +0 -1
- package/dist/esm/project-run/machine-publication.mjs.map +0 -1
- package/dist/esm/project-run/output-configuration.mjs.map +0 -1
- package/dist/esm/project-run/output-status.mjs +0 -43
- package/dist/esm/project-run/output-status.mjs.map +0 -1
- package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
- package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
- package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
- package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
- package/src/package-checks/host-environment/process/command.ts +0 -21
- package/src/project-run/check-execution/preflight.ts +0 -321
- package/src/project-run/invocation-creation.ts +0 -160
- package/src/project-run/invocation.ts +0 -303
- package/src/project-run/output-status.ts +0 -69
- package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
- package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
- package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
- package/types/package-checks/host-environment/process/command.d.ts +0 -7
- package/types/package-checks/project-files/config-glob.d.ts +0 -5
- package/types/project-run/check-execution/preflight.d.ts +0 -27
- package/types/project-run/invocation.d.ts +0 -34
- package/types/project-run/output-configuration.d.ts +0 -3
- package/types/project-run/output-status.d.ts +0 -21
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vibe Check
|
|
2
2
|
|
|
3
|
-
Vibe Check
|
|
3
|
+
Vibe Check 是通用 TypeScript 质量门禁工具,提供可组合 Check、类型安全 API 和结构化结果。你可以直接使用随包提供的代码、JSON、Schema、Markdown 和维护检查,也可以把项目自己的规则写成 Check,然后在项目脚本、测试或 CI 中运行它们。
|
|
4
4
|
|
|
5
5
|
所有公开能力都从 `@zxyycom/vibe-check` package root 导入。Vibe Check 不要求额外的配置文件,也不提供 CLI:检查内容、组合方式和运行时机都由你的 TypeScript 代码决定。
|
|
6
6
|
|
|
@@ -10,16 +10,59 @@ Vibe Check 是面向 Bun 项目的 TypeScript 质量检查库。你可以直接
|
|
|
10
10
|
npm install @zxyycom/vibe-check
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
npm 负责安装 package
|
|
13
|
+
npm 负责安装 package;应用代码和质量脚本的最低运行要求是 **Node `>=24.18`**。安装完成后,可以用 `node <file>` 运行下面的示例。
|
|
14
|
+
|
|
15
|
+
升级前查看随包的[变更日志](./docs/changelog.md),确认对应版本的变化与必要调整。
|
|
16
|
+
|
|
17
|
+
## 随包提供的 Check
|
|
18
|
+
|
|
19
|
+
如果项目需要的是常见质量检查,可以先从以下函数开始,而不必自己实现 `execute`。除 `maintenanceReminders(entries)` 与 `secretDetection({ files })` 有必填输入外,其余函数都可以无参调用;每份指南都包含最小用法、options、默认值、结果和安全边界。
|
|
20
|
+
|
|
21
|
+
| 你想检查什么 | 使用的导出 | 额外环境准备 |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| 重复代码 | [`duplicateDetection(options?)`](./docs/checks/duplicate-detection.md) | 无需另装分析器。 |
|
|
24
|
+
| 文件代码行指标 | [`fileMetrics(options?)`](./docs/checks/file-metrics.md) | 环境中有兼容精确 SCC 4.0.0 输出契约的 `scc` command。 |
|
|
25
|
+
| 函数规模、复杂度、最大嵌套和参数数量 | [`functionMetrics(options?)`](./docs/checks/function-metrics.md) | 无需另装分析器。 |
|
|
26
|
+
| JSON 语法和输入范围 | [`jsonValidation(options?)`](./docs/checks/json-validation.md) | 无。 |
|
|
27
|
+
| JSON 与 Schema 的匹配关系 | [`jsonSchemaValidation(options?)`](./docs/checks/json-schema-validation.md) | 使用远程 Schema 时,需显式允许对应 HTTPS source 并具备网络访问条件。 |
|
|
28
|
+
| Markdown 结构与明确内容缺陷 | [`markdownLint(options?)`](./docs/checks/markdown-lint.md) | 无。 |
|
|
29
|
+
| 本地 Markdown 链接与锚点 | [`markdownLinkValidation(options?)`](./docs/checks/markdown-link-validation.md) | 无。 |
|
|
30
|
+
| 基于 Git 历史的维护提醒 | [`maintenanceReminders(entries)`](./docs/checks/maintenance-reminders.md) | 项目根目录是 Git repository,且环境可以执行 `git`。 |
|
|
31
|
+
| 高置信 PEM private key | [`secretDetection({ files })`](./docs/checks/secret-detection.md) | 无需另装分析器。 |
|
|
32
|
+
|
|
33
|
+
### 为随包 Check 声明项目行为
|
|
34
|
+
|
|
35
|
+
八个 object-policy 构造器都在原有顶层 options 接受领域 policy 和项目声明。`maintenanceReminders` 保留
|
|
36
|
+
`maintenanceReminders(entries)`,并增加包含 `entries` 的 object input;为同类 Check 创建多个实例时,直接提供 `checkId`。
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { defineConfig, fileMetrics } from "@zxyycom/vibe-check";
|
|
40
|
+
|
|
41
|
+
const definition = defineConfig({
|
|
42
|
+
checks: [
|
|
43
|
+
fileMetrics({
|
|
44
|
+
checkId: "source-file-metrics",
|
|
45
|
+
enabledByFlags: { when: "source-changed" },
|
|
46
|
+
codeAreas: { source: { files: { include: ["src/**/*.ts"] } } }
|
|
47
|
+
}),
|
|
48
|
+
fileMetrics({
|
|
49
|
+
checkId: "test-file-metrics",
|
|
50
|
+
codeAreas: { tests: { files: { include: ["test/**/*.ts"] } } }
|
|
51
|
+
})
|
|
52
|
+
]
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`PackageCheckAuthoringOptions` 可作为可复用的项目声明片段从 package root 导入。构造器返回原生 typed
|
|
57
|
+
Check:项目字段成为 Check 声明,领域字段才形成 `.options` 和 execution `context.options`。完整字段、默认、
|
|
58
|
+
关系与验证责任见 [API 机制](./docs/api-mechanics.md#随包-check-的构造器项目声明);每个领域字段见对应 Check 指南。
|
|
59
|
+
|
|
60
|
+
`duplicateDetection`、`fileMetrics`、`functionMetrics`、`markdownLint` 和 `markdownLinkValidation` 默认把普通 Finding 作为 non-blocking 警告保留下来;需要让 Finding 直接使 Check 失败时,在对应 options 中设置 `findingPolicy: "blocking"`。文件选择、阈值、外部工具和具体结果字段以各 Check 指南为准。
|
|
14
61
|
|
|
15
62
|
## 自定义 Check 快速开始
|
|
16
63
|
|
|
17
64
|
下面的 `quality.ts` 展示一条完整的最小路径:定义 bundle 大小规则、运行它,并确认 Check 通过。为使示例能够独立运行,`actualBytes` 使用固定输入;接入项目时,把这部分替换为项目真实的测量逻辑即可。
|
|
18
65
|
|
|
19
|
-
- `defineCheck(...)` 定义一项检查,以及通过或失败时要返回的数据。
|
|
20
|
-
- `defineConfig(...)` 把一项或多项 Check 组成可重复运行的 Project Definition。
|
|
21
|
-
- `run(...)` 执行 Definition,并返回本次运行的结果。
|
|
22
|
-
|
|
23
66
|
示例保留默认的进度输出,但关闭 machine publication,因此第一次运行不会写入 `run.json` 或 `records.ndjson`:
|
|
24
67
|
|
|
25
68
|
```ts
|
|
@@ -28,7 +71,7 @@ import { defineCheck, defineConfig, run } from "@zxyycom/vibe-check";
|
|
|
28
71
|
const bundleSize = defineCheck({
|
|
29
72
|
checkId: "bundle-size",
|
|
30
73
|
displayName: "Bundle size",
|
|
31
|
-
|
|
74
|
+
execute() {
|
|
32
75
|
const actualBytes = 82_000;
|
|
33
76
|
const maximumBytes = 100_000;
|
|
34
77
|
const data = {
|
|
@@ -61,94 +104,55 @@ if (outcome?.status !== "passed" || outcome.data.actualBytes !== 82_000) {
|
|
|
61
104
|
运行它:
|
|
62
105
|
|
|
63
106
|
```sh
|
|
64
|
-
|
|
107
|
+
node quality.ts
|
|
65
108
|
```
|
|
66
109
|
|
|
67
110
|
`RunResult.kind === "completed"` 表示这次 Run 已经完整结算,不等于其中每项 Check 都通过。示例继续读取 `bundle-size` 的 `outcome.status`,并在结果不符合预期时让脚本失败。
|
|
68
111
|
|
|
69
|
-
##
|
|
112
|
+
## 运行、配置与读取结果
|
|
70
113
|
|
|
71
|
-
|
|
114
|
+
`defineConfig(...)` 定义可复用的 Checks、options、依赖、scheduler 和默认 outputs;`run(definition, controls?)` 的第二个参数只设置本次根目录、flags、取消、产物与日志目标、output overrides 和可选的本地 aggregation 函数。Controls 不能替换 Check 或 scheduler;字段位置和覆盖规则见 [API 机制](./docs/api-mechanics.md#参数应该放在哪里)。
|
|
72
115
|
|
|
73
|
-
|
|
74
|
-
| --- | --- | --- |
|
|
75
|
-
| 重复代码 | [`duplicateDetection(options?)`](./docs/checks/duplicate-detection.md) | package 使用随安装依赖提供的兼容 jscpd v5。 |
|
|
76
|
-
| 文件代码行指标 | [`fileMetrics(options?)`](./docs/checks/file-metrics.md) | 环境中有兼容 SCC 3.7.0 输出契约的 `scc` command。 |
|
|
77
|
-
| 函数规模、复杂度和参数数量 | [`functionMetrics(options?)`](./docs/checks/function-metrics.md) | 环境中有兼容 Lizard 1.23 输出契约的 `lizard` command。 |
|
|
78
|
-
| JSON 语法和输入范围 | [`jsonValidation(options?)`](./docs/checks/json-validation.md) | 只读取本地文件,不执行 command 或网络请求。 |
|
|
79
|
-
| JSON 与 Schema 的匹配关系 | [`jsonSchemaValidation(options?)`](./docs/checks/json-schema-validation.md) | 默认离线;只有显式允许的 HTTPS source 才会触发网络请求。 |
|
|
80
|
-
| 本地 Markdown 链接与锚点 | [`markdownLinkValidation(options?)`](./docs/checks/markdown-link-validation.md) | 只读取 policy 允许的本地路径,不执行 command 或网络请求。 |
|
|
81
|
-
| 基于 Git 历史的维护提醒 | [`maintenanceReminders(entries)`](./docs/checks/maintenance-reminders.md) | 项目根目录是 Git repository,且环境可以执行 `git`。 |
|
|
82
|
-
|
|
83
|
-
`duplicateDetection`、`fileMetrics`、`functionMetrics` 和 `markdownLinkValidation` 默认把普通 Finding 作为 non-blocking 警告保留下来;需要让 Finding 直接使 Check 失败时,在对应 options 中设置 `findingPolicy: "blocking"`。文件选择、阈值、外部工具和具体结果字段以各 Check 指南为准。
|
|
84
|
-
|
|
85
|
-
## 自定义 Check API
|
|
86
|
-
|
|
87
|
-
只使用随包 Check 时,可以跳过本节。需要表达项目自己的规则时,通常只需要定义 Check、组成 Definition、运行并读取结果;preflight、依赖调度、waiver 对账、聚合和取消等进阶能力放在[深入 API 机制](./docs/api-mechanics.md)中。
|
|
116
|
+
默认最多并行运行四个 Check,显示进度并把 machine files 写入 `artifacts/vibe-check`;diagnostic logging 默认关闭。上例显式关闭 machine publication。配置方法见[输出指南](./docs/guides/run-outputs.md)与[调度指南](./docs/guides/scheduling.md)。
|
|
88
117
|
|
|
89
|
-
|
|
118
|
+
先判断 `RunResult.kind`;`completed` 和 `output` 才同时提供完整 facts 与 `aggregate`,随后再按 `checkId` 读取 `snapshot.checks[].outcome` 的 `passed`、`failed`、`not-applicable` 或 `unavailable`。执行阶段取消也有 snapshot,但没有 aggregate。省略定制函数时,aggregate 仅在有效 Check 列表非空且全部 `passed` 时为 `passed`,否则为 `failed`。`completed` 不代表质量通过;CI 可读取这个严格默认值,或在 [`checkAggregation`](./docs/api-mechanics.md#runcontrols-与-check-aggregation) 中同步解释同一有效列表,再决定退出码。
|
|
90
119
|
|
|
91
|
-
|
|
120
|
+
## 按任务继续阅读
|
|
92
121
|
|
|
93
|
-
|
|
94
|
-
| --- | --- |
|
|
95
|
-
| `checkId` | 在同一 Definition 中唯一的稳定标识;用于查找 outcome、Record、message 和 duration。 |
|
|
96
|
-
| `displayName` | 进度和人读结果中显示的名称。 |
|
|
97
|
-
| `execution(context)` | 执行检查并返回一个 terminal outcome。省略时,当前节点只用于组织子 `checks`。 |
|
|
98
|
-
| `options` | 当前 Check 的配置;Run 会把准备后的只读副本交给 `context.options`。 |
|
|
99
|
-
| `checks` | 可选的子 Check 列表,用于组织一组相关规则。 |
|
|
122
|
+
只读当前任务需要的专题;精确 overload、泛型推断和字段 JSDoc 以安装包中的 `types/**.d.ts` 为准。
|
|
100
123
|
|
|
101
|
-
|
|
124
|
+
- [从项目质量目标构建 Gate](./docs/guides/building-project-gate.md):从最小入口出发,按实际问题接入脚本、共享准备、增量选择、自建缓存和诊断。
|
|
125
|
+
- [API 机制](./docs/api-mechanics.md):Run 生命周期、组合继承、结果与 aggregation。
|
|
126
|
+
- [选择回调位置](./docs/guides/callbacks.md):确定执行前、检查中、显示时或结束后的接入点。
|
|
127
|
+
- [自定义 Check](./docs/guides/extending-check-lifecycle.md):options 准备、callback context、Records 与协作取消。
|
|
128
|
+
- [执行外部命令的 Check](./docs/guides/command-check.md):以单一 executable 和独立 arguments 接入 exit-status command,配置 environment、输出与终态边界。
|
|
129
|
+
- [Check 依赖与类型化数据](./docs/guides/check-dependencies.md):`dependsOn` / `observes`、读取授权与 provider parser。
|
|
130
|
+
- [Run 输出与诊断](./docs/guides/run-outputs.md):输出配置、progress、日志与失败处理。
|
|
131
|
+
- [调度 Check](./docs/guides/scheduling.md):并发资源、准入策略与终态观察。
|
|
132
|
+
- [机器输出契约](./docs/output.md):供其他工具读取 `run.json`、`records.ndjson` 与 schemas。
|
|
102
133
|
|
|
103
|
-
|
|
104
|
-
| --- | --- |
|
|
105
|
-
| `passed` | 检查完成且满足规则;同时返回主要 final `data`。 |
|
|
106
|
-
| `failed` | 检查完成但不满足规则;同时返回主要 final `data`。 |
|
|
107
|
-
| `not-applicable` | 当前输入没有适用的工作;可以附带 reason。 |
|
|
108
|
-
| `unavailable` | 无法形成可信结果;必须附带 reason。 |
|
|
134
|
+
以下可选工具由项目代码或自定义 Check 显式调用:
|
|
109
135
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
### 组成 Project Definition
|
|
113
|
-
|
|
114
|
-
`defineConfig({ checks, ... })` 组成可重复运行的 Project Definition,并补齐未声明的默认值。最常调整的默认项是:
|
|
115
|
-
|
|
116
|
-
| 配置 | 默认值 | 效果 |
|
|
136
|
+
| 目的 | 工具与接入方式 | 详解 |
|
|
117
137
|
| --- | --- | --- |
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
122
|
-
|
|
123
|
-
`
|
|
138
|
+
| 按一份完整 selection 收集项目文件 path | `collectProjectFiles(...)` 在普通项目代码或 custom Check 内返回冻结的 relative path 快照 | [收集项目文件](./docs/guides/collecting-project-files.md) |
|
|
139
|
+
| 按完整语义 key 复用本地 JSON 计算 | `cacheJsonByKey(...)` 在普通项目代码或 Check 内返回一次调用的缓存结果 | [缓存计算结果](./docs/guides/cache-results.md) |
|
|
140
|
+
| 取得独立 JSON 副本、生成确定性表示,或检查含回调的配置结构 | 两组公开 Core 工具分别负责 JSON 规范化/序列化与外层结构快照,无需创建 Check 或 Run | [Core 数据工具](./docs/guides/data-boundaries.md) |
|
|
141
|
+
| 对账完整 Finding 集合与 waiver audit | `reconcileFindingWaivers(...)` 在 Finding 形成后返回 disposition 与 audit | [对账 Finding waiver](./docs/guides/finding-waivers.md) |
|
|
142
|
+
| 生成有限的 Finding 人读摘要 | `presentCheckFindings(...)` 返回 `CheckMessage[]`,由 producing Check 附到自己的 terminal result | [呈现 Check Finding](./docs/guides/presenting-findings.md) |
|
|
143
|
+
| 在不执行 Check 的前提下分析静态 admission 分支 | `createAdmissionGraph(...)` 独立创建 immutable simulation,不需要 `run(...)` 或 custom policy | [模拟 AdmissionGraph](./docs/guides/simulating-admission.md) |
|
|
144
|
+
| 为重复 Run 准备基于本地时长 history 的选择策略 | `createLearnedCriticalPathStrategy(...)` 的返回值接入 `scheduler.admissionPolicy` 的 custom strategy | [learned critical-path strategy](./docs/guides/learned-scheduling.md) |
|
|
124
145
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
`run(definition, controls?)` 执行一次独立 invocation。常用 controls 包括 `projectRoot`、`flags`、`signal` 和仅对本次运行生效的 `outputs` overrides。
|
|
128
|
-
|
|
129
|
-
读取结果时分两层判断:
|
|
130
|
-
|
|
131
|
-
1. 先读取 `RunResult.kind`,确认 invocation 是完整结算、配置错误、规划失败、输出失败、执行失败还是被取消。
|
|
132
|
-
2. 对有 snapshot 的结果,按 `checkId` 查找 `snapshot.checks[].outcome`,再处理 `passed`、`failed`、`not-applicable` 或 `unavailable`。
|
|
133
|
-
|
|
134
|
-
合法运行中,即使某项 Check 返回 `failed`,Run 仍可能是 `kind: "completed"`。如果 CI 需要因质量 Finding 退出非零状态,调用方必须像快速开始那样显式判断目标 outcome,或配置并读取 invocation-level aggregation。
|
|
135
|
-
|
|
136
|
-
## 输出与进阶用法
|
|
137
|
-
|
|
138
|
-
- [深入 API 机制](./docs/api-mechanics.md)说明 options preflight、依赖、组合、aggregation、finding waiver、cancellation 和 output failure 边界。
|
|
139
|
-
- [机器输出契约](./docs/output.md)说明 `run.json`、`records.ndjson` 和对应 schemas;只有需要把结果交给其他工具时才需要读取它。
|
|
140
|
-
- 精确 overload、泛型推断和字段 JSDoc 以安装包中的 `types/**.d.ts` 为准。
|
|
146
|
+
各随包 Check 的 `parse…Data` 导出用于解析该 Check 的 final data;完整签名与类型见相应 Check 指南及 installed declarations。
|
|
141
147
|
|
|
142
148
|
## 包内结构与调试
|
|
143
149
|
|
|
144
150
|
业务代码始终从 `@zxyycom/vibe-check` 导入。安装包中的 `index.mjs` 是公开 runtime entry,`types/**.d.ts` 提供 TypeScript declarations;source maps、`src/**.ts` 和可读的 `dist/esm/**.mjs` 用于堆栈定位与实现检查,不是额外的 public import path。
|
|
145
151
|
|
|
146
|
-
安装包还包含机器输出文档、v4 run / Record schemas 和一组完整 artifact example,便于需要消费机器结果的工具核对实际 bytes。
|
|
147
|
-
|
|
148
152
|
## 分发与兼容范围
|
|
149
153
|
|
|
150
|
-
npm 只负责分发和安装 package;受支持的产品 host 是 **Bun `>=1.3.14`**。通过 npm 安装不表示 Node.js runtime 已受支持。
|
|
151
|
-
|
|
152
154
|
当前 public contract 只有 `@zxyycom/vibe-check` package root 的程序化 API。CLI、`bin`、plugin API、CommonJS/browser entry 和 subpath imports 都不在支持范围内。
|
|
153
155
|
|
|
154
|
-
`0.0.x` patch 之间不承诺 package-level 兼容。项目应提交 lockfile,并在升级前检查对应版本的变更。
|
|
156
|
+
`0.0.x` patch 之间不承诺 package-level 兼容。项目应提交 lockfile,并在升级前检查对应版本的变更。
|
|
157
|
+
|
|
158
|
+
随包法律材料包括根 `LICENSE` 中的 Vibe Check MIT 文本,以及 `licenses/` 中的分析器翻译归属说明、第三方许可原文与来源记录。npm 依赖作为独立包安装,其许可声明及随附法律材料由各依赖包提供。
|
package/dist/esm/check/check.mjs
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { registerHandoffProviderIdentity } from "./handoff-provider-identity.mjs";
|
|
1
2
|
export { inherit, isInheritedCheckCollection, snapshotInheritedCheckCollection } from "./inherited-collection.mjs";
|
|
2
3
|
export function defineCheck(value) {
|
|
4
|
+
if (value.handoff === true) {
|
|
5
|
+
registerHandoffProviderIdentity(value);
|
|
6
|
+
}
|
|
3
7
|
return value;
|
|
4
8
|
}
|
|
5
9
|
//# sourceMappingURL=check.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.mjs","sourceRoot":"","sources":["../../../src/check/check.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EACP,0BAA0B,EAC1B,gCAAgC,EACjC,MAAM,2BAA2B,CAAC;AAuenC,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { CanonicalJsonObject, CanonicalJsonValue } from \"../data-boundary/canonical-json.ts\";\nimport type { InheritableCheckCollection } from \"./inherited-collection.ts\";\n\nexport {\n inherit,\n isInheritedCheckCollection,\n snapshotInheritedCheckCollection\n} from \"./inherited-collection.ts\";\nexport type {\n InheritCheckCollectionInput,\n InheritableCheckCollection,\n InheritedCheckCollection\n} from \"./inherited-collection.ts\";\n\n/** Check 无法给出 final data 时返回的受控 reason code。 */\nexport type CheckReason = Readonly<{\n /** 由 owning Check 定义、供调用方诊断的稳定 code。 */\n readonly code: string;\n}>;\n\n/** `not-applicable` Check result 的可选 reason。 */\nexport type CheckNotApplicableReason = CheckReason;\n/** author callback 明确返回 `unavailable` 时必须提供的 reason。 */\nexport type CheckDeclaredUnavailableReason = CheckReason;\n\n/** `unavailable` Check outcome 的 reason;可列出导致当前 Check 不可用的上游 Check。 */\nexport type CheckUnavailableReason = Readonly<{\n /** 由当前 Check 或 Product 边界给出的受控原因。 */\n readonly code: string;\n /** 仅在上游关系有助于定位时给出的相关 Check IDs。 */\n readonly checkIds?: readonly string[];\n}>;\n\n/** 终端 Check message 的 presentation severity。 */\nexport type CheckMessageLevel = \"info\" | \"warning\" | \"error\";\n\n/** 由 Check author 附加到 terminal result 的补充消息。 */\nexport interface CheckMessage {\n /** 人读 presentation 使用的 severity。 */\n readonly level: CheckMessageLevel;\n /** owning Check namespace 内的稳定 message code。 */\n readonly code: string;\n /** 非空消息正文;Product 保留 author 提供的字符串。 */\n readonly message: string;\n}\n\n/** 可附加到每个 {@link CheckResult} branch 的有序 terminal messages。 */\nexport interface CheckResultMessages {\n /** 省略、`undefined` 或空数组都表示没有 supplemental messages。 */\n readonly messages?: readonly CheckMessage[];\n}\n\n/** 已结算 Check 在人读 progress 中的可见性。 */\nexport type CheckVisibility = \"always\" | \"attention\";\n\n/**\n * Check callback 的 terminal result。\n *\n * @typeParam FinalData - `passed` 或 `failed` 时保留为 canonical final data 的业务对象。\n * @remarks `not-applicable` 与 `unavailable` 不携带 final data;普通 callback、Record 或取消失败由\n * Product 转换为 `unavailable`,而不是抛出为 Run 的成功结果。\n */\nexport type CheckResult<FinalData extends object = object> = Readonly<\n (\n | {\n /** Check 已产生通过的 final data。 */\n readonly status: \"passed\";\n /** 此 Check 的主要终态事实。 */\n readonly data: FinalData;\n }\n | {\n /** Check 已产生失败的 final data。 */\n readonly status: \"failed\";\n /** 此 Check 的主要终态事实。 */\n readonly data: FinalData;\n }\n | {\n /** Check 在当前 invocation 中不适用。 */\n readonly status: \"not-applicable\";\n /** 不适用的可选受控原因。 */\n readonly reason?: CheckNotApplicableReason;\n }\n | {\n /** Check 不能提供 terminal data。 */\n readonly status: \"unavailable\";\n /** 不可用的受控原因。 */\n readonly reason: CheckDeclaredUnavailableReason;\n }\n ) &\n CheckResultMessages\n>;\n\n/** 已 materialize 到 Core snapshot 的 Check terminal outcome。 */\nexport type CheckOutcome = Readonly<\n | {\n /** 已 materialize 的通过 outcome。 */\n readonly status: \"passed\";\n /** 已 canonicalize 的 primary final fact。 */\n readonly data: CanonicalJsonObject;\n }\n | {\n /** 已 materialize 的失败 outcome。 */\n readonly status: \"failed\";\n /** 已 canonicalize 的 primary final fact。 */\n readonly data: CanonicalJsonObject;\n }\n | {\n /** 已 materialize 的不适用 outcome。 */\n readonly status: \"not-applicable\";\n /** 不适用的可选受控原因。 */\n readonly reason?: CheckNotApplicableReason;\n }\n | {\n /** 已 materialize 的不可用 outcome。 */\n readonly status: \"unavailable\";\n /** 包含相关 upstream Check IDs 的受控原因。 */\n readonly reason: CheckUnavailableReason;\n }\n>;\n\n/** 将 callback options 转为不可变观察值的递归 utility type。 */\nexport type DeepReadonly<T> = T extends string | number | boolean | null\n ? T\n : T extends readonly (infer Item)[]\n ? readonly DeepReadonly<Item>[]\n : T extends object\n ? { readonly [Key in keyof T]: DeepReadonly<T[Key]> }\n : never;\n\n/** callback 写入 supplemental Record 时的 Check-local identity。 */\ninterface RecordIdentityInput {\n /** 在当前 Check 内唯一的 Record ID。 */\n readonly id: string;\n}\n\n/** callback 写入 supplemental Records 的 Product-owned reporter。 */\ninterface CheckRecordReporter {\n /** 记录一个补充事实;它不决定 Check 的 terminal status。 */\n report(identity: RecordIdentityInput, data: object): void;\n}\n\n/** 读取已声明 dependency final data 时的失败原因。 */\nexport type DependencyReadError = Readonly<\n | {\n /** 当前 Check 未声明所请求的 dependency ID。 */\n readonly code: \"dependency-not-declared\";\n /** 被拒绝的 dependency ID。 */\n readonly checkId: string;\n }\n | {\n /** 已声明 upstream 没有可读取的 final data。 */\n readonly code: \"upstream-data-unavailable\";\n /** 没有 final data 的 direct dependency ID。 */\n readonly checkId: string;\n /** 阻止 readback 的 upstream terminal status。 */\n readonly status: \"not-applicable\" | \"unavailable\";\n }\n>;\n\n/** {@link CheckDependencies.get} 的受控 readback 结果。 */\nexport type DependencyReadResult = Readonly<\n | {\n /** 成功读取 direct dependency final data。 */\n readonly ok: true;\n /** 被读取的 direct dependency ID。 */\n readonly checkId: string;\n /** upstream 已结算为 `passed` 或 `failed` 的 status。 */\n readonly status: \"passed\" | \"failed\";\n /** 已与原对象脱离的上游依赖终态数据。 */\n readonly data: CanonicalJsonObject;\n }\n | {\n /** dependency data 不可读取。 */\n readonly ok: false;\n /** 失败的授权或 upstream-data reason。 */\n readonly error: DependencyReadError;\n }\n>;\n\n/** 当前 Check 的已规范化直接 dependencies 的 data reader。 */\nexport interface CheckDependencies {\n /**\n * 读取一个直接 dependency 的 canonical final data。\n *\n * @returns 已声明且为 `passed`/`failed` 的 dependency 返回其 data;未声明或没有 final data 时返回\n * `ok: false`,不会授权 transitive dependency。\n */\n get(checkId: string): DependencyReadResult;\n}\n\n/** callback 可读取的、由 Product 规范化的项目上下文。 */\nexport interface CheckProjectContext {\n /** 本次 Run 使用的绝对项目根目录。 */\n readonly root: string;\n /** 已去重、排序的 caller-supplied flags。 */\n readonly flags: readonly string[];\n}\n\n/**\n * Check callback 收到的 Product-owned execution context。\n *\n * @typeParam Options - 此 Check preflight 后传给 execution 的 options shape。\n */\nexport interface CheckExecutionContext<Options extends object> {\n /** 读取当前 Check 的已声明 direct dependencies。 */\n readonly dependencies: CheckDependencies;\n /** 深度只读、canonical 的 invocation-local prepared Check options。 */\n readonly options: DeepReadonly<Options>;\n /** 已规范化的项目根与 flags。 */\n readonly project: CheckProjectContext;\n /** 写入 supplemental Records 的 reporter。 */\n readonly records: CheckRecordReporter;\n /** 本次 invocation 的 cancellation signal。 */\n readonly signal: AbortSignal;\n}\n\n/**\n * 一个 Check 的 callback signature。\n *\n * @typeParam Options - callback 从 context 读取的 prepared options shape。\n * @returns terminal Check result 或其 Promise。\n */\nexport type CheckExecution<Options extends object = object> = (\n this: void,\n context: CheckExecutionContext<Options>\n) => CheckResult | Promise<CheckResult>;\n\n/**\n * 在 Check execution 前,可选地为本次 invocation 准备 options。\n *\n * @remarks `signal` 与同一次 callback execution 使用同一个 cancellation signal;实现应在可等待工作中\n * 协作退出,而不是留下悬挂 work。bivariant callback 保持具体 options Check 可进入普通递归 Check\n * collection;Product 仍只会用该 Check 自己的 authored options 调用它。精确结果见\n * {@link CheckPreflightResult}。\n */\nexport type CheckPreflight<\n AuthoredOptions extends object = object,\n PreparedOptions extends object = AuthoredOptions\n> = {\n bivarianceHack(\n this: void,\n options: DeepReadonly<AuthoredOptions>,\n signal: AbortSignal\n ): CheckPreflightResult<PreparedOptions> | Promise<CheckPreflightResult<PreparedOptions>>;\n}[\"bivarianceHack\"];\n\n/**\n * Check-owned preflight 的判别结果。\n *\n * `failure/block` 不允许 fallback,直接以 owning reason 结算为 unavailable;`failure/continue` 必须给出\n * fallback 并继续 execution。两种进入 execution 的值都只属于本次 invocation,Product canonicalize/freeze\n * 后传递,不会改写 Definition 中 authored options。两个 failure 分支都必须给出 reason;continue reason\n * 是 Check-owned diagnostic identity,当前不会单独 materialize 为 outcome,调用方通过 messages 与后续\n * outcome 观察结果;block 物理上不含 fallback 字段。\n */\nexport type CheckPreflightResult<PreparedOptions extends object = object> = Readonly<\n | {\n readonly status: \"success\";\n readonly preparedOptions: PreparedOptions;\n readonly messages?: readonly CheckMessage[];\n }\n | {\n readonly status: \"failure\";\n readonly action: \"block\";\n readonly reason: CheckDeclaredUnavailableReason;\n readonly messages?: readonly CheckMessage[];\n }\n | {\n readonly status: \"failure\";\n readonly action: \"continue\";\n readonly fallback: PreparedOptions;\n readonly reason: CheckReason;\n readonly messages?: readonly CheckMessage[];\n }\n>;\n\n/**\n * 普通递归 Check authoring value 的共享字段。\n *\n * @typeParam AuthoredOptions - Definition 中的 declarative options shape。\n * @typeParam PreparedOptions - preflight 后 callback 接收的 invocation-local options shape。\n * @remarks 该值可以同时有 `execution` 和 `checks`;只有 executable node 产生 final Check fact。\n */\ninterface CheckBase<AuthoredOptions extends object, PreparedOptions extends object> {\n /** 在 Definition 内唯一的 stable Check ID。 */\n readonly checkId: string;\n /** 人读 progress 与 output 使用的非空名称。 */\n readonly displayName: string;\n /** Check-owned declarative options;默认 Check 的嵌套 branch 以普通对象组合替换。 */\n readonly options?: AuthoredOptions;\n /** 可执行节点的 callback;省略时此节点只承载递归 children。 */\n execution?(\n this: void,\n context: CheckExecutionContext<PreparedOptions>\n ): CheckResult | Promise<CheckResult>;\n /** 继承 scheduling context 的 child Checks,不会单独形成 container result。 */\n readonly checks?: readonly Check[];\n /** 直接 prerequisite Check IDs,或对父 dependency collection 的显式 edit。 */\n readonly dependsOn?: InheritableCheckCollection<string>;\n /** 此 Check 及其 descendants 的最大并行预算。 */\n readonly maxParallel?: number;\n /** 共享资源名称,或对父 mutex collection 的显式 edit。 */\n readonly mutex?: InheritableCheckCollection<string>;\n /** 已结算 Check 的人读可见性;可执行节点默认 `always`。 */\n readonly visibility?: CheckVisibility;\n}\n\n/**\n * 判断两个 options shape 是否互相可赋值;互相可赋值时 execution 不需要 preparation 转换。\n */\ntype HasSameOptionsShape<AuthoredOptions extends object, PreparedOptions extends object> = [\n AuthoredOptions\n] extends [PreparedOptions]\n ? [PreparedOptions] extends [AuthoredOptions]\n ? true\n : false\n : false;\n\n/** Prepared shape 不同时,preflight 是建立安全转换的必填边界。 */\ntype CheckPreflightField<AuthoredOptions extends object, PreparedOptions extends object> =\n HasSameOptionsShape<AuthoredOptions, PreparedOptions> extends true\n ? Readonly<{ readonly preflight?: CheckPreflight<AuthoredOptions, PreparedOptions> }>\n : Readonly<{ readonly preflight: CheckPreflight<AuthoredOptions, PreparedOptions> }>;\n\n/**\n * Project Definition 中的普通递归 Check authoring value。\n *\n * @typeParam AuthoredOptions - Definition 中的 declarative options shape。\n * @typeParam PreparedOptions - preflight 后 callback 接收的 invocation-local options shape。\n * @remarks Definition 只闭合 authored JSON options;preflight 在同一 Run 的所有 execution 前作为全局\n * barrier 执行。`PreparedOptions` 与 `AuthoredOptions` 不同时必须提供 preflight;同形时可以省略。它不进入\n * declarative fingerprint 或 machine output。\n */\nexport type Check<\n AuthoredOptions extends object = object,\n PreparedOptions extends object = AuthoredOptions\n> = CheckBase<AuthoredOptions, PreparedOptions> &\n CheckPreflightField<AuthoredOptions, PreparedOptions>;\n\nexport type EmptyCheckOptions = Readonly<Record<never, never>>;\n\n/**\n * 防止宽泛的 parser 标注擦除 `PromiseLike`。canonical `then` field 可以保存 JSON data,\n * 但不能保存使该值成为 thenable 的 callable。\n */\ntype NonThenableData = Readonly<{ readonly then?: CanonicalJsonValue }>;\n\n/**\n * 将 canonical dependency data 还原为 provider final-data shape 的同步 parser。\n *\n * @typeParam FinalData - provider 在 `passed`/`failed` result 中声明的 final-data shape。\n * @remarks Product 不调用此 parser;provider 负责不受信任或跨版本 data 的业务验证。\n */\nexport type CheckDataParser<FinalData extends object = object> = (\n this: void,\n data: CanonicalJsonObject\n) => FinalData & NonThenableData;\n\ntype CheckAuthoringBase<\n Id extends string,\n AuthoredOptions extends object,\n PreparedOptions extends object\n> = Omit<CheckBase<AuthoredOptions, PreparedOptions>, \"checkId\" | \"execution\" | \"options\"> &\n CheckPreflightField<AuthoredOptions, PreparedOptions> &\n Readonly<{ readonly checkId: Id }>;\n\ninterface OrdinaryCheckFields<PreparedOptions extends object> {\n execution?(\n this: void,\n context: CheckExecutionContext<PreparedOptions>\n ): CheckResult | Promise<CheckResult>;\n readonly parseData?: never;\n}\n\nexport type CheckWithOptions<\n Id extends string,\n AuthoredOptions extends object,\n PreparedOptions extends object = AuthoredOptions\n> = CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n OrdinaryCheckFields<PreparedOptions> &\n Readonly<{\n readonly options: AuthoredOptions;\n }>;\n\nexport type CheckWithoutOptions<Id extends string> = CheckAuthoringBase<\n Id,\n EmptyCheckOptions,\n EmptyCheckOptions\n> &\n OrdinaryCheckFields<EmptyCheckOptions> &\n Readonly<{\n readonly options?: never;\n }>;\n\ninterface TypedCheckFields<PreparedOptions extends object, Parser extends CheckDataParser> {\n /**\n * 将 canonical runtime data 还原为 provider data。\n *\n * 启发式边界:同版本且受信任的 provider 若由测试保证 data shape,可仅将它实现为\n * identity/type anchor。这不验证 JavaScript 或基于 cast 的 producer、历史或跨版本 artifact,\n * 也不验证不受信任输入。\n */\n readonly parseData: Parser;\n\n execution(\n this: void,\n context: CheckExecutionContext<PreparedOptions>\n ): CheckResult<NoInfer<ReturnType<Parser>>> | Promise<CheckResult<NoInfer<ReturnType<Parser>>>>;\n}\n\nexport type TypedCheckWithOptions<\n Id extends string,\n AuthoredOptions extends object,\n Parser extends CheckDataParser,\n PreparedOptions extends object = AuthoredOptions\n> = CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n TypedCheckFields<PreparedOptions, Parser> &\n Readonly<{\n readonly options: AuthoredOptions;\n }>;\n\nexport type TypedCheckWithoutOptions<\n Id extends string,\n Parser extends CheckDataParser\n> = CheckAuthoringBase<Id, EmptyCheckOptions, EmptyCheckOptions> &\n TypedCheckFields<EmptyCheckOptions, Parser> &\n Readonly<{\n readonly options?: never;\n }>;\n\n/**\n * 定义一个 Check,同时保留 literal `checkId`、options 与 typed-provider parser 的 inference。\n *\n * @remarks 此函数负责 authoring inference;{@link run} 负责 Project Definition validation。\n * @example 定义带 options、Records 与 messages 的自定义 Check\n * ```ts\n * function hasValidLicensePolicyOptions(options: object): boolean {\n * const denied: unknown = Reflect.get(options, \"denied\");\n * return (\n * Object.keys(options).length === 1 &&\n * Object.hasOwn(options, \"denied\") &&\n * Array.isArray(denied) &&\n * denied.every((license) => typeof license === \"string\")\n * );\n * }\n *\n * const licensePolicy = defineCheck({\n * checkId: \"license-policy\",\n * displayName: \"License policy\",\n * options: { denied: [\"GPL-3.0-only\"] },\n * preflight(options) {\n * return hasValidLicensePolicyOptions(options)\n * ? { status: \"success\", preparedOptions: options }\n * : { status: \"failure\", action: \"block\", reason: { code: \"invalid-options\" } };\n * },\n * visibility: \"attention\",\n * execution({ options, records, signal }) {\n * if (signal.aborted) return { status: \"unavailable\", reason: { code: \"cancelled\" } };\n *\n * const deniedCount = options.denied.length;\n * if (deniedCount > 0) {\n * records.report({ id: \"denied-license\" }, { count: deniedCount });\n * return {\n * status: \"failed\",\n * data: { deniedCount },\n * messages: [{ level: \"warning\", code: \"denied-license\", message: \"Denied licenses found.\" }]\n * };\n * }\n * return { status: \"passed\", data: { deniedCount: 0 } };\n * }\n * });\n * ```\n */\nexport function defineCheck<\n const Id extends string,\n AuthoredOptions extends object,\n PreparedOptions extends object = AuthoredOptions\n>(\n value: CheckWithOptions<Id, AuthoredOptions, PreparedOptions>\n): CheckWithOptions<Id, AuthoredOptions, PreparedOptions>;\nexport function defineCheck<const Id extends string>(\n value: CheckWithoutOptions<Id>\n): CheckWithoutOptions<Id>;\nexport function defineCheck<\n const Id extends string,\n AuthoredOptions extends object,\n const Parser extends CheckDataParser,\n PreparedOptions extends object = AuthoredOptions\n>(\n value: TypedCheckWithOptions<Id, AuthoredOptions, Parser, PreparedOptions>\n): TypedCheckWithOptions<Id, AuthoredOptions, Parser, PreparedOptions>;\nexport function defineCheck<const Id extends string, const Parser extends CheckDataParser>(\n value: TypedCheckWithoutOptions<Id, Parser>\n): TypedCheckWithoutOptions<Id, Parser>;\nexport function defineCheck(value: Check): Check {\n return value;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"check.mjs","sourceRoot":"","sources":["../../../src/check/check.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EACL,OAAO,EACP,0BAA0B,EAC1B,gCAAgC,EACjC,MAAM,2BAA2B,CAAC;AAmwBnC,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC3B,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { CanonicalJsonObject, CanonicalJsonValue } from \"../data-boundary/canonical-json.ts\";\nimport type { InheritableCheckCollection } from \"./inherited-collection.ts\";\nimport type { CheckFlagEnablement } from \"./flag-enablement.ts\";\nimport type { CheckProjectContext } from \"./project-context.ts\";\nimport { registerHandoffProviderIdentity } from \"./handoff-provider-identity.ts\";\n\nexport {\n inherit,\n isInheritedCheckCollection,\n snapshotInheritedCheckCollection\n} from \"./inherited-collection.ts\";\nexport type {\n InheritCheckCollectionInput,\n InheritableCheckCollection,\n InheritedCheckCollection\n} from \"./inherited-collection.ts\";\n\n/** Check 无法给出 final data 时返回的受控 reason code。 */\nexport type CheckReason = Readonly<{\n /** 由 owning Check 定义、供调用方诊断的稳定 code。 */\n readonly code: string;\n}>;\n\n/** `not-applicable` Check result 的可选 reason。 */\nexport type CheckNotApplicableReason = CheckReason;\n/** author callback 明确返回 `unavailable` 时必须提供的 reason。 */\nexport type CheckDeclaredUnavailableReason = CheckReason;\n\n/** `unavailable` Check outcome 的 reason;可列出导致当前 Check 不可用的上游 Check。 */\nexport type CheckUnavailableReason = Readonly<{\n /** 由当前 Check 或 Product 边界给出的受控原因。 */\n readonly code: string;\n /** 仅在上游关系有助于定位时给出的相关 Check IDs。 */\n readonly checkIds?: readonly string[];\n}>;\n\n/** 终端 Check message 的 presentation severity。 */\nexport type CheckMessageLevel = \"info\" | \"warning\" | \"error\";\n\n/** 由 Check author 附加到 terminal result 的补充消息。 */\nexport interface CheckMessage {\n /** 人读 presentation 使用的 severity。 */\n readonly level: CheckMessageLevel;\n /** owning Check namespace 内的稳定 message code。 */\n readonly code: string;\n /** 非空消息正文;Product 保留 author 提供的字符串。 */\n readonly message: string;\n}\n\n/** 可附加到每个 {@link CheckResult} branch 的有序 terminal messages。 */\nexport interface CheckResultMessages {\n /** 省略、`undefined` 或空数组都表示没有 supplemental messages。 */\n readonly messages?: readonly CheckMessage[] | undefined;\n}\n\ntype HandoffForbidden = Readonly<{ readonly handoff?: never }>;\n\n/** Check Task 在 admission 到 settlement 期间持有的静态 named resource units。 */\nexport type CheckResourceClaims = Readonly<Record<string, number>>;\n\nexport type { CheckFlagCondition, CheckFlagEnablement } from \"./flag-enablement.ts\";\nexport type { ProjectChanges } from \"./project-changes.ts\";\nexport type { CheckProjectContext } from \"./project-context.ts\";\n\n/**\n * Check callback 的 terminal result。\n *\n * @typeParam FinalData - `passed` 或 `failed` 时保留为 canonical final data 的业务对象。\n * @remarks `not-applicable` 与 `unavailable` 不携带 final data;普通 callback、Record 或取消失败由\n * Product 转换为 `unavailable`,而不是抛出为 Run 的成功结果。\n */\nexport type CheckResult<\n FinalData extends object = object,\n Handoff extends object = never\n> = Readonly<\n (\n | ([Handoff] extends [never]\n ? {\n /** Check 已产生通过的 final data。 */\n readonly status: \"passed\";\n /** 此 Check 的主要终态事实。 */\n readonly data: FinalData;\n } & HandoffForbidden\n : {\n /** Check 已产生通过的 final data。 */\n readonly status: \"passed\";\n /** 此 Check 的主要终态事实。 */\n readonly data: FinalData;\n /** 仅由声明 `handoff: true` 的 provider 交接给 direct dependents 的 reference。 */\n readonly handoff: Handoff;\n })\n | ({\n /** Check 已产生失败的 final data。 */\n readonly status: \"failed\";\n /** 此 Check 的主要终态事实。 */\n readonly data: FinalData;\n } & HandoffForbidden)\n | ({\n /** Check 在当前 invocation 中不适用。 */\n readonly status: \"not-applicable\";\n /** 不适用的可选受控原因。 */\n readonly reason?: CheckNotApplicableReason;\n } & HandoffForbidden)\n | ({\n /** Check 不能提供 terminal data。 */\n readonly status: \"unavailable\";\n /** 不可用的受控原因。 */\n readonly reason: CheckDeclaredUnavailableReason;\n } & HandoffForbidden)\n ) &\n CheckResultMessages\n>;\n\n/** Check callback 的同步或异步 terminal result。 */\ntype CheckExecutionResult<FinalData extends object = object, Handoff extends object = never> =\n | CheckResult<FinalData, Handoff>\n | Promise<CheckResult<FinalData, Handoff>>;\n\ndeclare const CHECK_HANDOFF_PROVIDER_BRAND: unique symbol;\n\n/**\n * A Check returned by `defineCheck({ handoff: true })`. The type-only brand lets\n * `dependencies.get(provider)` infer the reference returned by that provider.\n *\n * @internal This is used by public callback types but authors never construct it.\n */\nexport type CheckHandoffProvider<\n Id extends string = string,\n Handoff extends object = object\n> = Readonly<{\n readonly checkId: Id;\n readonly handoff: true;\n readonly [CHECK_HANDOFF_PROVIDER_BRAND]: Handoff;\n}>;\n\n/** 已 materialize 到 Core snapshot 的 Check terminal outcome。 */\nexport type CheckOutcome = Readonly<\n | {\n /** 已 materialize 的通过 outcome。 */\n readonly status: \"passed\";\n /** 已 canonicalize 的 primary final fact。 */\n readonly data: CanonicalJsonObject;\n }\n | {\n /** 已 materialize 的失败 outcome。 */\n readonly status: \"failed\";\n /** 已 canonicalize 的 primary final fact。 */\n readonly data: CanonicalJsonObject;\n }\n | {\n /** 已 materialize 的不适用 outcome。 */\n readonly status: \"not-applicable\";\n /** 不适用的可选受控原因。 */\n readonly reason?: CheckNotApplicableReason;\n }\n | {\n /** 已 materialize 的不可用 outcome。 */\n readonly status: \"unavailable\";\n /** 包含相关 upstream Check IDs 的受控原因。 */\n readonly reason: CheckUnavailableReason;\n }\n>;\n\n/** 递归只读 Check callback options,同时保留 array/tuple 形状和非 object leaf 类型。 */\nexport type DeepReadonly<Value> = Value extends readonly unknown[]\n ? { readonly [Key in keyof Value]: DeepReadonly<Value[Key]> }\n : Value extends object\n ? { readonly [Key in keyof Value]: DeepReadonly<Value[Key]> }\n : Value;\n\n/** callback 写入 supplemental Record 时的 Check-local identity。 */\ninterface RecordIdentityInput {\n /** 在当前 Check 内唯一的 Record ID。 */\n readonly id: string;\n}\n\n/** callback 写入 supplemental Records 的 Product-owned reporter。 */\ninterface CheckRecordReporter {\n /** 记录一个补充事实;它不决定 Check 的 terminal status。 */\n report(identity: RecordIdentityInput, data: object): void;\n}\n\n/** 读取已声明 direct relation final data 时的失败原因。 */\nexport type DependencyReadError = Readonly<\n | {\n /** 当前 Check 未声明所请求的 direct relation ID。 */\n readonly code: \"dependency-not-declared\";\n /** 被拒绝的 direct relation ID。 */\n readonly checkId: string;\n }\n | {\n /** 已声明 upstream 没有可读取的 final data。 */\n readonly code: \"upstream-data-unavailable\";\n /** 没有 final data 的 direct relation ID。 */\n readonly checkId: string;\n /** 阻止 readback 的 upstream terminal status。 */\n readonly status: \"not-applicable\" | \"unavailable\";\n }\n>;\n\n/** {@link CheckDependencies.get} 的受控 readback 结果。 */\nexport type DependencyReadResult = Readonly<\n | {\n /** 成功读取 direct relation final data。 */\n readonly ok: true;\n /** 被读取的 direct relation ID。 */\n readonly checkId: string;\n /** upstream 已结算为 `passed` 或 `failed` 的 status。 */\n readonly status: \"passed\" | \"failed\";\n /** 已与原对象脱离的上游依赖终态数据。 */\n readonly data: CanonicalJsonObject;\n }\n | {\n /** direct relation data 不可读取。 */\n readonly ok: false;\n /** 失败的授权或 upstream-data reason。 */\n readonly error: DependencyReadError;\n }\n>;\n\n/** `dependsOn` provider-object handoff read 的受控结果。 */\nexport type DependencyHandoffReadResult<Id extends string, Handoff extends object> = Readonly<\n | {\n /** 同一 execution graph 中接受的 provider handoff。 */\n readonly ok: true;\n readonly checkId: Id;\n readonly status: \"passed\";\n /** Core-owned canonical provider final data。 */\n readonly data: CanonicalJsonObject;\n /** Provider 交接且未由 Product clone、freeze 或 serialize 的引用。 */\n readonly handoff: Handoff;\n }\n | {\n readonly ok: false;\n readonly error: Readonly<\n | {\n /** 当前 Check 未将 provider 声明为 direct `dependsOn`。 */\n readonly code: \"dependency-not-declared\";\n readonly checkId: string;\n }\n | {\n /** 已授权 provider 没有与其 Definition-internal identity 对应的已接受 passed handoff。 */\n readonly code: \"upstream-handoff-unavailable\";\n readonly checkId: string;\n }\n >;\n }\n>;\n\n/** 当前 Check 的一个已规范化直接 relation 及其完整终态事实。 */\nexport type DependencyObservation = Readonly<{\n /** 已规范化、稳定排序的 direct relation ID。 */\n readonly checkId: string;\n /** Core 已结算并冻结的四态 outcome。 */\n readonly outcome: CheckOutcome;\n}>;\n\n/** 当前 Check 的已规范化直接 relation outcomes 的 data reader。 */\nexport interface CheckDependencies {\n /**\n * Reads a `handoff: true` provider's accepted invocation-private handoff.\n *\n * @returns Only an effective direct `dependsOn` provider declared with `handoff: true`, whose\n * Definition-internal identity has accepted `passed` data, returns canonical data plus its typed\n * reference. `observes`, string IDs, lookalikes and unavailable handoffs fail closed without\n * upstream data.\n */\n get<Id extends string, Handoff extends object>(\n provider: CheckHandoffProvider<Id, Handoff>\n ): DependencyHandoffReadResult<Id, Handoff>;\n\n /**\n * 读取一个直接 relation 的 canonical final data。\n *\n * @returns 已声明的 `dependsOn` 或 `observes` relation 且为 `passed`/`failed` 的 Check 返回其 data;\n * 未声明或没有 final data 时返回 `ok: false`,不会授权 transitive Check。\n */\n get(checkId: string): DependencyReadResult;\n\n /**\n * 枚举当前 Check 的全部已规范化 direct relation outcomes。\n *\n * @returns 按有效 direct relation ID 稳定排序、深度冻结的 `{ checkId, outcome }` observations;只含当前\n * Check 显式或继承得到的 `dependsOn` / `observes` relation,不暴露 scheduler 历史、transitive 或未声明\n * Check。\n */\n list(): readonly DependencyObservation[];\n}\n\n/**\n * Check callback 收到的 Product-owned execution context。\n *\n * @typeParam Options - 此 Check preparation 后传给 execution 的 options shape。\n */\nexport interface CheckExecutionContext<Options extends object> {\n /** 当前 Check 的 absolute invocation artifact directory;caller 未授予时为 `null`。 */\n readonly artifactDirectory: string | null;\n /** 读取当前 Check 的已声明 direct relations。 */\n readonly dependencies: CheckDependencies;\n /** 同一次 invocation 内由 Product 统一提供的 identity。 */\n readonly invocationId: string;\n /** 深度只读、canonical 的 invocation-local prepared Check options。 */\n readonly options: DeepReadonly<Options>;\n /** 已规范化的项目根与 flags。 */\n readonly project: CheckProjectContext;\n /** 写入 supplemental Records 的 reporter。 */\n readonly records: CheckRecordReporter;\n /** 本次 invocation 的 cancellation signal。 */\n readonly signal: AbortSignal;\n}\n\n/**\n * 一个 Check 的 callback signature。\n *\n * @typeParam Options - callback 从 context 读取的 prepared options shape。\n * @returns terminal Check result 或其 Promise。\n */\nexport type CheckExecution<Options extends object = object> = (\n this: void,\n context: CheckExecutionContext<Options>\n) => CheckExecutionResult;\n\n/**\n * 在 Check execution 前,可选地为本次 invocation 准备 options。\n *\n * @remarks `signal` 与同一次 callback execution 使用同一个 cancellation signal;`project` 与 execution\n * 收到同一个冻结 project context。实现应在可等待工作中协作退出,而不是留下悬挂 work。bivariant callback\n * 保持具体 options Check 可进入普通递归 Check collection;Product 仍只会用该 Check 自己的 authored options 调用它。精确结果见\n * {@link CheckPreparationResult}。\n */\nexport type CheckPreparation<\n AuthoredOptions extends object = object,\n PreparedOptions extends object = AuthoredOptions\n> = {\n bivarianceHack(\n this: void,\n options: DeepReadonly<AuthoredOptions>,\n signal: AbortSignal,\n project?: CheckProjectContext\n ): CheckPreparationResult<PreparedOptions> | Promise<CheckPreparationResult<PreparedOptions>>;\n}[\"bivarianceHack\"];\n\n/**\n * Check-owned preparation 的判别结果。\n *\n * `failure/block` 不允许 fallback,直接以 owning reason 结算为 unavailable;`failure/continue` 必须给出\n * fallback 并继续 execution。两种进入 execution 的值都只属于本次 invocation,Product canonicalize/freeze\n * 后传递,不会改写 Definition 中 authored options。两个 failure 分支都必须给出 reason;continue reason\n * 是 Check-owned diagnostic identity,当前不会单独 materialize 为 outcome,调用方通过 messages 与后续\n * outcome 观察结果;block 物理上不含 fallback 字段。\n */\nexport type CheckPreparationResult<PreparedOptions extends object = object> = Readonly<\n | {\n readonly status: \"success\";\n readonly preparedOptions: PreparedOptions;\n readonly messages?: readonly CheckMessage[];\n }\n | {\n readonly status: \"failure\";\n readonly action: \"block\";\n readonly reason: CheckDeclaredUnavailableReason;\n readonly messages?: readonly CheckMessage[];\n }\n | {\n readonly status: \"failure\";\n readonly action: \"continue\";\n readonly fallback: PreparedOptions;\n readonly reason: CheckReason;\n readonly messages?: readonly CheckMessage[];\n }\n>;\n\n/**\n * 普通递归 Check authoring value 的共享字段。\n *\n * @typeParam AuthoredOptions - Definition 中的 declarative options shape。\n * @typeParam PreparedOptions - preparation 后 callback 接收的 invocation-local options shape。\n * @remarks 该值可以同时有 `execute` 和 `checks`;只有 executable node 产生 final Check fact。\n */\ninterface CheckBase<AuthoredOptions extends object, _PreparedOptions extends object> {\n /** 在 Definition 内唯一的 stable Check ID。 */\n readonly checkId: string;\n /** 人读 progress 与 output 使用的非空名称。 */\n readonly displayName: string;\n /** Check-owned declarative options;默认 Check 的嵌套 branch 以普通对象组合替换。 */\n readonly options?: AuthoredOptions;\n /** 仅当多 flag presence predicate 匹配时启用 executable Check;省略时始终启用。 */\n readonly enabledByFlags?: CheckFlagEnablement;\n /** `true` declares an invocation-private handoff on this executable Check. */\n readonly handoff?: true;\n /** 继承 scheduling context 的 child Checks,不会单独形成 container result。 */\n readonly checks?: readonly Check[];\n /** 必须全部 `passed` 才能开始当前 Check author work 的直接 prerequisite Check IDs。 */\n readonly dependsOn?: InheritableCheckCollection<string>;\n /** 等待任意 terminal outcome 并授权当前 Check readback 的直接 observation Check IDs。 */\n readonly observes?: InheritableCheckCollection<string>;\n /** 此 Check 及其 descendants 的最大并行预算。 */\n readonly maxParallel?: number;\n /** 同一 ready admission 层级中的静态优先级;省略时继承并最终规范化为 `0`。 */\n readonly admissionPriority?: number;\n /** 共享资源名称,或对父 mutex collection 的显式 edit。 */\n readonly mutex?: InheritableCheckCollection<string>;\n /** 静态 named resource claims;省略时继承,显式 mapping 完整替换。 */\n readonly resourceClaims?: CheckResourceClaims;\n}\n\ninterface ExecutableCheckFields<\n PreparedOptions extends object,\n ExecutionResult = CheckExecutionResult\n> {\n /** 可执行节点的 callback;拥有本字段的节点产生一个 terminal Check fact。 */\n execute(this: void, context: CheckExecutionContext<PreparedOptions>): ExecutionResult;\n /**\n * `true` 时,progress renderer 不保留没有 accepted Record 或 message 的 passed row;运行中与所有保留的\n * 终态 row 都无编号。该 policy 只属于 executable Check,不继承给 child Checks。\n */\n readonly omitQuietPassedRow?: true;\n}\n\n/** Container 只承载 children 与 scheduling,不能执行或设置 executable presentation policy。 */\ntype ContainerCheckFields = Readonly<{ execute?: never; omitQuietPassedRow?: never }>;\n\n/**\n * 判断两个 options shape 是否互相可赋值;互相可赋值时 execution 不需要 preparation 转换。\n */\ntype HasSameOptionsShape<AuthoredOptions extends object, PreparedOptions extends object> = [\n AuthoredOptions\n] extends [PreparedOptions]\n ? [PreparedOptions] extends [AuthoredOptions]\n ? true\n : false\n : false;\n\n/** Prepared shape 不同时,preparation 是建立安全转换的必填边界。 */\ntype CheckPreparationField<AuthoredOptions extends object, PreparedOptions extends object> =\n HasSameOptionsShape<AuthoredOptions, PreparedOptions> extends true\n ? Readonly<{ readonly prepare?: CheckPreparation<AuthoredOptions, PreparedOptions> }>\n : Readonly<{ readonly prepare: CheckPreparation<AuthoredOptions, PreparedOptions> }>;\n\n/**\n * Project Definition 中的普通递归 Check authoring value。\n *\n * @typeParam AuthoredOptions - Definition 中的 declarative options shape。\n * @typeParam PreparedOptions - preparation 后 callback 接收的 invocation-local options shape。\n * @remarks Definition 只闭合 authored JSON options;每个 admitted Check 先在自身 Task lifecycle 内执行\n * preparation,随后才执行 callback。`PreparedOptions` 与 `AuthoredOptions` 不同时必须提供 preparation;同形时可以\n * 省略。它不进入 declarative fingerprint 或 machine output。\n */\nexport type Check<\n AuthoredOptions extends object = object,\n PreparedOptions extends object = AuthoredOptions\n> = CheckBase<AuthoredOptions, PreparedOptions> &\n CheckPreparationField<AuthoredOptions, PreparedOptions> &\n (\n | ExecutableCheckFields<\n PreparedOptions,\n CheckExecutionResult | CheckExecutionResult<Readonly<Record<never, never>>, object>\n >\n | ContainerCheckFields\n );\n\nexport type EmptyCheckOptions = Readonly<Record<never, never>>;\n\n/**\n * 防止宽泛的 parser 标注擦除 `PromiseLike`。canonical `then` field 可以保存 JSON data,\n * 但不能保存使该值成为 thenable 的 callable。\n */\ntype NonThenableData = Readonly<{ readonly then?: CanonicalJsonValue }>;\n\n/**\n * 将 canonical direct-relation data 还原为 provider final-data shape 的同步 parser。\n *\n * @typeParam FinalData - provider 在 `passed`/`failed` result 中声明的 final-data shape。\n * @remarks Product 不调用此 parser;provider 负责不受信任或跨版本 data 的业务验证。\n */\nexport type CheckDataParser<FinalData extends object = object> = (\n this: void,\n data: CanonicalJsonObject\n) => FinalData & NonThenableData;\n\ntype CheckAuthoringBase<\n Id extends string,\n AuthoredOptions extends object,\n PreparedOptions extends object\n> = Omit<CheckBase<AuthoredOptions, PreparedOptions>, \"checkId\" | \"handoff\" | \"options\"> &\n CheckPreparationField<AuthoredOptions, PreparedOptions> &\n Readonly<{ readonly checkId: Id }>;\n\n/** Ordinary Check branches cannot declare typed-provider parsing or private handoff. */\ntype OrdinaryCheckRestrictions = HandoffForbidden & Readonly<{ parseData?: undefined }>;\n\ntype OrdinaryCheckFields<PreparedOptions extends object> =\n | (ExecutableCheckFields<PreparedOptions> & OrdinaryCheckRestrictions)\n | (ContainerCheckFields & OrdinaryCheckRestrictions);\n\nexport type CheckWithOptions<\n Id extends string,\n AuthoredOptions extends object,\n PreparedOptions extends object = AuthoredOptions\n> = CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n OrdinaryCheckFields<PreparedOptions> &\n Readonly<{\n readonly options: AuthoredOptions;\n }>;\n\nexport type CheckWithoutOptions<Id extends string> = CheckAuthoringBase<\n Id,\n EmptyCheckOptions,\n EmptyCheckOptions\n> &\n OrdinaryCheckFields<EmptyCheckOptions> &\n Readonly<{\n readonly options?: never;\n }>;\n\ninterface TypedCheckFields<\n PreparedOptions extends object,\n Parser extends CheckDataParser\n> extends ExecutableCheckFields<\n PreparedOptions,\n CheckExecutionResult<NoInfer<ReturnType<Parser>>>\n> {\n /**\n * 将 canonical runtime data 还原为 provider data。\n *\n * 启发式边界:同版本且受信任的 provider 若由测试保证 data shape,可仅将它实现为\n * identity/type anchor。这不验证 JavaScript 或基于 cast 的 producer、历史或跨版本 artifact,\n * 也不验证不受信任输入。\n */\n readonly parseData: Parser;\n\n readonly handoff?: never;\n}\n\ninterface HandoffCheckFields<\n PreparedOptions extends object,\n Handoff extends object\n> extends ExecutableCheckFields<PreparedOptions, CheckExecutionResult<object, Handoff>> {\n readonly handoff: true;\n readonly parseData?: undefined;\n}\n\ninterface TypedHandoffCheckFields<\n PreparedOptions extends object,\n Parser extends CheckDataParser,\n Handoff extends object\n> extends ExecutableCheckFields<\n PreparedOptions,\n CheckExecutionResult<NoInfer<ReturnType<Parser>>, Handoff>\n> {\n readonly handoff: true;\n readonly parseData: Parser;\n}\n\n/** Extracts the private reference type from an already-validated passed terminal result. */\ntype HandoffFromTerminalResult<Result> =\n Extract<Awaited<Result>, { readonly status: \"passed\" }> extends {\n readonly handoff: infer Handoff;\n }\n ? Handoff extends object\n ? Handoff\n : never\n : never;\n\ntype PassedHandoffResult<Result> = Extract<Awaited<Result>, { readonly status: \"passed\" }>;\n\n/** Every passed branch must accept the complete inferred handoff type, not just one union member. */\ntype PassedHandoffBranchIsConsistent<Passed, Handoff> = Passed extends {\n readonly handoff: infer BranchHandoff;\n}\n ? [Handoff] extends [BranchHandoff]\n ? true\n : false\n : false;\n\ntype HandoffTerminalResultConstraint<Result> =\n false extends PassedHandoffBranchIsConsistent<\n PassedHandoffResult<Result>,\n HandoffFromTerminalResult<Result>\n >\n ? never\n : unknown;\n\ntype HandoffExecution<PreparedOptions extends object, FinalData extends object = object> = (\n this: void,\n context: CheckExecutionContext<PreparedOptions>\n) => CheckExecutionResult<FinalData, object>;\n\nexport type TypedCheckWithOptions<\n Id extends string,\n AuthoredOptions extends object,\n Parser extends CheckDataParser,\n PreparedOptions extends object = AuthoredOptions\n> = CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n TypedCheckFields<PreparedOptions, Parser> &\n Readonly<{\n readonly options: AuthoredOptions;\n }>;\n\nexport type TypedCheckWithoutOptions<\n Id extends string,\n Parser extends CheckDataParser\n> = CheckAuthoringBase<Id, EmptyCheckOptions, EmptyCheckOptions> &\n TypedCheckFields<EmptyCheckOptions, Parser> &\n Readonly<{\n readonly options?: never;\n }>;\n\nexport type HandoffCheckWithOptions<\n Id extends string,\n AuthoredOptions extends object,\n Handoff extends object,\n PreparedOptions extends object = AuthoredOptions\n> = CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n HandoffCheckFields<PreparedOptions, Handoff> &\n Readonly<{ readonly options: AuthoredOptions }>;\n\nexport type HandoffCheckWithoutOptions<\n Id extends string,\n Handoff extends object\n> = CheckAuthoringBase<Id, EmptyCheckOptions, EmptyCheckOptions> &\n HandoffCheckFields<EmptyCheckOptions, Handoff> &\n Readonly<{ readonly options?: never }>;\n\nexport type TypedHandoffCheckWithOptions<\n Id extends string,\n AuthoredOptions extends object,\n Parser extends CheckDataParser,\n Handoff extends object,\n PreparedOptions extends object = AuthoredOptions\n> = CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n TypedHandoffCheckFields<PreparedOptions, Parser, Handoff> &\n Readonly<{ readonly options: AuthoredOptions }>;\n\nexport type TypedHandoffCheckWithoutOptions<\n Id extends string,\n Parser extends CheckDataParser,\n Handoff extends object\n> = CheckAuthoringBase<Id, EmptyCheckOptions, EmptyCheckOptions> &\n TypedHandoffCheckFields<EmptyCheckOptions, Parser, Handoff> &\n Readonly<{ readonly options?: never }>;\n\n/**\n * 定义一个 Check,同时保留 literal `checkId`、options 与 typed-provider parser 的 inference。\n *\n * @remarks 此函数负责 authoring inference;{@link run} 负责 Project Definition validation。\n * @example 定义带 options、Records 与 messages 的自定义 Check\n * ```ts\n * import { defineCheck, defineConfig, run } from \"@zxyycom/vibe-check\";\n *\n * function hasValidLicensePolicyOptions(options: object): boolean {\n * const denied: unknown = Reflect.get(options, \"denied\");\n * return (\n * Object.keys(options).length === 1 &&\n * Object.hasOwn(options, \"denied\") &&\n * Array.isArray(denied) &&\n * denied.every((license) => typeof license === \"string\")\n * );\n * }\n *\n * const licensePolicy = defineCheck({\n * checkId: \"license-policy\",\n * displayName: \"License policy\",\n * options: { denied: [\"GPL-3.0-only\"] },\n * prepare(options) {\n * return hasValidLicensePolicyOptions(options)\n * ? { status: \"success\", preparedOptions: options }\n * : { status: \"failure\", action: \"block\", reason: { code: \"invalid-options\" } };\n * },\n * omitQuietPassedRow: true,\n * execute({ options, records, signal }) {\n * if (signal.aborted) return { status: \"unavailable\", reason: { code: \"cancelled\" } };\n *\n * const deniedCount = options.denied.length;\n * if (deniedCount > 0) {\n * records.report({ id: \"denied-license\" }, { count: deniedCount });\n * return {\n * status: \"failed\",\n * data: { deniedCount },\n * messages: [{ level: \"warning\", code: \"denied-license\", message: \"Denied licenses found.\" }]\n * };\n * }\n * return { status: \"passed\", data: { deniedCount: 0 } };\n * }\n * });\n * ```\n */\nexport function defineCheck<\n const Id extends string,\n AuthoredOptions extends object,\n const Execution extends HandoffExecution<PreparedOptions>,\n PreparedOptions extends object = AuthoredOptions\n>(\n value: CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n Readonly<{\n readonly handoff: true;\n readonly options: AuthoredOptions;\n readonly parseData?: undefined;\n readonly execute: Execution;\n }> &\n HandoffTerminalResultConstraint<ReturnType<Execution>>\n): HandoffCheckWithOptions<\n Id,\n AuthoredOptions,\n HandoffFromTerminalResult<ReturnType<Execution>>,\n PreparedOptions\n> &\n CheckHandoffProvider<Id, HandoffFromTerminalResult<ReturnType<Execution>>>;\nexport function defineCheck<\n const Id extends string,\n const Execution extends HandoffExecution<EmptyCheckOptions>\n>(\n value: CheckAuthoringBase<Id, EmptyCheckOptions, EmptyCheckOptions> &\n Readonly<{\n readonly handoff: true;\n readonly options?: never;\n readonly parseData?: undefined;\n readonly execute: Execution;\n }> &\n HandoffTerminalResultConstraint<ReturnType<Execution>>\n): HandoffCheckWithoutOptions<Id, HandoffFromTerminalResult<ReturnType<Execution>>> &\n CheckHandoffProvider<Id, HandoffFromTerminalResult<ReturnType<Execution>>>;\nexport function defineCheck<\n const Id extends string,\n AuthoredOptions extends object,\n const Parser extends CheckDataParser,\n const Execution extends HandoffExecution<PreparedOptions, NoInfer<ReturnType<Parser>>>,\n PreparedOptions extends object = AuthoredOptions\n>(\n value: CheckAuthoringBase<Id, AuthoredOptions, PreparedOptions> &\n Readonly<{\n readonly handoff: true;\n readonly options: AuthoredOptions;\n readonly parseData: Parser;\n readonly execute: Execution;\n }> &\n HandoffTerminalResultConstraint<ReturnType<Execution>>\n): TypedHandoffCheckWithOptions<\n Id,\n AuthoredOptions,\n Parser,\n HandoffFromTerminalResult<ReturnType<Execution>>,\n PreparedOptions\n> &\n CheckHandoffProvider<Id, HandoffFromTerminalResult<ReturnType<Execution>>>;\nexport function defineCheck<\n const Id extends string,\n const Parser extends CheckDataParser,\n const Execution extends HandoffExecution<EmptyCheckOptions, NoInfer<ReturnType<Parser>>>\n>(\n value: CheckAuthoringBase<Id, EmptyCheckOptions, EmptyCheckOptions> &\n Readonly<{\n readonly handoff: true;\n readonly options?: never;\n readonly parseData: Parser;\n readonly execute: Execution;\n }> &\n HandoffTerminalResultConstraint<ReturnType<Execution>>\n): TypedHandoffCheckWithoutOptions<Id, Parser, HandoffFromTerminalResult<ReturnType<Execution>>> &\n CheckHandoffProvider<Id, HandoffFromTerminalResult<ReturnType<Execution>>>;\nexport function defineCheck<\n const Id extends string,\n AuthoredOptions extends object,\n PreparedOptions extends object = AuthoredOptions\n>(\n value: CheckWithOptions<Id, AuthoredOptions, PreparedOptions>\n): CheckWithOptions<Id, AuthoredOptions, PreparedOptions>;\nexport function defineCheck<const Id extends string>(\n value: CheckWithoutOptions<Id>\n): CheckWithoutOptions<Id>;\nexport function defineCheck<\n const Id extends string,\n AuthoredOptions extends object,\n const Parser extends CheckDataParser,\n PreparedOptions extends object = AuthoredOptions\n>(\n value: TypedCheckWithOptions<Id, AuthoredOptions, Parser, PreparedOptions>\n): TypedCheckWithOptions<Id, AuthoredOptions, Parser, PreparedOptions>;\nexport function defineCheck<const Id extends string, const Parser extends CheckDataParser>(\n value: TypedCheckWithoutOptions<Id, Parser>\n): TypedCheckWithoutOptions<Id, Parser>;\nexport function defineCheck(value: Check): Check {\n if (value.handoff === true) {\n registerHandoffProviderIdentity(value);\n }\n return value;\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** 构造 `all` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */
|
|
2
|
+
export function all(...conditions) {
|
|
3
|
+
return conditionSet("all", conditions);
|
|
4
|
+
}
|
|
5
|
+
/** 构造 `any` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */
|
|
6
|
+
export function any(...conditions) {
|
|
7
|
+
return conditionSet("any", conditions);
|
|
8
|
+
}
|
|
9
|
+
/** 构造 `none` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */
|
|
10
|
+
export function none(...conditions) {
|
|
11
|
+
return conditionSet("none", conditions);
|
|
12
|
+
}
|
|
13
|
+
/** 构造 `not-all` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */
|
|
14
|
+
export function notAll(...conditions) {
|
|
15
|
+
return conditionSet("not-all", conditions);
|
|
16
|
+
}
|
|
17
|
+
/** 构造 `exactly-one` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */
|
|
18
|
+
export function exactlyOne(...conditions) {
|
|
19
|
+
return conditionSet("exactly-one", conditions);
|
|
20
|
+
}
|
|
21
|
+
/** 构造 `not` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */
|
|
22
|
+
export function not(condition) {
|
|
23
|
+
return { condition, kind: "not" };
|
|
24
|
+
}
|
|
25
|
+
/** 为一个已声明的 project change ID 生成保留 flag token。 */
|
|
26
|
+
export function changeFlag(id) {
|
|
27
|
+
return `vibe-check:change:${id}`;
|
|
28
|
+
}
|
|
29
|
+
function conditionSet(kind, conditions) {
|
|
30
|
+
return { kind, conditions };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=flag-enablement.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flag-enablement.mjs","sourceRoot":"","sources":["../../../src/check/flag-enablement.ts"],"names":[],"mappings":"AAuBA,+DAA+D;AAC/D,MAAM,UAAU,GAAG,CAAC,GAAG,UAAkC;IACvD,OAAO,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,GAAG,CAAC,GAAG,UAAkC;IACvD,OAAO,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,IAAI,CAAC,GAAG,UAAkC;IACxD,OAAO,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,MAAM,CAAC,GAAG,UAAkC;IAC1D,OAAO,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,UAAU,CACxB,GAAG,UAAkC;IAErC,OAAO,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,GAAG,CAAC,SAA6B;IAC/C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,UAAU,CAA0B,EAAM;IACxD,OAAO,qBAAqB,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CACnB,IAAU,EACV,UAAkC;IAElC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["/** 一个递归 flag presence 条件表达式。字符串是唯一 leaf;operator 保留 author child 顺序和 multiplicity。 */\nexport type CheckFlagCondition =\n | string\n | Readonly<{\n readonly kind: \"all\" | \"any\" | \"none\" | \"not-all\" | \"exactly-one\";\n readonly conditions: readonly [CheckFlagCondition, ...CheckFlagCondition[]];\n }>\n | Readonly<{\n readonly kind: \"not\";\n readonly condition: CheckFlagCondition;\n }>;\n\ntype CheckFlagConditionSetKind = \"all\" | \"any\" | \"none\" | \"not-all\" | \"exactly-one\";\ntype NonEmptyFlagConditions = readonly [CheckFlagCondition, ...CheckFlagCondition[]];\ntype CheckFlagConditionSet<Kind extends CheckFlagConditionSetKind> = Readonly<{\n readonly kind: Kind;\n readonly conditions: NonEmptyFlagConditions;\n}>;\ntype CheckFlagNegation = Readonly<{\n readonly kind: \"not\";\n readonly condition: CheckFlagCondition;\n}>;\n\n/** 构造 `all` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */\nexport function all(...conditions: NonEmptyFlagConditions): CheckFlagConditionSet<\"all\"> {\n return conditionSet(\"all\", conditions);\n}\n\n/** 构造 `any` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */\nexport function any(...conditions: NonEmptyFlagConditions): CheckFlagConditionSet<\"any\"> {\n return conditionSet(\"any\", conditions);\n}\n\n/** 构造 `none` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */\nexport function none(...conditions: NonEmptyFlagConditions): CheckFlagConditionSet<\"none\"> {\n return conditionSet(\"none\", conditions);\n}\n\n/** 构造 `not-all` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */\nexport function notAll(...conditions: NonEmptyFlagConditions): CheckFlagConditionSet<\"not-all\"> {\n return conditionSet(\"not-all\", conditions);\n}\n\n/** 构造 `exactly-one` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */\nexport function exactlyOne(\n ...conditions: NonEmptyFlagConditions\n): CheckFlagConditionSet<\"exactly-one\"> {\n return conditionSet(\"exactly-one\", conditions);\n}\n\n/** 构造 `not` 条件;Definition 仍负责 validation、snapshot 与 freeze。 */\nexport function not(condition: CheckFlagCondition): CheckFlagNegation {\n return { condition, kind: \"not\" };\n}\n\n/** 为一个已声明的 project change ID 生成保留 flag token。 */\nexport function changeFlag<const Id extends string>(id: Id): `vibe-check:change:${Id}` {\n return `vibe-check:change:${id}`;\n}\n\nfunction conditionSet<Kind extends CheckFlagConditionSetKind>(\n kind: Kind,\n conditions: NonEmptyFlagConditions\n): CheckFlagConditionSet<Kind> {\n return { kind, conditions };\n}\n\n/** executable Check 的 flag 选择控制。 */\nexport interface CheckFlagEnablement {\n readonly when: CheckFlagCondition;\n /**\n * 条件命中时是否启动本 Check 的传递 `dependsOn` prerequisite;省略时只选择直接命中 Check。\n * `observes` 不参与此选择,且 dependency 自己的 flag 条件不会阻止已启动 prerequisite。\n */\n readonly propagateDependsOn?: true;\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const handoffProviderIdentities = new WeakMap();
|
|
2
|
+
class HandoffProviderIdentityValue {
|
|
3
|
+
}
|
|
4
|
+
/** Registers the identity that makes a `handoff: true` Check authentic to this package runtime. */
|
|
5
|
+
export function registerHandoffProviderIdentity(value) {
|
|
6
|
+
handoffProviderIdentities.set(value, Object.freeze(new HandoffProviderIdentityValue()));
|
|
7
|
+
}
|
|
8
|
+
/** Returns the same-package identity registered by `defineCheck`. */
|
|
9
|
+
export function getDefinedHandoffProviderIdentity(value) {
|
|
10
|
+
return typeof value === "object" && value !== null
|
|
11
|
+
? handoffProviderIdentities.get(value)
|
|
12
|
+
: undefined;
|
|
13
|
+
}
|
|
14
|
+
/** Preserves a Definition-validated provider identity during materialization. */
|
|
15
|
+
export function bindHandoffProviderIdentity(value, identity) {
|
|
16
|
+
handoffProviderIdentities.set(value, identity);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=handoff-provider-identity.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-provider-identity.mjs","sourceRoot":"","sources":["../../../src/check/handoff-provider-identity.ts"],"names":[],"mappings":"AAOA,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAAmC,CAAC;AAEjF,MAAM,4BAA4B;CAEjC;AAED,mGAAmG;AACnG,MAAM,UAAU,+BAA+B,CAAC,KAAa;IAC3D,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,4BAA4B,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iCAAiC,CAC/C,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAChD,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,QAAiC;IAEjC,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC","sourcesContent":["declare const HANDOFF_PROVIDER_IDENTITY_BRAND: unique symbol;\n\n/** Opaque same-package identity retained only by Definition and invocation execution. */\nexport type HandoffProviderIdentity = Readonly<{\n readonly [HANDOFF_PROVIDER_IDENTITY_BRAND]: true;\n}>;\n\nconst handoffProviderIdentities = new WeakMap<object, HandoffProviderIdentity>();\n\nclass HandoffProviderIdentityValue implements HandoffProviderIdentity {\n declare readonly [HANDOFF_PROVIDER_IDENTITY_BRAND]: true;\n}\n\n/** Registers the identity that makes a `handoff: true` Check authentic to this package runtime. */\nexport function registerHandoffProviderIdentity(value: object): void {\n handoffProviderIdentities.set(value, Object.freeze(new HandoffProviderIdentityValue()));\n}\n\n/** Returns the same-package identity registered by `defineCheck`. */\nexport function getDefinedHandoffProviderIdentity(\n value: unknown\n): HandoffProviderIdentity | undefined {\n return typeof value === \"object\" && value !== null\n ? handoffProviderIdentities.get(value)\n : undefined;\n}\n\n/** Preserves a Definition-validated provider identity during materialization. */\nexport function bindHandoffProviderIdentity(\n value: object,\n identity: HandoffProviderIdentity\n): void {\n handoffProviderIdentities.set(value, identity);\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const INHERITED_CHECK_COLLECTION = Symbol("vibe-check.inherited-check-collection");
|
|
2
2
|
const inheritedCollections = new WeakSet();
|
|
3
3
|
/**
|
|
4
|
-
* 创建可用于 `dependsOn` 或 `mutex` 的受信任继承编辑。
|
|
4
|
+
* 创建可用于 `dependsOn`、`observes` 或 `mutex` 的受信任继承编辑。
|
|
5
5
|
*
|
|
6
6
|
* @typeParam T - 要添加或移除的 collection item 类型。
|
|
7
7
|
* @param value - 至少提供 `add` 或 `remove` 的 edit;空数组可显式表示不添加或不移除。
|
|
@@ -44,7 +44,7 @@ function snapshotInheritedCollectionEntry(snapshot, key, descriptor) {
|
|
|
44
44
|
if (!isDataDescriptor(descriptor))
|
|
45
45
|
return "invalid";
|
|
46
46
|
if (key === INHERITED_CHECK_COLLECTION) {
|
|
47
|
-
return descriptor.enumerable || descriptor.value !== true ? "invalid" : "marker";
|
|
47
|
+
return descriptor.enumerable === true || descriptor.value !== true ? "invalid" : "marker";
|
|
48
48
|
}
|
|
49
49
|
if (typeof key !== "string" || descriptor.enumerable !== true)
|
|
50
50
|
return "invalid";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inherited-collection.mjs","sourceRoot":"","sources":["../../../src/check/inherited-collection.ts"],"names":[],"mappings":"AAAA,MAAM,0BAA0B,GAAkB,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAyBlG,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAE,CAAC;AAI3C;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAI,KAAqC;IAC9D,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,0BAA0B,CAAC,EAAE,IAAa,EAAE,CAAC;IACzE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gCAAgC,CAC9C,KAAwC;IAExC,IAAI,CAAC;QACH,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,gCAAgC,CAC5C,QAAQ,EACR,GAAG,EACH,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAC5C,CAAC;YACF,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC1C,IAAI,KAAK,KAAK,QAAQ;gBAAE,SAAS,GAAG,IAAI,CAAC;QAC3C,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,SAAS,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,gCAAgC,CACvC,QAAiC,EACjC,GAAgB,EAChB,UAA0C;IAE1C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,GAAG,KAAK,0BAA0B,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"inherited-collection.mjs","sourceRoot":"","sources":["../../../src/check/inherited-collection.ts"],"names":[],"mappings":"AAAA,MAAM,0BAA0B,GAAkB,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAyBlG,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAE,CAAC;AAI3C;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAI,KAAqC;IAC9D,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,0BAA0B,CAAC,EAAE,IAAa,EAAE,CAAC;IACzE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gCAAgC,CAC9C,KAAwC;IAExC,IAAI,CAAC;QACH,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,gCAAgC,CAC5C,QAAQ,EACR,GAAG,EACH,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAC5C,CAAC;YACF,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC1C,IAAI,KAAK,KAAK,QAAQ;gBAAE,SAAS,GAAG,IAAI,CAAC;QAC3C,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,SAAS,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,gCAAgC,CACvC,QAAiC,EACjC,GAAgB,EAChB,UAA0C;IAE1C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,GAAG,KAAK,0BAA0B,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5F,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChF,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE;QACnC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,UAA0C;IAE1C,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,CAAC;AAClG,CAAC","sourcesContent":["const INHERITED_CHECK_COLLECTION: unique symbol = Symbol(\"vibe-check.inherited-check-collection\");\n\n/** 使用 {@link inherit} 对父 Check 的 string collection 做显式增删的输入。 */\nexport type InheritCheckCollectionInput<T> = Readonly<\n | { readonly add: readonly T[]; readonly remove?: readonly T[] }\n | { readonly add?: readonly T[]; readonly remove: readonly T[] }\n>;\n\n/**\n * 由 {@link inherit} 创建、带有不可伪造 marker 的 collection edit。\n *\n * @remarks Definition validation 不接受看起来相同的 plain object。\n */\nexport type InheritedCheckCollection<T> = InheritCheckCollectionInput<T> &\n Readonly<{\n readonly [INHERITED_CHECK_COLLECTION]: true;\n }>;\n\n/**\n * 可以直接替换父 collection 的数组,或由 {@link inherit} 表示的显式 edit。\n *\n * @typeParam T - collection item 类型。\n */\nexport type InheritableCheckCollection<T> = readonly T[] | InheritedCheckCollection<T>;\n\nconst inheritedCollections = new WeakSet();\n\ntype InheritedCollectionEntry = \"data\" | \"invalid\" | \"marker\";\n\n/**\n * 创建可用于 `dependsOn`、`observes` 或 `mutex` 的受信任继承编辑。\n *\n * @typeParam T - 要添加或移除的 collection item 类型。\n * @param value - 至少提供 `add` 或 `remove` 的 edit;空数组可显式表示不添加或不移除。\n * @returns 只有此函数创建的值会被 Definition validation 识别为 inherited collection。\n */\nexport function inherit<T>(value: InheritCheckCollectionInput<T>): InheritedCheckCollection<T> {\n const result = { ...value, [INHERITED_CHECK_COLLECTION]: true as const };\n Object.defineProperty(result, INHERITED_CHECK_COLLECTION, { enumerable: false });\n inheritedCollections.add(result);\n return result;\n}\n\nexport function isInheritedCheckCollection(\n value: unknown\n): value is InheritedCheckCollection<unknown> {\n return typeof value === \"object\" && value !== null && inheritedCollections.has(value);\n}\n\n/** Copies the trusted marker while preserving the authoring data's closed shape. */\nexport function snapshotInheritedCheckCollection(\n value: InheritedCheckCollection<unknown>\n): Readonly<Record<string, unknown>> | undefined {\n try {\n if (!hasPlainObjectPrototype(value)) return undefined;\n const snapshot: Record<string, unknown> = {};\n let hasMarker = false;\n for (const key of Reflect.ownKeys(value)) {\n const entry = snapshotInheritedCollectionEntry(\n snapshot,\n key,\n Object.getOwnPropertyDescriptor(value, key)\n );\n if (entry === \"invalid\") return undefined;\n if (entry === \"marker\") hasMarker = true;\n }\n return hasMarker ? Object.freeze(snapshot) : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction hasPlainObjectPrototype(value: object): boolean {\n const prototype: unknown = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction snapshotInheritedCollectionEntry(\n snapshot: Record<string, unknown>,\n key: PropertyKey,\n descriptor: PropertyDescriptor | undefined\n): InheritedCollectionEntry {\n if (!isDataDescriptor(descriptor)) return \"invalid\";\n if (key === INHERITED_CHECK_COLLECTION) {\n return descriptor.enumerable === true || descriptor.value !== true ? \"invalid\" : \"marker\";\n }\n if (typeof key !== \"string\" || descriptor.enumerable !== true) return \"invalid\";\n Object.defineProperty(snapshot, key, {\n configurable: true,\n enumerable: true,\n value: descriptor.value,\n writable: true\n });\n return \"data\";\n}\n\nfunction isDataDescriptor(\n descriptor: PropertyDescriptor | undefined\n): descriptor is PropertyDescriptor {\n return descriptor !== undefined && descriptor.get === undefined && descriptor.set === undefined;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-changes.mjs","sourceRoot":"","sources":["../../../src/check/project-changes.ts"],"names":[],"mappings":"","sourcesContent":["/** 已配置的 project change preparation 产生的 file-centric evidence。 */\nexport type ProjectChanges = Readonly<\n | {\n readonly ok: true;\n readonly files: readonly Readonly<{\n readonly path: string;\n readonly flags: readonly string[];\n }>[];\n }\n | {\n readonly ok: false;\n readonly reason: Readonly<{ readonly code: string }>;\n }\n>;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.mjs","sourceRoot":"","sources":["../../../src/check/project-context.ts"],"names":[],"mappings":"","sourcesContent":["import type { ProjectChanges } from \"./project-changes.ts\";\n\n/** 每次 Run 共享、冻结的 caller project context。 */\nexport interface CheckProjectContext {\n /** 本次 Run 使用的绝对项目根目录。 */\n readonly root: string;\n /** 已去重、排序的 invocation-effective flags(caller flags 与派生 change flags)。 */\n readonly flags: readonly string[];\n /** 只在当前 Project Definition 配置 change preparation 时存在。 */\n readonly changes?: ProjectChanges;\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { canonicalizeJsonObject } from "../data-boundary/canonical-data.mjs";
|
|
2
2
|
import { validateCheckDescriptor } from "../check/descriptor-validation.mjs";
|
|
3
|
-
import { snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
3
|
+
import { hasExactPlainRecordKeys, hasRequiredAndOptionalRecordKeys, snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
4
|
+
import { isClosedCheckReason } from "./reason-shape.mjs";
|
|
4
5
|
export function validateCoreSnapshot(value) {
|
|
5
6
|
const snapshot = snapshotClosedRecord(value);
|
|
6
|
-
if (snapshot === undefined || !
|
|
7
|
+
if (snapshot === undefined || !hasExactPlainRecordKeys(snapshot, ["checks", "records"])) {
|
|
7
8
|
return invalid("$", "Core snapshot must contain only checks and records");
|
|
8
9
|
}
|
|
9
10
|
const checksInput = snapshotClosedArray(snapshot.checks);
|
|
@@ -42,7 +43,8 @@ function validateChecks(values) {
|
|
|
42
43
|
let previousCheckId;
|
|
43
44
|
for (const [index, value] of values.entries()) {
|
|
44
45
|
const check = snapshotClosedRecord(value);
|
|
45
|
-
if (check === undefined ||
|
|
46
|
+
if (check === undefined ||
|
|
47
|
+
!hasExactPlainRecordKeys(check, ["checkId", "displayName", "outcome"])) {
|
|
46
48
|
return invalid(`$.checks[${index}]`, "Core Check must be closed");
|
|
47
49
|
}
|
|
48
50
|
const definition = validateCheckDescriptor({
|
|
@@ -95,7 +97,7 @@ function validateRecords(values, checks) {
|
|
|
95
97
|
}
|
|
96
98
|
function validateRecordRow(value, index, ownerIds) {
|
|
97
99
|
const record = snapshotClosedRecord(value);
|
|
98
|
-
if (record === undefined || !
|
|
100
|
+
if (record === undefined || !hasExactPlainRecordKeys(record, ["checkId", "id", "data"]))
|
|
99
101
|
return invalid(`$.records[${index}]`, "Core Record must be closed");
|
|
100
102
|
if (typeof record.checkId !== "string" ||
|
|
101
103
|
!ownerIds.has(record.checkId) ||
|
|
@@ -123,7 +125,7 @@ function validateOutcome(value, path) {
|
|
|
123
125
|
}
|
|
124
126
|
function validateFinalOutcome(outcome, path) {
|
|
125
127
|
if (outcome.status === "passed" || outcome.status === "failed") {
|
|
126
|
-
if (!
|
|
128
|
+
if (!hasExactPlainRecordKeys(outcome, ["status", "data"]))
|
|
127
129
|
return invalid(path, "Final outcome is not closed");
|
|
128
130
|
const data = canonicalizeJsonObject(outcome.data);
|
|
129
131
|
return data === undefined
|
|
@@ -133,7 +135,10 @@ function validateFinalOutcome(outcome, path) {
|
|
|
133
135
|
return invalid(`${path}.status`, "Unknown Check outcome status");
|
|
134
136
|
}
|
|
135
137
|
function validateNotApplicableOutcome(outcome, path) {
|
|
136
|
-
if (!
|
|
138
|
+
if (!hasRequiredAndOptionalRecordKeys(outcome, {
|
|
139
|
+
optional: ["reason"],
|
|
140
|
+
required: ["status"]
|
|
141
|
+
}))
|
|
137
142
|
return invalid(path, "Not-applicable outcome is not closed");
|
|
138
143
|
const reason = validateReason(outcome.reason, false);
|
|
139
144
|
return reason === null
|
|
@@ -141,7 +146,7 @@ function validateNotApplicableOutcome(outcome, path) {
|
|
|
141
146
|
: accepted(Object.freeze(reason === undefined ? { status: "not-applicable" } : { status: "not-applicable", reason }));
|
|
142
147
|
}
|
|
143
148
|
function validateUnavailableOutcome(outcome, path) {
|
|
144
|
-
if (!
|
|
149
|
+
if (!hasExactPlainRecordKeys(outcome, ["status", "reason"]))
|
|
145
150
|
return invalid(path, "Unavailable outcome is not closed");
|
|
146
151
|
const reason = validateReason(outcome.reason, true);
|
|
147
152
|
return reason === null || reason === undefined
|
|
@@ -152,9 +157,12 @@ function validateReason(value, allowCheckIds) {
|
|
|
152
157
|
if (value === undefined)
|
|
153
158
|
return undefined;
|
|
154
159
|
const reason = snapshotClosedRecord(value);
|
|
155
|
-
if (!
|
|
160
|
+
if (!isClosedCheckReason(reason, allowCheckIds))
|
|
156
161
|
return null;
|
|
157
|
-
if (!
|
|
162
|
+
if (!hasRequiredAndOptionalRecordKeys(reason, {
|
|
163
|
+
optional: allowCheckIds ? ["checkIds"] : [],
|
|
164
|
+
required: ["code"]
|
|
165
|
+
}))
|
|
158
166
|
return null;
|
|
159
167
|
if (!Object.hasOwn(reason, "checkIds"))
|
|
160
168
|
return Object.freeze({ code: reason.code });
|
|
@@ -163,12 +171,6 @@ function validateReason(value, allowCheckIds) {
|
|
|
163
171
|
return null;
|
|
164
172
|
return Object.freeze({ code: reason.code, checkIds: Object.freeze(normalizedCheckIds) });
|
|
165
173
|
}
|
|
166
|
-
function isClosedReason(value, allowCheckIds) {
|
|
167
|
-
return (value !== undefined &&
|
|
168
|
-
typeof value.code === "string" &&
|
|
169
|
-
value.code.length > 0 &&
|
|
170
|
-
hasOptionalKeys(value, ["code"], allowCheckIds ? ["checkIds"] : []));
|
|
171
|
-
}
|
|
172
174
|
function normalizedReasonCheckIds(value, allowCheckIds) {
|
|
173
175
|
const checkIds = snapshotClosedArray(value);
|
|
174
176
|
if (!allowCheckIds ||
|
|
@@ -184,14 +186,6 @@ function normalizedReasonCheckIds(value, allowCheckIds) {
|
|
|
184
186
|
}
|
|
185
187
|
return Object.freeze(normalizedCheckIds);
|
|
186
188
|
}
|
|
187
|
-
function hasExactKeys(value, keys) {
|
|
188
|
-
return (Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key)));
|
|
189
|
-
}
|
|
190
|
-
function hasOptionalKeys(value, required, optional) {
|
|
191
|
-
const supported = new Set([...required, ...optional]);
|
|
192
|
-
return (required.every((key) => Object.hasOwn(value, key)) &&
|
|
193
|
-
Object.keys(value).every((key) => supported.has(key)));
|
|
194
|
-
}
|
|
195
189
|
function accepted(value) {
|
|
196
190
|
return Object.freeze({ ok: true, value });
|
|
197
191
|
}
|