@sourcey/catalog-verifier 1.0.0 → 1.1.0

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 (342) hide show
  1. package/README.md +1 -1
  2. package/SBOM.cdx.json +3 -3
  3. package/SOURCEY-CLOSURE.json +697 -217
  4. package/SOURCEY-LICENSE-POLICY.json +19 -1
  5. package/SOURCEY-TOOLCHAIN.json +1 -1
  6. package/THIRD_PARTY_NOTICES.json +1 -1
  7. package/dist/contracts/agent-readiness/src/declaration.d.ts +30 -30
  8. package/dist/contracts/agent-readiness/src/index.d.ts +82 -74
  9. package/dist/contracts/agent-readiness/src/index.d.ts.map +1 -1
  10. package/dist/contracts/agent-readiness/src/index.js +29 -8
  11. package/dist/contracts/agent-readiness/src/index.js.map +1 -1
  12. package/dist/contracts/agent-readiness/src/method-pack.d.ts +1 -0
  13. package/dist/contracts/agent-readiness/src/method-pack.d.ts.map +1 -1
  14. package/dist/contracts/agent-readiness/src/method-pack.js.map +1 -1
  15. package/dist/contracts/api/src/index.d.ts +11602 -6013
  16. package/dist/contracts/api/src/index.d.ts.map +1 -1
  17. package/dist/contracts/api/src/index.js +156 -16
  18. package/dist/contracts/api/src/index.js.map +1 -1
  19. package/dist/contracts/artifact/src/index.d.ts +114 -64
  20. package/dist/contracts/artifact/src/index.d.ts.map +1 -1
  21. package/dist/contracts/artifact/src/index.js +15 -4
  22. package/dist/contracts/artifact/src/index.js.map +1 -1
  23. package/dist/contracts/assets/src/index.d.ts +30 -0
  24. package/dist/contracts/assets/src/index.d.ts.map +1 -1
  25. package/dist/contracts/assets/src/index.js +16 -0
  26. package/dist/contracts/assets/src/index.js.map +1 -1
  27. package/dist/contracts/assurance/src/index.d.ts +149 -0
  28. package/dist/contracts/assurance/src/index.d.ts.map +1 -0
  29. package/dist/contracts/assurance/src/index.js +146 -0
  30. package/dist/contracts/assurance/src/index.js.map +1 -0
  31. package/dist/contracts/authoring/src/index.d.ts.map +1 -1
  32. package/dist/contracts/authoring/src/index.js +9 -1
  33. package/dist/contracts/authoring/src/index.js.map +1 -1
  34. package/dist/contracts/billing/src/index.d.ts +54 -0
  35. package/dist/contracts/billing/src/index.d.ts.map +1 -1
  36. package/dist/contracts/billing/src/index.js +77 -11
  37. package/dist/contracts/billing/src/index.js.map +1 -1
  38. package/dist/contracts/catalog-verifier/src/index.d.ts +49 -0
  39. package/dist/contracts/catalog-verifier/src/index.d.ts.map +1 -1
  40. package/dist/contracts/catalog-verifier/src/index.js +31 -3
  41. package/dist/contracts/catalog-verifier/src/index.js.map +1 -1
  42. package/dist/contracts/commercial-work/src/index.d.ts +1330 -392
  43. package/dist/contracts/commercial-work/src/index.d.ts.map +1 -1
  44. package/dist/contracts/commercial-work/src/index.js +554 -111
  45. package/dist/contracts/commercial-work/src/index.js.map +1 -1
  46. package/dist/contracts/datasets/src/index.d.ts +762 -0
  47. package/dist/contracts/datasets/src/index.d.ts.map +1 -0
  48. package/dist/contracts/datasets/src/index.js +80 -0
  49. package/dist/contracts/datasets/src/index.js.map +1 -0
  50. package/dist/contracts/events/src/index.d.ts +67 -56
  51. package/dist/contracts/events/src/index.d.ts.map +1 -1
  52. package/dist/contracts/events/src/index.js +100 -53
  53. package/dist/contracts/events/src/index.js.map +1 -1
  54. package/dist/contracts/evidence/src/index.d.ts +4 -0
  55. package/dist/contracts/evidence/src/index.d.ts.map +1 -1
  56. package/dist/contracts/evidence/src/index.js +1 -0
  57. package/dist/contracts/evidence/src/index.js.map +1 -1
  58. package/dist/contracts/funded-work/src/index.d.ts +2 -2
  59. package/dist/contracts/funded-work/src/index.js +1 -1
  60. package/dist/contracts/funded-work/src/index.js.map +1 -1
  61. package/dist/contracts/observations/src/index.d.ts +2 -2
  62. package/dist/contracts/observations/src/index.d.ts.map +1 -1
  63. package/dist/contracts/observations/src/index.js +2 -2
  64. package/dist/contracts/observations/src/index.js.map +1 -1
  65. package/dist/contracts/policies/src/index.d.ts.map +1 -1
  66. package/dist/contracts/policies/src/index.js +3 -0
  67. package/dist/contracts/policies/src/index.js.map +1 -1
  68. package/dist/contracts/publication/src/index.d.ts +2472 -7
  69. package/dist/contracts/publication/src/index.d.ts.map +1 -1
  70. package/dist/contracts/publication/src/index.js +73 -5
  71. package/dist/contracts/publication/src/index.js.map +1 -1
  72. package/dist/contracts/release/src/index.d.ts +109 -42
  73. package/dist/contracts/release/src/index.d.ts.map +1 -1
  74. package/dist/contracts/release/src/index.js +49 -1
  75. package/dist/contracts/release/src/index.js.map +1 -1
  76. package/dist/contracts/revisions/src/index.d.ts +16 -0
  77. package/dist/contracts/revisions/src/index.d.ts.map +1 -1
  78. package/dist/contracts/revisions/src/index.js +49 -1
  79. package/dist/contracts/revisions/src/index.js.map +1 -1
  80. package/dist/contracts/routes/src/index.d.ts +66 -0
  81. package/dist/contracts/routes/src/index.d.ts.map +1 -1
  82. package/dist/contracts/routes/src/index.js +102 -4
  83. package/dist/contracts/routes/src/index.js.map +1 -1
  84. package/dist/contracts/routes/src/public-route-allocations.generated.d.ts +1 -1
  85. package/dist/contracts/routes/src/public-route-allocations.generated.d.ts.map +1 -1
  86. package/dist/contracts/routes/src/public-route-allocations.generated.js +3 -0
  87. package/dist/contracts/routes/src/public-route-allocations.generated.js.map +1 -1
  88. package/dist/modules/agent-readiness-policy/src/current-policy-metrics.js +2 -2
  89. package/dist/modules/agent-readiness-policy/src/current-policy-metrics.js.map +1 -1
  90. package/dist/modules/agent-readiness-policy/src/current-policy-validation.d.ts +4 -0
  91. package/dist/modules/agent-readiness-policy/src/current-policy-validation.d.ts.map +1 -0
  92. package/dist/modules/agent-readiness-policy/src/current-policy-validation.js +11 -0
  93. package/dist/modules/agent-readiness-policy/src/current-policy-validation.js.map +1 -0
  94. package/dist/modules/agent-readiness-policy/src/current-policy.d.ts.map +1 -1
  95. package/dist/modules/agent-readiness-policy/src/current-policy.js +10 -15
  96. package/dist/modules/agent-readiness-policy/src/current-policy.js.map +1 -1
  97. package/dist/modules/agent-readiness-policy/src/grading.js +1 -1
  98. package/dist/modules/agent-readiness-policy/src/impact.d.ts +4 -3
  99. package/dist/modules/agent-readiness-policy/src/impact.d.ts.map +1 -1
  100. package/dist/modules/agent-readiness-policy/src/impact.js +5 -6
  101. package/dist/modules/agent-readiness-policy/src/impact.js.map +1 -1
  102. package/dist/modules/agent-readiness-policy/src/index.d.ts +3 -0
  103. package/dist/modules/agent-readiness-policy/src/index.d.ts.map +1 -1
  104. package/dist/modules/agent-readiness-policy/src/index.js +14 -4
  105. package/dist/modules/agent-readiness-policy/src/index.js.map +1 -1
  106. package/dist/modules/agent-readiness-policy/src/offer-relations.d.ts +6 -0
  107. package/dist/modules/agent-readiness-policy/src/offer-relations.d.ts.map +1 -1
  108. package/dist/modules/agent-readiness-policy/src/offer-relations.js +6 -0
  109. package/dist/modules/agent-readiness-policy/src/offer-relations.js.map +1 -1
  110. package/dist/modules/agent-readiness-policy/src/policy-validation.d.ts +0 -1
  111. package/dist/modules/agent-readiness-policy/src/policy-validation.d.ts.map +1 -1
  112. package/dist/modules/agent-readiness-policy/src/policy-validation.js +3 -23
  113. package/dist/modules/agent-readiness-policy/src/policy-validation.js.map +1 -1
  114. package/dist/modules/agent-readiness-policy/src/standard-mapping.d.ts.map +1 -1
  115. package/dist/modules/agent-readiness-policy/src/standard-mapping.js +2 -1
  116. package/dist/modules/agent-readiness-policy/src/standard-mapping.js.map +1 -1
  117. package/dist/modules/agent-readiness-repository/src/change.js +2 -2
  118. package/dist/modules/agent-readiness-repository/src/change.js.map +1 -1
  119. package/dist/modules/artifact/src/index.d.ts +9 -3
  120. package/dist/modules/artifact/src/index.d.ts.map +1 -1
  121. package/dist/modules/artifact/src/index.js +50 -65
  122. package/dist/modules/artifact/src/index.js.map +1 -1
  123. package/dist/modules/artifact/src/policy-closure.d.ts +12 -0
  124. package/dist/modules/artifact/src/policy-closure.d.ts.map +1 -0
  125. package/dist/modules/artifact/src/policy-closure.js +52 -0
  126. package/dist/modules/artifact/src/policy-closure.js.map +1 -0
  127. package/dist/modules/{release → artifact}/src/release-directory-files.d.ts +2 -0
  128. package/dist/modules/artifact/src/release-directory-files.d.ts.map +1 -0
  129. package/dist/modules/artifact/src/release-directory-files.js +38 -0
  130. package/dist/modules/artifact/src/release-directory-files.js.map +1 -0
  131. package/dist/modules/assets/src/authority-bundle.d.ts +13 -0
  132. package/dist/modules/assets/src/authority-bundle.d.ts.map +1 -1
  133. package/dist/modules/assets/src/authority-bundle.js +38 -9
  134. package/dist/modules/assets/src/authority-bundle.js.map +1 -1
  135. package/dist/modules/assets/src/index.d.ts.map +1 -1
  136. package/dist/modules/assets/src/index.js +13 -4
  137. package/dist/modules/assets/src/index.js.map +1 -1
  138. package/dist/modules/assurance/src/index.d.ts +22 -0
  139. package/dist/modules/assurance/src/index.d.ts.map +1 -0
  140. package/dist/modules/assurance/src/index.js +73 -0
  141. package/dist/modules/assurance/src/index.js.map +1 -0
  142. package/dist/modules/authority/src/index.d.ts +9 -2
  143. package/dist/modules/authority/src/index.d.ts.map +1 -1
  144. package/dist/modules/authority/src/index.js +32 -2
  145. package/dist/modules/authority/src/index.js.map +1 -1
  146. package/dist/modules/authority/src/retained-capture-receipt.d.ts +95 -0
  147. package/dist/modules/authority/src/retained-capture-receipt.d.ts.map +1 -0
  148. package/dist/modules/authority/src/retained-capture-receipt.js +76 -0
  149. package/dist/modules/authority/src/retained-capture-receipt.js.map +1 -0
  150. package/dist/modules/authority-state/src/index.d.ts +1 -1
  151. package/dist/modules/authority-state/src/index.d.ts.map +1 -1
  152. package/dist/modules/authority-state/src/index.js +5 -9
  153. package/dist/modules/authority-state/src/index.js.map +1 -1
  154. package/dist/modules/catalog-admission/src/admission-conflicts.d.ts +60 -16
  155. package/dist/modules/catalog-admission/src/admission-conflicts.d.ts.map +1 -1
  156. package/dist/modules/catalog-admission/src/admission-conflicts.js +95 -40
  157. package/dist/modules/catalog-admission/src/admission-conflicts.js.map +1 -1
  158. package/dist/modules/catalog-admission/src/change-analysis.d.ts +50 -0
  159. package/dist/modules/catalog-admission/src/change-analysis.d.ts.map +1 -0
  160. package/dist/modules/catalog-admission/src/change-analysis.js +113 -0
  161. package/dist/modules/catalog-admission/src/change-analysis.js.map +1 -0
  162. package/dist/modules/catalog-admission/src/index.d.ts +11 -37
  163. package/dist/modules/catalog-admission/src/index.d.ts.map +1 -1
  164. package/dist/modules/catalog-admission/src/index.js +20 -56
  165. package/dist/modules/catalog-admission/src/index.js.map +1 -1
  166. package/dist/modules/catalog-admission/src/machine-admission.d.ts +1215 -0
  167. package/dist/modules/catalog-admission/src/machine-admission.d.ts.map +1 -1
  168. package/dist/modules/catalog-admission/src/machine-admission.js +156 -12
  169. package/dist/modules/catalog-admission/src/machine-admission.js.map +1 -1
  170. package/dist/modules/catalog-admission/src/publication-authorities.d.ts +6 -0
  171. package/dist/modules/catalog-admission/src/publication-authorities.d.ts.map +1 -0
  172. package/dist/modules/catalog-admission/src/publication-authorities.js +28 -0
  173. package/dist/modules/catalog-admission/src/publication-authorities.js.map +1 -0
  174. package/dist/modules/catalog-admission/src/publication-composition.d.ts +421 -0
  175. package/dist/modules/catalog-admission/src/publication-composition.d.ts.map +1 -0
  176. package/dist/modules/catalog-admission/src/publication-composition.js +290 -0
  177. package/dist/modules/catalog-admission/src/publication-composition.js.map +1 -0
  178. package/dist/modules/catalog-admission/src/publication-dependencies.d.ts +25 -1
  179. package/dist/modules/catalog-admission/src/publication-dependencies.d.ts.map +1 -1
  180. package/dist/modules/catalog-admission/src/publication-dependencies.js +31 -1
  181. package/dist/modules/catalog-admission/src/publication-dependencies.js.map +1 -1
  182. package/dist/modules/catalog-admission/src/publication-recomposition.d.ts +2 -2
  183. package/dist/modules/catalog-admission/src/publication-state.d.ts +19 -0
  184. package/dist/modules/catalog-admission/src/publication-state.d.ts.map +1 -0
  185. package/dist/modules/catalog-admission/src/publication-state.js +97 -0
  186. package/dist/modules/catalog-admission/src/publication-state.js.map +1 -0
  187. package/dist/modules/catalog-admission/src/publication.d.ts +26 -24
  188. package/dist/modules/catalog-admission/src/publication.d.ts.map +1 -1
  189. package/dist/modules/catalog-admission/src/publication.js +47 -106
  190. package/dist/modules/catalog-admission/src/publication.js.map +1 -1
  191. package/dist/modules/catalog-admission/src/submission-input.d.ts +44 -0
  192. package/dist/modules/catalog-admission/src/submission-input.d.ts.map +1 -0
  193. package/dist/modules/catalog-admission/src/submission-input.js +174 -0
  194. package/dist/modules/catalog-admission/src/submission-input.js.map +1 -0
  195. package/dist/modules/catalog-admission/src/submission-state.d.ts +9 -0
  196. package/dist/modules/catalog-admission/src/submission-state.d.ts.map +1 -0
  197. package/dist/modules/catalog-admission/src/submission-state.js +24 -0
  198. package/dist/modules/catalog-admission/src/submission-state.js.map +1 -0
  199. package/dist/modules/catalog-admission/src/submission.d.ts +99 -19
  200. package/dist/modules/catalog-admission/src/submission.d.ts.map +1 -1
  201. package/dist/modules/catalog-admission/src/submission.js +160 -111
  202. package/dist/modules/catalog-admission/src/submission.js.map +1 -1
  203. package/dist/modules/catalog-model/src/index.d.ts +10 -0
  204. package/dist/modules/catalog-model/src/index.d.ts.map +1 -1
  205. package/dist/modules/catalog-model/src/index.js +11 -3
  206. package/dist/modules/catalog-model/src/index.js.map +1 -1
  207. package/dist/modules/catalog-query/src/contracts.d.ts +13 -0
  208. package/dist/modules/catalog-query/src/contracts.d.ts.map +1 -0
  209. package/dist/modules/catalog-query/src/contracts.js +13 -0
  210. package/dist/modules/catalog-query/src/contracts.js.map +1 -0
  211. package/dist/modules/catalog-read-port/src/index.d.ts +34 -0
  212. package/dist/modules/catalog-read-port/src/index.d.ts.map +1 -0
  213. package/dist/modules/catalog-read-port/src/index.js +2 -0
  214. package/dist/modules/catalog-read-port/src/index.js.map +1 -0
  215. package/dist/modules/deterministic-release-archive/src/files.d.ts +8 -0
  216. package/dist/modules/deterministic-release-archive/src/files.d.ts.map +1 -0
  217. package/dist/modules/deterministic-release-archive/src/files.js +23 -0
  218. package/dist/modules/deterministic-release-archive/src/files.js.map +1 -0
  219. package/dist/modules/evidence-operations/src/configuration.d.ts +283 -0
  220. package/dist/modules/evidence-operations/src/configuration.d.ts.map +1 -0
  221. package/dist/modules/evidence-operations/src/configuration.js +213 -0
  222. package/dist/modules/evidence-operations/src/configuration.js.map +1 -0
  223. package/dist/modules/evidence-operations/src/evidence-authority.d.ts +2552 -0
  224. package/dist/modules/evidence-operations/src/evidence-authority.d.ts.map +1 -0
  225. package/dist/modules/evidence-operations/src/evidence-authority.js +545 -0
  226. package/dist/modules/evidence-operations/src/evidence-authority.js.map +1 -0
  227. package/dist/modules/evidence-operations/src/evidence-normalization.d.ts +5 -0
  228. package/dist/modules/evidence-operations/src/evidence-normalization.d.ts.map +1 -1
  229. package/dist/modules/evidence-operations/src/evidence-normalization.js +11 -2
  230. package/dist/modules/evidence-operations/src/evidence-normalization.js.map +1 -1
  231. package/dist/modules/evidence-operations/src/proof-graph.d.ts +4 -7
  232. package/dist/modules/evidence-operations/src/proof-graph.d.ts.map +1 -1
  233. package/dist/modules/evidence-operations/src/proof-graph.js +6 -7
  234. package/dist/modules/evidence-operations/src/proof-graph.js.map +1 -1
  235. package/dist/modules/evidence-operations/src/retained-revision.d.ts +6 -0
  236. package/dist/modules/evidence-operations/src/retained-revision.d.ts.map +1 -0
  237. package/dist/modules/evidence-operations/src/retained-revision.js +29 -0
  238. package/dist/modules/evidence-operations/src/retained-revision.js.map +1 -0
  239. package/dist/modules/evidence-operations/src/submission-verifier.d.ts +5 -2
  240. package/dist/modules/evidence-operations/src/submission-verifier.d.ts.map +1 -1
  241. package/dist/modules/evidence-operations/src/submission-verifier.js.map +1 -1
  242. package/dist/modules/git-input/src/index.d.ts +31 -0
  243. package/dist/modules/git-input/src/index.d.ts.map +1 -0
  244. package/dist/modules/git-input/src/index.js +158 -0
  245. package/dist/modules/git-input/src/index.js.map +1 -0
  246. package/dist/modules/policy-identity/src/index.d.ts +7 -0
  247. package/dist/modules/policy-identity/src/index.d.ts.map +1 -0
  248. package/dist/modules/policy-identity/src/index.js +23 -0
  249. package/dist/modules/policy-identity/src/index.js.map +1 -0
  250. package/dist/modules/primitives/src/index.d.ts +2 -0
  251. package/dist/modules/primitives/src/index.d.ts.map +1 -1
  252. package/dist/modules/primitives/src/index.js +20 -2
  253. package/dist/modules/primitives/src/index.js.map +1 -1
  254. package/dist/modules/projection-identity/src/index.d.ts +14 -0
  255. package/dist/modules/projection-identity/src/index.d.ts.map +1 -0
  256. package/dist/modules/projection-identity/src/index.js +23 -0
  257. package/dist/modules/projection-identity/src/index.js.map +1 -0
  258. package/dist/modules/provenance/src/index.d.ts +7 -3
  259. package/dist/modules/provenance/src/index.d.ts.map +1 -1
  260. package/dist/modules/provenance/src/index.js +52 -68
  261. package/dist/modules/provenance/src/index.js.map +1 -1
  262. package/dist/modules/release/src/agent-readiness-publication-inputs.d.ts +12 -0
  263. package/dist/modules/release/src/agent-readiness-publication-inputs.d.ts.map +1 -0
  264. package/dist/modules/release/src/agent-readiness-publication-inputs.js +48 -0
  265. package/dist/modules/release/src/agent-readiness-publication-inputs.js.map +1 -0
  266. package/dist/modules/release/src/agent-readiness-regrade-evidence.d.ts +223 -0
  267. package/dist/modules/release/src/agent-readiness-regrade-evidence.d.ts.map +1 -0
  268. package/dist/modules/release/src/agent-readiness-regrade-evidence.js +192 -0
  269. package/dist/modules/release/src/agent-readiness-regrade-evidence.js.map +1 -0
  270. package/dist/modules/release/src/changes.d.ts.map +1 -1
  271. package/dist/modules/release/src/changes.js +21 -25
  272. package/dist/modules/release/src/changes.js.map +1 -1
  273. package/dist/modules/release/src/evidence-admission.d.ts +59 -0
  274. package/dist/modules/release/src/evidence-admission.d.ts.map +1 -0
  275. package/dist/modules/release/src/evidence-admission.js +539 -0
  276. package/dist/modules/release/src/evidence-admission.js.map +1 -0
  277. package/dist/modules/release/src/evidence-bundle-tree.d.ts +14 -0
  278. package/dist/modules/release/src/evidence-bundle-tree.d.ts.map +1 -0
  279. package/dist/modules/release/src/evidence-bundle-tree.js +58 -0
  280. package/dist/modules/release/src/evidence-bundle-tree.js.map +1 -0
  281. package/dist/modules/release/src/identity.d.ts +4 -4
  282. package/dist/modules/release/src/identity.d.ts.map +1 -1
  283. package/dist/modules/release/src/identity.js +43 -1
  284. package/dist/modules/release/src/identity.js.map +1 -1
  285. package/dist/modules/release/src/inputs.d.ts +15 -7
  286. package/dist/modules/release/src/inputs.d.ts.map +1 -1
  287. package/dist/modules/release/src/inputs.js +15 -21
  288. package/dist/modules/release/src/inputs.js.map +1 -1
  289. package/dist/modules/release/src/publication-authorities.d.ts +267 -0
  290. package/dist/modules/release/src/publication-authorities.d.ts.map +1 -0
  291. package/dist/modules/release/src/publication-authorities.js +56 -0
  292. package/dist/modules/release/src/publication-authorities.js.map +1 -0
  293. package/dist/modules/release/src/publication-inputs.d.ts +2 -6
  294. package/dist/modules/release/src/publication-inputs.d.ts.map +1 -1
  295. package/dist/modules/release/src/publication-inputs.js +29 -15
  296. package/dist/modules/release/src/publication-inputs.js.map +1 -1
  297. package/dist/modules/release/src/publication-parent-guard.d.ts +17 -0
  298. package/dist/modules/release/src/publication-parent-guard.d.ts.map +1 -0
  299. package/dist/modules/release/src/publication-parent-guard.js +18 -0
  300. package/dist/modules/release/src/publication-parent-guard.js.map +1 -0
  301. package/dist/modules/release/src/publication-parent-relations.d.ts +24 -0
  302. package/dist/modules/release/src/publication-parent-relations.d.ts.map +1 -0
  303. package/dist/modules/release/src/publication-parent-relations.js +104 -0
  304. package/dist/modules/release/src/publication-parent-relations.js.map +1 -0
  305. package/dist/modules/release/src/submission-verification.d.ts +20 -0
  306. package/dist/modules/release/src/submission-verification.d.ts.map +1 -0
  307. package/dist/modules/release/src/submission-verification.js +39 -0
  308. package/dist/modules/release/src/submission-verification.js.map +1 -0
  309. package/dist/modules/release/src/transition.d.ts.map +1 -1
  310. package/dist/modules/release/src/transition.js +17 -10
  311. package/dist/modules/release/src/transition.js.map +1 -1
  312. package/dist/modules/release/src/verification-changes.d.ts +6 -0
  313. package/dist/modules/release/src/verification-changes.d.ts.map +1 -0
  314. package/dist/modules/release/src/verification-changes.js +56 -0
  315. package/dist/modules/release/src/verification-changes.js.map +1 -0
  316. package/dist/modules/release/src/verification-policies.d.ts +22 -0
  317. package/dist/modules/release/src/verification-policies.d.ts.map +1 -1
  318. package/dist/modules/release/src/verification-policies.js +6 -0
  319. package/dist/modules/release/src/verification-policies.js.map +1 -1
  320. package/dist/modules/release/src/verification-transitions.d.ts +14 -1
  321. package/dist/modules/release/src/verification-transitions.d.ts.map +1 -1
  322. package/dist/modules/release/src/verification-transitions.js +55 -1
  323. package/dist/modules/release/src/verification-transitions.js.map +1 -1
  324. package/dist/modules/release/src/verifier.d.ts +5 -3
  325. package/dist/modules/release/src/verifier.d.ts.map +1 -1
  326. package/dist/modules/release/src/verifier.js +71 -80
  327. package/dist/modules/release/src/verifier.js.map +1 -1
  328. package/dist/packages/catalog-verifier/src/application.d.ts +2 -0
  329. package/dist/packages/catalog-verifier/src/application.d.ts.map +1 -1
  330. package/dist/packages/catalog-verifier/src/application.js +10 -9
  331. package/dist/packages/catalog-verifier/src/application.js.map +1 -1
  332. package/dist/packages/catalog-verifier/src/index.d.ts +3 -0
  333. package/dist/packages/catalog-verifier/src/index.d.ts.map +1 -1
  334. package/dist/packages/catalog-verifier/src/index.js +3 -0
  335. package/dist/packages/catalog-verifier/src/index.js.map +1 -1
  336. package/dist/packages/catalog-verifier/src/program.d.ts.map +1 -1
  337. package/dist/packages/catalog-verifier/src/program.js +13 -10
  338. package/dist/packages/catalog-verifier/src/program.js.map +1 -1
  339. package/package.json +1 -1
  340. package/dist/modules/release/src/release-directory-files.d.ts.map +0 -1
  341. package/dist/modules/release/src/release-directory-files.js +0 -49
  342. package/dist/modules/release/src/release-directory-files.js.map +0 -1
