@substrate-ai/factory 0.19.54 → 0.20.2

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 (491) hide show
  1. package/README.md +39 -0
  2. package/dist/config.d.ts +4 -4
  3. package/package.json +12 -3
  4. package/dist/__tests__/config.test.d.ts +0 -11
  5. package/dist/__tests__/config.test.d.ts.map +0 -1
  6. package/dist/__tests__/config.test.js +0 -215
  7. package/dist/__tests__/config.test.js.map +0 -1
  8. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  9. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  10. package/dist/__tests__/factory-run-command.test.js +0 -454
  11. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  12. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  13. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  14. package/dist/__tests__/factory-validate-command.test.js +0 -339
  15. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  19. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  23. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  25. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  26. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  27. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  31. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  35. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  37. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  38. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  39. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  41. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  42. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  43. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  45. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  46. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  47. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  49. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  50. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  51. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  55. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  59. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  63. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  64. package/dist/__tests__/integration/events.test.d.ts +0 -8
  65. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  66. package/dist/__tests__/integration/events.test.js +0 -194
  67. package/dist/__tests__/integration/events.test.js.map +0 -1
  68. package/dist/__tests__/integration/graphs.d.ts +0 -59
  69. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  70. package/dist/__tests__/integration/graphs.js +0 -164
  71. package/dist/__tests__/integration/graphs.js.map +0 -1
  72. package/dist/__tests__/integration/helpers.d.ts +0 -127
  73. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  74. package/dist/__tests__/integration/helpers.js +0 -167
  75. package/dist/__tests__/integration/helpers.js.map +0 -1
  76. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  77. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/integrity.test.js +0 -198
  79. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  81. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  83. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  84. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  85. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  87. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  89. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  91. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  95. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  96. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  97. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  98. package/dist/__tests__/integration/persistence.test.js +0 -129
  99. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  103. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  105. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  107. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  109. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  111. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  113. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  115. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  116. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  117. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  119. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  120. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  121. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  122. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  123. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  124. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  125. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  126. package/dist/agent/__tests__/loop.test.js +0 -868
  127. package/dist/agent/__tests__/loop.test.js.map +0 -1
  128. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  129. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  130. package/dist/agent/__tests__/truncation.test.js +0 -276
  131. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  135. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  136. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  137. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  138. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  139. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  141. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  143. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  145. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  146. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  147. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  148. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  149. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  150. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  151. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  153. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  154. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  155. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  156. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  157. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  158. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  159. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  160. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  161. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  162. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  163. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  164. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  165. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  166. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  167. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  169. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  170. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  171. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  172. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  173. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  174. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  175. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  176. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  177. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  178. package/dist/backend/__tests__/parity.test.js +0 -411
  179. package/dist/backend/__tests__/parity.test.js.map +0 -1
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  181. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  182. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  183. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  184. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  185. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  186. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  187. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  189. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  191. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  192. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  193. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  194. package/dist/context/__tests__/summarizer.test.js +0 -189
  195. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  196. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  197. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  198. package/dist/context/__tests__/summary-cache.test.js +0 -214
  199. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  200. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  201. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  202. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  203. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  204. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  205. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  206. package/dist/context/__tests__/summary-types.test.js +0 -130
  207. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  208. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  209. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  210. package/dist/convergence/__tests__/budget.test.js +0 -187
  211. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  212. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  213. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  214. package/dist/convergence/__tests__/controller.test.js +0 -585
  215. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  217. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  218. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  219. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  221. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  222. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  223. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  224. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  225. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  226. package/dist/convergence/__tests__/plateau.test.js +0 -163
  227. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  228. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  229. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  230. package/dist/convergence/__tests__/remediation.test.js +0 -209
  231. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  233. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  234. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  235. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  236. package/dist/factory-command.test.d.ts +0 -8
  237. package/dist/factory-command.test.d.ts.map +0 -1
  238. package/dist/factory-command.test.js +0 -304
  239. package/dist/factory-command.test.js.map +0 -1
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  241. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  242. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  243. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  244. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  245. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  246. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  247. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  248. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  249. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  250. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  251. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  252. package/dist/graph/__tests__/context.test.d.ts +0 -14
  253. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  254. package/dist/graph/__tests__/context.test.js +0 -276
  255. package/dist/graph/__tests__/context.test.js.map +0 -1
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  257. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  258. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  259. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  260. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  261. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  262. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  263. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  265. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  266. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  267. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  269. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  270. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  271. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  272. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  273. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  274. package/dist/graph/__tests__/executor.test.js +0 -901
  275. package/dist/graph/__tests__/executor.test.js.map +0 -1
  276. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  277. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  278. package/dist/graph/__tests__/fidelity.test.js +0 -135
  279. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  281. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  282. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  283. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  285. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  286. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  287. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  288. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  289. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  290. package/dist/graph/__tests__/parser.test.js +0 -452
  291. package/dist/graph/__tests__/parser.test.js.map +0 -1
  292. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  293. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  294. package/dist/graph/__tests__/run-state.test.js +0 -189
  295. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  296. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  297. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  298. package/dist/graph/__tests__/transformer.test.js +0 -350
  299. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  300. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  301. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  302. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  303. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  305. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  306. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  307. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  309. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  310. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  311. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  312. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  313. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  314. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  315. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  316. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  317. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  318. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  319. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  321. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  322. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  323. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  325. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  326. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  327. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  329. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  330. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  331. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  333. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  334. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  335. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  336. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  337. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  338. package/dist/handlers/__tests__/registry.test.js +0 -315
  339. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  341. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  342. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  343. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  347. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  348. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  349. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  350. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  351. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  353. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  354. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  355. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  357. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  358. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  359. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  361. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  362. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  363. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  364. package/dist/llm/__tests__/client.test.d.ts +0 -2
  365. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  366. package/dist/llm/__tests__/client.test.js +0 -198
  367. package/dist/llm/__tests__/client.test.js.map +0 -1
  368. package/dist/llm/__tests__/types.test.d.ts +0 -2
  369. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/llm/__tests__/types.test.js +0 -289
  371. package/dist/llm/__tests__/types.test.js.map +0 -1
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  375. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  377. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  378. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  379. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  381. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  382. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  383. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  385. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  386. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  387. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  389. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  390. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  391. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  392. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  393. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  394. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  395. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  397. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  398. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  399. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  401. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  402. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  403. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  405. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  406. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  407. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  409. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  410. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  411. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  415. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  417. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  418. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  419. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  420. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  421. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  422. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  423. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  425. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  426. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  427. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  428. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  429. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  430. package/dist/scenarios/__tests__/store.test.js +0 -169
  431. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  433. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  434. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  435. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  436. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  437. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  438. package/dist/templates/__tests__/templates.test.js +0 -92
  439. package/dist/templates/__tests__/templates.test.js.map +0 -1
  440. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  441. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  442. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  443. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  444. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  445. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  446. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  447. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  449. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  450. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  451. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  452. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +0 -16
  453. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +0 -1
  454. package/dist/twins/__tests__/integration/health-monitor-integration.test.js +0 -183
  455. package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +0 -1
  456. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  457. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  458. package/dist/twins/__tests__/integration/helpers.js +0 -67
  459. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  460. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  461. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  462. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  463. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  464. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  465. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  466. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  467. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  468. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  469. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  470. package/dist/twins/__tests__/persistence.test.js +0 -300
  471. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  472. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  473. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  474. package/dist/twins/__tests__/registry.test.js +0 -282
  475. package/dist/twins/__tests__/registry.test.js.map +0 -1
  476. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  477. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  478. package/dist/twins/__tests__/run-state.test.js +0 -112
  479. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  480. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  481. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  482. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  483. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  484. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  485. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  486. package/dist/twins/__tests__/templates.test.js +0 -87
  487. package/dist/twins/__tests__/templates.test.js.map +0 -1
  488. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  489. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  490. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  491. package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
