groundswell 0.0.2 → 0.0.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 (633) hide show
  1. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +16 -0
  2. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +1 -0
  3. package/dist/__tests__/adversarial/attachChild-performance.test.js +187 -0
  4. package/dist/__tests__/adversarial/attachChild-performance.test.js.map +1 -0
  5. package/dist/__tests__/adversarial/circular-reference.test.d.ts +13 -0
  6. package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +1 -0
  7. package/dist/__tests__/adversarial/circular-reference.test.js +92 -0
  8. package/dist/__tests__/adversarial/circular-reference.test.js.map +1 -0
  9. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +16 -0
  10. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +1 -0
  11. package/dist/__tests__/adversarial/complex-circular-reference.test.js +127 -0
  12. package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +1 -0
  13. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +21 -0
  14. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +1 -0
  15. package/dist/__tests__/adversarial/concurrent-task-failures.test.js +667 -0
  16. package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +1 -0
  17. package/dist/__tests__/adversarial/deep-analysis.test.d.ts +6 -0
  18. package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +1 -0
  19. package/dist/__tests__/adversarial/deep-analysis.test.js +877 -0
  20. package/dist/__tests__/adversarial/deep-analysis.test.js.map +1 -0
  21. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +13 -0
  22. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +1 -0
  23. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +186 -0
  24. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +1 -0
  25. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +6 -0
  26. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +1 -0
  27. package/dist/__tests__/adversarial/e2e-prd-validation.test.js +626 -0
  28. package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +1 -0
  29. package/dist/__tests__/adversarial/edge-case.test.d.ts +6 -0
  30. package/dist/__tests__/adversarial/edge-case.test.d.ts.map +1 -0
  31. package/dist/__tests__/adversarial/edge-case.test.js +857 -0
  32. package/dist/__tests__/adversarial/edge-case.test.js.map +1 -0
  33. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +20 -0
  34. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +1 -0
  35. package/dist/__tests__/adversarial/error-merge-strategy.test.js +907 -0
  36. package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +1 -0
  37. package/dist/__tests__/adversarial/incremental-performance.test.d.ts +2 -0
  38. package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +1 -0
  39. package/dist/__tests__/adversarial/incremental-performance.test.js +113 -0
  40. package/dist/__tests__/adversarial/incremental-performance.test.js.map +1 -0
  41. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +22 -0
  42. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +1 -0
  43. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +383 -0
  44. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +1 -0
  45. package/dist/__tests__/adversarial/observer-propagation.test.d.ts +21 -0
  46. package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +1 -0
  47. package/dist/__tests__/adversarial/observer-propagation.test.js +404 -0
  48. package/dist/__tests__/adversarial/observer-propagation.test.js.map +1 -0
  49. package/dist/__tests__/adversarial/parent-validation.test.d.ts +13 -0
  50. package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +1 -0
  51. package/dist/__tests__/adversarial/parent-validation.test.js +128 -0
  52. package/dist/__tests__/adversarial/parent-validation.test.js.map +1 -0
  53. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +20 -0
  54. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +1 -0
  55. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +482 -0
  56. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +1 -0
  57. package/dist/__tests__/adversarial/prd-compliance.test.d.ts +6 -0
  58. package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +1 -0
  59. package/dist/__tests__/adversarial/prd-compliance.test.js +886 -0
  60. package/dist/__tests__/adversarial/prd-compliance.test.js.map +1 -0
  61. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +22 -0
  62. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +1 -0
  63. package/dist/__tests__/compatibility/backward-compatibility.test.js +1843 -0
  64. package/dist/__tests__/compatibility/backward-compatibility.test.js.map +1 -0
  65. package/dist/__tests__/helpers/index.d.ts +10 -0
  66. package/dist/__tests__/helpers/index.d.ts.map +1 -0
  67. package/{src/__tests__/helpers/index.ts → dist/__tests__/helpers/index.js} +2 -10
  68. package/dist/__tests__/helpers/index.js.map +1 -0
  69. package/dist/__tests__/helpers/tree-verification.d.ts +90 -0
  70. package/dist/__tests__/helpers/tree-verification.d.ts.map +1 -0
  71. package/dist/__tests__/helpers/tree-verification.js +202 -0
  72. package/dist/__tests__/helpers/tree-verification.js.map +1 -0
  73. package/dist/__tests__/integration/agent-workflow.test.d.ts +2 -0
  74. package/dist/__tests__/integration/agent-workflow.test.d.ts.map +1 -0
  75. package/dist/__tests__/integration/agent-workflow.test.js +256 -0
  76. package/dist/__tests__/integration/agent-workflow.test.js.map +1 -0
  77. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +14 -0
  78. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +1 -0
  79. package/dist/__tests__/integration/bidirectional-consistency.test.js +668 -0
  80. package/dist/__tests__/integration/bidirectional-consistency.test.js.map +1 -0
  81. package/dist/__tests__/integration/observer-logging.test.d.ts +2 -0
  82. package/dist/__tests__/integration/observer-logging.test.d.ts.map +1 -0
  83. package/dist/__tests__/integration/observer-logging.test.js +517 -0
  84. package/dist/__tests__/integration/observer-logging.test.js.map +1 -0
  85. package/dist/__tests__/integration/tree-mirroring.test.d.ts +2 -0
  86. package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +1 -0
  87. package/dist/__tests__/integration/tree-mirroring.test.js +117 -0
  88. package/dist/__tests__/integration/tree-mirroring.test.js.map +1 -0
  89. package/dist/__tests__/integration/workflow-reparenting.test.d.ts +12 -0
  90. package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +1 -0
  91. package/dist/__tests__/integration/workflow-reparenting.test.js +239 -0
  92. package/dist/__tests__/integration/workflow-reparenting.test.js.map +1 -0
  93. package/dist/__tests__/unit/agent.test.d.ts +2 -0
  94. package/dist/__tests__/unit/agent.test.d.ts.map +1 -0
  95. package/dist/__tests__/unit/agent.test.js +143 -0
  96. package/dist/__tests__/unit/agent.test.js.map +1 -0
  97. package/dist/__tests__/unit/cache-key.test.d.ts +5 -0
  98. package/dist/__tests__/unit/cache-key.test.d.ts.map +1 -0
  99. package/dist/__tests__/unit/cache-key.test.js +145 -0
  100. package/dist/__tests__/unit/cache-key.test.js.map +1 -0
  101. package/dist/__tests__/unit/cache.test.d.ts +5 -0
  102. package/dist/__tests__/unit/cache.test.d.ts.map +1 -0
  103. package/dist/__tests__/unit/cache.test.js +132 -0
  104. package/dist/__tests__/unit/cache.test.js.map +1 -0
  105. package/dist/__tests__/unit/context.test.d.ts +2 -0
  106. package/dist/__tests__/unit/context.test.d.ts.map +1 -0
  107. package/dist/__tests__/unit/context.test.js +220 -0
  108. package/dist/__tests__/unit/context.test.js.map +1 -0
  109. package/dist/__tests__/unit/decorators.test.d.ts +2 -0
  110. package/dist/__tests__/unit/decorators.test.d.ts.map +1 -0
  111. package/dist/__tests__/unit/decorators.test.js +162 -0
  112. package/dist/__tests__/unit/decorators.test.js.map +1 -0
  113. package/dist/__tests__/unit/introspection-tools.test.d.ts +5 -0
  114. package/dist/__tests__/unit/introspection-tools.test.d.ts.map +1 -0
  115. package/dist/__tests__/unit/introspection-tools.test.js +191 -0
  116. package/dist/__tests__/unit/introspection-tools.test.js.map +1 -0
  117. package/dist/__tests__/unit/logger.test.d.ts +2 -0
  118. package/dist/__tests__/unit/logger.test.d.ts.map +1 -0
  119. package/dist/__tests__/unit/logger.test.js +241 -0
  120. package/dist/__tests__/unit/logger.test.js.map +1 -0
  121. package/dist/__tests__/unit/observable.test.d.ts +2 -0
  122. package/dist/__tests__/unit/observable.test.d.ts.map +1 -0
  123. package/dist/__tests__/unit/observable.test.js +251 -0
  124. package/dist/__tests__/unit/observable.test.js.map +1 -0
  125. package/dist/__tests__/unit/prompt.test.d.ts +2 -0
  126. package/dist/__tests__/unit/prompt.test.d.ts.map +1 -0
  127. package/dist/__tests__/unit/prompt.test.js +113 -0
  128. package/dist/__tests__/unit/prompt.test.js.map +1 -0
  129. package/dist/__tests__/unit/reflection.test.d.ts +5 -0
  130. package/dist/__tests__/unit/reflection.test.d.ts.map +1 -0
  131. package/dist/__tests__/unit/reflection.test.js +160 -0
  132. package/dist/__tests__/unit/reflection.test.js.map +1 -0
  133. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +2 -0
  134. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +1 -0
  135. package/dist/__tests__/unit/tree-debugger-incremental.test.js +136 -0
  136. package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +1 -0
  137. package/dist/__tests__/unit/tree-debugger.test.d.ts +2 -0
  138. package/dist/__tests__/unit/tree-debugger.test.d.ts.map +1 -0
  139. package/dist/__tests__/unit/tree-debugger.test.js +69 -0
  140. package/dist/__tests__/unit/tree-debugger.test.js.map +1 -0
  141. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +2 -0
  142. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +1 -0
  143. package/dist/__tests__/unit/utils/workflow-error-utils.test.js +154 -0
  144. package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +1 -0
  145. package/dist/__tests__/unit/workflow-detachChild.test.d.ts +2 -0
  146. package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +1 -0
  147. package/dist/__tests__/unit/workflow-detachChild.test.js +76 -0
  148. package/dist/__tests__/unit/workflow-detachChild.test.js.map +1 -0
  149. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +2 -0
  150. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +1 -0
  151. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +122 -0
  152. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +1 -0
  153. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +2 -0
  154. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +1 -0
  155. package/dist/__tests__/unit/workflow-isDescendantOf.test.js +140 -0
  156. package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +1 -0
  157. package/dist/__tests__/unit/workflow.test.d.ts +2 -0
  158. package/dist/__tests__/unit/workflow.test.d.ts.map +1 -0
  159. package/dist/__tests__/unit/workflow.test.js +330 -0
  160. package/dist/__tests__/unit/workflow.test.js.map +1 -0
  161. package/dist/cache/cache-key.d.ts +66 -0
  162. package/dist/cache/cache-key.d.ts.map +1 -0
  163. package/dist/cache/cache-key.js +195 -0
  164. package/dist/cache/cache-key.js.map +1 -0
  165. package/dist/cache/cache.d.ts +104 -0
  166. package/dist/cache/cache.d.ts.map +1 -0
  167. package/dist/cache/cache.js +179 -0
  168. package/dist/cache/cache.js.map +1 -0
  169. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  170. package/dist/cache/index.d.ts.map +1 -0
  171. package/dist/cache/index.js +6 -0
  172. package/dist/cache/index.js.map +1 -0
  173. package/dist/core/agent.d.ts +112 -0
  174. package/dist/core/agent.d.ts.map +1 -0
  175. package/dist/core/agent.js +426 -0
  176. package/dist/core/agent.js.map +1 -0
  177. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  178. package/dist/core/context.d.ts.map +1 -0
  179. package/dist/core/context.js +80 -0
  180. package/dist/core/context.js.map +1 -0
  181. package/dist/core/event-tree.d.ts +72 -0
  182. package/dist/core/event-tree.d.ts.map +1 -0
  183. package/dist/core/event-tree.js +211 -0
  184. package/dist/core/event-tree.js.map +1 -0
  185. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  186. package/dist/core/factory.d.ts.map +1 -0
  187. package/dist/core/factory.js +110 -0
  188. package/dist/core/factory.js.map +1 -0
  189. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  190. package/dist/core/index.d.ts.map +1 -0
  191. package/dist/core/index.js +9 -0
  192. package/dist/core/index.js.map +1 -0
  193. package/dist/core/logger.d.ts +50 -0
  194. package/dist/core/logger.d.ts.map +1 -0
  195. package/dist/core/logger.js +91 -0
  196. package/dist/core/logger.js.map +1 -0
  197. package/dist/core/mcp-handler.d.ts +69 -0
  198. package/dist/core/mcp-handler.d.ts.map +1 -0
  199. package/dist/core/mcp-handler.js +143 -0
  200. package/dist/core/mcp-handler.js.map +1 -0
  201. package/dist/core/prompt.d.ts +80 -0
  202. package/dist/core/prompt.d.ts.map +1 -0
  203. package/dist/core/prompt.js +120 -0
  204. package/dist/core/prompt.js.map +1 -0
  205. package/dist/core/workflow-context.d.ts +57 -0
  206. package/dist/core/workflow-context.d.ts.map +1 -0
  207. package/dist/core/workflow-context.js +263 -0
  208. package/dist/core/workflow-context.js.map +1 -0
  209. package/dist/core/workflow.d.ts +241 -0
  210. package/dist/core/workflow.d.ts.map +1 -0
  211. package/dist/core/workflow.js +464 -0
  212. package/dist/core/workflow.js.map +1 -0
  213. package/dist/debugger/index.d.ts +2 -0
  214. package/dist/debugger/index.d.ts.map +1 -0
  215. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  216. package/dist/debugger/index.js.map +1 -0
  217. package/dist/debugger/tree-debugger.d.ts +71 -0
  218. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  219. package/dist/debugger/tree-debugger.js +198 -0
  220. package/dist/debugger/tree-debugger.js.map +1 -0
  221. package/dist/decorators/index.d.ts +4 -0
  222. package/dist/decorators/index.d.ts.map +1 -0
  223. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  224. package/dist/decorators/index.js.map +1 -0
  225. package/dist/decorators/observed-state.d.ts +32 -0
  226. package/dist/decorators/observed-state.d.ts.map +1 -0
  227. package/dist/decorators/observed-state.js +79 -0
  228. package/dist/decorators/observed-state.js.map +1 -0
  229. package/dist/decorators/step.d.ts +15 -0
  230. package/dist/decorators/step.d.ts.map +1 -0
  231. package/dist/decorators/step.js +110 -0
  232. package/dist/decorators/step.js.map +1 -0
  233. package/dist/decorators/task.d.ts +50 -0
  234. package/dist/decorators/task.d.ts.map +1 -0
  235. package/dist/decorators/task.js +118 -0
  236. package/dist/decorators/task.js.map +1 -0
  237. package/dist/examples/index.d.ts +3 -0
  238. package/dist/examples/index.d.ts.map +1 -0
  239. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  240. package/dist/examples/index.js.map +1 -0
  241. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  242. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  243. package/dist/examples/tdd-orchestrator.js +121 -0
  244. package/dist/examples/tdd-orchestrator.js.map +1 -0
  245. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  246. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  247. package/dist/examples/test-cycle-workflow.js +116 -0
  248. package/dist/examples/test-cycle-workflow.js.map +1 -0
  249. package/dist/index.d.ts +27 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +40 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/reflection/index.d.ts +5 -0
  254. package/dist/reflection/index.d.ts.map +1 -0
  255. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  256. package/dist/reflection/index.js.map +1 -0
  257. package/dist/reflection/reflection.d.ts +84 -0
  258. package/dist/reflection/reflection.d.ts.map +1 -0
  259. package/dist/reflection/reflection.js +329 -0
  260. package/dist/reflection/reflection.js.map +1 -0
  261. package/dist/tools/index.d.ts +6 -0
  262. package/dist/tools/index.d.ts.map +1 -0
  263. package/dist/tools/index.js +11 -0
  264. package/dist/tools/index.js.map +1 -0
  265. package/dist/tools/introspection.d.ts +165 -0
  266. package/dist/tools/introspection.d.ts.map +1 -0
  267. package/dist/tools/introspection.js +324 -0
  268. package/dist/tools/introspection.js.map +1 -0
  269. package/dist/types/agent.d.ts +66 -0
  270. package/dist/types/agent.d.ts.map +1 -0
  271. package/dist/types/agent.js +6 -0
  272. package/dist/types/agent.js.map +1 -0
  273. package/dist/types/decorators.d.ts +31 -0
  274. package/dist/types/decorators.d.ts.map +1 -0
  275. package/dist/types/decorators.js +2 -0
  276. package/dist/types/decorators.js.map +1 -0
  277. package/dist/types/error-strategy.d.ts +13 -0
  278. package/dist/types/error-strategy.d.ts.map +1 -0
  279. package/dist/types/error-strategy.js +2 -0
  280. package/dist/types/error-strategy.js.map +1 -0
  281. package/dist/types/error.d.ts +20 -0
  282. package/dist/types/error.d.ts.map +1 -0
  283. package/dist/types/error.js +2 -0
  284. package/dist/types/error.js.map +1 -0
  285. package/dist/types/events.d.ts +87 -0
  286. package/dist/types/events.d.ts.map +1 -0
  287. package/dist/types/events.js +2 -0
  288. package/dist/types/events.js.map +1 -0
  289. package/dist/types/index.d.ts +15 -0
  290. package/dist/types/index.d.ts.map +1 -0
  291. package/dist/types/index.js +2 -0
  292. package/dist/types/index.js.map +1 -0
  293. package/dist/types/logging.d.ts +24 -0
  294. package/dist/types/logging.d.ts.map +1 -0
  295. package/dist/types/logging.js +2 -0
  296. package/dist/types/logging.js.map +1 -0
  297. package/dist/types/observer.d.ts +18 -0
  298. package/dist/types/observer.d.ts.map +1 -0
  299. package/dist/types/observer.js +2 -0
  300. package/dist/types/observer.js.map +1 -0
  301. package/dist/types/prompt.d.ts +31 -0
  302. package/dist/types/prompt.d.ts.map +1 -0
  303. package/dist/types/prompt.js +6 -0
  304. package/dist/types/prompt.js.map +1 -0
  305. package/dist/types/reflection.d.ts +96 -0
  306. package/dist/types/reflection.d.ts.map +1 -0
  307. package/dist/types/reflection.js +24 -0
  308. package/dist/types/reflection.js.map +1 -0
  309. package/dist/types/sdk-primitives.d.ts +118 -0
  310. package/dist/types/sdk-primitives.d.ts.map +1 -0
  311. package/dist/types/sdk-primitives.js +6 -0
  312. package/dist/types/sdk-primitives.js.map +1 -0
  313. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  314. package/dist/types/snapshot.d.ts.map +1 -0
  315. package/dist/types/snapshot.js +2 -0
  316. package/dist/types/snapshot.js.map +1 -0
  317. package/dist/types/workflow-context.d.ts +139 -0
  318. package/dist/types/workflow-context.d.ts.map +1 -0
  319. package/dist/types/workflow-context.js +8 -0
  320. package/dist/types/workflow-context.js.map +1 -0
  321. package/dist/types/workflow.d.ts +30 -0
  322. package/dist/types/workflow.d.ts.map +1 -0
  323. package/dist/types/workflow.js +2 -0
  324. package/dist/types/workflow.js.map +1 -0
  325. package/dist/utils/id.d.ts +6 -0
  326. package/dist/utils/id.d.ts.map +1 -0
  327. package/dist/utils/id.js +12 -0
  328. package/dist/utils/id.js.map +1 -0
  329. package/{src/utils/index.ts → dist/utils/index.d.ts} +1 -0
  330. package/dist/utils/index.d.ts.map +1 -0
  331. package/dist/utils/index.js +4 -0
  332. package/dist/utils/index.js.map +1 -0
  333. package/dist/utils/observable.d.ts +54 -0
  334. package/dist/utils/observable.d.ts.map +1 -0
  335. package/dist/utils/observable.js +82 -0
  336. package/dist/utils/observable.js.map +1 -0
  337. package/dist/utils/workflow-error-utils.d.ts +22 -0
  338. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  339. package/dist/utils/workflow-error-utils.js +45 -0
  340. package/dist/utils/workflow-error-utils.js.map +1 -0
  341. package/package.json +5 -2
  342. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  343. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  344. package/.claude/commands/task-breakdown.md +0 -94
  345. package/.claude/settings.local.json +0 -9
  346. package/.claude/system_prompts/task-breakdown.md +0 -101
  347. package/PRD.md +0 -543
  348. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  349. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  350. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  351. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  352. package/PRPs/PRDs/tasks-001.json +0 -492
  353. package/PRPs/README.md +0 -83
  354. package/PRPs/templates/prp_base.md +0 -222
  355. package/docs/agent.md +0 -422
  356. package/docs/prompt.md +0 -419
  357. package/docs/workflow.md +0 -600
  358. package/examples/README.md +0 -258
  359. package/examples/examples/01-basic-workflow.ts +0 -100
  360. package/examples/examples/02-decorator-options.ts +0 -217
  361. package/examples/examples/03-parent-child.ts +0 -241
  362. package/examples/examples/04-observers-debugger.ts +0 -340
  363. package/examples/examples/05-error-handling.ts +0 -387
  364. package/examples/examples/06-concurrent-tasks.ts +0 -352
  365. package/examples/examples/07-agent-loops.ts +0 -432
  366. package/examples/examples/08-sdk-features.ts +0 -667
  367. package/examples/examples/09-reflection.ts +0 -573
  368. package/examples/examples/10-introspection.ts +0 -550
  369. package/examples/examples/11-reparenting-workflows.ts +0 -269
  370. package/examples/index.ts +0 -147
  371. package/examples/utils/helpers.ts +0 -57
  372. package/package-lock.json +0 -2398
  373. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  374. package/plan/001_d3bb02af4886/backlog.json +0 -867
  375. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  385. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  386. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  387. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  388. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  389. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  390. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  391. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  392. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  393. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  394. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  395. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  396. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  397. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  398. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  399. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  400. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  401. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  402. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  403. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  404. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  405. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  406. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  407. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  408. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  409. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  410. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  411. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  412. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  413. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  414. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  415. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  416. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  417. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  418. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  419. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  420. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  421. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  422. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  423. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  424. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  425. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  426. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  427. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  428. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  429. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  430. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  431. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  432. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  433. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  434. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  435. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  436. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  437. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  438. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  439. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  440. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  441. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  442. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  443. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  444. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  445. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  446. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  447. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  448. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  449. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  450. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  451. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  452. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  453. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  454. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  455. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  456. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  457. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  458. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  459. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  460. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  461. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  462. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  463. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  464. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  465. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  466. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  467. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  468. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  469. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  470. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  471. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  472. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  473. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  474. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  475. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  476. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  477. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  478. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  479. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  480. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  481. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  482. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  483. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  484. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  485. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  486. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  487. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  488. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  489. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  490. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  491. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  492. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  493. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  494. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  495. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  496. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  497. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  498. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  499. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  500. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  501. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  502. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  503. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  504. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  505. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  506. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  507. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  508. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  509. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  510. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  511. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  512. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  513. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  514. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  515. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  516. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  517. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  518. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  519. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  520. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  521. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  522. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  523. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  524. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  525. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  526. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  527. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  528. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  529. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  530. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  531. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  532. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  533. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  534. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  535. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  536. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  537. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  538. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  539. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  540. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  541. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  542. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  543. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  544. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  545. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  546. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  547. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  548. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  549. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  550. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  551. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  552. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  553. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  554. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  555. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  556. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  557. package/scripts/generate-llms-full.ts +0 -206
  558. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  559. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  560. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  561. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  562. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  563. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  564. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  565. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  566. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  567. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  568. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  569. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  570. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  571. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  572. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  573. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  574. package/src/__tests__/helpers/tree-verification.ts +0 -257
  575. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  576. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  577. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  578. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  579. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  580. package/src/__tests__/unit/agent.test.ts +0 -169
  581. package/src/__tests__/unit/cache-key.test.ts +0 -182
  582. package/src/__tests__/unit/cache.test.ts +0 -172
  583. package/src/__tests__/unit/context.test.ts +0 -217
  584. package/src/__tests__/unit/decorators.test.ts +0 -100
  585. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  586. package/src/__tests__/unit/logger.test.ts +0 -293
  587. package/src/__tests__/unit/observable.test.ts +0 -321
  588. package/src/__tests__/unit/prompt.test.ts +0 -135
  589. package/src/__tests__/unit/reflection.test.ts +0 -210
  590. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  591. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  592. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  593. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  594. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  595. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  596. package/src/__tests__/unit/workflow.test.ts +0 -357
  597. package/src/cache/cache-key.ts +0 -244
  598. package/src/cache/cache.ts +0 -236
  599. package/src/core/agent.ts +0 -593
  600. package/src/core/event-tree.ts +0 -260
  601. package/src/core/logger.ts +0 -112
  602. package/src/core/mcp-handler.ts +0 -184
  603. package/src/core/prompt.ts +0 -150
  604. package/src/core/workflow-context.ts +0 -351
  605. package/src/core/workflow.ts +0 -540
  606. package/src/debugger/tree-debugger.ts +0 -255
  607. package/src/decorators/observed-state.ts +0 -95
  608. package/src/decorators/step.ts +0 -139
  609. package/src/decorators/task.ts +0 -159
  610. package/src/examples/tdd-orchestrator.ts +0 -65
  611. package/src/examples/test-cycle-workflow.ts +0 -64
  612. package/src/index.ts +0 -142
  613. package/src/reflection/reflection.ts +0 -407
  614. package/src/tools/index.ts +0 -36
  615. package/src/tools/introspection.ts +0 -464
  616. package/src/types/agent.ts +0 -90
  617. package/src/types/decorators.ts +0 -32
  618. package/src/types/error-strategy.ts +0 -13
  619. package/src/types/error.ts +0 -20
  620. package/src/types/events.ts +0 -75
  621. package/src/types/index.ts +0 -55
  622. package/src/types/logging.ts +0 -24
  623. package/src/types/observer.ts +0 -18
  624. package/src/types/prompt.ts +0 -40
  625. package/src/types/reflection.ts +0 -117
  626. package/src/types/sdk-primitives.ts +0 -128
  627. package/src/types/workflow-context.ts +0 -163
  628. package/src/types/workflow.ts +0 -37
  629. package/src/utils/id.ts +0 -11
  630. package/src/utils/observable.ts +0 -106
  631. package/src/utils/workflow-error-utils.ts +0 -56
  632. package/tsconfig.json +0 -22
  633. package/vitest.config.ts +0 -16
