@substrate-ai/factory 0.20.1 → 0.20.3

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 (486) hide show
  1. package/README.md +39 -0
  2. package/package.json +6 -3
  3. package/dist/__tests__/config.test.d.ts +0 -11
  4. package/dist/__tests__/config.test.d.ts.map +0 -1
  5. package/dist/__tests__/config.test.js +0 -215
  6. package/dist/__tests__/config.test.js.map +0 -1
  7. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  8. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  9. package/dist/__tests__/factory-run-command.test.js +0 -454
  10. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  11. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  12. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  13. package/dist/__tests__/factory-validate-command.test.js +0 -339
  14. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  15. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  19. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  23. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  25. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  26. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  27. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  31. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  35. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  37. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  38. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  39. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  41. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  42. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  43. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  45. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  46. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  47. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  49. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  50. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  51. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  55. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  59. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  63. package/dist/__tests__/integration/events.test.d.ts +0 -8
  64. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  65. package/dist/__tests__/integration/events.test.js +0 -194
  66. package/dist/__tests__/integration/events.test.js.map +0 -1
  67. package/dist/__tests__/integration/graphs.d.ts +0 -59
  68. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  69. package/dist/__tests__/integration/graphs.js +0 -164
  70. package/dist/__tests__/integration/graphs.js.map +0 -1
  71. package/dist/__tests__/integration/helpers.d.ts +0 -127
  72. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  73. package/dist/__tests__/integration/helpers.js +0 -167
  74. package/dist/__tests__/integration/helpers.js.map +0 -1
  75. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  76. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  77. package/dist/__tests__/integration/integrity.test.js +0 -198
  78. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  79. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  81. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  82. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  83. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  84. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  85. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  86. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  87. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  89. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  90. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  91. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  95. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  96. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  97. package/dist/__tests__/integration/persistence.test.js +0 -129
  98. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  99. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  103. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  105. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  106. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  107. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  109. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  110. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  111. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  113. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  114. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  115. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  116. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  117. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  118. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  119. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  120. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  121. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  122. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  123. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  124. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  125. package/dist/agent/__tests__/loop.test.js +0 -868
  126. package/dist/agent/__tests__/loop.test.js.map +0 -1
  127. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  128. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  129. package/dist/agent/__tests__/truncation.test.js +0 -276
  130. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  131. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  135. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  136. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  137. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  138. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  139. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  141. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  143. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  145. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  146. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  147. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  148. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  149. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  150. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  151. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  153. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  154. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  155. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  156. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  157. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  158. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  159. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  160. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  161. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  162. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  163. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  164. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  165. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  166. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  167. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  169. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  170. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  171. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  172. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  173. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  174. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  175. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  176. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  177. package/dist/backend/__tests__/parity.test.js +0 -411
  178. package/dist/backend/__tests__/parity.test.js.map +0 -1
  179. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  181. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  182. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  183. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  184. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  185. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  186. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  187. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  189. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  191. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  192. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  193. package/dist/context/__tests__/summarizer.test.js +0 -189
  194. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  195. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  196. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  197. package/dist/context/__tests__/summary-cache.test.js +0 -214
  198. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  199. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  200. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  201. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  202. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  203. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  204. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  205. package/dist/context/__tests__/summary-types.test.js +0 -130
  206. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  207. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  208. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  209. package/dist/convergence/__tests__/budget.test.js +0 -187
  210. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  211. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  212. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  213. package/dist/convergence/__tests__/controller.test.js +0 -585
  214. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  215. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  217. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  218. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  219. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  221. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  222. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  223. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  224. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  225. package/dist/convergence/__tests__/plateau.test.js +0 -163
  226. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  227. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  228. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  229. package/dist/convergence/__tests__/remediation.test.js +0 -209
  230. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  231. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  233. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  234. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  235. package/dist/factory-command.test.d.ts +0 -8
  236. package/dist/factory-command.test.d.ts.map +0 -1
  237. package/dist/factory-command.test.js +0 -304
  238. package/dist/factory-command.test.js.map +0 -1
  239. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  241. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  242. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  243. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  244. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  245. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  246. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  247. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  248. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  249. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  250. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  251. package/dist/graph/__tests__/context.test.d.ts +0 -14
  252. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  253. package/dist/graph/__tests__/context.test.js +0 -276
  254. package/dist/graph/__tests__/context.test.js.map +0 -1
  255. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  257. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  258. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  259. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  260. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  261. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  262. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  263. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  265. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  266. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  267. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  269. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  270. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  271. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  272. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  273. package/dist/graph/__tests__/executor.test.js +0 -901
  274. package/dist/graph/__tests__/executor.test.js.map +0 -1
  275. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  276. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  277. package/dist/graph/__tests__/fidelity.test.js +0 -135
  278. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  279. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  281. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  282. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  283. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  285. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  286. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  287. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  288. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  289. package/dist/graph/__tests__/parser.test.js +0 -452
  290. package/dist/graph/__tests__/parser.test.js.map +0 -1
  291. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  292. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  293. package/dist/graph/__tests__/run-state.test.js +0 -189
  294. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  295. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  296. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  297. package/dist/graph/__tests__/transformer.test.js +0 -350
  298. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  299. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  300. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  301. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  302. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  303. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  305. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  306. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  307. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  309. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  310. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  311. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  312. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  313. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  314. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  315. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  316. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  317. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  318. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  319. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  321. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  322. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  323. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  325. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  326. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  327. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  329. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  330. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  331. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  333. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  334. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  335. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  336. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  337. package/dist/handlers/__tests__/registry.test.js +0 -315
  338. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  339. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  341. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  342. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  343. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  347. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  348. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  349. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  350. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  351. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  353. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  354. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  355. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  357. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  358. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  359. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  361. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  362. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  363. package/dist/llm/__tests__/client.test.d.ts +0 -2
  364. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  365. package/dist/llm/__tests__/client.test.js +0 -198
  366. package/dist/llm/__tests__/client.test.js.map +0 -1
  367. package/dist/llm/__tests__/types.test.d.ts +0 -2
  368. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  369. package/dist/llm/__tests__/types.test.js +0 -289
  370. package/dist/llm/__tests__/types.test.js.map +0 -1
  371. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  375. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  377. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  378. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  379. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  381. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  382. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  383. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  385. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  386. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  387. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  389. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  390. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  391. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  392. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  393. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  394. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  395. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  397. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  398. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  399. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  401. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  402. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  403. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  405. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  406. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  407. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  409. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  410. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  411. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  415. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  417. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  418. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  419. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  420. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  421. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  422. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  423. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  425. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  426. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  427. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  428. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  429. package/dist/scenarios/__tests__/store.test.js +0 -169
  430. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  431. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  433. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  434. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  435. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  436. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  437. package/dist/templates/__tests__/templates.test.js +0 -92
  438. package/dist/templates/__tests__/templates.test.js.map +0 -1
  439. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  440. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  441. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  442. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  443. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  444. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  445. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  446. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  447. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  449. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  450. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  451. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  452. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  453. package/dist/twins/__tests__/integration/helpers.js +0 -67
  454. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  455. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  456. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  457. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  458. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  459. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  460. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  461. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  462. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  463. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  464. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  465. package/dist/twins/__tests__/persistence.test.js +0 -300
  466. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  467. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  468. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  469. package/dist/twins/__tests__/registry.test.js +0 -282
  470. package/dist/twins/__tests__/registry.test.js.map +0 -1
  471. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  472. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  473. package/dist/twins/__tests__/run-state.test.js +0 -112
  474. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  475. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  476. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  477. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  478. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  479. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  480. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  481. package/dist/twins/__tests__/templates.test.js +0 -87
  482. package/dist/twins/__tests__/templates.test.js.map +0 -1
  483. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  484. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  485. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  486. package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
