@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,428 @@
1
+ import { Clock, Effect, Schema } from "effect";
2
+ import { discoverIntegratedRepositoryHistoryV1 } from "../../adapters/integrated-repository-history.js";
3
+ import { rankRepositorySeedCandidatesV1 } from "../../adapters/repository-seed-selection.js";
4
+ import { checkpointDigestV1, PipelineStageError, pipelineStageToProgressStageV1 } from "../../case-pipeline-protocol.js";
5
+ import { RepositoryFoundryError } from "../../errors.js";
6
+ import { REPOSITORY_FOUNDRY_STANDARD_OUTPUT_CEILING } from "../../repository-foundry-plan-protocol.js";
7
+ import { generateWithFeedbackV1 } from "../budgeted-model/service.js";
8
+ import { reportFoundryStageV1 } from "../foundry-progress/service.js";
9
+ import { RepositoryFoundryLanguageModel } from "../language-model/service.js";
10
+ import { extractHistoricalTaskSeedsV1, qualifyHistoricalTaskSeedAcrossBatchesV1 } from "../task-seed/service.js";
11
+ const STAGE = "seed";
12
+ const QUALIFICATION_BATCHES = 2;
13
+ const QUALIFICATION_REPETITIONS_PER_BATCH = 2;
14
+ /**
15
+ * The ranker may return a useful prefix. Omitting candidates is not a terminal
16
+ * exact-count failure: omitted candidates retain their lexical prefilter order
17
+ * and are still replay-qualified.
18
+ */
19
+ export const PipelineSeedRankingV1 = Schema.Struct({
20
+ candidates: Schema.Array(Schema.Struct({
21
+ commit: Schema.String,
22
+ score: Schema.Finite,
23
+ rationale: Schema.String
24
+ }))
25
+ });
26
+ const PipelineSeedDimensionFitV1 = Schema.Struct({
27
+ commit: Schema.String,
28
+ requestedDimension: Schema.String,
29
+ outcome: Schema.Literals(["fit", "mismatch", "uncertain"]),
30
+ detail: Schema.String,
31
+ includes: Schema.Array(Schema.Struct({
32
+ requirement: Schema.String,
33
+ outcome: Schema.Literals(["supports", "does-not-support", "uncertain"]),
34
+ detail: Schema.String
35
+ })),
36
+ excludes: Schema.Array(Schema.Struct({
37
+ requirement: Schema.String,
38
+ outcome: Schema.Literals(["respected", "violated", "uncertain"]),
39
+ detail: Schema.String
40
+ }))
41
+ });
42
+ const stageFailure = (detail, terminal, cause) => new RepositoryFoundryError({
43
+ operation: "run-pipeline-stage",
44
+ detail,
45
+ cause: new PipelineStageError({ stage: STAGE, detail, terminal, cause })
46
+ });
47
+ const describeError = (error) => error.detail.split("\n", 1)[0]?.slice(0, 1_000) ?? error.message.slice(0, 1_000);
48
+ const dimensionRetrievalQuery = (dimension) => [dimension.id, dimension.description, ...dimension.includes, ...dimension.excludes].join("\n");
49
+ const episodeModelInput = (candidate, map) => ({
50
+ commit: candidate.episode.commit,
51
+ subject: candidate.episode.subject,
52
+ body: candidate.episode.body,
53
+ occurredAt: candidate.episode.occurredAt,
54
+ changedPaths: candidate.episode.changedPaths,
55
+ implementationPaths: candidate.episode.implementationPaths,
56
+ protocolPaths: candidate.episode.protocolPaths,
57
+ testPaths: candidate.episode.testPaths,
58
+ testNames: map.tests
59
+ .filter((test) => candidate.episode.testPaths.includes(test.path))
60
+ .flatMap((test) => test.names),
61
+ lexicalPrefilter: {
62
+ relevance: candidate.relevance,
63
+ matchedTerms: candidate.matchedTerms
64
+ }
65
+ });
66
+ const explicitCandidate = Effect.fnUntraced(function* (input) {
67
+ const ranked = rankRepositorySeedCandidatesV1(input.map, dimensionRetrievalQuery(input.dimension));
68
+ const candidate = ranked.find(({ episode }) => episode.commit === input.referenceCommit);
69
+ if (candidate === undefined) {
70
+ return yield* stageFailure(`the requested reference ${input.referenceCommit} is not an eligible executable historical change`, true);
71
+ }
72
+ return { map: input.map, candidates: [candidate] };
73
+ });
74
+ const discoveredCandidates = Effect.fnUntraced(function* (input) {
75
+ const retained = yield* discoverIntegratedRepositoryHistoryV1({
76
+ repositoryRoot: input.map.repository.root,
77
+ requestedRef: input.map.repository.requestedRef,
78
+ requestedTipCommit: input.map.repository.commit,
79
+ requestedTipTree: input.map.repository.tree,
80
+ integrationCommits: input.map.historyEpisodes.map(({ commit }) => commit)
81
+ });
82
+ const excludedRoots = input.map.blindSpots.find(({ id }) => id === "blind-excluded-package-roots")?.paths ?? [];
83
+ const permittedRetained = retained.filter(({ episode }) => !episode.changedPaths.some(({ path }) => excludedRoots.some((root) => path === root || path.startsWith(`${root}/`))));
84
+ const map = {
85
+ ...input.map,
86
+ historyEpisodes: [
87
+ ...input.map.historyEpisodes,
88
+ ...permittedRetained.map(({ episode }) => episode)
89
+ ]
90
+ };
91
+ const candidates = rankRepositorySeedCandidatesV1(map, dimensionRetrievalQuery(input.dimension));
92
+ return { map, candidates, retained: permittedRetained };
93
+ });
94
+ const rankWithModel = Effect.fnUntraced(function* (input) {
95
+ const languageModel = yield* RepositoryFoundryLanguageModel;
96
+ const permittedCommits = new Set(input.candidates.map(({ episode }) => episode.commit));
97
+ const ranked = yield* generateWithFeedbackV1({
98
+ languageModel,
99
+ assignment: input.assignment,
100
+ operationId: `${input.caseId}:seed:rank`,
101
+ instructions: [
102
+ "Rank the supplied historical changes for their fit to the COMPLETE routing dimension contract.",
103
+ "The dimension description, every include, and every exclude are binding context.",
104
+ "Use concrete changed paths, protocols, tests, and behavior evidence rather than commit wording alone.",
105
+ "Scores are comparative fit signals, not admission evidence; execution will replay-qualify candidates.",
106
+ "Return the best candidates first with a finite score and a concise evidence-based rationale.",
107
+ "You may omit candidates that are clearly weaker. Do not invent commits."
108
+ ].join("\n"),
109
+ input: {
110
+ dimension: input.dimension,
111
+ repository: input.map.repository,
112
+ ...(input.requestedRef === undefined ? {} : { requestedRef: input.requestedRef }),
113
+ ...(input.referenceCommit === undefined
114
+ ? {}
115
+ : { requiredReferenceCommit: input.referenceCommit }),
116
+ candidates: input.candidates.map((candidate) => episodeModelInput(candidate, input.map))
117
+ },
118
+ schemaName: "PipelineSeedRankingV1",
119
+ outputSchema: PipelineSeedRankingV1,
120
+ maximumOutputTokens: REPOSITORY_FOUNDRY_STANDARD_OUTPUT_CEILING,
121
+ maxAttempts: Number.MAX_SAFE_INTEGER,
122
+ validate: (proposal) => Effect.sync(() => {
123
+ const findings = [];
124
+ const seen = new Set();
125
+ for (const candidate of proposal.candidates) {
126
+ if (!permittedCommits.has(candidate.commit)) {
127
+ findings.push({
128
+ kind: "contract",
129
+ message: `ranking contains a commit that was not supplied: ${candidate.commit}`
130
+ });
131
+ }
132
+ if (seen.has(candidate.commit)) {
133
+ findings.push({
134
+ kind: "contract",
135
+ message: `ranking contains duplicate commit ${candidate.commit}`
136
+ });
137
+ }
138
+ if (candidate.rationale.trim().length === 0) {
139
+ findings.push({
140
+ kind: "contract",
141
+ message: `ranking rationale is empty for commit ${candidate.commit}`
142
+ });
143
+ }
144
+ seen.add(candidate.commit);
145
+ }
146
+ if (![...seen].some((commit) => permittedCommits.has(commit))) {
147
+ findings.push({
148
+ kind: "contract",
149
+ message: "ranking must contain at least one of the supplied commits"
150
+ });
151
+ }
152
+ return findings;
153
+ })
154
+ });
155
+ return ranked.value;
156
+ });
157
+ const assessQualifiedDimensionFit = Effect.fnUntraced(function* (input) {
158
+ const languageModel = yield* RepositoryFoundryLanguageModel;
159
+ const assessed = yield* generateWithFeedbackV1({
160
+ languageModel,
161
+ assignment: input.assignment,
162
+ operationId: `${input.caseId}:seed:dimension-fit:${input.candidate.episode.commit}`,
163
+ instructions: [
164
+ "Assess this replay-qualified historical change against the complete routing dimension boundary.",
165
+ "The description, every include, and every exclude are binding context. Address each supplied include and exclude explicitly.",
166
+ "Use the historical change facts, extracted target behavior, and executed replay observations together.",
167
+ "Replay qualification proves that the change is executable; it does not by itself prove dimension fit.",
168
+ "A historical change is not expected to cover every example listed under includes. Return fit when the authentic change directly exercises a coherent non-empty slice of the requested dimension and respects every exclusion.",
169
+ "Return mismatch when it supports none of the includes or belongs to an excluded domain. Return uncertain when the supplied evidence cannot establish either conclusion.",
170
+ "This assessment guides candidate selection. It is advisory and never substitutes for later executable evidence."
171
+ ].join("\n"),
172
+ input: {
173
+ dimension: input.dimension,
174
+ candidate: episodeModelInput(input.candidate, input.map),
175
+ seed: input.seed,
176
+ qualification: input.qualification
177
+ },
178
+ schemaName: "PipelineSeedDimensionFitV1",
179
+ outputSchema: PipelineSeedDimensionFitV1,
180
+ maximumOutputTokens: REPOSITORY_FOUNDRY_STANDARD_OUTPUT_CEILING,
181
+ maxAttempts: Number.MAX_SAFE_INTEGER,
182
+ validate: (proposal) => Effect.sync(() => {
183
+ const findings = [];
184
+ if (proposal.commit !== input.candidate.episode.commit) {
185
+ findings.push({
186
+ kind: "contract",
187
+ message: `dimension assessment must identify commit ${input.candidate.episode.commit}`
188
+ });
189
+ }
190
+ if (proposal.requestedDimension !== input.dimension.id) {
191
+ findings.push({
192
+ kind: "contract",
193
+ message: `dimension assessment must identify requested dimension ${input.dimension.id}`
194
+ });
195
+ }
196
+ const includes = new Set(proposal.includes.map(({ requirement }) => requirement));
197
+ const excludes = new Set(proposal.excludes.map(({ requirement }) => requirement));
198
+ if (includes.size !== proposal.includes.length) {
199
+ findings.push({
200
+ kind: "contract",
201
+ message: "dimension assessment contains a duplicate include"
202
+ });
203
+ }
204
+ if (excludes.size !== proposal.excludes.length) {
205
+ findings.push({
206
+ kind: "contract",
207
+ message: "dimension assessment contains a duplicate exclude"
208
+ });
209
+ }
210
+ for (const requirement of input.dimension.includes) {
211
+ if (!includes.has(requirement)) {
212
+ findings.push({
213
+ kind: "contract",
214
+ message: `dimension assessment omitted include ${JSON.stringify(requirement)}`
215
+ });
216
+ }
217
+ }
218
+ for (const requirement of input.dimension.excludes) {
219
+ if (!excludes.has(requirement)) {
220
+ findings.push({
221
+ kind: "contract",
222
+ message: `dimension assessment omitted exclude ${JSON.stringify(requirement)}`
223
+ });
224
+ }
225
+ }
226
+ if (proposal.includes.some(({ requirement }) => !input.dimension.includes.includes(requirement)) ||
227
+ proposal.excludes.some(({ requirement }) => !input.dimension.excludes.includes(requirement))) {
228
+ findings.push({
229
+ kind: "contract",
230
+ message: "dimension assessment contains an include or exclude that was not supplied"
231
+ });
232
+ }
233
+ if (proposal.outcome === "fit" &&
234
+ (proposal.includes.every(({ outcome }) => outcome !== "supports") ||
235
+ proposal.excludes.some(({ outcome }) => outcome !== "respected"))) {
236
+ findings.push({
237
+ kind: "contract",
238
+ message: "a fit assessment requires at least one supported include and every exclude to be respected"
239
+ });
240
+ }
241
+ for (const assessment of [...proposal.includes, ...proposal.excludes]) {
242
+ if (assessment.detail.trim().length === 0) {
243
+ findings.push({
244
+ kind: "contract",
245
+ message: `dimension assessment detail is empty for ${JSON.stringify(assessment.requirement)}`
246
+ });
247
+ }
248
+ }
249
+ if (proposal.detail.trim().length === 0) {
250
+ findings.push({
251
+ kind: "contract",
252
+ message: "dimension assessment detail must be non-empty"
253
+ });
254
+ }
255
+ return findings;
256
+ })
257
+ });
258
+ return assessed.value;
259
+ });
260
+ const orderCandidates = (candidates, ranking) => {
261
+ const byCommit = new Map(candidates.map((candidate) => [candidate.episode.commit, candidate]));
262
+ const ordered = [];
263
+ const seen = new Set();
264
+ for (const ranked of ranking.candidates) {
265
+ const candidate = byCommit.get(ranked.commit);
266
+ if (candidate === undefined || seen.has(ranked.commit))
267
+ continue;
268
+ seen.add(ranked.commit);
269
+ ordered.push({ ...candidate, score: ranked.score, rationale: ranked.rationale.trim() });
270
+ }
271
+ for (const candidate of candidates) {
272
+ if (seen.has(candidate.episode.commit))
273
+ continue;
274
+ ordered.push({
275
+ ...candidate,
276
+ score: candidate.relevance,
277
+ rationale: "The model omitted this candidate; it remains in lexical prefilter order for execution-backed replay qualification."
278
+ });
279
+ }
280
+ return ordered;
281
+ };
282
+ const qualifyCandidate = Effect.fnUntraced(function* (input) {
283
+ const episode = input.map.historyEpisodes.find(({ commit }) => commit === input.candidate.episode.commit);
284
+ if (episode === undefined) {
285
+ return yield* stageFailure(`the selected Git reference no longer exposes historical episode ${input.candidate.episode.commit}`, false);
286
+ }
287
+ const seeds = yield* extractHistoricalTaskSeedsV1({
288
+ ...input.map,
289
+ historyEpisodes: [episode]
290
+ });
291
+ const seed = seeds.find(({ referenceCommit }) => referenceCommit === episode.commit);
292
+ if (seed === undefined) {
293
+ return yield* stageFailure(`no executable task seed could be extracted for ${episode.commit}`, false);
294
+ }
295
+ const qualification = yield* qualifyHistoricalTaskSeedAcrossBatchesV1({
296
+ repositoryRoot: input.map.repository.root,
297
+ seed,
298
+ batches: QUALIFICATION_BATCHES,
299
+ repetitionsPerBatch: QUALIFICATION_REPETITIONS_PER_BATCH
300
+ });
301
+ return { map: input.map, seed, qualification };
302
+ });
303
+ const isQualified = (qualification) => qualification.stability.stable && qualification.seed.status === "qualified";
304
+ const rejectionReason = (input) => {
305
+ const reasons = [
306
+ ...input.qualification.stability.rejectionReasons,
307
+ ...input.seed.rejectionReasons
308
+ ];
309
+ return reasons.length > 0
310
+ ? reasons.join("; ").slice(0, 1_000)
311
+ : "executed replay qualification did not produce a stable qualified seed";
312
+ };
313
+ /** Rank history once, then let repeated pinned execution select the first viable seed. */
314
+ export const runPipelineSeedStageV1 = (input) => Effect.gen(function* () {
315
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; status=discovering-candidates`);
316
+ const discovery = input.context.referenceCommit === undefined
317
+ ? yield* discoveredCandidates({ map: input.map, dimension: input.context.dimension })
318
+ : yield* explicitCandidate({
319
+ map: input.map,
320
+ referenceCommit: input.context.referenceCommit,
321
+ dimension: input.context.dimension
322
+ });
323
+ if (discovery.candidates.length === 0) {
324
+ return yield* stageFailure(`repository history contains no executable candidate for dimension ${input.context.dimension.id}`, true);
325
+ }
326
+ const candidates = input.context.referenceCommit === undefined
327
+ ? yield* Effect.gen(function* () {
328
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; status=ranking; candidates=${String(discovery.candidates.length)}`);
329
+ const ranking = yield* rankWithModel({
330
+ caseId: input.context.caseId,
331
+ dimension: input.context.dimension,
332
+ ...(input.context.requestedRef === undefined
333
+ ? {}
334
+ : { requestedRef: input.context.requestedRef }),
335
+ candidates: discovery.candidates,
336
+ map: discovery.map,
337
+ assignment: {
338
+ ...input.context.modelPlan.assignments.find(({ role }) => role === "repository-analyst"),
339
+ role: "repository-analyst"
340
+ }
341
+ });
342
+ return orderCandidates(discovery.candidates, ranking);
343
+ })
344
+ : discovery.candidates.map((candidate) => ({
345
+ ...candidate,
346
+ score: candidate.relevance,
347
+ rationale: "The reference commit was explicitly requested, so execution-backed replay qualification and complete dimension assessment determine eligibility without comparative model ranking."
348
+ }));
349
+ const rejected = [];
350
+ const dimensionFit = new Map();
351
+ const assignment = {
352
+ ...input.context.modelPlan.assignments.find(({ role }) => role === "repository-analyst"),
353
+ role: "repository-analyst"
354
+ };
355
+ for (const [index, candidate] of candidates.entries()) {
356
+ const commit = candidate.episode.commit;
357
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; candidate=${commit}; attempt=${String(index + 1)}; status=replay-qualifying`);
358
+ const attempted = yield* Effect.result(qualifyCandidate({ map: discovery.map, candidate }));
359
+ if (attempted._tag === "Failure") {
360
+ const reason = describeError(attempted.failure);
361
+ rejected.push({ commit, reason });
362
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; candidate=${commit}; status=rejected; reason=${reason}`);
363
+ continue;
364
+ }
365
+ if (!isQualified(attempted.success.qualification)) {
366
+ const reason = rejectionReason({
367
+ qualification: attempted.success.qualification,
368
+ seed: attempted.success.seed
369
+ });
370
+ rejected.push({ commit, reason });
371
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; candidate=${commit}; status=rejected; reason=${reason}`);
372
+ continue;
373
+ }
374
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; candidate=${commit}; status=assessing-dimension-fit`);
375
+ const fit = yield* assessQualifiedDimensionFit({
376
+ caseId: input.context.caseId,
377
+ dimension: input.context.dimension,
378
+ candidate,
379
+ map: attempted.success.map,
380
+ seed: attempted.success.seed,
381
+ qualification: attempted.success.qualification,
382
+ assignment
383
+ });
384
+ if (fit.outcome !== "fit") {
385
+ const reason = `complete dimension assessment was ${fit.outcome}: ${fit.detail}; ` +
386
+ `includes=${fit.includes
387
+ .map(({ requirement, outcome }) => `${JSON.stringify(requirement)}:${outcome}`)
388
+ .join(",")}; ` +
389
+ `excludes=${fit.excludes
390
+ .map(({ requirement, outcome }) => `${JSON.stringify(requirement)}:${outcome}`)
391
+ .join(",")}`;
392
+ rejected.push({ commit, reason: reason.slice(0, 1_000) });
393
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; candidate=${commit}; status=rejected; reason=${reason.slice(0, 1_000)}`);
394
+ continue;
395
+ }
396
+ dimensionFit.set(commit, fit.detail);
397
+ const createdAt = new Date(yield* Clock.currentTimeMillis).toISOString();
398
+ const checkpoint = {
399
+ version: 1,
400
+ stage: STAGE,
401
+ parentDigest: checkpointDigestV1(input.context),
402
+ createdAt,
403
+ seed: attempted.success.qualification.seed,
404
+ qualification: attempted.success.qualification,
405
+ repository: attempted.success.map.repository,
406
+ selection: {
407
+ candidates: candidates.map((entry) => ({
408
+ commit: entry.episode.commit,
409
+ subject: entry.episode.subject,
410
+ score: entry.score,
411
+ rationale: dimensionFit.get(entry.episode.commit) === undefined
412
+ ? entry.rationale
413
+ : `${entry.rationale} Dimension fit: ${dimensionFit.get(entry.episode.commit)}`
414
+ })),
415
+ selectedCommit: commit,
416
+ rejected
417
+ }
418
+ };
419
+ yield* input.checkpoint(checkpoint);
420
+ yield* reportFoundryStageV1(pipelineStageToProgressStageV1(STAGE), `case=${input.context.caseId}; candidate=${commit}; status=selected`);
421
+ return checkpoint;
422
+ }
423
+ return yield* stageFailure(`no historical reference both replay-qualified and fit dimension ${input.context.dimension.id}: ${rejected
424
+ .map(({ commit, reason }) => `${commit}: ${reason}`)
425
+ .join("; ")}`, true);
426
+ }).pipe(Effect.withSpan("PipelineSeed.run"));
427
+ /** Short name used by the orchestrator. */
428
+ export const runPipelineSeedV1 = runPipelineSeedStageV1;
@@ -0,0 +1,103 @@
1
+ import { Effect } from "effect";
2
+ import { type PipelineStageRunV1, type PipelineStageInputV1, type SpecCheckpointV1 } from "../../case-pipeline-protocol.js";
3
+ import type { RepositoryTaskSeedV1 } from "../../repository-task-seed-protocol.js";
4
+ import { RepositoryFoundryError } from "../../errors.js";
5
+ import { RepositoryFoundryLanguageModel } from "../language-model/service.js";
6
+ /** Source-only authoring also accepts an unqualified draft seed. It never executes repository recipes. */
7
+ export declare const draftPipelineSpecificationV1: (input: PipelineStageInputV1<{
8
+ readonly visible: {
9
+ readonly lane: "request";
10
+ readonly id: string;
11
+ readonly request: {
12
+ readonly endpoint: "chat" | "responses" | "anthropic";
13
+ readonly method: "POST";
14
+ readonly path: string;
15
+ readonly headers: readonly {
16
+ readonly name: string;
17
+ readonly value: string;
18
+ }[];
19
+ readonly bodyJson: string;
20
+ };
21
+ } | {
22
+ readonly lane: "repository-agent";
23
+ readonly id: string;
24
+ readonly requestText: string;
25
+ readonly checkoutCommit: string;
26
+ readonly allowedTools: readonly ("test" | "read" | "search" | "edit" | "shell")[];
27
+ readonly constraints: readonly string[];
28
+ };
29
+ readonly analysis: {
30
+ readonly summary: string;
31
+ readonly userObservableBehaviors: readonly string[];
32
+ readonly constraints: readonly string[];
33
+ readonly risks: readonly string[];
34
+ };
35
+ readonly scope: readonly {
36
+ readonly id: string;
37
+ readonly kind: "preserved" | "changed";
38
+ readonly behaviorIds: readonly string[];
39
+ readonly description: string;
40
+ }[];
41
+ readonly contextSources: readonly {
42
+ readonly path: string;
43
+ readonly content: string;
44
+ }[];
45
+ readonly reviews: readonly unknown[];
46
+ readonly revisions: number;
47
+ readonly leakFindings: readonly string[];
48
+ readonly version: 1;
49
+ readonly stage: "spec";
50
+ readonly parentDigest: string;
51
+ readonly createdAt: string;
52
+ }> & {
53
+ readonly seed: RepositoryTaskSeedV1;
54
+ readonly parentDigest: string;
55
+ readonly maximumReviewRounds?: number;
56
+ }) => Effect.Effect<{
57
+ readonly visible: {
58
+ readonly lane: "request";
59
+ readonly id: string;
60
+ readonly request: {
61
+ readonly endpoint: "chat" | "responses" | "anthropic";
62
+ readonly method: "POST";
63
+ readonly path: string;
64
+ readonly headers: readonly {
65
+ readonly name: string;
66
+ readonly value: string;
67
+ }[];
68
+ readonly bodyJson: string;
69
+ };
70
+ } | {
71
+ readonly lane: "repository-agent";
72
+ readonly id: string;
73
+ readonly requestText: string;
74
+ readonly checkoutCommit: string;
75
+ readonly allowedTools: readonly ("test" | "read" | "search" | "edit" | "shell")[];
76
+ readonly constraints: readonly string[];
77
+ };
78
+ readonly analysis: {
79
+ readonly summary: string;
80
+ readonly userObservableBehaviors: readonly string[];
81
+ readonly constraints: readonly string[];
82
+ readonly risks: readonly string[];
83
+ };
84
+ readonly scope: readonly {
85
+ readonly id: string;
86
+ readonly kind: "preserved" | "changed";
87
+ readonly behaviorIds: readonly string[];
88
+ readonly description: string;
89
+ }[];
90
+ readonly contextSources: readonly {
91
+ readonly path: string;
92
+ readonly content: string;
93
+ }[];
94
+ readonly reviews: readonly unknown[];
95
+ readonly revisions: number;
96
+ readonly leakFindings: readonly string[];
97
+ readonly version: 1;
98
+ readonly stage: "spec";
99
+ readonly parentDigest: string;
100
+ readonly createdAt: string;
101
+ }, RepositoryFoundryError | import("../../case-pipeline-protocol.js").PipelineBudgetExhaustedError, RepositoryFoundryLanguageModel>;
102
+ /** Legacy callers still require and preserve their qualified seed checkpoint. */
103
+ export declare const runPipelineSpecStageV1: PipelineStageRunV1<SpecCheckpointV1>;