@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,538 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { repositoryCommandTestEvidenceV1 } from "../../adapters/repository-command-evidence.js";
3
+ import { makeRepositoryPreparationCacheV1, replayRepositoryCommandsV1 } from "../../adapters/repository-command-runner.js";
4
+ import { loadPinnedSolutionEditSourcesV1, materializeSolutionFileOverridesV1 } from "../../adapters/repository-solution-edits.js";
5
+ import { RepositoryFoundryError } from "../../errors.js";
6
+ import { REPOSITORY_FIXTURE_EVIDENCE_INSTRUCTIONS, repositoryFixtureAuthoringInstructionsV1 } from "../../repository-fixture-instructions.js";
7
+ import { assertRepositoryHiddenFixtureSuiteV1 } from "../../repository-fixture-protocol.js";
8
+ import { repositoryFoundryRoleOutputCeilingV1 } from "../../repository-foundry-plan-protocol.js";
9
+ import { assertRepositoryTaskSeedV1 } from "../../repository-task-seed-protocol.js";
10
+ import { reportFoundryAuthoringArtifactV1, reportFoundryHeartbeatV1 } from "../foundry-progress/service.js";
11
+ import { RepositoryFoundryLanguageModel } from "../language-model/service.js";
12
+ const WitnessProposal = Schema.Struct({
13
+ witnesses: Schema.Array(Schema.Struct({
14
+ scopeId: Schema.String,
15
+ explanation: Schema.String,
16
+ fileOverrides: Schema.Array(Schema.Struct({
17
+ path: Schema.String,
18
+ edits: Schema.Array(Schema.Struct({ search: Schema.String, replace: Schema.String }))
19
+ })),
20
+ testPath: Schema.String,
21
+ testSource: Schema.String,
22
+ expectedBehavior: Schema.String,
23
+ expectationMode: Schema.Literals(["changes", "preserved"])
24
+ }))
25
+ });
26
+ const INSTRUCTIONS = `Turn each supplied coverage hypothesis into one isolated executable counterexample.
27
+ Use the pinned reference as the correct implementation. Make the smallest implementation change that
28
+ violates ONLY the named visible contract clause for the supplied scenario. Preserve all other behavior.
29
+ Return one witness for every requested scopeId, with:
30
+ - exactly one implementation fileOverride with exactly one exact edit against the REFERENCE source;
31
+ - one small complete test file at an allowed testPath, containing exactly ONE named test;
32
+ - a concrete observable assertion that passes the reference and fails this mutant.
33
+ The test must call repository behavior. It must not inspect source text, patch identity, filenames,
34
+ implementation style, or another test's results. Do not use a compound mutant whose unrelated defect
35
+ could cause the assertion failure. Do not rewrite the visible contract or propose extra scope.
36
+ Avoid fixed timing assumptions: use explicit state or a bounded deterministic scheduling observation.
37
+ Use the repository's test framework and APIs shown in the pinned sources. Keep the witness focused;
38
+ do not reproduce the original test suite or invent a general replacement implementation.
39
+ Return {path, edits: [{search, replace}]}; search must occur exactly once in the supplied reference.
40
+ Keep search below 8000 characters and replace below 12000 characters. Do not bundle separate defects.
41
+ You do not receive the current generated fixtures. The host will independently check whether they
42
+ already reject your mutant. If a previous witness was invalid, repair only the listed pending scopeIds
43
+ using the actual execution diagnostics. Return only the structured proposal.
44
+
45
+ ${REPOSITORY_FIXTURE_EVIDENCE_INSTRUCTIONS}`;
46
+ const failure = (detail, cause) => new RepositoryFoundryError({
47
+ operation: "compile-reviewed-case",
48
+ detail,
49
+ ...(cause === undefined ? {} : { cause })
50
+ });
51
+ const canonicalPath = (path) => path.length > 0 &&
52
+ path.length <= 1_024 &&
53
+ !path.includes("\\") &&
54
+ !path.includes("\0") &&
55
+ !path.split("/").some((part) => part === "" || part === "." || part === "..");
56
+ // The evidence adapter has already validated reporter identity, complete execution,
57
+ // and assertion attribution. Requiring one executed test makes the witness isolated.
58
+ const oneTest = (evidence, outcome) => evidence.outcome === outcome && /^executed=1(?:;|$)/u.test(evidence.detail);
59
+ const executedPassingProbe = (evidence) => evidence.outcome === "pass" && /^executed=[1-9]\d*; failed=0; reporter=/u.test(evidence.detail);
60
+ const executedSingleAssertionFailure = (evidence) => evidence.outcome === "fail" &&
61
+ /^executed=[1-9]\d*; assertionFailures=1; reporter=/u.test(evidence.detail);
62
+ const executedTestCount = (evidence) => {
63
+ const matched = /^executed=([1-9]\d*)(?:;|$)/u.exec(evidence.detail);
64
+ return matched === null ? undefined : Number(matched[1]);
65
+ };
66
+ const diagnostic = (results) => results.map((result) => ({
67
+ recipeId: result.recipeId,
68
+ stage: result.stage,
69
+ exitCode: result.exitCode,
70
+ gradeExecuted: result.gradeExecuted,
71
+ timedOut: result.timedOut,
72
+ outputTruncated: result.outputTruncated,
73
+ stdout: result.stdout.slice(-6_000),
74
+ stderr: result.stderr.slice(-6_000)
75
+ }));
76
+ const replayWitness = Effect.fn("OracleCoverageWitness.replay")(function* (input) {
77
+ const { operationId, overlay, fileOverrides, preparationCache } = input;
78
+ const referenceCommit = input.seed.referenceCommit;
79
+ const overlays = [
80
+ ...input.seed.environment.protectedControlPaths.map((path) => ({
81
+ path,
82
+ sourceCommit: referenceCommit
83
+ })),
84
+ ...input.seed.capabilityEvidence
85
+ .filter((entry) => entry.kind === "test" && entry.path !== undefined)
86
+ .map((entry) => ({ path: entry.path, sourceCommit: referenceCommit }))
87
+ ];
88
+ const recipe = [...input.seed.environment.gradeRecipes]
89
+ .filter((entry) => entry.cwd === "." || overlay.path.startsWith(`${entry.cwd}/`))
90
+ .sort((left, right) => right.cwd.length - left.cwd.length)[0];
91
+ if (recipe === undefined)
92
+ return yield* failure("coverage witness has no reviewed test recipe");
93
+ const replayInput = {
94
+ repositoryRoot: input.repositoryRoot,
95
+ commit: input.seed.referenceCommit,
96
+ recipes: [recipe],
97
+ repetitions: 2,
98
+ trustedPreparationRecipes: input.seed.environment.trustedPreparationRecipes,
99
+ candidateValidationRecipes: input.seed.environment.candidateValidationRecipes,
100
+ overlays,
101
+ contentOverlays: [{ path: overlay.path, content: overlay.content }],
102
+ fileOverrides
103
+ };
104
+ const replay = yield* replayRepositoryCommandsV1({
105
+ ...replayInput,
106
+ preparationCache
107
+ }).pipe(Effect.match({
108
+ onFailure: (error) => ({ results: [], error }),
109
+ onSuccess: (results) => ({ results, error: undefined })
110
+ }));
111
+ const { results } = replay;
112
+ const observations = results
113
+ .filter((result) => result.recipeId === recipe.id)
114
+ .map((result) => repositoryCommandTestEvidenceV1(result, recipe.id));
115
+ const evidence = observations.length === 2 &&
116
+ observations.every((entry) => entry.outcome === observations[0].outcome && entry.detail === observations[0].detail)
117
+ ? observations[0]
118
+ : { outcome: "unknown", detail: "coverage probe did not produce two agreeing repetitions" };
119
+ yield* reportFoundryAuthoringArtifactV1({
120
+ version: 1,
121
+ operationId,
122
+ role: "coverage-witness-executor",
123
+ model: "local-replay",
124
+ reasoningEffort: "none",
125
+ schemaName: "routekit_repository_coverage_witness_replay_v1",
126
+ validation: "validated",
127
+ request: {
128
+ instructions: "Replay one coverage probe in isolation; no benchmark admission authority.",
129
+ input: { replayInput },
130
+ jsonSchema: { type: "object", properties: {}, additionalProperties: false },
131
+ maximumOutputTokens: 0
132
+ },
133
+ response: { text: JSON.stringify({ evidence, ...replay }) },
134
+ value: { diagnosticOnly: true, admissionEvidence: false, evidence, ...replay }
135
+ });
136
+ if (replay.error !== undefined ||
137
+ results.some((result) => result.stage === "trusted-preparation" || result.timedOut || result.outputTruncated)) {
138
+ return yield* failure("coverage witness stopped on infrastructure or incomplete execution", {
139
+ operationId,
140
+ evidence,
141
+ diagnostics: diagnostic(results)
142
+ });
143
+ }
144
+ return { results, evidence, operationId };
145
+ });
146
+ /**
147
+ * A witness preserves a demonstrated defect-detection obligation, not immutable
148
+ * test mechanics. This only validates a proposed revision; its caller owns
149
+ * adoption after the complete candidate tournament succeeds.
150
+ */
151
+ export const validateRepositoryOracleCoverageWitnessRevisionsV1 = Effect.fn("OracleCoverageWitness.validateRevisions")(function* (input) {
152
+ return yield* Effect.scoped(Effect.gen(function* () {
153
+ const changes = yield* Effect.try({
154
+ try: () => {
155
+ assertRepositoryTaskSeedV1(input.seed);
156
+ assertRepositoryHiddenFixtureSuiteV1(input.suite);
157
+ if (input.seed.status !== "qualified" ||
158
+ input.seed.referenceCommit === undefined ||
159
+ input.operationId.trim().length === 0 ||
160
+ new Set(input.retained.map((entry) => entry.witness.fixture.id)).size !==
161
+ input.retained.length)
162
+ throw new Error("revisions require a qualified reference and unique retained witnesses");
163
+ return input.retained.flatMap((entry) => {
164
+ const { witness } = entry;
165
+ const fixture = input.suite.fixtures.find((candidate) => candidate.id === witness.fixture.id);
166
+ const overlay = input.suite.overlays.find((candidate) => candidate.fixtureIds[0] === witness.fixture.id);
167
+ if (witness.referenceCommit !== input.seed.referenceCommit ||
168
+ !executedPassingProbe(witness.referenceEvidence) ||
169
+ !executedSingleAssertionFailure(witness.mutantEvidence) ||
170
+ witness.fileOverrides.length !== 1 ||
171
+ witness.fileOverrides.some((override) => !canonicalPath(override.path) ||
172
+ input.seed.environment.protectedControlPaths.includes(override.path) ||
173
+ input.seed.capabilityEvidence.some((evidence) => evidence.kind === "test" && evidence.path === override.path)) ||
174
+ fixture === undefined ||
175
+ Object.entries(witness.fixture).some(([key, value]) => fixture[key] !== value) ||
176
+ overlay === undefined ||
177
+ overlay.path !== witness.overlay.path ||
178
+ entry.overlay.path !== witness.overlay.path ||
179
+ entry.overlay.fixtureIds.length !== 1 ||
180
+ entry.overlay.fixtureIds[0] !== witness.fixture.id ||
181
+ !canonicalPath(overlay.path) ||
182
+ input.seed.environment.protectedControlPaths.includes(overlay.path) ||
183
+ !input.seed.capabilityEvidence.some((evidence) => evidence.kind === "test" && evidence.path === overlay.path) ||
184
+ overlay.content.length > 32_000)
185
+ throw new Error("witness revisions must preserve original reference, mutant, metadata and reviewed path");
186
+ return overlay.content === entry.overlay.content ? [] : [{ ...entry, overlay }];
187
+ });
188
+ },
189
+ catch: (cause) => failure("coverage witness revision failed identity validation", cause)
190
+ });
191
+ if (changes.length === 0)
192
+ return [];
193
+ const preparationCache = yield* makeRepositoryPreparationCacheV1({
194
+ repositoryRoot: input.repositoryRoot,
195
+ commits: [input.seed.referenceCommit],
196
+ trustedPreparationRecipes: input.seed.environment.trustedPreparationRecipes
197
+ });
198
+ return yield* Effect.forEach(changes, (entry) => Effect.gen(function* () {
199
+ const operationId = `${input.operationId}:${entry.witness.fixture.id}`;
200
+ const reference = yield* replayWitness({
201
+ repositoryRoot: input.repositoryRoot,
202
+ seed: input.seed,
203
+ preparationCache,
204
+ operationId: `${operationId}:reference`,
205
+ overlay: entry.overlay,
206
+ fileOverrides: []
207
+ });
208
+ const referenceCompatible = executedPassingProbe(reference.evidence) &&
209
+ executedTestCount(reference.evidence) ===
210
+ executedTestCount(entry.witness.referenceEvidence);
211
+ const mutant = referenceCompatible
212
+ ? yield* replayWitness({
213
+ repositoryRoot: input.repositoryRoot,
214
+ seed: input.seed,
215
+ preparationCache,
216
+ operationId: `${operationId}:mutant`,
217
+ overlay: entry.overlay,
218
+ fileOverrides: entry.witness.fileOverrides
219
+ })
220
+ : undefined;
221
+ const validated = referenceCompatible &&
222
+ mutant !== undefined &&
223
+ executedSingleAssertionFailure(mutant.evidence) &&
224
+ executedTestCount(mutant.evidence) ===
225
+ executedTestCount(entry.witness.mutantEvidence);
226
+ const revision = {
227
+ scopeId: entry.witness.scopeId,
228
+ fixtureId: entry.witness.fixture.id,
229
+ originalExecutionOperationId: entry.witness.executionOperationId,
230
+ executionOperationId: operationId,
231
+ referenceCommit: entry.witness.referenceCommit,
232
+ beforeOverlay: input.retained.find((retained) => retained.witness.fixture.id === entry.witness.fixture.id).overlay,
233
+ overlay: entry.overlay,
234
+ referenceEvidence: reference.evidence,
235
+ ...(mutant === undefined ? {} : { mutantEvidence: mutant.evidence }),
236
+ status: validated ? "validated" : "rejected",
237
+ detail: validated
238
+ ? "Two reference passes and two isolated assertion failures preserve the original witnessed defect."
239
+ : "The revised witness did not establish two reference passes and two isolated original-mutant assertion failures."
240
+ };
241
+ yield* reportFoundryAuthoringArtifactV1({
242
+ version: 1,
243
+ operationId,
244
+ role: "coverage-witness-executor",
245
+ model: "host",
246
+ reasoningEffort: "none",
247
+ schemaName: "routekit_repository_coverage_witness_revision_v1",
248
+ validation: "validated",
249
+ request: {
250
+ instructions: "Validate revised witness mechanics against the original reference and mutant. This does not adopt a suite or admit a benchmark.",
251
+ input: {
252
+ witness: entry.witness,
253
+ beforeOverlay: revision.beforeOverlay,
254
+ overlay: entry.overlay
255
+ },
256
+ jsonSchema: { type: "object", properties: {}, additionalProperties: false },
257
+ maximumOutputTokens: 0
258
+ },
259
+ response: { text: JSON.stringify(revision) },
260
+ value: { diagnosticOnly: true, admissionEvidence: false, ...revision }
261
+ });
262
+ yield* reportFoundryHeartbeatV1({
263
+ role: "coverage-witness-executor",
264
+ detail: `coverage witness revision; fixture=${revision.fixtureId}; status=${revision.status}; reference=${reference.evidence.outcome}; original mutant=${mutant?.evidence.outcome ?? "unmeasured"}`
265
+ });
266
+ return revision;
267
+ }), { concurrency: 2 });
268
+ }));
269
+ });
270
+ /** Resolve a fixed set of critic hypotheses through execution, without minting a model approval. */
271
+ export const resolveRepositoryOracleCoverageWitnessesV1 = Effect.fn("OracleCoverageWitness.resolve")(function* (input) {
272
+ return yield* Effect.scoped(Effect.gen(function* () {
273
+ const referenceCommit = input.seed.referenceCommit;
274
+ const claims = input.review.scopeCoverage.filter((entry) => entry.outcome !== "covered");
275
+ if (input.seed.status !== "qualified" ||
276
+ referenceCommit === undefined ||
277
+ claims.length === 0 ||
278
+ claims.length > 16 ||
279
+ new Set(claims.map((entry) => entry.scopeId)).size !== claims.length ||
280
+ !Number.isSafeInteger(input.maximumAttempts) ||
281
+ input.maximumAttempts < 1 ||
282
+ input.maximumAttempts > 2 ||
283
+ !/^[a-z][a-z0-9-]{0,63}$/u.test(input.witnessPrefix)) {
284
+ return yield* failure("coverage witnesses require a qualified reference, fixed claims and a bounded allowance");
285
+ }
286
+ yield* Effect.try({
287
+ try: () => {
288
+ assertRepositoryTaskSeedV1(input.seed);
289
+ assertRepositoryHiddenFixtureSuiteV1(input.suite);
290
+ if (input.operationId.trim().length === 0 ||
291
+ input.review.verdict !== "revise" ||
292
+ input.allowedSolutionPaths.size === 0 ||
293
+ [...input.allowedSolutionPaths].some((path) => !canonicalPath(path) ||
294
+ input.allowedTestPaths.has(path) ||
295
+ input.seed.environment.protectedControlPaths.includes(path) ||
296
+ input.seed.capabilityEvidence.some((entry) => entry.kind === "test" && entry.path === path)) ||
297
+ input.suite.overlays.some((overlay) => !canonicalPath(overlay.path) ||
298
+ !input.allowedTestPaths.has(overlay.path) ||
299
+ input.seed.environment.protectedControlPaths.includes(overlay.path))) {
300
+ throw new Error("witness paths must preserve reviewed tests and protected controls");
301
+ }
302
+ },
303
+ catch: (cause) => failure("coverage witnesses require a valid incumbent fixture suite", cause)
304
+ });
305
+ const languageModel = yield* RepositoryFoundryLanguageModel;
306
+ const sources = yield* loadPinnedSolutionEditSourcesV1({
307
+ repositoryRoot: input.repositoryRoot,
308
+ initialCommit: referenceCommit,
309
+ visibleSources: input.referenceSources,
310
+ allowedPaths: input.allowedSolutionPaths
311
+ });
312
+ const preparationCache = yield* makeRepositoryPreparationCacheV1({
313
+ repositoryRoot: input.repositoryRoot,
314
+ commits: [referenceCommit],
315
+ trustedPreparationRecipes: input.seed.environment.trustedPreparationRecipes
316
+ });
317
+ const run = (operationId, overlay, fileOverrides) => replayWitness({
318
+ repositoryRoot: input.repositoryRoot,
319
+ seed: input.seed,
320
+ preparationCache,
321
+ operationId,
322
+ overlay,
323
+ fileOverrides
324
+ });
325
+ const resolved = [];
326
+ const modelCalls = [];
327
+ let pending = claims;
328
+ let previousDiagnostics = [];
329
+ for (let attempt = 0; attempt < input.maximumAttempts; attempt += 1) {
330
+ yield* input.onGenerationAttempt(attempt);
331
+ const generated = yield* languageModel.generateStructured({
332
+ plan: input.modelPlan,
333
+ role: "oracle-designer",
334
+ operationId: `${input.operationId}:author:${String(attempt + 1)}`,
335
+ instructions: repositoryFixtureAuthoringInstructionsV1(INSTRUCTIONS, input.oracleCoverageWitnessVersion, input.oracleRepairFeedbackVersion),
336
+ input: {
337
+ ...input.context,
338
+ referenceCommit,
339
+ referenceSources: input.referenceSources,
340
+ allowedSolutionPaths: [...input.allowedSolutionPaths],
341
+ allowedTestPaths: [...input.allowedTestPaths],
342
+ gradeRecipes: input.seed.environment.gradeRecipes,
343
+ coverageHypotheses: pending,
344
+ previousDiagnostics
345
+ },
346
+ schemaName: "routekit_repository_oracle_coverage_witnesses_v1",
347
+ outputSchema: WitnessProposal,
348
+ maximumOutputTokens: repositoryFoundryRoleOutputCeilingV1("oracle-designer")
349
+ });
350
+ modelCalls.push(generated.call);
351
+ const validation = yield* Effect.try({
352
+ try: () => {
353
+ const expected = new Set(pending.map((entry) => entry.scopeId));
354
+ const proposed = generated.value.witnesses;
355
+ if (proposed.length !== expected.size ||
356
+ new Set(proposed.map((entry) => entry.scopeId)).size !== expected.size ||
357
+ proposed.some((entry) => !expected.has(entry.scopeId) ||
358
+ !canonicalPath(entry.testPath) ||
359
+ !input.allowedTestPaths.has(entry.testPath) ||
360
+ input.seed.environment.protectedControlPaths.includes(entry.testPath) ||
361
+ !input.seed.capabilityEvidence.some((evidence) => evidence.kind === "test" && evidence.path === entry.testPath) ||
362
+ entry.testSource.trim().length === 0 ||
363
+ entry.testSource.length > 32_000 ||
364
+ entry.explanation.trim().length === 0 ||
365
+ entry.expectedBehavior.trim().length === 0 ||
366
+ entry.fileOverrides.length !== 1 ||
367
+ entry.fileOverrides[0].edits.length !== 1 ||
368
+ entry.fileOverrides[0].edits[0].search.length > 8_000 ||
369
+ entry.fileOverrides[0].edits[0].replace.length > 12_000)) {
370
+ throw new Error("witnesses must match every pending scope once and use reviewed paths");
371
+ }
372
+ return proposed.map((entry) => {
373
+ const materialized = materializeSolutionFileOverridesV1({
374
+ fileOverrides: entry.fileOverrides,
375
+ sources,
376
+ allowedPaths: input.allowedSolutionPaths
377
+ });
378
+ if (materialized.fileOverrides.every((override) => sources.find((source) => source.path === override.path)?.content ===
379
+ override.content)) {
380
+ throw new Error("a witness mutant must change the pinned reference implementation");
381
+ }
382
+ const id = `${input.witnessPrefix}-${String(claims.findIndex((claim) => claim.scopeId === entry.scopeId) + 1)}`;
383
+ if (input.suite.fixtures.some((fixture) => fixture.id === id)) {
384
+ throw new Error("coverage witness identity collides with an incumbent fixture");
385
+ }
386
+ return {
387
+ ...entry,
388
+ fileOverrides: materialized.fileOverrides,
389
+ fixture: {
390
+ id,
391
+ kind: "boundary",
392
+ source: "generated",
393
+ description: `Executed counterexample for ${entry.scopeId}: ${entry.explanation}`,
394
+ expectedBehavior: entry.expectedBehavior,
395
+ testPath: entry.testPath,
396
+ expectationMode: entry.expectationMode
397
+ },
398
+ overlay: { path: entry.testPath, content: entry.testSource, fixtureIds: [id] }
399
+ };
400
+ });
401
+ },
402
+ catch: (cause) => failure("coverage witness proposal failed validation", cause)
403
+ }).pipe(Effect.match({
404
+ onFailure: (error) => ({ ok: false, error }),
405
+ onSuccess: (proposals) => ({ ok: true, proposals })
406
+ }));
407
+ if (!validation.ok) {
408
+ previousDiagnostics = [
409
+ {
410
+ detail: validation.error.detail,
411
+ cause: validation.error.cause instanceof Error
412
+ ? validation.error.cause.message
413
+ : String(validation.error.cause),
414
+ priorProposal: generated.value
415
+ }
416
+ ];
417
+ continue;
418
+ }
419
+ const reports = yield* Effect.forEach(validation.proposals, (proposal) => Effect.gen(function* () {
420
+ const operationId = `${input.operationId}:execution:${String(attempt + 1)}:${proposal.fixture.id}`;
421
+ const reference = yield* run(`${operationId}:reference`, proposal.overlay, []);
422
+ const mutant = oneTest(reference.evidence, "pass")
423
+ ? yield* run(`${operationId}:mutant`, proposal.overlay, proposal.fileOverrides)
424
+ : undefined;
425
+ const valid = oneTest(reference.evidence, "pass") &&
426
+ mutant !== undefined &&
427
+ oneTest(mutant.evidence, "fail");
428
+ const incumbentEvidence = [];
429
+ const incumbentReplays = [];
430
+ if (valid) {
431
+ for (const [index, overlay] of input.suite.overlays.entries()) {
432
+ const replay = yield* run(`${operationId}:incumbent:${String(index + 1)}`, overlay, proposal.fileOverrides);
433
+ incumbentReplays.push(replay.operationId);
434
+ incumbentEvidence.push({
435
+ fixtureId: overlay.fixtureIds[0],
436
+ evidence: replay.evidence
437
+ });
438
+ if (replay.evidence.outcome !== "pass")
439
+ break;
440
+ }
441
+ }
442
+ const known = valid &&
443
+ incumbentEvidence.length > 0 &&
444
+ incumbentEvidence.every((entry) => entry.evidence.outcome !== "unknown");
445
+ const report = {
446
+ scopeId: proposal.scopeId,
447
+ proposal,
448
+ reference: { evidence: reference.evidence, results: reference.results },
449
+ ...(mutant === undefined
450
+ ? {}
451
+ : { mutant: { evidence: mutant.evidence, results: mutant.results } }),
452
+ incumbentEvidence,
453
+ replayOperationIds: [
454
+ reference.operationId,
455
+ ...(mutant === undefined ? [] : [mutant.operationId]),
456
+ ...incumbentReplays
457
+ ],
458
+ resolved: known
459
+ };
460
+ yield* reportFoundryAuthoringArtifactV1({
461
+ version: 1,
462
+ operationId,
463
+ role: "coverage-witness-executor",
464
+ model: "host",
465
+ reasoningEffort: "none",
466
+ schemaName: "routekit_repository_coverage_witness_execution_v1",
467
+ validation: "validated",
468
+ request: {
469
+ instructions: "Host execution of one fixed coverage hypothesis; not a model approval or benchmark admission.",
470
+ input: { referenceCommit, suite: input.suite, scopeId: proposal.scopeId },
471
+ jsonSchema: { type: "object" },
472
+ maximumOutputTokens: 0
473
+ },
474
+ response: { text: JSON.stringify(report) },
475
+ value: { diagnosticOnly: true, admissionEvidence: false, ...report }
476
+ });
477
+ yield* reportFoundryHeartbeatV1({
478
+ role: "coverage-witness-executor",
479
+ detail: `coverage witness; reference=${reference.evidence.outcome}; mutant=${mutant?.evidence.outcome ?? "unmeasured"}; incumbent=${known ? (incumbentEvidence.some((entry) => entry.evidence.outcome === "fail") ? "detected" : "escaped") : "unresolved"}; resolved=${String(known)}`
480
+ });
481
+ if (!known) {
482
+ return {
483
+ scopeId: proposal.scopeId,
484
+ diagnostics: {
485
+ scopeId: proposal.scopeId,
486
+ priorProposal: proposal,
487
+ referenceEvidence: reference.evidence,
488
+ referenceDiagnostics: diagnostic(reference.results),
489
+ mutantEvidence: mutant?.evidence,
490
+ mutantDiagnostics: mutant === undefined ? [] : diagnostic(mutant.results),
491
+ incumbentEvidence
492
+ }
493
+ };
494
+ }
495
+ const witness = {
496
+ scopeId: proposal.scopeId,
497
+ hypothesis: claims.find((claim) => claim.scopeId === proposal.scopeId)
498
+ .counterexample,
499
+ outcome: incumbentEvidence.some((entry) => entry.evidence.outcome === "fail")
500
+ ? "already-detected"
501
+ : "confirmed-escape",
502
+ explanation: proposal.explanation,
503
+ referenceCommit,
504
+ fileOverrides: proposal.fileOverrides,
505
+ fixture: proposal.fixture,
506
+ overlay: proposal.overlay,
507
+ referenceEvidence: reference.evidence,
508
+ mutantEvidence: mutant.evidence,
509
+ incumbentEvidence,
510
+ executionOperationId: operationId
511
+ };
512
+ resolved.push(witness);
513
+ return { scopeId: proposal.scopeId, diagnostics: undefined };
514
+ }), { concurrency: 2 });
515
+ pending = claims.filter((claim) => !resolved.some((entry) => entry.scopeId === claim.scopeId));
516
+ if (pending.length === 0) {
517
+ const ordered = claims.map((claim) => resolved.find((entry) => entry.scopeId === claim.scopeId));
518
+ // Retain the isolated test for every resolved hypothesis. Retaining a whole
519
+ // incumbent overlay instead could freeze unrelated overconstraints and
520
+ // prevent a later valid-solution repair. Already-detected claims remain
521
+ // separately labeled and never count as a newly detected escape.
522
+ const additions = ordered;
523
+ const suite = {
524
+ ...input.suite,
525
+ fixtures: [...input.suite.fixtures, ...additions.map((entry) => entry.fixture)],
526
+ overlays: [...input.suite.overlays, ...additions.map((entry) => entry.overlay)]
527
+ };
528
+ yield* Effect.try({
529
+ try: () => assertRepositoryHiddenFixtureSuiteV1(suite),
530
+ catch: (cause) => failure("coverage witnesses could not be added to the incumbent", cause)
531
+ });
532
+ return { suite, witnesses: ordered, modelCalls };
533
+ }
534
+ previousDiagnostics = reports.flatMap((report) => report.diagnostics === undefined ? [] : [report.diagnostics]);
535
+ }
536
+ return yield* failure(`oracle-coverage-witness-exhausted: ${String(pending.length)} coverage hypotheses lack valid isolated execution evidence`, { pendingScopeIds: pending.map((entry) => entry.scopeId), previousDiagnostics });
537
+ }));
538
+ });