@@ -1,916 +0,0 @@
1
- # Promise.allSettled Testing Patterns for Workflow Engines
2
-
3
- **Research Date:** 2026-01-12
4
- **Task:** P1.M2.T2.S2 - Research Promise.allSettled error scenarios
5
- **Related Implementation:** `/home/dustin/projects/groundswell/src/decorators/task.ts` (lines 111-122)
6
-
7
- ## Overview
8
-
9
- Promise.allSettled is crucial for workflow engines because it ensures all concurrent workflows complete execution, even when some fail. This document provides comprehensive testing patterns for Promise.allSettled in the context of hierarchical workflow orchestration.
10
-
11
- ## Table of Contents
12
- 1. [Promise.allSettled Basics](#promiseallsettled-basics)
13
- 2. [Testing Patterns](#testing-patterns)
14
- 3. [Workflow-Specific Scenarios](#workflow-specific-scenarios)
15
- 4. [Error Collection Strategies](#error-collection-strategies)
16
- 5. [Performance & Concurrency](#performance--concurrency)
17
- 6. [Edge Cases](#edge-cases)
18
- 7. [Code Examples](#code-examples)
19
-
20
- ---
21
-
22
- ## Promise.allSettled Basics
23
-
24
- ### What is Promise.allSettled?
25
-
26
- ```typescript
27
- // Promise.allSettled waits for ALL promises to settle
28
- // regardless of whether they fulfill or reject
29
-
30
- const promises = [
31
- Promise.resolve('success'),
32
- Promise.reject(new Error('failure')),
33
- Promise.resolve('another success'),
34
- ];
35
-
36
- const results = await Promise.allSettled(promises);
37
-
38
- // Result structure:
39
- // [
40
- // { status: 'fulfilled', value: 'success' },
41
- // { status: 'rejected', reason: Error: failure },
42
- // { status: 'fulfilled', value: 'another success' },
43
- // ]
44
- ```
45
-
46
- ### Type Guards for Results
47
-
48
- ```typescript
49
- /**
50
- * Type guard for rejected results
51
- */
52
- function isRejected(result: PromiseSettledResult<unknown>): result is PromiseRejectedResult {
53
- return result.status === 'rejected';
54
- }
55
-
56
- /**
57
- * Type guard for fulfilled results
58
- */
59
- function isFulfilled<T>(result: PromiseSettledResult<T>): result is PromiseFulfilledResult<T> {
60
- return result.status === 'fulfilled';
61
- }
62
-
63
- /**
64
- * Extract errors from allSettled results
65
- */
66
- function extractErrors(results: PromiseSettledResult<unknown>[]): unknown[] {
67
- return results
68
- .filter(isRejected)
69
- .map(r => r.reason);
70
- }
71
-
72
- /**
73
- * Extract values from allSettled results
74
- */
75
- function extractValues<T>(results: PromiseSettledResult<T>[]): T[] {
76
- return results
77
- .filter(isFulfilled)
78
- .map(r => r.value);
79
- }
80
- ```
81
-
82
- ---
83
-
84
- ## Testing Patterns
85
-
86
- ### Pattern 1: Basic Error Collection
87
-
88
- ```typescript
89
- describe('Promise.allSettled - Basic Error Collection', () => {
90
- it('should collect all errors from rejected promises', async () => {
91
- // ARRANGE: Create promises with mixed results
92
- const promises = [
93
- Promise.reject(new Error('Error 1')),
94
- Promise.reject(new Error('Error 2')),
95
- Promise.resolve('success'),
96
- Promise.reject(new Error('Error 3')),
97
- ];
98
-
99
- // ACT: Wait for all to settle
100
- const results = await Promise.allSettled(promises);
101
-
102
- // ASSERT: Filter and verify errors
103
- const rejected = results.filter(
104
- (r): r is PromiseRejectedResult => r.status === 'rejected'
105
- );
106
-
107
- expect(rejected).toHaveLength(3);
108
- expect(rejected[0].reason.message).toBe('Error 1');
109
- expect(rejected[1].reason.message).toBe('Error 2');
110
- expect(rejected[2].reason.message).toBe('Error 3');
111
-
112
- // ASSERT: Verify fulfilled promises
113
- const fulfilled = results.filter(
114
- (r): r is PromiseFulfilledResult<unknown> => r.status === 'fulfilled'
115
- );
116
-
117
- expect(fulfilled).toHaveLength(1);
118
- expect(fulfilled[0].value).toBe('success');
119
- });
120
- });
121
- ```
122
-
123
- ### Pattern 2: All Promises Rejected
124
-
125
- ```typescript
126
- describe('Promise.allSettled - All Rejected', () => {
127
- it('should handle all promises rejected', async () => {
128
- // ARRANGE: All promises will reject
129
- const promises = [
130
- Promise.reject(new Error('Error A')),
131
- Promise.reject(new Error('Error B')),
132
- Promise.reject(new Error('Error C')),
133
- ];
134
-
135
- // ACT
136
- const results = await Promise.allSettled(promises);
137
-
138
- // ASSERT: All results are rejected
139
- expect(results).toHaveLength(3);
140
- results.forEach(result => {
141
- expect(result.status).toBe('rejected');
142
- if (result.status === 'rejected') {
143
- expect(result.reason).toBeInstanceOf(Error);
144
- }
145
- });
146
-
147
- // ASSERT: Extract all errors
148
- const errors = results
149
- .filter((r): r is PromiseRejectedResult => r.status === 'rejected')
150
- .map(r => r.reason);
151
-
152
- expect(errors).toHaveLength(3);
153
- expect(errors.map(e => e.message)).toEqual(['Error A', 'Error B', 'Error C']);
154
- });
155
- });
156
- ```
157
-
158
- ### Pattern 3: All Promises Fulfilled
159
-
160
- ```typescript
161
- describe('Promise.allSettled - All Fulfilled', () => {
162
- it('should handle all promises fulfilled', async () => {
163
- // ARRANGE: All promises will resolve
164
- const promises = [
165
- Promise.resolve('Result 1'),
166
- Promise.resolve('Result 2'),
167
- Promise.resolve('Result 3'),
168
- ];
169
-
170
- // ACT
171
- const results = await Promise.allSettled(promises);
172
-
173
- // ASSERT: All results are fulfilled
174
- expect(results).toHaveLength(3);
175
- results.forEach(result => {
176
- expect(result.status).toBe('fulfilled');
177
- if (result.status === 'fulfilled') {
178
- expect(result.value).toBeDefined();
179
- }
180
- });
181
-
182
- // ASSERT: Extract all values
183
- const values = results
184
- .filter((r): r is PromiseFulfilledResult<string> => r.status === 'fulfilled')
185
- .map(r => r.value);
186
-
187
- expect(values).toEqual(['Result 1', 'Result 2', 'Result 3']);
188
- });
189
- });
190
- ```
191
-
192
- ### Pattern 4: Empty Array
193
-
194
- ```typescript
195
- describe('Promise.allSettled - Empty Array', () => {
196
- it('should handle empty promise array', async () => {
197
- // ARRANGE: Empty array
198
- const promises: Promise<unknown>[] = [];
199
-
200
- // ACT
201
- const results = await Promise.allSettled(promises);
202
-
203
- // ASSERT: Returns empty array
204
- expect(results).toEqual([]);
205
- });
206
- });
207
- ```
208
-
209
- ---
210
-
211
- ## Workflow-Specific Scenarios
212
-
213
- ### Scenario 1: Concurrent Workflow Execution
214
-
215
- ```typescript
216
- describe('Concurrent Workflow Execution', () => {
217
- it('should execute all workflows even when some fail', async () => {
218
- // ARRANGE: Track execution
219
- const executedWorkflows = new Set<string>();
220
-
221
- class ChildWorkflow extends Workflow {
222
- async run() {
223
- executedWorkflows.add(this.id);
224
- throw new Error(`${this.id} failed`);
225
- }
226
- }
227
-
228
- class ParentWorkflow extends Workflow {
229
- @Task({ concurrent: true })
230
- async spawnChildren() {
231
- return [
232
- new ChildWorkflow('child-1', this),
233
- new ChildWorkflow('child-2', this),
234
- new ChildWorkflow('child-3', this),
235
- ];
236
- }
237
-
238
- async run() {
239
- try {
240
- await this.spawnChildren();
241
- } catch (err) {
242
- // Expected - error thrown after all complete
243
- }
244
- }
245
- }
246
-
247
- const parent = new ParentWorkflow('parent');
248
-
249
- // ACT: Run parent workflow
250
- await parent.run();
251
-
252
- // ASSERT: All workflows executed (Promise.allSettled completed all)
253
- expect(executedWorkflows.size).toBe(3);
254
- expect(executedWorkflows.has('child-1')).toBe(true);
255
- expect(executedWorkflows.has('child-2')).toBe(true);
256
- expect(executedWorkflows.has('child-3')).toBe(true);
257
- });
258
- });
259
- ```
260
-
261
- ### Scenario 2: Mixed Success/Failure
262
-
263
- ```typescript
264
- describe('Mixed Success/Failure Scenarios', () => {
265
- it('should complete successful workflows despite failures', async () => {
266
- // ARRANGE: Create workflows with mixed outcomes
267
- const successfulWorkflows = new Set<string>();
268
- const failedWorkflows = new Set<string>();
269
-
270
- class MixedOutcomeWorkflow extends Workflow {
271
- private shouldFail: boolean;
272
-
273
- constructor(id: string, parent: Workflow, shouldFail: boolean) {
274
- super(id, parent);
275
- this.shouldFail = shouldFail;
276
- }
277
-
278
- async run() {
279
- if (this.shouldFail) {
280
- failedWorkflows.add(this.id);
281
- throw new Error(`${this.id} failed`);
282
- } else {
283
- successfulWorkflows.add(this.id);
284
- return `${this.id} succeeded`;
285
- }
286
- }
287
- }
288
-
289
- class ParentWorkflow extends Workflow {
290
- @Task({ concurrent: true })
291
- async spawnChildren() {
292
- return [
293
- new MixedOutcomeWorkflow('success-1', this, false),
294
- new MixedOutcomeWorkflow('fail-1', this, true),
295
- new MixedOutcomeWorkflow('success-2', this, false),
296
- new MixedOutcomeWorkflow('fail-2', this, true),
297
- new MixedOutcomeWorkflow('success-3', this, false),
298
- ];
299
- }
300
-
301
- async run() {
302
- try {
303
- await this.spawnChildren();
304
- } catch (err) {
305
- // Expected
306
- }
307
- }
308
- }
309
-
310
- const parent = new ParentWorkflow('parent');
311
-
312
- // ACT
313
- await parent.run();
314
-
315
- // ASSERT: All workflows executed
316
- expect(successfulWorkflows.size).toBe(3);
317
- expect(failedWorkflows.size).toBe(2);
318
-
319
- // ASSERT: Verify specific workflows
320
- expect(successfulWorkflows.has('success-1')).toBe(true);
321
- expect(successfulWorkflows.has('success-2')).toBe(true);
322
- expect(successfulWorkflows.has('success-3')).toBe(true);
323
- expect(failedWorkflows.has('fail-1')).toBe(true);
324
- expect(failedWorkflows.has('fail-2')).toBe(true);
325
- });
326
- });
327
- ```
328
-
329
- ### Scenario 3: No Orphaned Workflows
330
-
331
- ```typescript
332
- describe('Orphan Prevention', () => {
333
- it('should not leave orphaned workflows', async () => {
334
- // ARRANGE: Track all promise completions
335
- const completions = new Map<string, 'success' | 'failure'>();
336
-
337
- class TrackedWorkflow extends Workflow {
338
- private shouldFail: boolean;
339
-
340
- constructor(id: string, parent: Workflow, shouldFail: boolean) {
341
- super(id, parent);
342
- this.shouldFail = shouldFail;
343
- }
344
-
345
- async run() {
346
- // Track completion regardless of outcome
347
- return this.runInternal()
348
- .then(
349
- () => completions.set(this.id, 'success'),
350
- () => completions.set(this.id, 'failure')
351
- );
352
- }
353
-
354
- async runInternal() {
355
- if (this.shouldFail) {
356
- throw new Error(`${this.id} failed`);
357
- }
358
- return `${this.id} succeeded`;
359
- }
360
- }
361
-
362
- class ParentWorkflow extends Workflow {
363
- @Task({ concurrent: true })
364
- async spawnChildren() {
365
- const children = [
366
- new TrackedWorkflow('workflow-1', this, false),
367
- new TrackedWorkflow('workflow-2', this, true),
368
- new TrackedWorkflow('workflow-3', this, false),
369
- ];
370
-
371
- // Manually track each child's completion
372
- children.forEach(child => {
373
- child.run().catch(() => {}); // Don't let errors propagate
374
- });
375
-
376
- return children;
377
- }
378
-
379
- async run() {
380
- try {
381
- await this.spawnChildren();
382
- } catch (err) {
383
- // Expected
384
- }
385
- }
386
- }
387
-
388
- const parent = new ParentWorkflow('parent');
389
-
390
- // ACT: Run with timeout to detect hanging promises
391
- const timeoutPromise = new Promise((_, reject) =>
392
- setTimeout(() => reject(new Error('Timeout: workflows hung')), 5000)
393
- );
394
-
395
- await Promise.race([parent.run(), timeoutPromise]);
396
-
397
- // ASSERT: All workflows accounted for (no orphans)
398
- expect(completions.size).toBe(3);
399
- expect(completions.get('workflow-1')).toBe('success');
400
- expect(completions.get('workflow-2')).toBe('failure');
401
- expect(completions.get('workflow-3')).toBe('success');
402
- });
403
- });
404
- ```
405
-
406
- ---
407
-
408
- ## Error Collection Strategies
409
-
410
- ### Strategy 1: First Error Wins (Backward Compatible)
411
-
412
- ```typescript
413
- describe('Error Collection - First Error Wins', () => {
414
- it('should throw first error when no merge strategy', async () => {
415
- // ARRANGE: Create parent without error merge strategy
416
- class ParentWorkflow extends Workflow {
417
- @Task({ concurrent: true }) // No errorMergeStrategy
418
- async spawnChildren() {
419
- return [
420
- createFailingWorkflow(this, 'First', 'First error'),
421
- createFailingWorkflow(this, 'Second', 'Second error'),
422
- createFailingWorkflow(this, 'Third', 'Third error'),
423
- ];
424
- }
425
-
426
- async run() {
427
- try {
428
- await this.spawnChildren();
429
- } catch (err) {
430
- return err;
431
- }
432
- }
433
- }
434
-
435
- const parent = new ParentWorkflow('parent');
436
-
437
- // ACT
438
- const result = await parent.run();
439
-
440
- // ASSERT: Only first error thrown
441
- expect(result.message).toContain('First error');
442
- expect(result.message).not.toContain('Second error');
443
- expect(result.message).not.toContain('Third error');
444
- });
445
- });
446
- ```
447
-
448
- ### Strategy 2: Collect All Errors
449
-
450
- ```typescript
451
- describe('Error Collection - Collect All', () => {
452
- it('should collect all errors when merge strategy enabled', async () => {
453
- // ARRANGE: Create parent with error merge strategy
454
- class ParentWorkflow extends Workflow {
455
- @Task({
456
- concurrent: true,
457
- errorMergeStrategy: { enabled: true }
458
- })
459
- async spawnChildren() {
460
- return [
461
- createFailingWorkflow(this, 'Alpha', 'Alpha error'),
462
- createFailingWorkflow(this, 'Beta', 'Beta error'),
463
- createFailingWorkflow(this, 'Gamma', 'Gamma error'),
464
- ];
465
- }
466
-
467
- async run() {
468
- try {
469
- await this.spawnChildren();
470
- } catch (err) {
471
- return err;
472
- }
473
- }
474
- }
475
-
476
- const parent = new ParentWorkflow('parent');
477
-
478
- // ACT
479
- const result = await parent.run();
480
-
481
- // ASSERT: All errors collected
482
- expect(result.message).toContain('3 concurrent errors');
483
- expect(result.message).toContain('Alpha error');
484
- expect(result.message).toContain('Beta error');
485
- expect(result.message).toContain('Gamma error');
486
- });
487
- });
488
- ```
489
-
490
- ### Strategy 3: Custom Error Filter
491
-
492
- ```typescript
493
- describe('Error Collection - Custom Filter', () => {
494
- it('should filter errors by type', async () => {
495
- // ARRANGE: Define custom error filter
496
- const isRetryableError = (error: Error) => {
497
- return error.message.includes('timeout') ||
498
- error.message.includes('network');
499
- };
500
-
501
- class CustomFilterWorkflow extends Workflow {
502
- @Task({
503
- concurrent: true,
504
- errorMergeStrategy: {
505
- enabled: true,
506
- combine: (errors) => {
507
- // Filter to only retryable errors
508
- const retryable = errors.filter(e =>
509
- isRetryableError(e.original as Error)
510
- );
511
-
512
- return {
513
- message: `${retryable.length} retryable errors`,
514
- original: retryable,
515
- workflowId: 'filtered',
516
- state: {} as any,
517
- logs: retryable.flatMap(e => e.logs),
518
- };
519
- }
520
- }
521
- })
522
- async spawnChildren() {
523
- return [
524
- createFailingWorkflow(this, 'A', 'network timeout'),
525
- createFailingWorkflow(this, 'B', 'validation failed'),
526
- createFailingWorkflow(this, 'C', 'network error'),
527
- ];
528
- }
529
-
530
- async run() {
531
- try {
532
- await this.spawnChildren();
533
- } catch (err) {
534
- return err;
535
- }
536
- }
537
- }
538
-
539
- const workflow = new CustomFilterWorkflow('test');
540
-
541
- // ACT
542
- const result = await workflow.run();
543
-
544
- // ASSERT: Only retryable errors included
545
- expect(result.message).toContain('2 retryable errors');
546
- expect(result.original).toHaveLength(2);
547
- });
548
- });
549
- ```
550
-
551
- ---
552
-
553
- ## Performance & Concurrency
554
-
555
- ### Performance Testing
556
-
557
- ```typescript
558
- describe('Promise.allSettled Performance', () => {
559
- it('should complete large batches quickly', async () => {
560
- // ARRANGE: Create 100 concurrent workflows
561
- const workflowCount = 100;
562
-
563
- class PerformanceWorkflow extends Workflow {
564
- @Task({ concurrent: true })
565
- async spawnManyChildren() {
566
- return Array.from({ length: workflowCount }, (_, i) =>
567
- createChildWorkflow(this, `child-${i}`, false)
568
- );
569
- }
570
-
571
- async run() {
572
- const startTime = performance.now();
573
- try {
574
- await this.spawnManyChildren();
575
- } catch (err) {
576
- // Expected
577
- }
578
- const duration = performance.now() - startTime;
579
- return duration;
580
- }
581
- }
582
-
583
- const workflow = new PerformanceWorkflow('perf-test');
584
-
585
- // ACT
586
- const duration = await workflow.run();
587
-
588
- // ASSERT: Should complete in reasonable time
589
- expect(duration).toBeLessThan(5000); // 5 seconds max
590
- });
591
-
592
- it('should handle concurrent execution correctly', async () => {
593
- // ARRANGE: Track execution order
594
- const executionOrder: string[] = [];
595
-
596
- class ConcurrentWorkflow extends Workflow {
597
- @Task({ concurrent: true })
598
- async spawnChildren() {
599
- const children = Array.from({ length: 5 }, (_, i) =>
600
- createChildWorkflow(this, `child-${i}`, false)
601
- );
602
-
603
- // Add tracking
604
- children.forEach(child => {
605
- child.run().then(() => {
606
- executionOrder.push(child.id);
607
- });
608
- });
609
-
610
- return children;
611
- }
612
-
613
- async run() {
614
- try {
615
- await this.spawnChildren();
616
- } catch (err) {
617
- // Expected
618
- }
619
- }
620
- }
621
-
622
- const workflow = new ConcurrentWorkflow('concurrent-test');
623
-
624
- // ACT
625
- await workflow.run();
626
-
627
- // ASSERT: All workflows executed
628
- expect(executionOrder).toHaveLength(5);
629
- });
630
- });
631
- ```
632
-
633
- ### Concurrency Verification
634
-
635
- ```typescript
636
- describe('Concurrency Verification', () => {
637
- it('should execute workflows concurrently', async () => {
638
- // ARRANGE: Track start times
639
- const startTimes = new Map<string, number>();
640
-
641
- class TimedWorkflow extends Workflow {
642
- async run() {
643
- startTimes.set(this.id, Date.now());
644
- await new Promise(resolve => setTimeout(resolve, 100));
645
- return this.id;
646
- }
647
- }
648
-
649
- class ParentWorkflow extends Workflow {
650
- @Task({ concurrent: true })
651
- async spawnChildren() {
652
- return [
653
- new TimedWorkflow('child-1', this),
654
- new TimedWorkflow('child-2', this),
655
- new TimedWorkflow('child-3', this),
656
- ];
657
- }
658
-
659
- async run() {
660
- try {
661
- await this.spawnChildren();
662
- } catch (err) {
663
- // Expected
664
- }
665
- }
666
- }
667
-
668
- const parent = new ParentWorkflow('parent');
669
-
670
- // ACT
671
- const startTime = Date.now();
672
- await parent.run();
673
- const totalTime = Date.now() - startTime;
674
-
675
- // ASSERT: Concurrent execution (total time < sequential time)
676
- expect(totalTime).toBeLessThan(250); // Should be ~100ms, not 300ms sequential
677
-
678
- // ASSERT: All started around same time
679
- const times = Array.from(startTimes.values());
680
- const maxDiff = Math.max(...times) - Math.min(...times);
681
- expect(maxDiff).toBeLessThan(50); // All started within 50ms
682
- });
683
- });
684
- ```
685
-
686
- ---
687
-
688
- ## Edge Cases
689
-
690
- ### Edge Case 1: Single Workflow
691
-
692
- ```typescript
693
- describe('Edge Case - Single Workflow', () => {
694
- it('should handle single workflow correctly', async () => {
695
- // ARRANGE: Only one child workflow
696
- class ParentWorkflow extends Workflow {
697
- @Task({ concurrent: true })
698
- async spawnChild() {
699
- return [createFailingWorkflow(this, 'OnlyChild', 'Single error')];
700
- }
701
-
702
- async run() {
703
- try {
704
- await this.spawnChild();
705
- } catch (err) {
706
- return err;
707
- }
708
- }
709
- }
710
-
711
- const parent = new ParentWorkflow('parent');
712
-
713
- // ACT
714
- const result = await parent.run();
715
-
716
- // ASSERT: Error handled correctly
717
- expect(result.message).toContain('Single error');
718
- expect(parent.children).toHaveLength(1);
719
- });
720
- });
721
- ```
722
-
723
- ### Edge Case 2: Very Long Error Messages
724
-
725
- ```typescript
726
- describe('Edge Case - Long Error Messages', () => {
727
- it('should handle very long error messages', async () => {
728
- // ARRANGE: Create error with 1000 character message
729
- const longMessage = 'X'.repeat(1000);
730
-
731
- class ParentWorkflow extends Workflow {
732
- @Task({
733
- concurrent: true,
734
- errorMergeStrategy: { enabled: true }
735
- })
736
- async spawnChildren() {
737
- return [
738
- createFailingWorkflow(this, 'Long', longMessage),
739
- createFailingWorkflow(this, 'Short', 'Short error'),
740
- ];
741
- }
742
-
743
- async run() {
744
- try {
745
- await this.spawnChildren();
746
- } catch (err) {
747
- return err;
748
- }
749
- }
750
- }
751
-
752
- const parent = new ParentWorkflow('parent');
753
-
754
- // ACT
755
- const result = await parent.run();
756
-
757
- // ASSERT: Long message preserved
758
- expect(result.message).toContain(longMessage);
759
- expect(result.message).toContain('Short error');
760
- });
761
- });
762
- ```
763
-
764
- ### Edge Case 3: Rapid Sequential Tasks
765
-
766
- ```typescript
767
- describe('Edge Case - Rapid Sequential Tasks', () => {
768
- it('should handle rapid sequential task execution', async () => {
769
- // ARRANGE: Execute same task multiple times rapidly
770
- class RapidWorkflow extends Workflow {
771
- @Task({ concurrent: true })
772
- async spawnChildren() {
773
- return [
774
- createFailingWorkflow(this, 'A', 'Error A'),
775
- createFailingWorkflow(this, 'B', 'Error B'),
776
- ];
777
- }
778
-
779
- async run() {
780
- try {
781
- await this.spawnChildren();
782
- } catch (err) {
783
- // Expected
784
- }
785
- }
786
- }
787
-
788
- const workflow = new RapidWorkflow('rapid');
789
-
790
- // ACT: Run multiple times sequentially
791
- for (let i = 0; i < 10; i++) {
792
- await workflow.run().catch(() => {});
793
- }
794
-
795
- // ASSERT: No memory leaks or hanging promises
796
- // (Would need memory profiling tools in real scenario)
797
- });
798
- });
799
- ```
800
-
801
- ---
802
-
803
- ## Code Examples
804
-
805
- ### Complete Test Suite Template
806
-
807
- ```typescript
808
- // File: src/__tests__/unit/promise-allsettled-patterns.test.ts
809
- import { describe, it, expect } from 'vitest';
810
- import { Workflow, Task } from '../../index.js';
811
-
812
- describe('Promise.allSettled Testing Patterns', () => {
813
- describe('Basic error collection', () => {
814
- it('should collect all errors from concurrent failures');
815
- it('should preserve error messages and context');
816
- it('should handle mixed success/failure scenarios');
817
- });
818
-
819
- describe('Workflow execution', () => {
820
- it('should complete all workflows despite failures');
821
- it('should not orphan any workflows');
822
- it('should execute workflows concurrently');
823
- });
824
-
825
- describe('Error handling', () => {
826
- it('should throw first error when no merge strategy');
827
- it('should merge errors when strategy enabled');
828
- it('should use custom merger when provided');
829
- });
830
-
831
- describe('Edge cases', () => {
832
- it('should handle single workflow');
833
- it('should handle empty workflow array');
834
- it('should handle very long error messages');
835
- it('should handle rapid sequential execution');
836
- });
837
-
838
- describe('Performance', () => {
839
- it('should complete large batches quickly');
840
- it('should execute workflows concurrently not sequentially');
841
- });
842
- });
843
- ```
844
-
845
- ### Helper Functions
846
-
847
- ```typescript
848
- /**
849
- * Create a child workflow for testing
850
- */
851
- function createChildWorkflow(
852
- parent: Workflow,
853
- name: string,
854
- shouldFail: boolean
855
- ): Workflow {
856
- return new (class extends Workflow {
857
- constructor(n: string, p: Workflow) {
858
- super(n, p);
859
- }
860
-
861
- async run() {
862
- if (shouldFail) {
863
- throw new Error(`${name} failed`);
864
- }
865
- return `${name} succeeded`;
866
- }
867
- })(name, parent);
868
- }
869
-
870
- /**
871
- * Create a failing workflow
872
- */
873
- function createFailingWorkflow(
874
- parent: Workflow,
875
- name: string,
876
- errorMessage: string
877
- ): Workflow {
878
- return new (class extends Workflow {
879
- async run() {
880
- throw new Error(errorMessage);
881
- }
882
- })(name, parent);
883
- }
884
-
885
- /**
886
- * Setup event observer for testing
887
- */
888
- function setupEventObserver(workflow: Workflow): WorkflowEvent[] {
889
- const events: WorkflowEvent[] = [];
890
-
891
- workflow.addObserver({
892
- onLog: () => {},
893
- onEvent: (e) => events.push(e),
894
- onStateUpdated: () => {},
895
- onTreeChanged: () => {},
896
- });
897
-
898
- return events;
899
- }
900
- ```
901
-
902
- ---
903
-
904
- ## Summary
905
-
906
- This document provides comprehensive testing patterns for Promise.allSettled in workflow engines:
907
-
908
- 1. **Basics:** Understanding Promise.allSettled behavior and type guards
909
- 2. **Testing Patterns:** Basic, all-rejected, all-fulfilled, and empty array scenarios
910
- 3. **Workflow Scenarios:** Concurrent execution, mixed outcomes, orphan prevention
911
- 4. **Error Collection:** First-error, collect-all, and custom filter strategies
912
- 5. **Performance:** Testing large batches and concurrency verification
913
- 6. **Edge Cases:** Single workflow, long messages, rapid execution
914
- 7. **Code Examples:** Complete test templates and helper functions
915
-
916
- These patterns can be directly applied to test the Promise.allSettled implementation in `/home/dustin/projects/groundswell/src/decorators/task.ts`.