@@ -1,7 +1,9 @@
1
1
  import { z } from "zod";
2
- import { DIGEST_PATTERN, ENTITY_ID_PATTERN, OFFER_ID_PATTERN, PROGRAM_ID_PATTERN, } from "../../../modules/primitives/src/index.js";
3
- import { commercialOrderProjectionSchema } from "../../billing/src/index.js";
2
+ import { DIGEST_PATTERN, digest, ENTITY_ID_PATTERN, OFFER_ID_PATTERN, PROGRAM_ID_PATTERN, } from "../../../modules/primitives/src/index.js";
3
+ import { entityAssetSubmissionSourceSchema } from "../../assets/src/index.js";
4
+ import { entityIdentityAssuranceSchema, offerTermsAssuranceSchema, } from "../../assurance/src/index.js";
4
5
  import { fundedWorkIntentEnvelopeSchema } from "../../funded-work/src/index.js";
6
+ import { expectedPublicationEntitySchema } from "../../publication/src/index.js";
5
7
  import { catalogAuthoringUrlSchema } from "../../revisions/src/index.js";
6
8
  export * from "../../funded-work/src/index.js";
7
9
  const digestSchema = z.string().regex(DIGEST_PATTERN);
@@ -15,13 +17,21 @@ export const domainNameSchema = z
15
17
  .toLowerCase()
