@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,564 @@
|
|
|
1
|
+
import { rejectionManifest, validateTerminalRejectionAudit } from './terminal-rejection-schema.js';
|
|
2
|
+
import { staleManifest, validateStaleReportAudit } from './stale-report-schema.js';
|
|
3
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
4
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
5
|
+
import { lstat, mkdir, readFile, realpath, rename, rm } from 'node:fs/promises';
|
|
6
|
+
import { join, resolve } from 'node:path';
|
|
7
|
+
import { ownedNativeTargetCommonDir, withNativeTarget, withOwnedNativeOperation } from './target-ownership.js';
|
|
8
|
+
import { gapManifest, validateRoundGapAudit } from './round-gap-schema.js';
|
|
9
|
+
import { syncNativeDirectory, writeNativeStateExclusive } from './native-lock.js';
|
|
10
|
+
import { checkDarwinLockACL } from '../evidence/original-run/lock-path.js';
|
|
11
|
+
import * as lockScope from '../evidence/original-run/lock-scope.js';
|
|
12
|
+
import { validCycleVersion } from './review-cycle.js';
|
|
13
|
+
import { DEFAULT_SEVERITY_ORDER } from '../config/defaults.js';
|
|
14
|
+
import { availableFindingKey, matchFinding, } from './finding-identity.js';
|
|
15
|
+
/**
|
|
16
|
+
* Per-converge-run state (RCL-24): the machine-enforced round cap and the
|
|
17
|
+
* cross-round finding ledger (identity, verdicts, suppression). Lives next
|
|
18
|
+
* to the attempt budget in the repository's common git dir — durable across
|
|
19
|
+
* sessions, repo-scoped, not world-writable. The converge target lock
|
|
20
|
+
* serializes writers per target at the workflow level.
|
|
21
|
+
*/
|
|
22
|
+
export const DEFAULT_CONVERGE_ROUND_CAP = 15;
|
|
23
|
+
export const HARD_CONVERGE_ROUND_CAP = 99;
|
|
24
|
+
export const MIN_CONVERGE_ROUNDS = 2;
|
|
25
|
+
const STATE_VERSION = 1;
|
|
26
|
+
const STATE_DIR = 'rcl-converge-runs';
|
|
27
|
+
const DEFAULT_LINE_WINDOW = 5;
|
|
28
|
+
const REPORT_IDENTITY = /^report:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:[0-9a-f]{16}(?![\s\S])/;
|
|
29
|
+
const REPORT_IDENTITY_SHAPE = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:[0-9a-f]{16}/i;
|
|
30
|
+
export class ConvergeRoundCapError extends Error {
|
|
31
|
+
target;
|
|
32
|
+
round;
|
|
33
|
+
cap;
|
|
34
|
+
code = 'RCL_CONVERGE_ROUND_CAP';
|
|
35
|
+
constructor(target, round, cap) {
|
|
36
|
+
super(round > HARD_CONVERGE_ROUND_CAP
|
|
37
|
+
? `Round ${round} for ${target} exceeds the hard cap of ${HARD_CONVERGE_ROUND_CAP} rounds — no override exists. ` +
|
|
38
|
+
`A target still not converged after ${HARD_CONVERGE_ROUND_CAP} rounds needs human review, not more sampling (RCL-29).`
|
|
39
|
+
: `Round ${round} for ${target} exceeds the configured cap of ${cap} rounds — ask the user whether to continue. ` +
|
|
40
|
+
`With explicit approval, an explicit --max-rounds (up to ${HARD_CONVERGE_ROUND_CAP}) extends it.`);
|
|
41
|
+
this.target = target;
|
|
42
|
+
this.round = round;
|
|
43
|
+
this.cap = cap;
|
|
44
|
+
this.name = 'ConvergeRoundCapError';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class ConvergeRunStateError extends Error {
|
|
48
|
+
code = 'RCL_CONVERGE_RUN_STATE';
|
|
49
|
+
constructor(message, options) {
|
|
50
|
+
super(message, options);
|
|
51
|
+
this.name = 'ConvergeRunStateError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function validateRoundCap(maxRounds) {
|
|
55
|
+
if (!Number.isSafeInteger(maxRounds) ||
|
|
56
|
+
maxRounds < MIN_CONVERGE_ROUNDS ||
|
|
57
|
+
maxRounds > HARD_CONVERGE_ROUND_CAP) {
|
|
58
|
+
throw new ConvergeRunStateError(`--max-rounds must be an integer between ${MIN_CONVERGE_ROUNDS} and ${HARD_CONVERGE_ROUND_CAP} ` +
|
|
59
|
+
`(the loop runs until convergence, asking at ${DEFAULT_CONVERGE_ROUND_CAP} rounds by default; ` +
|
|
60
|
+
`past ${HARD_CONVERGE_ROUND_CAP} rounds a human takes over).`);
|
|
61
|
+
}
|
|
62
|
+
return maxRounds;
|
|
63
|
+
}
|
|
64
|
+
function stateBaseName(target) {
|
|
65
|
+
const slug = target.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 48);
|
|
66
|
+
const digest = createHash('sha256').update(target).digest('hex').slice(0, 16);
|
|
67
|
+
return `${slug || 'target'}-${digest}`;
|
|
68
|
+
}
|
|
69
|
+
export function convergeRunStatePath(gitCommonDir, target) {
|
|
70
|
+
return join(resolve(gitCommonDir), STATE_DIR, `${stateBaseName(target)}.json`);
|
|
71
|
+
}
|
|
72
|
+
export function initialConvergeRunState(target) {
|
|
73
|
+
return { version: STATE_VERSION, target, roundCap: DEFAULT_CONVERGE_ROUND_CAP,
|
|
74
|
+
rounds: [], findings: {}, updatedAt: new Date().toISOString() };
|
|
75
|
+
}
|
|
76
|
+
async function readState(gitCommonDir, target) {
|
|
77
|
+
return (await loadConvergeRunStateEvidence(gitCommonDir, target))?.state;
|
|
78
|
+
}
|
|
79
|
+
/** Read-only native evidence: state and the digest of the same bytes, without re-encoding or persisting it. */
|
|
80
|
+
export async function loadConvergeRunStateEvidence(gitCommonDir, target) {
|
|
81
|
+
const path = convergeRunStatePath(gitCommonDir, target);
|
|
82
|
+
let raw;
|
|
83
|
+
try {
|
|
84
|
+
raw = await readFile(path);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
if (err instanceof Error && err.code === 'ENOENT') {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
throw new ConvergeRunStateError(`Could not read converge run state: ${path}`, { cause: err });
|
|
91
|
+
}
|
|
92
|
+
let parsed;
|
|
93
|
+
try {
|
|
94
|
+
parsed = JSON.parse(raw.toString('utf8'));
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
throw new ConvergeRunStateError(`Invalid JSON in converge run state ${path}; refusing to reset cross-round identity.`, { cause: err });
|
|
98
|
+
}
|
|
99
|
+
const state = parsed;
|
|
100
|
+
if (!validCycleVersion(state, STATE_VERSION) ||
|
|
101
|
+
state.target !== target ||
|
|
102
|
+
!Number.isSafeInteger(state.roundCap) ||
|
|
103
|
+
!Array.isArray(state.rounds) ||
|
|
104
|
+
typeof state.findings !== 'object' ||
|
|
105
|
+
state.findings === null) {
|
|
106
|
+
throw new ConvergeRunStateError(`Invalid converge run state in ${path}; refusing to reset cross-round identity.`);
|
|
107
|
+
}
|
|
108
|
+
validateRoundGapAudit(state);
|
|
109
|
+
validateStaleReportAudit(state);
|
|
110
|
+
validateTerminalRejectionAudit(state);
|
|
111
|
+
return { state: state, sha256: createHash('sha256').update(raw).digest('hex') };
|
|
112
|
+
}
|
|
113
|
+
/** Persist only under live explicit target authority; started writes drain before release. */
|
|
114
|
+
export function writeState(gitCommonDir, state, ownership) {
|
|
115
|
+
return withOwnedNativeOperation(ownership, gitCommonDir, state.target, () => writeStateOwned(gitCommonDir, state));
|
|
116
|
+
}
|
|
117
|
+
/** Read-only qualification for an update to an existing native state file. */
|
|
118
|
+
export function preflightConvergeRunStateWrite(gitCommonDir, state, ownership) {
|
|
119
|
+
return withOwnedNativeOperation(ownership, gitCommonDir, state.target, async () => {
|
|
120
|
+
const common = await realpath(resolve(gitCommonDir));
|
|
121
|
+
const { assertReviewCyclePair } = await import('./fresh-review.js');
|
|
122
|
+
await assertReviewCyclePair(common, state.target, state.cycle);
|
|
123
|
+
await inspectStateDirectory(join(common, STATE_DIR));
|
|
124
|
+
const path = convergeRunStatePath(common, state.target);
|
|
125
|
+
const file = await lstat(path), uid = process.geteuid?.();
|
|
126
|
+
if (await realpath(path) !== path || !file.isFile() || file.isSymbolicLink() ||
|
|
127
|
+
(process.platform !== 'win32' &&
|
|
128
|
+
(uid === undefined || file.uid !== uid || (file.mode & 0o022) !== 0))) {
|
|
129
|
+
throw new Error('unsafe_converge_state_file');
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async function inspectStateDirectory(stateDir) {
|
|
134
|
+
const directory = await lstat(stateDir), uid = process.geteuid?.();
|
|
135
|
+
if (await realpath(stateDir) !== stateDir || !directory.isDirectory() || directory.isSymbolicLink() ||
|
|
136
|
+
(process.platform !== 'win32' &&
|
|
137
|
+
(uid === undefined || directory.uid !== uid || (directory.mode & 0o022) !== 0))) {
|
|
138
|
+
throw new Error('unsafe_converge_state_directory');
|
|
139
|
+
}
|
|
140
|
+
if (process.platform === 'darwin') {
|
|
141
|
+
checkDarwinLockACL(await lockScope.lockSystemCommand('/bin/ls', ['-lde', stateDir]));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async function writeStateOwned(gitCommonDir, state) {
|
|
145
|
+
// Callers pass the immutable directory bound to target ownership; resolving
|
|
146
|
+
// it here normalizes platform aliases without consulting a mutable caller path.
|
|
147
|
+
gitCommonDir = await realpath(resolve(gitCommonDir));
|
|
148
|
+
const { assertReviewCyclePair } = await import('./fresh-review.js');
|
|
149
|
+
await assertReviewCyclePair(gitCommonDir, state.target, state.cycle);
|
|
150
|
+
const path = convergeRunStatePath(gitCommonDir, state.target);
|
|
151
|
+
const stateDir = join(gitCommonDir, STATE_DIR);
|
|
152
|
+
await mkdir(stateDir, { recursive: true, mode: 0o700 });
|
|
153
|
+
await inspectStateDirectory(stateDir);
|
|
154
|
+
await syncNativeDirectory(gitCommonDir);
|
|
155
|
+
const temp = `${path}.${process.pid}.${randomUUID()}.tmp`;
|
|
156
|
+
try {
|
|
157
|
+
await writeNativeStateExclusive(temp, state);
|
|
158
|
+
await rename(temp, path);
|
|
159
|
+
await syncNativeDirectory(stateDir);
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
await rm(temp, { force: true });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export async function loadConvergeRunState(gitCommonDir, target) {
|
|
166
|
+
return readState(gitCommonDir, target.trim());
|
|
167
|
+
}
|
|
168
|
+
/** The run id recorded for a round, when its report carried one. */
|
|
169
|
+
export function roundRunId(state, round) {
|
|
170
|
+
return state?.rounds.find((r) => r.round === round)?.runId;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Gating reason for a finding, tolerating legacy reports without RCL-23
|
|
174
|
+
* annotations. Shared with the CLI so classification and display agree.
|
|
175
|
+
*/
|
|
176
|
+
export function findingGatingReason(f) {
|
|
177
|
+
if (f.gating)
|
|
178
|
+
return f.gating.reason;
|
|
179
|
+
return f.severity === 'critical' || f.severity === 'important' ? 'legacy-blocking' : 'none';
|
|
180
|
+
}
|
|
181
|
+
/** Refuse ambiguous legacy report keys before persisting or publishing classifications. */
|
|
182
|
+
export function validateReportIdentityMappings(findings) {
|
|
183
|
+
const seen = new Map();
|
|
184
|
+
for (const f of findings) {
|
|
185
|
+
const key = f.finding.identity?.trim() || f.identity;
|
|
186
|
+
const previous = seen.get(key);
|
|
187
|
+
if (previous && (previous.identity !== f.identity || previous.status !== f.status ||
|
|
188
|
+
(previous.suppressReason || undefined) !== (f.suppressReason || undefined))) {
|
|
189
|
+
throw new ConvergeRunStateError(`Report identity ${key} has conflicting classifications; preserve the report for supported finding-ref recovery.`);
|
|
190
|
+
}
|
|
191
|
+
seen.set(key, f);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export async function processRoundReport(options) {
|
|
195
|
+
const { target } = validateRoundReportInput(options);
|
|
196
|
+
return options.ownership
|
|
197
|
+
? withOwnedNativeOperation(options.ownership, options.gitCommonDir, target, ownership => processRoundReportOwned(options, ownership))
|
|
198
|
+
: withNativeTarget(options.gitCommonDir, target, ownership => processRoundReportOwned(options, ownership));
|
|
199
|
+
}
|
|
200
|
+
function validateRoundReportInput(options) {
|
|
201
|
+
const target = options.target.trim();
|
|
202
|
+
if (!target)
|
|
203
|
+
throw new ConvergeRunStateError('Convergence target must not be empty.');
|
|
204
|
+
// A blank id is no binding at all; only a real one is persisted.
|
|
205
|
+
const runId = options.runId?.trim() || undefined;
|
|
206
|
+
if (!Number.isSafeInteger(options.round) || options.round < 1) {
|
|
207
|
+
throw new ConvergeRunStateError('round must be a positive integer.');
|
|
208
|
+
}
|
|
209
|
+
if (options.findings.some((finding) => !DEFAULT_SEVERITY_ORDER.includes(finding.severity))) {
|
|
210
|
+
throw new ConvergeRunStateError('Invalid finding severity: expected critical, important, minor, or nitpick.');
|
|
211
|
+
}
|
|
212
|
+
if (options.findings.some((finding) => typeof finding.title !== 'string' || typeof finding.description !== 'string')) {
|
|
213
|
+
throw new ConvergeRunStateError('Invalid finding text: title and description must be strings.');
|
|
214
|
+
}
|
|
215
|
+
if (options.findings.some((finding) => finding.identity !== undefined && typeof finding.identity !== 'string')) {
|
|
216
|
+
throw new ConvergeRunStateError('Invalid finding identity: expected a string when present.');
|
|
217
|
+
}
|
|
218
|
+
if (options.findings.some((finding) => {
|
|
219
|
+
const identity = finding.identity;
|
|
220
|
+
return typeof identity === 'string' && looksLikeReportIdentity(identity) && !REPORT_IDENTITY.test(identity);
|
|
221
|
+
})) {
|
|
222
|
+
throw new ConvergeRunStateError('Invalid report identity; refusing legacy matching for a malformed report key.');
|
|
223
|
+
}
|
|
224
|
+
const reportIdentities = options.findings
|
|
225
|
+
.map((finding) => finding.identity)
|
|
226
|
+
.filter((identity) => typeof identity === 'string')
|
|
227
|
+
.filter(identity => REPORT_IDENTITY.test(identity));
|
|
228
|
+
if (new Set(reportIdentities).size !== reportIdentities.length) {
|
|
229
|
+
throw new ConvergeRunStateError('Duplicate report identity; each modern report claim must be independently addressable.');
|
|
230
|
+
}
|
|
231
|
+
return { target, runId };
|
|
232
|
+
}
|
|
233
|
+
function looksLikeReportIdentity(identity) {
|
|
234
|
+
const normalized = identity.normalize('NFKC')
|
|
235
|
+
.replace(/\p{Cf}/gu, '')
|
|
236
|
+
.trim()
|
|
237
|
+
.toLowerCase()
|
|
238
|
+
.replace(/[\u0435\u03b5]/gu, 'e')
|
|
239
|
+
.replace(/[\u043e\u03bf]/gu, 'o')
|
|
240
|
+
.replace(/[\u0440\u03c1]/gu, 'p')
|
|
241
|
+
.replace(/[\u0442\u03c4]/gu, 't');
|
|
242
|
+
const prefix = normalized.split(':', 1)[0].trim();
|
|
243
|
+
return prefix === 'report' || (prefix === 'reprot' && REPORT_IDENTITY_SHAPE.test(normalized));
|
|
244
|
+
}
|
|
245
|
+
function claimTextSha256(finding) {
|
|
246
|
+
const canonicalText = (text) => text.normalize('NFC').replace(/\r\n?/g, '\n');
|
|
247
|
+
return createHash('sha256')
|
|
248
|
+
.update(JSON.stringify([canonicalText(finding.title), canonicalText(finding.description)]))
|
|
249
|
+
.digest('hex');
|
|
250
|
+
}
|
|
251
|
+
async function processRoundReportOwned(options, ownership) {
|
|
252
|
+
const { target, runId } = validateRoundReportInput(options);
|
|
253
|
+
const gitCommonDir = await ownedNativeTargetCommonDir(ownership, options.gitCommonDir, target);
|
|
254
|
+
const lineWindow = options.lineWindow ?? DEFAULT_LINE_WINDOW;
|
|
255
|
+
const state = (await readState(gitCommonDir, target)) ?? initialConvergeRunState(target);
|
|
256
|
+
const { assertReviewCyclePair, assertNoPendingFreshReview } = await import('./fresh-review.js');
|
|
257
|
+
await assertNoPendingFreshReview(gitCommonDir, target);
|
|
258
|
+
await assertReviewCyclePair(gitCommonDir, target, state.cycle);
|
|
259
|
+
if (options.cycleId !== state.cycle?.id)
|
|
260
|
+
throw new ConvergeRunStateError('review_cycle_mismatch');
|
|
261
|
+
const { hasHealthyGuardedLaunch } = await import('./launch-guard.js');
|
|
262
|
+
// A guarded launch that recorded inconclusive blocking health is never
|
|
263
|
+
// admitted, whatever its aggregate counters say (RCL-136).
|
|
264
|
+
const launch = state.lastLaunch;
|
|
265
|
+
if (launch && launch.runId === runId && launch.deliveryFailure === 'local-invalid')
|
|
266
|
+
throw new ConvergeRunStateError('terminal_rejection_cannot_be_admitted');
|
|
267
|
+
if (launch?.status === 'completed' && launch.reviewerHealth !== undefined && launch.runId === runId) {
|
|
268
|
+
// The run's own report bytes and round, or nothing: a rewritten copy is not admissible evidence.
|
|
269
|
+
if (launch.round !== options.round || launch.reportJsonSha256 !== options.reportSha256) {
|
|
270
|
+
throw new ConvergeRunStateError('report_launch_mismatch');
|
|
271
|
+
}
|
|
272
|
+
if (!hasHealthyGuardedLaunch(launch))
|
|
273
|
+
throw new ConvergeRunStateError('report_health_inconclusive');
|
|
274
|
+
}
|
|
275
|
+
if (state.cycle) {
|
|
276
|
+
if (!launch || launch.status !== 'completed' || !hasHealthyGuardedLaunch(launch) ||
|
|
277
|
+
launch.runId !== runId || launch.reportJsonSha256 !== options.reportSha256 || launch.round !== options.round) {
|
|
278
|
+
throw new ConvergeRunStateError('review_cycle_launch_mismatch');
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (state.staleReportAudit?.some(entry => staleManifest(entry).runId === runId || staleManifest(entry).reportSha256 === options.reportSha256))
|
|
282
|
+
throw new ConvergeRunStateError('stale_report_cannot_be_admitted');
|
|
283
|
+
if (state.staleReportAudit?.length) {
|
|
284
|
+
const { verifyStaleReportReceipts } = await import('./stale-report.js');
|
|
285
|
+
await verifyStaleReportReceipts(gitCommonDir, state.staleReportAudit);
|
|
286
|
+
}
|
|
287
|
+
if (state.terminalRejections?.some(entry => rejectionManifest(entry).runId === runId || rejectionManifest(entry).reportSha256 === options.reportSha256))
|
|
288
|
+
throw new ConvergeRunStateError('terminal_rejection_cannot_be_admitted');
|
|
289
|
+
if (state.terminalRejections) {
|
|
290
|
+
const { verifyTerminalRejections } = await import('./terminal-rejection.js');
|
|
291
|
+
await verifyTerminalRejections(gitCommonDir, state);
|
|
292
|
+
}
|
|
293
|
+
const gapEntries = state.roundGapAudit?.entries ?? [];
|
|
294
|
+
if (gapEntries.some(entry => gapManifest(entry).gapRound === options.round))
|
|
295
|
+
throw new ConvergeRunStateError('round_gap_requires_explicit_original_evidence_recovery');
|
|
296
|
+
for (const entry of gapEntries.filter(e => gapManifest(e).admittingRound === options.round)) {
|
|
297
|
+
const m = gapManifest(entry);
|
|
298
|
+
if (m.runId !== runId || m.reportSha256 !== options.reportSha256)
|
|
299
|
+
throw new ConvergeRunStateError('round_gap_original_report_mismatch');
|
|
300
|
+
const { verifyRoundGapReceipt } = await import('./round-gap.js');
|
|
301
|
+
const original = await verifyRoundGapReceipt(gitCommonDir, entry);
|
|
302
|
+
if (!isDeepStrictEqual(original.findings, options.findings))
|
|
303
|
+
throw new ConvergeRunStateError('round_gap_original_report_mismatch');
|
|
304
|
+
}
|
|
305
|
+
if (options.maxRounds !== undefined) {
|
|
306
|
+
state.roundCap = validateRoundCap(options.maxRounds);
|
|
307
|
+
}
|
|
308
|
+
if (options.round > state.roundCap || options.round > HARD_CONVERGE_ROUND_CAP) {
|
|
309
|
+
// Persist a tightened/extended cap even when this round is refused.
|
|
310
|
+
if (options.maxRounds !== undefined)
|
|
311
|
+
await writeState(gitCommonDir, state, ownership);
|
|
312
|
+
throw new ConvergeRoundCapError(target, options.round, state.roundCap);
|
|
313
|
+
}
|
|
314
|
+
// Rounds advance contiguously: the current round may be re-processed (the
|
|
315
|
+
// skill allows bounded re-runs), the next round may start, and nothing
|
|
316
|
+
// else — reusing old numbers or skipping ahead would let a loop dodge the
|
|
317
|
+
// cap's intent. A state with no recorded rounds adopts whatever round the
|
|
318
|
+
// resumed ledger is on (pre-upgrade runs have history the state lacks).
|
|
319
|
+
const maxRecorded = state.rounds.reduce((max, r) => Math.max(max, r.round), 0);
|
|
320
|
+
const gaps = Array.from({ length: Math.max(0, options.round - maxRecorded - 1) }, (_, i) => maxRecorded + i + 1);
|
|
321
|
+
const admittedThroughGap = gaps.length === 1 && gaps.every(gapRound => gapEntries.some(entry => {
|
|
322
|
+
const m = gapManifest(entry);
|
|
323
|
+
return m.gapRound === gapRound && m.admittingRound === options.round && m.runId === runId && m.reportSha256 === options.reportSha256;
|
|
324
|
+
}));
|
|
325
|
+
if (maxRecorded > 0 && (options.round < maxRecorded || (options.round > maxRecorded + 1 && !admittedThroughGap))) {
|
|
326
|
+
throw new ConvergeRunStateError(`Round ${options.round} for ${target} is out of order: recorded rounds reach ` +
|
|
327
|
+
`${maxRecorded}; only round ${maxRecorded} (re-run) or ${maxRecorded + 1} is accepted.`);
|
|
328
|
+
}
|
|
329
|
+
// Live list: entries created earlier in THIS round must be matchable by
|
|
330
|
+
// later findings of the same report, or near-duplicates in one report
|
|
331
|
+
// would split into separate identities. Matching is overlap-only — a
|
|
332
|
+
// bucket-key shortcut would merge non-overlapping findings that merely
|
|
333
|
+
// share a 10-line neighborhood.
|
|
334
|
+
const entries = Object.values(state.findings);
|
|
335
|
+
const occupied = new Set(Object.keys(state.findings));
|
|
336
|
+
const counts = { new: 0, repeat: 0, suppressed: 0, regating: 0 };
|
|
337
|
+
const annotated = [];
|
|
338
|
+
const severities = {};
|
|
339
|
+
// A modern report has already deduplicated findings and allocated a key for
|
|
340
|
+
// each sighting. Two different report keys may point at the same lines while
|
|
341
|
+
// describing different claims; one native identity cannot carry both verdicts.
|
|
342
|
+
const claimedThisRound = new Map();
|
|
343
|
+
const hasModernReportIdentity = options.findings.some((finding) => REPORT_IDENTITY.test(finding.identity ?? ''));
|
|
344
|
+
const indexedFindings = options.findings.map((finding, findingIndex) => ({ finding, findingIndex }));
|
|
345
|
+
// Modern reservations are allocated first, so mixed input order cannot lend
|
|
346
|
+
// a modern claim a legacy entry. Keep the caller's report order in output.
|
|
347
|
+
indexedFindings.sort(({ finding: left }, { finding: right }) => Number(REPORT_IDENTITY.test(right.identity ?? '')) - Number(REPORT_IDENTITY.test(left.identity ?? '')));
|
|
348
|
+
const pending = new Map();
|
|
349
|
+
for (const { findingIndex, finding } of indexedFindings) {
|
|
350
|
+
const reportIdentity = REPORT_IDENTITY.test(finding.identity ?? '')
|
|
351
|
+
? finding.identity
|
|
352
|
+
: undefined;
|
|
353
|
+
// A mixed report cannot safely coalesce a legacy sighting with a modern
|
|
354
|
+
// one. Reserve every mixed-report entry, while preserving legacy-only
|
|
355
|
+
// coalescing for callers predating report identities.
|
|
356
|
+
const claimToken = reportIdentity ?? (hasModernReportIdentity ? `legacy:${findingIndex}` : undefined);
|
|
357
|
+
const textDigest = claimTextSha256(finding);
|
|
358
|
+
const candidates = entries.filter((entry) => {
|
|
359
|
+
const claimedBy = claimedThisRound.get(entry.key);
|
|
360
|
+
if (claimedBy !== undefined && claimedBy !== claimToken) {
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
const storedDigest = state.findings[entry.key]?.claimTextSha256;
|
|
364
|
+
const origin = state.findings[entry.key]?.identityOrigin;
|
|
365
|
+
if (reportIdentity !== undefined) {
|
|
366
|
+
return origin === 'modern' &&
|
|
367
|
+
(state.findings[entry.key]?.sourceReportIdentity === reportIdentity || storedDigest === textDigest);
|
|
368
|
+
}
|
|
369
|
+
return origin !== 'modern';
|
|
370
|
+
});
|
|
371
|
+
// A digest is only a conservative continuity check, never a claim key.
|
|
372
|
+
// When historical modern claims have the same digest and location, there
|
|
373
|
+
// is no evidence that this sighting belongs to either one. Allocate a new
|
|
374
|
+
// identity instead of lending either historical verdict to it.
|
|
375
|
+
const matchingCandidates = candidates.filter(candidate => matchFinding(finding, [candidate], lineWindow) !== undefined);
|
|
376
|
+
const exactSource = reportIdentity === undefined
|
|
377
|
+
? []
|
|
378
|
+
: matchingCandidates.filter(candidate => state.findings[candidate.key]?.sourceReportIdentity === reportIdentity);
|
|
379
|
+
const matched = reportIdentity === undefined
|
|
380
|
+
? matchFinding(finding, candidates, lineWindow)
|
|
381
|
+
: exactSource.length === 1
|
|
382
|
+
? exactSource[0]
|
|
383
|
+
: matchingCandidates.length === 1 ? matchingCandidates[0] : undefined;
|
|
384
|
+
if (!matched) {
|
|
385
|
+
const key = availableFindingKey(finding, occupied);
|
|
386
|
+
occupied.add(key);
|
|
387
|
+
const created = {
|
|
388
|
+
key,
|
|
389
|
+
file: finding.file,
|
|
390
|
+
category: finding.category,
|
|
391
|
+
startLine: finding.startLine,
|
|
392
|
+
endLine: finding.endLine,
|
|
393
|
+
title: finding.title,
|
|
394
|
+
claimTextSha256: textDigest,
|
|
395
|
+
identityOrigin: reportIdentity ? 'modern' : 'legacy',
|
|
396
|
+
...(reportIdentity ? { sourceReportIdentity: reportIdentity } : {}),
|
|
397
|
+
severity: finding.severity,
|
|
398
|
+
models: [...finding.consensus.models],
|
|
399
|
+
firstRound: options.round,
|
|
400
|
+
lastRound: options.round,
|
|
401
|
+
};
|
|
402
|
+
state.findings[key] = created;
|
|
403
|
+
severities[key] = finding.severity;
|
|
404
|
+
entries.push(created);
|
|
405
|
+
if (claimToken)
|
|
406
|
+
claimedThisRound.set(key, claimToken);
|
|
407
|
+
counts.new++;
|
|
408
|
+
pending.set(findingIndex, { identity: key, status: 'new', finding });
|
|
409
|
+
continue;
|
|
410
|
+
}
|
|
411
|
+
const entry = state.findings[matched.key];
|
|
412
|
+
if (claimToken)
|
|
413
|
+
claimedThisRound.set(entry.key, claimToken);
|
|
414
|
+
// Freeze a legacy verdict's implicit severity before updating sightings;
|
|
415
|
+
// later reports must not reinterpret that dismissal as critical.
|
|
416
|
+
const severityAtVerdict = entry.verdictSeverity ?? entry.severity;
|
|
417
|
+
if (entry.verdict !== undefined && entry.verdictSeverity === undefined) {
|
|
418
|
+
entry.verdictSeverity = severityAtVerdict;
|
|
419
|
+
}
|
|
420
|
+
entry.lastRound = Math.max(entry.lastRound, options.round);
|
|
421
|
+
entry.models = [...new Set([...entry.models, ...finding.consensus.models])];
|
|
422
|
+
// Track the latest sighting's span: fixes shift lines
|
|
423
|
+
// between rounds, and matching against a stale first-seen span would
|
|
424
|
+
// decay round over round.
|
|
425
|
+
entry.startLine = finding.startLine;
|
|
426
|
+
entry.endLine = finding.endLine;
|
|
427
|
+
const priorSeverity = severities[entry.key];
|
|
428
|
+
if (priorSeverity === undefined ||
|
|
429
|
+
DEFAULT_SEVERITY_ORDER.indexOf(finding.severity) < DEFAULT_SEVERITY_ORDER.indexOf(priorSeverity)) {
|
|
430
|
+
severities[entry.key] = finding.severity;
|
|
431
|
+
}
|
|
432
|
+
let status;
|
|
433
|
+
let suppressReason;
|
|
434
|
+
if (entry.firstRound === options.round) {
|
|
435
|
+
// A re-run of the round that first recorded this finding — it is this
|
|
436
|
+
// round's own NEW finding being reprocessed, not a cross-round repeat.
|
|
437
|
+
counts.new++;
|
|
438
|
+
pending.set(findingIndex, { identity: entry.key, status: 'new', finding });
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
if (entry.verdict === 'dismissed') {
|
|
442
|
+
if (finding.severity === 'critical' && severityAtVerdict !== 'critical') {
|
|
443
|
+
status = 'regating';
|
|
444
|
+
counts.regating++;
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
status = 'suppressed';
|
|
448
|
+
counts.suppressed++;
|
|
449
|
+
suppressReason =
|
|
450
|
+
`dismissed in round ${entry.verdictRound}` +
|
|
451
|
+
(entry.verdictReason ? ` (${entry.verdictReason})` : '') +
|
|
452
|
+
' — a dismissal is terminal on its evidence; re-gating requires escalation to critical (RCL-30)';
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
status = 'repeat';
|
|
457
|
+
counts.repeat++;
|
|
458
|
+
}
|
|
459
|
+
pending.set(findingIndex, {
|
|
460
|
+
identity: entry.key,
|
|
461
|
+
status,
|
|
462
|
+
...(suppressReason ? { suppressReason } : {}),
|
|
463
|
+
finding,
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
annotated.push(...options.findings.map((_, index) => pending.get(index)));
|
|
467
|
+
validateReportIdentityMappings(annotated);
|
|
468
|
+
for (const [key, severity] of Object.entries(severities)) {
|
|
469
|
+
state.findings[key].severity = severity;
|
|
470
|
+
}
|
|
471
|
+
// Re-processing a round without a report id (a legacy or mismatched
|
|
472
|
+
// report) must not erase the binding an earlier pass persisted.
|
|
473
|
+
const boundRunId = runId ?? state.rounds.find((r) => r.round === options.round)?.runId;
|
|
474
|
+
state.rounds = [
|
|
475
|
+
...state.rounds.filter((r) => r.round !== options.round),
|
|
476
|
+
{ round: options.round, counts, severities, ...(boundRunId !== undefined ? { runId: boundRunId } : {}) },
|
|
477
|
+
].sort((a, b) => a.round - b.round);
|
|
478
|
+
state.lastAnnotations = {
|
|
479
|
+
round: options.round,
|
|
480
|
+
identities: annotated.map((a) => ({
|
|
481
|
+
identity: a.identity,
|
|
482
|
+
status: a.status,
|
|
483
|
+
gating: findingGatingReason(a.finding),
|
|
484
|
+
})),
|
|
485
|
+
};
|
|
486
|
+
state.updatedAt = new Date().toISOString();
|
|
487
|
+
await writeState(gitCommonDir, state, ownership);
|
|
488
|
+
return { roundCap: state.roundCap, counts, findings: annotated };
|
|
489
|
+
}
|
|
490
|
+
export async function recordVerdicts(options) {
|
|
491
|
+
return options.ownership
|
|
492
|
+
? withOwnedNativeOperation(options.ownership, options.gitCommonDir, options.target, ownership => recordVerdictsOwned(options, ownership))
|
|
493
|
+
: withNativeTarget(options.gitCommonDir, options.target, ownership => recordVerdictsOwned(options, ownership));
|
|
494
|
+
}
|
|
495
|
+
async function recordVerdictsOwned(options, ownership) {
|
|
496
|
+
const target = options.target.trim();
|
|
497
|
+
const gitCommonDir = await ownedNativeTargetCommonDir(ownership, options.gitCommonDir, target);
|
|
498
|
+
const state = await readState(gitCommonDir, target);
|
|
499
|
+
if (!state) {
|
|
500
|
+
throw new ConvergeRunStateError(`No converge run state for ${target} — run converge-report before recording verdicts.`);
|
|
501
|
+
}
|
|
502
|
+
const reviewedRound = state.rounds.find((r) => r.round === options.round);
|
|
503
|
+
if (!reviewedRound) {
|
|
504
|
+
throw new ConvergeRunStateError(`Round ${options.round} is not recorded for ${target}.`);
|
|
505
|
+
}
|
|
506
|
+
const { assertReviewCyclePair, assertNoPendingFreshReview } = await import('./fresh-review.js');
|
|
507
|
+
await assertNoPendingFreshReview(gitCommonDir, target);
|
|
508
|
+
await assertReviewCyclePair(gitCommonDir, target, state.cycle);
|
|
509
|
+
if ((state.cycle && options.runId === undefined) ||
|
|
510
|
+
(options.runId !== undefined && options.runId !== reviewedRound.runId)) {
|
|
511
|
+
throw new ConvergeRunStateError('review_cycle_verdict_run_mismatch: use --run-id from the current report');
|
|
512
|
+
}
|
|
513
|
+
const updated = [];
|
|
514
|
+
const severities = reviewedRound.severities;
|
|
515
|
+
for (const { key, verdict, reason } of options.verdicts) {
|
|
516
|
+
const entry = state.findings[key];
|
|
517
|
+
if (!entry) {
|
|
518
|
+
throw new ConvergeRunStateError(`Unknown finding key "${key}" for target ${target}.`);
|
|
519
|
+
}
|
|
520
|
+
if (severities !== undefined && severities[key] === undefined) {
|
|
521
|
+
throw new ConvergeRunStateError(`Finding "${key}" was not sighted in round ${options.round}.`);
|
|
522
|
+
}
|
|
523
|
+
// Emit delayed evidence without replacing a newer round's active verdict.
|
|
524
|
+
const recorded = entry.verdictRound !== undefined && entry.verdictRound > options.round
|
|
525
|
+
? { ...entry, verdictReason: undefined }
|
|
526
|
+
: entry;
|
|
527
|
+
recorded.verdict = verdict;
|
|
528
|
+
recorded.verdictRound = options.round;
|
|
529
|
+
recorded.verdictSeverity = severities?.[key] ?? entry.severity;
|
|
530
|
+
if (reason !== undefined)
|
|
531
|
+
recorded.verdictReason = reason;
|
|
532
|
+
else if (verdict === 'fixed')
|
|
533
|
+
delete recorded.verdictReason;
|
|
534
|
+
updated.push(recorded);
|
|
535
|
+
}
|
|
536
|
+
state.updatedAt = new Date().toISOString();
|
|
537
|
+
await writeState(gitCommonDir, state, ownership);
|
|
538
|
+
const resolution = resolveRoundResolution(state, options.round);
|
|
539
|
+
return { entries: updated, ...(reviewedRound.runId ? { runId: reviewedRound.runId } : {}), ...(resolution ? { resolution } : {}) };
|
|
540
|
+
}
|
|
541
|
+
export function resolveRoundResolution(state, round) {
|
|
542
|
+
if (state.lastAnnotations && state.lastAnnotations.round === round) {
|
|
543
|
+
const actionable = state.lastAnnotations.identities.filter((a) => (a.status === 'new' || a.status === 'regating') && a.gating !== 'none');
|
|
544
|
+
const unresolved = actionable
|
|
545
|
+
.filter((a) => {
|
|
546
|
+
const entry = state.findings[a.identity];
|
|
547
|
+
return !entry || entry.verdict === undefined || entry.verdictRound !== round;
|
|
548
|
+
})
|
|
549
|
+
.map((a) => a.identity);
|
|
550
|
+
const fixedThisRound = Object.values(state.findings).filter((e) => e.verdict === 'fixed' && e.verdictRound === round).length;
|
|
551
|
+
return {
|
|
552
|
+
round,
|
|
553
|
+
actionable: actionable.length,
|
|
554
|
+
unresolved,
|
|
555
|
+
fixedThisRound,
|
|
556
|
+
status: unresolved.length > 0
|
|
557
|
+
? 'unresolved'
|
|
558
|
+
: fixedThisRound > 0
|
|
559
|
+
? 'fixes-pending-fresh-round'
|
|
560
|
+
: 'converged-dismissal-only',
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
//# sourceMappingURL=run-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../src/converge/run-state.ts"],"names":[],"mappings":"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"}
|