@velum-labs/routekit-eval-setup 1.3.2 → 1.5.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/dist/adapters/authoring-responses-request.d.ts +5 -0
  2. package/dist/adapters/authoring-responses-request.js +38 -0
  3. package/dist/adapters/evaluation-evidence-freshness.d.ts +7 -0
  4. package/dist/adapters/evaluation-evidence-freshness.js +76 -0
  5. package/dist/adapters/git-task-history.d.ts +67 -0
  6. package/dist/adapters/git-task-history.js +171 -0
  7. package/dist/adapters/integrated-repository-history.d.ts +21 -0
  8. package/dist/adapters/integrated-repository-history.js +175 -0
  9. package/dist/adapters/repository-command-diagnostic.d.ts +8 -0
  10. package/dist/adapters/repository-command-diagnostic.js +46 -0
  11. package/dist/adapters/repository-command-evidence.d.ts +13 -0
  12. package/dist/adapters/repository-command-evidence.js +102 -0
  13. package/dist/adapters/repository-command-runner.d.ts +238 -0
  14. package/dist/adapters/repository-command-runner.js +1483 -0
  15. package/dist/adapters/repository-import-context.d.ts +47 -0
  16. package/dist/adapters/repository-import-context.js +469 -0
  17. package/dist/adapters/repository-node-test-reporter.d.ts +3 -0
  18. package/dist/adapters/repository-node-test-reporter.js +27 -0
  19. package/dist/adapters/repository-review-evidence.d.ts +39 -0
  20. package/dist/adapters/repository-review-evidence.js +632 -0
  21. package/dist/adapters/repository-seed-selection.d.ts +7 -0
  22. package/dist/adapters/repository-seed-selection.js +79 -0
  23. package/dist/adapters/repository-solution-edits.d.ts +49 -0
  24. package/dist/adapters/repository-solution-edits.js +136 -0
  25. package/dist/adapters/repository-vitest-phase-adapter.d.ts +8 -0
  26. package/dist/adapters/repository-vitest-phase-adapter.js +310 -0
  27. package/dist/adapters/repository-vitest-reporter.d.ts +24 -0
  28. package/dist/adapters/repository-vitest-reporter.js +314 -0
  29. package/dist/adapters/strict-authoring-schema.d.ts +5 -0
  30. package/dist/adapters/strict-authoring-schema.js +158 -0
  31. package/dist/adapters/test-discovery.d.ts +30 -0
  32. package/dist/adapters/test-discovery.js +124 -0
  33. package/dist/adapters/typescript-repository-index.d.ts +51 -0
  34. package/dist/adapters/typescript-repository-index.js +226 -0
  35. package/dist/agentic-capabilities-protocol.d.ts +1373 -0
  36. package/dist/agentic-capabilities-protocol.js +786 -0
  37. package/dist/case-checkpoint-store.d.ts +29 -0
  38. package/dist/case-checkpoint-store.js +133 -0
  39. package/dist/case-pipeline-protocol-v2.d.ts +184 -0
  40. package/dist/case-pipeline-protocol-v2.js +193 -0
  41. package/dist/case-pipeline-protocol.d.ts +2626 -0
  42. package/dist/case-pipeline-protocol.js +371 -0
  43. package/dist/effect-api.d.ts +74 -10
  44. package/dist/effect-api.js +56 -6
  45. package/dist/errors.d.ts +31 -0
  46. package/dist/errors.js +10 -0
  47. package/dist/eval-capability-execution-envelope.d.ts +64 -0
  48. package/dist/eval-capability-execution-envelope.js +98 -0
  49. package/dist/eval-capability-policy.d.ts +90 -0
  50. package/dist/eval-capability-policy.js +107 -0
  51. package/dist/eval-event-log.d.ts +140 -0
  52. package/dist/eval-event-log.js +220 -0
  53. package/dist/evaluation-authoring-policy.d.ts +18 -0
  54. package/dist/evaluation-authoring-policy.js +19 -0
  55. package/dist/evaluation-authoring-validation.d.ts +22 -0
  56. package/dist/evaluation-authoring-validation.js +72 -0
  57. package/dist/evaluation-evidence.d.ts +20 -0
  58. package/dist/evaluation-evidence.js +319 -0
  59. package/dist/evaluation-grader-calibration-protocol.d.ts +108 -0
  60. package/dist/evaluation-grader-calibration-protocol.js +80 -0
  61. package/dist/evaluation-grader-calibration.d.ts +18 -0
  62. package/dist/evaluation-grader-calibration.js +334 -0
  63. package/dist/evaluation-grading-policy.d.ts +24 -0
  64. package/dist/evaluation-grading-policy.js +54 -0
  65. package/dist/evaluation-proposal-policy.d.ts +4 -0
  66. package/dist/evaluation-proposal-policy.js +91 -0
  67. package/dist/evaluation-source-retrieval.d.ts +68 -0
  68. package/dist/evaluation-source-retrieval.js +513 -0
  69. package/dist/evaluation-structure-policy.d.ts +29 -0
  70. package/dist/evaluation-structure-policy.js +138 -0
  71. package/dist/index.d.ts +124 -17
  72. package/dist/index.js +69 -11
  73. package/dist/inspection.js +2 -3
  74. package/dist/project-artifacts.d.ts +7 -2
  75. package/dist/project-artifacts.js +49 -136
  76. package/dist/project-authoring.d.ts +66 -5
  77. package/dist/project-authoring.js +783 -109
  78. package/dist/project-contracts.d.ts +419 -84
  79. package/dist/project-contracts.js +160 -52
  80. package/dist/project-store.js +2 -1
  81. package/dist/project-workflow.d.ts +5 -4
  82. package/dist/project-workflow.js +154 -35
  83. package/dist/repository-adversary-protocol.d.ts +64 -0
  84. package/dist/repository-adversary-protocol.js +105 -0
  85. package/dist/repository-behavior-protocol.d.ts +188 -0
  86. package/dist/repository-behavior-protocol.js +202 -0
  87. package/dist/repository-benchmark-protocol.d.ts +487 -0
  88. package/dist/repository-benchmark-protocol.js +96 -0
  89. package/dist/repository-execution-protocol.d.ts +150 -0
  90. package/dist/repository-execution-protocol.js +38 -0
  91. package/dist/repository-fixture-instructions.d.ts +3 -0
  92. package/dist/repository-fixture-instructions.js +91 -0
  93. package/dist/repository-fixture-protocol.d.ts +79 -0
  94. package/dist/repository-fixture-protocol.js +79 -0
  95. package/dist/repository-foundry-plan-protocol.d.ts +118 -0
  96. package/dist/repository-foundry-plan-protocol.js +296 -0
  97. package/dist/repository-foundry-progress-protocol.d.ts +52 -0
  98. package/dist/repository-foundry-progress-protocol.js +52 -0
  99. package/dist/repository-improvement-protocol.d.ts +100 -0
  100. package/dist/repository-improvement-protocol.js +106 -0
  101. package/dist/repository-language-model-protocol.d.ts +43 -0
  102. package/dist/repository-language-model-protocol.js +146 -0
  103. package/dist/repository-oracle-coverage-protocol.d.ts +18 -0
  104. package/dist/repository-oracle-coverage-protocol.js +39 -0
  105. package/dist/repository-oracle-execution-binding.d.ts +27 -0
  106. package/dist/repository-oracle-execution-binding.js +59 -0
  107. package/dist/repository-oracle-protocol.d.ts +230 -0
  108. package/dist/repository-oracle-protocol.js +156 -0
  109. package/dist/repository-oracle-scope-policy.d.ts +22 -0
  110. package/dist/repository-oracle-scope-policy.js +92 -0
  111. package/dist/repository-quality-policy.d.ts +15 -0
  112. package/dist/repository-quality-policy.js +357 -0
  113. package/dist/repository-routing-benchmark-protocol.d.ts +176 -0
  114. package/dist/repository-routing-benchmark-protocol.js +103 -0
  115. package/dist/repository-routing-model-protocol.d.ts +36 -0
  116. package/dist/repository-routing-model-protocol.js +89 -0
  117. package/dist/repository-routing-plan-protocol.d.ts +112 -0
  118. package/dist/repository-routing-plan-protocol.js +58 -0
  119. package/dist/repository-routing-quality-policy.d.ts +9 -0
  120. package/dist/repository-routing-quality-policy.js +191 -0
  121. package/dist/repository-seed-qualification-progress-protocol.d.ts +205 -0
  122. package/dist/repository-seed-qualification-progress-protocol.js +28 -0
  123. package/dist/repository-semantic-calibration-protocol.d.ts +768 -0
  124. package/dist/repository-semantic-calibration-protocol.js +276 -0
  125. package/dist/repository-semantic-calibration.d.ts +163 -0
  126. package/dist/repository-semantic-calibration.js +581 -0
  127. package/dist/repository-specification-contract-facts-protocol.d.ts +224 -0
  128. package/dist/repository-specification-contract-facts-protocol.js +276 -0
  129. package/dist/repository-specification-critique-protocol.d.ts +189 -0
  130. package/dist/repository-specification-critique-protocol.js +103 -0
  131. package/dist/repository-task-family-protocol.d.ts +24 -0
  132. package/dist/repository-task-family-protocol.js +37 -0
  133. package/dist/repository-task-seed-protocol.d.ts +384 -0
  134. package/dist/repository-task-seed-protocol.js +236 -0
  135. package/dist/repository-trajectory-protocol.d.ts +20 -0
  136. package/dist/repository-trajectory-protocol.js +42 -0
  137. package/dist/service.js +1 -1
  138. package/dist/services/adversary/service.d.ts +64 -0
  139. package/dist/services/adversary/service.js +330 -0
  140. package/dist/services/benchmark-compiler/service.d.ts +450 -0
  141. package/dist/services/benchmark-compiler/service.js +9 -0
  142. package/dist/services/budgeted-model/service.d.ts +118 -0
  143. package/dist/services/budgeted-model/service.js +460 -0
  144. package/dist/services/case-authoring/service.d.ts +163 -0
  145. package/dist/services/case-authoring/service.js +1456 -0
  146. package/dist/services/case-finalization/service.d.ts +283 -0
  147. package/dist/services/case-finalization/service.js +370 -0
  148. package/dist/services/case-generation/service.d.ts +619 -0
  149. package/dist/services/case-generation/service.js +2628 -0
  150. package/dist/services/case-pipeline/service.d.ts +31 -0
  151. package/dist/services/case-pipeline/service.js +485 -0
  152. package/dist/services/case-pipeline-v2/service.d.ts +70 -0
  153. package/dist/services/case-pipeline-v2/service.js +477 -0
  154. package/dist/services/command-observability/service.d.ts +13 -0
  155. package/dist/services/command-observability/service.js +3 -0
  156. package/dist/services/dimension-labeling/service.d.ts +77 -0
  157. package/dist/services/dimension-labeling/service.js +188 -0
  158. package/dist/services/eval-candidate/service.d.ts +208 -0
  159. package/dist/services/eval-candidate/service.js +64 -0
  160. package/dist/services/eval-capabilities/service.d.ts +183 -0
  161. package/dist/services/eval-capabilities/service.js +1433 -0
  162. package/dist/services/eval-environment/service.d.ts +173 -0
  163. package/dist/services/eval-environment/service.js +127 -0
  164. package/dist/services/evidence-reconstruction/service.d.ts +36 -0
  165. package/dist/services/evidence-reconstruction/service.js +145 -0
  166. package/dist/services/fixture-builder/service.d.ts +62 -0
  167. package/dist/services/fixture-builder/service.js +36 -0
  168. package/dist/services/fixture-validation/service.d.ts +75 -0
  169. package/dist/services/fixture-validation/service.js +295 -0
  170. package/dist/services/foundry/service.d.ts +831 -0
  171. package/dist/services/foundry/service.js +442 -0
  172. package/dist/services/foundry-progress/service.d.ts +62 -0
  173. package/dist/services/foundry-progress/service.js +149 -0
  174. package/dist/services/foundry-v2/service.d.ts +54 -0
  175. package/dist/services/foundry-v2/service.js +28 -0
  176. package/dist/services/grounded-authoring/service.d.ts +126 -0
  177. package/dist/services/grounded-authoring/service.js +822 -0
  178. package/dist/services/historical-case/service.d.ts +722 -0
  179. package/dist/services/historical-case/service.js +177 -0
  180. package/dist/services/improvement-loop/service.d.ts +59 -0
  181. package/dist/services/improvement-loop/service.js +176 -0
  182. package/dist/services/language-model/service.d.ts +52 -0
  183. package/dist/services/language-model/service.js +194 -0
  184. package/dist/services/oracle-builder/service.d.ts +146 -0
  185. package/dist/services/oracle-builder/service.js +513 -0
  186. package/dist/services/oracle-coverage/service.d.ts +28 -0
  187. package/dist/services/oracle-coverage/service.js +50 -0
  188. package/dist/services/oracle-coverage-witness/service.d.ts +130 -0
  189. package/dist/services/oracle-coverage-witness/service.js +538 -0
  190. package/dist/services/pipeline-challenge/service.d.ts +551 -0
  191. package/dist/services/pipeline-challenge/service.js +427 -0
  192. package/dist/services/pipeline-controls/service.d.ts +130 -0
  193. package/dist/services/pipeline-controls/service.js +483 -0
  194. package/dist/services/pipeline-oracle/service.d.ts +8 -0
  195. package/dist/services/pipeline-oracle/service.js +256 -0
  196. package/dist/services/pipeline-seed/service.d.ts +298 -0
  197. package/dist/services/pipeline-seed/service.js +428 -0
  198. package/dist/services/pipeline-spec/service.d.ts +103 -0
  199. package/dist/services/pipeline-spec/service.js +619 -0
  200. package/dist/services/pipeline-tournament/service.d.ts +258 -0
  201. package/dist/services/pipeline-tournament/service.js +476 -0
  202. package/dist/services/quality-gate/service.d.ts +233 -0
  203. package/dist/services/quality-gate/service.js +136 -0
  204. package/dist/services/repository-bundle/service.d.ts +33 -0
  205. package/dist/services/repository-bundle/service.js +114 -0
  206. package/dist/services/repository-model/service.d.ts +105 -0
  207. package/dist/services/repository-model/service.js +250 -0
  208. package/dist/services/repository-public-artifact/service.d.ts +133 -0
  209. package/dist/services/repository-public-artifact/service.js +330 -0
  210. package/dist/services/routing-benchmark/service.d.ts +362 -0
  211. package/dist/services/routing-benchmark/service.js +96 -0
  212. package/dist/services/specification-critic/service.d.ts +92 -0
  213. package/dist/services/specification-critic/service.js +172 -0
  214. package/dist/services/task-family/service.d.ts +40 -0
  215. package/dist/services/task-family/service.js +55 -0
  216. package/dist/services/task-seed/service.d.ts +906 -0
  217. package/dist/services/task-seed/service.js +1406 -0
  218. package/dist/services/task-specification/service.d.ts +27 -0
  219. package/dist/services/task-specification/service.js +40 -0
  220. package/dist/services/trajectory-policy/service.d.ts +110 -0
  221. package/dist/services/trajectory-policy/service.js +216 -0
  222. package/dist/test/agentic-capabilities-protocol.test.d.ts +1 -0
  223. package/dist/test/agentic-capabilities-protocol.test.js +570 -0
  224. package/dist/test/agentic-capabilities.test.d.ts +1 -0
  225. package/dist/test/agentic-capabilities.test.js +1461 -0
  226. package/dist/test/agentic-environment.test.d.ts +1 -0
  227. package/dist/test/agentic-environment.test.js +213 -0
  228. package/dist/test/case-pipeline-foundation.test.d.ts +1 -0
  229. package/dist/test/case-pipeline-foundation.test.js +535 -0
  230. package/dist/test/case-pipeline-protocol-v2.test.d.ts +1 -0
  231. package/dist/test/case-pipeline-protocol-v2.test.js +124 -0
  232. package/dist/test/case-pipeline-v2.test.d.ts +1 -0
  233. package/dist/test/case-pipeline-v2.test.js +286 -0
  234. package/dist/test/case-pipeline.test.d.ts +1 -0
  235. package/dist/test/case-pipeline.test.js +851 -0
  236. package/dist/test/eval-capability-policy.test.d.ts +1 -0
  237. package/dist/test/eval-capability-policy.test.js +50 -0
  238. package/dist/test/eval-event-log.test.d.ts +1 -0
  239. package/dist/test/eval-event-log.test.js +125 -0
  240. package/dist/test/evaluation-evidence-freshness.test.d.ts +1 -0
  241. package/dist/test/evaluation-evidence-freshness.test.js +44 -0
  242. package/dist/test/evaluation-evidence.test.d.ts +1 -0
  243. package/dist/test/evaluation-evidence.test.js +230 -0
  244. package/dist/test/evaluation-grader-calibration.test.d.ts +1 -0
  245. package/dist/test/evaluation-grader-calibration.test.js +373 -0
  246. package/dist/test/evaluation-proposal-digest.test.d.ts +1 -0
  247. package/dist/test/evaluation-proposal-digest.test.js +187 -0
  248. package/dist/test/evaluation-source-retrieval.test.d.ts +1 -0
  249. package/dist/test/evaluation-source-retrieval.test.js +237 -0
  250. package/dist/test/evaluation-structure-policy.test.d.ts +1 -0
  251. package/dist/test/evaluation-structure-policy.test.js +196 -0
  252. package/dist/test/fixtures/repository-resource-panel.d.ts +39 -0
  253. package/dist/test/fixtures/repository-resource-panel.js +111 -0
  254. package/dist/test/fixtures/vitest-boundary-panel.d.ts +84 -0
  255. package/dist/test/fixtures/vitest-boundary-panel.js +120 -0
  256. package/dist/test/fixtures/vitest-phase-panel.d.ts +135 -0
  257. package/dist/test/fixtures/vitest-phase-panel.js +213 -0
  258. package/dist/test/fixtures/vitest-reporter-results.d.ts +76 -0
  259. package/dist/test/fixtures/vitest-reporter-results.js +94 -0
  260. package/dist/test/grounded-authoring.test.d.ts +1 -0
  261. package/dist/test/grounded-authoring.test.js +565 -0
  262. package/dist/test/integrated-repository-history.test.d.ts +1 -0
  263. package/dist/test/integrated-repository-history.test.js +227 -0
  264. package/dist/test/project-authoring.test.js +593 -43
  265. package/dist/test/project-workflow.test.js +419 -40
  266. package/dist/test/repository-authoring-artifacts.test.d.ts +1 -0
  267. package/dist/test/repository-authoring-artifacts.test.js +185 -0
  268. package/dist/test/repository-bundle.test.d.ts +1 -0
  269. package/dist/test/repository-bundle.test.js +52 -0
  270. package/dist/test/repository-case-generation.test.d.ts +1 -0
  271. package/dist/test/repository-case-generation.test.js +3465 -0
  272. package/dist/test/repository-command-diagnostic.test.d.ts +1 -0
  273. package/dist/test/repository-command-diagnostic.test.js +55 -0
  274. package/dist/test/repository-command-signals.test.d.ts +1 -0
  275. package/dist/test/repository-command-signals.test.js +124 -0
  276. package/dist/test/repository-fixture-scope-coverage.test.d.ts +1 -0
  277. package/dist/test/repository-fixture-scope-coverage.test.js +127 -0
  278. package/dist/test/repository-fixture-validation.test.d.ts +1 -0
  279. package/dist/test/repository-fixture-validation.test.js +362 -0
  280. package/dist/test/repository-foundry-progress.test.d.ts +1 -0
  281. package/dist/test/repository-foundry-progress.test.js +110 -0
  282. package/dist/test/repository-foundry-quality.test.d.ts +1 -0
  283. package/dist/test/repository-foundry-quality.test.js +1138 -0
  284. package/dist/test/repository-import-context.test.d.ts +1 -0
  285. package/dist/test/repository-import-context.test.js +354 -0
  286. package/dist/test/repository-model-authoring.test.d.ts +1 -0
  287. package/dist/test/repository-model-authoring.test.js +544 -0
  288. package/dist/test/repository-model.test.d.ts +1 -0
  289. package/dist/test/repository-model.test.js +2195 -0
  290. package/dist/test/repository-node-test-reporter.test.d.ts +1 -0
  291. package/dist/test/repository-node-test-reporter.test.js +104 -0
  292. package/dist/test/repository-oracle-concurrency.test.d.ts +1 -0
  293. package/dist/test/repository-oracle-concurrency.test.js +542 -0
  294. package/dist/test/repository-oracle-coverage-witness.test.d.ts +1 -0
  295. package/dist/test/repository-oracle-coverage-witness.test.js +511 -0
  296. package/dist/test/repository-oracle-coverage.test.d.ts +1 -0
  297. package/dist/test/repository-oracle-coverage.test.js +168 -0
  298. package/dist/test/repository-oracle-evidence.test.d.ts +1 -0
  299. package/dist/test/repository-oracle-evidence.test.js +185 -0
  300. package/dist/test/repository-oracle-plan.test.d.ts +1 -0
  301. package/dist/test/repository-oracle-plan.test.js +176 -0
  302. package/dist/test/repository-overlay-isolation.test.d.ts +1 -0
  303. package/dist/test/repository-overlay-isolation.test.js +85 -0
  304. package/dist/test/repository-preparation-cache.test.d.ts +1 -0
  305. package/dist/test/repository-preparation-cache.test.js +414 -0
  306. package/dist/test/repository-public-artifact.test.d.ts +1 -0
  307. package/dist/test/repository-public-artifact.test.js +273 -0
  308. package/dist/test/repository-qualification-diagnostics.test.d.ts +1 -0
  309. package/dist/test/repository-qualification-diagnostics.test.js +524 -0
  310. package/dist/test/repository-reference-authoring.test.d.ts +1 -0
  311. package/dist/test/repository-reference-authoring.test.js +1633 -0
  312. package/dist/test/repository-review-evidence-v2.test.d.ts +1 -0
  313. package/dist/test/repository-review-evidence-v2.test.js +183 -0
  314. package/dist/test/repository-review-evidence.test.d.ts +1 -0
  315. package/dist/test/repository-review-evidence.test.js +124 -0
  316. package/dist/test/repository-seed-exclusions.test.d.ts +1 -0
  317. package/dist/test/repository-seed-exclusions.test.js +96 -0
  318. package/dist/test/repository-seed-selection.test.d.ts +1 -0
  319. package/dist/test/repository-seed-selection.test.js +504 -0
  320. package/dist/test/repository-semantic-calibration.test.d.ts +1 -0
  321. package/dist/test/repository-semantic-calibration.test.js +688 -0
  322. package/dist/test/repository-solution-edits.test.d.ts +1 -0
  323. package/dist/test/repository-solution-edits.test.js +377 -0
  324. package/dist/test/repository-specification-budget.test.d.ts +1 -0
  325. package/dist/test/repository-specification-budget.test.js +171 -0
  326. package/dist/test/repository-specification-contract-checkpoint.test.d.ts +1 -0
  327. package/dist/test/repository-specification-contract-checkpoint.test.js +228 -0
  328. package/dist/test/repository-specification-contract-facts.test.d.ts +1 -0
  329. package/dist/test/repository-specification-contract-facts.test.js +177 -0
  330. package/dist/test/repository-trajectory-authoring.test.d.ts +1 -0
  331. package/dist/test/repository-trajectory-authoring.test.js +176 -0
  332. package/dist/test/repository-valid-control-plan.test.d.ts +1 -0
  333. package/dist/test/repository-valid-control-plan.test.js +45 -0
  334. package/dist/test/repository-vitest-phase.test.d.ts +1 -0
  335. package/dist/test/repository-vitest-phase.test.js +848 -0
  336. package/dist/test/repository-vitest-reporter.test.d.ts +1 -0
  337. package/dist/test/repository-vitest-reporter.test.js +158 -0
  338. package/dist/test/repository-workspace-build.test.d.ts +1 -0
  339. package/dist/test/repository-workspace-build.test.js +160 -0
  340. package/dist/test/strict-authoring-schema.test.d.ts +1 -0
  341. package/dist/test/strict-authoring-schema.test.js +169 -0
  342. package/package.json +48 -6
