@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,334 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { lstat, open, readdir, realpath } from 'node:fs/promises';
|
|
4
|
+
import { join, dirname, resolve } from 'node:path';
|
|
5
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { withRecoveryTarget } from './target-ownership.js';
|
|
8
|
+
import { convergeAttemptStatePath, validateConvergeAttemptState } from './attempt-budget.js';
|
|
9
|
+
import { convergeRunStatePath, loadConvergeRunStateEvidence, writeState } from './run-state.js';
|
|
10
|
+
import { gapManifest, roundGapManifestSchema, validateRoundGapAudit } from './round-gap-schema.js';
|
|
11
|
+
import { readStable, platformPath, sha256 } from '../telemetry/recovery/files.js';
|
|
12
|
+
import { decodeOriginalReport } from '../evidence/original-run/decode.js';
|
|
13
|
+
import { originalRunReportSchema } from '../telemetry/recovery/source.js';
|
|
14
|
+
import { inspectRecoveryDirectory, prepareLockRoot } from '../evidence/original-run/lock-path.js';
|
|
15
|
+
import { openJournal, serializeRecoveryDocument, syncDirectory, writeExclusiveBytes } from '../evidence/original-run/journal.js';
|
|
16
|
+
const MAX_MANIFEST = 1024 * 1024;
|
|
17
|
+
const selectionSchema = z.object({ path: z.string().min(1), sha256: z.string().regex(/^[a-f0-9]{64}$/) }).strict();
|
|
18
|
+
const previewSchema = z.object({ target: z.string().min(1).max(200).refine(s => s.trim() === s),
|
|
19
|
+
gapRound: z.number().int().positive().max(99), admittingRound: z.number().int().positive().max(99),
|
|
20
|
+
attempt: z.number().int().positive().safe(), runId: z.string().uuid(),
|
|
21
|
+
reportPath: z.string().min(1), reportSha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
22
|
+
incompletePath: z.string().min(1), incompleteSha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
23
|
+
evidence: z.array(selectionSchema).max(20).optional(), operationId: z.string().uuid().optional(),
|
|
24
|
+
}).strict();
|
|
25
|
+
const parse = (raw) => decodeOriginalReport(raw.text).value;
|
|
26
|
+
const source = (path, snap) => ({ path: platformPath(path), sha256: snap.sha256, bytes: snap.raw.length });
|
|
27
|
+
async function selected(path, digest) {
|
|
28
|
+
const snap = await readStable(path);
|
|
29
|
+
if (snap.sha256 !== digest)
|
|
30
|
+
throw new Error('round_gap_source_digest_mismatch');
|
|
31
|
+
return snap;
|
|
32
|
+
}
|
|
33
|
+
function validateNative(state, m) {
|
|
34
|
+
if (state.version !== 1 || state.target !== m.target || !Number.isSafeInteger(state.roundCap) || state.roundCap < 2 || state.roundCap > 99 ||
|
|
35
|
+
m.admittingRound > state.roundCap || !state.rounds.length || Math.max(...state.rounds.map(r => r.round)) !== m.gapRound - 1)
|
|
36
|
+
throw new Error('round_gap_not_contiguous');
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
for (const round of state.rounds) {
|
|
39
|
+
if (!Number.isSafeInteger(round.round) || round.round < 1 || round.round > state.roundCap || seen.has(round.round) ||
|
|
40
|
+
!round.counts || ['new', 'repeat', 'suppressed', 'regating'].some(k => !Number.isSafeInteger(round.counts[k]) || round.counts[k] < 0))
|
|
41
|
+
throw new Error('invalid_round_gap_native_state');
|
|
42
|
+
seen.add(round.round);
|
|
43
|
+
}
|
|
44
|
+
// This operation covers one gap only; prior audits do not establish its prefix.
|
|
45
|
+
for (let round = 1; round < m.gapRound; round++) {
|
|
46
|
+
if (!seen.has(round))
|
|
47
|
+
throw new Error('round_gap_not_contiguous');
|
|
48
|
+
}
|
|
49
|
+
if (!state.findings || Array.isArray(state.findings) || Object.entries(state.findings).some(([key, f]) => !f || f.key !== key || !seen.has(f.firstRound) || !seen.has(f.lastRound) || f.firstRound > f.lastRound ||
|
|
50
|
+
!['critical', 'important', 'minor', 'nitpick'].includes(f.severity) ||
|
|
51
|
+
(f.verdict !== undefined && (!['fixed', 'dismissed'].includes(f.verdict) || !seen.has(f.verdictRound)))))
|
|
52
|
+
throw new Error('invalid_round_gap_native_state');
|
|
53
|
+
validateRoundGapAudit(state);
|
|
54
|
+
}
|
|
55
|
+
function validateReport(snap, m) {
|
|
56
|
+
const decoded = decodeOriginalReport(snap.text);
|
|
57
|
+
if (decoded.transformations.length)
|
|
58
|
+
throw new Error('round_gap_report_requires_interpretation');
|
|
59
|
+
const report = originalRunReportSchema.safeParse(decoded.value);
|
|
60
|
+
const converge = report.success ? report.data.run.converge : undefined;
|
|
61
|
+
const attempt = converge?.attempt;
|
|
62
|
+
if (!report.success || report.data.run.id !== m.runId || converge?.target !== m.target ||
|
|
63
|
+
converge.round !== m.admittingRound || typeof attempt !== 'number' || !Number.isSafeInteger(attempt) || attempt < 1) {
|
|
64
|
+
throw new Error('round_gap_report_binding_mismatch');
|
|
65
|
+
}
|
|
66
|
+
return attempt;
|
|
67
|
+
}
|
|
68
|
+
async function evidenceSources(m) {
|
|
69
|
+
const specs = 'report' in m ? [m.report, m.incomplete, ...m.evidence] :
|
|
70
|
+
[{ path: m.reportPath, sha256: m.reportSha256 }, { path: m.incompletePath, sha256: m.incompleteSha256 }, ...(m.evidence ?? [])];
|
|
71
|
+
const results = [];
|
|
72
|
+
const paths = new Set();
|
|
73
|
+
for (const item of specs) {
|
|
74
|
+
const path = platformPath(item.path);
|
|
75
|
+
if (paths.has(path))
|
|
76
|
+
throw new Error('round_gap_duplicate_source');
|
|
77
|
+
const snapshot = await selected(path, item.sha256);
|
|
78
|
+
if ('bytes' in item && snapshot.raw.length !== item.bytes)
|
|
79
|
+
throw new Error('round_gap_source_changed');
|
|
80
|
+
paths.add(path);
|
|
81
|
+
results.push(snapshot);
|
|
82
|
+
}
|
|
83
|
+
const admittingAttempt = validateReport(results[0], m);
|
|
84
|
+
if ('admittingAttempt' in m && admittingAttempt !== m.admittingAttempt.attempt)
|
|
85
|
+
throw new Error('round_gap_report_binding_mismatch');
|
|
86
|
+
if (!results[1].raw.length)
|
|
87
|
+
throw new Error('round_gap_incomplete_evidence_empty');
|
|
88
|
+
return results;
|
|
89
|
+
}
|
|
90
|
+
function attemptRecords(snapshot, target, gapAttempt, admittingAttempt) {
|
|
91
|
+
const attempts = validateConvergeAttemptState(parse(snapshot), target, 'round-gap-selected-attempts');
|
|
92
|
+
const gap = attempts.attempts.find(a => a.attempt === gapAttempt), admitting = attempts.attempts.find(a => a.attempt === admittingAttempt);
|
|
93
|
+
if (!gap || !admitting)
|
|
94
|
+
throw new Error('round_gap_not_bound_to_spent_attempt');
|
|
95
|
+
return { gapAttempt: gap, admittingAttempt: admitting };
|
|
96
|
+
}
|
|
97
|
+
/** Read-only preview: the only identities introduced belong to the audit operation. */
|
|
98
|
+
export async function previewRoundGap(input, gitCommonDir) {
|
|
99
|
+
const parsed = previewSchema.safeParse(input);
|
|
100
|
+
if (!parsed.success)
|
|
101
|
+
throw new Error('invalid_round_gap_selection');
|
|
102
|
+
const selection = parsed.data, commonDir = await realpath(resolve(gitCommonDir));
|
|
103
|
+
const sources = await evidenceSources(selection);
|
|
104
|
+
const native = await readStable(convergeRunStatePath(commonDir, selection.target));
|
|
105
|
+
const attempts = await readStable(convergeAttemptStatePath(commonDir, selection.target));
|
|
106
|
+
const state = parse(native);
|
|
107
|
+
validateNative(state, selection);
|
|
108
|
+
const admittingAttempt = validateReport(sources[0], selection);
|
|
109
|
+
const manifest = { kind: 'rcl-round-gap-audit', version: 1, operationId: selection.operationId ?? randomUUID(), createdAt: new Date().toISOString(),
|
|
110
|
+
gitCommonDir: commonDir, target: selection.target, gapRound: selection.gapRound, admittingRound: selection.admittingRound,
|
|
111
|
+
attempt: selection.attempt, runId: selection.runId, reportSha256: selection.reportSha256, incompleteSha256: selection.incompleteSha256,
|
|
112
|
+
stateSha256: native.sha256, attemptSha256: attempts.sha256,
|
|
113
|
+
...attemptRecords(attempts, selection.target, selection.attempt, admittingAttempt),
|
|
114
|
+
report: source(selection.reportPath, sources[0]), incomplete: source(selection.incompletePath, sources[1]),
|
|
115
|
+
evidence: (selection.evidence ?? []).map((s, i) => source(s.path, sources[i + 2])),
|
|
116
|
+
disposition: { kind: 'missing-terminal-report', controllerExit: 'unknown', scope: 'supplied-evidence-only' } };
|
|
117
|
+
const checked = roundGapManifestSchema.safeParse(manifest);
|
|
118
|
+
if (!checked.success)
|
|
119
|
+
throw new Error('invalid_round_gap_manifest');
|
|
120
|
+
// A preview observes one stable pair without creating a lock, snapshot or journal.
|
|
121
|
+
if ((await readStable(convergeRunStatePath(commonDir, selection.target))).sha256 !== native.sha256 ||
|
|
122
|
+
(await readStable(convergeAttemptStatePath(commonDir, selection.target))).sha256 !== attempts.sha256)
|
|
123
|
+
throw new Error('round_gap_preview_source_changed');
|
|
124
|
+
return checked.data;
|
|
125
|
+
}
|
|
126
|
+
/** Sync verified existing bytes; a missing file is never recreated as an acknowledgment. */
|
|
127
|
+
async function syncIdentical(path, bytes) {
|
|
128
|
+
const current = await readStable(path);
|
|
129
|
+
if (!current.raw.equals(bytes))
|
|
130
|
+
throw new Error('round_gap_retained_source_conflict');
|
|
131
|
+
const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
132
|
+
try {
|
|
133
|
+
if (!(await handle.readFile()).equals(bytes))
|
|
134
|
+
throw new Error('round_gap_retained_source_conflict');
|
|
135
|
+
await handle.sync();
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
await handle.close();
|
|
139
|
+
}
|
|
140
|
+
await syncDirectory(dirname(path));
|
|
141
|
+
}
|
|
142
|
+
/** An existing identical file still needs a successful fsync before it is durable. */
|
|
143
|
+
async function retain(path, bytes) {
|
|
144
|
+
try {
|
|
145
|
+
await writeExclusiveBytes(path, bytes);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (error.code !== 'EEXIST')
|
|
149
|
+
throw error;
|
|
150
|
+
await syncIdentical(path, bytes);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export function roundGapOperationPath(gitCommonDir, operationId) {
|
|
154
|
+
if (!z.string().uuid().safeParse(operationId).success)
|
|
155
|
+
throw new Error('invalid_round_gap_operation');
|
|
156
|
+
return join(platformPath(gitCommonDir), 'rcl-converge-gap-audits', operationId);
|
|
157
|
+
}
|
|
158
|
+
function afterState(before, entry, m) {
|
|
159
|
+
return { ...before, updatedAt: m.createdAt, roundGapAudit: { version: 1, entries: [...(before.roundGapAudit?.entries ?? []), entry] } };
|
|
160
|
+
}
|
|
161
|
+
const receipt = (m, entry, after) => ({ version: 1, operationId: m.operationId,
|
|
162
|
+
manifestSha256: entry.manifestSha256, beforeStateSha256: m.stateSha256, afterStateSha256: sha256(after) });
|
|
163
|
+
/** Read the existing journal chain; admission never repairs or appends checkpoints. */
|
|
164
|
+
async function verifyJournal(path, entry, m, expected, completed = true) {
|
|
165
|
+
const names = (await readdir(path)).sort();
|
|
166
|
+
if ((completed && !names.length) || names.length > 1000 || names.some((name, index) => name !== `${String(index + 1).padStart(8, '0')}.json`))
|
|
167
|
+
throw new Error('round_gap_journal_invalid');
|
|
168
|
+
let previous = entry.manifestSha256, verified = false;
|
|
169
|
+
let torn = [];
|
|
170
|
+
for (const [index, name] of names.entries()) {
|
|
171
|
+
const snapshot = await readStable(join(path, name), MAX_MANIFEST);
|
|
172
|
+
let record;
|
|
173
|
+
try {
|
|
174
|
+
JSON.parse(snapshot.text);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
torn.push({ file: name, sha256: snapshot.sha256 });
|
|
178
|
+
previous = snapshot.sha256;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
record = decodeOriginalReport(snapshot.text).value;
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
throw new Error('round_gap_journal_invalid');
|
|
186
|
+
}
|
|
187
|
+
if (!record || record.operation_id !== m.operationId || record.manifest_sha256 !== entry.manifestSha256 ||
|
|
188
|
+
record.sequence !== index + 1 || record.previous_sha256 !== previous ||
|
|
189
|
+
!['sources_retained', 'native_write_intent', 'native_audit_verified', 'complete', 'interrupted_checkpoints_retained'].includes(String(record.phase)) ||
|
|
190
|
+
!z.string().datetime().safeParse(record.recorded_at).success ||
|
|
191
|
+
Object.keys(record).sort().join(',') !== 'data,manifest_sha256,operation_id,phase,previous_sha256,recorded_at,sequence')
|
|
192
|
+
throw new Error('round_gap_journal_invalid');
|
|
193
|
+
if (torn.length && (record.phase !== 'interrupted_checkpoints_retained' || !isDeepStrictEqual(record.data, { files: torn })))
|
|
194
|
+
throw new Error('round_gap_journal_invalid');
|
|
195
|
+
torn = [];
|
|
196
|
+
previous = snapshot.sha256;
|
|
197
|
+
if (record.phase === 'native_audit_verified' && isDeepStrictEqual(record.data, expected))
|
|
198
|
+
verified = true;
|
|
199
|
+
}
|
|
200
|
+
if (completed && (torn.length || !verified))
|
|
201
|
+
throw new Error('round_gap_journal_incomplete');
|
|
202
|
+
}
|
|
203
|
+
/** Verify retained original bytes and the exact committed result without mutating audit files. */
|
|
204
|
+
export async function verifyRoundGapReceipt(gitCommonDir, entry) {
|
|
205
|
+
const m = gapManifest(entry), commonDir = await realpath(resolve(gitCommonDir));
|
|
206
|
+
if (commonDir !== m.gitCommonDir)
|
|
207
|
+
throw new Error('round_gap_repository_changed');
|
|
208
|
+
const dir = roundGapOperationPath(commonDir, m.operationId);
|
|
209
|
+
await inspectRecoveryDirectory(dir, true);
|
|
210
|
+
const manifest = await readStable(join(dir, 'manifest.json'), MAX_MANIFEST);
|
|
211
|
+
if (manifest.sha256 !== entry.manifestSha256 || manifest.text !== entry.manifestJson)
|
|
212
|
+
throw new Error('round_gap_manifest_conflict');
|
|
213
|
+
const before = await selected(join(dir, 'native-before.json'), m.stateSha256);
|
|
214
|
+
const attempts = await selected(join(dir, 'attempts-before.json'), m.attemptSha256);
|
|
215
|
+
const state = parse(before);
|
|
216
|
+
validateNative(state, m);
|
|
217
|
+
if (!isDeepStrictEqual(attemptRecords(attempts, m.target, m.gapAttempt.attempt, m.admittingAttempt.attempt), { gapAttempt: m.gapAttempt, admittingAttempt: m.admittingAttempt }))
|
|
218
|
+
throw new Error('round_gap_attempt_changed');
|
|
219
|
+
let report;
|
|
220
|
+
for (const [index, source] of [m.report, m.incomplete, ...m.evidence].entries()) {
|
|
221
|
+
const snapshot = await selected(join(dir, `source-${index}.bin`), source.sha256);
|
|
222
|
+
if (snapshot.raw.length !== source.bytes)
|
|
223
|
+
throw new Error('round_gap_source_changed');
|
|
224
|
+
if (index === 0) {
|
|
225
|
+
if (validateReport(snapshot, m) !== m.admittingAttempt.attempt)
|
|
226
|
+
throw new Error('round_gap_report_binding_mismatch');
|
|
227
|
+
report = parse(snapshot);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const expected = Buffer.from(serializeRecoveryDocument(afterState(state, entry, m)));
|
|
231
|
+
if (!(await readStable(join(dir, 'native-after.json'))).raw.equals(expected) ||
|
|
232
|
+
!isDeepStrictEqual(parse(await readStable(join(dir, 'complete.json'))), receipt(m, entry, expected)))
|
|
233
|
+
throw new Error('round_gap_completion_missing_or_conflicting');
|
|
234
|
+
await verifyJournal(join(dir, 'journal'), entry, m, receipt(m, entry, expected));
|
|
235
|
+
return report;
|
|
236
|
+
}
|
|
237
|
+
/** Target-owned CAS with exact snapshots and append-only audit. No round or budget is created. */
|
|
238
|
+
export async function applyRoundGap(input, gitCommonDir, hooks = {}) {
|
|
239
|
+
const selection = z.object({ manifest: z.string().min(1), manifestSha256: z.string().regex(/^[a-f0-9]{64}$/), mode: z.enum(['apply', 'resume']) }).strict().safeParse(input);
|
|
240
|
+
if (!selection.success)
|
|
241
|
+
throw new Error('invalid_round_gap_apply_selection');
|
|
242
|
+
const pinned = selection.data, original = await selected(pinned.manifest, pinned.manifestSha256);
|
|
243
|
+
if (original.raw.length > MAX_MANIFEST)
|
|
244
|
+
throw new Error('round_gap_manifest_oversized');
|
|
245
|
+
const entry = { manifestSha256: original.sha256, manifestJson: original.text }, m = gapManifest(entry);
|
|
246
|
+
const commonDir = await realpath(resolve(gitCommonDir));
|
|
247
|
+
if (commonDir !== m.gitCommonDir)
|
|
248
|
+
throw new Error('round_gap_repository_changed');
|
|
249
|
+
await evidenceSources(m); // Refuse substitutions before even registering a target writer.
|
|
250
|
+
return withRecoveryTarget(commonDir, m.target, async (ownership) => {
|
|
251
|
+
await selected(pinned.manifest, pinned.manifestSha256);
|
|
252
|
+
const sources = await evidenceSources(m);
|
|
253
|
+
const current = await loadConvergeRunStateEvidence(commonDir, m.target);
|
|
254
|
+
if (!current)
|
|
255
|
+
throw new Error('round_gap_state_missing');
|
|
256
|
+
const currentBytes = await readStable(convergeRunStatePath(commonDir, m.target));
|
|
257
|
+
if (currentBytes.sha256 !== current.sha256)
|
|
258
|
+
throw new Error('round_gap_state_changed');
|
|
259
|
+
parse(currentBytes); // Reject duplicate/ambiguous structural keys before any receipt effects.
|
|
260
|
+
const prior = current.state.roundGapAudit?.entries.find(e => gapManifest(e).operationId === m.operationId);
|
|
261
|
+
if (prior && !isDeepStrictEqual(prior, entry))
|
|
262
|
+
throw new Error('round_gap_operation_conflict');
|
|
263
|
+
const dir = roundGapOperationPath(commonDir, m.operationId);
|
|
264
|
+
let exists = false;
|
|
265
|
+
try {
|
|
266
|
+
exists = (await lstat(dir)).isDirectory();
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
if (error.code !== 'ENOENT')
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
if (!exists && (pinned.mode === 'resume' || prior))
|
|
273
|
+
throw new Error('round_gap_operation_missing');
|
|
274
|
+
const native = prior ? await selected(join(dir, 'native-before.json'), m.stateSha256) : await selected(convergeRunStatePath(commonDir, m.target), m.stateSha256);
|
|
275
|
+
const attempts = prior ? await selected(join(dir, 'attempts-before.json'), m.attemptSha256) : await selected(convergeAttemptStatePath(commonDir, m.target), m.attemptSha256);
|
|
276
|
+
const before = parse(native);
|
|
277
|
+
validateNative(before, m);
|
|
278
|
+
if (!isDeepStrictEqual(attemptRecords(attempts, m.target, m.gapAttempt.attempt, m.admittingAttempt.attempt), { gapAttempt: m.gapAttempt, admittingAttempt: m.admittingAttempt }))
|
|
279
|
+
throw new Error('round_gap_attempt_changed');
|
|
280
|
+
if (!prior && current.state.roundGapAudit?.entries.some(e => gapManifest(e).gapRound === m.gapRound))
|
|
281
|
+
throw new Error('round_gap_conflict');
|
|
282
|
+
await prepareLockRoot(dirname(dir));
|
|
283
|
+
await syncDirectory(commonDir);
|
|
284
|
+
await prepareLockRoot(dir);
|
|
285
|
+
await syncDirectory(dirname(dir));
|
|
286
|
+
await retain(join(dir, 'manifest.json'), original.raw);
|
|
287
|
+
await retain(join(dir, 'native-before.json'), native.raw);
|
|
288
|
+
await retain(join(dir, 'attempts-before.json'), attempts.raw);
|
|
289
|
+
for (const [index, snapshot] of sources.entries())
|
|
290
|
+
await retain(join(dir, `source-${index}.bin`), snapshot.raw);
|
|
291
|
+
const next = afterState(before, entry, m), nextBytes = Buffer.from(serializeRecoveryDocument(next));
|
|
292
|
+
await retain(join(dir, 'native-after.json'), nextBytes);
|
|
293
|
+
const journalDir = join(dir, 'journal');
|
|
294
|
+
let journalExists = false;
|
|
295
|
+
try {
|
|
296
|
+
journalExists = (await lstat(journalDir)).isDirectory();
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
if (error.code !== 'ENOENT')
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
if (journalExists) {
|
|
303
|
+
await verifyJournal(journalDir, entry, m, receipt(m, entry, nextBytes), false);
|
|
304
|
+
// A complete JSON checkpoint may have survived a failed file fsync.
|
|
305
|
+
for (const name of (await readdir(journalDir)).sort()) {
|
|
306
|
+
const path = join(journalDir, name);
|
|
307
|
+
await syncIdentical(path, (await readStable(path, MAX_MANIFEST)).raw);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const journal = await openJournal(journalDir, original.sha256, m.operationId, journalExists ? 'resume' : 'apply', hooks.beforeCheckpoint);
|
|
311
|
+
await journal.append('sources_retained', { stateSha256: m.stateSha256, attemptSha256: m.attemptSha256, reportSha256: m.reportSha256 });
|
|
312
|
+
if (!prior) {
|
|
313
|
+
await journal.append('native_write_intent', { afterStateSha256: sha256(nextBytes) });
|
|
314
|
+
// Every selected source must still be exact at the final publication boundary.
|
|
315
|
+
await selected(pinned.manifest, pinned.manifestSha256);
|
|
316
|
+
await evidenceSources(m);
|
|
317
|
+
await selected(convergeRunStatePath(commonDir, m.target), m.stateSha256);
|
|
318
|
+
await selected(convergeAttemptStatePath(commonDir, m.target), m.attemptSha256);
|
|
319
|
+
await writeState(commonDir, next, ownership);
|
|
320
|
+
await selected(convergeRunStatePath(commonDir, m.target), sha256(nextBytes));
|
|
321
|
+
await hooks.afterNativeWrite?.();
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
// A prior rename can be visible even when its directory sync failed.
|
|
325
|
+
await syncIdentical(convergeRunStatePath(commonDir, m.target), currentBytes.raw);
|
|
326
|
+
}
|
|
327
|
+
await journal.append('native_audit_verified', receipt(m, entry, nextBytes));
|
|
328
|
+
await retain(join(dir, 'complete.json'), Buffer.from(serializeRecoveryDocument(receipt(m, entry, nextBytes))));
|
|
329
|
+
await verifyRoundGapReceipt(commonDir, entry);
|
|
330
|
+
await journal.append('complete', receipt(m, entry, nextBytes));
|
|
331
|
+
return prior ? 'resumed' : 'applied';
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=round-gap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-gap.js","sourceRoot":"","sources":["../../src/converge/round-gap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { type RejectionEntry } from './terminal-rejection-schema.js';
|
|
2
|
+
import { type StaleReportEntry } from './stale-report-schema.js';
|
|
3
|
+
import { type NativeTargetOwnership } from './target-ownership.js';
|
|
4
|
+
import { type RoundGapEntry } from './round-gap-schema.js';
|
|
5
|
+
import type { ConsensusFinding } from '../consensus/types.js';
|
|
6
|
+
import type { GuardedLaunchState } from './launch-guard.js';
|
|
7
|
+
import { type NativeReviewCycle } from './review-cycle.js';
|
|
8
|
+
/**
|
|
9
|
+
* Per-converge-run state (RCL-24): the machine-enforced round cap and the
|
|
10
|
+
* cross-round finding ledger (identity, verdicts, suppression). Lives next
|
|
11
|
+
* to the attempt budget in the repository's common git dir — durable across
|
|
12
|
+
* sessions, repo-scoped, not world-writable. The converge target lock
|
|
13
|
+
* serializes writers per target at the workflow level.
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_CONVERGE_ROUND_CAP = 15;
|
|
16
|
+
export declare const HARD_CONVERGE_ROUND_CAP = 99;
|
|
17
|
+
export declare const MIN_CONVERGE_ROUNDS = 2;
|
|
18
|
+
export declare class ConvergeRoundCapError extends Error {
|
|
19
|
+
readonly target: string;
|
|
20
|
+
readonly round: number;
|
|
21
|
+
readonly cap: number;
|
|
22
|
+
readonly code = "RCL_CONVERGE_ROUND_CAP";
|
|
23
|
+
constructor(target: string, round: number, cap: number);
|
|
24
|
+
}
|
|
25
|
+
export declare class ConvergeRunStateError extends Error {
|
|
26
|
+
readonly code = "RCL_CONVERGE_RUN_STATE";
|
|
27
|
+
constructor(message: string, options?: ErrorOptions);
|
|
28
|
+
}
|
|
29
|
+
export declare function validateRoundCap(maxRounds: number): number;
|
|
30
|
+
export type FindingVerdict = 'fixed' | 'dismissed';
|
|
31
|
+
export interface FindingEntry {
|
|
32
|
+
key: string;
|
|
33
|
+
file: string;
|
|
34
|
+
category: string;
|
|
35
|
+
startLine: number;
|
|
36
|
+
endLine: number;
|
|
37
|
+
title: string;
|
|
38
|
+
/** Digest of claim text for conservative matching without retaining prose. */
|
|
39
|
+
claimTextSha256?: string;
|
|
40
|
+
/** Absent in old state: treat it as legacy and never trust its digest for modern matching. */
|
|
41
|
+
identityOrigin?: 'modern' | 'legacy';
|
|
42
|
+
/** Exact report key makes a retry of the immutable source report idempotent. */
|
|
43
|
+
sourceReportIdentity?: string;
|
|
44
|
+
severity: string;
|
|
45
|
+
models: string[];
|
|
46
|
+
firstRound: number;
|
|
47
|
+
lastRound: number;
|
|
48
|
+
verdict?: FindingVerdict;
|
|
49
|
+
verdictReason?: string;
|
|
50
|
+
verdictRound?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Severity at the moment the verdict was recorded (RCL-30). A dismissal is
|
|
53
|
+
* terminal on that evidence; only escalation past it re-gates. Absent on
|
|
54
|
+
* pre-2.1.1 states — the retained `severity` is frozen before new sightings.
|
|
55
|
+
*/
|
|
56
|
+
verdictSeverity?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface RoundCounts {
|
|
59
|
+
new: number;
|
|
60
|
+
repeat: number;
|
|
61
|
+
suppressed: number;
|
|
62
|
+
regating: number;
|
|
63
|
+
}
|
|
64
|
+
export interface ConvergeRunState {
|
|
65
|
+
version: 1 | 2;
|
|
66
|
+
cycle?: NativeReviewCycle;
|
|
67
|
+
target: string;
|
|
68
|
+
roundCap: number;
|
|
69
|
+
/** `runId` is the report's `run.id` (rcl ≥ 3.0), which converge-verdict sends with every verdict. */
|
|
70
|
+
rounds: Array<{
|
|
71
|
+
round: number;
|
|
72
|
+
counts: RoundCounts;
|
|
73
|
+
runId?: string;
|
|
74
|
+
/** Strongest sighting per identity in this round, including for delayed verdicts. Absent in legacy state. */
|
|
75
|
+
severities?: Record<string, ConsensusFinding['severity']>;
|
|
76
|
+
}>;
|
|
77
|
+
findings: Record<string, FindingEntry>;
|
|
78
|
+
updatedAt: string;
|
|
79
|
+
lastLaunch?: GuardedLaunchState;
|
|
80
|
+
terminalRejections?: RejectionEntry[];
|
|
81
|
+
terminalRejectionCount?: number;
|
|
82
|
+
staleReportAudit?: StaleReportEntry[];
|
|
83
|
+
/** Detect accidental truncation while preserving native state as the local authority. */
|
|
84
|
+
staleReportAuditCount?: number;
|
|
85
|
+
/** Additive local audit only; entries never stand for an admitted round. */
|
|
86
|
+
roundGapAudit?: {
|
|
87
|
+
version: 1;
|
|
88
|
+
entries: RoundGapEntry[];
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The most recent round's classified identities (RCL-30), so
|
|
92
|
+
* `converge-verdict` can decide the round's resolution — in particular
|
|
93
|
+
* whether a dismissal-only round converges — without re-reading the report.
|
|
94
|
+
* Replaced whenever a round is processed; absent on pre-2.1.1 states.
|
|
95
|
+
*/
|
|
96
|
+
lastAnnotations?: {
|
|
97
|
+
round: number;
|
|
98
|
+
identities: Array<{
|
|
99
|
+
identity: string;
|
|
100
|
+
status: FindingStatus;
|
|
101
|
+
gating: string;
|
|
102
|
+
}>;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export type FindingStatus = 'new' | 'repeat' | 'suppressed' | 'regating';
|
|
106
|
+
export interface AnnotatedRoundFinding {
|
|
107
|
+
identity: string;
|
|
108
|
+
status: FindingStatus;
|
|
109
|
+
suppressReason?: string;
|
|
110
|
+
finding: ConsensusFinding;
|
|
111
|
+
}
|
|
112
|
+
export interface RoundReport {
|
|
113
|
+
roundCap: number;
|
|
114
|
+
counts: RoundCounts;
|
|
115
|
+
findings: AnnotatedRoundFinding[];
|
|
116
|
+
}
|
|
117
|
+
export declare function convergeRunStatePath(gitCommonDir: string, target: string): string;
|
|
118
|
+
export declare function initialConvergeRunState(target: string): ConvergeRunState;
|
|
119
|
+
/** Read-only native evidence: state and the digest of the same bytes, without re-encoding or persisting it. */
|
|
120
|
+
export declare function loadConvergeRunStateEvidence(gitCommonDir: string, target: string): Promise<{
|
|
121
|
+
state: ConvergeRunState;
|
|
122
|
+
sha256: string;
|
|
123
|
+
} | undefined>;
|
|
124
|
+
/** Persist only under live explicit target authority; started writes drain before release. */
|
|
125
|
+
export declare function writeState(gitCommonDir: string, state: ConvergeRunState, ownership: NativeTargetOwnership): Promise<void>;
|
|
126
|
+
/** Read-only qualification for an update to an existing native state file. */
|
|
127
|
+
export declare function preflightConvergeRunStateWrite(gitCommonDir: string, state: ConvergeRunState, ownership: NativeTargetOwnership): Promise<void>;
|
|
128
|
+
export declare function loadConvergeRunState(gitCommonDir: string, target: string): Promise<ConvergeRunState | undefined>;
|
|
129
|
+
/** The run id recorded for a round, when its report carried one. */
|
|
130
|
+
export declare function roundRunId(state: ConvergeRunState | undefined, round: number): string | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Gating reason for a finding, tolerating legacy reports without RCL-23
|
|
133
|
+
* annotations. Shared with the CLI so classification and display agree.
|
|
134
|
+
*/
|
|
135
|
+
export declare function findingGatingReason(f: {
|
|
136
|
+
severity: string;
|
|
137
|
+
gating?: {
|
|
138
|
+
reason: string;
|
|
139
|
+
};
|
|
140
|
+
}): string;
|
|
141
|
+
/** The part of a classified finding that must survive report-key deduplication. */
|
|
142
|
+
export interface ReportIdentityMapping {
|
|
143
|
+
identity: string;
|
|
144
|
+
status: FindingStatus;
|
|
145
|
+
suppressReason?: string;
|
|
146
|
+
finding: {
|
|
147
|
+
identity?: string;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/** Refuse ambiguous legacy report keys before persisting or publishing classifications. */
|
|
151
|
+
export declare function validateReportIdentityMappings(findings: readonly ReportIdentityMapping[]): void;
|
|
152
|
+
/**
|
|
153
|
+
* Dedupe one round's findings against every prior round of this run,
|
|
154
|
+
* enforce the round cap, and persist the updated identity ledger.
|
|
155
|
+
*
|
|
156
|
+
* Suppression rule (RCL-30): a dismissal is terminal on its evidence. A
|
|
157
|
+
* finding DISMISSED in an earlier round stays 'suppressed' no matter how many
|
|
158
|
+
* models raise it again — identity matching is location-anchored, so a claim
|
|
159
|
+
* about different code is a new identity, not a repeat sighting. The one
|
|
160
|
+
* re-gate trigger is escalation: a sighting turned critical after a
|
|
161
|
+
* non-critical dismissal is 'regating' and goes back in front of triage.
|
|
162
|
+
* (Before 2.1.1 fresh ≥2-model corroboration also re-gated; on large diffs
|
|
163
|
+
* that reopened popular false positives every round — see allocator-one#7774,
|
|
164
|
+
* 24 rounds.)
|
|
165
|
+
*/
|
|
166
|
+
export interface ProcessRoundOptions {
|
|
167
|
+
gitCommonDir: string;
|
|
168
|
+
target: string;
|
|
169
|
+
round: number;
|
|
170
|
+
findings: ConsensusFinding[];
|
|
171
|
+
maxRounds?: number;
|
|
172
|
+
lineWindow?: number;
|
|
173
|
+
/** The report's own run id, kept so verdicts can be bound to the round's run. */
|
|
174
|
+
runId?: string;
|
|
175
|
+
reportSha256?: string;
|
|
176
|
+
cycleId?: string;
|
|
177
|
+
ownership?: NativeTargetOwnership;
|
|
178
|
+
}
|
|
179
|
+
export declare function processRoundReport(options: ProcessRoundOptions): Promise<RoundReport>;
|
|
180
|
+
/**
|
|
181
|
+
* Resolution of one evidence round after triage (RCL-30). A round whose
|
|
182
|
+
* gating identities were all dismissed — nothing fixed, so the reviewed
|
|
183
|
+
* patch is unchanged — CONVERGES on the spot; no confirmation round exists
|
|
184
|
+
* that could say anything new about the same code.
|
|
185
|
+
*/
|
|
186
|
+
export interface RoundResolution {
|
|
187
|
+
round: number;
|
|
188
|
+
/** Gating identities this round put in front of triage (new + regating, gating ≠ none). */
|
|
189
|
+
actionable: number;
|
|
190
|
+
/** Actionable identities still lacking a verdict recorded for this round. */
|
|
191
|
+
unresolved: string[];
|
|
192
|
+
/** Identities recorded fixed this round (any status — every fix changes the patch). */
|
|
193
|
+
fixedThisRound: number;
|
|
194
|
+
status: 'converged-dismissal-only' | 'fixes-pending-fresh-round' | 'unresolved';
|
|
195
|
+
}
|
|
196
|
+
export interface RecordVerdictsResult {
|
|
197
|
+
runId?: string;
|
|
198
|
+
entries: FindingEntry[];
|
|
199
|
+
/**
|
|
200
|
+
* Present only when the verdicts belong to the most recently processed
|
|
201
|
+
* round; verdicts recorded against older rounds make no resolution claim.
|
|
202
|
+
*/
|
|
203
|
+
resolution?: RoundResolution;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Record triage verdicts for this run's findings (feeds suppression and
|
|
207
|
+
* RCL-27's cross-run precision history). Returns the updated entries so the
|
|
208
|
+
* caller can append them to the global model-stats store, plus the round's
|
|
209
|
+
* resolution when it can be decided.
|
|
210
|
+
*/
|
|
211
|
+
export interface RecordVerdictsOptions {
|
|
212
|
+
runId?: string;
|
|
213
|
+
gitCommonDir: string;
|
|
214
|
+
target: string;
|
|
215
|
+
round: number;
|
|
216
|
+
verdicts: Array<{
|
|
217
|
+
key: string;
|
|
218
|
+
verdict: FindingVerdict;
|
|
219
|
+
reason?: string;
|
|
220
|
+
}>;
|
|
221
|
+
ownership?: NativeTargetOwnership;
|
|
222
|
+
}
|
|
223
|
+
export declare function recordVerdicts(options: RecordVerdictsOptions): Promise<RecordVerdictsResult>;
|
|
224
|
+
export declare function resolveRoundResolution(state: ConvergeRunState, round: number): RoundResolution | undefined;
|