@allocator-one/rcl 4.4.19
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 -0
- package/README.md +1415 -0
- package/dist/ci.d.ts +16 -0
- package/dist/ci.js +42 -0
- package/dist/ci.js.map +1 -0
- package/dist/config/data-dir.d.ts +6 -0
- package/dist/config/data-dir.js +12 -0
- package/dist/config/data-dir.js.map +1 -0
- package/dist/config/defaults.d.ts +82 -0
- package/dist/config/defaults.js +89 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/harness.d.ts +40 -0
- package/dist/config/harness.js +151 -0
- package/dist/config/harness.js.map +1 -0
- package/dist/config/loader.d.ts +13 -0
- package/dist/config/loader.js +131 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/provider-concurrency.d.ts +4 -0
- package/dist/config/provider-concurrency.js +6 -0
- package/dist/config/provider-concurrency.js.map +1 -0
- package/dist/config/providers.d.ts +3 -0
- package/dist/config/providers.js +9 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/schema.d.ts +179 -0
- package/dist/config/schema.js +115 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/consensus/claim-contract.d.ts +9 -0
- package/dist/consensus/claim-contract.js +307 -0
- package/dist/consensus/claim-contract.js.map +1 -0
- package/dist/consensus/claim-identity.d.ts +5 -0
- package/dist/consensus/claim-identity.js +39 -0
- package/dist/consensus/claim-identity.js.map +1 -0
- package/dist/consensus/deduper.d.ts +43 -0
- package/dist/consensus/deduper.js +1052 -0
- package/dist/consensus/deduper.js.map +1 -0
- package/dist/consensus/finding-identity.d.ts +20 -0
- package/dist/consensus/finding-identity.js +49 -0
- package/dist/consensus/finding-identity.js.map +1 -0
- package/dist/consensus/gating.d.ts +215 -0
- package/dist/consensus/gating.js +699 -0
- package/dist/consensus/gating.js.map +1 -0
- package/dist/consensus/parser.d.ts +22 -0
- package/dist/consensus/parser.js +255 -0
- package/dist/consensus/parser.js.map +1 -0
- package/dist/consensus/semantic-deduper.d.ts +10 -0
- package/dist/consensus/semantic-deduper.js +70 -0
- package/dist/consensus/semantic-deduper.js.map +1 -0
- package/dist/consensus/types.d.ts +196 -0
- package/dist/consensus/types.js +2 -0
- package/dist/consensus/types.js.map +1 -0
- package/dist/consensus/verification-contract.d.ts +8 -0
- package/dist/consensus/verification-contract.js +95 -0
- package/dist/consensus/verification-contract.js.map +1 -0
- package/dist/consensus/voter.d.ts +29 -0
- package/dist/consensus/voter.js +394 -0
- package/dist/consensus/voter.js.map +1 -0
- package/dist/converge/attempt-budget.d.ts +88 -0
- package/dist/converge/attempt-budget.js +717 -0
- package/dist/converge/attempt-budget.js.map +1 -0
- package/dist/converge/bound-fix-recovery-source.d.ts +24 -0
- package/dist/converge/bound-fix-recovery-source.js +25 -0
- package/dist/converge/bound-fix-recovery-source.js.map +1 -0
- package/dist/converge/bound-fix-recovery.d.ts +15 -0
- package/dist/converge/bound-fix-recovery.js +65 -0
- package/dist/converge/bound-fix-recovery.js.map +1 -0
- package/dist/converge/correction-anchors.d.ts +1 -0
- package/dist/converge/correction-anchors.js +2 -0
- package/dist/converge/correction-anchors.js.map +1 -0
- package/dist/converge/cycle-remote.d.ts +6 -0
- package/dist/converge/cycle-remote.js +41 -0
- package/dist/converge/cycle-remote.js.map +1 -0
- package/dist/converge/delivery-reconciliation.d.ts +17 -0
- package/dist/converge/delivery-reconciliation.js +53 -0
- package/dist/converge/delivery-reconciliation.js.map +1 -0
- package/dist/converge/finding-identity.d.ts +6 -0
- package/dist/converge/finding-identity.js +7 -0
- package/dist/converge/finding-identity.js.map +1 -0
- package/dist/converge/fresh-review.d.ts +37 -0
- package/dist/converge/fresh-review.js +351 -0
- package/dist/converge/fresh-review.js.map +1 -0
- package/dist/converge/launch-guard.d.ts +55 -0
- package/dist/converge/launch-guard.js +363 -0
- package/dist/converge/launch-guard.js.map +1 -0
- package/dist/converge/launch-preflight.d.ts +5 -0
- package/dist/converge/launch-preflight.js +41 -0
- package/dist/converge/launch-preflight.js.map +1 -0
- package/dist/converge/launch-record.d.ts +136 -0
- package/dist/converge/launch-record.js +86 -0
- package/dist/converge/launch-record.js.map +1 -0
- package/dist/converge/legacy-launch-health.d.ts +311 -0
- package/dist/converge/legacy-launch-health.js +159 -0
- package/dist/converge/legacy-launch-health.js.map +1 -0
- package/dist/converge/legacy-roster.d.ts +29 -0
- package/dist/converge/legacy-roster.js +268 -0
- package/dist/converge/legacy-roster.js.map +1 -0
- package/dist/converge/native-lock.d.ts +18 -0
- package/dist/converge/native-lock.js +122 -0
- package/dist/converge/native-lock.js.map +1 -0
- package/dist/converge/ordinary-pending-export.d.ts +67 -0
- package/dist/converge/ordinary-pending-export.js +175 -0
- package/dist/converge/ordinary-pending-export.js.map +1 -0
- package/dist/converge/ordinary-pending-package.d.ts +28 -0
- package/dist/converge/ordinary-pending-package.js +36 -0
- package/dist/converge/ordinary-pending-package.js.map +1 -0
- package/dist/converge/pending-legacy-resume.d.ts +119 -0
- package/dist/converge/pending-legacy-resume.js +720 -0
- package/dist/converge/pending-legacy-resume.js.map +1 -0
- package/dist/converge/pending-recovery-source.d.ts +131 -0
- package/dist/converge/pending-recovery-source.js +71 -0
- package/dist/converge/pending-recovery-source.js.map +1 -0
- package/dist/converge/recovery-launch.d.ts +66 -0
- package/dist/converge/recovery-launch.js +518 -0
- package/dist/converge/recovery-launch.js.map +1 -0
- package/dist/converge/retained-report.d.ts +29 -0
- package/dist/converge/retained-report.js +218 -0
- package/dist/converge/retained-report.js.map +1 -0
- package/dist/converge/retry-source.d.ts +25 -0
- package/dist/converge/retry-source.js +13 -0
- package/dist/converge/retry-source.js.map +1 -0
- package/dist/converge/review-cycle.d.ts +49 -0
- package/dist/converge/review-cycle.js +26 -0
- package/dist/converge/review-cycle.js.map +1 -0
- package/dist/converge/round-gap-schema.d.ts +66 -0
- package/dist/converge/round-gap-schema.js +51 -0
- package/dist/converge/round-gap-schema.js.map +1 -0
- package/dist/converge/round-gap.d.ts +38 -0
- package/dist/converge/round-gap.js +334 -0
- package/dist/converge/round-gap.js.map +1 -0
- package/dist/converge/run-state.d.ts +224 -0
- package/dist/converge/run-state.js +564 -0
- package/dist/converge/run-state.js.map +1 -0
- package/dist/converge/stale-report-schema.d.ts +42 -0
- package/dist/converge/stale-report-schema.js +79 -0
- package/dist/converge/stale-report-schema.js.map +1 -0
- package/dist/converge/stale-report-storage.d.ts +47 -0
- package/dist/converge/stale-report-storage.js +172 -0
- package/dist/converge/stale-report-storage.js.map +1 -0
- package/dist/converge/stale-report.d.ts +14 -0
- package/dist/converge/stale-report.js +213 -0
- package/dist/converge/stale-report.js.map +1 -0
- package/dist/converge/target-ownership.d.ts +29 -0
- package/dist/converge/target-ownership.js +95 -0
- package/dist/converge/target-ownership.js.map +1 -0
- package/dist/converge/terminal-rejection-schema.d.ts +42 -0
- package/dist/converge/terminal-rejection-schema.js +39 -0
- package/dist/converge/terminal-rejection-schema.js.map +1 -0
- package/dist/converge/terminal-rejection.d.ts +13 -0
- package/dist/converge/terminal-rejection.js +275 -0
- package/dist/converge/terminal-rejection.js.map +1 -0
- package/dist/coordination/registry-lock.d.ts +82 -0
- package/dist/coordination/registry-lock.js +498 -0
- package/dist/coordination/registry-lock.js.map +1 -0
- package/dist/discuss.d.ts +53 -0
- package/dist/discuss.js +112 -0
- package/dist/discuss.js.map +1 -0
- package/dist/dispatch/adapter.d.ts +32 -0
- package/dist/dispatch/adapter.js +2 -0
- package/dist/dispatch/adapter.js.map +1 -0
- package/dist/dispatch/anthropic.d.ts +10 -0
- package/dist/dispatch/anthropic.js +235 -0
- package/dist/dispatch/anthropic.js.map +1 -0
- package/dist/dispatch/async-lane.d.ts +127 -0
- package/dist/dispatch/async-lane.js +414 -0
- package/dist/dispatch/async-lane.js.map +1 -0
- package/dist/dispatch/capture-council.d.ts +63 -0
- package/dist/dispatch/capture-council.js +137 -0
- package/dist/dispatch/capture-council.js.map +1 -0
- package/dist/dispatch/captured-async.d.ts +67 -0
- package/dist/dispatch/captured-async.js +40 -0
- package/dist/dispatch/captured-async.js.map +1 -0
- package/dist/dispatch/captured-inputs.d.ts +50 -0
- package/dist/dispatch/captured-inputs.js +190 -0
- package/dist/dispatch/captured-inputs.js.map +1 -0
- package/dist/dispatch/checkpoint-async-context.d.ts +27 -0
- package/dist/dispatch/checkpoint-async-context.js +51 -0
- package/dist/dispatch/checkpoint-async-context.js.map +1 -0
- package/dist/dispatch/checkpoint-async-execution.d.ts +22 -0
- package/dist/dispatch/checkpoint-async-execution.js +130 -0
- package/dist/dispatch/checkpoint-async-execution.js.map +1 -0
- package/dist/dispatch/checkpoint-async-store.d.ts +134 -0
- package/dist/dispatch/checkpoint-async-store.js +534 -0
- package/dist/dispatch/checkpoint-async-store.js.map +1 -0
- package/dist/dispatch/checkpoint-async-unknown.d.ts +19 -0
- package/dist/dispatch/checkpoint-async-unknown.js +46 -0
- package/dist/dispatch/checkpoint-async-unknown.js.map +1 -0
- package/dist/dispatch/checkpoint-async.d.ts +252 -0
- package/dist/dispatch/checkpoint-async.js +270 -0
- package/dist/dispatch/checkpoint-async.js.map +1 -0
- package/dist/dispatch/checkpoint-gating-execution.d.ts +26 -0
- package/dist/dispatch/checkpoint-gating-execution.js +84 -0
- package/dist/dispatch/checkpoint-gating-execution.js.map +1 -0
- package/dist/dispatch/checkpoint-phase-limits.d.ts +5 -0
- package/dist/dispatch/checkpoint-phase-limits.js +11 -0
- package/dist/dispatch/checkpoint-phase-limits.js.map +1 -0
- package/dist/dispatch/checkpoint-verification-context.d.ts +15 -0
- package/dist/dispatch/checkpoint-verification-context.js +48 -0
- package/dist/dispatch/checkpoint-verification-context.js.map +1 -0
- package/dist/dispatch/checkpoint-verification.d.ts +213 -0
- package/dist/dispatch/checkpoint-verification.js +381 -0
- package/dist/dispatch/checkpoint-verification.js.map +1 -0
- package/dist/dispatch/checkpoint.d.ts +329 -0
- package/dist/dispatch/checkpoint.js +1418 -0
- package/dist/dispatch/checkpoint.js.map +1 -0
- package/dist/dispatch/google.d.ts +10 -0
- package/dist/dispatch/google.js +158 -0
- package/dist/dispatch/google.js.map +1 -0
- package/dist/dispatch/late-audit.d.ts +23 -0
- package/dist/dispatch/late-audit.js +133 -0
- package/dist/dispatch/late-audit.js.map +1 -0
- package/dist/dispatch/merge.d.ts +29 -0
- package/dist/dispatch/merge.js +112 -0
- package/dist/dispatch/merge.js.map +1 -0
- package/dist/dispatch/openai-compat.d.ts +30 -0
- package/dist/dispatch/openai-compat.js +166 -0
- package/dist/dispatch/openai-compat.js.map +1 -0
- package/dist/dispatch/openai.d.ts +10 -0
- package/dist/dispatch/openai.js +159 -0
- package/dist/dispatch/openai.js.map +1 -0
- package/dist/dispatch/original-execution.d.ts +30 -0
- package/dist/dispatch/original-execution.js +91 -0
- package/dist/dispatch/original-execution.js.map +1 -0
- package/dist/dispatch/original-launch.d.ts +37 -0
- package/dist/dispatch/original-launch.js +117 -0
- package/dist/dispatch/original-launch.js.map +1 -0
- package/dist/dispatch/quorum.d.ts +15 -0
- package/dist/dispatch/quorum.js +33 -0
- package/dist/dispatch/quorum.js.map +1 -0
- package/dist/dispatch/recovery-operation.d.ts +44 -0
- package/dist/dispatch/recovery-operation.js +146 -0
- package/dist/dispatch/recovery-operation.js.map +1 -0
- package/dist/dispatch/recovery-policy.d.ts +54 -0
- package/dist/dispatch/recovery-policy.js +157 -0
- package/dist/dispatch/recovery-policy.js.map +1 -0
- package/dist/dispatch/recovery.d.ts +78 -0
- package/dist/dispatch/recovery.js +299 -0
- package/dist/dispatch/recovery.js.map +1 -0
- package/dist/dispatch/retained-async.d.ts +13 -0
- package/dist/dispatch/retained-async.js +101 -0
- package/dist/dispatch/retained-async.js.map +1 -0
- package/dist/dispatch/reviewer-identity.d.ts +10 -0
- package/dist/dispatch/reviewer-identity.js +19 -0
- package/dist/dispatch/reviewer-identity.js.map +1 -0
- package/dist/dispatch/runner.d.ts +76 -0
- package/dist/dispatch/runner.js +415 -0
- package/dist/dispatch/runner.js.map +1 -0
- package/dist/dispatch/utils.d.ts +159 -0
- package/dist/dispatch/utils.js +381 -0
- package/dist/dispatch/utils.js.map +1 -0
- package/dist/dispatch/verification-execution.d.ts +48 -0
- package/dist/dispatch/verification-execution.js +252 -0
- package/dist/dispatch/verification-execution.js.map +1 -0
- package/dist/dispatch/verification-late-audit.d.ts +17 -0
- package/dist/dispatch/verification-late-audit.js +117 -0
- package/dist/dispatch/verification-late-audit.js.map +1 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.d.ts +30 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.js +100 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.d.ts +46 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.js +120 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.js.map +1 -0
- package/dist/evidence/claim-recovery/carrier-inventory.d.ts +49 -0
- package/dist/evidence/claim-recovery/carrier-inventory.js +340 -0
- package/dist/evidence/claim-recovery/carrier-inventory.js.map +1 -0
- package/dist/evidence/claim-recovery/claim-index.d.ts +12 -0
- package/dist/evidence/claim-recovery/claim-index.js +56 -0
- package/dist/evidence/claim-recovery/claim-index.js.map +1 -0
- package/dist/evidence/claim-recovery/confirmation.d.ts +53 -0
- package/dist/evidence/claim-recovery/confirmation.js +151 -0
- package/dist/evidence/claim-recovery/confirmation.js.map +1 -0
- package/dist/evidence/claim-recovery/context.d.ts +15 -0
- package/dist/evidence/claim-recovery/context.js +40 -0
- package/dist/evidence/claim-recovery/context.js.map +1 -0
- package/dist/evidence/claim-recovery/proof-storage.d.ts +6 -0
- package/dist/evidence/claim-recovery/proof-storage.js +97 -0
- package/dist/evidence/claim-recovery/proof-storage.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/anchors.d.ts +20 -0
- package/dist/evidence/claim-recovery/validation/anchors.js +22 -0
- package/dist/evidence/claim-recovery/validation/anchors.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.d.ts +9 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.js +364 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.d.ts +83 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.js +2 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/claim-split.d.ts +57 -0
- package/dist/evidence/claim-recovery/validation/claim-split.js +209 -0
- package/dist/evidence/claim-recovery/validation/claim-split.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/claims.d.ts +20 -0
- package/dist/evidence/claim-recovery/validation/claims.js +108 -0
- package/dist/evidence/claim-recovery/validation/claims.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/current-projection.d.ts +36 -0
- package/dist/evidence/claim-recovery/validation/current-projection.js +424 -0
- package/dist/evidence/claim-recovery/validation/current-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/lexical.d.ts +18 -0
- package/dist/evidence/claim-recovery/validation/lexical.js +91 -0
- package/dist/evidence/claim-recovery/validation/lexical.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/materials.d.ts +19 -0
- package/dist/evidence/claim-recovery/validation/materials.js +160 -0
- package/dist/evidence/claim-recovery/validation/materials.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-material.d.ts +27 -0
- package/dist/evidence/claim-recovery/validation/native-material.js +35 -0
- package/dist/evidence/claim-recovery/validation/native-material.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.d.ts +79 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.js +187 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-state.d.ts +45 -0
- package/dist/evidence/claim-recovery/validation/native-state.js +385 -0
- package/dist/evidence/claim-recovery/validation/native-state.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/obligations.d.ts +15 -0
- package/dist/evidence/claim-recovery/validation/obligations.js +65 -0
- package/dist/evidence/claim-recovery/validation/obligations.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.d.ts +45 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.js +208 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.d.ts +101 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.js +2 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence.d.ts +30 -0
- package/dist/evidence/claim-recovery/validation/occurrence.js +227 -0
- package/dist/evidence/claim-recovery/validation/occurrence.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/primitives.d.ts +11 -0
- package/dist/evidence/claim-recovery/validation/primitives.js +41 -0
- package/dist/evidence/claim-recovery/validation/primitives.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/receipts.d.ts +37 -0
- package/dist/evidence/claim-recovery/validation/receipts.js +83 -0
- package/dist/evidence/claim-recovery/validation/receipts.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.d.ts +8 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.js +42 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.d.ts +3 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.js +22 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.d.ts +9 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.js +347 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/sighting.d.ts +2 -0
- package/dist/evidence/claim-recovery/validation/sighting.js +15 -0
- package/dist/evidence/claim-recovery/validation/sighting.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/sources.d.ts +15 -0
- package/dist/evidence/claim-recovery/validation/sources.js +2 -0
- package/dist/evidence/claim-recovery/validation/sources.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/types.d.ts +126 -0
- package/dist/evidence/claim-recovery/validation/types.js +2 -0
- package/dist/evidence/claim-recovery/validation/types.js.map +1 -0
- package/dist/evidence/claim-split.d.ts +1 -0
- package/dist/evidence/claim-split.js +2 -0
- package/dist/evidence/claim-split.js.map +1 -0
- package/dist/evidence/event-receipts.d.ts +16 -0
- package/dist/evidence/event-receipts.js +41 -0
- package/dist/evidence/event-receipts.js.map +1 -0
- package/dist/evidence/finding-recovery.d.ts +23 -0
- package/dist/evidence/finding-recovery.js +74 -0
- package/dist/evidence/finding-recovery.js.map +1 -0
- package/dist/evidence/finding-retriage.d.ts +14 -0
- package/dist/evidence/finding-retriage.js +57 -0
- package/dist/evidence/finding-retriage.js.map +1 -0
- package/dist/evidence/format.d.ts +18 -0
- package/dist/evidence/format.js +152 -0
- package/dist/evidence/format.js.map +1 -0
- package/dist/evidence/original-run/decode.d.ts +30 -0
- package/dist/evidence/original-run/decode.js +208 -0
- package/dist/evidence/original-run/decode.js.map +1 -0
- package/dist/evidence/original-run/journal.d.ts +31 -0
- package/dist/evidence/original-run/journal.js +157 -0
- package/dist/evidence/original-run/journal.js.map +1 -0
- package/dist/evidence/original-run/lock-path.d.ts +17 -0
- package/dist/evidence/original-run/lock-path.js +116 -0
- package/dist/evidence/original-run/lock-path.js.map +1 -0
- package/dist/evidence/original-run/lock-scope.d.ts +21 -0
- package/dist/evidence/original-run/lock-scope.js +61 -0
- package/dist/evidence/original-run/lock-scope.js.map +1 -0
- package/dist/evidence/original-run/lock.d.ts +33 -0
- package/dist/evidence/original-run/lock.js +259 -0
- package/dist/evidence/original-run/lock.js.map +1 -0
- package/dist/evidence/original-run/remote.d.ts +23 -0
- package/dist/evidence/original-run/remote.js +110 -0
- package/dist/evidence/original-run/remote.js.map +1 -0
- package/dist/evidence/original-run/source.d.ts +61 -0
- package/dist/evidence/original-run/source.js +267 -0
- package/dist/evidence/original-run/source.js.map +1 -0
- package/dist/evidence/reads.d.ts +11 -0
- package/dist/evidence/reads.js +16 -0
- package/dist/evidence/reads.js.map +1 -0
- package/dist/evidence/recover-finding.d.ts +17 -0
- package/dist/evidence/recover-finding.js +65 -0
- package/dist/evidence/recover-finding.js.map +1 -0
- package/dist/evidence/recover-run.d.ts +26 -0
- package/dist/evidence/recover-run.js +180 -0
- package/dist/evidence/recover-run.js.map +1 -0
- package/dist/evidence/retained-time-budget.d.ts +9 -0
- package/dist/evidence/retained-time-budget.js +14 -0
- package/dist/evidence/retained-time-budget.js.map +1 -0
- package/dist/evidence/retriage-finding.d.ts +12 -0
- package/dist/evidence/retriage-finding.js +67 -0
- package/dist/evidence/retriage-finding.js.map +1 -0
- package/dist/evidence/reviewer-lineage.d.ts +35 -0
- package/dist/evidence/reviewer-lineage.js +293 -0
- package/dist/evidence/reviewer-lineage.js.map +1 -0
- package/dist/evidence/reviewer-original.d.ts +67 -0
- package/dist/evidence/reviewer-original.js +148 -0
- package/dist/evidence/reviewer-original.js.map +1 -0
- package/dist/evidence/reviewer-recovery.d.ts +74 -0
- package/dist/evidence/reviewer-recovery.js +179 -0
- package/dist/evidence/reviewer-recovery.js.map +1 -0
- package/dist/evidence/reviewer-status.d.ts +145 -0
- package/dist/evidence/reviewer-status.js +302 -0
- package/dist/evidence/reviewer-status.js.map +1 -0
- package/dist/evidence/show.d.ts +10 -0
- package/dist/evidence/show.js +41 -0
- package/dist/evidence/show.js.map +1 -0
- package/dist/evidence/status.d.ts +38 -0
- package/dist/evidence/status.js +73 -0
- package/dist/evidence/status.js.map +1 -0
- package/dist/evidence/target.d.ts +17 -0
- package/dist/evidence/target.js +74 -0
- package/dist/evidence/target.js.map +1 -0
- package/dist/evidence/types.d.ts +176 -0
- package/dist/evidence/types.js +109 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2688 -0
- package/dist/index.js.map +1 -0
- package/dist/models/seed.d.ts +44 -0
- package/dist/models/seed.js +175 -0
- package/dist/models/seed.js.map +1 -0
- package/dist/models/server-stats.d.ts +80 -0
- package/dist/models/server-stats.js +109 -0
- package/dist/models/server-stats.js.map +1 -0
- package/dist/models/stats-store.d.ts +84 -0
- package/dist/models/stats-store.js +572 -0
- package/dist/models/stats-store.js.map +1 -0
- package/dist/output/artifacts.d.ts +16 -0
- package/dist/output/artifacts.js +29 -0
- package/dist/output/artifacts.js.map +1 -0
- package/dist/output/assembly-refusal.d.ts +8 -0
- package/dist/output/assembly-refusal.js +14 -0
- package/dist/output/assembly-refusal.js.map +1 -0
- package/dist/output/github.d.ts +12 -0
- package/dist/output/github.js +214 -0
- package/dist/output/github.js.map +1 -0
- package/dist/output/json.d.ts +3 -0
- package/dist/output/json.js +8 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/markdown.d.ts +3 -0
- package/dist/output/markdown.js +281 -0
- package/dist/output/markdown.js.map +1 -0
- package/dist/output/progress.d.ts +55 -0
- package/dist/output/progress.js +180 -0
- package/dist/output/progress.js.map +1 -0
- package/dist/output/sanitize.d.ts +18 -0
- package/dist/output/sanitize.js +46 -0
- package/dist/output/sanitize.js.map +1 -0
- package/dist/output/terminal.d.ts +2 -0
- package/dist/output/terminal.js +172 -0
- package/dist/output/terminal.js.map +1 -0
- package/dist/prepare/chunker.d.ts +18 -0
- package/dist/prepare/chunker.js +325 -0
- package/dist/prepare/chunker.js.map +1 -0
- package/dist/prepare/language.d.ts +1 -0
- package/dist/prepare/language.js +99 -0
- package/dist/prepare/language.js.map +1 -0
- package/dist/prepare/prompt-builder.d.ts +44 -0
- package/dist/prepare/prompt-builder.js +102 -0
- package/dist/prepare/prompt-builder.js.map +1 -0
- package/dist/prepare/unified-diff.d.ts +40 -0
- package/dist/prepare/unified-diff.js +135 -0
- package/dist/prepare/unified-diff.js.map +1 -0
- package/dist/prompts/base.d.ts +3 -0
- package/dist/prompts/base.js +53 -0
- package/dist/prompts/base.js.map +1 -0
- package/dist/prompts/hardening.d.ts +19 -0
- package/dist/prompts/hardening.js +67 -0
- package/dist/prompts/hardening.js.map +1 -0
- package/dist/prompts/languages/elixir.d.ts +1 -0
- package/dist/prompts/languages/elixir.js +13 -0
- package/dist/prompts/languages/elixir.js.map +1 -0
- package/dist/prompts/languages/generic.d.ts +1 -0
- package/dist/prompts/languages/generic.js +11 -0
- package/dist/prompts/languages/generic.js.map +1 -0
- package/dist/prompts/languages/python.d.ts +1 -0
- package/dist/prompts/languages/python.js +14 -0
- package/dist/prompts/languages/python.js.map +1 -0
- package/dist/prompts/languages/typescript.d.ts +1 -0
- package/dist/prompts/languages/typescript.js +13 -0
- package/dist/prompts/languages/typescript.js.map +1 -0
- package/dist/prompts/plan.d.ts +15 -0
- package/dist/prompts/plan.js +55 -0
- package/dist/prompts/plan.js.map +1 -0
- package/dist/report/aggregation-inputs.d.ts +52 -0
- package/dist/report/aggregation-inputs.js +114 -0
- package/dist/report/aggregation-inputs.js.map +1 -0
- package/dist/report/assembly.d.ts +43 -0
- package/dist/report/assembly.js +133 -0
- package/dist/report/assembly.js.map +1 -0
- package/dist/report/blocking-health.d.ts +64 -0
- package/dist/report/blocking-health.js +156 -0
- package/dist/report/blocking-health.js.map +1 -0
- package/dist/report/checkpoint-assembly.d.ts +10 -0
- package/dist/report/checkpoint-assembly.js +17 -0
- package/dist/report/checkpoint-assembly.js.map +1 -0
- package/dist/report/checkpoint-consensus.d.ts +59 -0
- package/dist/report/checkpoint-consensus.js +197 -0
- package/dist/report/checkpoint-consensus.js.map +1 -0
- package/dist/report/checkpoint-gating.d.ts +36 -0
- package/dist/report/checkpoint-gating.js +110 -0
- package/dist/report/checkpoint-gating.js.map +1 -0
- package/dist/report/checkpoint-projection.d.ts +76 -0
- package/dist/report/checkpoint-projection.js +122 -0
- package/dist/report/checkpoint-projection.js.map +1 -0
- package/dist/report/consensus-assembly.d.ts +37 -0
- package/dist/report/consensus-assembly.js +33 -0
- package/dist/report/consensus-assembly.js.map +1 -0
- package/dist/report/recovery-source.d.ts +7 -0
- package/dist/report/recovery-source.js +7 -0
- package/dist/report/recovery-source.js.map +1 -0
- package/dist/report/reviewer-artifact.d.ts +118 -0
- package/dist/report/reviewer-artifact.js +381 -0
- package/dist/report/reviewer-artifact.js.map +1 -0
- package/dist/report/reviewer-evidence-schema.d.ts +42 -0
- package/dist/report/reviewer-evidence-schema.js +28 -0
- package/dist/report/reviewer-evidence-schema.js.map +1 -0
- package/dist/report/reviewer-evidence.d.ts +54 -0
- package/dist/report/reviewer-evidence.js +229 -0
- package/dist/report/reviewer-evidence.js.map +1 -0
- package/dist/report/reviewer-health.d.ts +62 -0
- package/dist/report/reviewer-health.js +105 -0
- package/dist/report/reviewer-health.js.map +1 -0
- package/dist/report/run-header.d.ts +219 -0
- package/dist/report/run-header.js +307 -0
- package/dist/report/run-header.js.map +1 -0
- package/dist/report/supplemental-async.d.ts +19 -0
- package/dist/report/supplemental-async.js +85 -0
- package/dist/report/supplemental-async.js.map +1 -0
- package/dist/report/uuid.d.ts +16 -0
- package/dist/report/uuid.js +41 -0
- package/dist/report/uuid.js.map +1 -0
- package/dist/resolver/git.d.ts +16 -0
- package/dist/resolver/git.js +77 -0
- package/dist/resolver/git.js.map +1 -0
- package/dist/resolver/github-client.d.ts +82 -0
- package/dist/resolver/github-client.js +27 -0
- package/dist/resolver/github-client.js.map +1 -0
- package/dist/resolver/github.d.ts +29 -0
- package/dist/resolver/github.js +166 -0
- package/dist/resolver/github.js.map +1 -0
- package/dist/resolver/local.d.ts +3 -0
- package/dist/resolver/local.js +75 -0
- package/dist/resolver/local.js.map +1 -0
- package/dist/resolver/plan.d.ts +8 -0
- package/dist/resolver/plan.js +44 -0
- package/dist/resolver/plan.js.map +1 -0
- package/dist/resolver/target.d.ts +35 -0
- package/dist/resolver/target.js +112 -0
- package/dist/resolver/target.js.map +1 -0
- package/dist/resolver/types.d.ts +43 -0
- package/dist/resolver/types.js +2 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/roles/builtin.d.ts +4 -0
- package/dist/roles/builtin.js +282 -0
- package/dist/roles/builtin.js.map +1 -0
- package/dist/roles/dispatcher.d.ts +26 -0
- package/dist/roles/dispatcher.js +96 -0
- package/dist/roles/dispatcher.js.map +1 -0
- package/dist/roles/legacy-4.1.10.d.ts +2 -0
- package/dist/roles/legacy-4.1.10.js +320 -0
- package/dist/roles/legacy-4.1.10.js.map +1 -0
- package/dist/roles/legacy-4.4.9.d.ts +4 -0
- package/dist/roles/legacy-4.4.9.js +282 -0
- package/dist/roles/legacy-4.4.9.js.map +1 -0
- package/dist/roles/loader.d.ts +10 -0
- package/dist/roles/loader.js +104 -0
- package/dist/roles/loader.js.map +1 -0
- package/dist/roles/types.d.ts +13 -0
- package/dist/roles/types.js +2 -0
- package/dist/roles/types.js.map +1 -0
- package/dist/telemetry/abort-signal.d.ts +13 -0
- package/dist/telemetry/abort-signal.js +40 -0
- package/dist/telemetry/abort-signal.js.map +1 -0
- package/dist/telemetry/attest.d.ts +98 -0
- package/dist/telemetry/attest.js +331 -0
- package/dist/telemetry/attest.js.map +1 -0
- package/dist/telemetry/attested-retry.d.ts +79 -0
- package/dist/telemetry/attested-retry.js +195 -0
- package/dist/telemetry/attested-retry.js.map +1 -0
- package/dist/telemetry/attested-reviewer-delivery.d.ts +58 -0
- package/dist/telemetry/attested-reviewer-delivery.js +238 -0
- package/dist/telemetry/attested-reviewer-delivery.js.map +1 -0
- package/dist/telemetry/backfill.d.ts +95 -0
- package/dist/telemetry/backfill.js +460 -0
- package/dist/telemetry/backfill.js.map +1 -0
- package/dist/telemetry/credentials.d.ts +44 -0
- package/dist/telemetry/credentials.js +87 -0
- package/dist/telemetry/credentials.js.map +1 -0
- package/dist/telemetry/deliver.d.ts +152 -0
- package/dist/telemetry/deliver.js +662 -0
- package/dist/telemetry/deliver.js.map +1 -0
- package/dist/telemetry/envelope-validation.d.ts +13 -0
- package/dist/telemetry/envelope-validation.js +196 -0
- package/dist/telemetry/envelope-validation.js.map +1 -0
- package/dist/telemetry/envelope.d.ts +159 -0
- package/dist/telemetry/envelope.js +288 -0
- package/dist/telemetry/envelope.js.map +1 -0
- package/dist/telemetry/events.d.ts +68 -0
- package/dist/telemetry/events.js +79 -0
- package/dist/telemetry/events.js.map +1 -0
- package/dist/telemetry/notice.d.ts +15 -0
- package/dist/telemetry/notice.js +67 -0
- package/dist/telemetry/notice.js.map +1 -0
- package/dist/telemetry/outbox.d.ts +166 -0
- package/dist/telemetry/outbox.js +741 -0
- package/dist/telemetry/outbox.js.map +1 -0
- package/dist/telemetry/quarantine.d.ts +105 -0
- package/dist/telemetry/quarantine.js +224 -0
- package/dist/telemetry/quarantine.js.map +1 -0
- package/dist/telemetry/read-sink.d.ts +31 -0
- package/dist/telemetry/read-sink.js +25 -0
- package/dist/telemetry/read-sink.js.map +1 -0
- package/dist/telemetry/recovery/command.d.ts +16 -0
- package/dist/telemetry/recovery/command.js +70 -0
- package/dist/telemetry/recovery/command.js.map +1 -0
- package/dist/telemetry/recovery/discovery.d.ts +8 -0
- package/dist/telemetry/recovery/discovery.js +277 -0
- package/dist/telemetry/recovery/discovery.js.map +1 -0
- package/dist/telemetry/recovery/files.d.ts +20 -0
- package/dist/telemetry/recovery/files.js +123 -0
- package/dist/telemetry/recovery/files.js.map +1 -0
- package/dist/telemetry/recovery/plan.d.ts +10 -0
- package/dist/telemetry/recovery/plan.js +325 -0
- package/dist/telemetry/recovery/plan.js.map +1 -0
- package/dist/telemetry/recovery/source.d.ts +328 -0
- package/dist/telemetry/recovery/source.js +253 -0
- package/dist/telemetry/recovery/source.js.map +1 -0
- package/dist/telemetry/recovery/types.d.ts +100 -0
- package/dist/telemetry/recovery/types.js +2 -0
- package/dist/telemetry/recovery/types.js.map +1 -0
- package/dist/telemetry/recovery-request-budget.d.ts +39 -0
- package/dist/telemetry/recovery-request-budget.js +102 -0
- package/dist/telemetry/recovery-request-budget.js.map +1 -0
- package/dist/telemetry/report-consistency.d.ts +11 -0
- package/dist/telemetry/report-consistency.js +111 -0
- package/dist/telemetry/report-consistency.js.map +1 -0
- package/dist/telemetry/reviewer-delivery.d.ts +39 -0
- package/dist/telemetry/reviewer-delivery.js +279 -0
- package/dist/telemetry/reviewer-delivery.js.map +1 -0
- package/dist/telemetry/reviewer-preflight.d.ts +13 -0
- package/dist/telemetry/reviewer-preflight.js +56 -0
- package/dist/telemetry/reviewer-preflight.js.map +1 -0
- package/dist/telemetry/scrub.d.ts +53 -0
- package/dist/telemetry/scrub.js +205 -0
- package/dist/telemetry/scrub.js.map +1 -0
- package/dist/telemetry/sink.d.ts +212 -0
- package/dist/telemetry/sink.js +813 -0
- package/dist/telemetry/sink.js.map +1 -0
- package/dist/telemetry/terminal-reviewer-delivery.d.ts +18 -0
- package/dist/telemetry/terminal-reviewer-delivery.js +27 -0
- package/dist/telemetry/terminal-reviewer-delivery.js.map +1 -0
- package/dist/telemetry/transient-input.d.ts +2 -0
- package/dist/telemetry/transient-input.js +37 -0
- package/dist/telemetry/transient-input.js.map +1 -0
- package/dist/telemetry/verification.d.ts +9 -0
- package/dist/telemetry/verification.js +12 -0
- package/dist/telemetry/verification.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { performance } from 'node:perf_hooks';
|
|
3
|
+
import { replayGating } from '../consensus/gating.js';
|
|
4
|
+
import { withOwnedNativeOperation } from '../converge/target-ownership.js';
|
|
5
|
+
import { stableStringify } from '../report/run-header.js';
|
|
6
|
+
import { parseVerificationAnswer, snapshotVerificationEvent } from './checkpoint-verification.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute one already-authorized verifier phase. This is a request engine, not
|
|
9
|
+
* source authentication or report admission. The caller regenerates the plan,
|
|
10
|
+
* accounts for non-checkpoint calls and holds original ownership through late
|
|
11
|
+
* audit flush/drain. Unknown paid intents are never retried. SDK retries are off.
|
|
12
|
+
*/
|
|
13
|
+
export function executeVerification(input) {
|
|
14
|
+
const options = { ...input }, plan = structuredClone(input.regeneratedPlan);
|
|
15
|
+
const event = snapshotVerificationEvent({ type: 'plan', plan: input.retainedPlan });
|
|
16
|
+
if (event.type !== 'plan' || stableStringify(plan) !== event.plan.gatingPlanBytes) {
|
|
17
|
+
return Promise.reject(new Error('verification_execution_plan_mismatch'));
|
|
18
|
+
}
|
|
19
|
+
const retained = event.plan;
|
|
20
|
+
const executionExpiresAtMs = options.executionExpiresAtMs ?? retained.expiresAtMs;
|
|
21
|
+
if (!Number.isSafeInteger(executionExpiresAtMs) || executionExpiresAtMs < 0 || executionExpiresAtMs > retained.expiresAtMs) {
|
|
22
|
+
return Promise.reject(new Error('verification_execution_invalid_runtime_deadline'));
|
|
23
|
+
}
|
|
24
|
+
if (!Number.isSafeInteger(options.otherPhysicalCalls) || options.otherPhysicalCalls < 0 || options.otherPhysicalCalls > 500 ||
|
|
25
|
+
typeof options.beforeLaunch !== 'function' || typeof options.askFactory !== 'function' ||
|
|
26
|
+
typeof options.auditLateAnswer !== 'function' || typeof options.registerLateAudit !== 'function' ||
|
|
27
|
+
typeof options.onLateAuditError !== 'function') {
|
|
28
|
+
return Promise.reject(new Error('verification_execution_invalid_options'));
|
|
29
|
+
}
|
|
30
|
+
return withOwnedNativeOperation(options.ownership, options.commonDir, options.journal.getPlan().target, async (ownership) => {
|
|
31
|
+
const wall = options.nowMs ?? Date.now, monotonic = options.monotonicNow ?? performance.now.bind(performance);
|
|
32
|
+
const wallStart = wall(), monoStart = monotonic();
|
|
33
|
+
if (!Number.isSafeInteger(wallStart) || wallStart < 0 || !Number.isFinite(monoStart))
|
|
34
|
+
throw new Error('verification_execution_invalid_clock');
|
|
35
|
+
let lastTime = Math.max(retained.startedAtMs, wallStart), lastMono = monoStart;
|
|
36
|
+
const now = () => {
|
|
37
|
+
const currentWall = wall(), currentMono = monotonic();
|
|
38
|
+
if (!Number.isSafeInteger(currentWall) || currentWall < 0 || !Number.isFinite(currentMono) || currentMono < lastMono) {
|
|
39
|
+
throw new Error('verification_execution_invalid_clock');
|
|
40
|
+
}
|
|
41
|
+
lastMono = currentMono;
|
|
42
|
+
lastTime = Math.max(lastTime, currentWall, wallStart + Math.floor(currentMono - monoStart));
|
|
43
|
+
if (!Number.isSafeInteger(lastTime))
|
|
44
|
+
throw new Error('verification_execution_invalid_clock');
|
|
45
|
+
return lastTime;
|
|
46
|
+
};
|
|
47
|
+
// Existing phase bytes, including caps and absolute expiry, must match.
|
|
48
|
+
// This also rejects new phase work after immutable terminal report bytes.
|
|
49
|
+
await options.journal.beginVerification(retained, ownership);
|
|
50
|
+
let state = (await options.journal.readVerification());
|
|
51
|
+
const main = await options.journal.read();
|
|
52
|
+
const reviewerCalls = main.records.filter(row => row.type === 'intent').length;
|
|
53
|
+
let newPhysicalCalls = 0;
|
|
54
|
+
const replay = (saved) => replayGating(plan, saved.outcomes.map(row => ({ batchIndex: row.batchIndex, kind: 'answer', answer: parseVerificationAnswer(row.answerBytes, retained) })), saved.terminal.finishedAtMs - retained.startedAtMs);
|
|
55
|
+
const result = async (saved, interpreted) => {
|
|
56
|
+
const proof = await options.journal.exportVerificationProof();
|
|
57
|
+
if (interpreted?.verification)
|
|
58
|
+
interpreted.verification.durationMs = saved.terminal.finishedAtMs - retained.startedAtMs;
|
|
59
|
+
return saved.terminal.status === 'complete'
|
|
60
|
+
? { ok: true, ...(interpreted ?? replay(saved)), proof, newPhysicalCalls }
|
|
61
|
+
: { ok: false, findings: structuredClone(plan.findings), failure: new Error(saved.terminal.reason), proof, newPhysicalCalls };
|
|
62
|
+
};
|
|
63
|
+
if (state.terminal)
|
|
64
|
+
return result(state);
|
|
65
|
+
const controller = new AbortController();
|
|
66
|
+
let failure;
|
|
67
|
+
const fail = (reason) => { failure ??= reason; controller.abort(); };
|
|
68
|
+
const remaining = () => executionExpiresAtMs - now();
|
|
69
|
+
const auditErrors = [];
|
|
70
|
+
const cancel = () => fail('verification_execution_cancelled');
|
|
71
|
+
options.signal?.addEventListener('abort', cancel, { once: true });
|
|
72
|
+
if (options.signal?.aborted)
|
|
73
|
+
cancel();
|
|
74
|
+
let passTimer;
|
|
75
|
+
try {
|
|
76
|
+
if (state.uncertain.length)
|
|
77
|
+
fail('verification_execution_uncertain_intent');
|
|
78
|
+
if (retained.maxPhysicalCalls < plan.batches.length)
|
|
79
|
+
fail('verification_execution_call_cap');
|
|
80
|
+
if (reviewerCalls + options.otherPhysicalCalls + retained.maxPhysicalCalls > 500)
|
|
81
|
+
fail('verification_execution_total_call_cap');
|
|
82
|
+
if (remaining() <= 0)
|
|
83
|
+
fail('verification_execution_deadline');
|
|
84
|
+
if (!failure)
|
|
85
|
+
passTimer = setTimeout(() => fail('verification_execution_deadline'), remaining());
|
|
86
|
+
const todo = plan.batches.map((_, index) => index).filter(index => !state.intents.some(intent => {
|
|
87
|
+
if (intent.batchIndex !== index)
|
|
88
|
+
return false;
|
|
89
|
+
return !state.notDispatched.some(outcome => outcome.attemptId === intent.attemptId);
|
|
90
|
+
}));
|
|
91
|
+
let ask;
|
|
92
|
+
if (!failure && todo.length) {
|
|
93
|
+
await options.beforeLaunch();
|
|
94
|
+
if (remaining() <= 0)
|
|
95
|
+
fail('verification_execution_deadline');
|
|
96
|
+
if (!failure) {
|
|
97
|
+
try {
|
|
98
|
+
ask = options.askFactory();
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
fail('verification_execution_adapter_unavailable');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function runBatch(batchIndex) {
|
|
106
|
+
if (failure)
|
|
107
|
+
return;
|
|
108
|
+
await options.beforeLaunch();
|
|
109
|
+
if (failure)
|
|
110
|
+
return;
|
|
111
|
+
if (remaining() <= 0) {
|
|
112
|
+
fail('verification_execution_deadline');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const intent = { batchIndex, attemptId: `verifier-${randomUUID()}`, startedAtMs: now() };
|
|
116
|
+
let observed;
|
|
117
|
+
const nonBilled = (reason) => ({ batchIndex, attemptId: intent.attemptId,
|
|
118
|
+
finishedAtMs: now(), answerBytes: JSON.stringify({ model: retained.model,
|
|
119
|
+
provider: retained.provider, text: '', durationMs: Math.max(0, now() - intent.startedAtMs),
|
|
120
|
+
status: 'error', error: reason }) });
|
|
121
|
+
const claimed = await options.journal.recordVerificationIntent(intent, ownership, () => {
|
|
122
|
+
if (remaining() <= 0) {
|
|
123
|
+
fail('verification_execution_deadline');
|
|
124
|
+
return nonBilled('Verifier deadline expired before provider dispatch.');
|
|
125
|
+
}
|
|
126
|
+
const batch = plan.batches[batchIndex];
|
|
127
|
+
const timeoutMs = Math.max(1, Math.floor(Math.min(retained.verificationTimeoutMs, remaining())));
|
|
128
|
+
const call = new AbortController();
|
|
129
|
+
let settleContinuation;
|
|
130
|
+
const retainedContinuation = new Promise(resolve => { settleContinuation = resolve; });
|
|
131
|
+
try {
|
|
132
|
+
options.registerLateAudit(retainedContinuation, batchIndex);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
fail('verification_execution_late_audit_unavailable');
|
|
136
|
+
settleContinuation();
|
|
137
|
+
return nonBilled('Verifier late-audit owner was unavailable before provider dispatch.');
|
|
138
|
+
}
|
|
139
|
+
let resolveObserved, settled = false;
|
|
140
|
+
observed = new Promise(resolve => { resolveObserved = resolve; });
|
|
141
|
+
const finish = (row) => {
|
|
142
|
+
if (settled)
|
|
143
|
+
return false;
|
|
144
|
+
settled = true;
|
|
145
|
+
clearTimeout(timer);
|
|
146
|
+
controller.signal.removeEventListener('abort', onAbort);
|
|
147
|
+
resolveObserved(row);
|
|
148
|
+
return true;
|
|
149
|
+
};
|
|
150
|
+
const onAbort = () => { call.abort(); finish(); };
|
|
151
|
+
const timer = setTimeout(() => { fail('verification_execution_request_timeout'); }, timeoutMs);
|
|
152
|
+
controller.signal.addEventListener('abort', onAbort, { once: true });
|
|
153
|
+
if (controller.signal.aborted) {
|
|
154
|
+
onAbort();
|
|
155
|
+
settleContinuation();
|
|
156
|
+
return nonBilled('Verifier execution was canceled before provider dispatch.');
|
|
157
|
+
}
|
|
158
|
+
let request;
|
|
159
|
+
newPhysicalCalls++;
|
|
160
|
+
try {
|
|
161
|
+
request = ask(plan.model, batch.systemPrompt, batch.userPrompt, { timeoutMs, maxRetries: 0, signal: call.signal,
|
|
162
|
+
...(plan.verificationReasoningEffort ? { reasoningEffort: plan.verificationReasoningEffort } : {}) });
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
fail('verification_execution_request_failed');
|
|
166
|
+
finish();
|
|
167
|
+
settleContinuation();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
void request.then(async (answer) => {
|
|
171
|
+
// Snapshot the adapter's actual response, never a manufactured timeout.
|
|
172
|
+
const answerBytes = JSON.stringify(answer);
|
|
173
|
+
parseVerificationAnswer(answerBytes, retained);
|
|
174
|
+
const row = { batchIndex, attemptId: intent.attemptId, finishedAtMs: now(), answerBytes };
|
|
175
|
+
if (!finish(row))
|
|
176
|
+
await options.auditLateAnswer(row);
|
|
177
|
+
}).catch(error => {
|
|
178
|
+
if (settled) {
|
|
179
|
+
// No answer exists to retain on a rejected request. A late invalid
|
|
180
|
+
// response or audit failure remains visible through the error sink.
|
|
181
|
+
try {
|
|
182
|
+
options.onLateAuditError(error, batchIndex);
|
|
183
|
+
}
|
|
184
|
+
catch (sinkError) {
|
|
185
|
+
auditErrors.push(sinkError);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
fail('verification_execution_request_failed');
|
|
190
|
+
finish();
|
|
191
|
+
}
|
|
192
|
+
}).finally(settleContinuation);
|
|
193
|
+
return;
|
|
194
|
+
});
|
|
195
|
+
if (!claimed) {
|
|
196
|
+
fail('verification_execution_uncertain_intent');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (!observed)
|
|
200
|
+
return;
|
|
201
|
+
const outcome = await observed;
|
|
202
|
+
if (outcome) {
|
|
203
|
+
// Keep exact schema fields; the intent timestamp is not part of a result.
|
|
204
|
+
const { batchIndex, attemptId, finishedAtMs, answerBytes } = outcome;
|
|
205
|
+
await options.journal.recordVerificationResult({ batchIndex, attemptId, finishedAtMs, answerBytes }, ownership);
|
|
206
|
+
}
|
|
207
|
+
if (remaining() <= 0)
|
|
208
|
+
fail('verification_execution_deadline');
|
|
209
|
+
}
|
|
210
|
+
let next = 0;
|
|
211
|
+
const workers = await Promise.allSettled(Array.from({ length: Math.min(3, todo.length) }, async () => {
|
|
212
|
+
try {
|
|
213
|
+
while (!failure && next < todo.length)
|
|
214
|
+
await runBatch(todo[next++]);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
fail('verification_execution_persistence_failed');
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}));
|
|
221
|
+
const errors = workers.filter((row) => row.status === 'rejected').map(row => row.reason);
|
|
222
|
+
if (errors.length)
|
|
223
|
+
throw new AggregateError(errors, 'verification_execution_failed');
|
|
224
|
+
state = (await options.journal.readVerification());
|
|
225
|
+
let interpreted;
|
|
226
|
+
if (!failure) {
|
|
227
|
+
// Complete interpretation before sealing. First completion returns this
|
|
228
|
+
// exact result; a later resume replays the identical retained transcript.
|
|
229
|
+
interpreted = replayGating(plan, state.outcomes
|
|
230
|
+
.map(row => ({ batchIndex: row.batchIndex, kind: 'answer', answer: parseVerificationAnswer(row.answerBytes, retained) })), now() - retained.startedAtMs);
|
|
231
|
+
if (remaining() <= 0)
|
|
232
|
+
fail('verification_execution_deadline');
|
|
233
|
+
}
|
|
234
|
+
const finishedAtMs = now();
|
|
235
|
+
if (finishedAtMs >= executionExpiresAtMs)
|
|
236
|
+
fail('verification_execution_deadline');
|
|
237
|
+
await options.journal.finalizeVerification(failure
|
|
238
|
+
? { status: 'failed', finishedAtMs, reason: failure }
|
|
239
|
+
: { status: 'complete', finishedAtMs }, ownership);
|
|
240
|
+
if (auditErrors.length)
|
|
241
|
+
throw new AggregateError(auditErrors, 'verification_execution_late_audit_failed');
|
|
242
|
+
return result((await options.journal.readVerification()), interpreted);
|
|
243
|
+
}
|
|
244
|
+
finally {
|
|
245
|
+
if (passTimer !== undefined)
|
|
246
|
+
clearTimeout(passTimer);
|
|
247
|
+
options.signal?.removeEventListener('abort', cancel);
|
|
248
|
+
controller.abort();
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=verification-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-execution.js","sourceRoot":"","sources":["../../src/dispatch/verification-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type NativeTargetOwnership } from '../converge/target-ownership.js';
|
|
2
|
+
import type { CheckpointJournal } from './checkpoint.js';
|
|
3
|
+
import { type VerificationResult } from './checkpoint-verification.js';
|
|
4
|
+
export interface VerificationLateAudit {
|
|
5
|
+
accept(result: VerificationResult): Promise<void>;
|
|
6
|
+
/** Retain a provider continuation before execution returns; drain waits it under the original ownership. */
|
|
7
|
+
retain(operation: Promise<void>, batchIndex: number): void;
|
|
8
|
+
flushAfterFinalization(): Promise<void>;
|
|
9
|
+
drain(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/** Caller-owned verifier audit lifetime; it never changes the sealed phase or proof. */
|
|
12
|
+
export declare function createVerificationLateAudit(options: {
|
|
13
|
+
commonDir: string;
|
|
14
|
+
journal: CheckpointJournal;
|
|
15
|
+
ownership: NativeTargetOwnership;
|
|
16
|
+
onError: (error: unknown, batchIndex: number) => void;
|
|
17
|
+
}): VerificationLateAudit;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { assertNativeTargetOwnership } from '../converge/target-ownership.js';
|
|
2
|
+
import { parseVerificationAnswer, snapshotVerificationEvent } from './checkpoint-verification.js';
|
|
3
|
+
/** Caller-owned verifier audit lifetime; it never changes the sealed phase or proof. */
|
|
4
|
+
export function createVerificationLateAudit(options) {
|
|
5
|
+
const { commonDir, journal, ownership, onError } = options;
|
|
6
|
+
if (typeof onError !== 'function')
|
|
7
|
+
throw new Error('Late verification audit requires an error sink');
|
|
8
|
+
const buffered = [], pending = new Set(), continuations = new Set(), errors = [];
|
|
9
|
+
let active = false;
|
|
10
|
+
let activation;
|
|
11
|
+
const captureError = (error, index) => { errors.push(error); try {
|
|
12
|
+
onError(error, index);
|
|
13
|
+
}
|
|
14
|
+
catch (sink) {
|
|
15
|
+
errors.push(sink);
|
|
16
|
+
} };
|
|
17
|
+
const track = (operation, index) => {
|
|
18
|
+
const completion = operation.then(() => { }, error => { captureError(error, index); });
|
|
19
|
+
pending.add(completion);
|
|
20
|
+
void completion.then(() => pending.delete(completion));
|
|
21
|
+
return operation;
|
|
22
|
+
};
|
|
23
|
+
const write = (result) => track(journal.recordLateVerificationResult(result, ownership), result.batchIndex);
|
|
24
|
+
const validate = async (input) => {
|
|
25
|
+
const event = snapshotVerificationEvent({ type: 'result', result: input });
|
|
26
|
+
if (event.type !== 'result')
|
|
27
|
+
throw new Error('late_verification_audit_invalid_result');
|
|
28
|
+
const result = event.result, phase = await journal.readVerification();
|
|
29
|
+
if (!phase)
|
|
30
|
+
throw new Error('late_verification_audit_missing_phase');
|
|
31
|
+
parseVerificationAnswer(result.answerBytes, phase.plan);
|
|
32
|
+
const intent = phase.intents.find(item => item.batchIndex === result.batchIndex && item.attemptId === result.attemptId);
|
|
33
|
+
if (!intent || result.finishedAtMs < intent.startedAtMs)
|
|
34
|
+
throw new Error('late_verification_audit_invalid_result');
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
async function finish(includeContinuations) {
|
|
38
|
+
while (pending.size || (includeContinuations && continuations.size)) {
|
|
39
|
+
await Promise.all([...pending, ...(includeContinuations ? continuations : [])]);
|
|
40
|
+
}
|
|
41
|
+
const retained = errors.splice(0);
|
|
42
|
+
if (retained.length === 1)
|
|
43
|
+
throw retained[0];
|
|
44
|
+
if (retained.length > 1)
|
|
45
|
+
throw new AggregateError(retained, 'late_verification_audit_failed');
|
|
46
|
+
if (buffered.length)
|
|
47
|
+
throw new Error('late_verification_audit_requires_terminal');
|
|
48
|
+
}
|
|
49
|
+
const drain = () => finish(true);
|
|
50
|
+
async function activate() {
|
|
51
|
+
await assertNativeTargetOwnership(ownership, commonDir, journal.getPlan().target);
|
|
52
|
+
const phase = await journal.readVerification();
|
|
53
|
+
if (!phase?.terminal)
|
|
54
|
+
throw new Error('late_verification_audit_requires_terminal');
|
|
55
|
+
if (active) {
|
|
56
|
+
await finish(false);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
while (buffered.length > 0) {
|
|
60
|
+
const result = buffered.shift();
|
|
61
|
+
try {
|
|
62
|
+
await write(result);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
buffered.unshift(result);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (buffered.length === 0)
|
|
70
|
+
active = true;
|
|
71
|
+
await finish(false);
|
|
72
|
+
}
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
retain(operation, batchIndex) {
|
|
75
|
+
if (!(operation instanceof Promise) || !Number.isSafeInteger(batchIndex) || batchIndex < 0) {
|
|
76
|
+
throw new Error('late_verification_audit_invalid_continuation');
|
|
77
|
+
}
|
|
78
|
+
const completion = operation.then(() => { }, error => { captureError(error, batchIndex); });
|
|
79
|
+
continuations.add(completion);
|
|
80
|
+
void completion.then(() => continuations.delete(completion));
|
|
81
|
+
},
|
|
82
|
+
accept(input) {
|
|
83
|
+
const index = input?.batchIndex;
|
|
84
|
+
try {
|
|
85
|
+
if (!Number.isSafeInteger(index) || index < 0)
|
|
86
|
+
throw new Error('late_verification_audit_invalid_batch');
|
|
87
|
+
return track((async () => {
|
|
88
|
+
const result = await validate(input);
|
|
89
|
+
if (active)
|
|
90
|
+
return journal.recordLateVerificationResult(result, ownership);
|
|
91
|
+
await assertNativeTargetOwnership(ownership, commonDir, journal.getPlan().target);
|
|
92
|
+
if (active)
|
|
93
|
+
return journal.recordLateVerificationResult(result, ownership);
|
|
94
|
+
buffered.push(result);
|
|
95
|
+
})(), index);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return track(Promise.reject(error), typeof index === 'number' ? index : -1);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
async flushAfterFinalization() {
|
|
102
|
+
if (activation)
|
|
103
|
+
return activation;
|
|
104
|
+
const operation = activate();
|
|
105
|
+
activation = operation;
|
|
106
|
+
try {
|
|
107
|
+
await operation;
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
if (activation === operation)
|
|
111
|
+
activation = undefined;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
drain,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=verification-late-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-late-audit.js","sourceRoot":"","sources":["../../src/dispatch/verification-late-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type AuthenticatedSelectedReceipts } from './authenticated-receipts.js';
|
|
2
|
+
import { type AuthenticatedCarrierInventory } from './carrier-inventory.js';
|
|
3
|
+
import type { AcceptedOccurrenceTransfer, NativePredecessorInventory, OccurrenceCarrierProjection } from './validation/carrier-types.js';
|
|
4
|
+
/** Opaque one-carrier snapshot with authenticated inventory and receipts.
|
|
5
|
+
* Caller-supplied native predecessors can only add residuals; the snapshot
|
|
6
|
+
* grants no closure or standing authority. */
|
|
7
|
+
export interface AuthenticatedCarrierProjection {
|
|
8
|
+
readonly qualification: 'authenticated-single-carrier-projection';
|
|
9
|
+
}
|
|
10
|
+
export interface AuthenticatedCarrierProjectionContent {
|
|
11
|
+
actorUserId: string;
|
|
12
|
+
projection: OccurrenceCarrierProjection;
|
|
13
|
+
}
|
|
14
|
+
export declare function authenticatedCarrierProjectionContent(value: AuthenticatedCarrierProjection): AuthenticatedCarrierProjectionContent;
|
|
15
|
+
/**
|
|
16
|
+
* Projects one carrier from authenticated inventory and receipt tokens.
|
|
17
|
+
* Native predecessors are caller-supplied diagnostic content and can only add
|
|
18
|
+
* residuals. This snapshot neither proves closure or standing nor changes a
|
|
19
|
+
* claim, gate, native state, or delivery outcome.
|
|
20
|
+
*/
|
|
21
|
+
export declare function projectAuthenticatedCarrier(inventoryToken: AuthenticatedCarrierInventory, receiptToken: AuthenticatedSelectedReceipts | undefined, input?: {
|
|
22
|
+
transfers?: readonly AcceptedOccurrenceTransfer[];
|
|
23
|
+
nativePredecessors?: readonly NativePredecessorInventory[];
|
|
24
|
+
}): {
|
|
25
|
+
kind: 'authenticated';
|
|
26
|
+
value: AuthenticatedCarrierProjection;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'conflict';
|
|
29
|
+
reason: string;
|
|
30
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { authenticatedReceiptContent } from './authenticated-receipts.js';
|
|
4
|
+
import { carrierInventoryContent } from './carrier-inventory.js';
|
|
5
|
+
import { projectOccurrenceCarrier } from './validation/carrier-projection.js';
|
|
6
|
+
const accepted = new WeakMap();
|
|
7
|
+
export function authenticatedCarrierProjectionContent(value) {
|
|
8
|
+
const content = accepted.get(value);
|
|
9
|
+
if (!content)
|
|
10
|
+
throw new Error('unverified_authenticated_carrier_projection');
|
|
11
|
+
return structuredClone(content);
|
|
12
|
+
}
|
|
13
|
+
const exact = (a, b) => isDeepStrictEqual(a, b);
|
|
14
|
+
const receiptKey = (receipt) => `${receipt.run_id}:${receipt.id}`;
|
|
15
|
+
const sequenceKey = (receipt) => `${receipt.run_id}:${receipt.sequence}`;
|
|
16
|
+
const digest = (value) => createHash('sha256').update(value).digest('hex');
|
|
17
|
+
function sourceMatchesSelection(source, selection) {
|
|
18
|
+
const run = source.storedRun;
|
|
19
|
+
return exact(source.scope, selection.scope) && run.converge?.target === selection.target &&
|
|
20
|
+
run.converge?.round === selection.round && run.target?.head_sha === selection.headSha &&
|
|
21
|
+
digest(source.reportJson) === selection.reportSha256;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Projects one carrier from authenticated inventory and receipt tokens.
|
|
25
|
+
* Native predecessors are caller-supplied diagnostic content and can only add
|
|
26
|
+
* residuals. This snapshot neither proves closure or standing nor changes a
|
|
27
|
+
* claim, gate, native state, or delivery outcome.
|
|
28
|
+
*/
|
|
29
|
+
export function projectAuthenticatedCarrier(inventoryToken, receiptToken, input = {}) {
|
|
30
|
+
try {
|
|
31
|
+
const inventory = carrierInventoryContent(inventoryToken);
|
|
32
|
+
const reads = receiptToken ? authenticatedReceiptContent(receiptToken) : undefined;
|
|
33
|
+
if ((reads && inventory.actorUserId !== reads.actorUserId) || inventory.inventory.inventoryStatus !== 'complete')
|
|
34
|
+
throw new Error('actor_or_inventory_conflict');
|
|
35
|
+
const byRun = new Map(inventory.runSequences.map(row => [row.runId, row.eventSequence]));
|
|
36
|
+
if (byRun.size !== inventory.runSequences.length)
|
|
37
|
+
throw new Error('inventory_sequence_conflict');
|
|
38
|
+
const selected = new Map((reads?.selections ?? []).map(row => [row.selection.scope.run_id, row]));
|
|
39
|
+
if (reads && selected.size !== reads.selections.length)
|
|
40
|
+
throw new Error('receipt_selection_conflict');
|
|
41
|
+
const receipts = new Map();
|
|
42
|
+
const sequences = new Map();
|
|
43
|
+
for (const row of reads?.selections ?? []) {
|
|
44
|
+
const current = byRun.get(row.selection.scope.run_id);
|
|
45
|
+
if (current === undefined || row.eventSequence !== current)
|
|
46
|
+
throw new Error('stale_token_sequence');
|
|
47
|
+
for (const receipt of row.receipts) {
|
|
48
|
+
if (receipt.run_id !== row.selection.scope.run_id || receipt.sequence > current)
|
|
49
|
+
throw new Error('receipt_sequence_conflict');
|
|
50
|
+
const key = receiptKey(receipt);
|
|
51
|
+
const prior = receipts.get(key);
|
|
52
|
+
if (prior && !exact(prior, receipt))
|
|
53
|
+
throw new Error('receipt_content_conflict');
|
|
54
|
+
const stream = sequenceKey(receipt);
|
|
55
|
+
const sequencePrior = sequences.get(stream);
|
|
56
|
+
if (sequencePrior && !exact(sequencePrior, receipt))
|
|
57
|
+
throw new Error('receipt_sequence_conflict');
|
|
58
|
+
receipts.set(key, receipt);
|
|
59
|
+
sequences.set(stream, receipt);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const requireReceipt = (receipt) => {
|
|
63
|
+
if (!exact(receipts.get(receiptKey(receipt)), receipt))
|
|
64
|
+
throw new Error('receipt_not_authenticated');
|
|
65
|
+
};
|
|
66
|
+
const requireSource = (source) => {
|
|
67
|
+
const read = selected.get(source.scope.run_id);
|
|
68
|
+
if (!read || !sourceMatchesSelection(source, read.selection))
|
|
69
|
+
throw new Error('transfer_source_not_authenticated');
|
|
70
|
+
requireReceipt(source.classification);
|
|
71
|
+
for (const receipt of source.corrections)
|
|
72
|
+
requireReceipt(receipt);
|
|
73
|
+
};
|
|
74
|
+
for (const source of inventory.inventory.sources) {
|
|
75
|
+
const read = selected.get(source.selector.scope.run_id);
|
|
76
|
+
if (read && (!exact(read.selection.scope, source.selector.scope) || read.selection.target !== source.selector.target ||
|
|
77
|
+
read.selection.round !== source.selector.round || read.selection.headSha !== source.selector.headSha ||
|
|
78
|
+
read.selection.reportSha256 !== source.selector.reportSha256))
|
|
79
|
+
throw new Error('source_not_authenticated');
|
|
80
|
+
}
|
|
81
|
+
const transfers = [...structuredClone(input.transfers ?? [])];
|
|
82
|
+
if (transfers.length && !reads)
|
|
83
|
+
throw new Error('transfer_receipts_required');
|
|
84
|
+
for (const transfer of transfers) {
|
|
85
|
+
requireReceipt(transfer.receipt);
|
|
86
|
+
requireReceipt(transfer.preparation.split.receipt);
|
|
87
|
+
requireSource(transfer.preparation.split.source);
|
|
88
|
+
requireSource(transfer.preparation.carrier);
|
|
89
|
+
}
|
|
90
|
+
const projection = projectOccurrenceCarrier({ ...inventory.inventory, transfers,
|
|
91
|
+
nativePredecessors: [...structuredClone(input.nativePredecessors ?? [])] });
|
|
92
|
+
const value = Object.freeze({ qualification: 'authenticated-single-carrier-projection' });
|
|
93
|
+
accepted.set(value, structuredClone({ actorUserId: inventory.actorUserId, projection }));
|
|
94
|
+
return { kind: 'authenticated', value };
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return { kind: 'conflict', reason: error instanceof Error ? error.message : 'authenticated_carrier_projection_conflict' };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=authenticated-carrier-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated-carrier-projection.js","sourceRoot":"","sources":["../../../src/evidence/claim-recovery/authenticated-carrier-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type StoredEventReceipt } from '../event-receipts.js';
|
|
2
|
+
import { type ClaimRecoverySelection } from './context.js';
|
|
3
|
+
import type { NativeOccurrenceReadRequirement } from './validation/native-occurrences.js';
|
|
4
|
+
import type { HarnessSink } from '../../telemetry/sink.js';
|
|
5
|
+
type SelectedReceiptRequirement = Extract<NativeOccurrenceReadRequirement, {
|
|
6
|
+
kind: 'selected-event-receipts';
|
|
7
|
+
}>;
|
|
8
|
+
/** Explicit original source and exact server receipts expected for that source. */
|
|
9
|
+
export interface AuthenticatedReceiptSelection {
|
|
10
|
+
selection: ClaimRecoverySelection;
|
|
11
|
+
expectedReceipts: readonly StoredEventReceipt[];
|
|
12
|
+
/** Selected receipt requirements produced by native occurrence preparation. */
|
|
13
|
+
readRequirements: readonly SelectedReceiptRequirement[];
|
|
14
|
+
}
|
|
15
|
+
/** A live token only the verifier can create. Use the accessor for defensive content. */
|
|
16
|
+
export interface AuthenticatedSelectedReceipts {
|
|
17
|
+
readonly qualification: 'authenticated-selected-receipts';
|
|
18
|
+
}
|
|
19
|
+
export interface AuthenticatedReceiptContent {
|
|
20
|
+
actorUserId: string;
|
|
21
|
+
selections: Array<{
|
|
22
|
+
selection: ClaimRecoverySelection;
|
|
23
|
+
eventIds: string[];
|
|
24
|
+
eventSequence: number;
|
|
25
|
+
receipts: StoredEventReceipt[];
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
/** Reject serialized or caller-forged tokens and return only a defensive snapshot. */
|
|
29
|
+
export declare function authenticatedReceiptContent(verification: AuthenticatedSelectedReceipts): AuthenticatedReceiptContent;
|
|
30
|
+
export type AuthenticatedReceiptVerification = {
|
|
31
|
+
kind: 'verified';
|
|
32
|
+
value: AuthenticatedSelectedReceipts;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'conflict';
|
|
35
|
+
reason: string;
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'unknown';
|
|
38
|
+
reason: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Authenticate exact selected receipts in one stable, ordinary-authenticated
|
|
42
|
+
* read window. This is read-only and establishes neither inventory closure nor
|
|
43
|
+
* disposition standing.
|
|
44
|
+
*/
|
|
45
|
+
export declare function verifyAuthenticatedSelectedReceipts(sink: HarnessSink, expectedActorUserId: string, selections: readonly AuthenticatedReceiptSelection[]): Promise<AuthenticatedReceiptVerification>;
|
|
46
|
+
export {};
|