project-tiny-context-harness 0.8.17 → 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 +93 -30
- package/assets/README.md +158 -44
- package/assets/README.zh-CN.md +88 -29
- package/assets/agents/AGENTS_CORE.md +2 -2
- package/assets/context_templates/context.toml +6 -1
- 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/design-resource-authoring/SKILL.md +6 -3
- package/assets/skills/design-resource-authoring/references/authority-delta-assessment.md +52 -0
- package/assets/skills/design-resource-authoring/references/downstream-handoff.md +5 -1
- 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 +8 -1
- 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-input-types.d.ts +1 -1
- package/dist/lib/design-resource-handoff-manifest-projection.js +3 -0
- package/dist/lib/design-resource-handoff-shape.js +14 -2
- package/dist/lib/design-resource-handoff-types.d.ts +3 -0
- package/dist/lib/design-resource-handoff-validation.js +16 -4
- package/dist/lib/design-resource-implementation-feasibility-validation-support.js +1 -1
- 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 +7 -1
- package/dist/lib/design-resource-symbolic-fact-types.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-fact-validation.js +15 -3
- 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 +72 -69
- 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-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.js +3 -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 +6 -1
- package/dist/lib/long-task-delivery-validation.js +19 -4
- package/dist/lib/long-task-design-feasibility-binding.d.ts +1 -0
- package/dist/lib/long-task-design-feasibility-binding.js +3 -3
- package/dist/lib/long-task-design-feasibility-source-closure.js +11 -2
- 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 +3 -1
- package/dist/lib/long-task-design-resource-handoff.js +36 -12
- package/dist/lib/long-task-design-resource-method-binding.js +12 -0
- 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 +128 -5
- 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 +2 -5
- package/dist/lib/long-task-process-table.js +21 -53
- package/dist/lib/long-task-process-tree.d.ts +0 -1
- package/dist/lib/long-task-process-tree.js +24 -54
- 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-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-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 +1 -0
- package/dist/lib/repository-path-safety.js +3 -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 +5 -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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { compareUtf8Paths, normalizeContextPath, } from "./context-catalog/catalog-paths.js";
|
|
1
2
|
import { canonicalJson, sha256Hex } from "./strict-codec.js";
|
|
2
3
|
/**
|
|
3
4
|
* Hashes only manifest structure that can change the currently selected
|
|
@@ -11,13 +12,14 @@ export function contextAuthorityTopologyHash(manifest, selectedFiles) {
|
|
|
11
12
|
.filter((area) => selected.has(normalizeRepoPath(area.context)))
|
|
12
13
|
.map(({ line: _line, default: _default, forbidden_runtime_dependencies, kind, ...area }) => ({
|
|
13
14
|
...area,
|
|
15
|
+
id: area.id.normalize("NFC"),
|
|
14
16
|
...(kind === undefined ? {} : { kind }),
|
|
15
17
|
context: normalizeRepoPath(area.context),
|
|
16
18
|
forbidden_runtime_dependencies: [
|
|
17
19
|
...forbidden_runtime_dependencies,
|
|
18
20
|
].sort(),
|
|
19
21
|
}))
|
|
20
|
-
.sort((left, right) => left.id
|
|
22
|
+
.sort((left, right) => compareUtf8Paths(left.id, right.id)),
|
|
21
23
|
contexts: manifest.contexts
|
|
22
24
|
.filter((context) => selected.has(normalizeRepoPath(context.path)))
|
|
23
25
|
.map(({ line: _line, read_when: _readWhen, read_policy: _readPolicy, triggers: _triggers, default_children, ...context }) => ({
|
|
@@ -26,12 +28,12 @@ export function contextAuthorityTopologyHash(manifest, selectedFiles) {
|
|
|
26
28
|
default_children: [...default_children]
|
|
27
29
|
.map(normalizeRepoPath)
|
|
28
30
|
.filter((child) => selected.has(child))
|
|
29
|
-
.sort(),
|
|
31
|
+
.sort(compareUtf8Paths),
|
|
30
32
|
}))
|
|
31
|
-
.sort((left, right) => left.path
|
|
33
|
+
.sort((left, right) => compareUtf8Paths(left.path, right.path)),
|
|
32
34
|
};
|
|
33
35
|
return sha256Hex(canonicalJson(topology));
|
|
34
36
|
}
|
|
35
37
|
function normalizeRepoPath(value) {
|
|
36
|
-
return value
|
|
38
|
+
return normalizeContextPath(value);
|
|
37
39
|
}
|
|
@@ -3,7 +3,7 @@ import type { CounterfactualControlV2, GlobalCounterfactualControlV2 } from "./l
|
|
|
3
3
|
import type { DeliveryControlFieldNameV2 } from "./long-task-control-types.js";
|
|
4
4
|
import type { ApplicableKeyedStatementV2, CheckExecutionTargetV2, ClaimApplicabilityV2, DeliveryJourneyRoleV2, DeliveryScenarioV2, DeliveryStageV2, EvidenceCapabilityV2, ExecutionTargetV2, ExternalConfirmationKindV2, KeyedStatementV2, TargetProfileV2 } from "./long-task-semantic-contract-types.js";
|
|
5
5
|
import type { DeliverySurfaceBindingV2 } from "./long-task-ui-surface-types.js";
|
|
6
|
-
import type { SemanticFactManifestRefV2, SemanticFactOutcomeBindingsV2 } from "./semantic-fact-types.js";
|
|
6
|
+
import type { SemanticFactGlobalBindingsV2, SemanticFactManifestRefV2, SemanticFactOutcomeBindingsV2 } from "./semantic-fact-types.js";
|
|
7
7
|
export type SourceClaimDispositionV2 = {
|
|
8
8
|
type: "claim";
|
|
9
9
|
refs: string[];
|
|
@@ -26,16 +26,42 @@ export type SourceClaimDispositionV2 = {
|
|
|
26
26
|
type: "decision_required";
|
|
27
27
|
reason: string;
|
|
28
28
|
};
|
|
29
|
+
export type ExternalJudgmentBasisKindV2 = "subjective_preference" | "expert_assessment" | "authorization";
|
|
30
|
+
export interface SourceClaimJudgmentBasisV2 {
|
|
31
|
+
kind: ExternalJudgmentBasisKindV2;
|
|
32
|
+
claim_ref: string;
|
|
33
|
+
applicability_refs: string[];
|
|
34
|
+
}
|
|
29
35
|
export interface SourceClaimV2 {
|
|
30
36
|
key: string;
|
|
31
37
|
source_ref: string;
|
|
32
38
|
statement: string;
|
|
33
39
|
disposition: SourceClaimDispositionV2;
|
|
40
|
+
judgment_basis?: SourceClaimJudgmentBasisV2;
|
|
34
41
|
}
|
|
35
42
|
export interface KeyedPathV2 {
|
|
36
43
|
key: string;
|
|
37
44
|
path: string;
|
|
38
45
|
}
|
|
46
|
+
export type ExternalConfirmationIdentityAssuranceV2 = {
|
|
47
|
+
scheme: "ed25519";
|
|
48
|
+
key_id: string;
|
|
49
|
+
public_key_ref: string;
|
|
50
|
+
} | {
|
|
51
|
+
scheme: "declared_only";
|
|
52
|
+
};
|
|
53
|
+
export type CompiledExternalConfirmationIdentityAssuranceV2 = {
|
|
54
|
+
scheme: "ed25519";
|
|
55
|
+
key_id: string;
|
|
56
|
+
public_key_ref: string;
|
|
57
|
+
public_key_sha256: string;
|
|
58
|
+
} | {
|
|
59
|
+
scheme: "declared_only";
|
|
60
|
+
};
|
|
61
|
+
export interface ExternalConfirmationJudgmentBasisV2 {
|
|
62
|
+
kind: ExternalJudgmentBasisKindV2;
|
|
63
|
+
source_ref: string;
|
|
64
|
+
}
|
|
39
65
|
export interface ExternalConfirmationV2 {
|
|
40
66
|
key: string;
|
|
41
67
|
description: string;
|
|
@@ -43,6 +69,29 @@ export interface ExternalConfirmationV2 {
|
|
|
43
69
|
kind: ExternalConfirmationKindV2;
|
|
44
70
|
impact_claims: string[];
|
|
45
71
|
blocks_target: boolean;
|
|
72
|
+
actor?: {
|
|
73
|
+
id: string;
|
|
74
|
+
role: string;
|
|
75
|
+
authority_kind: "human" | "expert" | "external_system";
|
|
76
|
+
identity_assurance?: ExternalConfirmationIdentityAssuranceV2;
|
|
77
|
+
};
|
|
78
|
+
target_ref?: string;
|
|
79
|
+
environment_identity?: string;
|
|
80
|
+
scenario?: DeliveryScenarioV2;
|
|
81
|
+
evidence_requirements?: KeyedStatementV2[];
|
|
82
|
+
obligations?: Array<{
|
|
83
|
+
key: string;
|
|
84
|
+
claim_ref: string;
|
|
85
|
+
applicability_ref: string;
|
|
86
|
+
fact_ref: string | null;
|
|
87
|
+
proof_ref: string | null;
|
|
88
|
+
method: string;
|
|
89
|
+
proof_surface: ProofSurface;
|
|
90
|
+
evidence_capabilities: EvidenceCapabilityV2[];
|
|
91
|
+
expected_authority_ref: string;
|
|
92
|
+
result_kind: "actual" | "judgment";
|
|
93
|
+
judgment_basis?: ExternalConfirmationJudgmentBasisV2;
|
|
94
|
+
}>;
|
|
46
95
|
}
|
|
47
96
|
export type ProofSurface = "ui_browser" | "runtime_behavior" | "api_contract" | "data_state" | "security_boundary" | "population_coverage" | "implementation_structure";
|
|
48
97
|
export type RunnerType = "package_script" | "project_binary" | "node_oracle" | "playwright_test";
|
|
@@ -56,6 +105,7 @@ interface DeliveryAssertionBaseV2 {
|
|
|
56
105
|
applicability_ref?: string;
|
|
57
106
|
observation: string;
|
|
58
107
|
evidence_capabilities: EvidenceCapabilityV2[];
|
|
108
|
+
expected_authority_ref?: string;
|
|
59
109
|
}
|
|
60
110
|
export type DeliveryAssertionV2 = (DeliveryAssertionBaseV2 & {
|
|
61
111
|
operator: PresenceOrUnaryAssertionOperator;
|
|
@@ -247,6 +297,7 @@ export interface DeliveryContractV2 {
|
|
|
247
297
|
};
|
|
248
298
|
global: {
|
|
249
299
|
applicability: ClaimApplicabilityV2[];
|
|
300
|
+
semantic_fact_bindings?: SemanticFactGlobalBindingsV2;
|
|
250
301
|
product: {
|
|
251
302
|
non_goals: ApplicableKeyedStatementV2[];
|
|
252
303
|
};
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import type { CompiledCheckV2, CounterfactualControlV2, GlobalCounterfactualControlV2, WorkspaceManifestV2 } from "./long-task-delivery-types.js";
|
|
2
2
|
export interface CounterfactualSandboxV2 {
|
|
3
3
|
root: string;
|
|
4
|
+
mutation_source_root: string;
|
|
4
5
|
dispose(): Promise<void>;
|
|
5
6
|
}
|
|
7
|
+
export interface CounterfactualProcessExecutionRootV2 {
|
|
8
|
+
root: string;
|
|
9
|
+
mutation_source_root: string;
|
|
10
|
+
}
|
|
6
11
|
type RemoveTree = (target: string, options: {
|
|
7
12
|
recursive: true;
|
|
8
13
|
force: true;
|
|
9
14
|
}) => Promise<void>;
|
|
10
15
|
type Wait = (milliseconds: number) => Promise<void>;
|
|
11
|
-
export declare function createCounterfactualSandbox(snapshotRoot: string, check: CompiledCheckV2, control: CounterfactualControlV2 | GlobalCounterfactualControlV2, bindingCarrierPaths: string[], manifest?: WorkspaceManifestV2, protectedAuthorityPaths?: readonly string[]): Promise<CounterfactualSandboxV2>;
|
|
16
|
+
export declare function createCounterfactualSandbox(snapshotRoot: string, check: CompiledCheckV2, control: CounterfactualControlV2 | GlobalCounterfactualControlV2, bindingCarrierPaths: string[], manifest?: WorkspaceManifestV2, protectedAuthorityPaths?: readonly string[], executionUniverse?: readonly CompiledCheckV2[]): Promise<CounterfactualSandboxV2>;
|
|
17
|
+
export declare function counterfactualSandboxProcessExecution(sandbox: CounterfactualSandboxV2): CounterfactualProcessExecutionRootV2 | null;
|
|
12
18
|
export declare function removeCounterfactualSandboxRoot(root: string, removeTree?: RemoveTree, wait?: Wait): Promise<void>;
|
|
13
19
|
export {};
|
|
@@ -2,6 +2,7 @@ import { copyFile, cp, lstat, mkdir, mkdtemp, readlink, realpath, rm, symlink, }
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { matchesRepoPattern, normalizeRepositoryFile, } from "./long-task-paths.js";
|
|
5
|
+
const directProcessExecutionSandboxes = new WeakMap();
|
|
5
6
|
const TRANSIENT_REMOVE_CODES = new Set([
|
|
6
7
|
"EBUSY",
|
|
7
8
|
"EMFILE",
|
|
@@ -11,7 +12,7 @@ const TRANSIENT_REMOVE_CODES = new Set([
|
|
|
11
12
|
]);
|
|
12
13
|
const REMOVE_RETRY_LIMIT = process.platform === "win32" ? 6 : 2;
|
|
13
14
|
const REMOVE_RETRY_DELAY_MS = 100;
|
|
14
|
-
export async function createCounterfactualSandbox(snapshotRoot, check, control, bindingCarrierPaths, manifest, protectedAuthorityPaths = []) {
|
|
15
|
+
export async function createCounterfactualSandbox(snapshotRoot, check, control, bindingCarrierPaths, manifest, protectedAuthorityPaths = [], executionUniverse = [check]) {
|
|
15
16
|
const root = await mkdtemp(path.join(os.tmpdir(), "ty-context-counterfactual-"));
|
|
16
17
|
if (!manifest) {
|
|
17
18
|
await cp(snapshotRoot, root, {
|
|
@@ -19,7 +20,26 @@ export async function createCounterfactualSandbox(snapshotRoot, check, control,
|
|
|
19
20
|
force: true,
|
|
20
21
|
dereference: false,
|
|
21
22
|
});
|
|
22
|
-
return disposable(root);
|
|
23
|
+
return disposable(root, root, null);
|
|
24
|
+
}
|
|
25
|
+
const directProcessPaths = directProcessExecutionPaths({
|
|
26
|
+
check,
|
|
27
|
+
control,
|
|
28
|
+
manifest,
|
|
29
|
+
protected_authority_paths: protectedAuthorityPaths,
|
|
30
|
+
execution_universe: executionUniverse,
|
|
31
|
+
});
|
|
32
|
+
let processExecution = null;
|
|
33
|
+
if (directProcessPaths) {
|
|
34
|
+
const processRoot = await mkdtemp(path.join(os.tmpdir(), "ty-context-counterfactual-process-"));
|
|
35
|
+
await copyInBatches(snapshotRoot, processRoot, directProcessPaths);
|
|
36
|
+
await mkdir(path.join(processRoot, check.runner.resolved_cwd), {
|
|
37
|
+
recursive: true,
|
|
38
|
+
});
|
|
39
|
+
processExecution = {
|
|
40
|
+
root: processRoot,
|
|
41
|
+
mutation_source_root: snapshotRoot,
|
|
42
|
+
};
|
|
23
43
|
}
|
|
24
44
|
const exactPaths = new Set([
|
|
25
45
|
...Object.keys(check.runner.frozen_files),
|
|
@@ -54,7 +74,60 @@ export async function createCounterfactualSandbox(snapshotRoot, check, control,
|
|
|
54
74
|
await copyInBatches(snapshotRoot, root, selected);
|
|
55
75
|
await mkdir(path.join(root, check.runner.resolved_cwd), { recursive: true });
|
|
56
76
|
await linkDependencyRoots(snapshotRoot, root, check.runner.resolved_cwd);
|
|
57
|
-
return disposable(root);
|
|
77
|
+
return disposable(root, root, processExecution);
|
|
78
|
+
}
|
|
79
|
+
export function counterfactualSandboxProcessExecution(sandbox) {
|
|
80
|
+
return directProcessExecutionSandboxes.get(sandbox) ?? null;
|
|
81
|
+
}
|
|
82
|
+
function directProcessExecutionPaths(input) {
|
|
83
|
+
const checks = [
|
|
84
|
+
...new Map([
|
|
85
|
+
input.check,
|
|
86
|
+
...input.execution_universe.filter((candidate) => candidate.raw_execution_identity ===
|
|
87
|
+
input.check.raw_execution_identity),
|
|
88
|
+
].map((candidate) => [candidate.internal_id, candidate])).values(),
|
|
89
|
+
];
|
|
90
|
+
const processChecks = checks.filter((candidate) => (candidate.observation_authorities ?? []).some((authority) => authority.authority === "package_process_json_exact"));
|
|
91
|
+
if (!processChecks.some((candidate) => candidate === input.check))
|
|
92
|
+
return null;
|
|
93
|
+
const closures = processChecks.map((candidate) => candidate.process_runtime_closure ?? null);
|
|
94
|
+
if (closures.some((closure) => closure === null))
|
|
95
|
+
return null;
|
|
96
|
+
const closureIdentities = new Set(closures.map((closure) => closure.closure_identity));
|
|
97
|
+
if (closureIdentities.size !== 1)
|
|
98
|
+
return null;
|
|
99
|
+
const primaryClosure = input.check.process_runtime_closure;
|
|
100
|
+
const mutationTargets = input.control.mutation.type === "remove_paths"
|
|
101
|
+
? input.control.mutation.paths
|
|
102
|
+
: [input.control.mutation.path];
|
|
103
|
+
if (mutationTargets.some((target) => !primaryClosure.production_carrier_files.includes(target) ||
|
|
104
|
+
input.protected_authority_paths.some((pattern) => matchesRepoPattern(target, pattern))))
|
|
105
|
+
return null;
|
|
106
|
+
const replacementFixture = input.control.mutation.type === "replace_file"
|
|
107
|
+
? input.control.mutation.fixture_path
|
|
108
|
+
: null;
|
|
109
|
+
if (replacementFixture !== null &&
|
|
110
|
+
!input.manifest.files.some((file) => file.path === replacementFixture))
|
|
111
|
+
return null;
|
|
112
|
+
const selected = new Set();
|
|
113
|
+
for (const candidate of checks)
|
|
114
|
+
for (const authority of candidate.observation_authorities ?? []) {
|
|
115
|
+
if (authority.authority !== "package_static_json_exact" &&
|
|
116
|
+
authority.authority !== "package_process_json_exact")
|
|
117
|
+
continue;
|
|
118
|
+
for (const pattern of authority.carrier_refs.flatMap((carrier) => carrier.carrier_paths))
|
|
119
|
+
for (const file of input.manifest.files)
|
|
120
|
+
if (matchesRepoPattern(file.path, pattern))
|
|
121
|
+
selected.add(file.path);
|
|
122
|
+
if (authority.authority === "package_process_json_exact")
|
|
123
|
+
for (const file of candidate.process_runtime_closure
|
|
124
|
+
.allowed_runtime_files)
|
|
125
|
+
if (input.manifest.files.some((entry) => entry.path === file))
|
|
126
|
+
selected.add(file);
|
|
127
|
+
}
|
|
128
|
+
return [...selected]
|
|
129
|
+
.filter((file) => !input.protected_authority_paths.some((pattern) => matchesRepoPattern(file, pattern)))
|
|
130
|
+
.sort();
|
|
58
131
|
}
|
|
59
132
|
async function copyInBatches(sourceRoot, targetRoot, paths) {
|
|
60
133
|
const concurrency = 32;
|
|
@@ -89,13 +162,20 @@ async function linkDependencyRoots(sourceRoot, targetRoot, resolvedCwd) {
|
|
|
89
162
|
await symlink(await realpath(source), target, process.platform === "win32" ? "junction" : "dir");
|
|
90
163
|
}
|
|
91
164
|
}
|
|
92
|
-
function disposable(root) {
|
|
93
|
-
|
|
165
|
+
function disposable(root, mutationSourceRoot, processExecution) {
|
|
166
|
+
const sandbox = {
|
|
94
167
|
root,
|
|
168
|
+
mutation_source_root: mutationSourceRoot,
|
|
95
169
|
async dispose() {
|
|
96
|
-
|
|
170
|
+
directProcessExecutionSandboxes.delete(sandbox);
|
|
171
|
+
await Promise.all([processExecution?.root, root]
|
|
172
|
+
.filter((candidate) => Boolean(candidate))
|
|
173
|
+
.map((candidate) => removeCounterfactualSandboxRoot(candidate)));
|
|
97
174
|
},
|
|
98
175
|
};
|
|
176
|
+
if (processExecution)
|
|
177
|
+
directProcessExecutionSandboxes.set(sandbox, processExecution);
|
|
178
|
+
return sandbox;
|
|
99
179
|
}
|
|
100
180
|
export async function removeCounterfactualSandboxRoot(root, removeTree = rm, wait = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds))) {
|
|
101
181
|
for (let attempt = 0;; attempt += 1) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CompiledCheckV2, CompiledDeliveryContractV2, CompiledOutcomeV2, ContextAuthoritySnapshotV2, DeliveryContractV2, InitialTaskBaseV2, WorkspaceManifestV2 } from "./long-task-delivery-types.js";
|
|
2
|
+
interface CompileWorkspaceGuardOptions {
|
|
3
|
+
live_gate?: boolean;
|
|
4
|
+
initial_task_base?: InitialTaskBaseV2;
|
|
5
|
+
previous_authority?: CompiledDeliveryContractV2 | null;
|
|
6
|
+
}
|
|
7
|
+
interface CompileWorkspaceGuardInput {
|
|
8
|
+
repository: string;
|
|
9
|
+
workdir: string;
|
|
10
|
+
options: CompileWorkspaceGuardOptions;
|
|
11
|
+
contract: DeliveryContractV2;
|
|
12
|
+
contract_files: Record<string, string>;
|
|
13
|
+
source_hashes: Record<string, string>;
|
|
14
|
+
context_snapshot: ContextAuthoritySnapshotV2;
|
|
15
|
+
workspace: WorkspaceManifestV2;
|
|
16
|
+
global_checks: CompiledCheckV2[];
|
|
17
|
+
outcomes: CompiledOutcomeV2[];
|
|
18
|
+
}
|
|
19
|
+
interface CompileWorkspaceGuardResult {
|
|
20
|
+
previous: CompiledDeliveryContractV2 | null;
|
|
21
|
+
initial_task_base: InitialTaskBaseV2;
|
|
22
|
+
}
|
|
23
|
+
export declare function prepareCompileWorkspaceGuard(input: CompileWorkspaceGuardInput): Promise<CompileWorkspaceGuardResult>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { validateActualRiskSurfaces } from "./long-task-risk-surfaces.js";
|
|
2
|
+
import { changedWorkspacePaths, changedWorkspacePathsFromHead, currentGitTree, } from "./long-task-workspace.js";
|
|
3
|
+
import { assertWorkspaceScope, classifyWorkspaceScope, firstLockManagedWorkspacePaths, protectedWorkspacePaths, } from "./long-task-workspace-scope.js";
|
|
4
|
+
export async function prepareCompileWorkspaceGuard(input) {
|
|
5
|
+
const previous = input.options.live_gate
|
|
6
|
+
? null
|
|
7
|
+
: (input.options.previous_authority ?? null);
|
|
8
|
+
const existingInitialTaskBase = input.options.initial_task_base ?? previous?.initial_task_base ?? null;
|
|
9
|
+
const changedPaths = existingInitialTaskBase
|
|
10
|
+
? changedWorkspacePaths(existingInitialTaskBase.workspace_manifest, input.workspace)
|
|
11
|
+
: await changedWorkspacePathsFromHead(input.repository, input.workdir);
|
|
12
|
+
const firstLockManagedPaths = existingInitialTaskBase
|
|
13
|
+
? []
|
|
14
|
+
: await firstLockManagedWorkspacePaths(input.repository, changedPaths);
|
|
15
|
+
assertWorkspaceScope(classifyWorkspaceScope(input.contract, changedPaths, protectedWorkspacePaths({
|
|
16
|
+
contract_files: input.contract_files,
|
|
17
|
+
source_hashes: input.source_hashes,
|
|
18
|
+
context_hashes: input.context_snapshot.sha256,
|
|
19
|
+
checks: [
|
|
20
|
+
...input.global_checks,
|
|
21
|
+
...input.outcomes.flatMap((outcome) => outcome.acceptance.checks),
|
|
22
|
+
],
|
|
23
|
+
additional_files: firstLockManagedPaths,
|
|
24
|
+
})));
|
|
25
|
+
const initialTaskBase = existingInitialTaskBase ?? {
|
|
26
|
+
git_commit: input.workspace.git_head,
|
|
27
|
+
git_tree: await currentGitTree(input.repository),
|
|
28
|
+
workspace_manifest: input.workspace,
|
|
29
|
+
};
|
|
30
|
+
await validateActualRiskSurfaces(input.repository, changedPaths, input.contract);
|
|
31
|
+
return { previous, initial_task_base: initialTaskBase };
|
|
32
|
+
}
|
|
@@ -11,3 +11,4 @@ export interface CompileDeliveryOptionsV2 {
|
|
|
11
11
|
on_authority_revision?: (proposal: AuthorityRevisionProposalV2) => void;
|
|
12
12
|
}
|
|
13
13
|
export declare function compileDeliveryContract(workdirInput: string, projectRootInput?: string, options?: CompileDeliveryOptionsV2): Promise<CompiledDeliveryContractV2>;
|
|
14
|
+
export declare function compiledAcceptanceAuthorityHash(declaredHash: string, claimCoverage: unknown, acceptanceReachability: unknown, frozenChecks: unknown): string;
|
|
@@ -6,14 +6,27 @@ import { changedAuthoritySections, computeAuthorityHashes, } from "./long-task-a
|
|
|
6
6
|
import { authorityMaterialsChanged, compiledAuthorityMaterials, computeAuthorityMaterials, } from "./long-task-authority-materials.js";
|
|
7
7
|
import { normalizeContextAuthoritySnapshot } from "./long-task-context-authority.js";
|
|
8
8
|
import { assertRiskNotDowngraded, buildAuthorityRevisionProposal, enforceAuthorityRevision, } from "./long-task-authority-revision-enforcement.js";
|
|
9
|
-
import { validateActualRiskSurfaces } from "./long-task-risk-surfaces.js";
|
|
10
9
|
import { captureVerifierIdentity } from "./long-task-verifier-identity.js";
|
|
11
10
|
import { verifierAuthorityDiff } from "./long-task-verifier-authority.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
11
|
+
import { canonicalExistingLongTaskWorkdir, repoRelative, repositoryRoot, } from "./long-task-workspace.js";
|
|
12
|
+
import { compileExternalConfirmationIdentityAssurances } from "./long-task-external-confirmation-attestation.js";
|
|
13
|
+
import { assertNoUnfinishedContextMutationForAuthority } from "./context-mutation/mutation-journal.js";
|
|
14
|
+
import { currentActiveAuthorityLockToken } from "./long-task-active-authority-lock-context.js";
|
|
15
|
+
import { withActiveAuthorityLock } from "./long-task-state.js";
|
|
16
|
+
import { prepareCompileWorkspaceGuard } from "./long-task-delivery-compiler-preflight.js";
|
|
14
17
|
export async function compileDeliveryContract(workdirInput, projectRootInput = process.cwd(), options = {}) {
|
|
15
18
|
const repository = await repositoryRoot(projectRootInput);
|
|
16
|
-
const
|
|
19
|
+
const compile = () => compileDeliveryContractLocked(workdirInput, repository, options);
|
|
20
|
+
if (currentActiveAuthorityLockToken(repository))
|
|
21
|
+
return compile();
|
|
22
|
+
return withActiveAuthorityLock(repository, "compile", compile);
|
|
23
|
+
}
|
|
24
|
+
async function compileDeliveryContractLocked(workdirInput, repository, options) {
|
|
25
|
+
// The shared lock stays held while every Context, Source and Design input is
|
|
26
|
+
// captured. commitActiveAuthority repeats freshness under a later lock when
|
|
27
|
+
// compilation and binding are separate calls.
|
|
28
|
+
await assertNoUnfinishedContextMutationForAuthority(repository);
|
|
29
|
+
const workdir = await canonicalExistingLongTaskWorkdir(repository, workdirInput);
|
|
17
30
|
const workdirRelative = repoRelative(repository, workdir);
|
|
18
31
|
if (!workdirRelative)
|
|
19
32
|
throw new Error("long_task_workdir_must_not_be_repository_root");
|
|
@@ -42,54 +55,45 @@ export async function compileDeliveryContract(workdirInput, projectRootInput = p
|
|
|
42
55
|
]));
|
|
43
56
|
const contractHash = sha256Hex(canonicalValueJson(contract));
|
|
44
57
|
const authorityMaterials = computeAuthorityMaterials(contract, sourceHashes, sourceItems, context);
|
|
45
|
-
const previous =
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
? changedWorkspacePaths(existingInitialTaskBase.workspace_manifest, current)
|
|
51
|
-
: await changedWorkspacePathsFromHead(repository, workdir);
|
|
52
|
-
const firstLockManagedPaths = existingInitialTaskBase
|
|
53
|
-
? []
|
|
54
|
-
: await firstLockManagedWorkspacePaths(repository, changedPaths);
|
|
55
|
-
assertWorkspaceScope(classifyWorkspaceScope(contract, changedPaths, protectedWorkspacePaths({
|
|
58
|
+
const { previous, initial_task_base: initialTaskBase } = await prepareCompileWorkspaceGuard({
|
|
59
|
+
repository,
|
|
60
|
+
workdir,
|
|
61
|
+
options,
|
|
62
|
+
contract,
|
|
56
63
|
contract_files: contractFiles,
|
|
57
64
|
source_hashes: sourceHashes,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
additional_files: firstLockManagedPaths,
|
|
64
|
-
})));
|
|
65
|
-
const initialTaskBase = existingInitialTaskBase ?? {
|
|
66
|
-
git_commit: current.git_head,
|
|
67
|
-
git_tree: await currentGitTree(repository),
|
|
68
|
-
workspace_manifest: current,
|
|
69
|
-
};
|
|
70
|
-
await validateActualRiskSurfaces(repository, changedPaths, contract);
|
|
65
|
+
context_snapshot: context,
|
|
66
|
+
workspace: current,
|
|
67
|
+
global_checks: globalChecks,
|
|
68
|
+
outcomes,
|
|
69
|
+
});
|
|
71
70
|
const verifier = await captureVerifierIdentity(repository, options.require_completion_gate !== false);
|
|
72
71
|
const allChecks = [
|
|
73
72
|
...globalChecks,
|
|
74
73
|
...outcomes.flatMap((outcome) => outcome.acceptance.checks),
|
|
75
74
|
];
|
|
76
75
|
const authorityHashes = computeAuthorityHashes(contract);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
76
|
+
const externalConfirmationIdentityAssurances = await compileExternalConfirmationIdentityAssurances({
|
|
77
|
+
contract,
|
|
78
|
+
repository,
|
|
79
|
+
source_hashes: sourceHashes,
|
|
80
|
+
context_snapshot: context,
|
|
81
|
+
});
|
|
82
|
+
authorityHashes.acceptance_authority_hash = compiledAcceptanceAuthorityHash(authorityHashes.acceptance_authority_hash, claims.summary, validation.acceptance_reachability, allChecks.map((check) => ({
|
|
83
|
+
internal_id: check.internal_id,
|
|
84
|
+
runner_definition: check.runner.definition_sha256,
|
|
85
|
+
resolved_cwd: check.runner.resolved_cwd,
|
|
86
|
+
resolved_target: check.runner.resolved_target,
|
|
87
|
+
package_script: check.runner.package_script,
|
|
88
|
+
verification_inputs: check.verification_input_hashes,
|
|
89
|
+
raw_execution_identity: check.raw_execution_identity,
|
|
90
|
+
evidence_adapter: check.evidence_adapter,
|
|
91
|
+
observation_authorities: check.observation_authorities,
|
|
92
|
+
process_runtime_closure: check.process_runtime_closure,
|
|
93
|
+
completion_role: check.completion_role,
|
|
94
|
+
expected_authority_refs: check.expected_authority_refs,
|
|
95
|
+
required_evidence_capabilities: check.required_evidence_capabilities,
|
|
96
|
+
})));
|
|
93
97
|
let authorityRevision = options.authority_revision ?? previous?.authority_revision ?? 1;
|
|
94
98
|
if (previous) {
|
|
95
99
|
const changes = changedAuthoritySections(previous.authority_hashes, authorityHashes);
|
|
@@ -122,6 +126,7 @@ export async function compileDeliveryContract(workdirInput, projectRootInput = p
|
|
|
122
126
|
source_hashes: sourceHashes,
|
|
123
127
|
source_items: sourceItems,
|
|
124
128
|
context_snapshot: normalizeContextAuthoritySnapshot(context),
|
|
129
|
+
project_design_authority: validation.project_design_authority,
|
|
125
130
|
verifier_identity: verifier,
|
|
126
131
|
effective_risk: risk.effective_level,
|
|
127
132
|
risk_reasons: risk.reasons,
|
|
@@ -131,6 +136,8 @@ export async function compileDeliveryContract(workdirInput, projectRootInput = p
|
|
|
131
136
|
authority_materials: authorityMaterials,
|
|
132
137
|
authority_revision: authorityRevision,
|
|
133
138
|
claim_coverage: claims.summary,
|
|
139
|
+
acceptance_reachability: validation.acceptance_reachability,
|
|
140
|
+
external_confirmation_identity_assurances: externalConfirmationIdentityAssurances,
|
|
134
141
|
semantic_fact_manifest: contract.semantic_fact_manifest,
|
|
135
142
|
task: contract.task,
|
|
136
143
|
risk: contract.risk,
|
|
@@ -153,3 +160,11 @@ export async function compileDeliveryContract(workdirInput, projectRootInput = p
|
|
|
153
160
|
compiled_identity: sha256Hex(canonicalValueJson(unsigned)),
|
|
154
161
|
};
|
|
155
162
|
}
|
|
163
|
+
export function compiledAcceptanceAuthorityHash(declaredHash, claimCoverage, acceptanceReachability, frozenChecks) {
|
|
164
|
+
return sha256Hex(canonicalValueJson({
|
|
165
|
+
declared: declaredHash,
|
|
166
|
+
claim_coverage: claimCoverage,
|
|
167
|
+
acceptance_reachability: acceptanceReachability,
|
|
168
|
+
frozen_checks: frozenChecks,
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
@@ -4,6 +4,9 @@ export interface ParsedDeliveryContractV2 {
|
|
|
4
4
|
contract: DeliveryContractV2;
|
|
5
5
|
contract_files: Record<string, string>;
|
|
6
6
|
outcome_files: string[];
|
|
7
|
+
compatibility: {
|
|
8
|
+
completion_authority_defaulted_to_machine_only: boolean;
|
|
9
|
+
};
|
|
7
10
|
}
|
|
8
11
|
export interface ParseDeliveryContractOptions {
|
|
9
12
|
validate_structure?: boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
1
|
+
import { readFile, realpath } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { materializeLongTaskCompactCarrier, materializeLongTaskCompactCarrierForMigration, } from "./long-task-compact-carrier.js";
|
|
4
4
|
import { parseStrictYaml, sha256Hex } from "./strict-codec.js";
|
|
@@ -8,18 +8,18 @@ import { assertProtectedRepositoryFile } from "./long-task-protected-files.js";
|
|
|
8
8
|
import { array, literal, object, parseSourceClaims, strings, } from "./long-task-delivery-shape.js";
|
|
9
9
|
import { parseGlobal, parseRisk, parseStages, parseTask, } from "./long-task-root-shape.js";
|
|
10
10
|
import { parseSemanticFactManifestRef } from "./long-task-semantic-fact-shape.js";
|
|
11
|
-
import { repositoryRoot } from "./long-task-workspace.js";
|
|
11
|
+
import { canonicalExistingLongTaskWorkdir, repositoryRoot, } from "./long-task-workspace.js";
|
|
12
12
|
import { assertNoSemanticDriftMigration, semanticDriftMigrationFields, } from "./long-task-semantic-drift-migration.js";
|
|
13
13
|
export const DELIVERY_CONTRACT_FILE = "delivery-contract.yaml";
|
|
14
14
|
export async function parseDeliveryContract(workdir) {
|
|
15
15
|
return (await parseDeliveryContractBundle(workdir)).contract;
|
|
16
16
|
}
|
|
17
17
|
export async function parseDeliveryContractBundle(workdirInput, repositoryInput, options = {}) {
|
|
18
|
-
const workdir = path.resolve(workdirInput);
|
|
19
|
-
const file = path.join(workdir, DELIVERY_CONTRACT_FILE);
|
|
20
18
|
const repository = repositoryInput
|
|
21
|
-
? path.resolve(repositoryInput)
|
|
22
|
-
: await repositoryRoot(
|
|
19
|
+
? await realpath(path.resolve(repositoryInput))
|
|
20
|
+
: await repositoryRoot(workdirInput);
|
|
21
|
+
const workdir = await canonicalExistingLongTaskWorkdir(repository, workdirInput);
|
|
22
|
+
const file = path.join(workdir, DELIVERY_CONTRACT_FILE);
|
|
23
23
|
const raw = await readFile(await assertProtectedRepositoryFile(repository, file, "delivery_contract"), "utf8");
|
|
24
24
|
let root = parseRoot(raw, true);
|
|
25
25
|
if (Object.hasOwn(root, "compact_semantic_carrier")) {
|
|
@@ -60,14 +60,30 @@ export async function parseDeliveryContractBundle(workdirInput, repositoryInput,
|
|
|
60
60
|
outcomes.sort((left, right) => left.key.localeCompare(right.key));
|
|
61
61
|
}
|
|
62
62
|
const contract = parseContractRoot(root, outcomes);
|
|
63
|
+
const completionAuthorityDefaulted = targetProfileCompletionAuthorityMissing(root);
|
|
63
64
|
if (options.validate_structure !== false)
|
|
64
|
-
validateDeliveryContractStructure(contract
|
|
65
|
+
validateDeliveryContractStructure(contract, {
|
|
66
|
+
deferCompletionAuthorityClosure: true,
|
|
67
|
+
});
|
|
65
68
|
return {
|
|
66
69
|
contract,
|
|
67
70
|
contract_files: Object.fromEntries(Object.entries(files).sort(([a], [b]) => a.localeCompare(b))),
|
|
68
71
|
outcome_files: outcomeFiles,
|
|
72
|
+
compatibility: {
|
|
73
|
+
completion_authority_defaulted_to_machine_only: completionAuthorityDefaulted,
|
|
74
|
+
},
|
|
69
75
|
};
|
|
70
76
|
}
|
|
77
|
+
function targetProfileCompletionAuthorityMissing(root) {
|
|
78
|
+
const task = root.task;
|
|
79
|
+
if (!task || typeof task !== "object" || Array.isArray(task))
|
|
80
|
+
return false;
|
|
81
|
+
const targetProfile = task.target_profile;
|
|
82
|
+
return Boolean(targetProfile &&
|
|
83
|
+
typeof targetProfile === "object" &&
|
|
84
|
+
!Array.isArray(targetProfile) &&
|
|
85
|
+
!Object.hasOwn(targetProfile, "completion_authority"));
|
|
86
|
+
}
|
|
71
87
|
export function parseDeliveryContractText(raw) {
|
|
72
88
|
return parseDeliveryContractTextInternal(raw, false);
|
|
73
89
|
}
|
|
@@ -83,7 +99,9 @@ function parseDeliveryContractTextInternal(raw, allowLegacyCarrier) {
|
|
|
83
99
|
assertNoSemanticDriftMigration(semanticDriftMigrationFields(root));
|
|
84
100
|
}
|
|
85
101
|
const contract = parseContractRoot(root, array(root.outcomes, "outcomes").map((item, index) => parseOutcome(item, `outcomes[${index}]`)));
|
|
86
|
-
validateDeliveryContractStructure(contract
|
|
102
|
+
validateDeliveryContractStructure(contract, {
|
|
103
|
+
deferCompletionAuthorityClosure: true,
|
|
104
|
+
});
|
|
87
105
|
return contract;
|
|
88
106
|
}
|
|
89
107
|
function parseRoot(raw, bundle) {
|
|
@@ -10,4 +10,6 @@ export * from "./long-task-semantic-contract-types.js";
|
|
|
10
10
|
export * from "./long-task-ui-surface-types.js";
|
|
11
11
|
export * from "./long-task-source-authority-types.js";
|
|
12
12
|
export * from "./long-task-workspace-runtime-types.js";
|
|
13
|
+
export * from "./long-task-external-confirmation-types.js";
|
|
14
|
+
export * from "./long-task-completion-types.js";
|
|
13
15
|
export * from "./semantic-fact-types.js";
|
|
@@ -10,4 +10,6 @@ export * from "./long-task-semantic-contract-types.js";
|
|
|
10
10
|
export * from "./long-task-ui-surface-types.js";
|
|
11
11
|
export * from "./long-task-source-authority-types.js";
|
|
12
12
|
export * from "./long-task-workspace-runtime-types.js";
|
|
13
|
+
export * from "./long-task-external-confirmation-types.js";
|
|
14
|
+
export * from "./long-task-completion-types.js";
|
|
13
15
|
export * from "./semantic-fact-types.js";
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import type { DeliveryContractV2 } from "./long-task-delivery-types.js";
|
|
1
|
+
import type { CompiledCheckV2, CompiledOutcomeV2, DeliveryContractV2 } from "./long-task-delivery-types.js";
|
|
2
|
+
import type { AcceptanceReachabilityV1 } from "./long-task-acceptance-reachability-types.js";
|
|
2
3
|
export interface DeliveryContractStructureValidationOptions {
|
|
3
4
|
allowDeferredDesignComponentBindingClosure?: boolean;
|
|
5
|
+
deferCompletionAuthorityClosure?: boolean;
|
|
4
6
|
}
|
|
5
7
|
export declare function validateDeliveryContractStructure(contract: DeliveryContractV2, options?: DeliveryContractStructureValidationOptions): void;
|
|
6
8
|
export declare function deliveryContractStructureDiagnostics(contract: DeliveryContractV2, options?: DeliveryContractStructureValidationOptions): string[];
|
|
9
|
+
export declare function validateResolvedCompletionAuthorityClosure(contract: DeliveryContractV2, compiledGlobalChecks: readonly CompiledCheckV2[], compiledOutcomes: readonly CompiledOutcomeV2[], reachability: AcceptanceReachabilityV1 | null, report?: ValidationReporter): void;
|
|
10
|
+
type ValidationReporter = (message: string) => void;
|
|
11
|
+
export {};
|
|
@@ -23,8 +23,11 @@ export function validateDeliveryContractStructure(contract, options = {}) {
|
|
|
23
23
|
validateSourceClaimMappings(contract, claims);
|
|
24
24
|
validateUiSurfaceBindings(contract, claims, undefined, options);
|
|
25
25
|
assertCompiledClaimsCovered(claims);
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
const completionOptions = {
|
|
27
|
+
defer_completion_authority_closure: options.deferCompletionAuthorityClosure,
|
|
28
|
+
};
|
|
29
|
+
validateDeliveryStages(contract, undefined, completionOptions);
|
|
30
|
+
validateExecutionTargets(contract, undefined, completionOptions);
|
|
28
31
|
validateSemanticAssuranceShape(contract);
|
|
29
32
|
validateEvidenceCapabilityDeclarations(contract);
|
|
30
33
|
validateExternalConfirmationImpacts(contract, claims);
|
|
@@ -35,8 +38,11 @@ export function deliveryContractStructureDiagnostics(contract, options = {}) {
|
|
|
35
38
|
validateUniqueKeys(contract, report);
|
|
36
39
|
validateDependencies(contract, report);
|
|
37
40
|
validateControlClosure(contract, report);
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
const completionOptions = {
|
|
42
|
+
defer_completion_authority_closure: options.deferCompletionAuthorityClosure,
|
|
43
|
+
};
|
|
44
|
+
validateDeliveryStages(contract, report, completionOptions);
|
|
45
|
+
validateExecutionTargets(contract, report, completionOptions);
|
|
40
46
|
validateSemanticAssuranceShape(contract, report);
|
|
41
47
|
validateEvidenceCapabilityDeclarations(contract, report);
|
|
42
48
|
validateOwnerAndBindings(contract, report);
|
|
@@ -54,6 +60,15 @@ export function deliveryContractStructureDiagnostics(contract, options = {}) {
|
|
|
54
60
|
}
|
|
55
61
|
return [...new Set(diagnostics)];
|
|
56
62
|
}
|
|
63
|
+
export function validateResolvedCompletionAuthorityClosure(contract, compiledGlobalChecks, compiledOutcomes, reachability, report) {
|
|
64
|
+
const options = {
|
|
65
|
+
acceptance_reachability: reachability,
|
|
66
|
+
compiled_global_checks: compiledGlobalChecks,
|
|
67
|
+
compiled_outcomes: compiledOutcomes,
|
|
68
|
+
};
|
|
69
|
+
validateDeliveryStages(contract, report, options);
|
|
70
|
+
validateExecutionTargets(contract, report, options);
|
|
71
|
+
}
|
|
57
72
|
function validateEvidenceAdapters(contract, report) {
|
|
58
73
|
for (const check of contract.global.acceptance.checks)
|
|
59
74
|
captureOrReport(report, () => validateEvidenceAdapterCompatibility(check, null));
|