@@ -1,449 +0,0 @@
1
- /**
2
- * Convergence loop cross-project validation integration tests.
3
- * Story 45-10: validates trycycle.dot fixture, two-iteration convergence via
4
- * conditional routing, pipeline budget cap, plateau detection, and remediation
5
- * context injection — all using real convergence implementations.
6
- *
7
- * AC2 — trycycle.dot fixture parses and validates without errors (5 nodes, correct attributes).
8
- * AC3 — two-iteration convergence: goal gate fails (score<0.8) then passes (score=1.0).
9
- * AC4 — pipeline budget cap halts the convergence loop.
10
- * AC5 — plateau detection halts the loop after constant scores fill the window.
11
- * AC6 — remediation context is injected before the retry dispatch at the exit goal gate.
12
- */
13
- // vi.mock is hoisted — must appear before imports that use the mocked module.
14
- // Use importOriginal to preserve exec/execFile/etc. used by @substrate-ai/core.
15
- vi.mock('child_process', async (importOriginal) => {
16
- const actual = await importOriginal();
17
- return {
18
- ...actual,
19
- spawn: vi.fn(),
20
- };
21
- });
22
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
23
- import { spawn } from 'child_process';
24
- import { parseGraph } from '../../graph/parser.js';
25
- import { createValidator } from '../../graph/validator.js';
26
- import { createGraphExecutor } from '../../graph/executor.js';
27
- import { getRemediationContext } from '../../convergence/remediation.js';
28
- import { HandlerRegistry } from '../../handlers/registry.js';
29
- import { startHandler } from '../../handlers/start.js';
30
- import { exitHandler } from '../../handlers/exit.js';
31
- import { conditionalHandler } from '../../handlers/conditional.js';
32
- import { createToolHandler } from '../../handlers/tool.js';
33
- import { makeTmpDir, cleanDir, buildScenarioRunResult, createMockSpawnProcess, readNamedFixtureDot, } from './helpers.js';
34
- // ---------------------------------------------------------------------------
35
- // Helpers
36
- // ---------------------------------------------------------------------------
37
- const mockSpawn = vi.mocked(spawn);
38
- /**
39
- * Build a registry for trycycle.dot tests.
40
- * - Real handlers for start, exit, conditional, tool (validate).
41
- * - Spy for codergen (shape=box → implement node).
42
- */
43
- function createTrycycleRegistry(implementSpy) {
44
- const registry = new HandlerRegistry();
45
- registry.register('start', startHandler);
46
- registry.register('exit', exitHandler);
47
- registry.register('conditional', conditionalHandler);
48
- registry.register('tool', createToolHandler());
49
- registry.register('codergen', implementSpy);
50
- registry.registerShape('Mdiamond', 'start');
51
- registry.registerShape('Msquare', 'exit');
52
- registry.registerShape('diamond', 'conditional');
53
- registry.registerShape('box', 'codergen');
54
- registry.registerShape('parallelogram', 'tool');
55
- registry.setDefault(implementSpy);
56
- return registry;
57
- }
58
- // ---------------------------------------------------------------------------
59
- // Mini-graph helpers for goal-gate-failure path tests (AC5, AC6)
60
- // ---------------------------------------------------------------------------
61
- const minimalNode = {
62
- id: '',
63
- label: '',
64
- shape: '',
65
- type: '',
66
- prompt: '',
67
- maxRetries: 0,
68
- goalGate: false,
69
- retryTarget: '',
70
- fallbackRetryTarget: '',
71
- fidelity: '',
72
- threadId: '',
73
- class: '',
74
- timeout: 0,
75
- llmModel: '',
76
- llmProvider: '',
77
- reasoningEffort: '',
78
- autoStatus: false,
79
- allowPartial: false,
80
- toolCommand: '',
81
- backend: '',
82
- };
83
- function makeNode(id, overrides) {
84
- return { ...minimalNode, id, ...overrides };
85
- }
86
- function makeEdge(fromNode, toNode, overrides) {
87
- return {
88
- fromNode,
89
- toNode,
90
- label: '',
91
- condition: '',
92
- weight: 0,
93
- fidelity: '',
94
- threadId: '',
95
- loopRestart: false,
96
- ...overrides,
97
- };
98
- }
99
- function makeMiniGraph(nodeList, edgeList, startNodeId, exitNodeId, graphRetryTarget) {
100
- const nodeMap = new Map(nodeList.map((n) => [n.id, n]));
101
- return {
102
- id: 'mini-test',
103
- goal: '',
104
- label: '',
105
- modelStylesheet: '',
106
- defaultMaxRetries: 0,
107
- retryTarget: graphRetryTarget ?? '',
108
- fallbackRetryTarget: '',
109
- defaultFidelity: '',
110
- nodes: nodeMap,
111
- edges: edgeList,
112
- outgoingEdges: (nodeId) => edgeList.filter((e) => e.fromNode === nodeId),
113
- startNode: () => nodeMap.get(startNodeId),
114
- exitNode: () => nodeMap.get(exitNodeId),
115
- };
116
- }
117
- function makeRegistry(handlerMap) {
118
- return {
119
- register: vi.fn(),
120
- registerShape: vi.fn(),
121
- setDefault: vi.fn(),
122
- resolve: vi.fn().mockImplementation((node) => {
123
- const handler = handlerMap[node.id];
124
- if (!handler)
125
- throw new Error(`No handler for node "${node.id}"`);
126
- return handler;
127
- }),
128
- };
129
- }
130
- // ---------------------------------------------------------------------------
131
- // Setup / teardown for trycycle.dot-based tests
132
- // ---------------------------------------------------------------------------
133
- let logsRoot;
134
- beforeEach(async () => {
135
- logsRoot = await makeTmpDir();
136
- vi.clearAllMocks();
137
- });
138
- afterEach(async () => {
139
- await cleanDir(logsRoot);
140
- vi.clearAllMocks();
141
- });
142
- // ---------------------------------------------------------------------------
143
- // AC2: trycycle.dot fixture parses and validates
144
- // ---------------------------------------------------------------------------
145
- describe('AC2: trycycle.dot fixture parses and validates', () => {
146
- it('AC2a: trycycle.dot parses without errors and validates with zero error diagnostics', () => {
147
- const dotSource = readNamedFixtureDot('trycycle.dot');
148
- const graph = parseGraph(dotSource);
149
- const validator = createValidator();
150
- // Should not throw
151
- expect(() => validator.validateOrRaise(graph)).not.toThrow();
152
- const diagnostics = validator.validate(graph);
153
- const errors = diagnostics.filter((d) => d.severity === 'error');
154
- expect(errors).toHaveLength(0);
155
- });
156
- it('AC2a: trycycle.dot graph has exactly 5 nodes', () => {
157
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
158
- expect(graph.nodes.size).toBe(5);
159
- });
160
- it('AC2a: trycycle.dot implement node has goalGate=true', () => {
161
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
162
- const implementNode = graph.nodes.get('implement');
163
- expect(implementNode).toBeDefined();
164
- expect(implementNode.goalGate).toBe(true);
165
- });
166
- it('AC2b: trycycle.dot implement node has retryTarget=implement', () => {
167
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
168
- const implementNode = graph.nodes.get('implement');
169
- expect(implementNode).toBeDefined();
170
- expect(implementNode.retryTarget).toBe('implement');
171
- });
172
- it('AC2a: trycycle.dot graph-level retryTarget attribute is "implement"', () => {
173
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
174
- expect(graph.retryTarget).toBe('implement');
175
- });
176
- });
177
- // ---------------------------------------------------------------------------
178
- // AC3: Two-iteration convergence via conditional routing
179
- // ---------------------------------------------------------------------------
180
- describe('AC3: two-iteration convergence via conditional routing', () => {
181
- it('AC3a: executor returns SUCCESS after two iterations (score 0.667 then 1.0)', async () => {
182
- const result1 = buildScenarioRunResult(2, 3);
183
- const result2 = buildScenarioRunResult(3, 3);
184
- mockSpawn
185
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
186
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
187
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
188
- const implementSpy = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
189
- const registry = createTrycycleRegistry(implementSpy);
190
- const result = await createGraphExecutor().run(graph, {
191
- runId: 'test-ac3a',
192
- logsRoot,
193
- handlerRegistry: registry,
194
- plateauWindow: 3,
195
- plateauThreshold: 0.05,
196
- });
197
- expect(result.status).toBe('SUCCESS');
198
- });
199
- it('AC3b: validate (tool) handler invoked exactly twice across both iterations', async () => {
200
- const result1 = buildScenarioRunResult(2, 3);
201
- const result2 = buildScenarioRunResult(3, 3);
202
- mockSpawn
203
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
204
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
205
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
206
- const implementSpy = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
207
- const registry = createTrycycleRegistry(implementSpy);
208
- await createGraphExecutor().run(graph, {
209
- runId: 'test-ac3b',
210
- logsRoot,
211
- handlerRegistry: registry,
212
- plateauWindow: 3,
213
- plateauThreshold: 0.05,
214
- });
215
- // spawn is called once per validate invocation
216
- expect(mockSpawn).toHaveBeenCalledTimes(2);
217
- });
218
- it('AC3c: implement (goal_gate) handler dispatched exactly twice', async () => {
219
- const result1 = buildScenarioRunResult(2, 3);
220
- const result2 = buildScenarioRunResult(3, 3);
221
- mockSpawn
222
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result1), exitCode: 0 }))
223
- .mockImplementationOnce(() => createMockSpawnProcess({ stdout: JSON.stringify(result2), exitCode: 0 }));
224
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
225
- const implementSpy = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
226
- const registry = createTrycycleRegistry(implementSpy);
227
- await createGraphExecutor().run(graph, {
228
- runId: 'test-ac3c',
229
- logsRoot,
230
- handlerRegistry: registry,
231
- plateauWindow: 3,
232
- plateauThreshold: 0.05,
233
- });
234
- // implement is dispatched once initially and once as retry target (via conditional routing)
235
- expect(implementSpy).toHaveBeenCalledTimes(2);
236
- });
237
- });
238
- // ---------------------------------------------------------------------------
239
- // AC4: Pipeline budget cap halts convergence loop
240
- // ---------------------------------------------------------------------------
241
- describe('AC4: pipeline budget cap halts convergence loop', () => {
242
- it('AC4a: budget cap halts when accumulated cost exceeds pipelineBudgetCapUsd', async () => {
243
- // validate always returns score=0 so conditional routes back to implement
244
- const result0 = buildScenarioRunResult(0, 3);
245
- mockSpawn.mockImplementation(() => createMockSpawnProcess({ stdout: JSON.stringify(result0), exitCode: 0 }));
246
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
247
- // implement returns SUCCESS with $0.04 per-dispatch cost
248
- const implementSpy = vi.fn().mockResolvedValue({
249
- status: 'SUCCESS',
250
- contextUpdates: { 'factory.lastNodeCostUsd': '0.04' },
251
- });
252
- const registry = createTrycycleRegistry(implementSpy);
253
- const result = await createGraphExecutor().run(graph, {
254
- runId: 'test-ac4a',
255
- logsRoot,
256
- handlerRegistry: registry,
257
- pipelineBudgetCapUsd: 0.05,
258
- });
259
- expect(result.status).toBe('FAIL');
260
- expect(result.failureReason).toContain('Pipeline budget exceeded');
261
- });
262
- it('AC4b: implement handler called at most twice before budget halts', async () => {
263
- const result0 = buildScenarioRunResult(0, 3);
264
- mockSpawn.mockImplementation(() => createMockSpawnProcess({ stdout: JSON.stringify(result0), exitCode: 0 }));
265
- const graph = parseGraph(readNamedFixtureDot('trycycle.dot'));
266
- const implementSpy = vi.fn().mockResolvedValue({
267
- status: 'SUCCESS',
268
- contextUpdates: { 'factory.lastNodeCostUsd': '0.04' },
269
- });
270
- const registry = createTrycycleRegistry(implementSpy);
271
- await createGraphExecutor().run(graph, {
272
- runId: 'test-ac4b',
273
- logsRoot,
274
- handlerRegistry: registry,
275
- pipelineBudgetCapUsd: 0.05,
276
- });
277
- // Accumulated cost exceeds $0.05 after second implement dispatch ($0.08 > $0.05),
278
- // so budget check fires before the third dispatch. implement called ≤ 2 times.
279
- expect(implementSpy.mock.calls.length).toBeLessThanOrEqual(2);
280
- });
281
- });
282
- // ---------------------------------------------------------------------------
283
- // AC5: Plateau detection halts loop when scores stop improving
284
- //
285
- // These tests use a custom mini-graph with a separate node named 'goalGate'
286
- // (goalGate=true) that is never dispatched. Since goalGate is never visited,
287
- // the goal-gate check always fails, and the convergence retry path fires on
288
- // each iteration — the only path where plateau detection runs.
289
- // ---------------------------------------------------------------------------
290
- describe('AC5: plateau detection via goal-gate failure path (mini-graph)', () => {
291
- it('AC5a: executor returns FAIL with plateau message after window fills with identical scores', async () => {
292
- // Graph: start → exit directly; a separate 'goalGate' node has goalGate=true but is NOT in
293
- // the traversal path (never dispatched). retryTarget='implement' on graph.
294
- // At exit each iteration: goalGate is unsatisfied (never dispatched, outcome=undefined).
295
- // The executor routes to implement (retry target) → exit → ... repeat.
296
- // convergence.satisfactionScore defaults to 0.0 each iteration (never set).
297
- // plateauWindow=3, plateauThreshold=0.5 → plateau fires after 3 iterations with [0,0,0].
298
- //
299
- // Trace:
300
- // iter1: start→exit: goalGate unsatisfied → record 0.0 → [0.0], not full → retry=implement
301
- // iter2: implement→exit: goalGate unsatisfied → record 0.0 → [0.0, 0.0], not full → retry
302
- // iter3: implement→exit: goalGate unsatisfied → record 0.0 → [0.0, 0.0, 0.0], window full → FAIL plateau
303
- const goalGateNode = makeNode('goalGate', { goalGate: true });
304
- const startH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
305
- const implementH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
306
- const registry = makeRegistry({ start: startH, implement: implementH });
307
- const graph = makeMiniGraph([makeNode('start'), goalGateNode, makeNode('implement'), makeNode('exit')], [
308
- makeEdge('start', 'exit'),
309
- makeEdge('implement', 'exit'),
310
- ], 'start', 'exit', 'implement');
311
- const result = await createGraphExecutor().run(graph, {
312
- runId: 'test-ac5a',
313
- logsRoot,
314
- handlerRegistry: registry,
315
- plateauWindow: 3,
316
- plateauThreshold: 0.5,
317
- });
318
- expect(result.status).toBe('FAIL');
319
- expect(result.failureReason).toContain('Convergence plateau detected');
320
- });
321
- it('AC5b: plateau failure reason includes score history', async () => {
322
- const goalGateNode = makeNode('goalGate', { goalGate: true });
323
- const startH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
324
- const implementH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
325
- const registry = makeRegistry({ start: startH, implement: implementH });
326
- const graph = makeMiniGraph([makeNode('start'), goalGateNode, makeNode('implement'), makeNode('exit')], [
327
- makeEdge('start', 'exit'),
328
- makeEdge('implement', 'exit'),
329
- ], 'start', 'exit', 'implement');
330
- const result = await createGraphExecutor().run(graph, {
331
- runId: 'test-ac5b',
332
- logsRoot,
333
- handlerRegistry: registry,
334
- plateauWindow: 3,
335
- plateauThreshold: 0.5,
336
- });
337
- // failure message format: "scores plateaued at [X, Y, Z]"
338
- // convergence.satisfactionScore defaults to 0.0 → scores are [0, 0, 0]
339
- expect(result.failureReason).toContain('iteration(s)');
340
- // The failure reason includes the bracketed score array
341
- expect(result.failureReason).toMatch(/\[.*\]/);
342
- });
343
- it('AC5c: plateau does NOT fire before window is filled (window=4, only 3 iterations)', async () => {
344
- // plateauWindow=4 → need 4 iterations to fill window. We stop after 3 via budget cap.
345
- // implement costs $0.04 per call; cap=$0.09 → budget exceeded after 3rd dispatch
346
- // (accumulated: $0.04 after iter1, $0.08 after iter2, $0.12 > $0.09 check fires after iter3 cost)
347
- // Wait: budget check is BEFORE dispatch. accumulated=$0.08 > $0.09? NO. dispatch iter3 cost=$0.04.
348
- // accumulated=$0.12. Budget check BEFORE iter4 dispatch: $0.12 > $0.09? YES → FAIL 'budget exceeded'.
349
- // So 3 goal-gate failures occur, window=[0.0,0.0,0.0] (3 entries < window=4), no plateau.
350
- const goalGateNode = makeNode('goalGate', { goalGate: true });
351
- const startH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
352
- const implementH = vi.fn().mockResolvedValue({
353
- status: 'SUCCESS',
354
- contextUpdates: { 'factory.lastNodeCostUsd': '0.04' },
355
- });
356
- const registry = makeRegistry({ start: startH, implement: implementH });
357
- const graph = makeMiniGraph([makeNode('start'), goalGateNode, makeNode('implement'), makeNode('exit')], [
358
- makeEdge('start', 'exit'),
359
- makeEdge('implement', 'exit'),
360
- ], 'start', 'exit', 'implement');
361
- const result = await createGraphExecutor().run(graph, {
362
- runId: 'test-ac5c',
363
- logsRoot,
364
- handlerRegistry: registry,
365
- plateauWindow: 4,
366
- plateauThreshold: 0.5,
367
- pipelineBudgetCapUsd: 0.09,
368
- });
369
- // Should fail due to budget exceeded, NOT plateau
370
- expect(result.status).toBe('FAIL');
371
- expect(result.failureReason).not.toContain('plateau');
372
- expect(result.failureReason).not.toContain('Plateau');
373
- });
374
- });
375
- // ---------------------------------------------------------------------------
376
- // AC6: Remediation context injected before retry dispatch
377
- //
378
- // Uses a mini-graph where the goal-gate failure path fires at the exit node,
379
- // injects remediation context, then routes to 'implement' as the retry target.
380
- // The implement handler captures the context on its second invocation.
381
- // ---------------------------------------------------------------------------
382
- describe('AC6: remediation context injected on goal-gate retry dispatch', () => {
383
- it('AC6a: getRemediationContext returns non-null with iterationCount=1 on retry dispatch', async () => {
384
- // Graph: start → exit directly. implement[goalGate=true] is NOT in the start→exit path.
385
- // graph.retryTarget='implement'. implement → exit.
386
- //
387
- // Trace:
388
- // start → exit: goal gate check → implement unsatisfied (never dispatched) → iter=1
389
- // → inject remediation context → route to implement (first dispatch)
390
- // implement → exit: goal gate check → implement = SUCCESS → passes → return SUCCESS
391
- //
392
- // implement is dispatched ONCE (as the retry target after goal gate fails).
393
- // The remediation context is injected into the graph context BEFORE implement is dispatched.
394
- const implementGoalGate = makeNode('implement', { goalGate: true });
395
- let capturedContextOnRetry;
396
- const implementH = vi.fn().mockImplementation(async (_node, context) => {
397
- // Capture context on the first (and only) dispatch — this is the retry dispatch
398
- capturedContextOnRetry = context;
399
- return { status: 'SUCCESS' };
400
- });
401
- const startH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
402
- const registry = makeRegistry({ start: startH, implement: implementH });
403
- const graph = makeMiniGraph([makeNode('start'), implementGoalGate, makeNode('exit')], [
404
- makeEdge('start', 'exit'),
405
- makeEdge('implement', 'exit'),
406
- ], 'start', 'exit', 'implement');
407
- const result = await createGraphExecutor().run(graph, {
408
- runId: 'test-ac6a',
409
- logsRoot,
410
- handlerRegistry: registry,
411
- });
412
- // Graph converges to SUCCESS: start→exit (goal gate fails) → implement→exit (passes)
413
- expect(result.status).toBe('SUCCESS');
414
- // implement was dispatched exactly once (as retry target after goal gate failure)
415
- expect(implementH).toHaveBeenCalledTimes(1);
416
- // Remediation context was injected before the implement retry dispatch
417
- expect(capturedContextOnRetry).toBeDefined();
418
- const remediation = getRemediationContext(capturedContextOnRetry);
419
- expect(remediation).toBeDefined();
420
- expect(remediation.iterationCount).toBe(1);
421
- expect(remediation.previousFailureReason).toBeTruthy();
422
- expect(remediation.previousFailureReason.length).toBeGreaterThan(0);
423
- });
424
- it('AC6b: remediation previousFailureReason mentions the failing goal gate node id', async () => {
425
- const implementGoalGate = makeNode('implement', { goalGate: true });
426
- let capturedContextOnRetry;
427
- const implementH = vi.fn().mockImplementation(async (_node, context) => {
428
- capturedContextOnRetry = context;
429
- return { status: 'SUCCESS' };
430
- });
431
- const startH = vi.fn().mockResolvedValue({ status: 'SUCCESS' });
432
- const registry = makeRegistry({ start: startH, implement: implementH });
433
- const graph = makeMiniGraph([makeNode('start'), implementGoalGate, makeNode('exit')], [
434
- makeEdge('start', 'exit'),
435
- makeEdge('implement', 'exit'),
436
- ], 'start', 'exit', 'implement');
437
- await createGraphExecutor().run(graph, {
438
- runId: 'test-ac6b',
439
- logsRoot,
440
- handlerRegistry: registry,
441
- });
442
- expect(capturedContextOnRetry).toBeDefined();
443
- const remediation = getRemediationContext(capturedContextOnRetry);
444
- expect(remediation).toBeDefined();
445
- // The previousFailureReason should contain the failing goal gate node id ('implement')
446
- expect(remediation.previousFailureReason).toContain('implement');
447
- });
448
- });
449
- //# sourceMappingURL=convergence-validation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convergence-validation.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/convergence-validation.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Epic 44 coverage gate — smoke tests for all public API exports (Story 44-10 AC7).
3
- *
4
- * This file validates that all Epic 44 public API exports are present and functional.
5
- * It does NOT duplicate logic from unit tests — it verifies the public API contract only.
6
- *
7
- * Expected per-story test counts and running total:
8
- * // 44-1: ~10, 44-2: ~8, 44-3: ~6, 44-4: ~8, 44-5: ~13, 44-6: ~7, 44-7: ~8, 44-8: ~6,
9
- * // 44-9: ~16, 44-10: ~33 → Total ≥ 115 >> gate of 60
10
- */
11
- export {};
12
- //# sourceMappingURL=epic44-coverage-gate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"epic44-coverage-gate.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/epic44-coverage-gate.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Epic 44 coverage gate — smoke tests for all public API exports (Story 44-10 AC7).
3
- *
4
- * This file validates that all Epic 44 public API exports are present and functional.
5
- * It does NOT duplicate logic from unit tests — it verifies the public API contract only.
6
- *
7
- * Expected per-story test counts and running total:
8
- * // 44-1: ~10, 44-2: ~8, 44-3: ~6, 44-4: ~8, 44-5: ~13, 44-6: ~7, 44-7: ~8, 44-8: ~6,
9
- * // 44-9: ~16, 44-10: ~33 → Total ≥ 115 >> gate of 60
10
- */
11
- import { describe, it, expect } from 'vitest';
12
- // Import all Epic 44 public API exports.
13
- // factorySchema is not re-exported from the barrel, so import from its direct path.
14
- import { ScenarioStore, computeSatisfactionScore, FactoryConfigSchema, loadFactoryConfig, registerFactoryCommand, } from '@substrate-ai/factory';
15
- import { factorySchema } from '../../persistence/factory-schema.js';
16
- // ---------------------------------------------------------------------------
17
- // Epic 44 public API smoke tests
18
- // ---------------------------------------------------------------------------
19
- describe('Epic 44 public API gate (AC7)', () => {
20
- it('gate-1: ScenarioStore is exported and constructible (story 44-1)', () => {
21
- expect(typeof ScenarioStore).not.toBe('undefined');
22
- const store = new ScenarioStore();
23
- expect(store).toBeDefined();
24
- expect(typeof store.discover).toBe('function');
25
- expect(typeof store.verify).toBe('function');
26
- expect(typeof store.verifyIntegrity).toBe('function');
27
- });
28
- it('gate-2: computeSatisfactionScore is exported as a function (story 44-5)', () => {
29
- expect(typeof computeSatisfactionScore).toBe('function');
30
- });
31
- it('gate-3: computeSatisfactionScore computes correct score (story 44-5)', () => {
32
- const result = {
33
- scenarios: [],
34
- summary: { total: 3, passed: 2, failed: 1 },
35
- durationMs: 150,
36
- };
37
- const score = computeSatisfactionScore(result);
38
- expect(score.score).toBeCloseTo(2 / 3, 5);
39
- expect(score.passes).toBe(false);
40
- expect(score.threshold).toBe(0.8);
41
- });
42
- it('gate-4: factorySchema is exported as a function (story 44-6)', () => {
43
- expect(typeof factorySchema).toBe('function');
44
- });
45
- it('gate-5: FactoryConfigSchema.parse({}) returns defaults without throwing (story 44-9)', () => {
46
- const config = FactoryConfigSchema.parse({});
47
- expect(config).toBeDefined();
48
- expect(config.scenario_dir).toBe('.substrate/scenarios/');
49
- expect(config.satisfaction_threshold).toBe(0.8);
50
- });
51
- it('gate-6: loadFactoryConfig is exported as a function (story 44-9)', () => {
52
- expect(typeof loadFactoryConfig).toBe('function');
53
- });
54
- it('gate-7: registerFactoryCommand is exported as a function (story 44-8)', () => {
55
- expect(typeof registerFactoryCommand).toBe('function');
56
- });
57
- });
58
- //# sourceMappingURL=epic44-coverage-gate.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"epic44-coverage-gate.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/epic44-coverage-gate.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,yCAAyC;AACzC,oFAAoF;AACpF,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEnE,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3B,MAAM,CAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5C,MAAM,CAAC,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YAC3C,UAAU,EAAE,GAAG;SAChB,CAAA;QACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Epic 45 coverage gate — smoke tests for all public convergence API exports.
3
- * Story 45-10 AC7: validates that all Epic 45 convergence components are
4
- * importable and callable before the Epic 46 satisfaction scoring layer is added.
5
- *
6
- * Expected per-story assertion counts and running total:
7
- * // 45-1 through 45-4: ~35, 45-5: ~8, 45-6: ~8, 45-7: ~10, 45-8: ~14, 45-9: ~8,
8
- * // 45-10: ~25 → Total ≥ 108
9
- */
10
- export {};
11
- //# sourceMappingURL=epic45-coverage-gate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"epic45-coverage-gate.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/epic45-coverage-gate.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Epic 45 coverage gate — smoke tests for all public convergence API exports.
3
- * Story 45-10 AC7: validates that all Epic 45 convergence components are
4
- * importable and callable before the Epic 46 satisfaction scoring layer is added.
5
- *
6
- * Expected per-story assertion counts and running total:
7
- * // 45-1 through 45-4: ~35, 45-5: ~8, 45-6: ~8, 45-7: ~10, 45-8: ~14, 45-9: ~8,
8
- * // 45-10: ~25 → Total ≥ 108
9
- */
10
- import { describe, it, expect } from 'vitest';
11
- import { createConvergenceController } from '../../convergence/controller.js';
12
- import { SessionBudgetManager, PipelineBudgetManager } from '../../convergence/budget.js';
13
- import { createPlateauDetector } from '../../convergence/plateau.js';
14
- import { buildRemediationContext, getRemediationContext } from '../../convergence/remediation.js';
15
- import { GraphContext } from '../../graph/context.js';
16
- // ---------------------------------------------------------------------------
17
- // Epic 45 public API smoke tests
18
- // ---------------------------------------------------------------------------
19
- describe('Epic 45 convergence API gate (AC7)', () => {
20
- it('gate-1: createConvergenceController is exported and returns a controller (story 45-1)', () => {
21
- const controller = createConvergenceController();
22
- expect(controller).toBeDefined();
23
- expect(typeof controller.checkGoalGates).toBe('function');
24
- expect(typeof controller.resolveRetryTarget).toBe('function');
25
- expect(typeof controller.recordOutcome).toBe('function');
26
- });
27
- it('gate-2: SessionBudgetManager is exported and constructible (story 45-5)', () => {
28
- const manager = new SessionBudgetManager();
29
- expect(manager).toBeDefined();
30
- expect(typeof manager.checkBudget).toBe('function');
31
- expect(typeof manager.getElapsedMs).toBe('function');
32
- });
33
- it('gate-3: PipelineBudgetManager is exported and constructible (story 45-4)', () => {
34
- const manager = new PipelineBudgetManager();
35
- expect(manager).toBeDefined();
36
- expect(typeof manager.checkBudget).toBe('function');
37
- expect(typeof manager.addCost).toBe('function');
38
- expect(typeof manager.getTotalCost).toBe('function');
39
- });
40
- it('gate-4: createPlateauDetector is exported and returns a detector (story 45-6)', () => {
41
- const detector = createPlateauDetector();
42
- expect(detector).toBeDefined();
43
- expect(typeof detector.recordScore).toBe('function');
44
- expect(typeof detector.isPlateaued).toBe('function');
45
- expect(typeof detector.getScores).toBe('function');
46
- });
47
- it('gate-5: buildRemediationContext is exported and builds a valid context (story 45-7)', () => {
48
- const ctx = buildRemediationContext({
49
- previousFailureReason: 'test failure',
50
- iterationCount: 1,
51
- satisfactionScoreHistory: [0.5],
52
- });
53
- expect(ctx).toBeDefined();
54
- expect(ctx.previousFailureReason).toBe('test failure');
55
- expect(ctx.iterationCount).toBe(1);
56
- expect(ctx.satisfactionScoreHistory).toEqual([0.5]);
57
- });
58
- it('gate-6: getRemediationContext returns undefined when no context injected (story 45-7)', () => {
59
- const context = new GraphContext();
60
- const result = getRemediationContext(context);
61
- expect(result).toBeUndefined();
62
- });
63
- });
64
- //# sourceMappingURL=epic45-coverage-gate.test.js.map