@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.
Files changed (663) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1415 -0
  3. package/dist/ci.d.ts +16 -0
  4. package/dist/ci.js +42 -0
  5. package/dist/ci.js.map +1 -0
  6. package/dist/config/data-dir.d.ts +6 -0
  7. package/dist/config/data-dir.js +12 -0
  8. package/dist/config/data-dir.js.map +1 -0
  9. package/dist/config/defaults.d.ts +82 -0
  10. package/dist/config/defaults.js +89 -0
  11. package/dist/config/defaults.js.map +1 -0
  12. package/dist/config/harness.d.ts +40 -0
  13. package/dist/config/harness.js +151 -0
  14. package/dist/config/harness.js.map +1 -0
  15. package/dist/config/loader.d.ts +13 -0
  16. package/dist/config/loader.js +131 -0
  17. package/dist/config/loader.js.map +1 -0
  18. package/dist/config/provider-concurrency.d.ts +4 -0
  19. package/dist/config/provider-concurrency.js +6 -0
  20. package/dist/config/provider-concurrency.js.map +1 -0
  21. package/dist/config/providers.d.ts +3 -0
  22. package/dist/config/providers.js +9 -0
  23. package/dist/config/providers.js.map +1 -0
  24. package/dist/config/schema.d.ts +179 -0
  25. package/dist/config/schema.js +115 -0
  26. package/dist/config/schema.js.map +1 -0
  27. package/dist/consensus/claim-contract.d.ts +9 -0
  28. package/dist/consensus/claim-contract.js +307 -0
  29. package/dist/consensus/claim-contract.js.map +1 -0
  30. package/dist/consensus/claim-identity.d.ts +5 -0
  31. package/dist/consensus/claim-identity.js +39 -0
  32. package/dist/consensus/claim-identity.js.map +1 -0
  33. package/dist/consensus/deduper.d.ts +43 -0
  34. package/dist/consensus/deduper.js +1052 -0
  35. package/dist/consensus/deduper.js.map +1 -0
  36. package/dist/consensus/finding-identity.d.ts +20 -0
  37. package/dist/consensus/finding-identity.js +49 -0
  38. package/dist/consensus/finding-identity.js.map +1 -0
  39. package/dist/consensus/gating.d.ts +215 -0
  40. package/dist/consensus/gating.js +699 -0
  41. package/dist/consensus/gating.js.map +1 -0
  42. package/dist/consensus/parser.d.ts +22 -0
  43. package/dist/consensus/parser.js +255 -0
  44. package/dist/consensus/parser.js.map +1 -0
  45. package/dist/consensus/semantic-deduper.d.ts +10 -0
  46. package/dist/consensus/semantic-deduper.js +70 -0
  47. package/dist/consensus/semantic-deduper.js.map +1 -0
  48. package/dist/consensus/types.d.ts +196 -0
  49. package/dist/consensus/types.js +2 -0
  50. package/dist/consensus/types.js.map +1 -0
  51. package/dist/consensus/verification-contract.d.ts +8 -0
  52. package/dist/consensus/verification-contract.js +95 -0
  53. package/dist/consensus/verification-contract.js.map +1 -0
  54. package/dist/consensus/voter.d.ts +29 -0
  55. package/dist/consensus/voter.js +394 -0
  56. package/dist/consensus/voter.js.map +1 -0
  57. package/dist/converge/attempt-budget.d.ts +88 -0
  58. package/dist/converge/attempt-budget.js +717 -0
  59. package/dist/converge/attempt-budget.js.map +1 -0
  60. package/dist/converge/bound-fix-recovery-source.d.ts +24 -0
  61. package/dist/converge/bound-fix-recovery-source.js +25 -0
  62. package/dist/converge/bound-fix-recovery-source.js.map +1 -0
  63. package/dist/converge/bound-fix-recovery.d.ts +15 -0
  64. package/dist/converge/bound-fix-recovery.js +65 -0
  65. package/dist/converge/bound-fix-recovery.js.map +1 -0
  66. package/dist/converge/correction-anchors.d.ts +1 -0
  67. package/dist/converge/correction-anchors.js +2 -0
  68. package/dist/converge/correction-anchors.js.map +1 -0
  69. package/dist/converge/cycle-remote.d.ts +6 -0
  70. package/dist/converge/cycle-remote.js +41 -0
  71. package/dist/converge/cycle-remote.js.map +1 -0
  72. package/dist/converge/delivery-reconciliation.d.ts +17 -0
  73. package/dist/converge/delivery-reconciliation.js +53 -0
  74. package/dist/converge/delivery-reconciliation.js.map +1 -0
  75. package/dist/converge/finding-identity.d.ts +6 -0
  76. package/dist/converge/finding-identity.js +7 -0
  77. package/dist/converge/finding-identity.js.map +1 -0
  78. package/dist/converge/fresh-review.d.ts +37 -0
  79. package/dist/converge/fresh-review.js +351 -0
  80. package/dist/converge/fresh-review.js.map +1 -0
  81. package/dist/converge/launch-guard.d.ts +55 -0
  82. package/dist/converge/launch-guard.js +363 -0
  83. package/dist/converge/launch-guard.js.map +1 -0
  84. package/dist/converge/launch-preflight.d.ts +5 -0
  85. package/dist/converge/launch-preflight.js +41 -0
  86. package/dist/converge/launch-preflight.js.map +1 -0
  87. package/dist/converge/launch-record.d.ts +136 -0
  88. package/dist/converge/launch-record.js +86 -0
  89. package/dist/converge/launch-record.js.map +1 -0
  90. package/dist/converge/legacy-launch-health.d.ts +311 -0
  91. package/dist/converge/legacy-launch-health.js +159 -0
  92. package/dist/converge/legacy-launch-health.js.map +1 -0
  93. package/dist/converge/legacy-roster.d.ts +29 -0
  94. package/dist/converge/legacy-roster.js +268 -0
  95. package/dist/converge/legacy-roster.js.map +1 -0
  96. package/dist/converge/native-lock.d.ts +18 -0
  97. package/dist/converge/native-lock.js +122 -0
  98. package/dist/converge/native-lock.js.map +1 -0
  99. package/dist/converge/ordinary-pending-export.d.ts +67 -0
  100. package/dist/converge/ordinary-pending-export.js +175 -0
  101. package/dist/converge/ordinary-pending-export.js.map +1 -0
  102. package/dist/converge/ordinary-pending-package.d.ts +28 -0
  103. package/dist/converge/ordinary-pending-package.js +36 -0
  104. package/dist/converge/ordinary-pending-package.js.map +1 -0
  105. package/dist/converge/pending-legacy-resume.d.ts +119 -0
  106. package/dist/converge/pending-legacy-resume.js +720 -0
  107. package/dist/converge/pending-legacy-resume.js.map +1 -0
  108. package/dist/converge/pending-recovery-source.d.ts +131 -0
  109. package/dist/converge/pending-recovery-source.js +71 -0
  110. package/dist/converge/pending-recovery-source.js.map +1 -0
  111. package/dist/converge/recovery-launch.d.ts +66 -0
  112. package/dist/converge/recovery-launch.js +518 -0
  113. package/dist/converge/recovery-launch.js.map +1 -0
  114. package/dist/converge/retained-report.d.ts +29 -0
  115. package/dist/converge/retained-report.js +218 -0
  116. package/dist/converge/retained-report.js.map +1 -0
  117. package/dist/converge/retry-source.d.ts +25 -0
  118. package/dist/converge/retry-source.js +13 -0
  119. package/dist/converge/retry-source.js.map +1 -0
  120. package/dist/converge/review-cycle.d.ts +49 -0
  121. package/dist/converge/review-cycle.js +26 -0
  122. package/dist/converge/review-cycle.js.map +1 -0
  123. package/dist/converge/round-gap-schema.d.ts +66 -0
  124. package/dist/converge/round-gap-schema.js +51 -0
  125. package/dist/converge/round-gap-schema.js.map +1 -0
  126. package/dist/converge/round-gap.d.ts +38 -0
  127. package/dist/converge/round-gap.js +334 -0
  128. package/dist/converge/round-gap.js.map +1 -0
  129. package/dist/converge/run-state.d.ts +224 -0
  130. package/dist/converge/run-state.js +564 -0
  131. package/dist/converge/run-state.js.map +1 -0
  132. package/dist/converge/stale-report-schema.d.ts +42 -0
  133. package/dist/converge/stale-report-schema.js +79 -0
  134. package/dist/converge/stale-report-schema.js.map +1 -0
  135. package/dist/converge/stale-report-storage.d.ts +47 -0
  136. package/dist/converge/stale-report-storage.js +172 -0
  137. package/dist/converge/stale-report-storage.js.map +1 -0
  138. package/dist/converge/stale-report.d.ts +14 -0
  139. package/dist/converge/stale-report.js +213 -0
  140. package/dist/converge/stale-report.js.map +1 -0
  141. package/dist/converge/target-ownership.d.ts +29 -0
  142. package/dist/converge/target-ownership.js +95 -0
  143. package/dist/converge/target-ownership.js.map +1 -0
  144. package/dist/converge/terminal-rejection-schema.d.ts +42 -0
  145. package/dist/converge/terminal-rejection-schema.js +39 -0
  146. package/dist/converge/terminal-rejection-schema.js.map +1 -0
  147. package/dist/converge/terminal-rejection.d.ts +13 -0
  148. package/dist/converge/terminal-rejection.js +275 -0
  149. package/dist/converge/terminal-rejection.js.map +1 -0
  150. package/dist/coordination/registry-lock.d.ts +82 -0
  151. package/dist/coordination/registry-lock.js +498 -0
  152. package/dist/coordination/registry-lock.js.map +1 -0
  153. package/dist/discuss.d.ts +53 -0
  154. package/dist/discuss.js +112 -0
  155. package/dist/discuss.js.map +1 -0
  156. package/dist/dispatch/adapter.d.ts +32 -0
  157. package/dist/dispatch/adapter.js +2 -0
  158. package/dist/dispatch/adapter.js.map +1 -0
  159. package/dist/dispatch/anthropic.d.ts +10 -0
  160. package/dist/dispatch/anthropic.js +235 -0
  161. package/dist/dispatch/anthropic.js.map +1 -0
  162. package/dist/dispatch/async-lane.d.ts +127 -0
  163. package/dist/dispatch/async-lane.js +414 -0
  164. package/dist/dispatch/async-lane.js.map +1 -0
  165. package/dist/dispatch/capture-council.d.ts +63 -0
  166. package/dist/dispatch/capture-council.js +137 -0
  167. package/dist/dispatch/capture-council.js.map +1 -0
  168. package/dist/dispatch/captured-async.d.ts +67 -0
  169. package/dist/dispatch/captured-async.js +40 -0
  170. package/dist/dispatch/captured-async.js.map +1 -0
  171. package/dist/dispatch/captured-inputs.d.ts +50 -0
  172. package/dist/dispatch/captured-inputs.js +190 -0
  173. package/dist/dispatch/captured-inputs.js.map +1 -0
  174. package/dist/dispatch/checkpoint-async-context.d.ts +27 -0
  175. package/dist/dispatch/checkpoint-async-context.js +51 -0
  176. package/dist/dispatch/checkpoint-async-context.js.map +1 -0
  177. package/dist/dispatch/checkpoint-async-execution.d.ts +22 -0
  178. package/dist/dispatch/checkpoint-async-execution.js +130 -0
  179. package/dist/dispatch/checkpoint-async-execution.js.map +1 -0
  180. package/dist/dispatch/checkpoint-async-store.d.ts +134 -0
  181. package/dist/dispatch/checkpoint-async-store.js +534 -0
  182. package/dist/dispatch/checkpoint-async-store.js.map +1 -0
  183. package/dist/dispatch/checkpoint-async-unknown.d.ts +19 -0
  184. package/dist/dispatch/checkpoint-async-unknown.js +46 -0
  185. package/dist/dispatch/checkpoint-async-unknown.js.map +1 -0
  186. package/dist/dispatch/checkpoint-async.d.ts +252 -0
  187. package/dist/dispatch/checkpoint-async.js +270 -0
  188. package/dist/dispatch/checkpoint-async.js.map +1 -0
  189. package/dist/dispatch/checkpoint-gating-execution.d.ts +26 -0
  190. package/dist/dispatch/checkpoint-gating-execution.js +84 -0
  191. package/dist/dispatch/checkpoint-gating-execution.js.map +1 -0
  192. package/dist/dispatch/checkpoint-phase-limits.d.ts +5 -0
  193. package/dist/dispatch/checkpoint-phase-limits.js +11 -0
  194. package/dist/dispatch/checkpoint-phase-limits.js.map +1 -0
  195. package/dist/dispatch/checkpoint-verification-context.d.ts +15 -0
  196. package/dist/dispatch/checkpoint-verification-context.js +48 -0
  197. package/dist/dispatch/checkpoint-verification-context.js.map +1 -0
  198. package/dist/dispatch/checkpoint-verification.d.ts +213 -0
  199. package/dist/dispatch/checkpoint-verification.js +381 -0
  200. package/dist/dispatch/checkpoint-verification.js.map +1 -0
  201. package/dist/dispatch/checkpoint.d.ts +329 -0
  202. package/dist/dispatch/checkpoint.js +1418 -0
  203. package/dist/dispatch/checkpoint.js.map +1 -0
  204. package/dist/dispatch/google.d.ts +10 -0
  205. package/dist/dispatch/google.js +158 -0
  206. package/dist/dispatch/google.js.map +1 -0
  207. package/dist/dispatch/late-audit.d.ts +23 -0
  208. package/dist/dispatch/late-audit.js +133 -0
  209. package/dist/dispatch/late-audit.js.map +1 -0
  210. package/dist/dispatch/merge.d.ts +29 -0
  211. package/dist/dispatch/merge.js +112 -0
  212. package/dist/dispatch/merge.js.map +1 -0
  213. package/dist/dispatch/openai-compat.d.ts +30 -0
  214. package/dist/dispatch/openai-compat.js +166 -0
  215. package/dist/dispatch/openai-compat.js.map +1 -0
  216. package/dist/dispatch/openai.d.ts +10 -0
  217. package/dist/dispatch/openai.js +159 -0
  218. package/dist/dispatch/openai.js.map +1 -0
  219. package/dist/dispatch/original-execution.d.ts +30 -0
  220. package/dist/dispatch/original-execution.js +91 -0
  221. package/dist/dispatch/original-execution.js.map +1 -0
  222. package/dist/dispatch/original-launch.d.ts +37 -0
  223. package/dist/dispatch/original-launch.js +117 -0
  224. package/dist/dispatch/original-launch.js.map +1 -0
  225. package/dist/dispatch/quorum.d.ts +15 -0
  226. package/dist/dispatch/quorum.js +33 -0
  227. package/dist/dispatch/quorum.js.map +1 -0
  228. package/dist/dispatch/recovery-operation.d.ts +44 -0
  229. package/dist/dispatch/recovery-operation.js +146 -0
  230. package/dist/dispatch/recovery-operation.js.map +1 -0
  231. package/dist/dispatch/recovery-policy.d.ts +54 -0
  232. package/dist/dispatch/recovery-policy.js +157 -0
  233. package/dist/dispatch/recovery-policy.js.map +1 -0
  234. package/dist/dispatch/recovery.d.ts +78 -0
  235. package/dist/dispatch/recovery.js +299 -0
  236. package/dist/dispatch/recovery.js.map +1 -0
  237. package/dist/dispatch/retained-async.d.ts +13 -0
  238. package/dist/dispatch/retained-async.js +101 -0
  239. package/dist/dispatch/retained-async.js.map +1 -0
  240. package/dist/dispatch/reviewer-identity.d.ts +10 -0
  241. package/dist/dispatch/reviewer-identity.js +19 -0
  242. package/dist/dispatch/reviewer-identity.js.map +1 -0
  243. package/dist/dispatch/runner.d.ts +76 -0
  244. package/dist/dispatch/runner.js +415 -0
  245. package/dist/dispatch/runner.js.map +1 -0
  246. package/dist/dispatch/utils.d.ts +159 -0
  247. package/dist/dispatch/utils.js +381 -0
  248. package/dist/dispatch/utils.js.map +1 -0
  249. package/dist/dispatch/verification-execution.d.ts +48 -0
  250. package/dist/dispatch/verification-execution.js +252 -0
  251. package/dist/dispatch/verification-execution.js.map +1 -0
  252. package/dist/dispatch/verification-late-audit.d.ts +17 -0
  253. package/dist/dispatch/verification-late-audit.js +117 -0
  254. package/dist/dispatch/verification-late-audit.js.map +1 -0
  255. package/dist/evidence/claim-recovery/authenticated-carrier-projection.d.ts +30 -0
  256. package/dist/evidence/claim-recovery/authenticated-carrier-projection.js +100 -0
  257. package/dist/evidence/claim-recovery/authenticated-carrier-projection.js.map +1 -0
  258. package/dist/evidence/claim-recovery/authenticated-receipts.d.ts +46 -0
  259. package/dist/evidence/claim-recovery/authenticated-receipts.js +120 -0
  260. package/dist/evidence/claim-recovery/authenticated-receipts.js.map +1 -0
  261. package/dist/evidence/claim-recovery/carrier-inventory.d.ts +49 -0
  262. package/dist/evidence/claim-recovery/carrier-inventory.js +340 -0
  263. package/dist/evidence/claim-recovery/carrier-inventory.js.map +1 -0
  264. package/dist/evidence/claim-recovery/claim-index.d.ts +12 -0
  265. package/dist/evidence/claim-recovery/claim-index.js +56 -0
  266. package/dist/evidence/claim-recovery/claim-index.js.map +1 -0
  267. package/dist/evidence/claim-recovery/confirmation.d.ts +53 -0
  268. package/dist/evidence/claim-recovery/confirmation.js +151 -0
  269. package/dist/evidence/claim-recovery/confirmation.js.map +1 -0
  270. package/dist/evidence/claim-recovery/context.d.ts +15 -0
  271. package/dist/evidence/claim-recovery/context.js +40 -0
  272. package/dist/evidence/claim-recovery/context.js.map +1 -0
  273. package/dist/evidence/claim-recovery/proof-storage.d.ts +6 -0
  274. package/dist/evidence/claim-recovery/proof-storage.js +97 -0
  275. package/dist/evidence/claim-recovery/proof-storage.js.map +1 -0
  276. package/dist/evidence/claim-recovery/validation/anchors.d.ts +20 -0
  277. package/dist/evidence/claim-recovery/validation/anchors.js +22 -0
  278. package/dist/evidence/claim-recovery/validation/anchors.js.map +1 -0
  279. package/dist/evidence/claim-recovery/validation/carrier-projection.d.ts +9 -0
  280. package/dist/evidence/claim-recovery/validation/carrier-projection.js +364 -0
  281. package/dist/evidence/claim-recovery/validation/carrier-projection.js.map +1 -0
  282. package/dist/evidence/claim-recovery/validation/carrier-types.d.ts +83 -0
  283. package/dist/evidence/claim-recovery/validation/carrier-types.js +2 -0
  284. package/dist/evidence/claim-recovery/validation/carrier-types.js.map +1 -0
  285. package/dist/evidence/claim-recovery/validation/claim-split.d.ts +57 -0
  286. package/dist/evidence/claim-recovery/validation/claim-split.js +209 -0
  287. package/dist/evidence/claim-recovery/validation/claim-split.js.map +1 -0
  288. package/dist/evidence/claim-recovery/validation/claims.d.ts +20 -0
  289. package/dist/evidence/claim-recovery/validation/claims.js +108 -0
  290. package/dist/evidence/claim-recovery/validation/claims.js.map +1 -0
  291. package/dist/evidence/claim-recovery/validation/current-projection.d.ts +36 -0
  292. package/dist/evidence/claim-recovery/validation/current-projection.js +424 -0
  293. package/dist/evidence/claim-recovery/validation/current-projection.js.map +1 -0
  294. package/dist/evidence/claim-recovery/validation/lexical.d.ts +18 -0
  295. package/dist/evidence/claim-recovery/validation/lexical.js +91 -0
  296. package/dist/evidence/claim-recovery/validation/lexical.js.map +1 -0
  297. package/dist/evidence/claim-recovery/validation/materials.d.ts +19 -0
  298. package/dist/evidence/claim-recovery/validation/materials.js +160 -0
  299. package/dist/evidence/claim-recovery/validation/materials.js.map +1 -0
  300. package/dist/evidence/claim-recovery/validation/native-material.d.ts +27 -0
  301. package/dist/evidence/claim-recovery/validation/native-material.js +35 -0
  302. package/dist/evidence/claim-recovery/validation/native-material.js.map +1 -0
  303. package/dist/evidence/claim-recovery/validation/native-occurrences.d.ts +79 -0
  304. package/dist/evidence/claim-recovery/validation/native-occurrences.js +187 -0
  305. package/dist/evidence/claim-recovery/validation/native-occurrences.js.map +1 -0
  306. package/dist/evidence/claim-recovery/validation/native-state.d.ts +45 -0
  307. package/dist/evidence/claim-recovery/validation/native-state.js +385 -0
  308. package/dist/evidence/claim-recovery/validation/native-state.js.map +1 -0
  309. package/dist/evidence/claim-recovery/validation/obligations.d.ts +15 -0
  310. package/dist/evidence/claim-recovery/validation/obligations.js +65 -0
  311. package/dist/evidence/claim-recovery/validation/obligations.js.map +1 -0
  312. package/dist/evidence/claim-recovery/validation/occurrence-source.d.ts +45 -0
  313. package/dist/evidence/claim-recovery/validation/occurrence-source.js +208 -0
  314. package/dist/evidence/claim-recovery/validation/occurrence-source.js.map +1 -0
  315. package/dist/evidence/claim-recovery/validation/occurrence-types.d.ts +101 -0
  316. package/dist/evidence/claim-recovery/validation/occurrence-types.js +2 -0
  317. package/dist/evidence/claim-recovery/validation/occurrence-types.js.map +1 -0
  318. package/dist/evidence/claim-recovery/validation/occurrence.d.ts +30 -0
  319. package/dist/evidence/claim-recovery/validation/occurrence.js +227 -0
  320. package/dist/evidence/claim-recovery/validation/occurrence.js.map +1 -0
  321. package/dist/evidence/claim-recovery/validation/primitives.d.ts +11 -0
  322. package/dist/evidence/claim-recovery/validation/primitives.js +41 -0
  323. package/dist/evidence/claim-recovery/validation/primitives.js.map +1 -0
  324. package/dist/evidence/claim-recovery/validation/receipts.d.ts +37 -0
  325. package/dist/evidence/claim-recovery/validation/receipts.js +83 -0
  326. package/dist/evidence/claim-recovery/validation/receipts.js.map +1 -0
  327. package/dist/evidence/claim-recovery/validation/recovery-json.d.ts +8 -0
  328. package/dist/evidence/claim-recovery/validation/recovery-json.js +42 -0
  329. package/dist/evidence/claim-recovery/validation/recovery-json.js.map +1 -0
  330. package/dist/evidence/claim-recovery/validation/semantic-cache.d.ts +3 -0
  331. package/dist/evidence/claim-recovery/validation/semantic-cache.js +22 -0
  332. package/dist/evidence/claim-recovery/validation/semantic-cache.js.map +1 -0
  333. package/dist/evidence/claim-recovery/validation/semantic-validation.d.ts +9 -0
  334. package/dist/evidence/claim-recovery/validation/semantic-validation.js +347 -0
  335. package/dist/evidence/claim-recovery/validation/semantic-validation.js.map +1 -0
  336. package/dist/evidence/claim-recovery/validation/sighting.d.ts +2 -0
  337. package/dist/evidence/claim-recovery/validation/sighting.js +15 -0
  338. package/dist/evidence/claim-recovery/validation/sighting.js.map +1 -0
  339. package/dist/evidence/claim-recovery/validation/sources.d.ts +15 -0
  340. package/dist/evidence/claim-recovery/validation/sources.js +2 -0
  341. package/dist/evidence/claim-recovery/validation/sources.js.map +1 -0
  342. package/dist/evidence/claim-recovery/validation/types.d.ts +126 -0
  343. package/dist/evidence/claim-recovery/validation/types.js +2 -0
  344. package/dist/evidence/claim-recovery/validation/types.js.map +1 -0
  345. package/dist/evidence/claim-split.d.ts +1 -0
  346. package/dist/evidence/claim-split.js +2 -0
  347. package/dist/evidence/claim-split.js.map +1 -0
  348. package/dist/evidence/event-receipts.d.ts +16 -0
  349. package/dist/evidence/event-receipts.js +41 -0
  350. package/dist/evidence/event-receipts.js.map +1 -0
  351. package/dist/evidence/finding-recovery.d.ts +23 -0
  352. package/dist/evidence/finding-recovery.js +74 -0
  353. package/dist/evidence/finding-recovery.js.map +1 -0
  354. package/dist/evidence/finding-retriage.d.ts +14 -0
  355. package/dist/evidence/finding-retriage.js +57 -0
  356. package/dist/evidence/finding-retriage.js.map +1 -0
  357. package/dist/evidence/format.d.ts +18 -0
  358. package/dist/evidence/format.js +152 -0
  359. package/dist/evidence/format.js.map +1 -0
  360. package/dist/evidence/original-run/decode.d.ts +30 -0
  361. package/dist/evidence/original-run/decode.js +208 -0
  362. package/dist/evidence/original-run/decode.js.map +1 -0
  363. package/dist/evidence/original-run/journal.d.ts +31 -0
  364. package/dist/evidence/original-run/journal.js +157 -0
  365. package/dist/evidence/original-run/journal.js.map +1 -0
  366. package/dist/evidence/original-run/lock-path.d.ts +17 -0
  367. package/dist/evidence/original-run/lock-path.js +116 -0
  368. package/dist/evidence/original-run/lock-path.js.map +1 -0
  369. package/dist/evidence/original-run/lock-scope.d.ts +21 -0
  370. package/dist/evidence/original-run/lock-scope.js +61 -0
  371. package/dist/evidence/original-run/lock-scope.js.map +1 -0
  372. package/dist/evidence/original-run/lock.d.ts +33 -0
  373. package/dist/evidence/original-run/lock.js +259 -0
  374. package/dist/evidence/original-run/lock.js.map +1 -0
  375. package/dist/evidence/original-run/remote.d.ts +23 -0
  376. package/dist/evidence/original-run/remote.js +110 -0
  377. package/dist/evidence/original-run/remote.js.map +1 -0
  378. package/dist/evidence/original-run/source.d.ts +61 -0
  379. package/dist/evidence/original-run/source.js +267 -0
  380. package/dist/evidence/original-run/source.js.map +1 -0
  381. package/dist/evidence/reads.d.ts +11 -0
  382. package/dist/evidence/reads.js +16 -0
  383. package/dist/evidence/reads.js.map +1 -0
  384. package/dist/evidence/recover-finding.d.ts +17 -0
  385. package/dist/evidence/recover-finding.js +65 -0
  386. package/dist/evidence/recover-finding.js.map +1 -0
  387. package/dist/evidence/recover-run.d.ts +26 -0
  388. package/dist/evidence/recover-run.js +180 -0
  389. package/dist/evidence/recover-run.js.map +1 -0
  390. package/dist/evidence/retained-time-budget.d.ts +9 -0
  391. package/dist/evidence/retained-time-budget.js +14 -0
  392. package/dist/evidence/retained-time-budget.js.map +1 -0
  393. package/dist/evidence/retriage-finding.d.ts +12 -0
  394. package/dist/evidence/retriage-finding.js +67 -0
  395. package/dist/evidence/retriage-finding.js.map +1 -0
  396. package/dist/evidence/reviewer-lineage.d.ts +35 -0
  397. package/dist/evidence/reviewer-lineage.js +293 -0
  398. package/dist/evidence/reviewer-lineage.js.map +1 -0
  399. package/dist/evidence/reviewer-original.d.ts +67 -0
  400. package/dist/evidence/reviewer-original.js +148 -0
  401. package/dist/evidence/reviewer-original.js.map +1 -0
  402. package/dist/evidence/reviewer-recovery.d.ts +74 -0
  403. package/dist/evidence/reviewer-recovery.js +179 -0
  404. package/dist/evidence/reviewer-recovery.js.map +1 -0
  405. package/dist/evidence/reviewer-status.d.ts +145 -0
  406. package/dist/evidence/reviewer-status.js +302 -0
  407. package/dist/evidence/reviewer-status.js.map +1 -0
  408. package/dist/evidence/show.d.ts +10 -0
  409. package/dist/evidence/show.js +41 -0
  410. package/dist/evidence/show.js.map +1 -0
  411. package/dist/evidence/status.d.ts +38 -0
  412. package/dist/evidence/status.js +73 -0
  413. package/dist/evidence/status.js.map +1 -0
  414. package/dist/evidence/target.d.ts +17 -0
  415. package/dist/evidence/target.js +74 -0
  416. package/dist/evidence/target.js.map +1 -0
  417. package/dist/evidence/types.d.ts +176 -0
  418. package/dist/evidence/types.js +109 -0
  419. package/dist/evidence/types.js.map +1 -0
  420. package/dist/index.d.ts +2 -0
  421. package/dist/index.js +2688 -0
  422. package/dist/index.js.map +1 -0
  423. package/dist/models/seed.d.ts +44 -0
  424. package/dist/models/seed.js +175 -0
  425. package/dist/models/seed.js.map +1 -0
  426. package/dist/models/server-stats.d.ts +80 -0
  427. package/dist/models/server-stats.js +109 -0
  428. package/dist/models/server-stats.js.map +1 -0
  429. package/dist/models/stats-store.d.ts +84 -0
  430. package/dist/models/stats-store.js +572 -0
  431. package/dist/models/stats-store.js.map +1 -0
  432. package/dist/output/artifacts.d.ts +16 -0
  433. package/dist/output/artifacts.js +29 -0
  434. package/dist/output/artifacts.js.map +1 -0
  435. package/dist/output/assembly-refusal.d.ts +8 -0
  436. package/dist/output/assembly-refusal.js +14 -0
  437. package/dist/output/assembly-refusal.js.map +1 -0
  438. package/dist/output/github.d.ts +12 -0
  439. package/dist/output/github.js +214 -0
  440. package/dist/output/github.js.map +1 -0
  441. package/dist/output/json.d.ts +3 -0
  442. package/dist/output/json.js +8 -0
  443. package/dist/output/json.js.map +1 -0
  444. package/dist/output/markdown.d.ts +3 -0
  445. package/dist/output/markdown.js +281 -0
  446. package/dist/output/markdown.js.map +1 -0
  447. package/dist/output/progress.d.ts +55 -0
  448. package/dist/output/progress.js +180 -0
  449. package/dist/output/progress.js.map +1 -0
  450. package/dist/output/sanitize.d.ts +18 -0
  451. package/dist/output/sanitize.js +46 -0
  452. package/dist/output/sanitize.js.map +1 -0
  453. package/dist/output/terminal.d.ts +2 -0
  454. package/dist/output/terminal.js +172 -0
  455. package/dist/output/terminal.js.map +1 -0
  456. package/dist/prepare/chunker.d.ts +18 -0
  457. package/dist/prepare/chunker.js +325 -0
  458. package/dist/prepare/chunker.js.map +1 -0
  459. package/dist/prepare/language.d.ts +1 -0
  460. package/dist/prepare/language.js +99 -0
  461. package/dist/prepare/language.js.map +1 -0
  462. package/dist/prepare/prompt-builder.d.ts +44 -0
  463. package/dist/prepare/prompt-builder.js +102 -0
  464. package/dist/prepare/prompt-builder.js.map +1 -0
  465. package/dist/prepare/unified-diff.d.ts +40 -0
  466. package/dist/prepare/unified-diff.js +135 -0
  467. package/dist/prepare/unified-diff.js.map +1 -0
  468. package/dist/prompts/base.d.ts +3 -0
  469. package/dist/prompts/base.js +53 -0
  470. package/dist/prompts/base.js.map +1 -0
  471. package/dist/prompts/hardening.d.ts +19 -0
  472. package/dist/prompts/hardening.js +67 -0
  473. package/dist/prompts/hardening.js.map +1 -0
  474. package/dist/prompts/languages/elixir.d.ts +1 -0
  475. package/dist/prompts/languages/elixir.js +13 -0
  476. package/dist/prompts/languages/elixir.js.map +1 -0
  477. package/dist/prompts/languages/generic.d.ts +1 -0
  478. package/dist/prompts/languages/generic.js +11 -0
  479. package/dist/prompts/languages/generic.js.map +1 -0
  480. package/dist/prompts/languages/python.d.ts +1 -0
  481. package/dist/prompts/languages/python.js +14 -0
  482. package/dist/prompts/languages/python.js.map +1 -0
  483. package/dist/prompts/languages/typescript.d.ts +1 -0
  484. package/dist/prompts/languages/typescript.js +13 -0
  485. package/dist/prompts/languages/typescript.js.map +1 -0
  486. package/dist/prompts/plan.d.ts +15 -0
  487. package/dist/prompts/plan.js +55 -0
  488. package/dist/prompts/plan.js.map +1 -0
  489. package/dist/report/aggregation-inputs.d.ts +52 -0
  490. package/dist/report/aggregation-inputs.js +114 -0
  491. package/dist/report/aggregation-inputs.js.map +1 -0
  492. package/dist/report/assembly.d.ts +43 -0
  493. package/dist/report/assembly.js +133 -0
  494. package/dist/report/assembly.js.map +1 -0
  495. package/dist/report/blocking-health.d.ts +64 -0
  496. package/dist/report/blocking-health.js +156 -0
  497. package/dist/report/blocking-health.js.map +1 -0
  498. package/dist/report/checkpoint-assembly.d.ts +10 -0
  499. package/dist/report/checkpoint-assembly.js +17 -0
  500. package/dist/report/checkpoint-assembly.js.map +1 -0
  501. package/dist/report/checkpoint-consensus.d.ts +59 -0
  502. package/dist/report/checkpoint-consensus.js +197 -0
  503. package/dist/report/checkpoint-consensus.js.map +1 -0
  504. package/dist/report/checkpoint-gating.d.ts +36 -0
  505. package/dist/report/checkpoint-gating.js +110 -0
  506. package/dist/report/checkpoint-gating.js.map +1 -0
  507. package/dist/report/checkpoint-projection.d.ts +76 -0
  508. package/dist/report/checkpoint-projection.js +122 -0
  509. package/dist/report/checkpoint-projection.js.map +1 -0
  510. package/dist/report/consensus-assembly.d.ts +37 -0
  511. package/dist/report/consensus-assembly.js +33 -0
  512. package/dist/report/consensus-assembly.js.map +1 -0
  513. package/dist/report/recovery-source.d.ts +7 -0
  514. package/dist/report/recovery-source.js +7 -0
  515. package/dist/report/recovery-source.js.map +1 -0
  516. package/dist/report/reviewer-artifact.d.ts +118 -0
  517. package/dist/report/reviewer-artifact.js +381 -0
  518. package/dist/report/reviewer-artifact.js.map +1 -0
  519. package/dist/report/reviewer-evidence-schema.d.ts +42 -0
  520. package/dist/report/reviewer-evidence-schema.js +28 -0
  521. package/dist/report/reviewer-evidence-schema.js.map +1 -0
  522. package/dist/report/reviewer-evidence.d.ts +54 -0
  523. package/dist/report/reviewer-evidence.js +229 -0
  524. package/dist/report/reviewer-evidence.js.map +1 -0
  525. package/dist/report/reviewer-health.d.ts +62 -0
  526. package/dist/report/reviewer-health.js +105 -0
  527. package/dist/report/reviewer-health.js.map +1 -0
  528. package/dist/report/run-header.d.ts +219 -0
  529. package/dist/report/run-header.js +307 -0
  530. package/dist/report/run-header.js.map +1 -0
  531. package/dist/report/supplemental-async.d.ts +19 -0
  532. package/dist/report/supplemental-async.js +85 -0
  533. package/dist/report/supplemental-async.js.map +1 -0
  534. package/dist/report/uuid.d.ts +16 -0
  535. package/dist/report/uuid.js +41 -0
  536. package/dist/report/uuid.js.map +1 -0
  537. package/dist/resolver/git.d.ts +16 -0
  538. package/dist/resolver/git.js +77 -0
  539. package/dist/resolver/git.js.map +1 -0
  540. package/dist/resolver/github-client.d.ts +82 -0
  541. package/dist/resolver/github-client.js +27 -0
  542. package/dist/resolver/github-client.js.map +1 -0
  543. package/dist/resolver/github.d.ts +29 -0
  544. package/dist/resolver/github.js +166 -0
  545. package/dist/resolver/github.js.map +1 -0
  546. package/dist/resolver/local.d.ts +3 -0
  547. package/dist/resolver/local.js +75 -0
  548. package/dist/resolver/local.js.map +1 -0
  549. package/dist/resolver/plan.d.ts +8 -0
  550. package/dist/resolver/plan.js +44 -0
  551. package/dist/resolver/plan.js.map +1 -0
  552. package/dist/resolver/target.d.ts +35 -0
  553. package/dist/resolver/target.js +112 -0
  554. package/dist/resolver/target.js.map +1 -0
  555. package/dist/resolver/types.d.ts +43 -0
  556. package/dist/resolver/types.js +2 -0
  557. package/dist/resolver/types.js.map +1 -0
  558. package/dist/roles/builtin.d.ts +4 -0
  559. package/dist/roles/builtin.js +282 -0
  560. package/dist/roles/builtin.js.map +1 -0
  561. package/dist/roles/dispatcher.d.ts +26 -0
  562. package/dist/roles/dispatcher.js +96 -0
  563. package/dist/roles/dispatcher.js.map +1 -0
  564. package/dist/roles/legacy-4.1.10.d.ts +2 -0
  565. package/dist/roles/legacy-4.1.10.js +320 -0
  566. package/dist/roles/legacy-4.1.10.js.map +1 -0
  567. package/dist/roles/legacy-4.4.9.d.ts +4 -0
  568. package/dist/roles/legacy-4.4.9.js +282 -0
  569. package/dist/roles/legacy-4.4.9.js.map +1 -0
  570. package/dist/roles/loader.d.ts +10 -0
  571. package/dist/roles/loader.js +104 -0
  572. package/dist/roles/loader.js.map +1 -0
  573. package/dist/roles/types.d.ts +13 -0
  574. package/dist/roles/types.js +2 -0
  575. package/dist/roles/types.js.map +1 -0
  576. package/dist/telemetry/abort-signal.d.ts +13 -0
  577. package/dist/telemetry/abort-signal.js +40 -0
  578. package/dist/telemetry/abort-signal.js.map +1 -0
  579. package/dist/telemetry/attest.d.ts +98 -0
  580. package/dist/telemetry/attest.js +331 -0
  581. package/dist/telemetry/attest.js.map +1 -0
  582. package/dist/telemetry/attested-retry.d.ts +79 -0
  583. package/dist/telemetry/attested-retry.js +195 -0
  584. package/dist/telemetry/attested-retry.js.map +1 -0
  585. package/dist/telemetry/attested-reviewer-delivery.d.ts +58 -0
  586. package/dist/telemetry/attested-reviewer-delivery.js +238 -0
  587. package/dist/telemetry/attested-reviewer-delivery.js.map +1 -0
  588. package/dist/telemetry/backfill.d.ts +95 -0
  589. package/dist/telemetry/backfill.js +460 -0
  590. package/dist/telemetry/backfill.js.map +1 -0
  591. package/dist/telemetry/credentials.d.ts +44 -0
  592. package/dist/telemetry/credentials.js +87 -0
  593. package/dist/telemetry/credentials.js.map +1 -0
  594. package/dist/telemetry/deliver.d.ts +152 -0
  595. package/dist/telemetry/deliver.js +662 -0
  596. package/dist/telemetry/deliver.js.map +1 -0
  597. package/dist/telemetry/envelope-validation.d.ts +13 -0
  598. package/dist/telemetry/envelope-validation.js +196 -0
  599. package/dist/telemetry/envelope-validation.js.map +1 -0
  600. package/dist/telemetry/envelope.d.ts +159 -0
  601. package/dist/telemetry/envelope.js +288 -0
  602. package/dist/telemetry/envelope.js.map +1 -0
  603. package/dist/telemetry/events.d.ts +68 -0
  604. package/dist/telemetry/events.js +79 -0
  605. package/dist/telemetry/events.js.map +1 -0
  606. package/dist/telemetry/notice.d.ts +15 -0
  607. package/dist/telemetry/notice.js +67 -0
  608. package/dist/telemetry/notice.js.map +1 -0
  609. package/dist/telemetry/outbox.d.ts +166 -0
  610. package/dist/telemetry/outbox.js +741 -0
  611. package/dist/telemetry/outbox.js.map +1 -0
  612. package/dist/telemetry/quarantine.d.ts +105 -0
  613. package/dist/telemetry/quarantine.js +224 -0
  614. package/dist/telemetry/quarantine.js.map +1 -0
  615. package/dist/telemetry/read-sink.d.ts +31 -0
  616. package/dist/telemetry/read-sink.js +25 -0
  617. package/dist/telemetry/read-sink.js.map +1 -0
  618. package/dist/telemetry/recovery/command.d.ts +16 -0
  619. package/dist/telemetry/recovery/command.js +70 -0
  620. package/dist/telemetry/recovery/command.js.map +1 -0
  621. package/dist/telemetry/recovery/discovery.d.ts +8 -0
  622. package/dist/telemetry/recovery/discovery.js +277 -0
  623. package/dist/telemetry/recovery/discovery.js.map +1 -0
  624. package/dist/telemetry/recovery/files.d.ts +20 -0
  625. package/dist/telemetry/recovery/files.js +123 -0
  626. package/dist/telemetry/recovery/files.js.map +1 -0
  627. package/dist/telemetry/recovery/plan.d.ts +10 -0
  628. package/dist/telemetry/recovery/plan.js +325 -0
  629. package/dist/telemetry/recovery/plan.js.map +1 -0
  630. package/dist/telemetry/recovery/source.d.ts +328 -0
  631. package/dist/telemetry/recovery/source.js +253 -0
  632. package/dist/telemetry/recovery/source.js.map +1 -0
  633. package/dist/telemetry/recovery/types.d.ts +100 -0
  634. package/dist/telemetry/recovery/types.js +2 -0
  635. package/dist/telemetry/recovery/types.js.map +1 -0
  636. package/dist/telemetry/recovery-request-budget.d.ts +39 -0
  637. package/dist/telemetry/recovery-request-budget.js +102 -0
  638. package/dist/telemetry/recovery-request-budget.js.map +1 -0
  639. package/dist/telemetry/report-consistency.d.ts +11 -0
  640. package/dist/telemetry/report-consistency.js +111 -0
  641. package/dist/telemetry/report-consistency.js.map +1 -0
  642. package/dist/telemetry/reviewer-delivery.d.ts +39 -0
  643. package/dist/telemetry/reviewer-delivery.js +279 -0
  644. package/dist/telemetry/reviewer-delivery.js.map +1 -0
  645. package/dist/telemetry/reviewer-preflight.d.ts +13 -0
  646. package/dist/telemetry/reviewer-preflight.js +56 -0
  647. package/dist/telemetry/reviewer-preflight.js.map +1 -0
  648. package/dist/telemetry/scrub.d.ts +53 -0
  649. package/dist/telemetry/scrub.js +205 -0
  650. package/dist/telemetry/scrub.js.map +1 -0
  651. package/dist/telemetry/sink.d.ts +212 -0
  652. package/dist/telemetry/sink.js +813 -0
  653. package/dist/telemetry/sink.js.map +1 -0
  654. package/dist/telemetry/terminal-reviewer-delivery.d.ts +18 -0
  655. package/dist/telemetry/terminal-reviewer-delivery.js +27 -0
  656. package/dist/telemetry/terminal-reviewer-delivery.js.map +1 -0
  657. package/dist/telemetry/transient-input.d.ts +2 -0
  658. package/dist/telemetry/transient-input.js +37 -0
  659. package/dist/telemetry/transient-input.js.map +1 -0
  660. package/dist/telemetry/verification.d.ts +9 -0
  661. package/dist/telemetry/verification.js +12 -0
  662. package/dist/telemetry/verification.js.map +1 -0
  663. package/package.json +73 -0
