project-tiny-context-harness 0.8.11 → 0.8.13
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/LICENSE +21 -21
- package/README.md +514 -472
- package/assets/README.md +803 -749
- package/assets/README.zh-CN.md +468 -431
- package/assets/agents/.gitkeep +1 -1
- package/assets/agents/AGENTS_CORE.md +22 -24
- package/assets/agents/long-task-implementation.toml +15 -0
- package/assets/context_templates/architecture.md +18 -18
- package/assets/context_templates/area.md +30 -30
- package/assets/context_templates/context.toml +24 -24
- package/assets/context_templates/deployment.md +35 -35
- package/assets/context_templates/global.md +56 -56
- package/assets/context_templates/product-surface-contract.md +70 -70
- package/assets/context_templates/screen-contract.md +189 -189
- package/assets/context_templates/verification.md +25 -25
- package/assets/github/.gitkeep +1 -1
- package/assets/github/harness.yml +39 -39
- package/assets/make/.gitkeep +1 -1
- package/assets/make/ty-context.mk +48 -48
- package/assets/skills/context_development_engineer/SKILL.md +72 -185
- package/assets/skills/context_full_project_export/SKILL.md +28 -28
- package/assets/skills/context_harness_upgrade/SKILL.md +60 -60
- package/assets/skills/context_product_plan/SKILL.md +35 -101
- package/assets/skills/context_surface_contract/SKILL.md +194 -191
- package/assets/skills/context_uiux_design/SKILL.md +49 -172
- package/assets/skills/design-resource-authoring/SKILL.md +54 -88
- package/assets/skills/design-resource-authoring/references/downstream-handoff.md +51 -163
- package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +96 -0
- package/assets/skills/design-resource-authoring/references/open-design-provider.md +140 -120
- package/assets/skills/design-resource-authoring/references/recovery-and-writeback.md +199 -0
- package/assets/skills/design-resource-authoring/references/resource-selection.md +158 -181
- package/assets/skills/design-system-authoring/SKILL.md +57 -57
- package/assets/skills/design-system-authoring/agents/openai.yaml +6 -6
- package/assets/skills/design-system-authoring/references/authority-adoption.md +48 -48
- package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +110 -110
- package/assets/skills/long-task-workflow/SKILL.md +71 -106
- package/assets/skills/long-task-workflow/agents/openai.yaml +1 -1
- package/assets/skills/long-task-workflow/references/authority-lifecycle.md +71 -69
- package/assets/skills/long-task-workflow/references/contract-authoring.md +110 -101
- package/assets/skills/long-task-workflow/references/evidence-design.md +99 -78
- package/assets/skills/long-task-workflow/references/source-authoring.md +90 -90
- package/assets/tools/validate_context.py +442 -442
- package/dist/commands/design-resource-recovery.d.ts +1 -0
- package/dist/commands/design-resource-recovery.js +152 -0
- package/dist/commands/design-resource.js +29 -3
- package/dist/commands/enable.js +2 -0
- package/dist/commands/index.js +2 -2
- package/dist/commands/long-task-revision.js +8 -7
- package/dist/commands/sync.js +2 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -0
- package/dist/lib/compact-authoring-support.d.ts +22 -0
- package/dist/lib/compact-authoring-support.js +143 -0
- package/dist/lib/compact-shared-structure-authoring.d.ts +5 -0
- package/dist/lib/compact-shared-structure-authoring.js +9 -0
- package/dist/lib/compact-shared-structure-types.d.ts +61 -0
- package/dist/lib/compact-shared-structure-types.js +1 -0
- package/dist/lib/compact-shared-structure-validation.d.ts +2 -0
- package/dist/lib/compact-shared-structure-validation.js +159 -0
- package/dist/lib/compact-shared-structures.d.ts +3 -0
- package/dist/lib/compact-shared-structures.js +204 -0
- package/dist/lib/design-resource-fact-enums.d.ts +4 -0
- package/dist/lib/design-resource-fact-enums.js +12 -0
- package/dist/lib/design-resource-fact-manifest-shape-evidence.js +2 -2
- package/dist/lib/design-resource-fact-policy.d.ts +2 -2
- package/dist/lib/design-resource-fact-types.d.ts +2 -2
- package/dist/lib/design-resource-handoff-bundle-draft.js +4 -2
- package/dist/lib/design-resource-handoff-input-types.d.ts +3 -0
- package/dist/lib/design-resource-handoff-parser.d.ts +2 -2
- package/dist/lib/design-resource-handoff-parser.js +2 -2
- package/dist/lib/design-resource-handoff-shape.d.ts +2 -0
- package/dist/lib/design-resource-handoff-shape.js +10 -0
- package/dist/lib/design-resource-handoff-snapshot.js +4 -0
- package/dist/lib/design-resource-handoff-validation.d.ts +4 -1
- package/dist/lib/design-resource-handoff-validation.js +11 -0
- package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +4 -2
- package/dist/lib/design-resource-reconciliation-codec.d.ts +2 -0
- package/dist/lib/design-resource-reconciliation-codec.js +174 -0
- package/dist/lib/design-resource-reconciliation-types.d.ts +62 -0
- package/dist/lib/design-resource-reconciliation-types.js +1 -0
- package/dist/lib/design-resource-reconciliation.d.ts +3 -0
- package/dist/lib/design-resource-reconciliation.js +224 -0
- package/dist/lib/design-resource-recovery-authority-policy.d.ts +8 -0
- package/dist/lib/design-resource-recovery-authority-policy.js +123 -0
- package/dist/lib/design-resource-recovery-catalog-resources.d.ts +6 -0
- package/dist/lib/design-resource-recovery-catalog-resources.js +121 -0
- package/dist/lib/design-resource-recovery-catalog-shape.d.ts +3 -0
- package/dist/lib/design-resource-recovery-catalog-shape.js +104 -0
- package/dist/lib/design-resource-recovery-catalog.d.ts +9 -0
- package/dist/lib/design-resource-recovery-catalog.js +103 -0
- package/dist/lib/design-resource-recovery-cleanup.d.ts +2 -0
- package/dist/lib/design-resource-recovery-cleanup.js +11 -0
- package/dist/lib/design-resource-recovery-codec-primitives.d.ts +19 -0
- package/dist/lib/design-resource-recovery-codec-primitives.js +92 -0
- package/dist/lib/design-resource-recovery-codec.d.ts +4 -0
- package/dist/lib/design-resource-recovery-codec.js +93 -0
- package/dist/lib/design-resource-recovery-current.d.ts +9 -0
- package/dist/lib/design-resource-recovery-current.js +41 -0
- package/dist/lib/design-resource-recovery-delta-policy.d.ts +5 -0
- package/dist/lib/design-resource-recovery-delta-policy.js +108 -0
- package/dist/lib/design-resource-recovery-files.d.ts +37 -0
- package/dist/lib/design-resource-recovery-files.js +204 -0
- package/dist/lib/design-resource-recovery-final-disposition-shape.d.ts +2 -0
- package/dist/lib/design-resource-recovery-final-disposition-shape.js +47 -0
- package/dist/lib/design-resource-recovery-patch-types.d.ts +54 -0
- package/dist/lib/design-resource-recovery-patch-types.js +1 -0
- package/dist/lib/design-resource-recovery-replay.d.ts +7 -0
- package/dist/lib/design-resource-recovery-replay.js +112 -0
- package/dist/lib/design-resource-recovery-repository-bindings.d.ts +9 -0
- package/dist/lib/design-resource-recovery-repository-bindings.js +49 -0
- package/dist/lib/design-resource-recovery-schema.d.ts +5 -0
- package/dist/lib/design-resource-recovery-schema.js +5 -0
- package/dist/lib/design-resource-recovery-shape.d.ts +10 -0
- package/dist/lib/design-resource-recovery-shape.js +184 -0
- package/dist/lib/design-resource-recovery-source-authority.d.ts +5 -0
- package/dist/lib/design-resource-recovery-source-authority.js +219 -0
- package/dist/lib/design-resource-recovery-text.d.ts +17 -0
- package/dist/lib/design-resource-recovery-text.js +186 -0
- package/dist/lib/design-resource-recovery-types.d.ts +197 -0
- package/dist/lib/design-resource-recovery-types.js +1 -0
- package/dist/lib/design-resource-recovery-writeback-policy.d.ts +5 -0
- package/dist/lib/design-resource-recovery-writeback-policy.js +326 -0
- package/dist/lib/design-resource-recovery-writeback-shape.d.ts +6 -0
- package/dist/lib/design-resource-recovery-writeback-shape.js +155 -0
- package/dist/lib/design-resource-recovery.d.ts +44 -0
- package/dist/lib/design-resource-recovery.js +216 -0
- package/dist/lib/design-resource-symbolic-applicability-authority.d.ts +7 -0
- package/dist/lib/design-resource-symbolic-applicability-authority.js +19 -0
- package/dist/lib/design-resource-symbolic-applicability-policy.d.ts +12 -0
- package/dist/lib/design-resource-symbolic-applicability-policy.js +79 -0
- package/dist/lib/design-resource-symbolic-applicability-profiles.d.ts +8 -0
- package/dist/lib/design-resource-symbolic-applicability-profiles.js +55 -0
- package/dist/lib/design-resource-symbolic-applicability-shape.d.ts +2 -0
- package/dist/lib/design-resource-symbolic-applicability-shape.js +76 -0
- package/dist/lib/design-resource-symbolic-applicability-validation.d.ts +7 -0
- package/dist/lib/design-resource-symbolic-applicability-validation.js +128 -0
- package/dist/lib/design-resource-symbolic-compilation.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-compilation.js +13 -0
- package/dist/lib/design-resource-symbolic-denotation.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-denotation.js +167 -0
- package/dist/lib/design-resource-symbolic-disposition-validation.d.ts +4 -0
- package/dist/lib/design-resource-symbolic-disposition-validation.js +28 -0
- package/dist/lib/design-resource-symbolic-fact-policy.d.ts +12 -0
- package/dist/lib/design-resource-symbolic-fact-policy.js +12 -0
- package/dist/lib/design-resource-symbolic-fact-shape.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-fact-shape.js +138 -0
- package/dist/lib/design-resource-symbolic-fact-types.d.ts +213 -0
- package/dist/lib/design-resource-symbolic-fact-types.js +1 -0
- package/dist/lib/design-resource-symbolic-fact-validation.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-fact-validation.js +86 -0
- package/dist/lib/design-resource-symbolic-indexes.d.ts +23 -0
- package/dist/lib/design-resource-symbolic-indexes.js +54 -0
- package/dist/lib/design-resource-symbolic-manifest-shape.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-manifest-shape.js +155 -0
- package/dist/lib/design-resource-symbolic-manifest-validation.d.ts +6 -0
- package/dist/lib/design-resource-symbolic-manifest-validation.js +132 -0
- package/dist/lib/design-resource-symbolic-noninterference-artifact.d.ts +33 -0
- package/dist/lib/design-resource-symbolic-noninterference-artifact.js +110 -0
- package/dist/lib/design-resource-symbolic-noninterference-equivalence.d.ts +3 -0
- package/dist/lib/design-resource-symbolic-noninterference-equivalence.js +77 -0
- package/dist/lib/design-resource-symbolic-noninterference-recompute.d.ts +4 -0
- package/dist/lib/design-resource-symbolic-noninterference-recompute.js +146 -0
- package/dist/lib/design-resource-symbolic-noninterference-scope.d.ts +7 -0
- package/dist/lib/design-resource-symbolic-noninterference-scope.js +49 -0
- package/dist/lib/design-resource-symbolic-noninterference-shape.d.ts +2 -0
- package/dist/lib/design-resource-symbolic-noninterference-shape.js +152 -0
- package/dist/lib/design-resource-symbolic-noninterference-types.d.ts +103 -0
- package/dist/lib/design-resource-symbolic-noninterference-types.js +1 -0
- package/dist/lib/design-resource-symbolic-noninterference-validation.d.ts +5 -0
- package/dist/lib/design-resource-symbolic-noninterference-validation.js +62 -0
- package/dist/lib/design-resource-symbolic-oracle-fingerprint.d.ts +1 -0
- package/dist/lib/design-resource-symbolic-oracle-fingerprint.js +47 -0
- package/dist/lib/design-resource-symbolic-predicate-shape.d.ts +6 -0
- package/dist/lib/design-resource-symbolic-predicate-shape.js +123 -0
- package/dist/lib/design-resource-symbolic-production-closure.d.ts +4 -0
- package/dist/lib/design-resource-symbolic-production-closure.js +144 -0
- package/dist/lib/design-resource-symbolic-proof-authority-validation.d.ts +10 -0
- package/dist/lib/design-resource-symbolic-proof-authority-validation.js +68 -0
- package/dist/lib/design-resource-symbolic-proof-validation.d.ts +10 -0
- package/dist/lib/design-resource-symbolic-proof-validation.js +89 -0
- package/dist/lib/design-resource-symbolic-region-validation.d.ts +19 -0
- package/dist/lib/design-resource-symbolic-region-validation.js +146 -0
- package/dist/lib/design-resource-symbolic-resource-validation.d.ts +5 -0
- package/dist/lib/design-resource-symbolic-resource-validation.js +90 -0
- package/dist/lib/design-resource-symbolic-rule-shape.d.ts +27 -0
- package/dist/lib/design-resource-symbolic-rule-shape.js +158 -0
- package/dist/lib/design-resource-symbolic-safety-validation.d.ts +6 -0
- package/dist/lib/design-resource-symbolic-safety-validation.js +29 -0
- package/dist/lib/design-resource-symbolic-source-ir-evaluation.d.ts +19 -0
- package/dist/lib/design-resource-symbolic-source-ir-evaluation.js +74 -0
- package/dist/lib/design-resource-symbolic-source-ir-evidence.d.ts +44 -0
- package/dist/lib/design-resource-symbolic-source-ir-evidence.js +88 -0
- package/dist/lib/design-resource-symbolic-source-ir-oracle.d.ts +13 -0
- package/dist/lib/design-resource-symbolic-source-ir-oracle.js +96 -0
- package/dist/lib/design-resource-symbolic-source-ir-proof.d.ts +14 -0
- package/dist/lib/design-resource-symbolic-source-ir-proof.js +98 -0
- package/dist/lib/design-resource-symbolic-source-ir-shape.d.ts +2 -0
- package/dist/lib/design-resource-symbolic-source-ir-shape.js +38 -0
- package/dist/lib/design-resource-symbolic-source-ir-types.d.ts +17 -0
- package/dist/lib/design-resource-symbolic-source-ir-types.js +2 -0
- package/dist/lib/design-resource-symbolic-static-dependency-validation.d.ts +2 -0
- package/dist/lib/design-resource-symbolic-static-dependency-validation.js +83 -0
- package/dist/lib/design-resource-symbolic-structural-closure-validation.d.ts +6 -0
- package/dist/lib/design-resource-symbolic-structural-closure-validation.js +79 -0
- package/dist/lib/design-resource-symbolic-validation-support.d.ts +29 -0
- package/dist/lib/design-resource-symbolic-validation-support.js +111 -0
- package/dist/lib/design-resource-v1-capacity-header.d.ts +8 -0
- package/dist/lib/design-resource-v1-capacity-header.js +231 -0
- package/dist/lib/design-resource-v1-capacity.d.ts +5 -0
- package/dist/lib/design-resource-v1-capacity.js +45 -0
- package/dist/lib/init.js +1 -0
- package/dist/lib/long-task-acceptance-shape.js +8 -2
- package/dist/lib/long-task-activation-validation.js +13 -3
- package/dist/lib/long-task-admitted-observation-records.d.ts +25 -0
- package/dist/lib/long-task-admitted-observation-records.js +40 -0
- package/dist/lib/long-task-admitted-observation.d.ts +93 -0
- package/dist/lib/long-task-admitted-observation.js +201 -0
- package/dist/lib/long-task-artifacts.d.ts +1 -0
- package/dist/lib/long-task-artifacts.js +1 -0
- package/dist/lib/long-task-authority-material-diff.js +1 -0
- package/dist/lib/long-task-authority-policy.d.ts +5 -0
- package/dist/lib/long-task-authority-policy.js +5 -0
- package/dist/lib/long-task-authority-revision-details.js +3 -1
- package/dist/lib/long-task-authority.js +2 -1
- package/dist/lib/long-task-check-execution-policy.js +5 -0
- package/dist/lib/long-task-check-runner.d.ts +2 -2
- package/dist/lib/long-task-check-runner.js +440 -23
- package/dist/lib/long-task-claims.d.ts +18 -0
- package/dist/lib/long-task-claims.js +35 -0
- package/dist/lib/long-task-codex-agent-profile.d.ts +42 -0
- package/dist/lib/long-task-codex-agent-profile.js +276 -0
- package/dist/lib/long-task-compact-authoring-projections.d.ts +12 -0
- package/dist/lib/long-task-compact-authoring-projections.js +67 -0
- package/dist/lib/long-task-compact-authoring.d.ts +3 -0
- package/dist/lib/long-task-compact-authoring.js +173 -0
- package/dist/lib/long-task-compact-carrier.d.ts +7 -0
- package/dist/lib/long-task-compact-carrier.js +132 -0
- package/dist/lib/long-task-compact-parser.d.ts +14 -0
- package/dist/lib/long-task-compact-parser.js +123 -0
- package/dist/lib/long-task-compact-primitives.d.ts +22 -0
- package/dist/lib/long-task-compact-primitives.js +132 -0
- package/dist/lib/long-task-compact-projections.d.ts +4 -0
- package/dist/lib/long-task-compact-projections.js +153 -0
- package/dist/lib/long-task-compact-structure-targets.d.ts +2 -0
- package/dist/lib/long-task-compact-structure-targets.js +91 -0
- package/dist/lib/long-task-conformance-policy.js +3 -1
- package/dist/lib/long-task-counterfactual-claim-policy.d.ts +3 -4
- package/dist/lib/long-task-counterfactual-claim-policy.js +11 -3
- package/dist/lib/long-task-counterfactual-sandbox.d.ts +1 -1
- package/dist/lib/long-task-counterfactual-sandbox.js +8 -5
- package/dist/lib/long-task-counterfactual-types.d.ts +2 -0
- package/dist/lib/long-task-delivery-compiler.js +2 -0
- package/dist/lib/long-task-delivery-parser.d.ts +1 -0
- package/dist/lib/long-task-delivery-parser.js +38 -6
- package/dist/lib/long-task-design-resource-handoff.d.ts +2 -1
- package/dist/lib/long-task-design-resource-handoff.js +71 -11
- package/dist/lib/long-task-design-resource-method-binding.d.ts +8 -1
- package/dist/lib/long-task-design-resource-method-binding.js +150 -0
- package/dist/lib/long-task-evidence-capability-codec.js +256 -34
- package/dist/lib/long-task-evidence-capability-policy.d.ts +3 -2
- package/dist/lib/long-task-evidence-capability-policy.js +142 -8
- package/dist/lib/long-task-evidence-capability-runtime.d.ts +5 -2
- package/dist/lib/long-task-evidence-capability-runtime.js +420 -68
- package/dist/lib/long-task-evidence-capability-types.d.ts +70 -2
- package/dist/lib/long-task-evidence-sensitivity-policy.d.ts +9 -0
- package/dist/lib/long-task-evidence-sensitivity-policy.js +31 -1
- package/dist/lib/long-task-evidence-v2.d.ts +4 -4
- package/dist/lib/long-task-evidence-v2.js +322 -44
- package/dist/lib/long-task-exact-comparison.d.ts +16 -0
- package/dist/lib/long-task-exact-comparison.js +28 -0
- package/dist/lib/long-task-execution-observation.d.ts +24 -0
- package/dist/lib/long-task-execution-observation.js +332 -0
- package/dist/lib/long-task-explain-acceptance-link.d.ts +4 -0
- package/dist/lib/long-task-explain-acceptance-link.js +4 -0
- package/dist/lib/long-task-explain-claim-links.d.ts +2 -0
- package/dist/lib/long-task-explain-claim-links.js +2 -0
- package/dist/lib/long-task-explain-source-links.d.ts +6 -0
- package/dist/lib/long-task-final-v2.js +7 -4
- package/dist/lib/long-task-hook-install.d.ts +19 -2
- package/dist/lib/long-task-hook-install.js +288 -91
- package/dist/lib/long-task-json-pointer-observation.d.ts +59 -0
- package/dist/lib/long-task-json-pointer-observation.js +184 -0
- package/dist/lib/long-task-observation-artifact.d.ts +8 -0
- package/dist/lib/long-task-observation-artifact.js +58 -0
- package/dist/lib/long-task-observation-authority.d.ts +17 -0
- package/dist/lib/long-task-observation-authority.js +348 -0
- package/dist/lib/long-task-paths.js +1 -1
- package/dist/lib/long-task-playwright-capability-records.d.ts +2 -0
- package/dist/lib/long-task-playwright-capability-records.js +74 -2
- package/dist/lib/long-task-process-observation.d.ts +6 -0
- package/dist/lib/long-task-process-observation.js +117 -0
- package/dist/lib/long-task-process-runtime-closure.d.ts +13 -0
- package/dist/lib/long-task-process-runtime-closure.js +175 -0
- package/dist/lib/long-task-progress.js +2 -0
- package/dist/lib/long-task-protected-files.d.ts +1 -1
- package/dist/lib/long-task-protected-files.js +1 -30
- package/dist/lib/long-task-risk.js +8 -3
- package/dist/lib/long-task-root-shape.js +10 -1
- package/dist/lib/long-task-runner-environment.d.ts +1 -1
- package/dist/lib/long-task-runner-environment.js +4 -4
- package/dist/lib/long-task-runner-freeze.d.ts +4 -2
- package/dist/lib/long-task-runner-freeze.js +130 -28
- package/dist/lib/long-task-runtime-types.d.ts +111 -0
- package/dist/lib/long-task-scoped-binding.d.ts +13 -0
- package/dist/lib/long-task-scoped-binding.js +11 -0
- package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
- package/dist/lib/long-task-semantic-fact-binding-types.d.ts +8 -0
- package/dist/lib/long-task-semantic-fact-closure.js +4 -1
- package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +1 -1
- package/dist/lib/long-task-semantic-fact-contract-closure.js +18 -6
- package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +1 -1
- package/dist/lib/long-task-semantic-fact-contract-facts.js +4 -1
- package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +1 -1
- package/dist/lib/long-task-semantic-fact-contract-proofs.js +12 -3
- package/dist/lib/long-task-semantic-fact-evidence.d.ts +8 -4
- package/dist/lib/long-task-semantic-fact-evidence.js +103 -43
- package/dist/lib/long-task-semantic-fact-shape.js +17 -6
- package/dist/lib/long-task-shape-primitives.d.ts +1 -1
- package/dist/lib/long-task-shape-primitives.js +1 -0
- package/dist/lib/long-task-source-claim-validation.js +4 -1
- package/dist/lib/long-task-source-item-parser.d.ts +2 -2
- package/dist/lib/long-task-source-item-parser.js +20 -11
- package/dist/lib/long-task-source-target-continuity.d.ts +2 -2
- package/dist/lib/long-task-source-target-continuity.js +35 -2
- package/dist/lib/long-task-source-target-index.d.ts +3 -0
- package/dist/lib/long-task-source-target-index.js +19 -0
- package/dist/lib/long-task-stage-policy.js +10 -4
- package/dist/lib/long-task-static-observation-freeze.d.ts +83 -0
- package/dist/lib/long-task-static-observation-freeze.js +428 -0
- package/dist/lib/long-task-status-projection.js +5 -1
- package/dist/lib/long-task-target-policy.d.ts +1 -1
- package/dist/lib/long-task-target-policy.js +3 -0
- package/dist/lib/long-task-ui-design-policy.js +64 -4
- package/dist/lib/long-task-ui-surface-shape.js +195 -0
- package/dist/lib/long-task-ui-surface-types.d.ts +53 -0
- package/dist/lib/long-task-verifier-dependency-closure.js +7 -3
- package/dist/lib/long-task-verifier-v2.js +70 -9
- package/dist/lib/long-task-worker-selection.d.ts +2 -0
- package/dist/lib/long-task-worker-selection.js +7 -0
- package/dist/lib/long-task-workspace-scope.js +3 -1
- package/dist/lib/long-task-workspace.d.ts +1 -1
- package/dist/lib/long-task-workspace.js +12 -13
- package/dist/lib/migrations.js +58 -0
- package/dist/lib/profiles.js +0 -1
- package/dist/lib/repository-path-safety.d.ts +14 -0
- package/dist/lib/repository-path-safety.js +126 -0
- package/dist/lib/semantic-fact-compact-authoring.d.ts +2 -0
- package/dist/lib/semantic-fact-compact-authoring.js +160 -0
- package/dist/lib/semantic-fact-compact-capacity.d.ts +9 -0
- package/dist/lib/semantic-fact-compact-capacity.js +40 -0
- package/dist/lib/semantic-fact-compact-carrier.d.ts +16 -0
- package/dist/lib/semantic-fact-compact-carrier.js +146 -0
- package/dist/lib/semantic-fact-compact-parser.d.ts +17 -0
- package/dist/lib/semantic-fact-compact-parser.js +168 -0
- package/dist/lib/semantic-fact-compact-revision.d.ts +11 -0
- package/dist/lib/semantic-fact-compact-revision.js +64 -0
- package/dist/lib/semantic-fact-compact-support.d.ts +23 -0
- package/dist/lib/semantic-fact-compact-support.js +159 -0
- package/dist/lib/semantic-fact-policy-census.d.ts +1 -0
- package/dist/lib/semantic-fact-policy-census.js +43 -0
- 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/semantic-fact-source-parser.d.ts +5 -0
- package/dist/lib/semantic-fact-source-parser.js +47 -6
- package/dist/lib/structural-closure-cost.d.ts +79 -0
- package/dist/lib/structural-closure-cost.js +91 -0
- package/dist/lib/symbolic-denotation-dag-builder.d.ts +25 -0
- package/dist/lib/symbolic-denotation-dag-builder.js +176 -0
- package/dist/lib/symbolic-denotation-domain-validation.d.ts +3 -0
- package/dist/lib/symbolic-denotation-domain-validation.js +56 -0
- package/dist/lib/symbolic-denotation-engine.d.ts +32 -0
- package/dist/lib/symbolic-denotation-engine.js +140 -0
- package/dist/lib/symbolic-denotation-public.d.ts +11 -0
- package/dist/lib/symbolic-denotation-public.js +12 -0
- package/dist/lib/symbolic-denotation-runtime.d.ts +20 -0
- package/dist/lib/symbolic-denotation-runtime.js +90 -0
- package/dist/lib/symbolic-denotation-support.d.ts +11 -0
- package/dist/lib/symbolic-denotation-support.js +49 -0
- package/dist/lib/symbolic-denotation-types.d.ts +133 -0
- package/dist/lib/symbolic-denotation-types.js +18 -0
- package/dist/lib/symbolic-denotation-validation.d.ts +6 -0
- package/dist/lib/symbolic-denotation-validation.js +126 -0
- package/dist/lib/sync-engine.d.ts +1 -0
- package/dist/lib/sync-engine.js +4 -1
- package/dist/lib/upgrade.js +1 -0
- package/dist/long-task-hook.js +40 -1
- package/dist/public-types.d.ts +8 -0
- package/dist/public-types.js +1 -0
- package/dist/schemas/design-resource-symbolic-noninterference-artifact-v2.schema.json +289 -0
- package/dist/schemas/design-resource-symbolic-source-ir-v1.schema.json +130 -0
- package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +435 -5
- package/migrations/README.md +92 -15
- package/package.json +2 -2
- package/source-mappings.yaml +28 -25
- package/assets/skills/source-plan-authoring/SKILL.md +0 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { evaluateExactDigestComparison, } from "./long-task-exact-comparison.js";
|
|
2
|
+
import { canonicalValueJson } from "./strict-codec.js";
|
|
2
3
|
export function validateSemanticFactEvidence(check, record, artifactHashes) {
|
|
3
4
|
const expectations = check.semantic_fact_expectations.filter((item) => item.assertion_ref === record.assertion_key);
|
|
4
5
|
if (expectations.length !== 1)
|
|
@@ -15,8 +16,6 @@ export function validateSemanticFactEvidence(check, record, artifactHashes) {
|
|
|
15
16
|
const observerError = validateSemanticFactObservers(record, expected, artifactHashes);
|
|
16
17
|
if (observerError)
|
|
17
18
|
return observerError;
|
|
18
|
-
if (record.verdict !== "passed" || record.comparison.passed !== true)
|
|
19
|
-
return "semantic_fact_failed";
|
|
20
19
|
return null;
|
|
21
20
|
}
|
|
22
21
|
function validateSemanticFactEvidenceAuthority(check, record, expected) {
|
|
@@ -34,24 +33,9 @@ function validateSemanticFactEvidenceAuthority(check, record, expected) {
|
|
|
34
33
|
return "semantic_fact_expected_value_mismatch";
|
|
35
34
|
if (!sameSemanticFactComparisonAuthority(record, expected))
|
|
36
35
|
return "semantic_fact_comparison_authority_mismatch";
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
proof_ref: record.proof_ref,
|
|
41
|
-
target_ref: record.target_ref,
|
|
42
|
-
actual_value_sha256: record.actual_observation.value_sha256,
|
|
43
|
-
expected_value_sha256: expected.expected.sha256,
|
|
44
|
-
comparator: record.comparison.comparator,
|
|
45
|
-
mode: record.comparison.mode,
|
|
46
|
-
parameters_sha256: record.comparison.parameters.sha256,
|
|
47
|
-
tolerance_sha256: record.comparison.tolerance?.sha256 ?? null,
|
|
48
|
-
mask_sha256: record.comparison.mask?.sha256 ?? null,
|
|
49
|
-
passed: record.comparison.passed,
|
|
50
|
-
}))
|
|
51
|
-
return "semantic_fact_comparison_result_identity_mismatch";
|
|
52
|
-
if (record.comparison.comparator === "exact_value" &&
|
|
53
|
-
record.actual_observation.value_sha256 !== expected.expected.sha256)
|
|
54
|
-
return "semantic_fact_exact_value_mismatch";
|
|
36
|
+
const exactError = validateSemanticFactExactComparison(record, expected);
|
|
37
|
+
if (exactError)
|
|
38
|
+
return exactError;
|
|
55
39
|
if (canonicalValueJson(record.oracle) !== canonicalValueJson(expected.oracle) ||
|
|
56
40
|
canonicalValueJson(record.environment) !==
|
|
57
41
|
canonicalValueJson(expected.environment))
|
|
@@ -67,14 +51,33 @@ function sameSemanticFactIdentity(record, expected) {
|
|
|
67
51
|
record.method === expected.method &&
|
|
68
52
|
record.subject_ref === expected.subject_ref &&
|
|
69
53
|
record.condition_ref === expected.condition_ref &&
|
|
70
|
-
record.property_ref === expected.property_ref
|
|
54
|
+
record.property_ref === expected.property_ref &&
|
|
55
|
+
sameSemanticFactRevisionIdentity(record, expected));
|
|
56
|
+
}
|
|
57
|
+
function sameSemanticFactRevisionIdentity(record, expected) {
|
|
58
|
+
const present = record.fact_key !== undefined ||
|
|
59
|
+
record.fact_revision_digest !== undefined ||
|
|
60
|
+
record.obligation_key !== undefined ||
|
|
61
|
+
record.obligation_revision_digest !== undefined;
|
|
62
|
+
if (!expected.revision_identity_required && !present)
|
|
63
|
+
return true;
|
|
64
|
+
return (record.fact_key === expected.fact_key &&
|
|
65
|
+
record.fact_key === record.fact_ref &&
|
|
66
|
+
record.fact_revision_digest === expected.fact_revision_digest &&
|
|
67
|
+
record.obligation_key === expected.obligation_key &&
|
|
68
|
+
record.obligation_key === record.proof_ref &&
|
|
69
|
+
record.obligation_revision_digest === expected.obligation_revision_digest);
|
|
71
70
|
}
|
|
72
71
|
function validSemanticFactRedaction(sensitivity, redaction) {
|
|
73
72
|
return ((sensitivity === "plain" && redaction === null) ||
|
|
74
73
|
(sensitivity === "protected" && redaction !== null));
|
|
75
74
|
}
|
|
76
75
|
function sameSemanticFactComparisonAuthority(record, expected) {
|
|
77
|
-
return (
|
|
76
|
+
return (expected.comparison.comparator === "exact_value" &&
|
|
77
|
+
expected.comparison.mode === "exact" &&
|
|
78
|
+
expected.comparison.tolerance === null &&
|
|
79
|
+
expected.comparison.mask === null &&
|
|
80
|
+
record.comparison.comparator === expected.comparison.comparator &&
|
|
78
81
|
record.comparison.mode === expected.comparison.mode &&
|
|
79
82
|
canonicalValueJson(record.comparison.parameters) ===
|
|
80
83
|
canonicalValueJson(expected.comparison.parameters) &&
|
|
@@ -83,6 +86,17 @@ function sameSemanticFactComparisonAuthority(record, expected) {
|
|
|
83
86
|
canonicalValueJson(record.comparison.mask) ===
|
|
84
87
|
canonicalValueJson(expected.comparison.mask));
|
|
85
88
|
}
|
|
89
|
+
function validateSemanticFactExactComparison(record, expected) {
|
|
90
|
+
const recomputed = evaluateSemanticFactExactComparison(expected, record.target_ref, record.actual_observation.value_sha256);
|
|
91
|
+
if (!recomputed.passed)
|
|
92
|
+
return "semantic_fact_exact_value_mismatch";
|
|
93
|
+
if (record.comparison.passed !== recomputed.passed ||
|
|
94
|
+
record.verdict !== semanticFactVerdict(recomputed.passed))
|
|
95
|
+
return "project_submitted_verdict_disagrees_with_harness";
|
|
96
|
+
return record.comparison.result_sha256 === recomputed.result_sha256
|
|
97
|
+
? null
|
|
98
|
+
: "semantic_fact_comparison_result_identity_mismatch";
|
|
99
|
+
}
|
|
86
100
|
function validateSemanticFactArtifacts(record, expected, artifactHashes) {
|
|
87
101
|
if (artifactHashes[record.actual_observation.artifact_path] !==
|
|
88
102
|
record.actual_observation.artifact_sha256)
|
|
@@ -110,30 +124,74 @@ function validateSemanticFactObservers(record, expected, artifactHashes) {
|
|
|
110
124
|
observerObservations.add(observation);
|
|
111
125
|
if (artifactHashes[observer.artifact_path] !== observer.artifact_sha256)
|
|
112
126
|
return "semantic_fact_observer_artifact_mismatch";
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
observer.value_sha256 !== expected.expected.sha256))
|
|
127
|
+
const recomputed = evaluateSemanticFactExactComparison(expected, observer.target_ref, observer.value_sha256);
|
|
128
|
+
if (!recomputed.passed)
|
|
116
129
|
return "semantic_fact_observer_failed";
|
|
117
|
-
if (observer.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
proof_ref: record.proof_ref,
|
|
121
|
-
target_ref: observer.target_ref,
|
|
122
|
-
actual_value_sha256: observer.value_sha256,
|
|
123
|
-
expected_value_sha256: expected.expected.sha256,
|
|
124
|
-
comparator: record.comparison.comparator,
|
|
125
|
-
mode: record.comparison.mode,
|
|
126
|
-
parameters_sha256: record.comparison.parameters.sha256,
|
|
127
|
-
tolerance_sha256: record.comparison.tolerance?.sha256 ?? null,
|
|
128
|
-
mask_sha256: record.comparison.mask?.sha256 ?? null,
|
|
129
|
-
passed: observer.passed,
|
|
130
|
-
}))
|
|
130
|
+
if (observer.passed !== recomputed.passed)
|
|
131
|
+
return "project_submitted_verdict_disagrees_with_harness";
|
|
132
|
+
if (observer.comparison_result_sha256 !== recomputed.result_sha256)
|
|
131
133
|
return "semantic_fact_observer_comparison_identity_mismatch";
|
|
132
134
|
}
|
|
133
135
|
return null;
|
|
134
136
|
}
|
|
135
137
|
export function semanticFactComparisonResultIdentity(value) {
|
|
136
|
-
return
|
|
138
|
+
return evaluateSemanticFactExactComparisonMaterial(value).result_sha256;
|
|
139
|
+
}
|
|
140
|
+
function evaluateSemanticFactExactComparison(expected, targetRef, actualValueSha256) {
|
|
141
|
+
return evaluateSemanticFactExactComparisonMaterial({
|
|
142
|
+
fact_ref: expected.fact_ref,
|
|
143
|
+
proof_ref: expected.proof_ref,
|
|
144
|
+
fact_key: expected.fact_key,
|
|
145
|
+
fact_revision_digest: expected.fact_revision_digest,
|
|
146
|
+
obligation_key: expected.obligation_key,
|
|
147
|
+
obligation_revision_digest: expected.obligation_revision_digest,
|
|
148
|
+
target_ref: targetRef,
|
|
149
|
+
actual_value_sha256: actualValueSha256,
|
|
150
|
+
expected_value_sha256: expected.expected.sha256,
|
|
151
|
+
comparator: expected.comparison.comparator,
|
|
152
|
+
mode: expected.comparison.mode,
|
|
153
|
+
parameters_sha256: expected.comparison.parameters.sha256,
|
|
154
|
+
tolerance_sha256: expected.comparison.tolerance?.sha256 ?? null,
|
|
155
|
+
mask_sha256: expected.comparison.mask?.sha256 ?? null,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function evaluateSemanticFactExactComparisonMaterial(value) {
|
|
159
|
+
return evaluateExactDigestComparison({
|
|
160
|
+
identity: semanticFactComparisonIdentity(value),
|
|
161
|
+
actual_value_sha256: value.actual_value_sha256,
|
|
162
|
+
expected_value_sha256: value.expected_value_sha256,
|
|
163
|
+
comparator: value.comparator,
|
|
164
|
+
mode: value.mode,
|
|
165
|
+
parameters_sha256: value.parameters_sha256,
|
|
166
|
+
tolerance_sha256: value.tolerance_sha256,
|
|
167
|
+
mask_sha256: value.mask_sha256,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function semanticFactComparisonIdentity(value) {
|
|
171
|
+
const revisionIdentityPresent = value.fact_key !== undefined ||
|
|
172
|
+
value.fact_revision_digest !== undefined ||
|
|
173
|
+
value.obligation_key !== undefined ||
|
|
174
|
+
value.obligation_revision_digest !== undefined;
|
|
175
|
+
return revisionIdentityPresent
|
|
176
|
+
? {
|
|
177
|
+
kind: "semantic_fact_non_ui",
|
|
178
|
+
fact_ref: value.fact_ref,
|
|
179
|
+
proof_ref: value.proof_ref,
|
|
180
|
+
fact_key: value.fact_key,
|
|
181
|
+
fact_revision_digest: value.fact_revision_digest,
|
|
182
|
+
obligation_key: value.obligation_key,
|
|
183
|
+
obligation_revision_digest: value.obligation_revision_digest,
|
|
184
|
+
target_ref: value.target_ref,
|
|
185
|
+
}
|
|
186
|
+
: {
|
|
187
|
+
kind: "semantic_fact_non_ui",
|
|
188
|
+
fact_ref: value.fact_ref,
|
|
189
|
+
proof_ref: value.proof_ref,
|
|
190
|
+
target_ref: value.target_ref,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function semanticFactVerdict(passed) {
|
|
194
|
+
return passed ? "passed" : "failed";
|
|
137
195
|
}
|
|
138
196
|
export function validateDistinctSemanticFactEvidence(records) {
|
|
139
197
|
const observations = new Set();
|
|
@@ -142,7 +200,9 @@ export function validateDistinctSemanticFactEvidence(records) {
|
|
|
142
200
|
for (const record of records) {
|
|
143
201
|
if (record.capability !== "semantic_fact")
|
|
144
202
|
continue;
|
|
145
|
-
const identity =
|
|
203
|
+
const identity = record.obligation_key
|
|
204
|
+
? `${record.obligation_key}\0${record.obligation_revision_digest}\0${record.fact_key}\0${record.fact_revision_digest}`
|
|
205
|
+
: `${record.fact_ref}\0${record.proof_ref}`;
|
|
146
206
|
if (identities.has(identity))
|
|
147
207
|
return "semantic_fact_result_duplicate";
|
|
148
208
|
identities.add(identity);
|
|
@@ -162,4 +222,4 @@ function sameSet(left, right) {
|
|
|
162
222
|
new Set(left).size === left.length &&
|
|
163
223
|
left.every((item) => right.includes(item)));
|
|
164
224
|
}
|
|
165
|
-
export const typed_semantic_fact_runtime_evidence = "
|
|
225
|
+
export const typed_semantic_fact_runtime_evidence = "obligation_key+obligation_revision_digest->fact_key+fact_revision_digest+actual+comparison+verdict+oracle+environment";
|
|
@@ -13,13 +13,14 @@ export function parseSemanticFactOutcomeBindings(value, label) {
|
|
|
13
13
|
manifest_ref: semanticRef(row.manifest_ref, `${label}.manifest_ref`),
|
|
14
14
|
facts: array(row.facts, `${label}.facts`).map((item, index) => {
|
|
15
15
|
const itemLabel = `${label}.facts[${index}]`;
|
|
16
|
-
const entry = object(item, itemLabel, [
|
|
17
|
-
"fact_ref",
|
|
18
|
-
"claim_ref",
|
|
19
|
-
"applicability_ref",
|
|
20
|
-
]);
|
|
16
|
+
const entry = object(item, itemLabel, ["fact_ref", "claim_ref", "applicability_ref"], ["fact_revision_digest"]);
|
|
21
17
|
return {
|
|
22
18
|
fact_ref: semanticRef(entry.fact_ref, `${itemLabel}.fact_ref`),
|
|
19
|
+
...(Object.hasOwn(entry, "fact_revision_digest")
|
|
20
|
+
? {
|
|
21
|
+
fact_revision_digest: sha256(entry.fact_revision_digest, `${itemLabel}.fact_revision_digest`),
|
|
22
|
+
}
|
|
23
|
+
: {}),
|
|
23
24
|
claim_ref: semanticRef(entry.claim_ref, `${itemLabel}.claim_ref`),
|
|
24
25
|
applicability_ref: semanticRef(entry.applicability_ref, `${itemLabel}.applicability_ref`),
|
|
25
26
|
};
|
|
@@ -33,7 +34,12 @@ export function parseSemanticFactOutcomeBindings(value, label) {
|
|
|
33
34
|
"proof_surface",
|
|
34
35
|
"evidence_capabilities",
|
|
35
36
|
"authority",
|
|
36
|
-
], [
|
|
37
|
+
], [
|
|
38
|
+
"obligation_revision_digest",
|
|
39
|
+
"check_ref",
|
|
40
|
+
"assertion_ref",
|
|
41
|
+
"confirmation_ref",
|
|
42
|
+
]);
|
|
37
43
|
const authority = literal(preliminary.authority, ["machine", "external_confirmation"], `${itemLabel}.authority`);
|
|
38
44
|
if (authority === "machine") {
|
|
39
45
|
requireOwned(preliminary, itemLabel, ["check_ref", "assertion_ref"]);
|
|
@@ -45,6 +51,11 @@ export function parseSemanticFactOutcomeBindings(value, label) {
|
|
|
45
51
|
}
|
|
46
52
|
const base = {
|
|
47
53
|
proof_ref: semanticRef(preliminary.proof_ref, `${itemLabel}.proof_ref`),
|
|
54
|
+
...(Object.hasOwn(preliminary, "obligation_revision_digest")
|
|
55
|
+
? {
|
|
56
|
+
obligation_revision_digest: sha256(preliminary.obligation_revision_digest, `${itemLabel}.obligation_revision_digest`),
|
|
57
|
+
}
|
|
58
|
+
: {}),
|
|
48
59
|
fact_ref: semanticRef(preliminary.fact_ref, `${itemLabel}.fact_ref`),
|
|
49
60
|
method: semanticRef(preliminary.method, `${itemLabel}.method`),
|
|
50
61
|
proof_surface: literal(preliminary.proof_surface, PROOF_SURFACES, `${itemLabel}.proof_surface`),
|
|
@@ -17,5 +17,5 @@ export declare function semanticRef(value: unknown, label: string): string;
|
|
|
17
17
|
export declare function nullable<T>(value: unknown, parser: (value: unknown) => T): T | null;
|
|
18
18
|
export declare const PROOF_SURFACES: readonly ["ui_browser", "runtime_behavior", "api_contract", "data_state", "security_boundary", "population_coverage", "implementation_structure"];
|
|
19
19
|
export declare const JOURNEY_ROLES: readonly ["success", "degradation", "recovery", "stage_gate", "conformance"];
|
|
20
|
-
export declare const EVIDENCE_CAPABILITIES: readonly ["presence", "interaction_trace", "state_delta", "cross_surface_consistency", "durable_readback", "boundary_invocation", "external_side_effect", "failure_injection", "visual_render", "design_conformance", "design_method", "semantic_fact", "target_runtime", "input_variation"];
|
|
20
|
+
export declare const EVIDENCE_CAPABILITIES: readonly ["presence", "interaction_trace", "state_delta", "cross_surface_consistency", "durable_readback", "boundary_invocation", "external_side_effect", "failure_injection", "visual_render", "design_conformance", "design_method", "design_symbolic_certificate", "semantic_fact", "target_runtime", "input_variation"];
|
|
21
21
|
export declare function fail(label: string, message: string): never;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { resolveAcceptanceAssertion } from "./long-task-acceptance-reference.js";
|
|
2
2
|
import { fail } from "./long-task-delivery-shape.js";
|
|
3
|
+
import { executionTargetSourceTargetRef } from "./long-task-source-target-index.js";
|
|
3
4
|
export function validateSourceClaimMappings(contract, compiledClaims, report) {
|
|
4
5
|
validateSourcePresence(contract, report);
|
|
5
6
|
const sources = new Set(contract.task.source_paths);
|
|
6
7
|
const productClaims = new Set(Object.values(compiledClaims.by_outcome)
|
|
7
8
|
.flat()
|
|
8
9
|
.map((claim) => claim.id));
|
|
10
|
+
const executionTargetClaims = new Set(contract.task.execution_targets.map((target) => executionTargetSourceTargetRef(target.key)));
|
|
9
11
|
const globalClaims = new Map(compiledClaims.by_global.map((claim) => [claim.local_key, claim]));
|
|
10
12
|
const coveredGlobalClaims = new Set(Object.entries(compiledClaims.summary.claims_by_global)
|
|
11
13
|
.filter(([, value]) => value.covered)
|
|
@@ -22,7 +24,8 @@ export function validateSourceClaimMappings(contract, compiledClaims, report) {
|
|
|
22
24
|
for (const reference of disposition.refs) {
|
|
23
25
|
if (reference.endsWith(".result"))
|
|
24
26
|
issue(report, "source_claim_result_overcompression", `${claim.key}:${reference}`);
|
|
25
|
-
if (!productClaims.has(reference)
|
|
27
|
+
if (!productClaims.has(reference) &&
|
|
28
|
+
!executionTargetClaims.has(reference))
|
|
26
29
|
issue(report, "source_claim_product_ref_unknown", `${claim.key}:${reference}`);
|
|
27
30
|
}
|
|
28
31
|
if (disposition.type === "acceptance") {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { CompiledSourceItemV2 } from "./long-task-delivery-types.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { DesignResourceHandoffInput } from "./design-resource-handoff-input-types.js";
|
|
3
3
|
import type { SemanticFactManifestV1 } from "./semantic-fact-types.js";
|
|
4
4
|
export interface ParsedSourceDocument {
|
|
5
5
|
items: CompiledSourceItemV2[];
|
|
6
|
-
designResourceHandoff:
|
|
6
|
+
designResourceHandoff: DesignResourceHandoffInput | null;
|
|
7
7
|
semanticFactManifest: SemanticFactManifestV1 | null;
|
|
8
8
|
}
|
|
9
9
|
export declare function parseSourceItems(sourcePath: string, content: string): CompiledSourceItemV2[];
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { parseDesignResourceHandoffInputShape } from "./design-resource-handoff-shape.js";
|
|
2
|
+
import { parseDesignResourceSymbolicHandoffShape } from "./design-resource-symbolic-fact-shape.js";
|
|
3
|
+
import { parseSemanticFactCompactCarrierShape } from "./semantic-fact-compact-carrier.js";
|
|
2
4
|
import { parseSemanticFactManifestShape } from "./semantic-fact-manifest-shape.js";
|
|
3
5
|
import { assertNoOpenOwnedSection, assertOwnedSourceSectionsClosed, consumeBackgroundBoundary, consumeOwnedText, consumeSourceItemBoundary, } from "./long-task-source-owned-sections.js";
|
|
4
6
|
import { formalBlockBody, forEachSourceLine } from "./source-line-scanner.js";
|
|
5
7
|
import { parseStrictYaml } from "./strict-codec.js";
|
|
6
|
-
const DESIGN_RESOURCE_START = /^\s*```yaml[ \t]+design-resource-handoff-v1[ \t]*$/u;
|
|
7
|
-
const SEMANTIC_FACT_START = /^\s*```yaml[ \t]+semantic-fact-manifest-v1[ \t]*$/u;
|
|
8
|
+
const DESIGN_RESOURCE_START = /^\s*```yaml[ \t]+design-resource-handoff-(v1|v2)[ \t]*$/u;
|
|
9
|
+
const SEMANTIC_FACT_START = /^\s*```yaml[ \t]+(semantic-fact-manifest-v1|semantic-fact-compact-carrier-v1)[ \t]*$/u;
|
|
8
10
|
const FORMAL_BLOCK_END = /^\s*```[ \t]*$/u;
|
|
9
11
|
export function parseSourceItems(sourcePath, content) {
|
|
10
12
|
return parseSourceDocument(sourcePath, content).items;
|
|
@@ -52,9 +54,15 @@ function consumeOpenFormalBlock(state, line, startOffset) {
|
|
|
52
54
|
if (!FORMAL_BLOCK_END.test(line))
|
|
53
55
|
return true;
|
|
54
56
|
try {
|
|
55
|
-
const value = parseStrictYaml(formalBlockBody(state.content, state.formalBlock.bodyStartOffset, startOffset, state.formalBlock.owner
|
|
57
|
+
const value = parseStrictYaml(formalBlockBody(state.content, state.formalBlock.bodyStartOffset, startOffset, state.formalBlock.owner.startsWith("design-resource-handoff-")));
|
|
56
58
|
if (state.formalBlock.owner === "design-resource-handoff-v1")
|
|
57
59
|
state.designResourceHandoff = parseDesignResourceHandoffInputShape(value);
|
|
60
|
+
else if (state.formalBlock.owner === "design-resource-handoff-v2")
|
|
61
|
+
state.designResourceHandoff =
|
|
62
|
+
parseDesignResourceSymbolicHandoffShape(value);
|
|
63
|
+
else if (state.formalBlock.owner === "semantic-fact-compact-carrier-v1")
|
|
64
|
+
state.semanticFactManifest =
|
|
65
|
+
parseSemanticFactCompactCarrierShape(value).manifest;
|
|
58
66
|
else
|
|
59
67
|
state.semanticFactManifest = parseSemanticFactManifestShape(value);
|
|
60
68
|
}
|
|
@@ -66,23 +74,24 @@ function consumeOpenFormalBlock(state, line, startOffset) {
|
|
|
66
74
|
return true;
|
|
67
75
|
}
|
|
68
76
|
function startFormalBlock(state, line, lineNumber, nextOffset) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
? "
|
|
73
|
-
:
|
|
77
|
+
const designMatch = DESIGN_RESOURCE_START.exec(line);
|
|
78
|
+
const owner = designMatch
|
|
79
|
+
? designMatch[1] === "v2"
|
|
80
|
+
? "design-resource-handoff-v2"
|
|
81
|
+
: "design-resource-handoff-v1"
|
|
82
|
+
: (SEMANTIC_FACT_START.exec(line)?.[1] ?? null);
|
|
74
83
|
if (!owner)
|
|
75
84
|
return false;
|
|
76
85
|
assertNoOpenOwnedSection(state, lineNumber);
|
|
77
|
-
if (owner
|
|
86
|
+
if (owner.startsWith("design-resource-handoff-")) {
|
|
78
87
|
state.designResourceBlocks += 1;
|
|
79
88
|
if (state.designResourceBlocks > 1)
|
|
80
|
-
throw new Error(`source_formal_block_duplicate:${state.sourcePath}:design-resource-handoff
|
|
89
|
+
throw new Error(`source_formal_block_duplicate:${state.sourcePath}:design-resource-handoff`);
|
|
81
90
|
}
|
|
82
91
|
else {
|
|
83
92
|
state.semanticFactBlocks += 1;
|
|
84
93
|
if (state.semanticFactBlocks > 1)
|
|
85
|
-
throw new Error(`source_formal_block_duplicate:${state.sourcePath}:semantic-fact-manifest
|
|
94
|
+
throw new Error(`source_formal_block_duplicate:${state.sourcePath}:semantic-fact-manifest`);
|
|
86
95
|
}
|
|
87
96
|
state.formalBlock = {
|
|
88
97
|
owner,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompiledSourceItemV2, DeliveryContractV2 } from "./long-task-delivery-types.js";
|
|
1
|
+
import type { CompiledSourceItemV2, DeliveryContractV2, SourceBackedExecutionTargetV2 } from "./long-task-delivery-types.js";
|
|
2
2
|
type ValidationReporter = (message: string) => void;
|
|
3
|
-
export declare function validateSourceTargetContinuity(contract: DeliveryContractV2, items: CompiledSourceItemV2[], report?: ValidationReporter):
|
|
3
|
+
export declare function validateSourceTargetContinuity(contract: DeliveryContractV2, items: CompiledSourceItemV2[], report?: ValidationReporter): Map<string, SourceBackedExecutionTargetV2>;
|
|
4
4
|
export {};
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { resolveAcceptanceAssertion } from "./long-task-acceptance-reference.js";
|
|
2
|
-
import { buildCanonicalSourceTargetIndex, sourceKindForTarget, } from "./long-task-source-target-index.js";
|
|
2
|
+
import { buildCanonicalSourceTargetIndex, executionTargetSourceTargetRef, sourceKindForTarget, } from "./long-task-source-target-index.js";
|
|
3
|
+
import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
|
|
3
4
|
export function validateSourceTargetContinuity(contract, items, report) {
|
|
4
5
|
const state = sourceContinuityState(contract, items);
|
|
5
6
|
for (const claim of contract.source_claims)
|
|
6
7
|
validateSourceClaimContinuity(claim, state, report);
|
|
7
8
|
validateAcceptanceBindingContinuity(contract, state, report);
|
|
8
9
|
validateArchitectureContinuity(state, report);
|
|
10
|
+
validateRequiredExecutionTargetContinuity(contract, state, report);
|
|
11
|
+
return state.executionTargetAuthorities;
|
|
9
12
|
}
|
|
10
13
|
function sourceContinuityState(contract, items) {
|
|
11
14
|
return {
|
|
@@ -19,6 +22,7 @@ function sourceContinuityState(contract, items) {
|
|
|
19
22
|
.filter((item) => item.aspect === "architecture")
|
|
20
23
|
.map((item) => item.key)),
|
|
21
24
|
ownedArchitectureItems: new Set(),
|
|
25
|
+
executionTargetAuthorities: new Map(),
|
|
22
26
|
};
|
|
23
27
|
}
|
|
24
28
|
function validateSourceClaimContinuity(claim, state, report) {
|
|
@@ -46,7 +50,9 @@ function validateSourceClaimContinuity(claim, state, report) {
|
|
|
46
50
|
}
|
|
47
51
|
if (target.normalized_text !== undefined &&
|
|
48
52
|
target.normalized_text !== item.normalized_text) {
|
|
49
|
-
issue(report,
|
|
53
|
+
issue(report, target.execution_target_ref
|
|
54
|
+
? `process_root_source_identity_mismatch:${target.execution_target_ref}:${claim.key}`
|
|
55
|
+
: `source_target_statement_mismatch:${claim.key}:${ref}`);
|
|
50
56
|
return;
|
|
51
57
|
}
|
|
52
58
|
const owner = state.owners.get(ref);
|
|
@@ -73,6 +79,33 @@ function validateSourceClaimContinuity(claim, state, report) {
|
|
|
73
79
|
state.sourceBackedGlobalClaims.add(ref);
|
|
74
80
|
if (target.kind === "acceptance")
|
|
75
81
|
state.acceptanceBindings.push({ claim, target });
|
|
82
|
+
if (target.execution_target_ref)
|
|
83
|
+
state.executionTargetAuthorities.set(target.execution_target_ref, {
|
|
84
|
+
target_ref: target.execution_target_ref,
|
|
85
|
+
canonical_target_ref: ref,
|
|
86
|
+
source_claim_key: claim.key,
|
|
87
|
+
source_item_key: item.key,
|
|
88
|
+
source_path: item.source_path,
|
|
89
|
+
source_text_sha256: item.text_sha256,
|
|
90
|
+
target_identity: sha256Hex(canonicalValueJson({
|
|
91
|
+
canonical_target_ref: ref,
|
|
92
|
+
source_claim_key: claim.key,
|
|
93
|
+
source_item_key: item.key,
|
|
94
|
+
source_path: item.source_path,
|
|
95
|
+
source_text_sha256: item.text_sha256,
|
|
96
|
+
normalized_text: item.normalized_text,
|
|
97
|
+
})),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function validateRequiredExecutionTargetContinuity(contract, state, report) {
|
|
101
|
+
for (const targetRef of contract.task.target_profile.required_target_refs) {
|
|
102
|
+
if (state.executionTargetAuthorities.has(targetRef))
|
|
103
|
+
continue;
|
|
104
|
+
const target = contract.task.execution_targets.find((candidate) => candidate.key === targetRef);
|
|
105
|
+
issue(report, target?.runtime_family === "process"
|
|
106
|
+
? `process_root_source_binding_required:${targetRef}:${executionTargetSourceTargetRef(targetRef)}`
|
|
107
|
+
: `execution_target_source_binding_required:${targetRef}:${executionTargetSourceTargetRef(targetRef)}`);
|
|
108
|
+
}
|
|
76
109
|
}
|
|
77
110
|
function validateAcceptanceBindingContinuity(contract, state, report) {
|
|
78
111
|
for (const { claim, target } of state.acceptanceBindings) {
|
|
@@ -7,6 +7,9 @@ export interface CanonicalSourceTarget {
|
|
|
7
7
|
outcome_key?: string;
|
|
8
8
|
risk_fact?: keyof DeliveryContractV2["risk"]["facts"];
|
|
9
9
|
affected_outcome?: string;
|
|
10
|
+
execution_target_ref?: string;
|
|
10
11
|
}
|
|
11
12
|
export declare function buildCanonicalSourceTargetIndex(contract: DeliveryContractV2): Map<string, CanonicalSourceTarget>;
|
|
13
|
+
export declare function executionTargetSourceTargetRef(targetKey: string): string;
|
|
14
|
+
export declare function executionTargetSourceStatement(targetValue: DeliveryContractV2["task"]["execution_targets"][number]): string;
|
|
12
15
|
export declare function sourceKindForTarget(target: CanonicalSourceTarget): SourceItemKind | null;
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { controlFieldFacts } from "./long-task-control-fields.js";
|
|
2
2
|
import { normalizeSourceItemText } from "./long-task-source-item-parser.js";
|
|
3
|
+
import { canonicalValueJson } from "./strict-codec.js";
|
|
3
4
|
export function buildCanonicalSourceTargetIndex(contract) {
|
|
4
5
|
const targets = [];
|
|
6
|
+
for (const executionTarget of contract.task.execution_targets)
|
|
7
|
+
targets.push({
|
|
8
|
+
...target(executionTargetSourceTargetRef(executionTarget.key), "technical_obligation", executionTargetSourceStatement(executionTarget)),
|
|
9
|
+
execution_target_ref: executionTarget.key,
|
|
10
|
+
});
|
|
5
11
|
for (const outcome of contract.outcomes) {
|
|
6
12
|
targets.push(target(`${outcome.key}.result`, "outcome_result", outcome.product.observable_result, outcome.key));
|
|
7
13
|
for (const requirement of outcome.product.requirements)
|
|
@@ -52,6 +58,19 @@ export function buildCanonicalSourceTargetIndex(contract) {
|
|
|
52
58
|
targets.push(target(item.key, "external_confirmation", item.description));
|
|
53
59
|
return new Map(targets.map((item) => [item.ref, item]));
|
|
54
60
|
}
|
|
61
|
+
export function executionTargetSourceTargetRef(targetKey) {
|
|
62
|
+
return `execution_target.${targetKey}`;
|
|
63
|
+
}
|
|
64
|
+
export function executionTargetSourceStatement(targetValue) {
|
|
65
|
+
return `Execution target authority: ${canonicalValueJson({
|
|
66
|
+
key: targetValue.key,
|
|
67
|
+
role: targetValue.role,
|
|
68
|
+
runtime_family: targetValue.runtime_family,
|
|
69
|
+
root_entrypoint: targetValue.root_entrypoint,
|
|
70
|
+
root_argv: [...(targetValue.root_argv ?? [])],
|
|
71
|
+
capabilities: [...new Set(targetValue.capabilities)].sort(),
|
|
72
|
+
})}.`;
|
|
73
|
+
}
|
|
55
74
|
function target(ref, kind, text, outcomeKey, scope) {
|
|
56
75
|
return {
|
|
57
76
|
ref,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { outcomeResultExternallyBlocked } from "./long-task-claims.js";
|
|
1
2
|
export function validateDeliveryStages(contract, report) {
|
|
2
3
|
unique(contract.stages.map((stage) => stage.key), "stage_key_duplicate", report);
|
|
3
4
|
const stages = new Map(contract.stages.map((stage) => [stage.key, stage]));
|
|
@@ -60,17 +61,22 @@ function validateStageGateClosure(contract, report) {
|
|
|
60
61
|
issue(report, "stage_outcome_missing_gate_dependency", `${stage.key}:${outcome.key}:${dependencyGate}`);
|
|
61
62
|
}
|
|
62
63
|
const stageGateChecks = gate.acceptance.checks.filter((check) => check.journey_roles.includes("stage_gate"));
|
|
63
|
-
|
|
64
|
+
const resultExternallyBlocked = outcomeResultExternallyBlocked(contract, gate.key);
|
|
65
|
+
if (!stageGateChecks.length && !resultExternallyBlocked)
|
|
64
66
|
issue(report, "stage_gate_check_required", `${stage.key}:${gate.key}`);
|
|
65
|
-
else if (!
|
|
67
|
+
else if (!resultExternallyBlocked &&
|
|
68
|
+
!stageGateChecks.some((check) => provesGate(check, gate)))
|
|
66
69
|
issue(report, "stage_gate_target_runtime_result_required", `${stage.key}:${gate.key}`);
|
|
67
|
-
for (const targetRef of
|
|
70
|
+
for (const targetRef of resultExternallyBlocked
|
|
71
|
+
? []
|
|
72
|
+
: contract.task.target_profile.required_target_refs)
|
|
68
73
|
if (!stageGateChecks.some((check) => check.execution_target.target_ref === targetRef &&
|
|
69
74
|
check.execution_target.entrypoint === "root" &&
|
|
70
75
|
provesGate(check, gate)))
|
|
71
76
|
issue(report, "stage_gate_required_target_proof_missing", `${stage.key}:${targetRef}`);
|
|
72
77
|
const stageOutcomes = contract.outcomes.filter((candidate) => candidate.stage === stage.key);
|
|
73
|
-
if (
|
|
78
|
+
if (!resultExternallyBlocked &&
|
|
79
|
+
stageOutcomes.length > 1 &&
|
|
74
80
|
!stageGateChecks.some((check) => [...check.positive_assertions, ...check.negative_assertions].some((assertion) => assertion.evidence_capabilities.includes("cross_surface_consistency"))))
|
|
75
81
|
issue(report, "stage_gate_cross_surface_consistency_required", `${stage.key}:${stageOutcomes.map((outcome) => outcome.key).join(",")}`);
|
|
76
82
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type JsonPointerExactBudget, type JsonPointerExactLocator, type JsonPointerExactObservation } from "./long-task-json-pointer-observation.js";
|
|
2
|
+
import type { WorkspaceManifestV2 } from "./long-task-workspace-runtime-types.js";
|
|
3
|
+
export type StaticObservationFreezeErrorCode = "static_observation_not_in_pre_run_snapshot" | "static_observation_changed_by_runner" | "static_observation_manifest_invalid" | "static_observation_path_escape" | "static_observation_root_invalid" | "static_observation_parent_not_directory" | "static_observation_symlink_not_allowed" | "static_observation_hardlink_not_allowed" | "static_observation_not_regular_file" | "static_observation_size_limit";
|
|
4
|
+
export declare class StaticObservationFreezeError extends Error {
|
|
5
|
+
readonly code: StaticObservationFreezeErrorCode;
|
|
6
|
+
readonly artifact_path: string;
|
|
7
|
+
readonly cause_code: string | null;
|
|
8
|
+
constructor(code: StaticObservationFreezeErrorCode, artifactPath: string, causeCode?: string | null);
|
|
9
|
+
}
|
|
10
|
+
export interface StaticObservationManifestMembership {
|
|
11
|
+
path: string;
|
|
12
|
+
mode: number;
|
|
13
|
+
declared_size: number;
|
|
14
|
+
/** Git/blob identity from the workspace manifest; never a content digest. */
|
|
15
|
+
manifest_object_identity: string;
|
|
16
|
+
}
|
|
17
|
+
export interface StaticObservationFileIdentity {
|
|
18
|
+
device: string;
|
|
19
|
+
inode: string;
|
|
20
|
+
mode: number;
|
|
21
|
+
links: string;
|
|
22
|
+
size: number;
|
|
23
|
+
modified_time_ns: string;
|
|
24
|
+
changed_time_ns: string;
|
|
25
|
+
birth_time_ns: string;
|
|
26
|
+
content_sha256: string;
|
|
27
|
+
}
|
|
28
|
+
export interface VerifiedObservationInputFile {
|
|
29
|
+
readonly artifact_path: string;
|
|
30
|
+
readonly manifest_membership: StaticObservationManifestMembership;
|
|
31
|
+
readonly pre_run_identity: StaticObservationFileIdentity;
|
|
32
|
+
readonly post_run_identity: StaticObservationFileIdentity;
|
|
33
|
+
}
|
|
34
|
+
export interface VerifiedStaticObservationCarrier extends VerifiedObservationInputFile {
|
|
35
|
+
copyFrozenBytes(): Uint8Array;
|
|
36
|
+
extractJsonPointerExactObservation(input: {
|
|
37
|
+
locator: JsonPointerExactLocator;
|
|
38
|
+
sensitivity: string;
|
|
39
|
+
budget?: JsonPointerExactBudget;
|
|
40
|
+
}): JsonPointerExactObservation;
|
|
41
|
+
extractJsonPointerExactValue(input: {
|
|
42
|
+
locator: JsonPointerExactLocator;
|
|
43
|
+
sensitivity: string;
|
|
44
|
+
budget?: JsonPointerExactBudget;
|
|
45
|
+
}): {
|
|
46
|
+
raw_value: unknown;
|
|
47
|
+
observation: JsonPointerExactObservation;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface FrozenObservationInputFile {
|
|
51
|
+
readonly artifact_path: string;
|
|
52
|
+
readonly manifest_membership: StaticObservationManifestMembership;
|
|
53
|
+
readonly pre_run_identity: StaticObservationFileIdentity;
|
|
54
|
+
verifyPostRun(): Promise<VerifiedObservationInputFile>;
|
|
55
|
+
dispose(): void;
|
|
56
|
+
}
|
|
57
|
+
export interface FrozenStaticObservationCarrier extends FrozenObservationInputFile {
|
|
58
|
+
verifyPostRun(): Promise<VerifiedStaticObservationCarrier>;
|
|
59
|
+
}
|
|
60
|
+
export interface ObservationInputFreezeBudget {
|
|
61
|
+
readonly seen_artifact_paths: Set<string>;
|
|
62
|
+
total_artifact_bytes: number;
|
|
63
|
+
readonly max_artifacts: number;
|
|
64
|
+
readonly max_total_artifact_bytes: number;
|
|
65
|
+
}
|
|
66
|
+
export declare function createObservationInputFreezeBudget(input: {
|
|
67
|
+
max_artifacts: number;
|
|
68
|
+
max_total_artifact_bytes: number;
|
|
69
|
+
}): ObservationInputFreezeBudget;
|
|
70
|
+
export declare function freezeStaticObservationCarrier(input: {
|
|
71
|
+
snapshot_root: string;
|
|
72
|
+
workspace_manifest: WorkspaceManifestV2;
|
|
73
|
+
artifact_path: string;
|
|
74
|
+
budget?: JsonPointerExactBudget;
|
|
75
|
+
input_freeze_budget?: ObservationInputFreezeBudget;
|
|
76
|
+
}): Promise<FrozenStaticObservationCarrier>;
|
|
77
|
+
export declare function freezeObservationInputFile(input: {
|
|
78
|
+
snapshot_root: string;
|
|
79
|
+
workspace_manifest: WorkspaceManifestV2;
|
|
80
|
+
artifact_path: string;
|
|
81
|
+
max_file_bytes: number;
|
|
82
|
+
budget?: ObservationInputFreezeBudget;
|
|
83
|
+
}): Promise<FrozenObservationInputFile>;
|