@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,476 @@
1
+ import { Clock, Effect, Option, Schema } from "effect";
2
+ import { checkpointDigestV1, pipelineStageToProgressStageV1 } from "../../case-pipeline-protocol.js";
3
+ import { RepositoryFoundryError } from "../../errors.js";
4
+ import { assertRepositoryHiddenFixtureSuiteV1, RepositoryHiddenFixtureSuiteV1 } from "../../repository-fixture-protocol.js";
5
+ import { repositoryFoundryRoleOutputCeilingV1 } from "../../repository-foundry-plan-protocol.js";
6
+ import { repositoryFoundryModelAssignmentV1 } from "../../repository-language-model-protocol.js";
7
+ import { RepositoryHiddenOracleV1 } from "../../repository-oracle-protocol.js";
8
+ import { evaluateRepositoryOracleAdequacyV1 } from "../../repository-quality-policy.js";
9
+ import { evaluateRepositoryOracleScopeCoverageV1 } from "../../repository-oracle-scope-policy.js";
10
+ import { normalizePipelineFailureV1 } from "../budgeted-model/service.js";
11
+ import { reportFoundryHeartbeatV1, reportFoundryStageV1 } from "../foundry-progress/service.js";
12
+ import { groundedStructuredGenerationV1 } from "../grounded-authoring/service.js";
13
+ import { RepositoryFoundryLanguageModel } from "../language-model/service.js";
14
+ import { buildHistoricalHiddenOracleV1 } from "../oracle-builder/service.js";
15
+ import { runPipelineControlCorrectnessCriticsV1, runPipelineControlsCapabilityV1 } from "../pipeline-controls/service.js";
16
+ const STAGE = "tournament";
17
+ const TournamentRepairProposalV1 = Schema.Struct({
18
+ targetedSolutionIds: Schema.Array(Schema.String),
19
+ suite: RepositoryHiddenFixtureSuiteV1,
20
+ rationale: Schema.String
21
+ });
22
+ const REPAIR_INSTRUCTIONS = `You are the grounded oracle-repair role for a repository benchmark.
23
+ The host has executed the incumbent suite repeatedly in isolated checkouts. Repair only the measured false
24
+ accepts, false rejects, or inconclusive fixture observations supplied in the task. Inspect both pinned Git trees
25
+ and use run_fixture for every changed or added overlay before submitting. Preserve all useful incumbent fixtures
26
+ and every grounded behavior obligation. Reject wrong solutions only through user-observable assertions; accept
27
+ all behaviorally valid implementations. Do not inspect solution family names, source fingerprints, textual
28
+ similarity, or historical patch identity. Do not modify solutions. A model opinion never overrides execution.
29
+ Return one complete replacement suite, every measured solution id in targetedSolutionIds, and a rationale.`;
30
+ const failure = (detail, cause) => new RepositoryFoundryError({
31
+ operation: "run-pipeline-stage",
32
+ detail,
33
+ ...(cause === undefined ? {} : { cause })
34
+ });
35
+ const describe = (cause) => cause instanceof Error && cause.message.trim().length > 0 ? cause.message : String(cause);
36
+ const sortedUnique = (values) => [...new Set(values)].sort();
37
+ const unresolvedIds = (adequacy) => sortedUnique([
38
+ ...adequacy.falseAcceptedSolutionIds,
39
+ ...adequacy.falseRejectedSolutionIds,
40
+ ...adequacy.unstableSolutionIds
41
+ ]);
42
+ const difference = (left, right) => {
43
+ const other = new Set(right);
44
+ return left.filter((value) => !other.has(value));
45
+ };
46
+ const advisoryControlClassification = (critiques, solutionId) => {
47
+ const classifications = critiques
48
+ .filter((critique) => critique.solutionId === solutionId)
49
+ .map(({ classification }) => classification);
50
+ if (classifications.length >= 2 &&
51
+ classifications.every((classification) => classification === "wrong")) {
52
+ return "wrong";
53
+ }
54
+ if (classifications.length >= 2 &&
55
+ classifications.every((classification) => classification === "valid")) {
56
+ return "valid";
57
+ }
58
+ return "uncertain";
59
+ };
60
+ const candidateRegressionReasons = (incumbent, candidate, incumbentScope, candidateScope) => [
61
+ ...difference(candidateScope, incumbentScope).map((id) => `introduced unproved grounded scope: ${id}`),
62
+ ...difference(candidate.falseAcceptedSolutionIds, incumbent.falseAcceptedSolutionIds).map((id) => `introduced false acceptance: ${id}`),
63
+ ...difference(candidate.falseRejectedSolutionIds, incumbent.falseRejectedSolutionIds).map((id) => `introduced false rejection: ${id}`),
64
+ ...difference(candidate.unstableSolutionIds, incumbent.unstableSolutionIds).map((id) => `introduced unstable execution: ${id}`),
65
+ ...difference(candidate.unobservedClauseIds, incumbent.unobservedClauseIds).map((id) => `introduced unobserved critical clause: ${id}`),
66
+ ...difference(candidate.insufficientObservationPairs, incumbent.insufficientObservationPairs).map((id) => `introduced insufficient repeated observation: ${id}`)
67
+ ];
68
+ /** A candidate is accepted only when execution removes a defect without introducing any regression. */
69
+ const candidateRejectionReasons = (incumbent, candidate) => {
70
+ const before = unresolvedIds(incumbent.adequacy).length +
71
+ incumbent.scopeCoverage.unresolvedScopeIds.length;
72
+ const after = unresolvedIds(candidate.adequacy).length +
73
+ candidate.scopeCoverage.unresolvedScopeIds.length;
74
+ return [
75
+ ...candidateRegressionReasons(incumbent.adequacy, candidate.adequacy, incumbent.scopeCoverage.unresolvedScopeIds, candidate.scopeCoverage.unresolvedScopeIds),
76
+ ...(after < before
77
+ ? []
78
+ : [
79
+ `executed candidate did not reduce unresolved classifications and scope (${String(before)} -> ${String(after)})`
80
+ ])
81
+ ];
82
+ };
83
+ const validateProposal = (input) => {
84
+ const findings = [];
85
+ try {
86
+ const decoded = Schema.decodeUnknownSync(RepositoryHiddenFixtureSuiteV1)(input.proposal.suite);
87
+ assertRepositoryHiddenFixtureSuiteV1(decoded);
88
+ }
89
+ catch (cause) {
90
+ findings.push({ kind: "contract", message: describe(cause) });
91
+ }
92
+ if (input.proposal.suite.caseId !== input.caseId) {
93
+ findings.push({
94
+ kind: "contract",
95
+ message: "replacement suite must retain the pipeline case id"
96
+ });
97
+ }
98
+ const proposedTargets = new Set(input.proposal.targetedSolutionIds);
99
+ for (const id of input.targeted) {
100
+ if (!proposedTargets.has(id)) {
101
+ findings.push({
102
+ kind: "contract",
103
+ message: `replacement did not account for measured solution ${JSON.stringify(id)}`
104
+ });
105
+ }
106
+ }
107
+ if (input.proposal.rationale.trim().length === 0) {
108
+ findings.push({ kind: "contract", message: "replacement rationale must be non-empty" });
109
+ }
110
+ const coverageByScope = new Map(input.scopeCoverage.map((coverage) => [coverage.scopeId, coverage]));
111
+ for (const scope of input.scope) {
112
+ const coverage = coverageByScope.get(scope.id);
113
+ if (coverage === undefined ||
114
+ !coverage.fixtureIds.some((fixtureId) => input.proposal.suite.fixtures.some((fixture) => fixture.id === fixtureId &&
115
+ (scope.kind === "preserved" || fixture.expectationMode === "changes")))) {
116
+ findings.push({
117
+ kind: "contract",
118
+ message: scope.kind === "changed"
119
+ ? `replacement must retain at least one mapped changes fixture for grounded scope ${JSON.stringify(scope.id)}`
120
+ : `replacement must retain at least one mapped fixture for grounded scope ${JSON.stringify(scope.id)}`
121
+ });
122
+ }
123
+ }
124
+ return findings;
125
+ };
126
+ const runTournament = Effect.fnUntraced(function* (input) {
127
+ // A challenger must never replace the incumbent's checkpoint before the
128
+ // non-regression decision. Retain its partial execution in the work store.
129
+ const bindingDigest = checkpointDigestV1({
130
+ version: 1,
131
+ caseId: input.caseId,
132
+ seed: input.seed,
133
+ suite: input.suite,
134
+ solutions: input.solutions,
135
+ repetitions: input.repetitions
136
+ });
137
+ const workName = `pipeline-execution-tournament-${checkpointDigestV1(input.checkpoint?.operationId ?? input.caseId)}`;
138
+ const retained = input.checkpoint === undefined
139
+ ? Option.none()
140
+ : yield* input.checkpoint.store.readWorkCheckpoint(workName, Schema.Struct({
141
+ version: Schema.Literal(1),
142
+ bindingDigest: Schema.String,
143
+ oracle: RepositoryHiddenOracleV1
144
+ }));
145
+ const resumeOracle = Option.isSome(retained) && retained.value.bindingDigest === bindingDigest
146
+ ? retained.value.oracle
147
+ : input.resumeOracle;
148
+ if (input.checkpoint !== undefined && resumeOracle !== undefined) {
149
+ yield* reportFoundryHeartbeatV1({
150
+ role: "oracle-executor",
151
+ detail: `tournament challenger execution restored; observations=${String(resumeOracle.observations.length)}`
152
+ });
153
+ }
154
+ const oracle = yield* buildHistoricalHiddenOracleV1({
155
+ repositoryRoot: input.repositoryRoot,
156
+ caseId: input.caseId,
157
+ seed: input.seed,
158
+ additionalSolutions: input.solutions,
159
+ hiddenFixtureSuite: input.suite,
160
+ repetitions: input.repetitions,
161
+ oracleConcurrency: input.concurrency,
162
+ ...(resumeOracle === undefined
163
+ ? {}
164
+ : { resumeOracle }),
165
+ ...(input.onReplayCompleted === undefined && input.checkpoint === undefined
166
+ ? {}
167
+ : {
168
+ onReplayCompleted: (partialOracle) => Effect.gen(function* () {
169
+ if (input.checkpoint !== undefined) {
170
+ yield* input.checkpoint.store.writeWorkCheckpoint(workName, {
171
+ version: 1, bindingDigest, oracle: partialOracle
172
+ }).pipe(Effect.uninterruptible, Effect.orDie);
173
+ }
174
+ if (input.onReplayCompleted !== undefined)
175
+ yield* input.onReplayCompleted({
176
+ oracle: partialOracle,
177
+ adequacy: evaluateRepositoryOracleAdequacyV1(partialOracle)
178
+ });
179
+ })
180
+ })
181
+ });
182
+ return { oracle, adequacy: evaluateRepositoryOracleAdequacyV1(oracle) };
183
+ });
184
+ const checkpointOf = (input) => ({
185
+ version: 1,
186
+ stage: STAGE,
187
+ parentDigest: input.parentDigest,
188
+ createdAt: input.createdAt,
189
+ suite: input.suite,
190
+ adequacy: input.result.adequacy,
191
+ oracle: input.result.oracle,
192
+ valid: [...input.valid],
193
+ wrong: [...input.wrong],
194
+ critiques: [...(input.critiques ?? [])],
195
+ history: [...input.history],
196
+ iterations: input.iterations
197
+ });
198
+ /**
199
+ * Runs real, repeated isolated execution and hill-climbs only from measured
200
+ * escapes. Checkpoints are written after every accepted incumbent replacement.
201
+ */
202
+ export const runPipelineTournamentCapabilityV1 = (input) => Effect.gen(function* () {
203
+ const seedCheckpoint = input.checkpoints.seed;
204
+ const spec = input.checkpoints.spec;
205
+ const oracleCheckpoint = input.checkpoints.oracle;
206
+ const controls = input.checkpoints.controls;
207
+ if (seedCheckpoint === undefined ||
208
+ spec === undefined ||
209
+ oracleCheckpoint === undefined ||
210
+ controls === undefined) {
211
+ return yield* failure("tournament requires seed, specification, oracle, and controls checkpoints");
212
+ }
213
+ const seed = seedCheckpoint.seed;
214
+ if (seed.status !== "qualified" || seed.referenceCommit === undefined) {
215
+ return yield* failure("tournament requires a replay-qualified pinned reference");
216
+ }
217
+ const parentDigest = checkpointDigestV1(controls);
218
+ const prior = input.checkpoints.tournament;
219
+ const resumable = prior !== undefined && prior.parentDigest === parentDigest;
220
+ const createdAt = resumable
221
+ ? prior.createdAt
222
+ : new Date(yield* Clock.currentTimeMillis).toISOString();
223
+ let suite = resumable ? prior.suite : oracleCheckpoint.suite;
224
+ let valid = resumable ? [...prior.valid] : [...controls.valid];
225
+ const wrong = resumable ? [...prior.wrong] : [...controls.wrong];
226
+ let critiques = resumable
227
+ ? [...(prior.critiques ?? controls.critiques)]
228
+ : [...controls.critiques];
229
+ let history = resumable ? [...prior.history] : [];
230
+ let iterations = resumable ? prior.iterations : 0;
231
+ // Check the same grounded execution obligation here and at final admission.
232
+ // Otherwise a generically adequate but scope-blind oracle freezes before
233
+ // its known, repairable evidence gap is discovered at the terminal gate.
234
+ const measureScope = (result) => {
235
+ const scopeCoverage = evaluateRepositoryOracleScopeCoverageV1({
236
+ spec, oracleCheckpoint, oracle: result.oracle,
237
+ repetitions: input.context.oracleRepetitions, label: "development"
238
+ });
239
+ return {
240
+ oracle: result.oracle,
241
+ scopeCoverage,
242
+ adequacy: {
243
+ ...result.adequacy,
244
+ admitted: result.adequacy.admitted && scopeCoverage.reasons.length === 0,
245
+ rejectionReasons: [...result.adequacy.rejectionReasons, ...scopeCoverage.reasons]
246
+ }
247
+ };
248
+ };
249
+ const snapshot = (result) => checkpointOf({
250
+ parentDigest,
251
+ createdAt,
252
+ suite,
253
+ valid,
254
+ wrong,
255
+ critiques,
256
+ history,
257
+ iterations,
258
+ result
259
+ });
260
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), resumable ? "resuming repeated isolated tournament" : "running repeated isolated tournament");
261
+ let incumbent = yield* runTournament({
262
+ repositoryRoot: input.context.repositoryRoot,
263
+ caseId: input.context.caseId,
264
+ seed,
265
+ suite,
266
+ solutions: [...valid, ...wrong],
267
+ repetitions: input.context.oracleRepetitions,
268
+ concurrency: input.context.oracleConcurrency,
269
+ ...(resumable ? { resumeOracle: prior.oracle } : {}),
270
+ onReplayCompleted: (result) => input.checkpoint(snapshot(measureScope(result)))
271
+ }).pipe(Effect.map(measureScope));
272
+ const languageModel = yield* RepositoryFoundryLanguageModel;
273
+ const assignment = repositoryFoundryModelAssignmentV1(input.context.modelPlan, "hill-climb-planner");
274
+ let boundedIterations = 0;
275
+ for (;;) {
276
+ if (!incumbent.adequacy.admitted &&
277
+ boundedIterations >= (input.maximumIterations ?? Number.MAX_SAFE_INTEGER)) {
278
+ const partial = snapshot(incumbent);
279
+ yield* input.checkpoint(partial);
280
+ return partial;
281
+ }
282
+ boundedIterations += 1;
283
+ if (incumbent.adequacy.admitted) {
284
+ const complete = snapshot(incumbent);
285
+ yield* input.checkpoint(complete);
286
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `development tournament adequate; iterations=${String(iterations)}`);
287
+ return complete;
288
+ }
289
+ const proposedValidFalseRejects = incumbent.adequacy.falseRejectedSolutionIds.filter((id) => valid.some((solution) => solution.id === id));
290
+ if (proposedValidFalseRejects.length > 0) {
291
+ const reviewed = yield* runPipelineControlCorrectnessCriticsV1({
292
+ ...(input.workCheckpointStore === undefined ? {} : {
293
+ workCheckpointStore: input.workCheckpointStore
294
+ }),
295
+ context: input.context,
296
+ seed,
297
+ spec,
298
+ solutions: valid.filter((solution) => proposedValidFalseRejects.includes(solution.id)),
299
+ priorCritiques: critiques,
300
+ onRound: (roundCritiques) => {
301
+ const reviewedIds = new Set(roundCritiques.map(({ solutionId }) => solutionId));
302
+ critiques = [
303
+ ...critiques.filter(({ solutionId }) => !reviewedIds.has(solutionId)),
304
+ ...roundCritiques
305
+ ];
306
+ return input.checkpoint(snapshot(incumbent));
307
+ }
308
+ });
309
+ critiques = [
310
+ ...critiques.filter(({ solutionId }) => !proposedValidFalseRejects.includes(solutionId)),
311
+ ...reviewed.critiques
312
+ ];
313
+ }
314
+ const mislabeledValid = proposedValidFalseRejects.filter((id) => advisoryControlClassification(critiques, id) === "wrong");
315
+ if (mislabeledValid.length > 0) {
316
+ const incumbentValid = valid;
317
+ const incumbentCritiques = critiques;
318
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `replacing executed invalid controls without changing the oracle: ${mislabeledValid.join(",")}`);
319
+ const retainedValid = valid.filter((solution) => !mislabeledValid.includes(solution.id));
320
+ const replacementInput = {
321
+ context: input.context,
322
+ map: input.map,
323
+ replacementRound: iterations + 1,
324
+ ...(input.workCheckpointStore === undefined ? {} : {
325
+ workCheckpointStore: input.workCheckpointStore
326
+ }),
327
+ checkpoints: {
328
+ ...input.checkpoints,
329
+ controls: {
330
+ ...controls,
331
+ valid: retainedValid,
332
+ wrong,
333
+ critiques: []
334
+ }
335
+ },
336
+ checkpoint: () => Effect.void
337
+ };
338
+ const replacementControls = yield* runPipelineControlsCapabilityV1(replacementInput);
339
+ valid = [...replacementControls.valid];
340
+ critiques = [...replacementControls.critiques];
341
+ const replacementResult = yield* runTournament({
342
+ ...(input.workCheckpointStore === undefined ? {} : {
343
+ checkpoint: {
344
+ store: input.workCheckpointStore,
345
+ operationId: `${input.context.caseId}:tournament:replacement:${String(iterations + 1)}`
346
+ }
347
+ }),
348
+ repositoryRoot: input.context.repositoryRoot,
349
+ caseId: input.context.caseId,
350
+ seed,
351
+ suite,
352
+ solutions: [...valid, ...wrong],
353
+ repetitions: input.context.oracleRepetitions,
354
+ concurrency: input.context.oracleConcurrency
355
+ }).pipe(Effect.map(measureScope));
356
+ const replacementRejectionReasons = candidateRegressionReasons({
357
+ ...incumbent.adequacy,
358
+ falseRejectedSolutionIds: incumbent.adequacy.falseRejectedSolutionIds.filter((id) => !mislabeledValid.includes(id))
359
+ }, replacementResult.adequacy, incumbent.scopeCoverage.unresolvedScopeIds, replacementResult.scopeCoverage.unresolvedScopeIds);
360
+ const sequence = iterations + 1;
361
+ history = [
362
+ ...history,
363
+ {
364
+ sequence,
365
+ decision: replacementRejectionReasons.length === 0 ? "accepted" : "rejected",
366
+ targeted: mislabeledValid,
367
+ rejectionReasons: replacementRejectionReasons,
368
+ candidateAdequacy: replacementResult.adequacy
369
+ }
370
+ ];
371
+ iterations = sequence;
372
+ if (replacementRejectionReasons.length === 0) {
373
+ incumbent = replacementResult;
374
+ }
375
+ else {
376
+ valid = incumbentValid;
377
+ critiques = incumbentCritiques;
378
+ }
379
+ yield* input.checkpoint(snapshot(incumbent));
380
+ continue;
381
+ }
382
+ const targeted = sortedUnique([
383
+ ...unresolvedIds(incumbent.adequacy),
384
+ ...(incumbent.scopeCoverage.unresolvedScopeIds.length === 0
385
+ ? [] : ["historical-reference", "historical-defect"])
386
+ ]);
387
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `repairing measured oracle escapes; iteration=${String(iterations + 1)}; targets=${targeted.join(",")}`);
388
+ const authored = yield* groundedStructuredGenerationV1({
389
+ checkpointStore: input.workCheckpointStore,
390
+ languageModel,
391
+ assignment,
392
+ operationId: `${input.context.caseId}:pipeline:tournament:repair:${String(iterations + 1)}`,
393
+ instructions: REPAIR_INSTRUCTIONS,
394
+ task: {
395
+ dimension: input.context.dimension,
396
+ visibleTask: spec.visible,
397
+ analysis: spec.analysis,
398
+ groundedScope: spec.scope,
399
+ scopeCoverage: oracleCheckpoint.scopeCoverage,
400
+ measuredScopeGaps: incumbent.scopeCoverage,
401
+ targetBehavior: seed.targetBehavior,
402
+ initialCommit: seed.initialState.commit,
403
+ referenceCommit: seed.referenceCommit,
404
+ incumbentSuite: suite,
405
+ measuredAdequacy: incumbent.adequacy,
406
+ measuredObservations: incumbent.oracle.observations.filter((observation) => targeted.includes(observation.solutionId)),
407
+ priorHistory: history
408
+ },
409
+ outputSchema: TournamentRepairProposalV1,
410
+ schemaName: "routekit_pipeline_tournament_repair_v1",
411
+ tools: {
412
+ repositoryRoot: input.context.repositoryRoot,
413
+ commits: { initial: seed.initialState.commit, reference: seed.referenceCommit },
414
+ allowedTestPaths: new Set(oracleCheckpoint.suite.fixtures.map((fixture) => fixture.testPath)),
415
+ seed,
416
+ runFixture: true
417
+ },
418
+ validateSubmission: (proposal) => Effect.succeed(validateProposal({
419
+ proposal,
420
+ caseId: input.context.caseId,
421
+ targeted,
422
+ scope: spec.scope,
423
+ scopeCoverage: oracleCheckpoint.scopeCoverage
424
+ })),
425
+ maxTurns: Math.max(1, Math.trunc(input.context.budget.maxModelCalls) + 1),
426
+ maximumOutputTokens: repositoryFoundryRoleOutputCeilingV1("hill-climb-planner")
427
+ });
428
+ const candidate = yield* runTournament({
429
+ ...(input.workCheckpointStore === undefined ? {} : {
430
+ checkpoint: {
431
+ store: input.workCheckpointStore,
432
+ operationId: `${input.context.caseId}:tournament:repair:${String(iterations + 1)}`
433
+ }
434
+ }),
435
+ repositoryRoot: input.context.repositoryRoot,
436
+ caseId: input.context.caseId,
437
+ seed,
438
+ suite: authored.value.suite,
439
+ solutions: [...valid, ...wrong],
440
+ repetitions: input.context.oracleRepetitions,
441
+ concurrency: input.context.oracleConcurrency
442
+ }).pipe(Effect.map(measureScope));
443
+ const rejectionReasons = candidateRejectionReasons(incumbent, candidate);
444
+ const sequence = iterations + 1;
445
+ if (rejectionReasons.length > 0) {
446
+ history = [
447
+ ...history,
448
+ {
449
+ sequence,
450
+ decision: "rejected",
451
+ targeted,
452
+ rejectionReasons,
453
+ candidateAdequacy: candidate.adequacy
454
+ }
455
+ ];
456
+ iterations = sequence;
457
+ yield* input.checkpoint(snapshot(incumbent));
458
+ continue;
459
+ }
460
+ suite = authored.value.suite;
461
+ incumbent = candidate;
462
+ history = [
463
+ ...history,
464
+ {
465
+ sequence,
466
+ decision: "accepted",
467
+ targeted,
468
+ rejectionReasons: [],
469
+ candidateAdequacy: candidate.adequacy
470
+ }
471
+ ];
472
+ iterations = sequence;
473
+ yield* input.checkpoint(snapshot(incumbent));
474
+ }
475
+ }).pipe(Effect.mapError(normalizePipelineFailureV1));
476
+ export const runPipelineTournamentStageV1 = (input) => runPipelineTournamentCapabilityV1(input);