project-tiny-context-harness 0.8.16 → 0.11.0
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 +119 -41
- package/assets/README.md +184 -55
- package/assets/README.zh-CN.md +114 -40
- package/assets/agents/AGENTS_CORE.md +2 -2
- package/assets/context_templates/context.toml +6 -1
- package/assets/context_templates/screen-contract.md +16 -0
- package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_helpers.cs +301 -0
- package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_run.cs +197 -0
- package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_types.cs +215 -0
- package/assets/runtime/windows-job-supervisor/windows_job_process_supervisor.ps1 +117 -0
- package/assets/skills/context_development_engineer/SKILL.md +16 -30
- package/assets/skills/context_development_engineer/references/engineering-design-reasoning.md +93 -0
- package/assets/skills/context_surface_contract/SKILL.md +13 -2
- package/assets/skills/context_uiux_design/SKILL.md +7 -3
- package/assets/skills/context_uiux_design/references/task-uiux-analysis.md +82 -0
- package/assets/skills/design-resource-authoring/SKILL.md +18 -9
- package/assets/skills/design-resource-authoring/references/authority-delta-assessment.md +52 -0
- package/assets/skills/design-resource-authoring/references/downstream-handoff.md +22 -6
- package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +26 -8
- package/assets/skills/design-resource-authoring/references/implementation-feasibility.md +111 -0
- package/assets/skills/design-resource-authoring/references/open-design-provider.md +45 -7
- package/assets/skills/design-resource-authoring/references/recovery-and-writeback.md +7 -1
- package/assets/skills/design-resource-authoring/references/resource-selection.md +115 -3
- package/assets/skills/design-system-authoring/SKILL.md +23 -17
- package/assets/skills/design-system-authoring/references/authority-adoption.md +19 -9
- package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +4 -0
- package/assets/skills/long-task-workflow/SKILL.md +6 -6
- package/assets/skills/long-task-workflow/references/authority-lifecycle.md +10 -4
- package/assets/skills/long-task-workflow/references/contract-authoring.md +5 -5
- package/assets/skills/long-task-workflow/references/evidence-design.md +14 -3
- package/assets/skills/long-task-workflow/references/source-authoring.md +11 -8
- package/assets/tools/context_rules.json +53 -0
- package/assets/tools/validate_context.py +302 -77
- package/dist/cli.js +2 -1
- package/dist/commands/context-create.d.ts +1 -0
- package/dist/commands/context-create.js +90 -0
- package/dist/commands/context-inspect.d.ts +1 -0
- package/dist/commands/context-inspect.js +98 -0
- package/dist/commands/context-move.d.ts +1 -0
- package/dist/commands/context-move.js +78 -0
- package/dist/commands/context-register.d.ts +1 -0
- package/dist/commands/context-register.js +110 -0
- package/dist/commands/context-transaction.d.ts +1 -0
- package/dist/commands/context-transaction.js +84 -0
- package/dist/commands/context.d.ts +1 -0
- package/dist/commands/context.js +36 -0
- package/dist/commands/design-authority-delta.d.ts +1 -0
- package/dist/commands/design-authority-delta.js +53 -0
- package/dist/commands/design-authority.d.ts +1 -0
- package/dist/commands/design-authority.js +104 -0
- package/dist/commands/design-resource.js +17 -3
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.js +61 -3
- package/dist/commands/index.js +19 -2
- package/dist/commands/long-task-authoring.js +20 -2
- package/dist/commands/long-task-workdir.d.ts +2 -0
- package/dist/commands/long-task-workdir.js +23 -0
- package/dist/commands/long-task.js +75 -6
- package/dist/commands/route.d.ts +15 -0
- package/dist/commands/route.js +142 -0
- package/dist/index.d.ts +3 -13
- package/dist/index.js +3 -12
- package/dist/lib/cli-exit.d.ts +14 -0
- package/dist/lib/cli-exit.js +19 -0
- package/dist/lib/context-catalog/catalog-default-footprint.d.ts +3 -0
- package/dist/lib/context-catalog/catalog-default-footprint.js +53 -0
- package/dist/lib/context-catalog/catalog-diagnostics.d.ts +9 -0
- package/dist/lib/context-catalog/catalog-diagnostics.js +34 -0
- package/dist/lib/context-catalog/catalog-discovery.d.ts +7 -0
- package/dist/lib/context-catalog/catalog-discovery.js +81 -0
- package/dist/lib/context-catalog/catalog-load.d.ts +8 -0
- package/dist/lib/context-catalog/catalog-load.js +187 -0
- package/dist/lib/context-catalog/catalog-path-validation.d.ts +7 -0
- package/dist/lib/context-catalog/catalog-path-validation.js +62 -0
- package/dist/lib/context-catalog/catalog-paths.d.ts +11 -0
- package/dist/lib/context-catalog/catalog-paths.js +41 -0
- package/dist/lib/context-catalog/catalog-portable-contract.d.ts +15 -0
- package/dist/lib/context-catalog/catalog-portable-contract.js +68 -0
- package/dist/lib/context-catalog/catalog-staged-path-safety.d.ts +1 -0
- package/dist/lib/context-catalog/catalog-staged-path-safety.js +36 -0
- package/dist/lib/context-catalog/catalog-types.d.ts +40 -0
- package/dist/lib/context-catalog/catalog-types.js +1 -0
- package/dist/lib/context-catalog/catalog-validation.d.ts +9 -0
- package/dist/lib/context-catalog/catalog-validation.js +148 -0
- package/dist/lib/context-create/context-create-path.d.ts +2 -0
- package/dist/lib/context-create/context-create-path.js +30 -0
- package/dist/lib/context-create/context-create-template.d.ts +2 -0
- package/dist/lib/context-create/context-create-template.js +95 -0
- package/dist/lib/context-create/context-create-types.d.ts +28 -0
- package/dist/lib/context-create/context-create-types.js +1 -0
- package/dist/lib/context-create/context-create-write.d.ts +1 -0
- package/dist/lib/context-create/context-create-write.js +85 -0
- package/dist/lib/context-create/context-create.d.ts +2 -0
- package/dist/lib/context-create/context-create.js +84 -0
- package/dist/lib/context-default-footprint.d.ts +2 -3
- package/dist/lib/context-default-footprint.js +49 -57
- package/dist/lib/context-doctor/context-doctor-types.d.ts +16 -0
- package/dist/lib/context-doctor/context-doctor-types.js +15 -0
- package/dist/lib/context-doctor/context-doctor.d.ts +2 -0
- package/dist/lib/context-doctor/context-doctor.js +130 -0
- package/dist/lib/context-graph-snapshot.d.ts +5 -0
- package/dist/lib/context-graph-snapshot.js +46 -25
- package/dist/lib/context-inspect/context-inspect-projection.d.ts +9 -0
- package/dist/lib/context-inspect/context-inspect-projection.js +49 -0
- package/dist/lib/context-inspect/context-inspect-render.d.ts +2 -0
- package/dist/lib/context-inspect/context-inspect-render.js +29 -0
- package/dist/lib/context-inspect/context-inspect-types.d.ts +43 -0
- package/dist/lib/context-inspect/context-inspect-types.js +1 -0
- package/dist/lib/context-inspect/context-inspect.d.ts +2 -0
- package/dist/lib/context-inspect/context-inspect.js +104 -0
- package/dist/lib/context-manifest-schema.d.ts +1 -1
- package/dist/lib/context-manifest-schema.js +4 -20
- package/dist/lib/context-markdown/context-markdown-analysis.d.ts +15 -0
- package/dist/lib/context-markdown/context-markdown-analysis.js +245 -0
- package/dist/lib/context-markdown/context-markdown-extract.d.ts +7 -0
- package/dist/lib/context-markdown/context-markdown-extract.js +114 -0
- package/dist/lib/context-markdown/context-markdown-types.d.ts +57 -0
- package/dist/lib/context-markdown/context-markdown-types.js +1 -0
- package/dist/lib/context-move/context-move-input.d.ts +8 -0
- package/dist/lib/context-move/context-move-input.js +17 -0
- package/dist/lib/context-move/context-move-literal-scan.d.ts +20 -0
- package/dist/lib/context-move/context-move-literal-scan.js +213 -0
- package/dist/lib/context-move/context-move-live-validation.d.ts +3 -0
- package/dist/lib/context-move/context-move-live-validation.js +56 -0
- package/dist/lib/context-move/context-move-markdown-plan.d.ts +22 -0
- package/dist/lib/context-move/context-move-markdown-plan.js +39 -0
- package/dist/lib/context-move/context-move-projection.d.ts +3 -0
- package/dist/lib/context-move/context-move-projection.js +11 -0
- package/dist/lib/context-move/context-move-reference-validation.d.ts +11 -0
- package/dist/lib/context-move/context-move-reference-validation.js +64 -0
- package/dist/lib/context-move/context-move-render.d.ts +2 -0
- package/dist/lib/context-move/context-move-render.js +24 -0
- package/dist/lib/context-move/context-move-support.d.ts +10 -0
- package/dist/lib/context-move/context-move-support.js +88 -0
- package/dist/lib/context-move/context-move-transaction-plan.d.ts +24 -0
- package/dist/lib/context-move/context-move-transaction-plan.js +108 -0
- package/dist/lib/context-move/context-move-types.d.ts +74 -0
- package/dist/lib/context-move/context-move-types.js +1 -0
- package/dist/lib/context-move/context-move.d.ts +8 -0
- package/dist/lib/context-move/context-move.js +180 -0
- package/dist/lib/context-mutation/manifest-lossless-patch.d.ts +28 -0
- package/dist/lib/context-mutation/manifest-lossless-patch.js +208 -0
- package/dist/lib/context-mutation/markdown-link-patch.d.ts +34 -0
- package/dist/lib/context-mutation/markdown-link-patch.js +143 -0
- package/dist/lib/context-mutation/markdown-link-spans.d.ts +10 -0
- package/dist/lib/context-mutation/markdown-link-spans.js +179 -0
- package/dist/lib/context-mutation/mutation-cas.d.ts +13 -0
- package/dist/lib/context-mutation/mutation-cas.js +365 -0
- package/dist/lib/context-mutation/mutation-command-support.d.ts +12 -0
- package/dist/lib/context-mutation/mutation-command-support.js +57 -0
- package/dist/lib/context-mutation/mutation-commit.d.ts +12 -0
- package/dist/lib/context-mutation/mutation-commit.js +89 -0
- package/dist/lib/context-mutation/mutation-directories.d.ts +5 -0
- package/dist/lib/context-mutation/mutation-directories.js +56 -0
- package/dist/lib/context-mutation/mutation-file-state.d.ts +14 -0
- package/dist/lib/context-mutation/mutation-file-state.js +137 -0
- package/dist/lib/context-mutation/mutation-journal-file-validation.d.ts +1 -0
- package/dist/lib/context-mutation/mutation-journal-file-validation.js +106 -0
- package/dist/lib/context-mutation/mutation-journal-io.d.ts +5 -0
- package/dist/lib/context-mutation/mutation-journal-io.js +55 -0
- package/dist/lib/context-mutation/mutation-journal-storage.d.ts +18 -0
- package/dist/lib/context-mutation/mutation-journal-storage.js +283 -0
- package/dist/lib/context-mutation/mutation-journal-validation-support.d.ts +16 -0
- package/dist/lib/context-mutation/mutation-journal-validation-support.js +140 -0
- package/dist/lib/context-mutation/mutation-journal-validation.d.ts +3 -0
- package/dist/lib/context-mutation/mutation-journal-validation.js +177 -0
- package/dist/lib/context-mutation/mutation-journal.d.ts +8 -0
- package/dist/lib/context-mutation/mutation-journal.js +111 -0
- package/dist/lib/context-mutation/mutation-live-validation.d.ts +3 -0
- package/dist/lib/context-mutation/mutation-live-validation.js +51 -0
- package/dist/lib/context-mutation/mutation-long-task-guard.d.ts +6 -0
- package/dist/lib/context-mutation/mutation-long-task-guard.js +57 -0
- package/dist/lib/context-mutation/mutation-recovery.d.ts +4 -0
- package/dist/lib/context-mutation/mutation-recovery.js +189 -0
- package/dist/lib/context-mutation/mutation-staged-fs.d.ts +5 -0
- package/dist/lib/context-mutation/mutation-staged-fs.js +56 -0
- package/dist/lib/context-mutation/mutation-types.d.ts +103 -0
- package/dist/lib/context-mutation/mutation-types.js +1 -0
- package/dist/lib/context-register/context-register-input.d.ts +11 -0
- package/dist/lib/context-register/context-register-input.js +43 -0
- package/dist/lib/context-register/context-register-render.d.ts +2 -0
- package/dist/lib/context-register/context-register-render.js +21 -0
- package/dist/lib/context-register/context-register-support.d.ts +6 -0
- package/dist/lib/context-register/context-register-support.js +46 -0
- package/dist/lib/context-register/context-register-types.d.ts +46 -0
- package/dist/lib/context-register/context-register-types.js +1 -0
- package/dist/lib/context-register/context-register.d.ts +8 -0
- package/dist/lib/context-register/context-register.js +155 -0
- package/dist/lib/context-router/context-route-budget.d.ts +15 -0
- package/dist/lib/context-router/context-route-budget.js +14 -0
- package/dist/lib/context-router/context-route-candidates.d.ts +15 -0
- package/dist/lib/context-router/context-route-candidates.js +112 -0
- package/dist/lib/context-router/context-route-order.d.ts +6 -0
- package/dist/lib/context-router/context-route-order.js +53 -0
- package/dist/lib/context-router/context-route-paths.d.ts +16 -0
- package/dist/lib/context-router/context-route-paths.js +109 -0
- package/dist/lib/context-router/context-route-render.d.ts +2 -0
- package/dist/lib/context-router/context-route-render.js +32 -0
- package/dist/lib/context-router/context-route-scan.d.ts +18 -0
- package/dist/lib/context-router/context-route-scan.js +156 -0
- package/dist/lib/context-router/context-route-selection.d.ts +16 -0
- package/dist/lib/context-router/context-route-selection.js +72 -0
- package/dist/lib/context-router/context-route-terms.d.ts +13 -0
- package/dist/lib/context-router/context-route-terms.js +202 -0
- package/dist/lib/context-router/context-route-types.d.ts +101 -0
- package/dist/lib/context-router/context-route-types.js +1 -0
- package/dist/lib/context-router/context-route.d.ts +2 -0
- package/dist/lib/context-router/context-route.js +127 -0
- package/dist/lib/context-units-migration.d.ts +13 -0
- package/dist/lib/context-units-migration.js +217 -0
- package/dist/lib/design-authority-binding.d.ts +7 -0
- package/dist/lib/design-authority-binding.js +96 -0
- package/dist/lib/design-authority-closure.d.ts +3 -0
- package/dist/lib/design-authority-closure.js +201 -0
- package/dist/lib/design-authority-delta-codec-primitives.d.ts +10 -0
- package/dist/lib/design-authority-delta-codec-primitives.js +58 -0
- package/dist/lib/design-authority-delta-codec.d.ts +2 -0
- package/dist/lib/design-authority-delta-codec.js +193 -0
- package/dist/lib/design-authority-delta-types.d.ts +65 -0
- package/dist/lib/design-authority-delta-types.js +6 -0
- package/dist/lib/design-authority-delta-validation.d.ts +2 -0
- package/dist/lib/design-authority-delta-validation.js +16 -0
- package/dist/lib/design-authority-digest.d.ts +8 -0
- package/dist/lib/design-authority-digest.js +36 -0
- package/dist/lib/design-authority-files.d.ts +9 -0
- package/dist/lib/design-authority-files.js +62 -0
- package/dist/lib/design-authority-format.d.ts +2 -0
- package/dist/lib/design-authority-format.js +93 -0
- package/dist/lib/design-authority-links.d.ts +10 -0
- package/dist/lib/design-authority-links.js +137 -0
- package/dist/lib/design-authority-manifest.d.ts +4 -0
- package/dist/lib/design-authority-manifest.js +144 -0
- package/dist/lib/design-authority-tokens.d.ts +9 -0
- package/dist/lib/design-authority-tokens.js +45 -0
- package/dist/lib/design-authority-types.d.ts +80 -0
- package/dist/lib/design-authority-types.js +23 -0
- package/dist/lib/design-md-tool-adapter.d.ts +9 -0
- package/dist/lib/design-md-tool-adapter.js +152 -0
- package/dist/lib/design-md-tool-normalization.d.ts +7 -0
- package/dist/lib/design-md-tool-normalization.js +78 -0
- package/dist/lib/design-md-tool-types.d.ts +99 -0
- package/dist/lib/design-md-tool-types.js +8 -0
- package/dist/lib/design-resource-handoff-bundle.js +5 -0
- package/dist/lib/design-resource-handoff-input-types.d.ts +1 -1
- package/dist/lib/design-resource-handoff-manifest-projection.js +4 -0
- package/dist/lib/design-resource-handoff-set-integrity.js +1 -0
- package/dist/lib/design-resource-handoff-shape.js +18 -2
- package/dist/lib/design-resource-handoff-types.d.ts +8 -0
- package/dist/lib/design-resource-handoff-validation.js +24 -0
- package/dist/lib/design-resource-implementation-feasibility-model.d.ts +35 -0
- package/dist/lib/design-resource-implementation-feasibility-model.js +62 -0
- package/dist/lib/design-resource-implementation-feasibility-shape-sections.d.ts +43 -0
- package/dist/lib/design-resource-implementation-feasibility-shape-sections.js +142 -0
- package/dist/lib/design-resource-implementation-feasibility-shape.d.ts +4 -0
- package/dist/lib/design-resource-implementation-feasibility-shape.js +154 -0
- package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.d.ts +24 -0
- package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.js +106 -0
- package/dist/lib/design-resource-implementation-feasibility-source-decision.d.ts +21 -0
- package/dist/lib/design-resource-implementation-feasibility-source-decision.js +75 -0
- package/dist/lib/design-resource-implementation-feasibility-types.d.ts +135 -0
- package/dist/lib/design-resource-implementation-feasibility-types.js +37 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-cells.d.ts +5 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-cells.js +125 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-document.d.ts +4 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-document.js +167 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-facts.d.ts +3 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-facts.js +76 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-realizations.d.ts +8 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-realizations.js +76 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-support.d.ts +10 -0
- package/dist/lib/design-resource-implementation-feasibility-validation-support.js +75 -0
- package/dist/lib/design-resource-implementation-feasibility-validation.d.ts +3 -0
- package/dist/lib/design-resource-implementation-feasibility-validation.js +138 -0
- package/dist/lib/design-resource-recovery-current.js +22 -0
- package/dist/lib/design-resource-recovery-shape.js +64 -7
- package/dist/lib/design-resource-recovery-types.d.ts +4 -1
- package/dist/lib/design-resource-symbolic-fact-shape.js +9 -1
- package/dist/lib/design-resource-symbolic-fact-types.d.ts +8 -0
- package/dist/lib/design-resource-symbolic-fact-validation.js +25 -0
- package/dist/lib/doctor.d.ts +2 -1
- package/dist/lib/doctor.js +29 -1
- package/dist/lib/fs.js +1 -1
- package/dist/lib/long-task-acceptance-reachability-claims.d.ts +2 -0
- package/dist/lib/long-task-acceptance-reachability-claims.js +279 -0
- package/dist/lib/long-task-acceptance-reachability-design.d.ts +2 -0
- package/dist/lib/long-task-acceptance-reachability-design.js +96 -0
- package/dist/lib/long-task-acceptance-reachability-external.d.ts +9 -0
- package/dist/lib/long-task-acceptance-reachability-external.js +123 -0
- package/dist/lib/long-task-acceptance-reachability-helpers.d.ts +64 -0
- package/dist/lib/long-task-acceptance-reachability-helpers.js +473 -0
- package/dist/lib/long-task-acceptance-reachability-semantic.d.ts +2 -0
- package/dist/lib/long-task-acceptance-reachability-semantic.js +122 -0
- package/dist/lib/long-task-acceptance-reachability-types.d.ts +91 -0
- package/dist/lib/long-task-acceptance-reachability-types.js +1 -0
- package/dist/lib/long-task-acceptance-reachability.d.ts +4 -0
- package/dist/lib/long-task-acceptance-reachability.js +115 -0
- package/dist/lib/long-task-activation-validation.d.ts +6 -0
- package/dist/lib/long-task-activation-validation.js +96 -23
- package/dist/lib/long-task-active-authority-lock-context.d.ts +4 -0
- package/dist/lib/long-task-active-authority-lock-context.js +29 -0
- package/dist/lib/long-task-applicability-identity.d.ts +25 -0
- package/dist/lib/long-task-applicability-identity.js +60 -0
- package/dist/lib/long-task-authoring-preflight-diagnostics.js +8 -0
- package/dist/lib/long-task-authoring-preflight-types.d.ts +2 -0
- package/dist/lib/long-task-authoring-preflight-types.js +9 -0
- package/dist/lib/long-task-authoring-preflight.js +18 -2
- package/dist/lib/long-task-authority-material-diff.js +4 -0
- package/dist/lib/long-task-authority-materials.js +19 -0
- package/dist/lib/long-task-authority-policy.d.ts +3 -0
- package/dist/lib/long-task-authority-policy.js +3 -0
- package/dist/lib/long-task-authority-revision-details.js +2 -1
- package/dist/lib/long-task-authority-types.d.ts +2 -0
- package/dist/lib/long-task-authority.js +2 -0
- package/dist/lib/long-task-check-runner.js +3 -296
- package/dist/lib/long-task-check-shape.js +6 -1
- package/dist/lib/long-task-claim-definitions.js +1 -3
- package/dist/lib/long-task-claim-semantic-proof-floor.d.ts +3 -0
- package/dist/lib/long-task-claim-semantic-proof-floor.js +78 -0
- package/dist/lib/long-task-claims.d.ts +0 -18
- package/dist/lib/long-task-claims.js +15 -14
- package/dist/lib/long-task-command-process.d.ts +9 -0
- package/dist/lib/long-task-command-process.js +178 -0
- package/dist/lib/long-task-compact-authoring.js +3 -0
- package/dist/lib/long-task-compact-projections.js +10 -0
- package/dist/lib/long-task-complete-delivery-evidence-types.d.ts +38 -0
- package/dist/lib/long-task-complete-delivery-evidence-types.js +1 -0
- package/dist/lib/long-task-completion-types.d.ts +109 -0
- package/dist/lib/long-task-completion-types.js +1 -0
- package/dist/lib/long-task-conformance-policy.d.ts +2 -1
- package/dist/lib/long-task-conformance-policy.js +11 -4
- package/dist/lib/long-task-context-authority-topology.js +6 -4
- package/dist/lib/long-task-contract-types.d.ts +52 -1
- package/dist/lib/long-task-counterfactual-sandbox.d.ts +7 -1
- package/dist/lib/long-task-counterfactual-sandbox.js +86 -6
- package/dist/lib/long-task-delivery-compiler-preflight.d.ts +24 -0
- package/dist/lib/long-task-delivery-compiler-preflight.js +32 -0
- package/dist/lib/long-task-delivery-compiler.d.ts +1 -0
- package/dist/lib/long-task-delivery-compiler.js +59 -44
- package/dist/lib/long-task-delivery-parser.d.ts +3 -0
- package/dist/lib/long-task-delivery-parser.js +26 -8
- package/dist/lib/long-task-delivery-types.d.ts +2 -0
- package/dist/lib/long-task-delivery-types.js +2 -0
- package/dist/lib/long-task-delivery-validation.d.ts +11 -3
- package/dist/lib/long-task-delivery-validation.js +23 -8
- package/dist/lib/long-task-design-feasibility-binding-owners.d.ts +6 -0
- package/dist/lib/long-task-design-feasibility-binding-owners.js +52 -0
- package/dist/lib/long-task-design-feasibility-binding.d.ts +14 -0
- package/dist/lib/long-task-design-feasibility-binding.js +114 -0
- package/dist/lib/long-task-design-feasibility-source-closure.d.ts +11 -0
- package/dist/lib/long-task-design-feasibility-source-closure.js +87 -0
- package/dist/lib/long-task-design-obligation.d.ts +50 -0
- package/dist/lib/long-task-design-obligation.js +99 -0
- package/dist/lib/long-task-design-resource-handoff.d.ts +5 -3
- package/dist/lib/long-task-design-resource-handoff.js +64 -4
- package/dist/lib/long-task-design-resource-method-binding.js +20 -2
- package/dist/lib/long-task-effective-external-takeover.d.ts +15 -0
- package/dist/lib/long-task-effective-external-takeover.js +109 -0
- package/dist/lib/long-task-effective-external-ui-takeover.d.ts +5 -0
- package/dist/lib/long-task-effective-external-ui-takeover.js +117 -0
- package/dist/lib/long-task-evidence-capability-codec.js +91 -0
- package/dist/lib/long-task-evidence-capability-runtime.js +62 -14
- package/dist/lib/long-task-evidence-capability-types.d.ts +3 -2
- package/dist/lib/long-task-evidence-v2.d.ts +6 -1
- package/dist/lib/long-task-evidence-v2.js +253 -170
- package/dist/lib/long-task-execution-observation.d.ts +7 -0
- package/dist/lib/long-task-execution-observation.js +21 -4
- package/dist/lib/long-task-expected-authority.d.ts +4 -0
- package/dist/lib/long-task-expected-authority.js +126 -0
- package/dist/lib/long-task-external-confirmation-artifacts.d.ts +9 -0
- package/dist/lib/long-task-external-confirmation-artifacts.js +138 -0
- package/dist/lib/long-task-external-confirmation-attestation.d.ts +20 -0
- package/dist/lib/long-task-external-confirmation-attestation.js +115 -0
- package/dist/lib/long-task-external-confirmation-challenge.d.ts +23 -0
- package/dist/lib/long-task-external-confirmation-challenge.js +164 -0
- package/dist/lib/long-task-external-confirmation-context.d.ts +14 -0
- package/dist/lib/long-task-external-confirmation-context.js +53 -0
- package/dist/lib/long-task-external-confirmation-evaluation.d.ts +11 -0
- package/dist/lib/long-task-external-confirmation-evaluation.js +454 -0
- package/dist/lib/long-task-external-confirmation-expected.d.ts +8 -0
- package/dist/lib/long-task-external-confirmation-expected.js +200 -0
- package/dist/lib/long-task-external-confirmation-identity.d.ts +10 -0
- package/dist/lib/long-task-external-confirmation-identity.js +77 -0
- package/dist/lib/long-task-external-confirmation-plan.d.ts +25 -0
- package/dist/lib/long-task-external-confirmation-plan.js +148 -0
- package/dist/lib/long-task-external-confirmation-preparation.d.ts +4 -0
- package/dist/lib/long-task-external-confirmation-preparation.js +100 -0
- package/dist/lib/long-task-external-confirmation-shape.d.ts +8 -0
- package/dist/lib/long-task-external-confirmation-shape.js +387 -0
- package/dist/lib/long-task-external-confirmation-state.d.ts +10 -0
- package/dist/lib/long-task-external-confirmation-state.js +109 -0
- package/dist/lib/long-task-external-confirmation-types.d.ts +195 -0
- package/dist/lib/long-task-external-confirmation-types.js +1 -0
- package/dist/lib/long-task-final-integrity.d.ts +2 -0
- package/dist/lib/long-task-final-integrity.js +21 -10
- package/dist/lib/long-task-final-v2.d.ts +7 -2
- package/dist/lib/long-task-final-v2.js +179 -55
- package/dist/lib/long-task-finalization-identity.d.ts +27 -0
- package/dist/lib/long-task-finalization-identity.js +58 -0
- package/dist/lib/long-task-finding-context.d.ts +1 -1
- package/dist/lib/long-task-finding-context.js +139 -13
- package/dist/lib/long-task-freshness.d.ts +27 -0
- package/dist/lib/long-task-freshness.js +129 -6
- package/dist/lib/long-task-git.js +3 -3
- package/dist/lib/long-task-material-input-closure.d.ts +3 -0
- package/dist/lib/long-task-material-input-closure.js +92 -0
- package/dist/lib/long-task-obligation-authority-resolution.d.ts +12 -0
- package/dist/lib/long-task-obligation-authority-resolution.js +57 -0
- package/dist/lib/long-task-obligation-semantic-identity.d.ts +16 -0
- package/dist/lib/long-task-obligation-semantic-identity.js +116 -0
- package/dist/lib/long-task-observation-authority.d.ts +11 -0
- package/dist/lib/long-task-observation-authority.js +137 -6
- package/dist/lib/long-task-process-table.d.ts +9 -0
- package/dist/lib/long-task-process-table.js +87 -0
- package/dist/lib/long-task-process-tree.d.ts +8 -0
- package/dist/lib/long-task-process-tree.js +108 -0
- package/dist/lib/long-task-proof-adequacy.d.ts +12 -0
- package/dist/lib/long-task-proof-adequacy.js +57 -0
- package/dist/lib/long-task-proof-capability-floor.d.ts +6 -0
- package/dist/lib/long-task-proof-capability-floor.js +137 -0
- package/dist/lib/long-task-protected-files.d.ts +1 -1
- package/dist/lib/long-task-protected-files.js +1 -1
- package/dist/lib/long-task-repair-frontier-checks.d.ts +8 -0
- package/dist/lib/long-task-repair-frontier-checks.js +93 -0
- package/dist/lib/long-task-repair-frontier-groups.d.ts +2 -0
- package/dist/lib/long-task-repair-frontier-groups.js +64 -0
- package/dist/lib/long-task-repair-frontier-utils.d.ts +6 -0
- package/dist/lib/long-task-repair-frontier-utils.js +27 -0
- package/dist/lib/long-task-repair-frontier.d.ts +14 -0
- package/dist/lib/long-task-repair-frontier.js +132 -0
- package/dist/lib/long-task-risk.d.ts +3 -2
- package/dist/lib/long-task-risk.js +73 -24
- package/dist/lib/long-task-root-shape.js +148 -8
- package/dist/lib/long-task-runner-freeze.d.ts +2 -1
- package/dist/lib/long-task-runner-freeze.js +23 -8
- package/dist/lib/long-task-runtime-types.d.ts +34 -40
- package/dist/lib/long-task-semantic-assurance-policy.js +2 -11
- package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
- package/dist/lib/long-task-semantic-drift-migration.js +48 -2
- package/dist/lib/long-task-semantic-fact-binding-types.d.ts +20 -0
- package/dist/lib/long-task-semantic-fact-closure.d.ts +5 -1
- package/dist/lib/long-task-semantic-fact-closure.js +33 -5
- package/dist/lib/long-task-semantic-fact-contract-closure.js +176 -1
- package/dist/lib/long-task-semantic-fact-contract-proofs.js +18 -1
- package/dist/lib/long-task-semantic-fact-input-closure.d.ts +16 -2
- package/dist/lib/long-task-semantic-fact-input-closure.js +138 -15
- package/dist/lib/long-task-semantic-fact-provenance-closure.js +1 -1
- package/dist/lib/long-task-semantic-fact-shape.d.ts +2 -1
- package/dist/lib/long-task-semantic-fact-shape.js +35 -1
- package/dist/lib/long-task-semantic-proof-adequacy.d.ts +2 -0
- package/dist/lib/long-task-semantic-proof-adequacy.js +19 -0
- package/dist/lib/long-task-semantic-proof-profile.d.ts +5 -0
- package/dist/lib/long-task-semantic-proof-profile.js +187 -0
- package/dist/lib/long-task-shape-primitives.d.ts +1 -1
- package/dist/lib/long-task-shape-primitives.js +5 -0
- package/dist/lib/long-task-source-anchors.d.ts +10 -0
- package/dist/lib/long-task-source-anchors.js +102 -0
- package/dist/lib/long-task-source-authority-types.d.ts +46 -0
- package/dist/lib/long-task-source-claim-validation.js +36 -0
- package/dist/lib/long-task-source-conservation-facts.d.ts +8 -0
- package/dist/lib/long-task-source-conservation-facts.js +57 -0
- package/dist/lib/long-task-source-conservation-types.d.ts +34 -0
- package/dist/lib/long-task-source-conservation-types.js +1 -0
- package/dist/lib/long-task-source-conservation.d.ts +7 -0
- package/dist/lib/long-task-source-conservation.js +110 -0
- package/dist/lib/long-task-source-fragments.d.ts +6 -0
- package/dist/lib/long-task-source-fragments.js +219 -0
- package/dist/lib/long-task-source-projection-resolution.d.ts +5 -0
- package/dist/lib/long-task-source-projection-resolution.js +57 -0
- package/dist/lib/long-task-source-projection-validation.d.ts +17 -0
- package/dist/lib/long-task-source-projection-validation.js +154 -0
- package/dist/lib/long-task-source-shape.js +14 -6
- package/dist/lib/long-task-source-supersession.d.ts +5 -0
- package/dist/lib/long-task-source-supersession.js +138 -0
- package/dist/lib/long-task-stage-policy.d.ts +7 -2
- package/dist/lib/long-task-stage-policy.js +67 -23
- package/dist/lib/long-task-state.d.ts +18 -4
- package/dist/lib/long-task-state.js +319 -33
- package/dist/lib/long-task-static-observation-freeze.js +4 -3
- package/dist/lib/long-task-status-projection.d.ts +3 -1
- package/dist/lib/long-task-status-projection.js +44 -13
- package/dist/lib/long-task-status-v2.d.ts +10 -6
- package/dist/lib/long-task-status-v2.js +70 -58
- package/dist/lib/long-task-target-policy.d.ts +8 -3
- package/dist/lib/long-task-target-policy.js +40 -9
- package/dist/lib/long-task-terminal-finalization.d.ts +12 -0
- package/dist/lib/long-task-terminal-finalization.js +190 -0
- package/dist/lib/long-task-ui-design-policy.js +15 -4
- package/dist/lib/long-task-ui-surface-policy.d.ts +2 -1
- package/dist/lib/long-task-ui-surface-policy.js +7 -4
- package/dist/lib/long-task-ui-surface-validation.d.ts +3 -1
- package/dist/lib/long-task-ui-surface-validation.js +2 -2
- package/dist/lib/long-task-verifier-counterfactuals.d.ts +11 -0
- package/dist/lib/long-task-verifier-counterfactuals.js +96 -0
- package/dist/lib/long-task-verifier-execution.d.ts +9 -0
- package/dist/lib/long-task-verifier-execution.js +67 -0
- package/dist/lib/long-task-verifier-identity.js +16 -5
- package/dist/lib/long-task-verifier-v2.js +52 -65
- package/dist/lib/long-task-windows-job-supervisor-helper.d.ts +1 -0
- package/dist/lib/long-task-windows-job-supervisor-helper.js +104 -0
- package/dist/lib/long-task-windows-job-supervisor-protocol.d.ts +28 -0
- package/dist/lib/long-task-windows-job-supervisor-protocol.js +124 -0
- package/dist/lib/long-task-windows-job-supervisor-result.d.ts +11 -0
- package/dist/lib/long-task-windows-job-supervisor-result.js +152 -0
- package/dist/lib/long-task-windows-job-supervisor.d.ts +2 -0
- package/dist/lib/long-task-windows-job-supervisor.js +126 -0
- package/dist/lib/long-task-workspace-scope.d.ts +1 -0
- package/dist/lib/long-task-workspace-scope.js +4 -1
- package/dist/lib/long-task-workspace.d.ts +1 -0
- package/dist/lib/long-task-workspace.js +10 -0
- package/dist/lib/migrations.js +43 -2
- package/dist/lib/repository-path-safety.d.ts +3 -0
- package/dist/lib/repository-path-safety.js +39 -3
- package/dist/lib/semantic-fact-input-shape.d.ts +7 -2
- package/dist/lib/semantic-fact-input-shape.js +25 -1
- package/dist/lib/semantic-fact-inventory-types.d.ts +8 -2
- package/dist/lib/semantic-fact-policy-census.d.ts +1 -1
- package/dist/lib/semantic-fact-policy-census.js +5 -2
- package/dist/lib/semantic-fact-policy.d.ts +1 -1
- package/dist/lib/semantic-fact-policy.js +2 -2
- package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
- package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
- package/dist/lib/validators.d.ts +3 -0
- package/dist/lib/validators.js +45 -157
- package/dist/public-api-core.d.ts +12 -0
- package/dist/public-api-core.js +12 -0
- package/dist/public-api-long-task.d.ts +10 -0
- package/dist/public-api-long-task.js +10 -0
- package/dist/public-types.d.ts +6 -1
- package/dist/schemas/design-authority-delta-assessment-v1.schema.json +191 -0
- package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +166 -2
- package/dist/schemas/long-task-external-confirmation-record-v1.schema.json +155 -0
- package/dist/schemas/long-task-external-confirmation-record-v2.schema.json +209 -0
- package/migrations/README.md +99 -0
- package/package.json +7 -5
- package/source-mappings.yaml +18 -0
|
@@ -4,12 +4,19 @@ import { addAuthoringDiagnostics, addDiagnosticError, normalizeAuthoringDiagnost
|
|
|
4
4
|
import { emptyClaimCoverage, emptyPreflightResult, } from "./long-task-authoring-preflight-types.js";
|
|
5
5
|
import { validateContractForActivation } from "./long-task-activation-validation.js";
|
|
6
6
|
import { parseDeliveryContractBundle } from "./long-task-delivery-parser.js";
|
|
7
|
-
import { changedWorkspacePaths, changedWorkspacePathsFromHead, repoRelative, repositoryRoot, } from "./long-task-workspace.js";
|
|
7
|
+
import { canonicalExistingLongTaskWorkdir, changedWorkspacePaths, changedWorkspacePathsFromHead, repoRelative, repositoryRoot, } from "./long-task-workspace.js";
|
|
8
8
|
import { classifyWorkspaceScope, firstLockManagedWorkspacePaths, protectedWorkspacePaths, workspaceScopeErrors, } from "./long-task-workspace-scope.js";
|
|
9
9
|
export async function preflightDeliveryContract(workdirInput, projectRootInput = process.cwd()) {
|
|
10
10
|
const diagnostics = [];
|
|
11
11
|
const repository = await repositoryRoot(projectRootInput);
|
|
12
|
-
|
|
12
|
+
let workdir;
|
|
13
|
+
try {
|
|
14
|
+
workdir = await canonicalExistingLongTaskWorkdir(repository, workdirInput);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
addDiagnosticError(diagnostics, error);
|
|
18
|
+
return emptyPreflightResult(normalizeAuthoringDiagnostics(diagnostics));
|
|
19
|
+
}
|
|
13
20
|
let parsed;
|
|
14
21
|
try {
|
|
15
22
|
parsed = await parseDeliveryContractBundle(workdir, repository, {
|
|
@@ -80,6 +87,15 @@ export async function preflightDeliveryContract(workdirInput, projectRootInput =
|
|
|
80
87
|
outcomes: contract.outcomes.map((outcome) => outcome.key),
|
|
81
88
|
source_coverage: sourceCoverage(contract),
|
|
82
89
|
claim_coverage: validation.claims?.summary ?? emptyClaimCoverage(),
|
|
90
|
+
acceptance_reachability: validation.acceptance_reachability ?? {
|
|
91
|
+
completion_authority: contract.task.target_profile.completion_authority,
|
|
92
|
+
total: 0,
|
|
93
|
+
machine_admitted: 0,
|
|
94
|
+
external_fulfillable: 0,
|
|
95
|
+
unreachable: 0,
|
|
96
|
+
obligations: [],
|
|
97
|
+
effective_external_routes: [],
|
|
98
|
+
},
|
|
83
99
|
revision_preview: authoringRevisionPreview(contract, validation.source_hashes, validation.source_items, validation.context_snapshot, active),
|
|
84
100
|
diagnostics: normalizedDiagnostics,
|
|
85
101
|
};
|
|
@@ -113,6 +113,10 @@ function flattenProductSemantics(projection) {
|
|
|
113
113
|
"task.target_profile.required_target_refs",
|
|
114
114
|
[...projection.target_profile.required_target_refs].sort(),
|
|
115
115
|
],
|
|
116
|
+
[
|
|
117
|
+
"task.target_profile.completion_authority",
|
|
118
|
+
projection.target_profile.completion_authority,
|
|
119
|
+
],
|
|
116
120
|
]);
|
|
117
121
|
for (const target of projection.execution_targets) {
|
|
118
122
|
const prefix = `task.execution_targets.${target.key}`;
|
|
@@ -137,10 +137,29 @@ export function projectGlobalSemantics(contract) {
|
|
|
137
137
|
given_refs: [...item.given_refs],
|
|
138
138
|
when_refs: [...item.when_refs],
|
|
139
139
|
})),
|
|
140
|
+
semantic_fact_bindings: contract.global.semantic_fact_bindings
|
|
141
|
+
? {
|
|
142
|
+
manifest_ref: contract.global.semantic_fact_bindings.manifest_ref,
|
|
143
|
+
obligations: [...contract.global.semantic_fact_bindings.obligations]
|
|
144
|
+
.sort((left, right) => globalSemanticObligationKey(left).localeCompare(globalSemanticObligationKey(right)))
|
|
145
|
+
.map((item) => ({ ...item })),
|
|
146
|
+
}
|
|
147
|
+
: null,
|
|
140
148
|
constraints: applicableStatements(contract.global.technical.constraints),
|
|
141
149
|
forbidden_shortcuts: applicableStatements(contract.global.technical.forbidden_shortcuts),
|
|
142
150
|
};
|
|
143
151
|
}
|
|
152
|
+
function globalSemanticObligationKey(item) {
|
|
153
|
+
return [
|
|
154
|
+
item.claim_ref,
|
|
155
|
+
item.applicability_ref,
|
|
156
|
+
item.target_ref,
|
|
157
|
+
item.outcome_ref,
|
|
158
|
+
item.fact_ref,
|
|
159
|
+
item.proof_ref,
|
|
160
|
+
item.method,
|
|
161
|
+
].join("\0");
|
|
162
|
+
}
|
|
144
163
|
function keyedStatements(values) {
|
|
145
164
|
return [...values]
|
|
146
165
|
.sort(keyOrder)
|
|
@@ -30,6 +30,7 @@ export declare const AUTHORITY_FIELD_POLICY_REGISTRIES: {
|
|
|
30
30
|
source_ref: "scope";
|
|
31
31
|
statement: "semantic_user_review";
|
|
32
32
|
disposition: "semantic_user_review";
|
|
33
|
+
judgment_basis: "semantic_user_review";
|
|
33
34
|
};
|
|
34
35
|
readonly risk: {
|
|
35
36
|
requested_level: "semantic_user_review";
|
|
@@ -37,6 +38,7 @@ export declare const AUTHORITY_FIELD_POLICY_REGISTRIES: {
|
|
|
37
38
|
};
|
|
38
39
|
readonly global: {
|
|
39
40
|
applicability: "semantic_user_review";
|
|
41
|
+
semantic_fact_bindings: "semantic_user_review";
|
|
40
42
|
product: "semantic_user_review";
|
|
41
43
|
technical: "semantic_user_review";
|
|
42
44
|
acceptance: "proof_additive";
|
|
@@ -243,6 +245,7 @@ export declare const AUTHORITY_FIELD_POLICY_REGISTRIES: {
|
|
|
243
245
|
applicability_ref: "proof_additive";
|
|
244
246
|
observation: "proof_additive";
|
|
245
247
|
evidence_capabilities: "proof_additive";
|
|
248
|
+
expected_authority_ref: "semantic_user_review";
|
|
246
249
|
operator: "proof_additive";
|
|
247
250
|
expected: "proof_additive";
|
|
248
251
|
};
|
|
@@ -13,6 +13,7 @@ const SOURCE_CLAIM_AUTHORITY_POLICY = {
|
|
|
13
13
|
source_ref: "scope",
|
|
14
14
|
statement: "semantic_user_review",
|
|
15
15
|
disposition: "semantic_user_review",
|
|
16
|
+
judgment_basis: "semantic_user_review",
|
|
16
17
|
};
|
|
17
18
|
const RISK_AUTHORITY_POLICY = {
|
|
18
19
|
requested_level: "semantic_user_review",
|
|
@@ -20,6 +21,7 @@ const RISK_AUTHORITY_POLICY = {
|
|
|
20
21
|
};
|
|
21
22
|
const GLOBAL_AUTHORITY_POLICY = {
|
|
22
23
|
applicability: "semantic_user_review",
|
|
24
|
+
semantic_fact_bindings: "semantic_user_review",
|
|
23
25
|
product: "semantic_user_review",
|
|
24
26
|
technical: "semantic_user_review",
|
|
25
27
|
acceptance: "proof_additive",
|
|
@@ -226,6 +228,7 @@ const ASSERTION_AUTHORITY_POLICY = {
|
|
|
226
228
|
applicability_ref: "proof_additive",
|
|
227
229
|
observation: "proof_additive",
|
|
228
230
|
evidence_capabilities: "proof_additive",
|
|
231
|
+
expected_authority_ref: "semantic_user_review",
|
|
229
232
|
operator: "proof_additive",
|
|
230
233
|
expected: "proof_additive",
|
|
231
234
|
};
|
|
@@ -58,7 +58,8 @@ export function sourceClaimReductions(beforeClaims, afterClaims) {
|
|
|
58
58
|
}
|
|
59
59
|
if (claim.statement !== candidate.statement ||
|
|
60
60
|
claim.source_ref !== candidate.source_ref ||
|
|
61
|
-
claim.disposition.type !== candidate.disposition.type
|
|
61
|
+
claim.disposition.type !== candidate.disposition.type ||
|
|
62
|
+
!same(claim.judgment_basis, candidate.judgment_basis)) {
|
|
62
63
|
changed.push(`${claim.key}:authority_changed`);
|
|
63
64
|
continue;
|
|
64
65
|
}
|
|
@@ -2,6 +2,7 @@ import type { DeliveryControlV2, DeliveryOutcomeV2, ProofSurface } from "./long-
|
|
|
2
2
|
import type { ClaimApplicabilityV2, DeliveryStageV2, ExecutionTargetV2, TargetProfileV2 } from "./long-task-semantic-contract-types.js";
|
|
3
3
|
import type { DeliverySurfaceBindingV2 } from "./long-task-ui-surface-types.js";
|
|
4
4
|
import type { CompiledSourceItemV2 } from "./long-task-source-authority-types.js";
|
|
5
|
+
import type { SemanticFactGlobalBindingsV2 } from "./long-task-semantic-fact-binding-types.js";
|
|
5
6
|
import type { WorkspaceManifestV2 } from "./long-task-workspace-runtime-types.js";
|
|
6
7
|
export interface AuthorityHashesV2 {
|
|
7
8
|
source_authority_hash: string;
|
|
@@ -76,6 +77,7 @@ export interface ProductSemanticProjectionV2 {
|
|
|
76
77
|
}
|
|
77
78
|
export interface GlobalSemanticProjectionV2 {
|
|
78
79
|
applicability: ClaimApplicabilityV2[];
|
|
80
|
+
semantic_fact_bindings: SemanticFactGlobalBindingsV2 | null;
|
|
79
81
|
constraints: Array<{
|
|
80
82
|
key: string;
|
|
81
83
|
statement: string;
|
|
@@ -26,6 +26,7 @@ export function computeAuthorityHashes(contract) {
|
|
|
26
26
|
stages: contract.stages,
|
|
27
27
|
global: {
|
|
28
28
|
applicability: contract.global.applicability,
|
|
29
|
+
semantic_fact_bindings: contract.global.semantic_fact_bindings ?? null,
|
|
29
30
|
product: contract.global.product,
|
|
30
31
|
},
|
|
31
32
|
outcomes: contract.outcomes.map((outcome) => ({
|
|
@@ -44,6 +45,7 @@ export function computeAuthorityHashes(contract) {
|
|
|
44
45
|
})),
|
|
45
46
|
}),
|
|
46
47
|
acceptance_authority_hash: hash({
|
|
48
|
+
global_semantic_fact_bindings: contract.global.semantic_fact_bindings ?? null,
|
|
47
49
|
external_confirmations: contract.global.acceptance.external_confirmations,
|
|
48
50
|
global_checks: contract.global.acceptance.checks.map(acceptanceCheck),
|
|
49
51
|
global_counterfactual_controls: contract.global.acceptance.counterfactual_controls,
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import { execFile, spawn } from "node:child_process";
|
|
2
1
|
import { randomBytes } from "node:crypto";
|
|
3
2
|
import { access, realpath } from "node:fs/promises";
|
|
4
3
|
import net from "node:net";
|
|
5
4
|
import path from "node:path";
|
|
6
|
-
import { promisify } from "node:util";
|
|
7
5
|
import { decodeCheckEvidence, invalidEvidence, } from "./long-task-check-evidence-decoder.js";
|
|
6
|
+
import { spawnCommandOnce } from "./long-task-command-process.js";
|
|
8
7
|
import { declaredEnvironmentValues, outputContainsDeclaredEnvironmentValue, runnerEnvironment, } from "./long-task-runner-environment.js";
|
|
9
8
|
import { decodeProductObservationEnvelope } from "./long-task-process-observation.js";
|
|
10
9
|
import { resolveInsideRepository } from "./long-task-workspace.js";
|
|
11
10
|
import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
|
|
12
|
-
const OUTPUT_LIMIT = 2 * 1024 * 1024;
|
|
13
|
-
const PROCESS_TREE_GRACE_MS = 1_000;
|
|
14
|
-
const execFileAsync = promisify(execFile);
|
|
15
11
|
export async function executeCheckRunner(check, snapshotRoot, context) {
|
|
16
12
|
const started = Date.now();
|
|
17
13
|
let processAuthorities;
|
|
@@ -112,7 +108,7 @@ async function runOnce(check, snapshotRoot, processAuthorities, snapshotSha256,
|
|
|
112
108
|
: runner.executable;
|
|
113
109
|
const argv = [...runner.executable_argv_prefix, ...runner.argv];
|
|
114
110
|
if (!processAuthorities.length) {
|
|
115
|
-
const execution = await
|
|
111
|
+
const execution = await spawnCommandOnce(executable, argv, cwd, runner.timeout_ms, runnerEnvironment(check.environment_requirements), false);
|
|
116
112
|
return {
|
|
117
113
|
...execution,
|
|
118
114
|
process_observation: null,
|
|
@@ -120,7 +116,7 @@ async function runOnce(check, snapshotRoot, processAuthorities, snapshotSha256,
|
|
|
120
116
|
};
|
|
121
117
|
}
|
|
122
118
|
const executionNonce = randomBytes(32).toString("hex");
|
|
123
|
-
const execution = await
|
|
119
|
+
const execution = await spawnCommandOnce(executable, argv, cwd, runner.timeout_ms, runnerEnvironment(check.environment_requirements, "product_observation"), true);
|
|
124
120
|
const processObservation = decodeProductObservationEnvelope({
|
|
125
121
|
bytes: execution.stdout,
|
|
126
122
|
authorities: processAuthorities,
|
|
@@ -160,295 +156,6 @@ async function runOnce(check, snapshotRoot, processAuthorities, snapshotSha256,
|
|
|
160
156
|
},
|
|
161
157
|
};
|
|
162
158
|
}
|
|
163
|
-
async function spawnOnce(executable, argv, cwd, timeoutMs, environment, containProcessTree) {
|
|
164
|
-
return new Promise((resolve, reject) => {
|
|
165
|
-
const startedAt = new Date().toISOString();
|
|
166
|
-
const child = spawn(executable, argv, {
|
|
167
|
-
cwd,
|
|
168
|
-
shell: false,
|
|
169
|
-
windowsHide: true,
|
|
170
|
-
env: environment,
|
|
171
|
-
detached: containProcessTree && process.platform !== "win32",
|
|
172
|
-
});
|
|
173
|
-
const pid = child.pid ?? -1;
|
|
174
|
-
let stopTreeMonitor = false;
|
|
175
|
-
let treeMonitorError = null;
|
|
176
|
-
const observedDescendants = new Set();
|
|
177
|
-
const treeMonitor = containProcessTree && pid > 0
|
|
178
|
-
? observeDescendantProcesses(pid, observedDescendants, () => stopTreeMonitor).catch((error) => {
|
|
179
|
-
treeMonitorError = error;
|
|
180
|
-
})
|
|
181
|
-
: Promise.resolve();
|
|
182
|
-
const stdout = [];
|
|
183
|
-
const stderr = [];
|
|
184
|
-
let size = 0;
|
|
185
|
-
let settled = false;
|
|
186
|
-
let terminationReason = null;
|
|
187
|
-
let terminationTask = null;
|
|
188
|
-
let forceTimer = null;
|
|
189
|
-
let abandonTimer = null;
|
|
190
|
-
const capture = (target) => (chunk) => {
|
|
191
|
-
size += chunk.length;
|
|
192
|
-
if (size > OUTPUT_LIMIT) {
|
|
193
|
-
terminate("command_output_limit_exceeded");
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
target.push(Buffer.from(chunk));
|
|
197
|
-
};
|
|
198
|
-
child.stdout.on("data", capture(stdout));
|
|
199
|
-
child.stderr.on("data", capture(stderr));
|
|
200
|
-
child.on("error", (error) => {
|
|
201
|
-
if (!settled) {
|
|
202
|
-
settled = true;
|
|
203
|
-
stopTreeMonitor = true;
|
|
204
|
-
clearTimeout(timer);
|
|
205
|
-
if (forceTimer)
|
|
206
|
-
clearTimeout(forceTimer);
|
|
207
|
-
if (abandonTimer)
|
|
208
|
-
clearTimeout(abandonTimer);
|
|
209
|
-
const spawnError = new Error(`command_spawn_error:${message(error)}`);
|
|
210
|
-
if (containProcessTree && pid > 0)
|
|
211
|
-
void terminateProcessTree(pid, true, [...observedDescendants])
|
|
212
|
-
.catch(() => undefined)
|
|
213
|
-
.finally(() => reject(spawnError));
|
|
214
|
-
else
|
|
215
|
-
reject(spawnError);
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
const timer = setTimeout(() => {
|
|
219
|
-
terminate("command_timeout");
|
|
220
|
-
}, timeoutMs);
|
|
221
|
-
if (pid < 0)
|
|
222
|
-
terminate("command_spawn_pid_unavailable");
|
|
223
|
-
child.on("close", async (code) => {
|
|
224
|
-
stopTreeMonitor = true;
|
|
225
|
-
clearTimeout(timer);
|
|
226
|
-
if (forceTimer)
|
|
227
|
-
clearTimeout(forceTimer);
|
|
228
|
-
if (abandonTimer)
|
|
229
|
-
clearTimeout(abandonTimer);
|
|
230
|
-
if (settled)
|
|
231
|
-
return;
|
|
232
|
-
settled = true;
|
|
233
|
-
if (terminationReason) {
|
|
234
|
-
try {
|
|
235
|
-
await terminationTask;
|
|
236
|
-
await treeMonitor;
|
|
237
|
-
if (containProcessTree)
|
|
238
|
-
await forceProcessTreeQuiescence(pid, observedDescendants);
|
|
239
|
-
}
|
|
240
|
-
catch {
|
|
241
|
-
// The original bounded termination reason remains the public error;
|
|
242
|
-
// cleanup is best-effort after the hard process-tree kill attempt.
|
|
243
|
-
}
|
|
244
|
-
reject(terminationReason);
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
if (containProcessTree) {
|
|
248
|
-
try {
|
|
249
|
-
await treeMonitor;
|
|
250
|
-
if (treeMonitorError)
|
|
251
|
-
throw treeMonitorError;
|
|
252
|
-
await assertProcessTreeQuiescent(pid, observedDescendants);
|
|
253
|
-
}
|
|
254
|
-
catch (error) {
|
|
255
|
-
await terminateProcessTree(pid, true, [...observedDescendants]).catch(() => undefined);
|
|
256
|
-
reject(error);
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
resolve({
|
|
261
|
-
exit_code: code ?? -1,
|
|
262
|
-
stdout: Buffer.concat(stdout),
|
|
263
|
-
stderr: Buffer.concat(stderr),
|
|
264
|
-
pid,
|
|
265
|
-
started_at: startedAt,
|
|
266
|
-
completed_at: new Date().toISOString(),
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
function terminate(reason) {
|
|
270
|
-
if (settled || terminationReason)
|
|
271
|
-
return;
|
|
272
|
-
terminationReason = new Error(reason);
|
|
273
|
-
stopTreeMonitor = true;
|
|
274
|
-
if (containProcessTree)
|
|
275
|
-
terminationTask = terminateProcessTree(pid, false).catch((error) => {
|
|
276
|
-
treeMonitorError ??= error;
|
|
277
|
-
});
|
|
278
|
-
else {
|
|
279
|
-
child.kill();
|
|
280
|
-
terminationTask = Promise.resolve();
|
|
281
|
-
}
|
|
282
|
-
forceTimer = setTimeout(() => {
|
|
283
|
-
if (containProcessTree)
|
|
284
|
-
terminationTask = terminateProcessTree(pid, true, [
|
|
285
|
-
...observedDescendants,
|
|
286
|
-
]).catch((error) => {
|
|
287
|
-
treeMonitorError ??= error;
|
|
288
|
-
});
|
|
289
|
-
else
|
|
290
|
-
child.kill("SIGKILL");
|
|
291
|
-
}, PROCESS_TREE_GRACE_MS);
|
|
292
|
-
forceTimer.unref();
|
|
293
|
-
abandonTimer = setTimeout(() => {
|
|
294
|
-
if (settled)
|
|
295
|
-
return;
|
|
296
|
-
settled = true;
|
|
297
|
-
child.stdout.destroy();
|
|
298
|
-
child.stderr.destroy();
|
|
299
|
-
const cleanup = containProcessTree
|
|
300
|
-
? forceProcessTreeQuiescence(pid, observedDescendants).catch(() => undefined)
|
|
301
|
-
: Promise.resolve();
|
|
302
|
-
void cleanup.finally(() => reject(terminationReason));
|
|
303
|
-
}, PROCESS_TREE_GRACE_MS * 2);
|
|
304
|
-
abandonTimer.unref();
|
|
305
|
-
}
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
async function forceProcessTreeQuiescence(rootPid, observed) {
|
|
309
|
-
await terminateProcessTree(rootPid, true, [...observed]);
|
|
310
|
-
const deadline = Date.now() + PROCESS_TREE_GRACE_MS;
|
|
311
|
-
while (Date.now() < deadline) {
|
|
312
|
-
const liveObserved = [rootPid, ...observed].some(processIdExists);
|
|
313
|
-
const groupAlive = process.platform !== "win32" && processGroupExists(rootPid);
|
|
314
|
-
if (!liveObserved && !groupAlive)
|
|
315
|
-
return;
|
|
316
|
-
await new Promise((resolve) => setTimeout(resolve, process.platform === "win32" ? 100 : 25));
|
|
317
|
-
}
|
|
318
|
-
throw new Error("process_observer_descendant_process_alive");
|
|
319
|
-
}
|
|
320
|
-
async function observeDescendantProcesses(rootPid, observed, stopped) {
|
|
321
|
-
do {
|
|
322
|
-
for (const pid of await descendantProcessIds(rootPid))
|
|
323
|
-
observed.add(pid);
|
|
324
|
-
if (stopped())
|
|
325
|
-
return;
|
|
326
|
-
await new Promise((resolve) => setTimeout(resolve, process.platform === "win32" ? 100 : 25));
|
|
327
|
-
} while (!stopped());
|
|
328
|
-
}
|
|
329
|
-
async function assertProcessTreeQuiescent(rootPid, observed) {
|
|
330
|
-
const finalDescendants = await descendantProcessIds(rootPid);
|
|
331
|
-
const descendants = [...new Set([...observed, ...finalDescendants])].filter(processIdExists);
|
|
332
|
-
const processGroupAlive = process.platform !== "win32" && processGroupExists(rootPid);
|
|
333
|
-
if (!descendants.length && !processGroupAlive)
|
|
334
|
-
return;
|
|
335
|
-
await terminateProcessTree(rootPid, true, descendants);
|
|
336
|
-
throw new Error("process_observer_descendant_process_alive");
|
|
337
|
-
}
|
|
338
|
-
function processIdExists(pid) {
|
|
339
|
-
try {
|
|
340
|
-
process.kill(pid, 0);
|
|
341
|
-
return true;
|
|
342
|
-
}
|
|
343
|
-
catch (error) {
|
|
344
|
-
if (nodeErrorCode(error) === "ESRCH")
|
|
345
|
-
return false;
|
|
346
|
-
throw error;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
async function terminateProcessTree(rootPid, force, knownDescendants) {
|
|
350
|
-
if (!Number.isSafeInteger(rootPid) || rootPid <= 0)
|
|
351
|
-
return;
|
|
352
|
-
if (process.platform === "win32") {
|
|
353
|
-
const targets = [
|
|
354
|
-
rootPid,
|
|
355
|
-
...[...new Set(knownDescendants ?? [])]
|
|
356
|
-
.filter((pid) => pid !== rootPid)
|
|
357
|
-
.reverse(),
|
|
358
|
-
];
|
|
359
|
-
for (const pid of targets)
|
|
360
|
-
await execFileAsync("taskkill.exe", ["/PID", String(pid), "/T", "/F"], {
|
|
361
|
-
windowsHide: true,
|
|
362
|
-
timeout: PROCESS_TREE_GRACE_MS,
|
|
363
|
-
}).catch(() => undefined);
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
const signal = force ? "SIGKILL" : "SIGTERM";
|
|
367
|
-
try {
|
|
368
|
-
process.kill(-rootPid, signal);
|
|
369
|
-
}
|
|
370
|
-
catch (error) {
|
|
371
|
-
if (nodeErrorCode(error) !== "ESRCH")
|
|
372
|
-
throw error;
|
|
373
|
-
}
|
|
374
|
-
const descendants = knownDescendants ?? (await descendantProcessIds(rootPid));
|
|
375
|
-
for (const pid of [...descendants].reverse())
|
|
376
|
-
try {
|
|
377
|
-
process.kill(pid, signal);
|
|
378
|
-
}
|
|
379
|
-
catch (error) {
|
|
380
|
-
if (nodeErrorCode(error) !== "ESRCH")
|
|
381
|
-
throw error;
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
async function descendantProcessIds(rootPid) {
|
|
385
|
-
let stdout;
|
|
386
|
-
try {
|
|
387
|
-
const result = process.platform === "win32"
|
|
388
|
-
? await execFileAsync("powershell.exe", [
|
|
389
|
-
"-NoLogo",
|
|
390
|
-
"-NoProfile",
|
|
391
|
-
"-NonInteractive",
|
|
392
|
-
"-Command",
|
|
393
|
-
'Get-CimInstance Win32_Process | ForEach-Object { "$($_.ProcessId) $($_.ParentProcessId)" }',
|
|
394
|
-
], {
|
|
395
|
-
encoding: "utf8",
|
|
396
|
-
windowsHide: true,
|
|
397
|
-
timeout: 5_000,
|
|
398
|
-
maxBuffer: OUTPUT_LIMIT,
|
|
399
|
-
})
|
|
400
|
-
: await execFileAsync("ps", ["-A", "-o", "pid=,ppid="], {
|
|
401
|
-
encoding: "utf8",
|
|
402
|
-
timeout: 5_000,
|
|
403
|
-
maxBuffer: OUTPUT_LIMIT,
|
|
404
|
-
});
|
|
405
|
-
stdout = result.stdout;
|
|
406
|
-
}
|
|
407
|
-
catch (error) {
|
|
408
|
-
throw new Error(`process_observer_process_tree_inspection_unavailable:${message(error)}`);
|
|
409
|
-
}
|
|
410
|
-
const children = new Map();
|
|
411
|
-
for (const line of stdout.split(/\r?\n/u)) {
|
|
412
|
-
const [pidText, parentText] = line.trim().split(/\s+/u);
|
|
413
|
-
const pid = Number.parseInt(pidText ?? "", 10);
|
|
414
|
-
const parent = Number.parseInt(parentText ?? "", 10);
|
|
415
|
-
if (!Number.isSafeInteger(pid) || !Number.isSafeInteger(parent))
|
|
416
|
-
continue;
|
|
417
|
-
const row = children.get(parent);
|
|
418
|
-
if (row)
|
|
419
|
-
row.push(pid);
|
|
420
|
-
else
|
|
421
|
-
children.set(parent, [pid]);
|
|
422
|
-
}
|
|
423
|
-
const result = [];
|
|
424
|
-
const pending = [...(children.get(rootPid) ?? [])];
|
|
425
|
-
const seen = new Set();
|
|
426
|
-
while (pending.length) {
|
|
427
|
-
const pid = pending.shift();
|
|
428
|
-
if (seen.has(pid))
|
|
429
|
-
continue;
|
|
430
|
-
seen.add(pid);
|
|
431
|
-
result.push(pid);
|
|
432
|
-
pending.push(...(children.get(pid) ?? []));
|
|
433
|
-
}
|
|
434
|
-
return result;
|
|
435
|
-
}
|
|
436
|
-
function processGroupExists(rootPid) {
|
|
437
|
-
try {
|
|
438
|
-
process.kill(-rootPid, 0);
|
|
439
|
-
return true;
|
|
440
|
-
}
|
|
441
|
-
catch (error) {
|
|
442
|
-
if (nodeErrorCode(error) === "ESRCH")
|
|
443
|
-
return false;
|
|
444
|
-
throw error;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
function nodeErrorCode(error) {
|
|
448
|
-
return error && typeof error === "object" && "code" in error
|
|
449
|
-
? String(error.code)
|
|
450
|
-
: null;
|
|
451
|
-
}
|
|
452
159
|
function validateProcessObserverActivation(check, snapshotRoot, authorities, context) {
|
|
453
160
|
if (!authorities.length)
|
|
454
161
|
return null;
|
|
@@ -89,7 +89,7 @@ function parseRunner(value, label) {
|
|
|
89
89
|
function parseAssertions(value, label) {
|
|
90
90
|
return array(value, label).map((item, index) => {
|
|
91
91
|
const itemLabel = `${label}[${index}]`;
|
|
92
|
-
const row = object(item, itemLabel, ["key", "claims", "observation", "operator", "evidence_capabilities"], ["criterion", "applicability_ref", "expected"]);
|
|
92
|
+
const row = object(item, itemLabel, ["key", "claims", "observation", "operator", "evidence_capabilities"], ["criterion", "applicability_ref", "expected", "expected_authority_ref"]);
|
|
93
93
|
const operator = literal(row.operator, [
|
|
94
94
|
"equals",
|
|
95
95
|
"not_equals",
|
|
@@ -128,6 +128,11 @@ function parseAssertions(value, label) {
|
|
|
128
128
|
: {}),
|
|
129
129
|
observation: string(row.observation, `${itemLabel}.observation`),
|
|
130
130
|
evidence_capabilities: array(row.evidence_capabilities, `${itemLabel}.evidence_capabilities`).map((capability, capabilityIndex) => literal(capability, EVIDENCE_CAPABILITIES, `${itemLabel}.evidence_capabilities[${capabilityIndex}]`)),
|
|
131
|
+
...(Object.hasOwn(row, "expected_authority_ref")
|
|
132
|
+
? {
|
|
133
|
+
expected_authority_ref: string(row.expected_authority_ref, `${itemLabel}.expected_authority_ref`),
|
|
134
|
+
}
|
|
135
|
+
: {}),
|
|
131
136
|
operator,
|
|
132
137
|
};
|
|
133
138
|
return isBinaryAssertionOperator(operator)
|
|
@@ -26,9 +26,7 @@ export function generateClaims(outcome) {
|
|
|
26
26
|
.filter((proof) => proof.fact_ref === binding.fact_ref)
|
|
27
27
|
.map((proof) => proof.proof_surface)),
|
|
28
28
|
];
|
|
29
|
-
claims.push(claim(outcome.key, binding.claim_ref, "semantic_fact", requiredSurfaces, [
|
|
30
|
-
binding.applicability_ref,
|
|
31
|
-
]));
|
|
29
|
+
claims.push(claim(outcome.key, binding.claim_ref, "semantic_fact", requiredSurfaces, [binding.applicability_ref], binding.required_polarity ?? "positive"));
|
|
32
30
|
}
|
|
33
31
|
for (const item of outcome.technical.forbidden_shortcuts)
|
|
34
32
|
claims.push(claim(outcome.key, `forbidden_shortcut.${item.key}`, "forbidden_shortcut", [], item.applicability_refs, "negative"));
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { DeliveryContractV2, EvidenceCapabilityV2, ProductClaimV2 } from "./long-task-delivery-types.js";
|
|
2
|
+
import type { SemanticFactManifestV1 } from "./semantic-fact-types.js";
|
|
3
|
+
export declare function claimSemanticCapabilityFloor(contract: DeliveryContractV2, manifest: SemanticFactManifestV1, outcomeKey: string | null, localClaim: string, applicabilityRef: string | null, claimKind?: ProductClaimV2["kind"] | string, requiredProofSurfaces?: readonly string[]): Set<EvidenceCapabilityV2>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { semanticFactClosureInvalid } from "./long-task-semantic-fact-closure-primitives.js";
|
|
2
|
+
import { semanticFactProofCapabilityFloor } from "./long-task-semantic-proof-profile.js";
|
|
3
|
+
const FACT_REQUIRED_CLAIM_KINDS = new Set([
|
|
4
|
+
"result",
|
|
5
|
+
"requirement",
|
|
6
|
+
"obligation",
|
|
7
|
+
"non_completing",
|
|
8
|
+
"forbidden_shortcut",
|
|
9
|
+
"global_non_goal",
|
|
10
|
+
"global_constraint",
|
|
11
|
+
"global_forbidden_shortcut",
|
|
12
|
+
]);
|
|
13
|
+
export function claimSemanticCapabilityFloor(contract, manifest, outcomeKey, localClaim, applicabilityRef, claimKind, requiredProofSurfaces = []) {
|
|
14
|
+
const selected = outcomeKey
|
|
15
|
+
? selectOutcomeFactRefs(contract, manifest, outcomeKey, localClaim, applicabilityRef)
|
|
16
|
+
: selectGlobalFactRefs(contract, localClaim, applicabilityRef);
|
|
17
|
+
const pureStructure = requiredProofSurfaces.length > 0 &&
|
|
18
|
+
requiredProofSurfaces.every((surface) => surface === "implementation_structure");
|
|
19
|
+
if (claimKind &&
|
|
20
|
+
FACT_REQUIRED_CLAIM_KINDS.has(claimKind) &&
|
|
21
|
+
!pureStructure &&
|
|
22
|
+
!selected.length)
|
|
23
|
+
semanticFactClosureInvalid("broad_claim_semantic_fact_required", `${outcomeKey ?? "GLOBAL"}:${localClaim}:${applicabilityRef ?? "none"}`);
|
|
24
|
+
const facts = new Map(manifest.facts.map((fact) => [fact.key, fact]));
|
|
25
|
+
const result = new Set();
|
|
26
|
+
for (const factRef of selected) {
|
|
27
|
+
const fact = facts.get(factRef);
|
|
28
|
+
for (const proof of manifest.proof_obligations.filter((row) => row.fact_ref === factRef))
|
|
29
|
+
for (const capability of semanticFactProofCapabilityFloor(manifest, fact, proof))
|
|
30
|
+
if (capability !== "semantic_fact")
|
|
31
|
+
result.add(capability);
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
function selectGlobalFactRefs(contract, localClaim, applicabilityRef) {
|
|
36
|
+
return [
|
|
37
|
+
...new Set((contract.global.semantic_fact_bindings?.obligations ?? [])
|
|
38
|
+
.filter((binding) => binding.claim_ref === localClaim &&
|
|
39
|
+
(!applicabilityRef ||
|
|
40
|
+
binding.applicability_ref === applicabilityRef))
|
|
41
|
+
.map((binding) => binding.fact_ref)),
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
function selectOutcomeFactRefs(contract, manifest, outcomeKey, localClaim, applicabilityRef) {
|
|
45
|
+
const outcome = contract.outcomes.find((row) => row.key === outcomeKey);
|
|
46
|
+
if (!outcome)
|
|
47
|
+
return [];
|
|
48
|
+
const applicableFactRefs = new Set(outcome.semantic_fact_bindings.facts
|
|
49
|
+
.filter((binding) => !applicabilityRef || binding.applicability_ref === applicabilityRef)
|
|
50
|
+
.map((binding) => binding.fact_ref));
|
|
51
|
+
const directBinding = outcome.semantic_fact_bindings.facts.find((binding) => binding.claim_ref === localClaim);
|
|
52
|
+
let selected = directBinding ? [directBinding.fact_ref] : [];
|
|
53
|
+
if (!selected.length) {
|
|
54
|
+
const fullClaim = `${outcomeKey}.${localClaim}`;
|
|
55
|
+
const sourceRefs = contract.source_claims
|
|
56
|
+
.filter((source) => sourceOwnsClaim(source.disposition, fullClaim))
|
|
57
|
+
.map((source) => source.key);
|
|
58
|
+
selected = manifest.facts
|
|
59
|
+
.filter((fact) => fact.outcome_ref === outcomeKey &&
|
|
60
|
+
applicableFactRefs.has(fact.key) &&
|
|
61
|
+
sourceRefs.some((sourceRef) => fact.source_item_refs.includes(sourceRef)))
|
|
62
|
+
.map((fact) => fact.key);
|
|
63
|
+
}
|
|
64
|
+
if (!selected.length)
|
|
65
|
+
selected = manifest.facts
|
|
66
|
+
.filter((fact) => fact.outcome_ref === outcomeKey && applicableFactRefs.has(fact.key))
|
|
67
|
+
.map((fact) => fact.key);
|
|
68
|
+
return selected;
|
|
69
|
+
}
|
|
70
|
+
function sourceOwnsClaim(disposition, fullClaim) {
|
|
71
|
+
if (disposition.type === "claim")
|
|
72
|
+
return disposition.refs.includes(fullClaim);
|
|
73
|
+
if (disposition.type === "global_constraint")
|
|
74
|
+
return disposition.refs.includes(fullClaim);
|
|
75
|
+
if (disposition.type === "outcome_result")
|
|
76
|
+
return disposition.ref === fullClaim;
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
@@ -4,25 +4,7 @@ export interface CompiledClaimsV2 {
|
|
|
4
4
|
by_outcome: Record<string, ProductClaimV2[]>;
|
|
5
5
|
summary: ClaimCoverageSummaryV2;
|
|
6
6
|
}
|
|
7
|
-
interface ExternalConfirmationProjectionInput {
|
|
8
|
-
global: {
|
|
9
|
-
acceptance: {
|
|
10
|
-
external_confirmations: readonly {
|
|
11
|
-
blocks_target: boolean;
|
|
12
|
-
impact_claims: readonly string[];
|
|
13
|
-
}[];
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
interface AllOutcomeExternalConfirmationProjectionInput extends ExternalConfirmationProjectionInput {
|
|
18
|
-
outcomes: readonly {
|
|
19
|
-
key: string;
|
|
20
|
-
}[];
|
|
21
|
-
}
|
|
22
|
-
export declare function outcomeResultExternallyBlocked(contract: ExternalConfirmationProjectionInput, outcomeKey: string): boolean;
|
|
23
|
-
export declare function allOutcomeResultsExternallyBlocked(contract: AllOutcomeExternalConfirmationProjectionInput): boolean;
|
|
24
7
|
export declare function compileProductClaimCoverage(contract: DeliveryContractV2, options?: {
|
|
25
8
|
allow_uncovered?: boolean;
|
|
26
9
|
}): CompiledClaimsV2;
|
|
27
10
|
export declare function assertCompiledClaimsCovered(compiled: CompiledClaimsV2): void;
|
|
28
|
-
export {};
|