@@ -1,515 +0,0 @@
1
- /**
2
- * Integration tests for parallel fan-out/fan-in execution.
3
- * Story 50-11 AC1.
4
- *
5
- * Tests cover:
6
- * - wait_all, first_success, quorum join policies
7
- * - Bounded concurrency (maxParallel)
8
- * - Fan-in heuristic and LLM-based winner selection
9
- * - Context isolation between branches
10
- * - Event emission (graph:parallel-* events)
11
- * - Absent eventBus handling
12
- * - Edge cases (empty parallel, all-fail)
13
- *
14
- * Test approach:
15
- * Handler chain tests: call parallel + fan_in handlers directly on parsed graph nodes.
16
- * Advantage: can inspect context state after handler returns.
17
- * Full executor tests: use createGraphExecutor for event emission verification.
18
- *
19
- * ≥15 `it(...)` cases required (AC7).
20
- */
21
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
22
- import os from 'node:os';
23
- import path from 'node:path';
24
- import { mkdir, rm } from 'node:fs/promises';
25
- import crypto from 'node:crypto';
26
- import { parseGraph } from '../../graph/parser.js';
27
- import { createGraphExecutor } from '../../graph/executor.js';
28
- import { GraphContext } from '../../graph/context.js';
29
- import { HandlerRegistry } from '../../handlers/registry.js';
30
- import { startHandler } from '../../handlers/start.js';
31
- import { exitHandler } from '../../handlers/exit.js';
32
- import { createParallelHandler } from '../../handlers/parallel.js';
33
- import { createFanInHandler, rankBranches } from '../../handlers/fan-in.js';
34
- import { PARALLEL_FAN_OUT_DOT, FIRST_SUCCESS_POLICY_DOT, QUORUM_POLICY_DOT, BOUNDED_CONCURRENCY_DOT, } from '../fixtures/parallel-fan-out-fan-in.dot.js';
35
- // ---------------------------------------------------------------------------
36
- // Helpers
37
- // ---------------------------------------------------------------------------
38
- /** Creates a unique temp directory for executor logsRoot. */
39
- async function makeTmpDir() {
40
- const dir = path.join(os.tmpdir(), `parallel-test-${crypto.randomUUID()}`);
41
- await mkdir(dir, { recursive: true });
42
- return dir;
43
- }
44
- async function cleanDir(dir) {
45
- await rm(dir, { recursive: true, force: true });
46
- }
47
- /** Creates a mock event bus that records all emitted events. */
48
- function makeEventSpy() {
49
- const events = [];
50
- const bus = {
51
- emit(event, payload) {
52
- events.push({ event: event, payload });
53
- },
54
- on() { },
55
- off() { },
56
- };
57
- return { bus, events };
58
- }
59
- /**
60
- * Build a HandlerRegistry with real parallel/fan_in handlers and per-node branch mocks.
61
- * The `setDefault` handler dispatches to per-node mocks via node.id lookup.
62
- */
63
- function makeParallelRegistry(branchMocks, opts) {
64
- const registry = new HandlerRegistry();
65
- registry.register('start', startHandler);
66
- registry.register('exit', exitHandler);
67
- registry.register('parallel', createParallelHandler({
68
- handlerRegistry: registry,
69
- ...(opts?.eventBus !== undefined ? { eventBus: opts.eventBus } : {}),
70
- ...(opts?.runId !== undefined ? { runId: opts.runId } : {}),
71
- }));
72
- registry.register('parallel.fan_in', createFanInHandler(opts?.fanInLlmCall !== undefined ? { llmCall: opts.fanInLlmCall } : undefined));
73
- const defaultHandler = async (node, context, graph) => {
74
- const h = branchMocks.get(node.id);
75
- if (h)
76
- return h(node, context, graph);
77
- return { status: 'SUCCESS' };
78
- };
79
- registry.setDefault(defaultHandler);
80
- return registry;
81
- }
82
- /**
83
- * Build a minimal IHandlerRegistry for handler chain tests (no start/exit needed).
84
- * Resolves branch handlers by node.id.
85
- */
86
- function makeChainRegistry(branchMocks, opts) {
87
- // We need a HandlerRegistry instance so we can pass handlerRegistry: registry to parallel
88
- const registry = new HandlerRegistry();
89
- const defaultHandler = async (node, context, graph) => {
90
- const h = branchMocks.get(node.id);
91
- if (h)
92
- return h(node, context, graph);
93
- return { status: 'SUCCESS' };
94
- };
95
- registry.setDefault(defaultHandler);
96
- // These are NOT needed for direct parallel handler calls, but register them for safety
97
- registry.register('start', startHandler);
98
- registry.register('exit', exitHandler);
99
- registry.register('parallel', createParallelHandler({
100
- handlerRegistry: registry,
101
- ...(opts?.eventBus !== undefined ? { eventBus: opts.eventBus } : {}),
102
- ...(opts?.runId !== undefined ? { runId: opts.runId } : {}),
103
- }));
104
- registry.register('parallel.fan_in', createFanInHandler());
105
- return registry;
106
- }
107
- // ---------------------------------------------------------------------------
108
- // AC1: wait_all policy tests
109
- // ---------------------------------------------------------------------------
110
- describe('parallel fan-out/fan-in — wait_all policy', () => {
111
- it('3-branch wait_all: all branches succeed → pipeline returns SUCCESS', async () => {
112
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
113
- const mocks = new Map();
114
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
115
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
116
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
117
- const fanOutNode = graph.nodes.get('fan_out');
118
- const fanInNode = graph.nodes.get('fan_in');
119
- const registry = makeChainRegistry(mocks);
120
- const parallelHandler = registry.resolve(fanOutNode);
121
- const fanInHandler = registry.resolve(fanInNode);
122
- const context = new GraphContext({ __runId: 'test-wait-all' });
123
- const parallelOutcome = await parallelHandler(fanOutNode, context, graph);
124
- expect(parallelOutcome.status).toBe('SUCCESS');
125
- const results = context.get('parallel.results');
126
- expect(Array.isArray(results)).toBe(true);
127
- expect(results).toHaveLength(3);
128
- const fanInOutcome = await fanInHandler(fanInNode, context, graph);
129
- expect(fanInOutcome.status).toBe('SUCCESS');
130
- const bestId = context.get('parallel.fan_in.best_id');
131
- expect(bestId).toBeDefined();
132
- });
133
- it('wait_all: 1 branch fails, 2 succeed → fan_in picks best of successful branches', async () => {
134
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
135
- const mocks = new Map();
136
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
137
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
138
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
139
- const fanOutNode = graph.nodes.get('fan_out');
140
- const fanInNode = graph.nodes.get('fan_in');
141
- const registry = makeChainRegistry(mocks);
142
- const parallelHandler = registry.resolve(fanOutNode);
143
- const fanInHandler = registry.resolve(fanInNode);
144
- const context = new GraphContext({ __runId: 'test-1-fail' });
145
- await parallelHandler(fanOutNode, context, graph);
146
- const fanInOutcome = await fanInHandler(fanInNode, context, graph);
147
- expect(fanInOutcome.status).toBe('SUCCESS');
148
- const bestId = context.get('parallel.fan_in.best_id');
149
- // branch_b and branch_c succeed (indices 1 and 2); fan_in picks lowest branch_id among eligible
150
- expect([1, 2]).toContain(bestId);
151
- });
152
- it('wait_all: all 3 branches fail → fan_in returns FAILURE', async () => {
153
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
154
- const mocks = new Map();
155
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
156
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
157
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
158
- const fanOutNode = graph.nodes.get('fan_out');
159
- const fanInNode = graph.nodes.get('fan_in');
160
- const registry = makeChainRegistry(mocks);
161
- const parallelHandler = registry.resolve(fanOutNode);
162
- const fanInHandler = registry.resolve(fanInNode);
163
- const context = new GraphContext({ __runId: 'test-all-fail' });
164
- await parallelHandler(fanOutNode, context, graph);
165
- const fanInOutcome = await fanInHandler(fanInNode, context, graph);
166
- expect(fanInOutcome.status).toBe('FAILURE');
167
- expect(fanInOutcome.failureReason).toContain('all branches failed');
168
- });
169
- it('wait_all: winning branch context_updates merged into parent context', async () => {
170
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
171
- const mocks = new Map();
172
- // Branch_a (index 0) sets a unique key in its context
173
- mocks.set('branch_a', vi.fn(async (_node, ctx) => {
174
- ctx.set('winner_key', 'from_branch_a');
175
- return { status: 'SUCCESS' };
176
- }));
177
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
178
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
179
- const fanOutNode = graph.nodes.get('fan_out');
180
- const fanInNode = graph.nodes.get('fan_in');
181
- const registry = makeChainRegistry(mocks);
182
- const parallelHandler = registry.resolve(fanOutNode);
183
- const fanInHandler = registry.resolve(fanInNode);
184
- const context = new GraphContext({ __runId: 'test-merge' });
185
- await parallelHandler(fanOutNode, context, graph);
186
- await fanInHandler(fanInNode, context, graph);
187
- // branch_a is the only SUCCESS, so it wins; its context snapshot is merged
188
- expect(context.get('winner_key')).toBe('from_branch_a');
189
- });
190
- });
191
- // ---------------------------------------------------------------------------
192
- // first_success policy tests
193
- // ---------------------------------------------------------------------------
194
- describe('parallel fan-out/fan-in — first_success policy', () => {
195
- it('first_success: first branch to succeed resolves immediately → SUCCESS', async () => {
196
- const graph = parseGraph(FIRST_SUCCESS_POLICY_DOT);
197
- let resolveA;
198
- const blockA = new Promise((resolve) => { resolveA = resolve; });
199
- // branch_a is delayed; branch_b resolves immediately
200
- const mocks = new Map();
201
- mocks.set('branch_a', vi.fn(async () => {
202
- await blockA;
203
- return { status: 'SUCCESS' };
204
- }));
205
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
206
- // Unblock branch_a after branch_b has resolved
207
- setTimeout(() => resolveA(undefined), 50);
208
- const fanOutNode = graph.nodes.get('fan_out');
209
- // Set a short drain timeout so the test doesn't wait 5000ms (default drain)
210
- fanOutNode.attrs = { cancel_drain_timeout_ms: '10' };
211
- const registry = makeChainRegistry(mocks);
212
- const parallelHandler = registry.resolve(fanOutNode);
213
- const context = new GraphContext({ __runId: 'test-first-success' });
214
- const outcome = await parallelHandler(fanOutNode, context, graph);
215
- expect(outcome.status).toBe('SUCCESS');
216
- const results = context.get('parallel.results');
217
- const successCount = results.filter((r) => r.status === 'SUCCESS').length;
218
- expect(successCount).toBeGreaterThanOrEqual(1);
219
- });
220
- });
221
- // ---------------------------------------------------------------------------
222
- // quorum policy tests
223
- // ---------------------------------------------------------------------------
224
- describe('parallel fan-out/fan-in — quorum policy', () => {
225
- it('quorum=2: 2 of 3 branches succeed → SUCCESS', async () => {
226
- const graph = parseGraph(QUORUM_POLICY_DOT);
227
- // Post-process: add quorum_size + short drain timeout to fan_out.attrs
228
- const fanOutNode = graph.nodes.get('fan_out');
229
- fanOutNode.attrs = { quorum_size: '2', cancel_drain_timeout_ms: '10' };
230
- const mocks = new Map();
231
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
232
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
233
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
234
- const registry = makeChainRegistry(mocks);
235
- const parallelHandler = registry.resolve(fanOutNode);
236
- const context = new GraphContext({ __runId: 'test-quorum-pass' });
237
- const outcome = await parallelHandler(fanOutNode, context, graph);
238
- expect(outcome.status).toBe('SUCCESS');
239
- const quorumReached = context.get('parallel.quorum_reached');
240
- expect(quorumReached).toBeGreaterThanOrEqual(2);
241
- });
242
- it('quorum=2: only 1 of 3 branches succeeds → FAILURE', async () => {
243
- const graph = parseGraph(QUORUM_POLICY_DOT);
244
- const fanOutNode = graph.nodes.get('fan_out');
245
- fanOutNode.attrs = { quorum_size: '2', cancel_drain_timeout_ms: '10' };
246
- const mocks = new Map();
247
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
248
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
249
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'FAILURE' }));
250
- const registry = makeChainRegistry(mocks);
251
- const parallelHandler = registry.resolve(fanOutNode);
252
- const context = new GraphContext({ __runId: 'test-quorum-fail' });
253
- const outcome = await parallelHandler(fanOutNode, context, graph);
254
- expect(outcome.status).toBe('FAILURE');
255
- });
256
- });
257
- // ---------------------------------------------------------------------------
258
- // Bounded concurrency
259
- // ---------------------------------------------------------------------------
260
- describe('parallel fan-out/fan-in — bounded concurrency', () => {
261
- it('maxParallel=2 with 4 branches: at most 2 handlers running concurrently', async () => {
262
- const graph = parseGraph(BOUNDED_CONCURRENCY_DOT);
263
- const fanOutNode = graph.nodes.get('fan_out');
264
- // maxParallel is set via DOT attribute [maxParallel=2], parsed to node.maxParallel=2
265
- let concurrent = 0;
266
- let maxConcurrent = 0;
267
- const resolvers = [];
268
- const delayedHandler = vi.fn(async () => {
269
- concurrent++;
270
- maxConcurrent = Math.max(maxConcurrent, concurrent);
271
- await new Promise((resolve) => resolvers.push(resolve));
272
- concurrent--;
273
- return { status: 'SUCCESS' };
274
- });
275
- const mocks = new Map();
276
- mocks.set('branch_a', delayedHandler);
277
- mocks.set('branch_b', delayedHandler);
278
- mocks.set('branch_c', delayedHandler);
279
- mocks.set('branch_d', delayedHandler);
280
- const registry = makeChainRegistry(mocks);
281
- const parallelHandler = registry.resolve(fanOutNode);
282
- const context = new GraphContext({ __runId: 'test-bounded' });
283
- // Start execution then progressively release branches
284
- const runPromise = parallelHandler(fanOutNode, context, graph);
285
- // Release 2 at a time to verify bounded concurrency
286
- await new Promise((r) => setTimeout(r, 10));
287
- while (resolvers.length > 0) {
288
- const r = resolvers.shift();
289
- r?.();
290
- await new Promise((r2) => setTimeout(r2, 5));
291
- }
292
- await runPromise;
293
- expect(maxConcurrent).toBeLessThanOrEqual(2);
294
- });
295
- });
296
- // ---------------------------------------------------------------------------
297
- // Fan-in heuristic selection
298
- // ---------------------------------------------------------------------------
299
- describe('fan-in — heuristic winner selection', () => {
300
- it('rankBranches: SUCCESS beats FAILURE; picks lowest branch_id on tie', () => {
301
- const results = [
302
- { branch_id: 0, status: 'FAILURE', failure_reason: 'err' },
303
- { branch_id: 1, status: 'SUCCESS' },
304
- { branch_id: 2, status: 'SUCCESS' },
305
- ];
306
- const winner = rankBranches(results);
307
- expect(winner).not.toBeNull();
308
- expect(winner.status).toBe('SUCCESS');
309
- expect(winner.branch_id).toBe(1); // lowest branch_id among SUCCESS
310
- });
311
- it('rankBranches: score descending as secondary sort criterion', () => {
312
- const results = [
313
- { branch_id: 0, status: 'SUCCESS', score: 5 },
314
- { branch_id: 1, status: 'SUCCESS', score: 10 },
315
- { branch_id: 2, status: 'SUCCESS', score: 7 },
316
- ];
317
- const winner = rankBranches(results);
318
- expect(winner.branch_id).toBe(1); // highest score
319
- });
320
- it('fan-in LLM mode: mock LLM returns branch_id 2 → that branch wins', async () => {
321
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
322
- const mocks = new Map();
323
- mocks.set('branch_a', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
324
- mocks.set('branch_b', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
325
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
326
- const fanOutNode = graph.nodes.get('fan_out');
327
- const fanInNode = graph.nodes.get('fan_in');
328
- // fan_in node needs a prompt for LLM selection
329
- fanInNode.prompt = 'Select the best implementation branch';
330
- const mockLlmCall = vi.fn().mockResolvedValue('2'); // LLM picks branch_id=2
331
- const registry = makeChainRegistry(mocks, {});
332
- const parallelHandler = registry.resolve(fanOutNode);
333
- const fanInHandler = createFanInHandler({ llmCall: mockLlmCall });
334
- const context = new GraphContext({ __runId: 'test-llm-fan-in' });
335
- await parallelHandler(fanOutNode, context, graph);
336
- const outcome = await fanInHandler(fanInNode, context, graph);
337
- expect(outcome.status).toBe('SUCCESS');
338
- expect(context.get('parallel.fan_in.best_id')).toBe(2);
339
- expect(mockLlmCall).toHaveBeenCalledOnce();
340
- });
341
- });
342
- // ---------------------------------------------------------------------------
343
- // Context isolation between branches
344
- // ---------------------------------------------------------------------------
345
- describe('parallel fan-out/fan-in — context isolation', () => {
346
- it('mutations in branch_a context are not visible in branch_b context', async () => {
347
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
348
- const mocks = new Map();
349
- mocks.set('branch_a', vi.fn(async (_node, ctx) => {
350
- ctx.set('key_a', 'value_from_a');
351
- return { status: 'SUCCESS' };
352
- }));
353
- mocks.set('branch_b', vi.fn(async (_node, ctx) => {
354
- ctx.set('key_b', 'value_from_b');
355
- return { status: 'SUCCESS' };
356
- }));
357
- mocks.set('branch_c', vi.fn().mockResolvedValue({ status: 'SUCCESS' }));
358
- const fanOutNode = graph.nodes.get('fan_out');
359
- const registry = makeChainRegistry(mocks);
360
- const parallelHandler = registry.resolve(fanOutNode);
361
- const context = new GraphContext({ __runId: 'test-isolation' });
362
- await parallelHandler(fanOutNode, context, graph);
363
- const results = context.get('parallel.results');
364
- // branch_a snapshot (index 0) should have key_a but NOT key_b
365
- const branchAResult = results.find((r) => r['branch_id'] === 0);
366
- const branchAContext = branchAResult?.['context_updates'];
367
- expect(branchAContext?.['key_a']).toBe('value_from_a');
368
- expect(branchAContext?.['key_b']).toBeUndefined();
369
- // branch_b snapshot (index 1) should have key_b but NOT key_a
370
- const branchBResult = results.find((r) => r['branch_id'] === 1);
371
- const branchBContext = branchBResult?.['context_updates'];
372
- expect(branchBContext?.['key_b']).toBe('value_from_b');
373
- expect(branchBContext?.['key_a']).toBeUndefined();
374
- });
375
- });
376
- // ---------------------------------------------------------------------------
377
- // Event emission tests (full executor runs)
378
- // ---------------------------------------------------------------------------
379
- describe('parallel fan-out/fan-in — event emission', () => {
380
- let logsRoot;
381
- beforeEach(async () => {
382
- logsRoot = await makeTmpDir();
383
- });
384
- afterEach(async () => {
385
- await cleanDir(logsRoot);
386
- });
387
- it('graph:parallel-started emitted once with correct branchCount=3', async () => {
388
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
389
- const { bus, events } = makeEventSpy();
390
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-test' });
391
- const result = await createGraphExecutor().run(graph, {
392
- runId: 'evt-test',
393
- logsRoot,
394
- handlerRegistry: registry,
395
- eventBus: bus,
396
- });
397
- expect(result.status).toBe('SUCCESS');
398
- const parallelStarted = events.filter((e) => e.event === 'graph:parallel-started');
399
- expect(parallelStarted).toHaveLength(1);
400
- const payload = parallelStarted[0].payload;
401
- expect(payload.branchCount).toBe(3);
402
- expect(payload.policy).toBe('wait_all');
403
- expect(payload.runId).toBe('evt-test');
404
- });
405
- it('graph:parallel-branch-started emitted once per branch (3 times)', async () => {
406
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
407
- const { bus, events } = makeEventSpy();
408
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-branch-start' });
409
- await createGraphExecutor().run(graph, {
410
- runId: 'evt-branch-start',
411
- logsRoot,
412
- handlerRegistry: registry,
413
- eventBus: bus,
414
- });
415
- const branchStarted = events.filter((e) => e.event === 'graph:parallel-branch-started');
416
- expect(branchStarted).toHaveLength(3);
417
- const indices = branchStarted.map((e) => e.payload.branchIndex);
418
- expect(indices).toContain(0);
419
- expect(indices).toContain(1);
420
- expect(indices).toContain(2);
421
- });
422
- it('graph:parallel-branch-completed emitted once per branch with durationMs >= 0', async () => {
423
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
424
- const { bus, events } = makeEventSpy();
425
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-branch-done' });
426
- await createGraphExecutor().run(graph, {
427
- runId: 'evt-branch-done',
428
- logsRoot,
429
- handlerRegistry: registry,
430
- eventBus: bus,
431
- });
432
- const branchCompleted = events.filter((e) => e.event === 'graph:parallel-branch-completed');
433
- expect(branchCompleted).toHaveLength(3);
434
- for (const evt of branchCompleted) {
435
- const p = evt.payload;
436
- expect(p.durationMs).toBeGreaterThanOrEqual(0);
437
- }
438
- });
439
- it('graph:parallel-completed emitted once; completedCount + cancelledCount === 3', async () => {
440
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
441
- const { bus, events } = makeEventSpy();
442
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-parallel-done' });
443
- await createGraphExecutor().run(graph, {
444
- runId: 'evt-parallel-done',
445
- logsRoot,
446
- handlerRegistry: registry,
447
- eventBus: bus,
448
- });
449
- const parallelCompleted = events.filter((e) => e.event === 'graph:parallel-completed');
450
- expect(parallelCompleted).toHaveLength(1);
451
- const payload = parallelCompleted[0].payload;
452
- expect(payload.completedCount + payload.cancelledCount).toBe(3);
453
- });
454
- it('graph:parallel-started appears before graph:parallel-branch-started in event stream', async () => {
455
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
456
- const { bus, events } = makeEventSpy();
457
- const registry = makeParallelRegistry(new Map(), { eventBus: bus, runId: 'evt-order' });
458
- await createGraphExecutor().run(graph, {
459
- runId: 'evt-order',
460
- logsRoot,
461
- handlerRegistry: registry,
462
- eventBus: bus,
463
- });
464
- const types = events.map((e) => e.event);
465
- const parallelStartIdx = types.indexOf('graph:parallel-started');
466
- const firstBranchStartIdx = types.indexOf('graph:parallel-branch-started');
467
- expect(parallelStartIdx).toBeGreaterThanOrEqual(0);
468
- expect(firstBranchStartIdx).toBeGreaterThanOrEqual(0);
469
- expect(parallelStartIdx).toBeLessThan(firstBranchStartIdx);
470
- });
471
- });
472
- // ---------------------------------------------------------------------------
473
- // Edge cases
474
- // ---------------------------------------------------------------------------
475
- describe('parallel fan-out/fan-in — edge cases', () => {
476
- it('absent eventBus: parallel handler runs without TypeError', async () => {
477
- const graph = parseGraph(PARALLEL_FAN_OUT_DOT);
478
- const fanOutNode = graph.nodes.get('fan_out');
479
- const registry = makeChainRegistry(new Map());
480
- const parallelHandler = registry.resolve(fanOutNode);
481
- const context = new GraphContext({ __runId: 'test-no-bus' });
482
- await expect(parallelHandler(fanOutNode, context, graph)).resolves.not.toThrow();
483
- });
484
- it('empty parallel node (0 branches): returns SUCCESS without crash', async () => {
485
- // Build a graph with a parallel node that has no outgoing edges
486
- const emptyParallelDot = `
487
- digraph empty_parallel {
488
- start [type="start"];
489
- fan_out [type="parallel"];
490
- exit [type="exit"];
491
- start -> fan_out;
492
- fan_out -> exit;
493
- }
494
- `;
495
- const graph = parseGraph(emptyParallelDot);
496
- const fanOutNode = graph.nodes.get('fan_out');
497
- // Override outgoingEdges for fan_out to return empty (fan_out only has edge to exit)
498
- // Actually fan_out has 1 edge to exit — parallel handler sees that as 1 branch
499
- // For truly empty, we create a stub with no outgoing edges from fan_out
500
- const emptyGraph = {
501
- ...graph,
502
- outgoingEdges: (nodeId) => {
503
- if (nodeId === 'fan_out')
504
- return [];
505
- return graph.outgoingEdges(nodeId);
506
- },
507
- };
508
- const registry = makeChainRegistry(new Map());
509
- const parallelHandler = registry.resolve(fanOutNode);
510
- const context = new GraphContext({ __runId: 'test-empty' });
511
- const outcome = await parallelHandler(fanOutNode, context, emptyGraph);
512
- expect(outcome.status).toBe('SUCCESS');
513
- });
514
- });
515
- //# sourceMappingURL=parallel-fan-out-fan-in.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parallel-fan-out-fan-in.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/parallel-fan-out-fan-in.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Integration tests: Database persistence (Story 44-10 AC4).
3
- *
4
- * Verifies that scenario_results rows are persisted correctly after each
5
- * validation node execution, using an in-memory DatabaseAdapter.
6
- */
7
- export {};
8
- //# sourceMappingURL=persistence.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/persistence.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}