@@ -0,0 +1,208 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { decodeRecoveryOriginal as decodeOriginalReport } from './recovery-json.js';
4
+ import { claimDescriptorSchema } from './claims.js';
5
+ import { instant, object, uuidSchema } from './primitives.js';
6
+ import { isEventReceiptScope, isStoredEventReceipt } from './receipts.js';
7
+ import { validSightingBinding } from './sighting.js';
8
+ export const hash = (raw) => createHash('sha256').update(raw).digest('hex');
9
+ export const key = (v) => typeof v === 'string' && /^[a-f0-9]{16}$/.test(v);
10
+ export const counter = (v) => typeof v === 'number' && Number.isSafeInteger(v) && v >= 0;
11
+ const positive = (v) => counter(v) && v > 0 && v <= 2_147_483_647;
12
+ export function requireSource(valid) { if (!valid)
13
+ throw new Error('occurrence_source_conflict'); }
14
+ export function requireReason(value) {
15
+ requireSource(typeof value === 'string' && value.length <= 4000 && value.trim().length > 0 && [...value].length <= 2000 &&
16
+ !/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/.test(value) && !/[\uD800-\uDFFF]/u.test(value));
17
+ }
18
+ /** Selected receipt content, not authentication or proof of inventory completeness. */
19
+ export function receiptFor(receipt, source) {
20
+ requireSource(isStoredEventReceipt(receipt, source.input.scope) && receipt.converge_target === source.target &&
21
+ receipt.round === source.round);
22
+ const converge = source.input.storedRun.converge;
23
+ if (receipt.attempt !== null)
24
+ requireSource(receipt.attempt === converge.attempt);
25
+ }
26
+ /** Sequence is per run; timestamps retain microseconds and never use client occurred_at for acceptance order. */
27
+ export function before(first, last) {
28
+ requireSource(first.run_id === last.run_id && first.sequence < last.sequence &&
29
+ BigInt(instant(first.received_at)) <= BigInt(instant(last.received_at)));
30
+ }
31
+ /**
32
+ * Bind supplied original bytes to every stored positional finding and selected
33
+ * classification. Unsupported headerless/reversed-range sources refuse; this
34
+ * helper neither normalizes their history nor claims to fetch/authenticate it.
35
+ */
36
+ export function validateOccurrenceSource(input) {
37
+ requireSource(isEventReceiptScope(input.scope) && input.scope.repo.length <= 200 && positive(input.scope.pr_number) &&
38
+ typeof input.reportJson === 'string' && Buffer.byteLength(input.reportJson) <= 64 * 1024 * 1024);
39
+ const decoded = decodeOriginalReport(input.reportJson, { exactNumbers: true, originalProse: 'control-code-units-v1' });
40
+ requireSource(object(decoded.value));
41
+ const report = decoded.value;
42
+ const run = report.run;
43
+ const stored = input.storedRun;
44
+ requireSource(object(run) && object(stored) && run.id === input.scope.run_id && stored.id === run.id &&
45
+ object(run.target) && object(stored.target) && object(run.converge) && object(stored.converge));
46
+ const target = run.target;
47
+ const storedTarget = stored.target;
48
+ const converge = run.converge;
49
+ const storedConverge = stored.converge;
50
+ requireSource(['pr', 'patch'].includes(run.target.kind) && run.target.repo === input.scope.repo &&
51
+ run.target.pr_number === input.scope.pr_number && typeof run.target.head_sha === 'string' &&
52
+ /^[a-f0-9]{40}(?:[a-f0-9]{24})?$/.test(run.target.head_sha) && !/^0+$/.test(run.target.head_sha) &&
53
+ ['kind', 'repo', 'pr_number', 'head_sha', 'base_sha', 'diff_sha256'].every(field => isDeepStrictEqual(target[field] ?? null, storedTarget[field] ?? null)) &&
54
+ ['rcl_version', 'command'].every(field => typeof run[field] === 'string' && run[field] === stored[field]));
55
+ requireSource(typeof run.converge.target === 'string' && run.converge.target.trim() === run.converge.target &&
56
+ run.converge.target.length > 0 && run.converge.target.length <= 500 && positive(run.converge.round) &&
57
+ ['target', 'round', 'attempt'].every(field => isDeepStrictEqual(converge[field] ?? null, storedConverge[field] ?? null)));
58
+ const digest = hash(input.reportJson);
59
+ requireSource(Array.isArray(stored.artifacts));
60
+ const originals = stored.artifacts.filter(a => object(a) && a.kind === 'report_json');
61
+ requireSource(originals.length === 1 && originals[0].declared_sha256 === digest && originals[0].stored === true &&
62
+ originals[0].declared_bytes === Buffer.byteLength(input.reportJson));
63
+ requireSource(Array.isArray(report.findings) && (report.belowThresholdFindings === undefined || Array.isArray(report.belowThresholdFindings)));
64
+ const kept = report.findings;
65
+ const below = report.belowThresholdFindings ?? [];
66
+ requireSource(kept.length + below.length <= 2000);
67
+ const all = [...kept, ...below];
68
+ requireSource(Array.isArray(stored.findings) && stored.findings.length === all.length);
69
+ const storedMembers = new Map();
70
+ for (const member of stored.findings) {
71
+ requireSource(object(member) && typeof member.ref === 'string' && !storedMembers.has(member.ref));
72
+ storedMembers.set(member.ref, member);
73
+ }
74
+ const out = { input, digest, head: run.target.head_sha,
75
+ target: run.converge.target, round: run.converge.round, members: [] };
76
+ receiptFor(input.classification, out);
77
+ requireSource(input.classification.kind === 'round_processed' && Array.isArray(input.classification.payload.identities));
78
+ const payload = input.classification.payload;
79
+ const rows = payload.identities;
80
+ requireSource(rows.length <= 2000);
81
+ const declared = Object.hasOwn(payload, 'classification_version') || Object.hasOwn(payload, 'legacy_pending_identities');
82
+ if (Object.hasOwn(payload, 'report_json_sha256'))
83
+ requireSource(payload.report_json_sha256 === digest);
84
+ if (declared)
85
+ requireSource(payload.classification_version === 1 && payload.report_json_sha256 === digest && rows.length === all.length);
86
+ if (Object.hasOwn(payload, 'legacy_pending_identities')) {
87
+ const ids = payload.legacy_pending_identities;
88
+ requireSource(Array.isArray(ids) && ids.length > 0 && ids.length <= 2000 && ids.every(key) &&
89
+ isDeepStrictEqual(ids, [...new Set(ids)].sort()));
90
+ }
91
+ const occurrenceCounts = new Map();
92
+ for (const raw of all) {
93
+ requireSource(object(raw) && typeof raw.identity === 'string');
94
+ occurrenceCounts.set(raw.identity, (occurrenceCounts.get(raw.identity) ?? 0) + 1);
95
+ }
96
+ const boundMappings = new Map();
97
+ const unboundMappings = new Map();
98
+ for (const [order, row] of rows.entries()) {
99
+ requireSource(object(row) && typeof row.identity_key === 'string' && key(row.matched_identity) &&
100
+ ['new', 'repeat', 'suppressed', 'regating'].includes(row.status) &&
101
+ occurrenceCounts.has(row.identity_key));
102
+ const bound = declared || ['version', 'finding_ref', 'report_json_sha256'].some(field => Object.hasOwn(row, field));
103
+ if (bound) {
104
+ requireSource(validSightingBinding(row) && Object.hasOwn(row, 'pending_round') &&
105
+ (row.pending_round === null || positive(row.pending_round) && row.pending_round <= out.round));
106
+ const ref = row.finding_ref;
107
+ const index = Number(ref.slice(1)) - 1;
108
+ requireSource(Number.isSafeInteger(index) && ref === `f${String(index + 1).padStart(3, '0')}` && !boundMappings.has(ref) &&
109
+ object(all[index]) && row.identity_key === all[index].identity && row.report_json_sha256 === digest &&
110
+ isDeepStrictEqual(row.claim_descriptor, all[index].claimDescriptor));
111
+ boundMappings.set(ref, { row, order });
112
+ }
113
+ else {
114
+ const group = unboundMappings.get(row.identity_key);
115
+ if (group) {
116
+ if (group.identity !== row.matched_identity)
117
+ group.identity = undefined;
118
+ group.hasDescriptor ||= row.claim_descriptor !== undefined;
119
+ group.descriptorsAgree &&= isDeepStrictEqual(group.row.claim_descriptor, row.claim_descriptor);
120
+ group.statusesAgree &&= group.row.status === row.status;
121
+ }
122
+ else {
123
+ unboundMappings.set(row.identity_key, { row, order, identity: row.matched_identity,
124
+ hasDescriptor: row.claim_descriptor !== undefined, descriptorsAgree: true, statusesAgree: true });
125
+ }
126
+ }
127
+ }
128
+ for (const [index, raw] of all.entries()) {
129
+ const ref = `f${String(index + 1).padStart(3, '0')}`;
130
+ const member = storedMembers.get(ref);
131
+ requireSource(object(raw) && member && typeof raw.identity === 'string' && raw.identity.length > 0 && raw.identity.length <= 64 &&
132
+ typeof raw.file === 'string' && typeof raw.category === 'string' && counter(raw.startLine) && counter(raw.endLine) && raw.startLine <= raw.endLine &&
133
+ ['critical', 'important', 'minor', 'nitpick'].includes(raw.severity) &&
134
+ (raw.gating === undefined || object(raw.gating) && typeof raw.gating.reason === 'string'));
135
+ const gating = object(raw.gating) ? raw.gating : {};
136
+ requireSource(member.identity_key === raw.identity && member.file === raw.file && member.category === raw.category &&
137
+ member.start_line === raw.startLine && member.end_line === raw.endLine && member.severity === raw.severity &&
138
+ member.below_threshold === (index >= kept.length) && member.gating_reason === (gating.reason ?? 'none') &&
139
+ member.verification_verdict === (object(gating.verification) ? gating.verification.verdict ?? null : null) &&
140
+ Object.hasOwn(member, 'claim_descriptor') && isDeepStrictEqual(member.claim_descriptor, raw.claimDescriptor ?? null));
141
+ if (raw.claimDescriptor !== undefined)
142
+ requireSource(claimDescriptorSchema.safeParse(raw.claimDescriptor).success);
143
+ const bound = boundMappings.get(ref);
144
+ const unbound = unboundMappings.get(raw.identity);
145
+ // Preserve the first receipt row while summarizing duplicate unbound rows
146
+ // once, so shared report identities do not require repeated receipt scans.
147
+ const mapping = !bound ? unbound?.row : !unbound || bound.order < unbound.order ? bound.row : unbound.row;
148
+ const ambiguous = unbound && (occurrenceCounts.get(raw.identity) > 1 || unbound.identity === undefined ||
149
+ bound && bound.row.matched_identity !== unbound.identity);
150
+ // A single association cannot inherit whichever contradictory status was
151
+ // listed first. An identity-only correction cannot settle that conflict.
152
+ if (unbound && !ambiguous)
153
+ requireSource(unbound.statusesAgree &&
154
+ (!bound || bound.row.status === unbound.row.status));
155
+ const unresolvedReason = mapping === undefined ? 'classification-unavailable' :
156
+ ambiguous ? 'classification-ambiguous' : undefined;
157
+ // Released unmarked classifications may cover kept findings only. Preserve
158
+ // every original appendix member without inventing its native association.
159
+ // Declared snapshots, in contrast, promise complete positional membership.
160
+ requireSource(!declared || unresolvedReason === undefined);
161
+ if (unbound?.hasDescriptor || bound?.row.claim_descriptor !== undefined)
162
+ requireSource((!unbound || unbound.descriptorsAgree && isDeepStrictEqual(unbound.row.claim_descriptor, raw.claimDescriptor)) &&
163
+ (!bound || isDeepStrictEqual(bound.row.claim_descriptor, raw.claimDescriptor)));
164
+ const statusesAgree = !unbound || unbound.statusesAgree && (!bound || bound.row.status === unbound.row.status);
165
+ const classificationStanding = statusesAgree && !ambiguous && mapping ?
166
+ { kind: 'known', status: mapping.status } :
167
+ statusesAgree && unbound ? { kind: 'known', status: unbound.row.status } :
168
+ { kind: 'unknown' };
169
+ out.members.push({ ref, raw, stored: member, classificationStanding,
170
+ ...(unresolvedReason ? { unresolvedReason } : { mapping: mapping, identity: mapping.matched_identity }),
171
+ severity: raw.severity, gating: index >= kept.length ? 'none' : (gating.reason ??
172
+ (['critical', 'important'].includes(raw.severity) ? 'legacy-blocking' : 'none')) });
173
+ }
174
+ requireSource(Array.isArray(input.corrections) && input.corrections.length <= all.length);
175
+ const corrected = new Set();
176
+ const ids = new Set([input.classification.id]);
177
+ for (const receipt of input.corrections) {
178
+ receiptFor(receipt, out);
179
+ before(input.classification, receipt);
180
+ const p = receipt.payload;
181
+ const member = out.members.find(m => m.ref === p.finding_ref);
182
+ requireSource(receipt.kind === 'finding_identity_corrected' && uuidSchema.safeParse(receipt.actor_user_id).success &&
183
+ !ids.has(receipt.id) && member && !corrected.has(member.ref) && p.report_json_sha256 === digest &&
184
+ p.identity_key === member.raw.identity && key(p.matched_identity));
185
+ for (const [field, expected] of Object.entries({ org_id: input.scope.org_id, repo: input.scope.repo,
186
+ pr_number: input.scope.pr_number, head_sha: out.head })) {
187
+ requireSource(p[field] === expected);
188
+ }
189
+ member.identity = p.matched_identity;
190
+ member.correction = receipt;
191
+ delete member.unresolvedReason;
192
+ corrected.add(member.ref);
193
+ ids.add(receipt.id);
194
+ }
195
+ return out;
196
+ }
197
+ export function contextFor(context, source, actor) {
198
+ requireSource(isDeepStrictEqual(context.scope, source.input.scope) && context.target === source.target && context.round === source.round &&
199
+ context.headSha === source.head && context.reportSha256 === source.digest && counter(context.eventSequence) &&
200
+ uuidSchema.safeParse(actor).success && context.actorUserId === actor);
201
+ for (const receipt of [source.input.classification, ...source.input.corrections])
202
+ requireSource(receipt.sequence <= context.eventSequence);
203
+ }
204
+ export function sameTarget(a, b) {
205
+ requireSource(a.input.scope.base_url === b.input.scope.base_url && a.input.scope.org_id === b.input.scope.org_id &&
206
+ a.input.scope.repo.toLowerCase() === b.input.scope.repo.toLowerCase() && a.input.scope.pr_number === b.input.scope.pr_number && a.target === b.target);
207
+ }
208
+ //# sourceMappingURL=occurrence-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occurrence-source.js","sourceRoot":"","sources":["../../../../src/evidence/claim-recovery/validation/occurrence-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { ClaimSplitInput } from './claim-split.js';
2
+ import type { RetainedNativeEvidence } from './native-state.js';
3
+ import type { EventReceiptScope, StoredEventReceipt } from './receipts.js';
4
+ /** Supplied read results; content validation does not authenticate their transport. */
5
+ export interface OccurrenceSource {
6
+ scope: EventReceiptScope;
7
+ reportJson: string;
8
+ storedRun: Record<string, unknown>;
9
+ classification: StoredEventReceipt;
10
+ corrections: StoredEventReceipt[];
11
+ }
12
+ /** Pin the selection alongside the result of a fresh current-actor/context read. */
13
+ export interface OccurrenceContext {
14
+ scope: EventReceiptScope;
15
+ target: string;
16
+ round: number;
17
+ headSha: string;
18
+ reportSha256: string;
19
+ actorUserId: string;
20
+ eventSequence: number;
21
+ }
22
+ export interface AcceptedSplitEvidence {
23
+ selection: ClaimSplitInput;
24
+ receipt: StoredEventReceipt;
25
+ actorUserId: string;
26
+ native: RetainedNativeEvidence;
27
+ source: OccurrenceSource;
28
+ }
29
+ interface Preparation {
30
+ eventId: string;
31
+ occurredAt: string;
32
+ /** Pinned current operator, distinct from historical classification/split actors. */
33
+ actorUserId: string;
34
+ split: AcceptedSplitEvidence;
35
+ sourceContext: OccurrenceContext;
36
+ }
37
+ export interface ObligationTransferInput extends Preparation {
38
+ carrier: OccurrenceSource;
39
+ carrierContext: OccurrenceContext;
40
+ carrierKind: 'classified_group' | 'legacy_pending';
41
+ carrierIdentity: string;
42
+ reason: string;
43
+ }
44
+ export type ClaimSeverity = 'critical' | 'important' | 'minor' | 'nitpick';
45
+ export interface ClaimDispositionInput extends Preparation {
46
+ mode: 'fresh' | 'preserved';
47
+ verdict: 'fixed' | 'dismissed';
48
+ severity: ClaimSeverity;
49
+ reason: string;
50
+ /** A server CAS precondition; this supplied view cannot prove no newer decision exists. */
51
+ previousDispositionEventId: string | null;
52
+ previousDisposition?: StoredEventReceipt;
53
+ /** Exact later classified batches; never an asserted effective severity alone.
54
+ * The authoritative backend still checks history not present in this selection. */
55
+ laterSources?: OccurrenceSource[];
56
+ originalVerdict?: StoredEventReceipt;
57
+ originalVerdictActorUserId?: string;
58
+ }
59
+ export interface RecoveryOccurrenceEvent {
60
+ id: string;
61
+ kind: 'finding_obligation_transferred' | 'finding_claim_disposition';
62
+ run_id: string;
63
+ converge_target: string;
64
+ round: number;
65
+ occurred_at: string;
66
+ payload: Record<string, unknown>;
67
+ }
68
+ export interface ReceiptAttribution {
69
+ eventId: string;
70
+ actorUserId: string | null;
71
+ occurredAt: string;
72
+ receivedAt: string;
73
+ sequence: number;
74
+ }
75
+ export interface PreparedOccurrenceEvent {
76
+ event: RecoveryOccurrenceEvent;
77
+ qualification: 'content-only';
78
+ assertingActorUserId: string;
79
+ splitAttribution: ReceiptAttribution;
80
+ originalVerdictAttribution?: ReceiptAttribution;
81
+ /** Fresh assertion time cannot exist until the server accepts the event. */
82
+ assertionReceipt: {
83
+ kind: 'pending-server-receipt';
84
+ } | {
85
+ kind: 'preserved';
86
+ receipt: ReceiptAttribution;
87
+ };
88
+ /** Only the selected occurrence is transferred; this is never key retirement. */
89
+ coverage: 'one-occurrence';
90
+ /** Unknown mappings stay explicit. Unselected known members are also untouched;
91
+ * this is not a complete carrier residual inventory or a closure assertion. */
92
+ unresolvedMembers: Array<{
93
+ runId: string;
94
+ target: string;
95
+ reportSha256: string;
96
+ findingRef: string;
97
+ reportKey: string;
98
+ reason: 'classification-unavailable' | 'classification-ambiguous';
99
+ }>;
100
+ }
101
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=occurrence-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occurrence-types.js","sourceRoot":"","sources":["../../../../src/evidence/claim-recovery/validation/occurrence-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { type StoredEventReceipt } from './receipts.js';
2
+ import { type OccurrenceMember, type ValidatedOccurrenceSource } from './occurrence-source.js';
3
+ import type { ClaimDispositionInput, ObligationTransferInput, PreparedOccurrenceEvent } from './occurrence-types.js';
4
+ /**
5
+ * Prepare one immutable occurrence transfer. Selected read authenticity, fresh
6
+ * context, source inventory completeness, server CAS/selector uniqueness and
7
+ * physical filesystem qualification remain outer obligations. No prefix
8
+ * closure, key retirement, gate standing or delivery is asserted here.
9
+ */
10
+ export declare function prepareObligationTransfer(input: ObligationTransferInput): PreparedOccurrenceEvent;
11
+ /**
12
+ * Prepare an attributed decision without fabricating its future server receipt.
13
+ * Preserved mode additionally proves exact descriptor equality for the entire
14
+ * original co-key family; bare keys and fuzzy paraphrases are insufficient.
15
+ * This does not confirm a fixed claim or project any native/server obligation.
16
+ */
17
+ export declare function prepareClaimDisposition(input: ClaimDispositionInput): PreparedOccurrenceEvent;
18
+ /** Prove the retained original decision's full subject before any recovery POST.
19
+ * This does not fabricate or predict a split receipt or authorize delivery. */
20
+ export declare function validatePreservedDispositionSubject(input: {
21
+ source: ValidatedOccurrenceSource;
22
+ member: OccurrenceMember;
23
+ descriptor: unknown;
24
+ eventId: string;
25
+ verdict: string;
26
+ severity: string;
27
+ reason: string;
28
+ originalVerdict?: StoredEventReceipt;
29
+ originalVerdictActorUserId?: string;
30
+ }): void;
@@ -0,0 +1,227 @@
1
+ import { prepareClaimSplit } from './claim-split.js';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { matchesPreparedEventReceipt } from './receipts.js';
4
+ import { claimDescriptorSchema } from './claims.js';
5
+ import { validateRetainedNativeEvidence } from './native-state.js';
6
+ import { instant, object, uuidSchema } from './primitives.js';
7
+ import { scrubDeep } from '../../../telemetry/scrub.js';
8
+ import { before, contextFor, counter, key, receiptFor, requireReason, requireSource, sameTarget, validateOccurrenceSource } from './occurrence-source.js';
9
+ function attribution(receipt) {
10
+ return { eventId: receipt.id, actorUserId: receipt.actor_user_id, occurredAt: receipt.occurred_at,
11
+ receivedAt: receipt.received_at, sequence: receipt.sequence };
12
+ }
13
+ function split(input) {
14
+ requireSource(uuidSchema.safeParse(input.eventId).success && uuidSchema.safeParse(input.actorUserId).success);
15
+ instant(input.occurredAt);
16
+ requireReason(input.reason);
17
+ const source = validateOccurrenceSource(input.split.source);
18
+ contextFor(input.sourceContext, source, input.actorUserId);
19
+ const selection = input.split.selection;
20
+ requireSource(isDeepStrictEqual(source.input.scope, selection.scope) && source.input.reportJson === selection.reportJson &&
21
+ selection.target === source.target && selection.classificationId === source.input.classification.id &&
22
+ input.split.native.sourceJson === selection.nativeJson && input.split.native.target === selection.target &&
23
+ isDeepStrictEqual(input.split.native.nativeSourceJsons ?? [], selection.nativeSourceJsons ?? []) &&
24
+ isDeepStrictEqual(input.split.native.recoveryMaterials ?? [], selection.recoveryMaterials ?? []));
25
+ validateRetainedNativeEvidence(input.split.native);
26
+ const prepared = prepareClaimSplit(input.split.selection);
27
+ const member = source.members.find(m => m.ref === selection.findingRef);
28
+ requireSource(member && !member.unresolvedReason && member.identity === selection.previousIdentity &&
29
+ (member.correction?.id ?? null) === (selection.correctionId ?? null));
30
+ const receipts = [source.input.classification, ...(member.correction ? [member.correction] : [])];
31
+ requireSource(isDeepStrictEqual(selection.sourceReceipts, receipts));
32
+ receiptFor(input.split.receipt, source);
33
+ requireSource(matchesPreparedEventReceipt(input.split.receipt, JSON.stringify(prepared.event), selection.scope, input.split.actorUserId) && input.split.receipt.sequence > selection.expectedEventSequence &&
34
+ input.split.receipt.sequence <= input.sourceContext.eventSequence);
35
+ for (const receipt of receipts) {
36
+ requireSource(receipt.sequence <= selection.expectedEventSequence);
37
+ before(receipt, input.split.receipt);
38
+ }
39
+ requireSource(![...source.input.corrections, source.input.classification, input.split.receipt].some(r => r.id === input.eventId));
40
+ return { prepared, source, member };
41
+ }
42
+ function result(input, event, sources) {
43
+ requireSource(isDeepStrictEqual(scrubDeep(event), event));
44
+ const unknown = sources.flatMap(source => source.members.flatMap(member => {
45
+ const reason = member.unresolvedReason ??
46
+ (member.classificationStanding.kind === 'unknown' ? 'classification-ambiguous' : undefined);
47
+ return reason ? [{
48
+ runId: source.input.scope.run_id, target: source.target, reportSha256: source.digest, findingRef: member.ref,
49
+ reportKey: member.raw.identity, reason,
50
+ }] : [];
51
+ }));
52
+ return structuredClone({ event, qualification: 'content-only', coverage: 'one-occurrence', assertingActorUserId: input.actorUserId,
53
+ splitAttribution: attribution(input.split.receipt), assertionReceipt: { kind: 'pending-server-receipt' },
54
+ unresolvedMembers: [...new Map(unknown.map(member => [JSON.stringify(member), member])).values()] });
55
+ }
56
+ /**
57
+ * Prepare one immutable occurrence transfer. Selected read authenticity, fresh
58
+ * context, source inventory completeness, server CAS/selector uniqueness and
59
+ * physical filesystem qualification remain outer obligations. No prefix
60
+ * closure, key retirement, gate standing or delivery is asserted here.
61
+ */
62
+ export function prepareObligationTransfer(input) {
63
+ try {
64
+ return transfer(input);
65
+ }
66
+ catch {
67
+ throw new Error('occurrence_transfer_source_conflict');
68
+ }
69
+ }
70
+ function transfer(input) {
71
+ const { prepared, source: original } = split(input);
72
+ const source = prepared.source;
73
+ const scope = input.carrierContext.scope;
74
+ const carrier = validateOccurrenceSource(input.carrier);
75
+ contextFor(input.carrierContext, carrier, input.actorUserId);
76
+ sameTarget(carrier, original);
77
+ requireSource(key(input.carrierIdentity) && input.carrierIdentity === source.previousIdentity &&
78
+ input.eventId !== carrier.input.classification.id && !carrier.input.corrections.some(r => r.id === input.eventId));
79
+ if (scope.run_id === original.input.scope.run_id) {
80
+ requireSource(isDeepStrictEqual(input.carrierContext, input.sourceContext) && isDeepStrictEqual(input.carrier, input.split.source));
81
+ }
82
+ if (input.carrierKind === 'classified_group') {
83
+ requireSource(scope.run_id === source.runId && carrier.digest === source.reportSha256 &&
84
+ carrier.input.classification.id === input.split.selection.classificationId &&
85
+ carrier.members.some(m => m.ref === source.findingRef && m.identity === input.carrierIdentity));
86
+ }
87
+ else {
88
+ requireSource(input.carrierKind === 'legacy_pending' && carrier.round >= original.round &&
89
+ carrier.input.classification.payload.classification_version === 1 &&
90
+ Array.isArray(carrier.input.classification.payload.legacy_pending_identities) &&
91
+ carrier.input.classification.payload.legacy_pending_identities.includes(input.carrierIdentity));
92
+ }
93
+ const payload = { version: 1, org_id: scope.org_id, repo: scope.repo, pr_number: scope.pr_number,
94
+ head_sha: input.carrierContext.headSha, report_json_sha256: input.carrierContext.reportSha256,
95
+ expected_event_sequence: input.carrierContext.eventSequence,
96
+ carrier: { kind: input.carrierKind, classification_event_id: input.carrier.classification.id, identity_key: input.carrierIdentity },
97
+ source: { run_id: source.runId, round: source.round, head_sha: input.sourceContext.headSha,
98
+ report_json_sha256: source.reportSha256, classification_event_id: input.split.selection.classificationId,
99
+ correction_event_id: input.split.selection.correctionId ?? null, finding_ref: source.findingRef,
100
+ identity_key: source.reportKey, previous_identity: source.previousIdentity },
101
+ split_event_id: input.split.receipt.id, claim_identity: input.split.selection.identity,
102
+ expected_source_event_sequence: input.sourceContext.eventSequence,
103
+ native_evidence: prepared.event.payload.native_evidence, reason: input.reason };
104
+ return result(input, { id: input.eventId, kind: 'finding_obligation_transferred', run_id: scope.run_id,
105
+ converge_target: input.carrierContext.target, round: input.carrierContext.round, occurred_at: input.occurredAt, payload }, [original, carrier]);
106
+ }
107
+ /**
108
+ * Prepare an attributed decision without fabricating its future server receipt.
109
+ * Preserved mode additionally proves exact descriptor equality for the entire
110
+ * original co-key family; bare keys and fuzzy paraphrases are insufficient.
111
+ * This does not confirm a fixed claim or project any native/server obligation.
112
+ */
113
+ export function prepareClaimDisposition(input) {
114
+ try {
115
+ return disposition(input);
116
+ }
117
+ catch {
118
+ throw new Error('occurrence_disposition_source_conflict');
119
+ }
120
+ }
121
+ function disposition(input) {
122
+ const { prepared, source: original, member } = split(input);
123
+ const source = prepared.source;
124
+ const scope = input.sourceContext.scope;
125
+ requireSource(['fresh', 'preserved'].includes(input.mode) && ['fixed', 'dismissed'].includes(input.verdict) &&
126
+ ['critical', 'important', 'minor', 'nitpick'].includes(input.severity));
127
+ const effectiveSeverity = severity(input, original, member);
128
+ requireSource(effectiveSeverity !== 'critical' || input.severity === 'critical');
129
+ previousDisposition(input, original);
130
+ if (input.mode === 'preserved')
131
+ preservedVerdict(input, original, member);
132
+ else
133
+ requireSource(input.originalVerdict === undefined && input.originalVerdictActorUserId === undefined);
134
+ const payload = { version: 1, org_id: scope.org_id, repo: scope.repo, pr_number: scope.pr_number,
135
+ head_sha: input.sourceContext.headSha, report_json_sha256: source.reportSha256, expected_event_sequence: input.sourceContext.eventSequence,
136
+ finding_ref: source.findingRef, identity_key: source.reportKey, split_event_id: input.split.receipt.id,
137
+ claim_identity: input.split.selection.identity, previous_disposition_event_id: input.previousDispositionEventId,
138
+ mode: input.mode, verdict: input.verdict, severity: input.severity, reason: input.reason,
139
+ ...(input.mode === 'preserved' ? { original_verdict: { run_id: source.runId, event_id: input.originalVerdict.id,
140
+ identity_key: source.previousIdentity, classification_event_id: input.split.selection.classificationId,
141
+ report_json_sha256: source.reportSha256, finding_ref: source.findingRef } } : {}) };
142
+ const out = result(input, { id: input.eventId, kind: 'finding_claim_disposition', run_id: scope.run_id,
143
+ converge_target: source.target, round: source.round, occurred_at: input.occurredAt, payload }, [original]);
144
+ if (input.mode === 'preserved') {
145
+ out.originalVerdictAttribution = attribution(input.originalVerdict);
146
+ out.assertionReceipt = { kind: 'preserved', receipt: out.originalVerdictAttribution };
147
+ }
148
+ return out;
149
+ }
150
+ function severity(input, source, member) {
151
+ let effective = member.severity;
152
+ const batches = (input.laterSources ?? []).map(validateOccurrenceSource).sort((a, b) => a.round - b.round);
153
+ const rounds = new Set();
154
+ for (const batch of batches) {
155
+ sameTarget(source, batch);
156
+ requireSource(batch.round > source.round && !rounds.has(batch.round) &&
157
+ batch.input.scope.run_id !== source.input.scope.run_id && batch.input.classification.payload.classification_version === 1 &&
158
+ BigInt(instant(batch.input.classification.received_at)) >= BigInt(instant(input.split.receipt.received_at)));
159
+ rounds.add(batch.round);
160
+ const sightings = batch.members.filter(m => m.identity === input.split.selection.identity);
161
+ requireSource(sightings.length > 0 && sightings.every(m => isDeepStrictEqual(m.raw.claimDescriptor, input.split.selection.descriptor)));
162
+ const gated = sightings.filter(m => m.gating !== 'none');
163
+ if (gated.length)
164
+ effective = ['critical', 'important', 'minor', 'nitpick'].find(s => gated.some(m => m.severity === s));
165
+ }
166
+ return effective;
167
+ }
168
+ function previousDisposition(input, source) {
169
+ if (input.previousDispositionEventId === null) {
170
+ requireSource(input.previousDisposition === undefined);
171
+ return;
172
+ }
173
+ const receipt = input.previousDisposition;
174
+ requireSource(uuidSchema.safeParse(input.previousDispositionEventId).success && receipt &&
175
+ receipt.id === input.previousDispositionEventId && receipt.id !== input.eventId && uuidSchema.safeParse(receipt.actor_user_id).success);
176
+ receiptFor(receipt, source);
177
+ before(input.split.receipt, receipt);
178
+ const p = receipt.payload;
179
+ requireSource(receipt.sequence <= input.sourceContext.eventSequence && receipt.kind === 'finding_claim_disposition' &&
180
+ p.version === 1 && p.org_id === source.input.scope.org_id && p.repo === source.input.scope.repo &&
181
+ p.pr_number === source.input.scope.pr_number && p.head_sha === source.head && p.report_json_sha256 === source.digest &&
182
+ p.finding_ref === input.split.selection.findingRef && p.identity_key === input.split.receipt.payload.identity_key &&
183
+ p.split_event_id === input.split.receipt.id && p.claim_identity === input.split.selection.identity &&
184
+ ['fresh', 'preserved'].includes(p.mode) && ['fixed', 'dismissed'].includes(p.verdict) &&
185
+ ['critical', 'important', 'minor', 'nitpick'].includes(p.severity) && counter(p.expected_event_sequence) &&
186
+ p.expected_event_sequence < receipt.sequence);
187
+ requireReason(p.reason);
188
+ }
189
+ function preservedVerdict(input, source, member) {
190
+ requireSource(input.originalVerdict);
191
+ before(input.originalVerdict, input.split.receipt);
192
+ validatePreservedDispositionSubject({ source, member, descriptor: input.split.selection.descriptor, eventId: input.eventId,
193
+ verdict: input.verdict, severity: input.severity, reason: input.reason, originalVerdict: input.originalVerdict,
194
+ originalVerdictActorUserId: input.originalVerdictActorUserId });
195
+ }
196
+ /** Prove the retained original decision's full subject before any recovery POST.
197
+ * This does not fabricate or predict a split receipt or authorize delivery. */
198
+ export function validatePreservedDispositionSubject(input) {
199
+ const { source, member } = input;
200
+ const receipt = input.originalVerdict;
201
+ requireSource(receipt && uuidSchema.safeParse(input.originalVerdictActorUserId).success &&
202
+ receipt.actor_user_id === input.originalVerdictActorUserId && receipt.id !== input.eventId);
203
+ receiptFor(receipt, source);
204
+ before(source.input.classification, receipt);
205
+ // A correction after the decision cannot retroactively establish its subject.
206
+ // Include every original co-key member even if a supplied later correction
207
+ // moved a sibling away. A narrowed current map cannot erase verdict history.
208
+ requireSource(source.members.every(m => !m.unresolvedReason));
209
+ const family = source.members.filter(m => m.identity === member.identity || m.mapping?.matched_identity === member.identity);
210
+ requireSource(family.length > 0);
211
+ for (const sibling of family) {
212
+ if (sibling.correction)
213
+ before(sibling.correction, receipt);
214
+ requireSource(claimDescriptorSchema.safeParse(sibling.raw.claimDescriptor).success &&
215
+ isDeepStrictEqual(sibling.raw.claimDescriptor, sibling.stored.claim_descriptor) &&
216
+ (!sibling.mapping || isDeepStrictEqual(sibling.raw.claimDescriptor, sibling.mapping.claim_descriptor)) &&
217
+ isDeepStrictEqual(sibling.raw.claimDescriptor, input.descriptor));
218
+ }
219
+ requireSource(receipt.kind === 'verdicts_recorded' && Array.isArray(receipt.payload.verdicts));
220
+ const entries = receipt.payload.verdicts;
221
+ requireSource(entries.every(e => object(e) && key(e.identity_key)) &&
222
+ new Set(entries.map(e => e.identity_key)).size === entries.length);
223
+ const verdicts = entries.filter(v => v.identity_key === member.identity);
224
+ requireSource(verdicts.length === 1 && verdicts[0].verdict === input.verdict && verdicts[0].severity === input.severity &&
225
+ verdicts[0].reason === input.reason && (family.every(m => m.gating === 'none' || m.severity !== 'critical') || input.severity === 'critical'));
226
+ }
227
+ //# sourceMappingURL=occurrence.js.map