@@ -0,0 +1,224 @@
1
+ import { Schema } from "effect";
2
+ import { type RepositorySpecificationReferenceScopeV1 } from "./repository-specification-critique-protocol.js";
3
+ export declare const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_FACTS = 64;
4
+ export declare const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_MEMBERS = 128;
5
+ export declare const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_QUESTIONS = 16;
6
+ export declare const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_PUBLIC_BYTES: number;
7
+ export declare const RepositorySpecificationPublicContractFactV1: Schema.Union<readonly [Schema.Struct<{
8
+ kind: Schema.Literal<"behavior">;
9
+ statement: Schema.String;
10
+ id: Schema.String;
11
+ scopeId: Schema.String;
12
+ }>, Schema.Struct<{
13
+ kind: Schema.Literal<"closed-set">;
14
+ subject: Schema.String;
15
+ appliesWhen: Schema.String;
16
+ members: Schema.$Array<Schema.String>;
17
+ outsideBehavior: Schema.String;
18
+ id: Schema.String;
19
+ scopeId: Schema.String;
20
+ }>, Schema.Struct<{
21
+ kind: Schema.Literal<"eligibility">;
22
+ condition: Schema.String;
23
+ whenEligible: Schema.String;
24
+ whenIneligible: Schema.String;
25
+ id: Schema.String;
26
+ scopeId: Schema.String;
27
+ }>]>;
28
+ export type RepositorySpecificationPublicContractFactV1 = typeof RepositorySpecificationPublicContractFactV1.Type;
29
+ export declare const RepositorySpecificationPrivateContractFactV1: Schema.Union<readonly [Schema.Struct<{
30
+ readonly evidence: Schema.$Array<Schema.Struct<{
31
+ readonly sourceId: Schema.String;
32
+ readonly startLine: Schema.Finite;
33
+ readonly endLine: Schema.Finite;
34
+ }>>;
35
+ readonly kind: Schema.Literal<"behavior">;
36
+ readonly statement: Schema.String;
37
+ readonly id: Schema.String;
38
+ readonly scopeId: Schema.String;
39
+ }>, Schema.Struct<{
40
+ readonly evidence: Schema.$Array<Schema.Struct<{
41
+ readonly sourceId: Schema.String;
42
+ readonly startLine: Schema.Finite;
43
+ readonly endLine: Schema.Finite;
44
+ }>>;
45
+ readonly kind: Schema.Literal<"closed-set">;
46
+ readonly subject: Schema.String;
47
+ readonly appliesWhen: Schema.String;
48
+ readonly members: Schema.$Array<Schema.String>;
49
+ readonly outsideBehavior: Schema.String;
50
+ readonly id: Schema.String;
51
+ readonly scopeId: Schema.String;
52
+ }>, Schema.Struct<{
53
+ readonly evidence: Schema.$Array<Schema.Struct<{
54
+ readonly sourceId: Schema.String;
55
+ readonly startLine: Schema.Finite;
56
+ readonly endLine: Schema.Finite;
57
+ }>>;
58
+ readonly kind: Schema.Literal<"eligibility">;
59
+ readonly condition: Schema.String;
60
+ readonly whenEligible: Schema.String;
61
+ readonly whenIneligible: Schema.String;
62
+ readonly id: Schema.String;
63
+ readonly scopeId: Schema.String;
64
+ }>]>;
65
+ export type RepositorySpecificationPrivateContractFactV1 = typeof RepositorySpecificationPrivateContractFactV1.Type;
66
+ /** A model proposal, never an assertion of independent verification. */
67
+ export declare const RepositorySpecificationContractFactsProposalV1: Schema.Struct<{
68
+ readonly version: Schema.Literal<1>;
69
+ readonly facts: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
70
+ readonly evidence: Schema.$Array<Schema.Struct<{
71
+ readonly sourceId: Schema.String;
72
+ readonly startLine: Schema.Finite;
73
+ readonly endLine: Schema.Finite;
74
+ }>>;
75
+ readonly kind: Schema.Literal<"behavior">;
76
+ readonly statement: Schema.String;
77
+ readonly id: Schema.String;
78
+ readonly scopeId: Schema.String;
79
+ }>, Schema.Struct<{
80
+ readonly evidence: Schema.$Array<Schema.Struct<{
81
+ readonly sourceId: Schema.String;
82
+ readonly startLine: Schema.Finite;
83
+ readonly endLine: Schema.Finite;
84
+ }>>;
85
+ readonly kind: Schema.Literal<"closed-set">;
86
+ readonly subject: Schema.String;
87
+ readonly appliesWhen: Schema.String;
88
+ readonly members: Schema.$Array<Schema.String>;
89
+ readonly outsideBehavior: Schema.String;
90
+ readonly id: Schema.String;
91
+ readonly scopeId: Schema.String;
92
+ }>, Schema.Struct<{
93
+ readonly evidence: Schema.$Array<Schema.Struct<{
94
+ readonly sourceId: Schema.String;
95
+ readonly startLine: Schema.Finite;
96
+ readonly endLine: Schema.Finite;
97
+ }>>;
98
+ readonly kind: Schema.Literal<"eligibility">;
99
+ readonly condition: Schema.String;
100
+ readonly whenEligible: Schema.String;
101
+ readonly whenIneligible: Schema.String;
102
+ readonly id: Schema.String;
103
+ readonly scopeId: Schema.String;
104
+ }>]>>;
105
+ }>;
106
+ export type RepositorySpecificationContractFactsProposalV1 = typeof RepositorySpecificationContractFactsProposalV1.Type;
107
+ export declare const RepositorySpecificationContractFactQuestionV1: Schema.Struct<{
108
+ readonly scopeId: Schema.String;
109
+ readonly factIds: Schema.$Array<Schema.String>;
110
+ readonly reason: Schema.Literals<readonly ["missing-boundary", "incomplete-set", "contradictory-fact", "unavailable-context"]>;
111
+ readonly question: Schema.String;
112
+ }>;
113
+ export type RepositorySpecificationContractFactQuestionV1 = typeof RepositorySpecificationContractFactQuestionV1.Type;
114
+ export type RepositorySpecificationContractFactClarificationRequestV1 = RepositorySpecificationContractFactQuestionV1 & {
115
+ readonly requestId: string;
116
+ };
117
+ export declare const RepositorySpecificationContractFactClarificationV1: Schema.Struct<{
118
+ readonly version: Schema.Literal<1>;
119
+ readonly facts: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
120
+ readonly evidence: Schema.$Array<Schema.Struct<{
121
+ readonly sourceId: Schema.String;
122
+ readonly startLine: Schema.Finite;
123
+ readonly endLine: Schema.Finite;
124
+ }>>;
125
+ readonly kind: Schema.Literal<"behavior">;
126
+ readonly statement: Schema.String;
127
+ readonly id: Schema.String;
128
+ readonly scopeId: Schema.String;
129
+ }>, Schema.Struct<{
130
+ readonly evidence: Schema.$Array<Schema.Struct<{
131
+ readonly sourceId: Schema.String;
132
+ readonly startLine: Schema.Finite;
133
+ readonly endLine: Schema.Finite;
134
+ }>>;
135
+ readonly kind: Schema.Literal<"closed-set">;
136
+ readonly subject: Schema.String;
137
+ readonly appliesWhen: Schema.String;
138
+ readonly members: Schema.$Array<Schema.String>;
139
+ readonly outsideBehavior: Schema.String;
140
+ readonly id: Schema.String;
141
+ readonly scopeId: Schema.String;
142
+ }>, Schema.Struct<{
143
+ readonly evidence: Schema.$Array<Schema.Struct<{
144
+ readonly sourceId: Schema.String;
145
+ readonly startLine: Schema.Finite;
146
+ readonly endLine: Schema.Finite;
147
+ }>>;
148
+ readonly kind: Schema.Literal<"eligibility">;
149
+ readonly condition: Schema.String;
150
+ readonly whenEligible: Schema.String;
151
+ readonly whenIneligible: Schema.String;
152
+ readonly id: Schema.String;
153
+ readonly scopeId: Schema.String;
154
+ }>]>>;
155
+ readonly resolutions: Schema.$Array<Schema.Struct<{
156
+ readonly requestId: Schema.String;
157
+ readonly outcome: Schema.Literals<readonly ["answered", "unresolved"]>;
158
+ readonly factIds: Schema.$Array<Schema.String>;
159
+ readonly detail: Schema.String;
160
+ }>>;
161
+ }>;
162
+ export type RepositorySpecificationContractFactClarificationV1 = typeof RepositorySpecificationContractFactClarificationV1.Type;
163
+ /**
164
+ * A uses empty evidence arrays and judges solver-visible sufficiency. B derives
165
+ * the necessary distinctions independently from private evidence and checks
166
+ * completeness, including omitted alternatives and outside-set behavior.
167
+ */
168
+ export declare const RepositorySpecificationContractFactReviewV1: Schema.Struct<{
169
+ readonly packetDigest: Schema.String;
170
+ readonly scopeChecks: Schema.$Array<Schema.Struct<{
171
+ readonly scopeId: Schema.String;
172
+ readonly factIds: Schema.$Array<Schema.String>;
173
+ readonly outcome: Schema.Literals<readonly ["complete", "missing-facts", "contradictory", "uncertain"]>;
174
+ readonly detail: Schema.String;
175
+ readonly evidence: Schema.$Array<Schema.Struct<{
176
+ readonly sourceId: Schema.String;
177
+ readonly startLine: Schema.Finite;
178
+ readonly endLine: Schema.Finite;
179
+ }>>;
180
+ }>>;
181
+ readonly clarificationRequests: Schema.$Array<Schema.Struct<{
182
+ readonly scopeId: Schema.String;
183
+ readonly factIds: Schema.$Array<Schema.String>;
184
+ readonly reason: Schema.Literals<readonly ["missing-boundary", "incomplete-set", "contradictory-fact", "unavailable-context"]>;
185
+ readonly question: Schema.String;
186
+ }>>;
187
+ }>;
188
+ export type RepositorySpecificationContractFactReviewV1 = typeof RepositorySpecificationContractFactReviewV1.Type;
189
+ export type RepositorySpecificationContractFactsPacketV1 = {
190
+ readonly version: 1;
191
+ readonly scopeDigest: string;
192
+ readonly digest: string;
193
+ readonly facts: readonly RepositorySpecificationPublicContractFactV1[];
194
+ };
195
+ export type RepositorySpecificationContractFactsHistoryEntryV1 = {
196
+ readonly sequence: number;
197
+ readonly packetDigest: string;
198
+ readonly analystOperationId: string;
199
+ readonly clarificationRequestIds: readonly string[];
200
+ };
201
+ /**
202
+ * Returned only after two fresh reviews of the exact assembled visible task.
203
+ * This is specification evidence, not a benchmark admission.
204
+ */
205
+ export type RepositorySpecificationAcceptedContractFactsV1 = {
206
+ readonly version: 1;
207
+ readonly packet: RepositorySpecificationContractFactsPacketV1;
208
+ readonly independentlyReviewed: true;
209
+ readonly reviewerOperationIds: readonly [string, string];
210
+ readonly history: readonly RepositorySpecificationContractFactsHistoryEntryV1[];
211
+ };
212
+ export declare const parseRepositorySpecificationContractFactsProposalV1: (value: unknown) => RepositorySpecificationContractFactsProposalV1;
213
+ /** Positive projection: no provenance, arbitrary metadata, or model status survives. */
214
+ export declare const repositorySpecificationPublicContractFactV1: (fact: RepositorySpecificationPrivateContractFactV1) => RepositorySpecificationPublicContractFactV1;
215
+ export declare const renderRepositorySpecificationContractFactV1: (fact: RepositorySpecificationPublicContractFactV1) => string;
216
+ /** Same scope identities and seed obligations; clarification cannot select another task. */
217
+ export declare const repositorySpecificationContractFactsScopeV1: (scope: RepositorySpecificationReferenceScopeV1, proposal: RepositorySpecificationContractFactsProposalV1) => RepositorySpecificationReferenceScopeV1;
218
+ export declare const repositorySpecificationContractFactsPacketV1: (scope: RepositorySpecificationReferenceScopeV1, proposal: RepositorySpecificationContractFactsProposalV1) => RepositorySpecificationContractFactsPacketV1;
219
+ /**
220
+ * Structural and exact-digest revalidation for generation/finalization. The
221
+ * supplied scope is the FINAL scope containing rendered facts, not the original
222
+ * analyst prose. This does not replace either independent semantic review.
223
+ */
224
+ export declare const parseRepositorySpecificationContractFactsPacketV1: (value: unknown, scope: RepositorySpecificationReferenceScopeV1) => RepositorySpecificationContractFactsPacketV1;
@@ -0,0 +1,276 @@
1
+ import { createHash } from "node:crypto";
2
+ import { Schema } from "effect";
3
+ import { RepositorySpecificationReferenceEvidenceV1 } from "./repository-specification-critique-protocol.js";
4
+ export const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_FACTS = 64;
5
+ export const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_MEMBERS = 128;
6
+ export const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_QUESTIONS = 16;
7
+ export const REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_PUBLIC_BYTES = 32 * 1024;
8
+ const identity = { id: Schema.String, scopeId: Schema.String };
9
+ const behavior = { ...identity, kind: Schema.Literal("behavior"), statement: Schema.String };
10
+ const closedSet = {
11
+ ...identity,
12
+ kind: Schema.Literal("closed-set"),
13
+ subject: Schema.String,
14
+ appliesWhen: Schema.String,
15
+ members: Schema.Array(Schema.String),
16
+ outsideBehavior: Schema.String
17
+ };
18
+ const eligibility = {
19
+ ...identity,
20
+ kind: Schema.Literal("eligibility"),
21
+ condition: Schema.String,
22
+ whenEligible: Schema.String,
23
+ whenIneligible: Schema.String
24
+ };
25
+ const evidence = Schema.Array(RepositorySpecificationReferenceEvidenceV1.annotate({
26
+ parseOptions: { onExcessProperty: "error" }
27
+ }));
28
+ export const RepositorySpecificationPublicContractFactV1 = Schema.Union([
29
+ Schema.Struct(behavior).annotate({ parseOptions: { onExcessProperty: "error" } }),
30
+ Schema.Struct(closedSet).annotate({ parseOptions: { onExcessProperty: "error" } }),
31
+ Schema.Struct(eligibility).annotate({ parseOptions: { onExcessProperty: "error" } })
32
+ ]);
33
+ export const RepositorySpecificationPrivateContractFactV1 = Schema.Union([
34
+ Schema.Struct({ ...behavior, evidence }).annotate({
35
+ parseOptions: { onExcessProperty: "error" }
36
+ }),
37
+ Schema.Struct({ ...closedSet, evidence }).annotate({
38
+ parseOptions: { onExcessProperty: "error" }
39
+ }),
40
+ Schema.Struct({ ...eligibility, evidence }).annotate({
41
+ parseOptions: { onExcessProperty: "error" }
42
+ })
43
+ ]);
44
+ /** A model proposal, never an assertion of independent verification. */
45
+ export const RepositorySpecificationContractFactsProposalV1 = Schema.Struct({
46
+ version: Schema.Literal(1),
47
+ facts: Schema.Array(RepositorySpecificationPrivateContractFactV1)
48
+ }).annotate({ parseOptions: { onExcessProperty: "error" } });
49
+ export const RepositorySpecificationContractFactQuestionV1 = Schema.Struct({
50
+ scopeId: Schema.String,
51
+ factIds: Schema.Array(Schema.String),
52
+ reason: Schema.Literals([
53
+ "missing-boundary",
54
+ "incomplete-set",
55
+ "contradictory-fact",
56
+ "unavailable-context"
57
+ ]),
58
+ question: Schema.String
59
+ }).annotate({ parseOptions: { onExcessProperty: "error" } });
60
+ export const RepositorySpecificationContractFactClarificationV1 = Schema.Struct({
61
+ version: Schema.Literal(1),
62
+ facts: Schema.Array(RepositorySpecificationPrivateContractFactV1),
63
+ resolutions: Schema.Array(Schema.Struct({
64
+ requestId: Schema.String,
65
+ outcome: Schema.Literals(["answered", "unresolved"]),
66
+ factIds: Schema.Array(Schema.String),
67
+ detail: Schema.String
68
+ }).annotate({ parseOptions: { onExcessProperty: "error" } }))
69
+ }).annotate({ parseOptions: { onExcessProperty: "error" } });
70
+ /**
71
+ * A uses empty evidence arrays and judges solver-visible sufficiency. B derives
72
+ * the necessary distinctions independently from private evidence and checks
73
+ * completeness, including omitted alternatives and outside-set behavior.
74
+ */
75
+ export const RepositorySpecificationContractFactReviewV1 = Schema.Struct({
76
+ packetDigest: Schema.String,
77
+ scopeChecks: Schema.Array(Schema.Struct({
78
+ scopeId: Schema.String,
79
+ factIds: Schema.Array(Schema.String),
80
+ outcome: Schema.Literals(["complete", "missing-facts", "contradictory", "uncertain"]),
81
+ detail: Schema.String,
82
+ evidence
83
+ }).annotate({ parseOptions: { onExcessProperty: "error" } })),
84
+ clarificationRequests: Schema.Array(RepositorySpecificationContractFactQuestionV1)
85
+ }).annotate({ parseOptions: { onExcessProperty: "error" } });
86
+ const identifier = (value) => /^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u.test(value);
87
+ const text = (value, maximum = 2_000) => value.length > 0 &&
88
+ value.length <= maximum &&
89
+ value === value.trim() &&
90
+ !value.includes("\0") &&
91
+ !value.includes("private-contract-fact-question-");
92
+ const unique = (values) => new Set(values).size === values.length;
93
+ const fail = (condition, detail) => {
94
+ if (!condition)
95
+ throw new Error(`specification contract facts: ${detail}`);
96
+ };
97
+ const assertPublicFact = (fact) => {
98
+ fail(identifier(fact.id) && identifier(fact.scopeId), "fact or scope identity is invalid");
99
+ switch (fact.kind) {
100
+ case "behavior":
101
+ fail(text(fact.statement), "behavior statement is invalid");
102
+ break;
103
+ case "closed-set":
104
+ fail(text(fact.subject) &&
105
+ text(fact.appliesWhen) &&
106
+ text(fact.outsideBehavior) &&
107
+ fact.members.length > 0 &&
108
+ fact.members.length <= REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_MEMBERS &&
109
+ fact.members.every((member) => text(member, 256)) &&
110
+ unique(fact.members), "closed set must name its applicability, complete members, and outside behavior");
111
+ break;
112
+ case "eligibility":
113
+ fail(text(fact.condition) && text(fact.whenEligible) && text(fact.whenIneligible), "eligibility must state both sides of its boundary");
114
+ break;
115
+ }
116
+ };
117
+ export const parseRepositorySpecificationContractFactsProposalV1 = (value) => {
118
+ const proposal = Schema.decodeUnknownSync(RepositorySpecificationContractFactsProposalV1, {
119
+ onExcessProperty: "error"
120
+ })(value);
121
+ fail(proposal.facts.length > 0 &&
122
+ proposal.facts.length <= REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_FACTS &&
123
+ unique(proposal.facts.map((fact) => fact.id)), "fact identities or count are invalid");
124
+ for (const fact of proposal.facts) {
125
+ assertPublicFact(fact);
126
+ fail(fact.evidence.length > 0 &&
127
+ fact.evidence.length <= 8 &&
128
+ fact.evidence.every((entry) => identifier(entry.sourceId) &&
129
+ Number.isSafeInteger(entry.startLine) &&
130
+ Number.isSafeInteger(entry.endLine) &&
131
+ entry.startLine > 0 &&
132
+ entry.endLine >= entry.startLine), "fact requires bounded source evidence");
133
+ }
134
+ return proposal;
135
+ };
136
+ /** Positive projection: no provenance, arbitrary metadata, or model status survives. */
137
+ export const repositorySpecificationPublicContractFactV1 = (fact) => {
138
+ switch (fact.kind) {
139
+ case "behavior":
140
+ return { id: fact.id, scopeId: fact.scopeId, kind: fact.kind, statement: fact.statement };
141
+ case "closed-set":
142
+ return {
143
+ id: fact.id,
144
+ scopeId: fact.scopeId,
145
+ kind: fact.kind,
146
+ subject: fact.subject,
147
+ appliesWhen: fact.appliesWhen,
148
+ members: [...fact.members],
149
+ outsideBehavior: fact.outsideBehavior
150
+ };
151
+ case "eligibility":
152
+ return {
153
+ id: fact.id,
154
+ scopeId: fact.scopeId,
155
+ kind: fact.kind,
156
+ condition: fact.condition,
157
+ whenEligible: fact.whenEligible,
158
+ whenIneligible: fact.whenIneligible
159
+ };
160
+ }
161
+ };
162
+ export const renderRepositorySpecificationContractFactV1 = (fact) => {
163
+ switch (fact.kind) {
164
+ case "behavior":
165
+ return `For this task: ${fact.statement}`;
166
+ case "closed-set":
167
+ return `For this task, ${fact.subject}. Applicability: ${fact.appliesWhen}. The complete set is: ${fact.members.map((member) => JSON.stringify(member)).join(", ")}. Outside this set: ${fact.outsideBehavior}`;
168
+ case "eligibility":
169
+ return `For this task, eligibility is: ${fact.condition}. When eligible: ${fact.whenEligible}. When ineligible: ${fact.whenIneligible}`;
170
+ }
171
+ };
172
+ /** Same scope identities and seed obligations; clarification cannot select another task. */
173
+ export const repositorySpecificationContractFactsScopeV1 = (scope, proposal) => {
174
+ const scopeIds = scope.clauses.map((clause) => clause.id);
175
+ fail(scopeIds.length > 0 &&
176
+ scopeIds.length <= 32 &&
177
+ unique(scopeIds) &&
178
+ proposal.facts.every((fact) => scopeIds.includes(fact.scopeId)) &&
179
+ scopeIds.every((id) => proposal.facts.some((fact) => fact.scopeId === id)), "every frozen scope requires facts and unknown scopes are forbidden");
180
+ return {
181
+ clauses: scope.clauses.map((clause) => {
182
+ const facts = proposal.facts.filter((fact) => fact.scopeId === clause.id);
183
+ const references = [...clause.evidence, ...facts.flatMap((fact) => fact.evidence)];
184
+ return {
185
+ id: clause.id,
186
+ kind: clause.kind,
187
+ behaviorIds: [...clause.behaviorIds],
188
+ description: [
189
+ clause.description,
190
+ ...facts.map((fact) => renderRepositorySpecificationContractFactV1(repositorySpecificationPublicContractFactV1(fact)))
191
+ ].join("\n"),
192
+ evidence: references.filter((entry, index) => references.findIndex((other) => other.sourceId === entry.sourceId &&
193
+ other.startLine === entry.startLine &&
194
+ other.endLine === entry.endLine) === index)
195
+ };
196
+ }),
197
+ unresolvedQuestions: [...scope.unresolvedQuestions]
198
+ };
199
+ };
200
+ const canonicalJson = (value) => {
201
+ if (Array.isArray(value))
202
+ return `[${value.map(canonicalJson).join(",")}]`;
203
+ if (value !== null && typeof value === "object") {
204
+ const record = value;
205
+ return `{${Object.keys(record)
206
+ .sort()
207
+ .map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`)
208
+ .join(",")}}`;
209
+ }
210
+ const encoded = JSON.stringify(value);
211
+ if (encoded === undefined)
212
+ throw new Error("specification contract facts require JSON data");
213
+ return encoded;
214
+ };
215
+ const digest = (value) => createHash("sha256").update(canonicalJson(value)).digest("hex");
216
+ const freeze = (value) => {
217
+ if (value !== null && typeof value === "object") {
218
+ for (const child of Object.values(value))
219
+ freeze(child);
220
+ Object.freeze(value);
221
+ }
222
+ return value;
223
+ };
224
+ export const repositorySpecificationContractFactsPacketV1 = (scope, proposal) => {
225
+ const facts = proposal.facts.map(repositorySpecificationPublicContractFactV1);
226
+ const publicScope = scope.clauses.map((clause) => ({
227
+ id: clause.id,
228
+ kind: clause.kind,
229
+ behaviorIds: [...clause.behaviorIds],
230
+ description: clause.description
231
+ }));
232
+ const unsigned = { version: 1, scopeDigest: digest(publicScope), facts };
233
+ const packet = { ...unsigned, digest: digest(unsigned) };
234
+ fail(Buffer.byteLength(JSON.stringify({ packet, behavioralScope: publicScope })) <=
235
+ REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_PUBLIC_BYTES, "complete public facts and scope exceed 32768 bytes; no facts were truncated");
236
+ return freeze(packet);
237
+ };
238
+ /**
239
+ * Structural and exact-digest revalidation for generation/finalization. The
240
+ * supplied scope is the FINAL scope containing rendered facts, not the original
241
+ * analyst prose. This does not replace either independent semantic review.
242
+ */
243
+ export const parseRepositorySpecificationContractFactsPacketV1 = (value, scope) => {
244
+ const parsed = Schema.decodeUnknownSync(Schema.Struct({
245
+ version: Schema.Literal(1),
246
+ scopeDigest: Schema.String,
247
+ digest: Schema.String,
248
+ facts: Schema.Array(RepositorySpecificationPublicContractFactV1)
249
+ }), { onExcessProperty: "error" })(value);
250
+ fail(parsed.facts.length > 0 &&
251
+ parsed.facts.length <= REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_FACTS &&
252
+ unique(parsed.facts.map((fact) => fact.id)), "public fact identities or count are invalid");
253
+ parsed.facts.forEach(assertPublicFact);
254
+ const publicScope = scope.clauses.map((clause) => ({
255
+ id: clause.id,
256
+ kind: clause.kind,
257
+ behaviorIds: [...clause.behaviorIds],
258
+ description: clause.description
259
+ }));
260
+ fail(publicScope.length > 0 &&
261
+ publicScope.length <= 32 &&
262
+ unique(publicScope.map((clause) => clause.id)) &&
263
+ publicScope.every((clause) => parsed.facts.some((fact) => fact.scopeId === clause.id)) &&
264
+ parsed.facts.every((fact) => publicScope.some((clause) => clause.id === fact.scopeId &&
265
+ clause.description.includes(renderRepositorySpecificationContractFactV1(fact)))), "public facts do not cover the exact rendered scope");
266
+ const unsigned = {
267
+ version: 1,
268
+ scopeDigest: digest(publicScope),
269
+ facts: parsed.facts
270
+ };
271
+ fail(parsed.scopeDigest === unsigned.scopeDigest &&
272
+ parsed.digest === digest(unsigned) &&
273
+ Buffer.byteLength(JSON.stringify({ packet: parsed, behavioralScope: publicScope })) <=
274
+ REPOSITORY_SPECIFICATION_CONTRACT_FACTS_MAXIMUM_PUBLIC_BYTES, "public fact packet digest, final scope, or size is invalid");
275
+ return freeze(parsed);
276
+ };