16
18
  .regex(/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/u);
17
19
  export const startupCreditsProductCode = "startup-offer-human-verification";
18
- export const startupCreditsPriceLookupKey = "startup-offer-human-verification-usd-25";
20
+ export const startupCreditsPrice = { currency: "usd", minor_units: 4_900 };
21
+ export const startupCreditsPriceLookupKey = "startup-offer-human-verification-usd-49";
22
+ export const startupCreditsPurchaseDisclosureStatement = "Human verification includes publication of a supportable company record with verified status for a legitimate company. Sourcey cannot publish false, unsafe, conflicting, duplicate, or non-existent company or offer claims. Refunds apply when Sourcey cannot deliver the purchased service or misses the review deadline.";
23
+ const startupCreditsPriceSchema = z
24
+ .object({
25
+ currency: z.literal(startupCreditsPrice.currency),
26
+ minor_units: z.literal(startupCreditsPrice.minor_units),
27
+ })
28
+ .strict();
19
29
  export const startupCreditsServicePolicySchema = z
20
30
  .object({
21
31
  policy_contract: z.literal("sourcey.startup-credits-verification-service-policy/v1alpha1"),
22
32
  product_code: z.literal(startupCreditsProductCode),
23
33
  price_lookup_key: z.literal(startupCreditsPriceLookupKey),
24
- price: z.object({ currency: z.literal("usd"), minor_units: z.literal(2_500) }).strict(),
34
+ price: startupCreditsPriceSchema,
25
35
  service_calendar: z
26
36
  .object({
27
37
  time_zone: z.literal("Australia/Sydney"),
@@ -42,26 +52,39 @@ export const startupCreditsServicePolicySchema = z
42
52
  context.addIssue({ code: "custom", message: "Service holidays must be sorted." });
43
53
  }
44
54
  }),
45
- failed_review_refundable: z.literal(false),
55
+ material_misrepresentation_refundable: z.literal(false),
46
56
  sla_miss_refundable: z.literal(true),
47
57
  sourcey_error_refundable: z.literal(true),
48
- payment_changes_truth_or_admission: z.literal(false),
58
+ payment_authorizes_human_verification: z.literal(true),
59
+ payment_changes_truth: z.literal(false),
49
60
  })
