@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,1138 @@
1
+ import assert from "node:assert/strict";
2
+ import { readFileSync } from "node:fs";
3
+ import { test } from "node:test";
4
+ import { Effect, Layer } from "effect";
5
+ import { EvalAuthoringTransport } from "../project-authoring.js";
6
+ import { assertRepositoryBehaviorMapV1 } from "../repository-behavior-protocol.js";
7
+ import { repositoryCandidateCaseProjectionV1 } from "../repository-benchmark-protocol.js";
8
+ import { assertRepositoryHiddenFixtureSuiteV1 } from "../repository-fixture-protocol.js";
9
+ import { admitRepositoryBenchmarkCaseV1, compileValidatedBenchmarkLibraryV1, evaluateRepositoryOracleAdequacyV1, repositoryBehavioralFingerprintV1 } from "../repository-quality-policy.js";
10
+ import { compileRepositoryRoutingBenchmarkV1 } from "../repository-routing-quality-policy.js";
11
+ import { gpt56RepositoryRoutingModelPlanV1 } from "../repository-routing-model-protocol.js";
12
+ import { assertRepositoryRoutingLabelingPlanV1 } from "../repository-routing-plan-protocol.js";
13
+ import { assertRepositoryTaskSeedV1 } from "../repository-task-seed-protocol.js";
14
+ import { compileRepositoryFoundryImprovementCycleV1 } from "../services/improvement-loop/service.js";
15
+ import { authorRepositoryReviewedDimensionLabelV1 } from "../services/dimension-labeling/service.js";
16
+ import { RepositoryFoundryLanguageModelLive } from "../services/language-model/service.js";
17
+ import { executeRepositoryRoutingLabelingV1, planRepositoryRoutingLabelingV1 } from "../services/routing-benchmark/service.js";
18
+ const oracle = (overrides = {}) => ({
19
+ version: 1,
20
+ caseId: "case-stream-order",
21
+ hardFailurePolicy: "any-critical-hard-clause-fails",
22
+ fixtures: [
23
+ {
24
+ id: "provider-sequence",
25
+ kind: "counterfactual",
26
+ description: "A provider sequence with a changed terminal-event state.",
27
+ expectedBehavior: "The terminal-event invariant remains explicit.",
28
+ expectationMode: "changes",
29
+ source: "reviewed",
30
+ testPath: "packages/provider/src/stream.test.ts"
31
+ }
32
+ ],
33
+ clauses: [
34
+ {
35
+ id: "ordered",
36
+ kind: "ordered-events",
37
+ critical: true,
38
+ description: "The stream has exactly one terminal event and no later output.",
39
+ eventTypes: ["output", "completed"],
40
+ terminalEvent: "completed"
41
+ },
42
+ {
43
+ id: "usage",
44
+ kind: "property",
45
+ critical: true,
46
+ description: "Usage is preserved.",
47
+ propertyId: "usage-preserved",
48
+ fixtureIds: ["provider-sequence"]
49
+ }
50
+ ],
51
+ solutions: [
52
+ {
53
+ id: "historical-reference",
54
+ kind: "historical-reference",
55
+ family: "valid",
56
+ expectedClass: "valid"
57
+ },
58
+ {
59
+ id: "alternate-valid",
60
+ kind: "independent-valid",
61
+ family: "valid",
62
+ expectedClass: "valid"
63
+ },
64
+ {
65
+ id: "duplicate-terminal",
66
+ kind: "mutation",
67
+ family: "event-order",
68
+ expectedClass: "wrong"
69
+ },
70
+ {
71
+ id: "drops-usage",
72
+ kind: "model-near-miss",
73
+ family: "integration",
74
+ expectedClass: "wrong"
75
+ }
76
+ ],
77
+ observations: [
78
+ ...["historical-reference", "alternate-valid"].flatMap((solutionId) => ["ordered", "usage"].flatMap((clauseId) => [
79
+ {
80
+ solutionId,
81
+ clauseId,
82
+ repetition: 1,
83
+ outcome: "pass",
84
+ detail: "passed"
85
+ },
86
+ {
87
+ solutionId,
88
+ clauseId,
89
+ repetition: 2,
90
+ outcome: "pass",
91
+ detail: "passed"
92
+ }
93
+ ])),
94
+ {
95
+ solutionId: "duplicate-terminal",
96
+ clauseId: "ordered",
97
+ repetition: 1,
98
+ outcome: "fail",
99
+ detail: "two terminal events"
100
+ },
101
+ {
102
+ solutionId: "duplicate-terminal",
103
+ clauseId: "ordered",
104
+ repetition: 2,
105
+ outcome: "fail",
106
+ detail: "two terminal events"
107
+ },
108
+ {
109
+ solutionId: "duplicate-terminal",
110
+ clauseId: "usage",
111
+ repetition: 1,
112
+ outcome: "pass",
113
+ detail: "usage happened to survive"
114
+ },
115
+ {
116
+ solutionId: "duplicate-terminal",
117
+ clauseId: "usage",
118
+ repetition: 2,
119
+ outcome: "pass",
120
+ detail: "usage happened to survive"
121
+ },
122
+ {
123
+ solutionId: "drops-usage",
124
+ clauseId: "ordered",
125
+ repetition: 1,
126
+ outcome: "pass",
127
+ detail: "ordering fixed"
128
+ },
129
+ {
130
+ solutionId: "drops-usage",
131
+ clauseId: "ordered",
132
+ repetition: 2,
133
+ outcome: "pass",
134
+ detail: "ordering fixed"
135
+ },
136
+ {
137
+ solutionId: "drops-usage",
138
+ clauseId: "usage",
139
+ repetition: 1,
140
+ outcome: "fail",
141
+ detail: "usage missing"
142
+ },
143
+ {
144
+ solutionId: "drops-usage",
145
+ clauseId: "usage",
146
+ repetition: 2,
147
+ outcome: "fail",
148
+ detail: "usage missing"
149
+ }
150
+ ],
151
+ knownLimitations: [],
152
+ ...overrides
153
+ });
154
+ const findings = [
155
+ "authenticity",
156
+ "specification-sufficiency",
157
+ "oracle-adequacy",
158
+ "stability",
159
+ "distinctness",
160
+ "realism",
161
+ "leakage",
162
+ "triviality",
163
+ "coverage"
164
+ ];
165
+ const routingBasis = () => JSON.parse(readFileSync(new URL("../../../../test/fixtures/routing-v3/examples/routing-basis-v3.example.json", import.meta.url), "utf8"));
166
+ const routingPolicy = {
167
+ activeDimensionThreshold: 0.5,
168
+ maximumUnknownProbability: 0.2,
169
+ minimumDominanceMargin: 0.35,
170
+ minimumCasesPerDimension: 1
171
+ };
172
+ const reviewedDimensionLabel = (input) => {
173
+ const labelFor = (primaryDimensionId, secondaryDimensionId) => ({
174
+ caseId: input.caseId,
175
+ basisDigest: input.basis.basisDigest,
176
+ scores: input.basis.dimensions.map((dimension) => ({
177
+ dimensionId: dimension.id,
178
+ score: dimension.id === primaryDimensionId
179
+ ? 0.8
180
+ : dimension.id === secondaryDimensionId
181
+ ? 0.55
182
+ : 0.02
183
+ })),
184
+ unknownProbability: 0.05
185
+ });
186
+ const reviewerBDimensionId = input.reviewerBDimensionId ?? input.primaryDimensionId;
187
+ return {
188
+ version: 1,
189
+ caseId: input.caseId,
190
+ basisDigest: input.basis.basisDigest,
191
+ authorModel: "codex/gpt-5.6-sol",
192
+ authorCallId: "call-dimension-labeler",
193
+ authorDetail: "The visible task is dominated by the selected semantic workload.",
194
+ authorEvidenceIds: ["benchmark-case:/visible", "routing-basis:/dimensions/0"],
195
+ label: labelFor(input.primaryDimensionId, input.secondaryDimensionId),
196
+ reviews: [
197
+ {
198
+ reviewerId: "dimension-critic-a",
199
+ model: "codex/gpt-5.6-terra",
200
+ callId: "call-dimension-critic-a",
201
+ outcome: "approve",
202
+ primaryDimensionId: input.primaryDimensionId,
203
+ detail: "The visible task and repository evidence are dominated by this dimension.",
204
+ evidenceIds: ["benchmark-case:/visible", "routing-basis:/dimensions/0"],
205
+ independentLabel: labelFor(input.primaryDimensionId)
206
+ },
207
+ {
208
+ reviewerId: "dimension-critic-b",
209
+ model: "codex/gpt-5.6-luna",
210
+ callId: "call-dimension-critic-b",
211
+ outcome: reviewerBDimensionId === input.primaryDimensionId ? "approve" : "reject",
212
+ primaryDimensionId: reviewerBDimensionId,
213
+ detail: "The nearest confusable dimensions are explicitly excluded.",
214
+ evidenceIds: ["benchmark-case:/qualityFindings/0", "routing-basis:/dimensions/0"],
215
+ independentLabel: labelFor(reviewerBDimensionId)
216
+ }
217
+ ]
218
+ };
219
+ };
220
+ test("fixture protocol encodes counterfactual changes and metamorphic preservation", () => {
221
+ const base = {
222
+ version: 1,
223
+ caseId: "case-fixture-mode-contract",
224
+ overlays: [
225
+ {
226
+ path: "src/behavior.test.ts",
227
+ content: "test('fixture', () => {});",
228
+ fixtureIds: ["metamorphic-mode"]
229
+ }
230
+ ]
231
+ };
232
+ assert.throws(() => assertRepositoryHiddenFixtureSuiteV1({
233
+ ...base,
234
+ fixtures: [
235
+ {
236
+ id: "metamorphic-mode",
237
+ kind: "metamorphic",
238
+ description: "Vary a non-semantic input.",
239
+ expectedBehavior: "The externally observable result is preserved.",
240
+ expectationMode: "changes",
241
+ source: "generated",
242
+ testPath: "src/behavior.test.ts"
243
+ }
244
+ ]
245
+ }), /expectationMode/u);
246
+ assert.doesNotThrow(() => assertRepositoryHiddenFixtureSuiteV1({
247
+ ...base,
248
+ fixtures: [
249
+ {
250
+ id: "metamorphic-mode",
251
+ kind: "metamorphic",
252
+ description: "Vary a non-semantic input.",
253
+ expectedBehavior: "The externally observable result is preserved.",
254
+ expectationMode: "preserved",
255
+ source: "generated",
256
+ testPath: "src/behavior.test.ts"
257
+ }
258
+ ]
259
+ }));
260
+ });
261
+ const admittedCase = (id = "case-stream-order", fingerprint) => {
262
+ const hidden = oracle({ caseId: id });
263
+ const adequacy = evaluateRepositoryOracleAdequacyV1(hidden);
264
+ return admitRepositoryBenchmarkCaseV1({
265
+ draft: {
266
+ version: 1,
267
+ id,
268
+ capabilityId: "provider-stream-translation",
269
+ familyId: "terminal-event-repair",
270
+ seedId: "seed-historical-stream-fix",
271
+ lane: "repository-agent",
272
+ visible: {
273
+ lane: "repository-agent",
274
+ id,
275
+ requestText: "Fix the adapter so it emits one terminal event and preserves usage.",
276
+ checkoutCommit: "a".repeat(40),
277
+ allowedTools: ["read", "search", "edit", "shell", "test"],
278
+ constraints: ["Do not change the public wire contract."]
279
+ },
280
+ hidden,
281
+ adequacy,
282
+ qualityFindings: findings.map((axis) => ({
283
+ axis,
284
+ outcome: "pass",
285
+ detail: `${axis} passed`,
286
+ evidence: [],
287
+ evidenceIds: [`test-fixture:${axis}`]
288
+ })),
289
+ behavioralFingerprint: fingerprint ??
290
+ repositoryBehavioralFingerprintV1({
291
+ capabilityId: "provider-stream-translation",
292
+ familyId: "terminal-event-repair",
293
+ behaviorClauses: ["one terminal event", "no output after terminal", "preserve usage"],
294
+ oracle: hidden
295
+ })
296
+ }
297
+ });
298
+ };
299
+ test("oracle adequacy accepts valid alternatives and rejects every wrong family", () => {
300
+ const report = evaluateRepositoryOracleAdequacyV1(oracle());
301
+ assert.equal(report.admitted, true);
302
+ assert.deepEqual(report.falseAcceptedSolutionIds, []);
303
+ assert.deepEqual(report.falseRejectedSolutionIds, []);
304
+ assert.deepEqual(report.unstableSolutionIds, []);
305
+ assert.deepEqual(report.insufficientObservationPairs, []);
306
+ assert.deepEqual(report.mutationFamilyKills, [
307
+ { family: "event-order", killed: 1, total: 1 },
308
+ { family: "integration", killed: 1, total: 1 }
309
+ ]);
310
+ });
311
+ test("oracle adequacy rejects surviving wrong solutions, false rejections, and instability", () => {
312
+ const weak = oracle({
313
+ observations: oracle().observations.map((observation) => {
314
+ if (observation.solutionId === "duplicate-terminal" && observation.clauseId === "ordered") {
315
+ return { ...observation, outcome: "pass" };
316
+ }
317
+ if (observation.solutionId === "alternate-valid" &&
318
+ observation.clauseId === "usage" &&
319
+ observation.repetition === 2) {
320
+ return { ...observation, outcome: "fail" };
321
+ }
322
+ return observation;
323
+ })
324
+ });
325
+ const report = evaluateRepositoryOracleAdequacyV1(weak);
326
+ assert.equal(report.admitted, false);
327
+ assert.deepEqual(report.falseAcceptedSolutionIds, ["duplicate-terminal"]);
328
+ assert.deepEqual(report.falseRejectedSolutionIds, ["alternate-valid"]);
329
+ assert.deepEqual(report.unstableSolutionIds, ["alternate-valid"]);
330
+ });
331
+ test("oracle adequacy cannot count an unexecuted critical clause as a mutant kill", () => {
332
+ const incomplete = oracle({
333
+ observations: oracle().observations.filter((observation) => !(observation.solutionId === "duplicate-terminal" && observation.clauseId === "usage"))
334
+ });
335
+ const report = evaluateRepositoryOracleAdequacyV1(incomplete);
336
+ assert.equal(report.admitted, false);
337
+ assert.deepEqual(report.insufficientObservationPairs, ["duplicate-terminal/usage"]);
338
+ assert.deepEqual(report.mutationFamilyKills.find((family) => family.family === "event-order"), { family: "event-order", killed: 0, total: 1 });
339
+ });
340
+ test("inconclusive execution neither earns mutant kills nor fabricates oracle classification errors", () => {
341
+ const incomplete = oracle({
342
+ observations: oracle().observations.map((observation) => observation.solutionId === "duplicate-terminal" ||
343
+ observation.solutionId === "alternate-valid"
344
+ ? {
345
+ ...observation,
346
+ outcome: "unknown",
347
+ detail: "candidate validation failed before grading"
348
+ }
349
+ : observation)
350
+ });
351
+ const report = evaluateRepositoryOracleAdequacyV1(incomplete);
352
+ assert.equal(report.admitted, false);
353
+ assert.deepEqual(report.falseAcceptedSolutionIds, []);
354
+ assert.deepEqual(report.falseRejectedSolutionIds, []);
355
+ assert.deepEqual(report.mutationFamilyKills.find((family) => family.family === "event-order"), {
356
+ family: "event-order",
357
+ killed: 0,
358
+ total: 1
359
+ });
360
+ assert.ok(report.rejectionReasons.some((reason) => reason.includes("inconclusive solution observations")));
361
+ });
362
+ test("candidate-policy rejection safely short-circuits hidden execution for reward hacking", () => {
363
+ const base = oracle();
364
+ const protectedClause = {
365
+ id: "candidate-policy-protected-paths",
366
+ kind: "candidate-policy",
367
+ critical: true,
368
+ description: "Candidates cannot rewrite hidden tests.",
369
+ policyId: "protected-controls-and-hidden-tests",
370
+ forbiddenPaths: ["packages/provider/src/stream.test.ts"]
371
+ };
372
+ const solutionIds = base.solutions.map((solution) => solution.id);
373
+ const guarded = {
374
+ ...base,
375
+ clauses: [protectedClause, ...base.clauses],
376
+ solutions: [
377
+ ...base.solutions,
378
+ {
379
+ id: "rewrite-hidden-test",
380
+ kind: "reward-hacking",
381
+ family: "reward-hacking",
382
+ expectedClass: "wrong"
383
+ }
384
+ ],
385
+ observations: [
386
+ ...solutionIds.flatMap((solutionId) => [
387
+ {
388
+ solutionId,
389
+ clauseId: protectedClause.id,
390
+ repetition: 1,
391
+ outcome: "pass",
392
+ detail: "candidate preflight passed"
393
+ },
394
+ {
395
+ solutionId,
396
+ clauseId: protectedClause.id,
397
+ repetition: 2,
398
+ outcome: "pass",
399
+ detail: "candidate preflight passed"
400
+ }
401
+ ]),
402
+ ...base.observations,
403
+ {
404
+ solutionId: "rewrite-hidden-test",
405
+ clauseId: protectedClause.id,
406
+ repetition: 1,
407
+ outcome: "fail",
408
+ detail: "protected path override"
409
+ },
410
+ {
411
+ solutionId: "rewrite-hidden-test",
412
+ clauseId: protectedClause.id,
413
+ repetition: 2,
414
+ outcome: "fail",
415
+ detail: "protected path override"
416
+ }
417
+ ]
418
+ };
419
+ const report = evaluateRepositoryOracleAdequacyV1(guarded);
420
+ assert.equal(report.admitted, true);
421
+ assert.deepEqual(report.falseAcceptedSolutionIds, []);
422
+ assert.deepEqual(report.insufficientObservationPairs, []);
423
+ assert.deepEqual(report.mutationFamilyKills.find((family) => family.family === "reward-hacking"), { family: "reward-hacking", killed: 1, total: 1 });
424
+ });
425
+ test("case admission is fail-closed and candidate projection excludes hidden truth", () => {
426
+ const accepted = admittedCase();
427
+ assert.equal(accepted.status, "valid-library");
428
+ assert.deepEqual(Object.keys(repositoryCandidateCaseProjectionV1(accepted)).sort(), [
429
+ "capabilityId",
430
+ "familyId",
431
+ "id",
432
+ "lane",
433
+ "task"
434
+ ]);
435
+ assert.equal(JSON.stringify(repositoryCandidateCaseProjectionV1(accepted)).includes("duplicate-terminal"), false);
436
+ const rejected = admitRepositoryBenchmarkCaseV1({
437
+ draft: {
438
+ ...accepted,
439
+ hidden: oracle({
440
+ observations: oracle().observations.map((observation) => observation.solutionId === "duplicate-terminal"
441
+ ? { ...observation, outcome: "pass" }
442
+ : observation)
443
+ }),
444
+ adequacy: evaluateRepositoryOracleAdequacyV1(oracle({
445
+ observations: oracle().observations.map((observation) => observation.solutionId === "duplicate-terminal"
446
+ ? { ...observation, outcome: "pass" }
447
+ : observation)
448
+ })),
449
+ qualityFindings: accepted.qualityFindings.filter((finding) => finding.axis !== "leakage")
450
+ }
451
+ });
452
+ assert.equal(rejected.status, "rejected");
453
+ assert.ok(rejected.rejectionReasons.some((reason) => reason.includes("missing quality finding: leakage")));
454
+ assert.ok(rejected.rejectionReasons.some((reason) => reason.includes("plausible wrong solutions accepted")));
455
+ });
456
+ test("library compilation rejects behavioral duplicates rather than counting paraphrases", () => {
457
+ const first = admittedCase("case-stream-order");
458
+ const second = admittedCase("case-stream-order-paraphrase", first.behavioralFingerprint);
459
+ const library = compileValidatedBenchmarkLibraryV1([first, second]);
460
+ assert.deepEqual(library.cases.map((entry) => entry.id), ["case-stream-order"]);
461
+ assert.deepEqual(library.rejectedCaseIds, ["case-stream-order-paraphrase"]);
462
+ assert.deepEqual(library.acceptanceFunnel.find((entry) => entry.gate === "deduplication"), { gate: "deduplication", input: 2, admitted: 1, rejected: 1 });
463
+ assert.deepEqual(library.coverage.capabilities, [
464
+ { id: "provider-stream-translation", count: 1 }
465
+ ]);
466
+ assert.deepEqual(library.coverage.fixtureKinds, [{ id: "counterfactual", count: 1 }]);
467
+ assert.deepEqual(library.coverage.oracleKinds, [
468
+ { id: "ordered-events", count: 1 },
469
+ { id: "property", count: 1 }
470
+ ]);
471
+ assert.deepEqual(library.coverage.mutationFamilies, [
472
+ { id: "event-order", count: 1 },
473
+ { id: "integration", count: 1 }
474
+ ]);
475
+ });
476
+ test("acceptance funnel is sequential and does not re-admit an early rejection", () => {
477
+ const authenticFailure = admitRepositoryBenchmarkCaseV1({
478
+ draft: {
479
+ ...admittedCase("case-authenticity-failure"),
480
+ qualityFindings: admittedCase("case-authenticity-failure").qualityFindings.map((finding) => finding.axis === "authenticity"
481
+ ? {
482
+ ...finding,
483
+ outcome: "fail",
484
+ detail: "seed is not authentic"
485
+ }
486
+ : finding)
487
+ }
488
+ });
489
+ const specificationFailure = admitRepositoryBenchmarkCaseV1({
490
+ draft: {
491
+ ...admittedCase("case-specification-failure"),
492
+ qualityFindings: admittedCase("case-specification-failure").qualityFindings.map((finding) => finding.axis === "specification-sufficiency"
493
+ ? {
494
+ ...finding,
495
+ outcome: "review-required",
496
+ detail: "task remains ambiguous"
497
+ }
498
+ : finding)
499
+ }
500
+ });
501
+ const accepted = admittedCase("case-accepted");
502
+ const library = compileValidatedBenchmarkLibraryV1([
503
+ authenticFailure,
504
+ specificationFailure,
505
+ accepted
506
+ ]);
507
+ assert.deepEqual(library.acceptanceFunnel.slice(0, 3), [
508
+ { gate: "authenticity", input: 3, admitted: 2, rejected: 1 },
509
+ {
510
+ gate: "specification-sufficiency",
511
+ input: 2,
512
+ admitted: 1,
513
+ rejected: 1
514
+ },
515
+ { gate: "oracle-adequacy", input: 1, admitted: 1, rejected: 0 }
516
+ ]);
517
+ assert.ok(library.acceptanceFunnel.slice(2).every((entry) => entry.input <= 1));
518
+ assert.deepEqual(library.cases.map((entry) => entry.id), ["case-accepted"]);
519
+ });
520
+ test("behavior map and qualified seed invariants reject unsupported evidence", () => {
521
+ const map = {
522
+ version: 1,
523
+ repository: {
524
+ root: "/repo",
525
+ requestedRef: "HEAD",
526
+ commit: "a".repeat(40),
527
+ tree: "b".repeat(40)
528
+ },
529
+ packages: [
530
+ {
531
+ id: "package-core",
532
+ name: "core",
533
+ path: "packages/core",
534
+ manifestPath: "packages/core/package.json",
535
+ dependencyPackageIds: [],
536
+ publicExports: ["."]
537
+ }
538
+ ],
539
+ publicSurfaces: [],
540
+ protocols: [],
541
+ commands: [
542
+ {
543
+ id: "command-test",
544
+ kind: "test",
545
+ cwd: "packages/core",
546
+ executable: "pnpm",
547
+ args: ["test"],
548
+ timeoutMs: 60_000
549
+ }
550
+ ],
551
+ tests: [
552
+ {
553
+ id: "test-core",
554
+ path: "packages/core/src/core.test.ts",
555
+ names: ["core behavior"],
556
+ commandIds: ["command-test"]
557
+ }
558
+ ],
559
+ testBindings: [
560
+ {
561
+ testId: "test-core",
562
+ targetIds: ["package-core"],
563
+ signals: ["package-ownership"],
564
+ confidence: "medium"
565
+ }
566
+ ],
567
+ historyEpisodes: [
568
+ {
569
+ id: "episode-fix",
570
+ commit: "c".repeat(40),
571
+ parentCommit: "d".repeat(40),
572
+ occurredAt: "2026-01-01T00:00:00.000Z",
573
+ subject: "fix core behavior",
574
+ body: "",
575
+ changedPaths: [
576
+ {
577
+ path: "packages/core/src/core.ts",
578
+ status: "modified",
579
+ kind: "implementation"
580
+ },
581
+ {
582
+ path: "packages/core/src/core.test.ts",
583
+ status: "modified",
584
+ kind: "test"
585
+ }
586
+ ],
587
+ testPaths: ["packages/core/src/core.test.ts"],
588
+ implementationPaths: ["packages/core/src/core.ts"],
589
+ protocolPaths: [],
590
+ behaviorChanging: true,
591
+ seedEligible: true
592
+ }
593
+ ],
594
+ workloadSignals: [
595
+ {
596
+ id: "signal-core",
597
+ kind: "recurring-cochange",
598
+ label: "core behavior repair",
599
+ episodeIds: ["episode-fix"],
600
+ pathPatterns: ["packages/core"],
601
+ frequency: 1,
602
+ importance: "normal",
603
+ confidence: "medium"
604
+ }
605
+ ],
606
+ blindSpots: []
607
+ };
608
+ assert.doesNotThrow(() => assertRepositoryBehaviorMapV1(map));
609
+ assert.throws(() => assertRepositoryBehaviorMapV1({
610
+ ...map,
611
+ testBindings: [
612
+ {
613
+ ...map.testBindings[0],
614
+ targetIds: ["unknown-target"]
615
+ }
616
+ ]
617
+ }), /unknown target/u);
618
+ const seed = {
619
+ version: 1,
620
+ id: "seed-core-fix",
621
+ status: "qualified",
622
+ source: { kind: "historical-fix", changeEpisodeId: "episode-fix" },
623
+ summary: "Repair core behavior.",
624
+ capabilityEvidence: [{ kind: "history-episode", id: "episode-fix" }],
625
+ initialState: {
626
+ commit: "c".repeat(40),
627
+ parentCommit: "d".repeat(40)
628
+ },
629
+ targetBehavior: [
630
+ {
631
+ id: "core-behavior",
632
+ description: "Core behavior passes its regression test.",
633
+ critical: true,
634
+ evidence: [{ kind: "test", id: "test-core" }]
635
+ }
636
+ ],
637
+ referenceCommit: "c".repeat(40),
638
+ baselineObservations: [
639
+ {
640
+ id: "baseline",
641
+ kind: "test-command",
642
+ subjectId: "command-test-baseline-control",
643
+ outcome: "pass",
644
+ detail: "unmodified historical checkout passes"
645
+ }
646
+ ],
647
+ preChangeObservations: [
648
+ {
649
+ id: "pre",
650
+ kind: "test-command",
651
+ subjectId: "command-test",
652
+ outcome: "fail",
653
+ detail: "regression reproduced"
654
+ }
655
+ ],
656
+ postChangeObservations: [
657
+ {
658
+ id: "post",
659
+ kind: "test-command",
660
+ subjectId: "command-test",
661
+ outcome: "pass",
662
+ detail: "fix passes"
663
+ }
664
+ ],
665
+ candidateTestIds: ["test-core"],
666
+ environment: {
667
+ protectedControlPaths: [],
668
+ trustedPreparationRecipes: [],
669
+ candidateValidationRecipes: [],
670
+ baselineGradeRecipes: [
671
+ {
672
+ ...map.commands[0],
673
+ id: `${map.commands[0].id}-baseline-control`
674
+ }
675
+ ],
676
+ gradeRecipes: [map.commands[0]]
677
+ },
678
+ confidence: "high",
679
+ risks: [],
680
+ rejectionReasons: []
681
+ };
682
+ assert.doesNotThrow(() => assertRepositoryTaskSeedV1(seed));
683
+ assert.throws(() => assertRepositoryTaskSeedV1({
684
+ ...seed,
685
+ preChangeObservations: seed.preChangeObservations.map((observation) => ({
686
+ ...observation,
687
+ outcome: "pass"
688
+ }))
689
+ }), /pre-change failure/u);
690
+ });
691
+ test("reviewed improvement cycles preserve oracle escapes and lifecycle decisions without losing the audited core", async () => {
692
+ const core = admittedCase("case-audited-core", "fingerprint-core");
693
+ const stale = admittedCase("case-stale-environment", "fingerprint-stale");
694
+ const superseded = admittedCase("case-superseded-fixture", "fingerprint-superseded");
695
+ const active = admittedCase("case-active", "fingerprint-active");
696
+ const library = compileValidatedBenchmarkLibraryV1([core, stale, superseded, active]);
697
+ const reviews = [
698
+ {
699
+ reviewerId: "foundry-reviewer-a",
700
+ independentlyProduced: true,
701
+ verdict: "approve",
702
+ detail: "The evidence supports the proposed quality action."
703
+ },
704
+ {
705
+ reviewerId: "foundry-reviewer-b",
706
+ independentlyProduced: true,
707
+ verdict: "approve",
708
+ detail: "The action preserves the admission standard."
709
+ }
710
+ ];
711
+ const cycle = await Effect.runPromise(compileRepositoryFoundryImprovementCycleV1({
712
+ cycleId: "cycle-2026-09-01",
713
+ library,
714
+ auditedCoreCaseIds: [core.id],
715
+ drafts: [
716
+ {
717
+ id: "improvement-oracle-escape",
718
+ trigger: "oracle-escape",
719
+ action: "add-fixture",
720
+ summary: "Add the no-terminal counterfactual that kills the escaped stream solution.",
721
+ affectedCaseIds: [core.id],
722
+ evidence: [{ kind: "test", id: "counterfactual-no-terminal" }],
723
+ reviews
724
+ },
725
+ {
726
+ id: "improvement-false-rejection",
727
+ trigger: "false-rejection",
728
+ action: "add-valid-alternative",
729
+ summary: "Retain an independently reviewed implementation that satisfies every public clause.",
730
+ affectedCaseIds: [core.id],
731
+ evidence: [{ kind: "symbol", id: "alternate-valid" }],
732
+ reviews
733
+ },
734
+ {
735
+ id: "improvement-coverage-gap",
736
+ trigger: "coverage-gap",
737
+ action: "add-seed",
738
+ summary: "Add an authentic cross-file migration seed for an underrepresented capability.",
739
+ affectedCaseIds: [],
740
+ evidence: [{ kind: "history-episode", id: "migration-episode" }],
741
+ reviews
742
+ },
743
+ {
744
+ id: "improvement-environment-drift",
745
+ trigger: "environment-drift",
746
+ action: "quarantine-case",
747
+ summary: "Quarantine the case until its historical dependency recipe is reconstructed.",
748
+ affectedCaseIds: [stale.id],
749
+ evidence: [{ kind: "command", id: "historical-build" }],
750
+ reviews
751
+ },
752
+ {
753
+ id: "improvement-superseded",
754
+ trigger: "superseded",
755
+ action: "retire-case",
756
+ summary: "Retire the weaker fixture after a reviewed counterfactual subsumes it.",
757
+ affectedCaseIds: [superseded.id],
758
+ evidence: [{ kind: "test", id: "stronger-counterfactual" }],
759
+ reviews
760
+ },
761
+ {
762
+ id: "improvement-protect-core",
763
+ trigger: "superseded",
764
+ action: "retire-case",
765
+ summary: "Attempt to remove the audited regression case.",
766
+ affectedCaseIds: [core.id],
767
+ evidence: [],
768
+ reviews
769
+ }
770
+ ]
771
+ }));
772
+ assert.deepEqual(cycle.auditedCoreCaseIds, [core.id]);
773
+ assert.deepEqual(cycle.activeCaseIds, [active.id]);
774
+ assert.deepEqual(cycle.quarantinedCaseIds, [stale.id]);
775
+ assert.deepEqual(cycle.retiredCaseIds, [superseded.id]);
776
+ assert.deepEqual(cycle.records.slice(0, 5).map((record) => record.decision), ["applied", "applied", "applied", "applied", "applied"]);
777
+ assert.equal(cycle.records[5]?.decision, "rejected");
778
+ assert.match(cycle.records[5]?.rejectionReasons.join("\n") ?? "", /audited core case cannot be silently removed/u);
779
+ });
780
+ test("improvement cycles reject unreviewed and conflicting lifecycle changes instead of silently drifting", async () => {
781
+ const benchmarkCase = admittedCase("case-lifecycle-conflict", "fingerprint-lifecycle-conflict");
782
+ const reviews = [
783
+ {
784
+ reviewerId: "only-reviewer",
785
+ independentlyProduced: true,
786
+ verdict: "approve",
787
+ detail: "One review is not enough."
788
+ }
789
+ ];
790
+ const cycle = await Effect.runPromise(compileRepositoryFoundryImprovementCycleV1({
791
+ cycleId: "cycle-conflict",
792
+ library: compileValidatedBenchmarkLibraryV1([benchmarkCase]),
793
+ auditedCoreCaseIds: [],
794
+ drafts: [
795
+ {
796
+ id: "unreviewed-quarantine",
797
+ trigger: "instability",
798
+ action: "quarantine-case",
799
+ summary: "Quarantine an unstable case.",
800
+ affectedCaseIds: [benchmarkCase.id],
801
+ evidence: [],
802
+ reviews
803
+ },
804
+ {
805
+ id: "reviewed-quarantine",
806
+ trigger: "instability",
807
+ action: "quarantine-case",
808
+ summary: "Quarantine after independent replay review.",
809
+ affectedCaseIds: [benchmarkCase.id],
810
+ evidence: [],
811
+ reviews: [
812
+ ...reviews,
813
+ {
814
+ reviewerId: "second-reviewer",
815
+ independentlyProduced: true,
816
+ verdict: "approve",
817
+ detail: "The repeated observations are unstable."
818
+ }
819
+ ]
820
+ },
821
+ {
822
+ id: "conflicting-retirement",
823
+ trigger: "superseded",
824
+ action: "retire-case",
825
+ summary: "Try to retire a case already quarantined this cycle.",
826
+ affectedCaseIds: [benchmarkCase.id],
827
+ evidence: [],
828
+ reviews: [
829
+ ...reviews,
830
+ {
831
+ reviewerId: "second-reviewer",
832
+ independentlyProduced: true,
833
+ verdict: "approve",
834
+ detail: "The replacement is stronger."
835
+ }
836
+ ]
837
+ }
838
+ ]
839
+ }));
840
+ assert.equal(cycle.records[0]?.decision, "rejected");
841
+ assert.match(cycle.records[0]?.rejectionReasons.join("\n") ?? "", /two distinct independent approvals/u);
842
+ assert.equal(cycle.records[1]?.decision, "applied");
843
+ assert.equal(cycle.records[2]?.decision, "rejected");
844
+ assert.match(cycle.records[2]?.rejectionReasons.join("\n") ?? "", /already has a lifecycle decision/u);
845
+ assert.deepEqual(cycle.quarantinedCaseIds, [benchmarkCase.id]);
846
+ assert.deepEqual(cycle.retiredCaseIds, []);
847
+ });
848
+ test("independently reviewed pure cases compile into one routing dimension without smearing", () => {
849
+ const basis = routingBasis();
850
+ const benchmarkCase = admittedCase("case-stream-order");
851
+ const library = compileValidatedBenchmarkLibraryV1([benchmarkCase]);
852
+ const label = reviewedDimensionLabel({
853
+ caseId: benchmarkCase.id,
854
+ basis,
855
+ primaryDimensionId: "gateway-protocols"
856
+ });
857
+ const routing = compileRepositoryRoutingBenchmarkV1({
858
+ basis,
859
+ library,
860
+ labels: [label],
861
+ policy: routingPolicy
862
+ });
863
+ assert.deepEqual(routing.eligibleCaseIds, [benchmarkCase.id]);
864
+ assert.deepEqual(routing.libraryOnlyCaseIds, []);
865
+ assert.equal(routing.assignments[0]?.primaryDimensionId, "gateway-protocols");
866
+ assert.equal(routing.assignments[0]?.eligible, true);
867
+ assert.deepEqual(routing.dimensions.find((dimension) => dimension.dimensionId === "gateway-protocols"), {
868
+ dimensionId: "gateway-protocols",
869
+ caseIds: [benchmarkCase.id],
870
+ minimumRequired: 1,
871
+ routingReady: true
872
+ });
873
+ assert.equal(routing.routingReady, false);
874
+ assert.equal(routing.coverageGaps.length, basis.dimensions.length - 1);
875
+ });
876
+ test("ambiguous or critic-disputed cases remain in the quality library but cannot shape routing", () => {
877
+ const basis = routingBasis();
878
+ const ambiguousCase = admittedCase("case-ambiguous-routing", "fingerprint-ambiguous-routing");
879
+ const disputedCase = admittedCase("case-disputed-routing", "fingerprint-disputed-routing");
880
+ const library = compileValidatedBenchmarkLibraryV1([ambiguousCase, disputedCase]);
881
+ const ambiguous = reviewedDimensionLabel({
882
+ caseId: ambiguousCase.id,
883
+ basis,
884
+ primaryDimensionId: "gateway-protocols",
885
+ secondaryDimensionId: "daemon-control-operations"
886
+ });
887
+ const disputed = reviewedDimensionLabel({
888
+ caseId: disputedCase.id,
889
+ basis,
890
+ primaryDimensionId: "gateway-protocols",
891
+ reviewerBDimensionId: "model-routing-registry"
892
+ });
893
+ const routing = compileRepositoryRoutingBenchmarkV1({
894
+ basis,
895
+ library,
896
+ labels: [ambiguous, disputed],
897
+ policy: routingPolicy
898
+ });
899
+ assert.deepEqual(routing.eligibleCaseIds, []);
900
+ assert.deepEqual(routing.libraryOnlyCaseIds, ["case-ambiguous-routing", "case-disputed-routing"]);
901
+ const ambiguousAssignment = routing.assignments.find((assignment) => assignment.caseId === ambiguousCase.id);
902
+ const disputedAssignment = routing.assignments.find((assignment) => assignment.caseId === disputedCase.id);
903
+ assert.ok(ambiguousAssignment?.rejectionReasons.some((reason) => reason.includes("require exactly one")));
904
+ assert.ok(ambiguousAssignment?.rejectionReasons.some((reason) => reason.includes("does not dominate")));
905
+ assert.ok(disputedAssignment?.rejectionReasons.some((reason) => reason.includes("did not both approve")));
906
+ });
907
+ test("routing compilation fails closed on stale labels and duplicate case identities", () => {
908
+ const basis = routingBasis();
909
+ const benchmarkCase = admittedCase("case-stream-order");
910
+ const library = compileValidatedBenchmarkLibraryV1([benchmarkCase]);
911
+ const current = reviewedDimensionLabel({
912
+ caseId: benchmarkCase.id,
913
+ basis,
914
+ primaryDimensionId: "gateway-protocols"
915
+ });
916
+ const stale = {
917
+ ...current,
918
+ basisDigest: "f".repeat(64),
919
+ label: {
920
+ ...current.label,
921
+ basisDigest: "f".repeat(64)
922
+ },
923
+ reviews: current.reviews.map((review) => ({
924
+ ...review,
925
+ independentLabel: {
926
+ ...review.independentLabel,
927
+ basisDigest: "f".repeat(64)
928
+ }
929
+ }))
930
+ };
931
+ const staleRouting = compileRepositoryRoutingBenchmarkV1({
932
+ basis,
933
+ library,
934
+ labels: [stale],
935
+ policy: routingPolicy
936
+ });
937
+ assert.deepEqual(staleRouting.eligibleCaseIds, []);
938
+ assert.ok(staleRouting.assignments[0]?.rejectionReasons.includes("dimension label basis digest does not match routing basis"));
939
+ assert.throws(() => compileRepositoryRoutingBenchmarkV1({
940
+ basis,
941
+ library,
942
+ labels: [current, current],
943
+ policy: routingPolicy
944
+ }), /duplicate dimension labels/u);
945
+ });
946
+ const dimensionCompletion = (input, overrides = {}) => {
947
+ const primary = input.foundryRole === "dimension-critic-luna"
948
+ ? (overrides.lunaPrimary ?? "gateway-protocols")
949
+ : "gateway-protocols";
950
+ return {
951
+ primaryDimensionId: primary,
952
+ scores: routingBasis().dimensions.map((dimension) => ({
953
+ dimensionId: dimension.id,
954
+ score: dimension.id === primary
955
+ ? 0.88
956
+ : input.foundryRole === "dimension-critic-terra" &&
957
+ dimension.id === overrides.terraSecondary
958
+ ? 0.62
959
+ : 0.03
960
+ })),
961
+ unknownProbability: 0.06,
962
+ detail: "The task primarily changes the externally observable gateway protocol contract.",
963
+ evidenceIds: ["benchmark-case:/visible", "routing-basis:/dimensions/0"]
964
+ };
965
+ };
966
+ const dimensionModelPlan = () => gpt56RepositoryRoutingModelPlanV1({
967
+ solModel: "codex/gpt-5.6-sol",
968
+ terraModel: "codex/gpt-5.6-terra",
969
+ lunaModel: "codex/gpt-5.6-luna",
970
+ reasoningEffort: "max"
971
+ });
972
+ test("Sol, Terra, and Luna independently label an admitted case before routing compilation", async () => {
973
+ const calls = [];
974
+ const transport = Layer.succeed(EvalAuthoringTransport, EvalAuthoringTransport.of({
975
+ completeDetailed: (input) => {
976
+ calls.push(input);
977
+ return Effect.succeed({
978
+ text: JSON.stringify(dimensionCompletion(input)),
979
+ callId: `call-${input.foundryRole}`
980
+ });
981
+ },
982
+ complete: (input) => Effect.succeed(JSON.stringify(dimensionCompletion(input)))
983
+ }));
984
+ const result = await Effect.runPromise(authorRepositoryReviewedDimensionLabelV1({
985
+ operationId: "case-stream-order-routing-label",
986
+ basis: routingBasis(),
987
+ benchmarkCase: admittedCase(),
988
+ modelPlan: dimensionModelPlan()
989
+ }).pipe(Effect.provide(RepositoryFoundryLanguageModelLive.pipe(Layer.provide(transport)))));
990
+ assert.deepEqual(calls.map((call) => call.foundryRole), ["dimension-labeler", "dimension-critic-terra", "dimension-critic-luna"]);
991
+ assert.equal(result.reviewed.reviews.every((review) => review.outcome === "approve"), true);
992
+ assert.equal(result.modelCalls.length, 3);
993
+ const routing = compileRepositoryRoutingBenchmarkV1({
994
+ basis: routingBasis(),
995
+ library: compileValidatedBenchmarkLibraryV1([admittedCase()]),
996
+ labels: [result.reviewed],
997
+ policy: routingPolicy
998
+ });
999
+ assert.deepEqual(routing.eligibleCaseIds, ["case-stream-order"]);
1000
+ });
1001
+ test("independent dimension disagreement or critic ambiguity excludes routing evidence", async () => {
1002
+ for (const overrides of [
1003
+ { lunaPrimary: "model-routing-registry" },
1004
+ { terraSecondary: "model-routing-registry" }
1005
+ ]) {
1006
+ const transport = Layer.succeed(EvalAuthoringTransport, EvalAuthoringTransport.of({
1007
+ completeDetailed: (input) => Effect.succeed({
1008
+ text: JSON.stringify(dimensionCompletion(input, overrides)),
1009
+ callId: `call-${input.foundryRole}`
1010
+ }),
1011
+ complete: (input) => Effect.succeed(JSON.stringify(dimensionCompletion(input, overrides)))
1012
+ }));
1013
+ const result = await Effect.runPromise(authorRepositoryReviewedDimensionLabelV1({
1014
+ operationId: "case-stream-order-routing-label",
1015
+ basis: routingBasis(),
1016
+ benchmarkCase: admittedCase(),
1017
+ modelPlan: dimensionModelPlan()
1018
+ }).pipe(Effect.provide(RepositoryFoundryLanguageModelLive.pipe(Layer.provide(transport)))));
1019
+ const routing = compileRepositoryRoutingBenchmarkV1({
1020
+ basis: routingBasis(),
1021
+ library: compileValidatedBenchmarkLibraryV1([admittedCase()]),
1022
+ labels: [result.reviewed],
1023
+ policy: routingPolicy
1024
+ });
1025
+ assert.deepEqual(routing.eligibleCaseIds, []);
1026
+ assert.deepEqual(routing.libraryOnlyCaseIds, ["case-stream-order"]);
1027
+ }
1028
+ });
1029
+ test("routing labeling uses an immutable bounded plan and rejects a changed benchmark case", async () => {
1030
+ const benchmarkCase = admittedCase();
1031
+ const basis = routingBasis();
1032
+ const plan = await Effect.runPromise(planRepositoryRoutingLabelingV1({
1033
+ foundryPlanDigest: "foundry-plan-digest",
1034
+ benchmarkCase,
1035
+ basis,
1036
+ modelPlan: dimensionModelPlan(),
1037
+ policy: routingPolicy
1038
+ }));
1039
+ assert.equal(plan.budget.semanticModelCalls, 3);
1040
+ assert.equal(plan.budget.plannedModelCalls, 6);
1041
+ assert.equal(plan.budget.maximumTransientRetries, 3);
1042
+ assert.equal(plan.budget.requiredTotalInputTokens, 3_072_000);
1043
+ assert.equal(plan.budget.requiredTotalOutputTokens, 98_304);
1044
+ let calls = 0;
1045
+ const transport = Layer.succeed(EvalAuthoringTransport, EvalAuthoringTransport.of({
1046
+ completeDetailed: (input) => {
1047
+ calls += 1;
1048
+ return Effect.succeed({
1049
+ text: JSON.stringify(dimensionCompletion(input)),
1050
+ callId: `call-${input.foundryRole}`
1051
+ });
1052
+ },
1053
+ complete: (input) => Effect.succeed(JSON.stringify(dimensionCompletion(input)))
1054
+ }));
1055
+ const changedCase = {
1056
+ ...benchmarkCase,
1057
+ behavioralFingerprint: "changed-fingerprint"
1058
+ };
1059
+ const exit = await Effect.runPromiseExit(executeRepositoryRoutingLabelingV1({
1060
+ plan,
1061
+ benchmarkCase: changedCase
1062
+ }).pipe(Effect.provide(RepositoryFoundryLanguageModelLive.pipe(Layer.provide(transport)))));
1063
+ assert.equal(exit._tag, "Failure");
1064
+ assert.equal(calls, 0);
1065
+ });
1066
+ test("routing labeling normalizes valid input key order before freezing its plan identity", async (t) => {
1067
+ const basis = routingBasis();
1068
+ const modelPlan = dimensionModelPlan();
1069
+ const input = {
1070
+ foundryPlanDigest: "foundry-plan-digest",
1071
+ benchmarkCase: admittedCase(),
1072
+ basis,
1073
+ modelPlan,
1074
+ policy: routingPolicy
1075
+ };
1076
+ const baseline = await Effect.runPromise(planRepositoryRoutingLabelingV1(input));
1077
+ assertRepositoryRoutingLabelingPlanV1(JSON.parse(JSON.stringify(baseline)));
1078
+ const { repositoryDigest, ...facetDetails } = basis.facetSnapshot;
1079
+ const { id, ...dimensionDetails } = basis.dimensions[0];
1080
+ const variants = [
1081
+ {
1082
+ name: "public JSON facet snapshot with its repository digest last",
1083
+ input: {
1084
+ ...input,
1085
+ basis: {
1086
+ ...basis,
1087
+ facetSnapshot: { ...facetDetails, repositoryDigest }
1088
+ }
1089
+ }
1090
+ },
1091
+ {
1092
+ name: "dimension and model assignment property order",
1093
+ input: {
1094
+ ...input,
1095
+ basis: {
1096
+ ...basis,
1097
+ dimensions: [{ ...dimensionDetails, id }, ...basis.dimensions.slice(1)]
1098
+ },
1099
+ modelPlan: {
1100
+ ...modelPlan,
1101
+ assignments: modelPlan.assignments.map(({ role, ...assignment }) => ({
1102
+ ...assignment,
1103
+ role
1104
+ }))
1105
+ }
1106
+ }
1107
+ },
1108
+ {
1109
+ name: "policy property order",
1110
+ input: {
1111
+ ...input,
1112
+ policy: {
1113
+ minimumCasesPerDimension: routingPolicy.minimumCasesPerDimension,
1114
+ minimumDominanceMargin: routingPolicy.minimumDominanceMargin,
1115
+ maximumUnknownProbability: routingPolicy.maximumUnknownProbability,
1116
+ activeDimensionThreshold: routingPolicy.activeDimensionThreshold
1117
+ }
1118
+ }
1119
+ }
1120
+ ];
1121
+ for (const variant of variants) {
1122
+ await t.test(variant.name, async () => {
1123
+ const before = JSON.stringify(variant.input);
1124
+ const plan = await Effect.runPromise(planRepositoryRoutingLabelingV1(variant.input));
1125
+ assert.equal(JSON.stringify(variant.input), before, "planning does not mutate its inputs");
1126
+ assert.equal(plan.planDigest, baseline.planDigest, "equivalent inputs retain one identity");
1127
+ assert.equal(JSON.stringify(plan), JSON.stringify(baseline));
1128
+ assertRepositoryRoutingLabelingPlanV1(JSON.parse(JSON.stringify(plan)));
1129
+ assert.throws(() => assertRepositoryRoutingLabelingPlanV1({
1130
+ ...plan,
1131
+ policy: {
1132
+ ...plan.policy,
1133
+ minimumCasesPerDimension: plan.policy.minimumCasesPerDimension + 1
1134
+ }
1135
+ }));
1136
+ });
1137
+ }
1138
+ });