50
61
  .strict();
51
- export const startupCreditsVerificationMethodPolicySchema = z
62
+ export const startupCreditsReviewWorkDefinitionSchema = z
52
63
  .object({
53
- policy_contract: z.literal("sourcey.startup-credits-verification-method/v1alpha1"),
64
+ work_contract: z.literal("sourcey.startup-credits-review-work-definition/v1alpha1"),
54
65
  scope: z.literal("one-entity-one-offer"),
55
- evidence_authority: z.literal("first-party-public-sources"),
56
- reviewer_decides_from_admitted_evidence: z.literal(true),
57
- payment_can_select_findings: z.literal(false),
58
- payment_can_admit_or_publish: z.literal(false),
66
+ passing_results: z
67
+ .object({
68
+ entity_identity: z
69
+ .object({
70
+ status: z.literal("verified"),
71
+ binding: z.literal("identity-epoch"),
72
+ })
73
+ .strict(),
74
+ offer_terms: z
75
+ .object({
76
+ status: z.literal("checked"),
77
+ binding: z.literal("exact-offer-revision"),
78
+ })
79
+ .strict(),
80
+ })
81
+ .strict(),
59
82
  })
60
83
  .strict();
61
84
  export const startupCreditsPurchaseDisclosureSchema = z
62
85
  .object({
63
86
  disclosure_contract: z.literal("sourcey.startup-credits-purchase-disclosure/v1alpha1"),
64
- statement: z.literal("Payment funds one human verification run. It does not buy admission, alter facts or ranking, guarantee a pass, or authorize publication."),
87
+ statement: z.literal(startupCreditsPurchaseDisclosureStatement),
65
88
  })
66
89
  .strict();
67
90
  const startupCreditsPurchasePreviewCoreSchema = z
@@ -70,8 +93,9 @@ const startupCreditsPurchasePreviewCoreSchema = z
70
93
  product_code: z.literal(startupCreditsProductCode),
71
94
  purchase_kind: z.literal("one_off"),
72
95
  price_lookup_key: z.literal(startupCreditsPriceLookupKey),
73
- price: z.object({ currency: z.literal("usd"), minor_units: z.literal(2_500) }).strict(),
96
+ price: startupCreditsPriceSchema,
74
97
  work_scope: z.literal("one-entity-one-offer"),
98
+ passing_results: startupCreditsReviewWorkDefinitionSchema.shape.passing_results,
75
99
  service_level: z
76
100
  .object({
77
101
  starts_after: z.literal("settled-payment"),
@@ -81,7 +105,7 @@ const startupCreditsPurchasePreviewCoreSchema = z
81
105
  .strict(),
82
106
  refunds: z
83
107
  .object({
84
- failed_review_refundable: z.literal(false),
108
+ material_misrepresentation_refundable: z.literal(false),
85
109
  service_level_missed_refundable: z.literal(true),
86
110
  sourcey_error_refundable: z.literal(true),
87
111
  })
@@ -89,9 +113,9 @@ const startupCreditsPurchasePreviewCoreSchema = z
89
113
  disclosure: startupCreditsPurchaseDisclosureSchema.shape.statement,
90
114
  policy_bindings: z
91
115
  .object({
116
+ assurance_method: digestSchema,
92
117
  purchase_disclosure: digestSchema,
93
118
  service: digestSchema,
94
- verification_method: digestSchema,
95
119
  })
96
120
  .strict(),
97
121
  })
@@ -104,7 +128,7 @@ export const standingRouteSchema = z.enum([
104
128
  "repair_required",
105
129
  "temporarily_unavailable",
106
130
  "free_machine_review",
107
- "claim_or_fund",
131
+ "human_verification_required",
108
132
  ]);
109
133
  export const standingPolicySchema = z
110
134
  .object({
@@ -195,9 +219,16 @@ export const standingResultCoreSchema = z
195
219
  export const standingResultSchema = standingResultCoreSchema
196
220
  .safeExtend({ result_digest: digestSchema })
197
221
  .strict();
222
+ export const startupCreditsExistingEntityDraftBaseSchema = z
223
+ .object({
224
+ entity_id: entityIdSchema,
225
+ entity_revision_digest: digestSchema,
226
+ })
227
+ .strict();
198
228
  export const startupCreditsDraftRequestSchema = z
199
229
  .object({
200
230
  standing_result: standingResultSchema,
231
+ existing_entity: startupCreditsExistingEntityDraftBaseSchema.optional(),
201
232
  company: z
202
233
  .object({
203
234
  name: z.string().trim().min(1).max(160),
@@ -234,7 +265,17 @@ export const startupCreditsDraftRequestSchema = z
234
265
  }
235
266
  }),
236
267
  })
237
- .strict();
268
+ .strict()
269
+ .superRefine((request, context) => {
270
+ const existingRoute = request.standing_result.route === "correction_required";
271
+ if (existingRoute !== (request.existing_entity !== undefined)) {
272
+ context.addIssue({
273
+ code: "custom",
274
+ path: ["existing_entity"],
275
+ message: "An existing Entity reference is required only for an exact existing-record draft.",
276
+ });
277
+ }
278
+ });
238
279
  const diagnosticSchema = z
239
280
  .object({
240
281
  code: z.enum(["required", "invalid", "conflict", "ineligible"]),
@@ -257,6 +298,7 @@ export const startupCreditsDraftResultSchema = z.discriminatedUnion("status", [
257
298
  program_id: programIdSchema.optional(),
258
299
  offer_id: offerIdSchema,
259
300
  purchase_preview: startupCreditsPurchasePreviewSchema,
301
+ expected_current_entities: z.array(expectedPublicationEntitySchema).max(1),
260
302
  authoring_file: z
261
303
  .object({
262
304
  path: z.string().regex(/^entities\/[a-z0-9]{1,2}\/[a-z0-9-]+\.yaml$/u),
@@ -268,10 +310,14 @@ export const startupCreditsDraftResultSchema = z.discriminatedUnion("status", [
268
310
  })
269
311
  .strict(),
270
312
  ]);
271
- export const startupCreditsFundedWorkIntentSchema = z
313
+ export const startupCreditsVerificationCaseIdSchema = z.string().regex(/^hvc_[a-f0-9]{64}$/u);
314
+ const startupCreditsNewListingIntentTargetSchema = z
272
315
  .object({
273
- product_intent_contract: z.literal("sourcey.startup-offer-human-verification-intent/v1alpha1"),
274
- billing: fundedWorkIntentEnvelopeSchema,
316
+ kind: z.literal("new_listing"),
317
+ base_release_id: digestSchema,
318
+ entity_id: entityIdSchema,
319
+ program_id: programIdSchema.optional(),
320
+ offer_id: offerIdSchema,
275
321
  submission: z
276
322
  .object({
277
323
  submission_id: z.string().regex(/^sub_[a-f0-9]{64}$/u),
@@ -281,6 +327,39 @@ export const startupCreditsFundedWorkIntentSchema = z
281
327
  .strict(),
282
328
  standing_result: standingResultSchema,
283
329
  authoring_file_digest: digestSchema,
330
+ })
331
+ .strict();
332
+ export const startupCreditsExistingRecordTargetSchema = z
333
+ .object({
334
+ kind: z.literal("existing_record"),
335
+ base_release_id: digestSchema,
336
+ entity_id: entityIdSchema,
337
+ program_id: programIdSchema.optional(),
338
+ entity_revision_digest: digestSchema,
339
+ offer_id: offerIdSchema,
340
+ offer_revision_digest: digestSchema,
341
+ })
342
+ .strict();
343
+ /**
344
+ * Stable customer reference to one admitted Entity and Offer revision.
345
+ *
346
+ * The current Catalog head is deliberately absent: an unrelated release must
347
+ * not invalidate checkout for this exact record. The product resolver adds the
348
+ * current base release only after proving both revision digests still match.
349
+ */
350
+ export const startupCreditsExistingRecordReferenceSchema = startupCreditsExistingRecordTargetSchema
351
+ .omit({ base_release_id: true })
352
+ .strict();
353
+ export const startupCreditsVerificationIntentTargetSchema = z.discriminatedUnion("kind", [
354
+ startupCreditsNewListingIntentTargetSchema,
355
+ startupCreditsExistingRecordTargetSchema,
356
+ ]);
357
+ export const startupCreditsFundedWorkIntentSchema = z
358
+ .object({
359
+ product_intent_contract: z.literal("sourcey.startup-offer-human-verification-intent/v1alpha1"),
360
+ verification_case_id: startupCreditsVerificationCaseIdSchema,
361
+ billing: fundedWorkIntentEnvelopeSchema,
362
+ target: startupCreditsVerificationIntentTargetSchema,
284
363
  purchase_preview_digest: digestSchema,
285
364
  disclosure_digest: digestSchema,
286
365
  product_intent_digest: digestSchema,
@@ -308,21 +387,32 @@ export const startupCreditsFundedWorkIntentSchema = z
308
387
  message: "Startup Credits funded work must remain human verification.",
309
388
  });
310
389
  }
311
- if (intent.billing.eligibility_digest !== intent.standing_result.result_digest) {
390
+ const eligibilityDigest = intent.target.kind === "new_listing"
391
+ ? intent.target.standing_result.result_digest
392
+ : digest(intent.target);
393
+ if (intent.billing.eligibility_digest !== eligibilityDigest) {
312
394
  context.addIssue({
313
395
  code: "custom",
314
396
  path: ["billing", "eligibility_digest"],
315
- message: "The billing eligibility binding must be the exact standing result.",
397
+ message: "The billing eligibility binding must be the exact verification target.",
316
398
  });
317
399
  }
318
400
  const bindings = new Map(intent.billing.policy_bindings.map((binding) => [binding.role, binding.policy_digest]));
319
- if (bindings.get("standing") !== intent.standing_result.policy_digest) {
401
+ if (intent.target.kind === "new_listing" &&
402
+ bindings.get("standing") !== intent.target.standing_result.policy_digest) {
320
403
  context.addIssue({
321
404
  code: "custom",
322
405
  path: ["billing", "policy_bindings"],
323
406
  message: "The standing policy binding must match the exact standing result.",
324
407
  });
325
408
  }
409
+ if (intent.target.kind === "existing_record" && bindings.has("standing")) {
410
+ context.addIssue({
411
+ code: "custom",
412
+ path: ["billing", "policy_bindings"],
413
+ message: "Existing-record verification must not invent a standing-policy binding.",
414
+ });
415
+ }
326
416
  if (bindings.get("purchase-disclosure") !== intent.disclosure_digest) {
327
417
  context.addIssue({
328
418
  code: "custom",
@@ -330,7 +420,7 @@ export const startupCreditsFundedWorkIntentSchema = z
330
420
  message: "The purchase disclosure binding must match the exact product disclosure.",
331
421
  });
332
422
  }
333
- for (const role of ["service", "verification-method"]) {
423
+ for (const role of ["assurance-method", "service"]) {
334
424
  if (bindings.has(role))
335
425
  continue;
336
426
  context.addIssue({
@@ -339,25 +429,412 @@ export const startupCreditsFundedWorkIntentSchema = z
339
429
  message: `The ${role} policy binding is required.`,
340
430
  });
341
431
  }
432
+ if (intent.billing.owner_work_ref !== intent.verification_case_id ||
433
+ intent.billing.base_release_id !== intent.target.base_release_id ||
434
+ intent.billing.subject.entity_id !== intent.target.entity_id ||
435
+ intent.billing.subject.program_id !== intent.target.program_id ||
436
+ intent.billing.subject.offer_id !== intent.target.offer_id) {
437
+ context.addIssue({
438
+ code: "custom",
439
+ path: ["billing"],
440
+ message: "Billing must bind this exact Human Verification case and target.",
441
+ });
442
+ }
443
+ });
444
+ export const startupCreditsCompletedReviewBasisSchema = z
445
+ .object({
446
+ evidence_event_ids: z.array(digestSchema),
447
+ observation_ids: z.array(digestSchema),
448
+ retained_artifact_digests: z.array(digestSchema).default([]),
449
+ })
450
+ .strict()
451
+ .superRefine((basis, context) => {
452
+ if (basis.evidence_event_ids.length +
453
+ basis.observation_ids.length +
454
+ basis.retained_artifact_digests.length ===
455
+ 0) {
456
+ context.addIssue({
457
+ code: "custom",
458
+ message: "A review outcome requires at least one retained evidence or observation ID.",
459
+ });
460
+ }
461
+ for (const [field, values] of Object.entries(basis)) {
462
+ if (new Set(values).size !== values.length ||
463
+ [...values].sort().some((v, i) => v !== values[i])) {
464
+ context.addIssue({
465
+ code: "custom",
466
+ path: [field],
467
+ message: "Review basis IDs must be unique and canonically sorted.",
468
+ });
469
+ }
470
+ }
471
+ });
472
+ export const startupCreditsEntityIdentityFailureReasonSchema = z.enum([
473
+ "identity_mismatch",
474
+ "identity_unresolved",
475
+ "insufficient_evidence",
476
+ ]);
477
+ export const startupCreditsOfferTermsFailureReasonSchema = z.enum([
478
+ "terms_mismatch",
479
+ "source_unavailable",
480
+ "insufficient_evidence",
481
+ ]);
482
+ export const startupCreditsEntityIdentityReviewDecisionSchema = z.discriminatedUnion("status", [
483
+ z
484
+ .object({
485
+ status: z.literal("passed"),
486
+ rationale: z.string().trim().min(1).max(2_000),
487
+ })
488
+ .strict(),
489
+ z
490
+ .object({
491
+ status: z.literal("failed"),
492
+ reason_code: startupCreditsEntityIdentityFailureReasonSchema,
493
+ rationale: z.string().trim().min(1).max(2_000),
494
+ basis: startupCreditsCompletedReviewBasisSchema,
495
+ })
496
+ .strict(),
497
+ ]);
498
+ export const startupCreditsOfferTermsReviewDecisionSchema = z.discriminatedUnion("status", [
499
+ z
500
+ .object({
501
+ status: z.literal("passed"),
502
+ rationale: z.string().trim().min(1).max(2_000),
503
+ })
504
+ .strict(),
505
+ z
506
+ .object({
507
+ status: z.literal("failed"),
508
+ reason_code: startupCreditsOfferTermsFailureReasonSchema,
509
+ rationale: z.string().trim().min(1).max(2_000),
510
+ basis: startupCreditsCompletedReviewBasisSchema,
511
+ })
512
+ .strict(),
513
+ z
514
+ .object({
515
+ status: z.literal("not_evaluated"),
516
+ reason_code: z.literal("identity_unresolved"),
517
+ })
518
+ .strict(),
519
+ ]);
520
+ /** The reviewer records two factual decisions. Their dependency is explicit:
521
+ * Offer terms are skipped exactly when company identity cannot be established. */
522
+ export const startupCreditsReviewDecisionSchema = z
523
+ .object({
524
+ entity_identity: startupCreditsEntityIdentityReviewDecisionSchema,
525
+ offer_terms: startupCreditsOfferTermsReviewDecisionSchema,
526
+ })
527
+ .strict()
528
+ .superRefine((decision, context) => {
529
+ const identityFailed = decision.entity_identity.status === "failed";
530
+ const termsNotEvaluated = decision.offer_terms.status === "not_evaluated";
531
+ if (identityFailed !== termsNotEvaluated) {
532
+ context.addIssue({
533
+ code: "custom",
534
+ path: ["offer_terms", "status"],
535
+ message: "Offer terms may be not evaluated only when Entity identity failed, and identity failure cannot carry an Offer terms decision.",
536
+ });
537
+ }
538
+ });
539
+ const entityIdentityReviewOutcomeSchema = z.discriminatedUnion("status", [
540
+ z
541
+ .object({
542
+ status: z.literal("passed"),
543
+ entity_id: entityIdSchema,
544
+ assurance: entityIdentityAssuranceSchema,
545
+ })
546
+ .strict(),
547
+ z
548
+ .object({
549
+ status: z.literal("reused"),
550
+ entity_id: entityIdSchema,
551
+ assurance: entityIdentityAssuranceSchema,
552
+ })
553
+ .strict(),
554
+ z
555
+ .object({
556
+ status: z.literal("failed"),
557
+ entity_id: entityIdSchema,
558
+ reason_code: startupCreditsEntityIdentityFailureReasonSchema,
559
+ rationale: z.string().trim().min(1).max(2_000),
560
+ basis: startupCreditsCompletedReviewBasisSchema,
561
+ })
562
+ .strict(),
563
+ ]);
564
+ const offerTermsReviewOutcomeSchema = z.discriminatedUnion("status", [
565
+ z
566
+ .object({
567
+ status: z.literal("passed"),
568
+ entity_id: entityIdSchema,
569
+ offer_id: offerIdSchema,
570
+ assurance: offerTermsAssuranceSchema,
571
+ })
572
+ .strict(),
573
+ z
574
+ .object({
575
+ status: z.literal("reused"),
576
+ entity_id: entityIdSchema,
577
+ offer_id: offerIdSchema,
578
+ assurance: offerTermsAssuranceSchema,
579
+ })
580
+ .strict(),
581
+ z
582
+ .object({
583
+ status: z.literal("failed"),
584
+ entity_id: entityIdSchema,
585
+ offer_id: offerIdSchema,
586
+ revision_digest: digestSchema,
587
+ reason_code: startupCreditsOfferTermsFailureReasonSchema,
588
+ rationale: z.string().trim().min(1).max(2_000),
589
+ basis: startupCreditsCompletedReviewBasisSchema,
590
+ })
591
+ .strict(),
592
+ z
593
+ .object({
594
+ status: z.literal("not_evaluated"),
595
+ entity_id: entityIdSchema,
596
+ offer_id: offerIdSchema,
597
+ reason_code: z.literal("identity_unresolved"),
598
+ })
599
+ .strict(),
600
+ ]);
601
+ export const startupCreditsReviewCompletionTargetSchema = z.discriminatedUnion("kind", [
602
+ z
603
+ .object({
604
+ kind: z.literal("new_listing"),
605
+ base_release_id: digestSchema,
606
+ entity_id: entityIdSchema,
607
+ program_id: programIdSchema.optional(),
608
+ offer_id: offerIdSchema,
609
+ submission_id: z.string().regex(/^sub_[a-f0-9]{64}$/u),
610
+ submission_payload_digest: digestSchema,
611
+ })
612
+ .strict(),
613
+ startupCreditsExistingRecordTargetSchema,
614
+ ]);
615
+ export const startupCreditsReviewCompletionReceiptCoreSchema = z
616
+ .object({
617
+ receipt_contract: z.literal("sourcey.startup-credits-review-completion/v1alpha1"),
618
+ order_id: z.string().regex(/^ord_[a-f0-9]{64}$/u),
619
+ funded_work_intent_id: fundedWorkIntentEnvelopeSchema.shape.intent_id,
620
+ funded_work_intent_digest: digestSchema,
621
+ verification_case_id: startupCreditsVerificationCaseIdSchema,
622
+ target: startupCreditsReviewCompletionTargetSchema,
623
+ method_policy_digest: digestSchema,
624
+ reviewer_id: z.string().trim().min(1).max(256),
625
+ reviewed_at: instantSchema,
626
+ readback_release_id: digestSchema,
627
+ work_outcome: z.literal("review_delivered"),
628
+ entity_identity: entityIdentityReviewOutcomeSchema,
629
+ offer_terms: offerTermsReviewOutcomeSchema,
630
+ })
631
+ .strict()
632
+ .superRefine((receipt, context) => {
633
+ if (receipt.entity_identity.entity_id !== receipt.target.entity_id ||
634
+ receipt.offer_terms.entity_id !== receipt.target.entity_id ||
635
+ receipt.offer_terms.offer_id !== receipt.target.offer_id) {
636
+ context.addIssue({
637
+ code: "custom",
638
+ path: ["target"],
639
+ message: "Review outcomes must bind the exact Human Verification target.",
640
+ });
641
+ }
642
+ const identityFailed = receipt.entity_identity.status === "failed";
643
+ const termsNotEvaluated = receipt.offer_terms.status === "not_evaluated";
644
+ if (identityFailed !== termsNotEvaluated) {
645
+ context.addIssue({
646
+ code: "custom",
647
+ path: ["offer_terms", "status"],
648
+ message: "Offer terms may be not evaluated only when Entity identity failed, and identity failure cannot carry an Offer terms decision.",
649
+ });
650
+ }
651
+ if (receipt.entity_identity.status === "passed") {
652
+ if (receipt.entity_identity.assurance.method_policy_digest !== receipt.method_policy_digest ||
653
+ receipt.entity_identity.assurance.verified_at !== receipt.reviewed_at) {
654
+ context.addIssue({
655
+ code: "custom",
656
+ path: ["entity_identity", "assurance"],
657
+ message: "A newly passed Entity identity assurance must use this review method and timestamp.",
658
+ });
659
+ }
660
+ }
661
+ if (receipt.entity_identity.status === "reused" &&
662
+ (receipt.entity_identity.assurance.method_policy_digest !== receipt.method_policy_digest ||
663
+ Date.parse(receipt.entity_identity.assurance.verified_at) > Date.parse(receipt.reviewed_at))) {
664
+ context.addIssue({
665
+ code: "custom",
666
+ path: ["entity_identity", "assurance"],
667
+ message: "A reused Entity identity assurance must use this review method and cannot postdate this review.",
668
+ });
669
+ }
670
+ if (receipt.offer_terms.status === "passed" &&
671
+ (receipt.offer_terms.assurance.method_policy_digest !== receipt.method_policy_digest ||
672
+ receipt.offer_terms.assurance.checked_at !== receipt.reviewed_at)) {
673
+ context.addIssue({
674
+ code: "custom",
675
+ path: ["offer_terms", "assurance"],
676
+ message: "A passed Offer terms assurance must use this review method and timestamp.",
677
+ });
678
+ }
679
+ if (receipt.offer_terms.status === "reused" &&
680
+ (receipt.offer_terms.assurance.method_policy_digest !== receipt.method_policy_digest ||
681
+ Date.parse(receipt.offer_terms.assurance.checked_at) > Date.parse(receipt.reviewed_at))) {
682
+ context.addIssue({
683
+ code: "custom",
684
+ path: ["offer_terms", "assurance"],
685
+ message: "A reused Offer terms assurance must use this review method and cannot postdate this review.",
686
+ });
687
+ }
342
688
  });
689
+ export const startupCreditsReviewCompletionReceiptSchema = startupCreditsReviewCompletionReceiptCoreSchema
690
+ .safeExtend({ receipt_digest: digestSchema })
691
+ .strict();
343
692
  export const startupCreditsReviewRequestIdSchema = z
344
693
  .string()
345
694
  .trim()
346
695
  .regex(/^[A-Za-z0-9_-]{32,128}$/u);
347
- export const startupCreditsReviewRequestSchema = z
696
+ export const startupCreditsEntityIconInputSchema = z
348
697
  .object({
349
- request_id: startupCreditsReviewRequestIdSchema,
698
+ source: entityAssetSubmissionSourceSchema,
699
+ trademark_owner: z.string().trim().min(1).max(240),
700
+ relationship: z.enum(["vendor-representative", "community-contributor"]),
701
+ })
702
+ .strict();
703
+ export const startupCreditsExpectedDraftSchema = z
704
+ .object({
705
+ base_release_id: digestSchema,
706
+ content_digest: digestSchema,
707
+ purchase_preview_digest: digestSchema,
708
+ })
709
+ .strict();
710
+ const startupCreditsNewListingReviewTargetCoreSchema = z
711
+ .object({
712
+ kind: z.literal("new_listing"),
350
713
  draft: startupCreditsDraftRequestSchema,
714
+ entity_icon: startupCreditsEntityIconInputSchema.optional(),
351
715
  })
352
716
  .strict();
717
+ export const startupCreditsExistingRecordReviewTargetSchema = startupCreditsExistingRecordReferenceSchema
718
+ .extend({ expected_purchase_preview_digest: digestSchema })
719
+ .strict();
720
+ export const startupCreditsExistingRecordReviewPreparationRequestSchema = z
721
+ .object({ target: startupCreditsExistingRecordReferenceSchema })
722
+ .strict();
723
+ export const startupCreditsExistingRecordReviewPreparationSchema = z
724
+ .object({
725
+ target: startupCreditsExistingRecordReviewTargetSchema,
726
+ purchase_preview: startupCreditsPurchasePreviewSchema,
727
+ assurance_requirements: z
728
+ .object({
729
+ entity_identity: z.enum(["required", "already_verified"]),
730
+ offer_terms: z.enum(["required", "already_checked"]),
731
+ })
732
+ .strict(),
733
+ })
734
+ .strict();
735
+ export const startupCreditsExistingRecordReviewPreparationResponseSchema = z
736
+ .object({ data: startupCreditsExistingRecordReviewPreparationSchema })
737
+ .strict();
738
+ const startupCreditsX402ReviewTargetSchema = z.discriminatedUnion("kind", [
739
+ startupCreditsNewListingReviewTargetCoreSchema,
740
+ startupCreditsExistingRecordReviewTargetSchema,
741
+ ]);
742
+ const startupCreditsStripeReviewTargetSchema = z.discriminatedUnion("kind", [
743
+ startupCreditsNewListingReviewTargetCoreSchema
744
+ .extend({ expected_draft: startupCreditsExpectedDraftSchema })
745
+ .strict(),
746
+ startupCreditsExistingRecordReviewTargetSchema,
747
+ ]);
748
+ export const startupCreditsReviewTargetSchema = startupCreditsX402ReviewTargetSchema;
749
+ const startupCreditsReviewRequestCoreSchema = z.object({
750
+ request_id: startupCreditsReviewRequestIdSchema,
751
+ });
752
+ export const startupCreditsReviewRequestSchema = z.discriminatedUnion("payment_rail", [
753
+ startupCreditsReviewRequestCoreSchema
754
+ .extend({
755
+ payment_rail: z.literal("x402"),
756
+ target: startupCreditsX402ReviewTargetSchema,
757
+ })
758
+ .strict(),
759
+ startupCreditsReviewRequestCoreSchema
760
+ .extend({
761
+ payment_rail: z.literal("stripe"),
762
+ target: startupCreditsStripeReviewTargetSchema,
763
+ replaces_intent: fundedWorkIntentEnvelopeSchema
764
+ .pick({ intent_id: true, intent_digest: true })
765
+ .optional(),
766
+ })
767
+ .strict(),
768
+ ]);
769
+ export const startupCreditsVerificationPublicStateSchema = z.enum([
770
+ "awaiting_payment",
771
+ "verifying",
772
+ "input_needed",
773
+ "publishing",
774
+ "live",
775
+ "refused",
776
+ ]);
777
+ export const startupCreditsVerificationRequiredInputSchema = z
778
+ .object({
779
+ code: z.enum([
780
+ "domain_control",
781
+ "official_offer_page",
782
+ "company_identity",
783
+ "offer_existence",
784
+ "current_terms",
785
+ "pricing_or_consideration",
786
+ "access_instructions",
787
+ "conflicting_identity",
788
+ "unsupported_material_claim",
789
+ ]),
790
+ path: z.string().startsWith("/"),
791
+ message: z.string().trim().min(1).max(500),
792
+ })
793
+ .strict();
794
+ export const startupCreditsVerificationStatusSchema = z
795
+ .object({
796
+ verification_case_id: startupCreditsVerificationCaseIdSchema,
797
+ state: startupCreditsVerificationPublicStateSchema,
798
+ required_input: z.array(startupCreditsVerificationRequiredInputSchema).max(20),
799
+ decision_ref: digestSchema.nullable(),
800
+ publication_release_id: digestSchema.nullable(),
801
+ public_record_url: z.url({ protocol: /^https$/u }).nullable(),
802
+ updated_at: instantSchema,
803
+ })
804
+ .strict()
805
+ .superRefine((status, context) => {
806
+ if ((status.state === "input_needed") !== status.required_input.length > 0) {
807
+ context.addIssue({
808
+ code: "custom",
809
+ path: ["required_input"],
810
+ message: "Only an input-needed verification may carry required input.",
811
+ });
812
+ }
813
+ if (status.state === "live" &&
814
+ (!status.decision_ref || !status.publication_release_id || !status.public_record_url)) {
815
+ context.addIssue({
816
+ code: "custom",
817
+ path: ["state"],
818
+ message: "A live verification requires its decision and public readback.",
819
+ });
820
+ }
821
+ if (status.publication_release_id && status.state !== "live") {
822
+ context.addIssue({
823
+ code: "custom",
824
+ path: ["publication_release_id"],
825
+ message: "Only a live verification may retain its publication release.",
826
+ });
827
+ }
828
+ });
353
829
  export const startupCreditsReviewResponseSchema = z
354
830
  .object({
355
831
  data: z
356
832
  .object({
357
833
  request_id: startupCreditsReviewRequestIdSchema,
358
- submission_id: z.string().regex(/^sub_[a-f0-9]{64}$/u),
359
- order: commercialOrderProjectionSchema,
834
+ verification: startupCreditsVerificationStatusSchema,
835
+ order_id: z.string().regex(/^ord_[a-f0-9]{64}$/u),
360
836
  status_url: z.url({ protocol: /^https$/u }),
837
+ checkout_url: z.url({ protocol: /^https$/u }).nullable(),
361
838
  })
362
839
  .strict(),
363
840
  })
@@ -380,7 +857,7 @@ export const payableProductDescriptorSchema = z
380
857
  z.string().trim().min(1).max(48),
381
858
  z.string().trim().min(1).max(48),
382
859
  ]),
383
- floor_price: z.object({ currency: z.literal("usd"), minor_units: z.literal(2_500) }).strict(),
860
+ floor_price: startupCreditsPriceSchema,
384
861
  service_policy_url: z.url({ protocol: /^https$/u }),
385
862
  refund_policy_url: z.url({ protocol: /^https$/u }),
386
863
  input_example: startupCreditsReviewRequestSchema,
@@ -398,8 +875,7 @@ export const payableProductDescriptorSchema = z
398
875
  });
399
876
  const exampleDigest = `sha256:${"0".repeat(64)}`;
400
877
  const exampleOrderId = `ord_${"0".repeat(64)}`;
401
- const exampleAttemptId = `pat_${"0".repeat(64)}`;
402
- const exampleSubmissionId = `sub_${"0".repeat(64)}`;
878
+ const exampleVerificationCaseId = `hvc_${"0".repeat(64)}`;
403
879
  const exampleRequestId = `sourcey_example_${"0".repeat(32)}`;
404
880
  export const startupCreditsReviewProductDescriptor = payableProductDescriptorSchema.parse({
405
881
  descriptor_contract: "sourcey.payable-product-descriptor/v1alpha1",
@@ -409,96 +885,63 @@ export const startupCreditsReviewProductDescriptor = payableProductDescriptorSch
409
885
  method: "POST",
410
886
  path: "/v1/startup-credits/reviews",
411
887
  success_status: 202,
412
- service_name: "Sourcey Startup Review",
413
- description: "Submit a startup credit or startup program for evidence-backed human review and receive a durable decision receipt. Payment funds review and never guarantees publication.",
414
- tags: ["startup-credits", "startup-programs", "catalog-listing", "human-review", "sourcey"],
415
- floor_price: { currency: "usd", minor_units: 2_500 },
888
+ service_name: "Sourcey Human Verification",
889
+ description: "Human verification and publication for a startup credit or program with Verified status.",
890
+ tags: ["startup-credits", "startup-programs", "listing", "human-review", "sourcey"],
891
+ floor_price: startupCreditsPrice,
416
892
  service_policy_url: "https://sourcey.com/startup-credits",
417
893
  refund_policy_url: "https://sourcey.com/terms",
418
894
  input_example: {
895
+ payment_rail: "x402",
419
896
  request_id: exampleRequestId,
420
- draft: {
421
- standing_result: {
422
- result_contract: "sourcey.standing-result/v1alpha1",
423
- policy_digest: exampleDigest,
424
- evidence_digest: exampleDigest,
425
- registrable_domain: "example.invalid",
426
- official_source_url: "https://example.invalid/startups",
427
- route: "claim_or_fund",
428
- reasons: ["Inert discovery example."],
429
- evaluated_at: "2026-01-01T00:00:00.000Z",
430
- expires_at: "2026-01-01T01:00:00.000Z",
431
- result_digest: exampleDigest,
432
- },
433
- company: {
434
- name: "Example Company",
435
- domain: "example.invalid",
436
- category: "devtools-other",
437
- summary: "An inert company used only to describe the request contract.",
438
- site_url: "https://example.invalid",
439
- },
440
- offer: {
441
- title: "Example startup program",
442
- summary: "An inert offer used only to describe the request contract.",
443
- benefit: "An inert example benefit.",
444
- eligibility: "An inert example eligibility statement.",
445
- access_method: "form",
446
- access_url: "https://example.invalid/apply",
897
+ target: {
898
+ kind: "new_listing",
899
+ draft: {
900
+ standing_result: {
901
+ result_contract: "sourcey.standing-result/v1alpha1",
902
+ policy_digest: exampleDigest,
903
+ evidence_digest: exampleDigest,
904
+ registrable_domain: "example.invalid",
905
+ official_source_url: "https://example.invalid/startups",
906
+ route: "human_verification_required",
907
+ reasons: ["Inert discovery example."],
908
+ evaluated_at: "2026-01-01T00:00:00.000Z",
909
+ expires_at: "2026-01-01T01:00:00.000Z",
910
+ result_digest: exampleDigest,
911
+ },
912
+ company: {
913
+ name: "Example Company",
914
+ domain: "example.invalid",
915
+ category: "devtools-other",
916
+ summary: "An inert company used only to describe the request contract.",
917
+ site_url: "https://example.invalid",
918
+ },
919
+ offer: {
920
+ title: "Example startup program",
921
+ summary: "An inert offer used only to describe the request contract.",
922
+ benefit: "An inert example benefit.",
923
+ eligibility: "An inert example eligibility statement.",
924
+ access_method: "form",
925
+ access_url: "https://example.invalid/apply",
926
+ },
447
927
  },
448
928
  },
449
929
  },
450
930
  output_example: {
451
931
  data: {
452
932
  request_id: exampleRequestId,
453
- submission_id: exampleSubmissionId,
454
- order: {
455
- order: {
456
- order_contract: "sourcey.commercial-order/v1alpha1",
457
- order_id: exampleOrderId,
458
- actor_ref: `request:${exampleRequestId}`,
459
- product_code: startupCreditsProductCode,
460
- purchase_kind: "one_off",
461
- product_definition_digest: exampleDigest,
462
- funded_work_intent_id: `fwi_${"0".repeat(64)}`,
463
- funded_work_intent_digest: exampleDigest,
464
- owner_work_ref: exampleSubmissionId,
465
- amount: { currency: "usd", minor_units: 2_500 },
466
- payment_state: "paid",
467
- payment_attempt_id: exampleAttemptId,
468
- work_state: "queued",
469
- paid_at: "2026-01-01T00:00:01.000Z",
470
- sla_due_at: "2026-01-06T23:59:59.000+11:00",
471
- refund_reason: null,
472
- refund_requested_at: null,
473
- refunded_at: null,
474
- fulfilment_receipt_digest: null,
475
- failure_receipt_digest: null,
476
- created_at: "2026-01-01T00:00:00.000Z",
477
- updated_at: "2026-01-01T00:00:01.000Z",
478
- },
479
- payment_attempt: {
480
- attempt_contract: "sourcey.payment-attempt/v1alpha1",
481
- attempt_id: exampleAttemptId,
482
- order_id: exampleOrderId,
483
- request_binding_digest: exampleDigest,
484
- amount: { currency: "usd", minor_units: 2_500 },
485
- rail: "x402",
486
- state: "settled",
487
- resource: "https://sourcey.invalid/v1/startup-credits/reviews",
488
- challenge_digest: exampleDigest,
489
- payment_payload_digest: exampleDigest,
490
- payment_requirements_digest: exampleDigest,
491
- payment_ref: "runx:x402-payment:example",
492
- verification_ref: "runx:payment-verification:example",
493
- settlement_ref: "0x0000000000000000000000000000000000000000000000000000000000000000",
494
- payer_ref: "eip155:8453:0x0000000000000000000000000000000000000000",
495
- refund_ref: null,
496
- expires_at: "2026-01-01T01:00:00.000Z",
497
- created_at: "2026-01-01T00:00:00.000Z",
498
- updated_at: "2026-01-01T00:00:01.000Z",
499
- },
933
+ verification: {
934
+ verification_case_id: exampleVerificationCaseId,
935
+ state: "verifying",
936
+ required_input: [],
937
+ decision_ref: null,
938
+ publication_release_id: null,
939
+ public_record_url: null,
940
+ updated_at: "2026-01-01T00:00:01.000Z",
500
941
  },
501
- status_url: `https://sourcey.invalid/account/work/${exampleOrderId}`,
942
+ order_id: exampleOrderId,
943
+ status_url: `https://sourcey.invalid/v1/startup-credits/reviews/${exampleRequestId}`,
944
+ checkout_url: null,
502
945
  },
503
946
  },
504
947
  });