groundswell 0.0.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -9
  3. package/dist/cache/cache-key.d.ts +86 -0
  4. package/dist/cache/cache-key.d.ts.map +1 -0
  5. package/dist/cache/cache-key.js +204 -0
  6. package/dist/cache/cache-key.js.map +1 -0
  7. package/dist/cache/cache.d.ts +104 -0
  8. package/dist/cache/cache.d.ts.map +1 -0
  9. package/dist/cache/cache.js +179 -0
  10. package/dist/cache/cache.js.map +1 -0
  11. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +6 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/core/agent.d.ts +203 -0
  16. package/dist/core/agent.d.ts.map +1 -0
  17. package/dist/core/agent.js +833 -0
  18. package/dist/core/agent.js.map +1 -0
  19. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  20. package/dist/core/context.d.ts.map +1 -0
  21. package/dist/core/context.js +80 -0
  22. package/dist/core/context.js.map +1 -0
  23. package/dist/core/event-tree.d.ts +72 -0
  24. package/dist/core/event-tree.d.ts.map +1 -0
  25. package/dist/core/event-tree.js +211 -0
  26. package/dist/core/event-tree.js.map +1 -0
  27. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  28. package/dist/core/factory.d.ts.map +1 -0
  29. package/dist/core/factory.js +110 -0
  30. package/dist/core/factory.js.map +1 -0
  31. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/core/index.js +9 -0
  34. package/dist/core/index.js.map +1 -0
  35. package/dist/core/logger.d.ts +50 -0
  36. package/dist/core/logger.d.ts.map +1 -0
  37. package/dist/core/logger.js +91 -0
  38. package/dist/core/logger.js.map +1 -0
  39. package/dist/core/mcp-handler.d.ts +127 -0
  40. package/dist/core/mcp-handler.d.ts.map +1 -0
  41. package/dist/core/mcp-handler.js +323 -0
  42. package/dist/core/mcp-handler.js.map +1 -0
  43. package/dist/core/prompt.d.ts +80 -0
  44. package/dist/core/prompt.d.ts.map +1 -0
  45. package/dist/core/prompt.js +120 -0
  46. package/dist/core/prompt.js.map +1 -0
  47. package/dist/core/workflow-context.d.ts +61 -0
  48. package/dist/core/workflow-context.d.ts.map +1 -0
  49. package/dist/core/workflow-context.js +358 -0
  50. package/dist/core/workflow-context.js.map +1 -0
  51. package/dist/core/workflow.d.ts +543 -0
  52. package/dist/core/workflow.d.ts.map +1 -0
  53. package/dist/core/workflow.js +986 -0
  54. package/dist/core/workflow.js.map +1 -0
  55. package/dist/debugger/event-replayer.d.ts +422 -0
  56. package/dist/debugger/event-replayer.d.ts.map +1 -0
  57. package/dist/debugger/event-replayer.js +639 -0
  58. package/dist/debugger/event-replayer.js.map +1 -0
  59. package/dist/debugger/index.d.ts +2 -0
  60. package/dist/debugger/index.d.ts.map +1 -0
  61. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  62. package/dist/debugger/index.js.map +1 -0
  63. package/dist/debugger/tree-debugger.d.ts +240 -0
  64. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  65. package/dist/debugger/tree-debugger.js +620 -0
  66. package/dist/debugger/tree-debugger.js.map +1 -0
  67. package/dist/decorators/index.d.ts +4 -0
  68. package/dist/decorators/index.d.ts.map +1 -0
  69. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  70. package/dist/decorators/index.js.map +1 -0
  71. package/dist/decorators/observed-state.d.ts +32 -0
  72. package/dist/decorators/observed-state.d.ts.map +1 -0
  73. package/dist/decorators/observed-state.js +79 -0
  74. package/dist/decorators/observed-state.js.map +1 -0
  75. package/dist/decorators/step.d.ts +15 -0
  76. package/dist/decorators/step.d.ts.map +1 -0
  77. package/dist/decorators/step.js +192 -0
  78. package/dist/decorators/step.js.map +1 -0
  79. package/dist/decorators/task.d.ts +50 -0
  80. package/dist/decorators/task.d.ts.map +1 -0
  81. package/dist/decorators/task.js +118 -0
  82. package/dist/decorators/task.js.map +1 -0
  83. package/dist/examples/index.d.ts +3 -0
  84. package/dist/examples/index.d.ts.map +1 -0
  85. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  86. package/dist/examples/index.js.map +1 -0
  87. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  88. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  89. package/dist/examples/tdd-orchestrator.js +121 -0
  90. package/dist/examples/tdd-orchestrator.js.map +1 -0
  91. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  92. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  93. package/dist/examples/test-cycle-workflow.js +116 -0
  94. package/dist/examples/test-cycle-workflow.js.map +1 -0
  95. package/dist/harnesses/claude-code-harness.d.ts +391 -0
  96. package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
  97. package/dist/harnesses/claude-code-harness.js +1076 -0
  98. package/dist/harnesses/claude-code-harness.js.map +1 -0
  99. package/dist/harnesses/harness-registry.d.ts +440 -0
  100. package/dist/harnesses/harness-registry.d.ts.map +1 -0
  101. package/dist/harnesses/harness-registry.js +543 -0
  102. package/dist/harnesses/harness-registry.js.map +1 -0
  103. package/dist/harnesses/index.d.ts +12 -0
  104. package/dist/harnesses/index.d.ts.map +1 -0
  105. package/dist/harnesses/index.js +11 -0
  106. package/dist/harnesses/index.js.map +1 -0
  107. package/dist/harnesses/pi-harness.d.ts +219 -0
  108. package/dist/harnesses/pi-harness.d.ts.map +1 -0
  109. package/dist/harnesses/pi-harness.js +676 -0
  110. package/dist/harnesses/pi-harness.js.map +1 -0
  111. package/dist/harnesses/pi-schema-converter.d.ts +24 -0
  112. package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
  113. package/dist/harnesses/pi-schema-converter.js +81 -0
  114. package/dist/harnesses/pi-schema-converter.js.map +1 -0
  115. package/dist/harnesses/register-defaults.d.ts +24 -0
  116. package/dist/harnesses/register-defaults.d.ts.map +1 -0
  117. package/dist/harnesses/register-defaults.js +40 -0
  118. package/dist/harnesses/register-defaults.js.map +1 -0
  119. package/dist/harnesses/session-store.d.ts +201 -0
  120. package/dist/harnesses/session-store.d.ts.map +1 -0
  121. package/dist/harnesses/session-store.js +254 -0
  122. package/dist/harnesses/session-store.js.map +1 -0
  123. package/dist/index.d.ts +37 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +57 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/reflection/index.d.ts +5 -0
  128. package/dist/reflection/index.d.ts.map +1 -0
  129. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  130. package/dist/reflection/index.js.map +1 -0
  131. package/dist/reflection/reflection.d.ts +84 -0
  132. package/dist/reflection/reflection.d.ts.map +1 -0
  133. package/dist/reflection/reflection.js +344 -0
  134. package/dist/reflection/reflection.js.map +1 -0
  135. package/dist/tools/index.d.ts +6 -0
  136. package/dist/tools/index.d.ts.map +1 -0
  137. package/dist/tools/index.js +11 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/introspection.d.ts +165 -0
  140. package/dist/tools/introspection.d.ts.map +1 -0
  141. package/dist/tools/introspection.js +324 -0
  142. package/dist/tools/introspection.js.map +1 -0
  143. package/dist/types/agent.d.ts +1317 -0
  144. package/dist/types/agent.d.ts.map +1 -0
  145. package/dist/types/agent.js +423 -0
  146. package/dist/types/agent.js.map +1 -0
  147. package/dist/types/decorators.d.ts +40 -0
  148. package/dist/types/decorators.d.ts.map +1 -0
  149. package/dist/types/decorators.js +2 -0
  150. package/dist/types/decorators.js.map +1 -0
  151. package/dist/types/error-strategy.d.ts +13 -0
  152. package/dist/types/error-strategy.d.ts.map +1 -0
  153. package/dist/types/error-strategy.js +2 -0
  154. package/dist/types/error-strategy.js.map +1 -0
  155. package/dist/types/error.d.ts +20 -0
  156. package/dist/types/error.d.ts.map +1 -0
  157. package/dist/types/error.js +2 -0
  158. package/dist/types/error.js.map +1 -0
  159. package/dist/types/events.d.ts +113 -0
  160. package/dist/types/events.d.ts.map +1 -0
  161. package/dist/types/events.js +2 -0
  162. package/dist/types/events.js.map +1 -0
  163. package/dist/types/harnesses.d.ts +474 -0
  164. package/dist/types/harnesses.d.ts.map +1 -0
  165. package/dist/types/harnesses.js +2 -0
  166. package/dist/types/harnesses.js.map +1 -0
  167. package/dist/types/index.d.ts +23 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +8 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/types/logging.d.ts +24 -0
  172. package/dist/types/logging.d.ts.map +1 -0
  173. package/dist/types/logging.js +2 -0
  174. package/dist/types/logging.js.map +1 -0
  175. package/dist/types/observer.d.ts +18 -0
  176. package/dist/types/observer.d.ts.map +1 -0
  177. package/dist/types/observer.js +2 -0
  178. package/dist/types/observer.js.map +1 -0
  179. package/dist/types/prompt.d.ts +31 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +6 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/providers.d.ts +691 -0
  184. package/dist/types/providers.d.ts.map +1 -0
  185. package/dist/types/providers.js +14 -0
  186. package/dist/types/providers.js.map +1 -0
  187. package/dist/types/reflection.d.ts +96 -0
  188. package/dist/types/reflection.d.ts.map +1 -0
  189. package/dist/types/reflection.js +24 -0
  190. package/dist/types/reflection.js.map +1 -0
  191. package/dist/types/restart.d.ts +132 -0
  192. package/dist/types/restart.d.ts.map +1 -0
  193. package/dist/types/restart.js +2 -0
  194. package/dist/types/restart.js.map +1 -0
  195. package/dist/types/sdk-primitives.d.ts +118 -0
  196. package/dist/types/sdk-primitives.d.ts.map +1 -0
  197. package/dist/types/sdk-primitives.js +6 -0
  198. package/dist/types/sdk-primitives.js.map +1 -0
  199. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  200. package/dist/types/snapshot.d.ts.map +1 -0
  201. package/dist/types/snapshot.js +2 -0
  202. package/dist/types/snapshot.js.map +1 -0
  203. package/dist/types/streaming.d.ts +194 -0
  204. package/dist/types/streaming.d.ts.map +1 -0
  205. package/dist/types/streaming.js +67 -0
  206. package/dist/types/streaming.js.map +1 -0
  207. package/dist/types/workflow-context.d.ts +275 -0
  208. package/dist/types/workflow-context.d.ts.map +1 -0
  209. package/dist/types/workflow-context.js +8 -0
  210. package/dist/types/workflow-context.js.map +1 -0
  211. package/dist/types/workflow.d.ts +30 -0
  212. package/dist/types/workflow.d.ts.map +1 -0
  213. package/dist/types/workflow.js +2 -0
  214. package/dist/types/workflow.js.map +1 -0
  215. package/dist/utils/agent-validation.d.ts +88 -0
  216. package/dist/utils/agent-validation.d.ts.map +1 -0
  217. package/dist/utils/agent-validation.js +87 -0
  218. package/dist/utils/agent-validation.js.map +1 -0
  219. package/dist/utils/delay.d.ts +7 -0
  220. package/dist/utils/delay.d.ts.map +1 -0
  221. package/dist/utils/delay.js +9 -0
  222. package/dist/utils/delay.js.map +1 -0
  223. package/dist/utils/harness-config.d.ts +180 -0
  224. package/dist/utils/harness-config.d.ts.map +1 -0
  225. package/dist/utils/harness-config.js +311 -0
  226. package/dist/utils/harness-config.js.map +1 -0
  227. package/dist/utils/id.d.ts +6 -0
  228. package/dist/utils/id.d.ts.map +1 -0
  229. package/dist/utils/id.js +12 -0
  230. package/dist/utils/id.js.map +1 -0
  231. package/dist/utils/index.d.ts +13 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +11 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/dist/utils/model-spec.d.ts +110 -0
  236. package/dist/utils/model-spec.d.ts.map +1 -0
  237. package/dist/utils/model-spec.js +149 -0
  238. package/dist/utils/model-spec.js.map +1 -0
  239. package/dist/utils/observable.d.ts +54 -0
  240. package/dist/utils/observable.d.ts.map +1 -0
  241. package/dist/utils/observable.js +82 -0
  242. package/dist/utils/observable.js.map +1 -0
  243. package/dist/utils/provider-config.d.ts +10 -0
  244. package/dist/utils/provider-config.d.ts.map +1 -0
  245. package/dist/utils/provider-config.js +10 -0
  246. package/dist/utils/provider-config.js.map +1 -0
  247. package/dist/utils/restart-analysis.d.ts +202 -0
  248. package/dist/utils/restart-analysis.d.ts.map +1 -0
  249. package/dist/utils/restart-analysis.js +426 -0
  250. package/dist/utils/restart-analysis.js.map +1 -0
  251. package/dist/utils/session-serialization.d.ts +118 -0
  252. package/dist/utils/session-serialization.d.ts.map +1 -0
  253. package/dist/utils/session-serialization.js +217 -0
  254. package/dist/utils/session-serialization.js.map +1 -0
  255. package/dist/utils/workflow-error-utils.d.ts +22 -0
  256. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  257. package/dist/utils/workflow-error-utils.js +45 -0
  258. package/dist/utils/workflow-error-utils.js.map +1 -0
  259. package/package.json +34 -5
  260. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  261. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  262. package/.claude/commands/task-breakdown.md +0 -94
  263. package/.claude/settings.local.json +0 -9
  264. package/.claude/system_prompts/task-breakdown.md +0 -101
  265. package/CHANGELOG.md +0 -188
  266. package/PRD.md +0 -543
  267. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  268. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  269. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  270. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  271. package/PRPs/PRDs/tasks-001.json +0 -492
  272. package/PRPs/README.md +0 -83
  273. package/PRPs/templates/prp_base.md +0 -222
  274. package/docs/agent.md +0 -422
  275. package/docs/prompt.md +0 -419
  276. package/docs/workflow.md +0 -600
  277. package/examples/README.md +0 -258
  278. package/examples/examples/01-basic-workflow.ts +0 -100
  279. package/examples/examples/02-decorator-options.ts +0 -217
  280. package/examples/examples/03-parent-child.ts +0 -241
  281. package/examples/examples/04-observers-debugger.ts +0 -340
  282. package/examples/examples/05-error-handling.ts +0 -387
  283. package/examples/examples/06-concurrent-tasks.ts +0 -352
  284. package/examples/examples/07-agent-loops.ts +0 -432
  285. package/examples/examples/08-sdk-features.ts +0 -667
  286. package/examples/examples/09-reflection.ts +0 -573
  287. package/examples/examples/10-introspection.ts +0 -550
  288. package/examples/examples/11-reparenting-workflows.ts +0 -269
  289. package/examples/index.ts +0 -147
  290. package/examples/utils/helpers.ts +0 -57
  291. package/package-lock.json +0 -2398
  292. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  293. package/plan/001_d3bb02af4886/backlog.json +0 -867
  294. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  295. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  296. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  297. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  298. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  299. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  300. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  301. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  302. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  303. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  304. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  305. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  306. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  307. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  308. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  309. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  310. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  311. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  312. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  313. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  314. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  315. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  316. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  317. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  318. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  319. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  320. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  321. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  322. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  323. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  324. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  325. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  326. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  327. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  328. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  329. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  330. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  331. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  332. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  333. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  334. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  335. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  336. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  337. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  338. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  339. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  340. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  341. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  342. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  343. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  344. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  345. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  346. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  347. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  348. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  349. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  350. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  351. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  352. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  353. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  354. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  355. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  356. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  357. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  358. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  359. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  360. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  361. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  362. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  363. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  364. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  365. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  366. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  367. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  368. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  369. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  370. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  371. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  372. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  373. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  374. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  375. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  385. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  386. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  387. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  388. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  389. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  390. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  391. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  392. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  393. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  394. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  395. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  396. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  397. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  398. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  399. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  400. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  401. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  402. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  403. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  404. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  405. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  406. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  407. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  408. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  409. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  410. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  411. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  412. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  413. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  414. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  415. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  416. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  417. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  418. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  419. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  420. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  421. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  422. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  423. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  424. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  425. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  426. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  427. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  428. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  429. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  430. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  431. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  432. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  433. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  434. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  435. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  436. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  437. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  438. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  439. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  440. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  441. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  442. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  443. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  444. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  445. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  446. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  447. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  448. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  449. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  450. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  451. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  452. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  453. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  454. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  455. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  456. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  457. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  458. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  459. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  460. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  461. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  462. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  463. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  464. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  465. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  466. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  467. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  468. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  469. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  470. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  471. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  472. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  473. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  474. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  475. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  476. package/scripts/generate-llms-full.ts +0 -206
  477. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  478. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  479. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  480. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  481. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  482. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  483. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  484. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  485. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  486. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  487. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  488. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  489. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  490. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  491. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  492. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  493. package/src/__tests__/helpers/index.ts +0 -18
  494. package/src/__tests__/helpers/tree-verification.ts +0 -257
  495. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  496. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  497. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  498. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  499. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  500. package/src/__tests__/unit/agent.test.ts +0 -169
  501. package/src/__tests__/unit/cache-key.test.ts +0 -182
  502. package/src/__tests__/unit/cache.test.ts +0 -172
  503. package/src/__tests__/unit/context.test.ts +0 -217
  504. package/src/__tests__/unit/decorators.test.ts +0 -100
  505. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  506. package/src/__tests__/unit/logger.test.ts +0 -293
  507. package/src/__tests__/unit/observable.test.ts +0 -321
  508. package/src/__tests__/unit/prompt.test.ts +0 -135
  509. package/src/__tests__/unit/reflection.test.ts +0 -210
  510. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  511. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  512. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  513. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  514. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  515. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  516. package/src/__tests__/unit/workflow.test.ts +0 -357
  517. package/src/cache/cache-key.ts +0 -244
  518. package/src/cache/cache.ts +0 -236
  519. package/src/core/agent.ts +0 -593
  520. package/src/core/event-tree.ts +0 -260
  521. package/src/core/logger.ts +0 -112
  522. package/src/core/mcp-handler.ts +0 -184
  523. package/src/core/prompt.ts +0 -150
  524. package/src/core/workflow-context.ts +0 -351
  525. package/src/core/workflow.ts +0 -540
  526. package/src/debugger/tree-debugger.ts +0 -255
  527. package/src/decorators/observed-state.ts +0 -95
  528. package/src/decorators/step.ts +0 -139
  529. package/src/decorators/task.ts +0 -159
  530. package/src/examples/tdd-orchestrator.ts +0 -65
  531. package/src/examples/test-cycle-workflow.ts +0 -64
  532. package/src/index.ts +0 -142
  533. package/src/reflection/reflection.ts +0 -407
  534. package/src/tools/index.ts +0 -36
  535. package/src/tools/introspection.ts +0 -464
  536. package/src/types/agent.ts +0 -90
  537. package/src/types/decorators.ts +0 -32
  538. package/src/types/error-strategy.ts +0 -13
  539. package/src/types/error.ts +0 -20
  540. package/src/types/events.ts +0 -75
  541. package/src/types/index.ts +0 -55
  542. package/src/types/logging.ts +0 -24
  543. package/src/types/observer.ts +0 -18
  544. package/src/types/prompt.ts +0 -40
  545. package/src/types/reflection.ts +0 -117
  546. package/src/types/sdk-primitives.ts +0 -128
  547. package/src/types/workflow-context.ts +0 -163
  548. package/src/types/workflow.ts +0 -37
  549. package/src/utils/id.ts +0 -11
  550. package/src/utils/index.ts +0 -4
  551. package/src/utils/observable.ts +0 -106
  552. package/src/utils/workflow-error-utils.ts +0 -56
  553. package/tsconfig.json +0 -22
  554. package/vitest.config.ts +0 -16
@@ -1,652 +0,0 @@
1
- # Product Requirement Prompt (PRP): Test for Functional Workflow Error State Capture
2
-
3
- **Work Item**: P1.M1.T1.S4
4
- **Title**: Write test for functional workflow error state capture
5
- **Status**: Ready for Implementation
6
- **Confidence Score**: 9/10
7
-
8
- ---
9
-
10
- ## Goal
11
-
12
- **Feature Goal**: Validate that functional workflow error handlers correctly capture workflow state (`@ObservedState` fields) and execution logs in error events.
13
-
14
- **Deliverable**: A new test case in `src/__tests__/unit/workflow.test.ts` that validates error state and logs capture when a functional workflow throws an error.
15
-
16
- **Success Definition**:
17
- - Test passes with proper assertions on `error.state` containing observed state properties
18
- - Test passes with proper assertions on `error.logs` containing captured log entries
19
- - Test follows existing test patterns in the codebase
20
- - Running `npm run test` shows all tests pass including the new test
21
-
22
- ---
23
-
24
- ## User Persona
25
-
26
- **Target User**: Developers maintaining the workflow engine, specifically those validating error handling fixes.
27
-
28
- **Use Case**: When a functional workflow fails during execution, developers need confidence that the error event contains complete diagnostic information (state snapshot and execution logs) for debugging.
29
-
30
- **User Journey**:
31
- 1. Developer makes changes to error handling logic
32
- 2. Developer runs `npm run test` to verify changes
33
- 3. Test validates that error events contain expected state and logs
34
- 4. Developer gains confidence that error diagnostics work correctly
35
-
36
- **Pain Points Addressed**:
37
- - Previously, error handlers returned empty state/logs, making debugging difficult
38
- - Without automated tests, regressions could go undetected
39
- - This test prevents future breakage of the error capture logic
40
-
41
- ---
42
-
43
- ## Why
44
-
45
- - **Bug Fix Validation**: This test validates the fix implemented in P1.M1.T1.S3 (replacing empty state/logs with actual captured data)
46
- - **Regression Prevention**: Ensures future code changes don't break error state capture
47
- - **Documentation**: The test serves as executable documentation of how error state capture works
48
- - **Debugging Support**: Proper error state capture is critical for production debugging workflows
49
-
50
- ---
51
-
52
- ## What
53
-
54
- Add a test case to `src/__tests__/unit/workflow.test.ts` that:
55
-
56
- 1. Creates a functional workflow using the `Workflow` constructor with an executor function
57
- 2. Defines a test class with `@ObservedState` decorated fields
58
- 3. Logs messages during execution using `ctx.logger`
59
- 4. Triggers an error during workflow execution
60
- 5. Captures the emitted error event via observer
61
- 6. Asserts that `error.event.error.state` contains the observed state properties
62
- 7. Asserts that `error.event.error.logs` contains the log entries
63
-
64
- ### Success Criteria
65
-
66
- - [ ] Test file modified: `src/__tests__/unit/workflow.test.ts`
67
- - [ ] Test passes: `npm run test` succeeds with new test
68
- - [ ] Validates state capture: `error.state` has expected properties
69
- - [ ] Validates logs capture: `error.logs` array contains log entries
70
- - [ ] Follows existing test patterns from `workflow.test.ts` and `agent-workflow.test.ts`
71
- - [ ] No other tests are broken by this addition
72
-
73
- ---
74
-
75
- ## All Needed Context
76
-
77
- ### Context Completeness Check
78
-
79
- **"No Prior Knowledge" Test**: If someone knew nothing about this codebase, would they have everything needed to implement this successfully?
80
-
81
- **Answer**: Yes. This PRP provides:
82
- - Exact file paths and line numbers to reference
83
- - Complete code examples of existing test patterns
84
- - The exact implementation to test (from P1.M1.T1.S3)
85
- - Testing framework details and commands
86
- - Type definitions and interfaces
87
- - External best practices with URLs
88
-
89
- ---
90
-
91
- ### Documentation & References
92
-
93
- ```yaml
94
- # MUST READ - Core implementation files to understand what we're testing
95
- - file: /home/dustin/projects/groundswell/src/core/workflow.ts
96
- why: Contains the runFunctional() method with the error handler we need to test
97
- lines: 259-302
98
- pattern: The catch block at lines 283-301 shows error event emission with state/logs capture
99
- critical: Error event structure: { type: 'error', node, error: { message, original, workflowId, stack, state, logs } }
100
-
101
- - file: /home/dustin/projects/groundswell/src/decorators/observed-state.ts
102
- why: Implementation of @ObservedState decorator and getObservedState() function
103
- lines: 25-77
104
- pattern: @ObservedState() marks fields for state capture, getObservedState(obj) returns SerializedWorkflowState
105
- gotcha: Hidden fields are skipped, redacted fields show '***'
106
-
107
- - file: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
108
- why: Existing test patterns in the file we need to modify
109
- pattern: Observer pattern for capturing events, describe/it structure, expect assertions
110
- critical: Import patterns, observer setup, async test structure
111
-
112
- - file: /home/dustin/projects/groundswell/src/__tests__/integration/agent-workflow.test.ts
113
- why: Examples of functional workflow tests with error handling
114
- lines: 93-129 (functional workflow pattern), 181-205 (error handling pattern)
115
- pattern: new Workflow({ name }, async (ctx) => { ... }) for functional workflows
116
-
117
- # Type definitions
118
- - file: /home/dustin/projects/groundswell/src/types/events.ts
119
- why: WorkflowEvent discriminated union, error event type structure
120
- pattern: Error events have { type: 'error', node, error: WorkflowError }
121
-
122
- - file: /home/dustin/projects/groundswell/src/types/logging.ts
123
- why: LogEntry interface structure
124
- pattern: { id, workflowId, timestamp, level, message, data?, parentLogId? }
125
-
126
- # Testing configuration
127
- - file: /home/dustin/projects/groundswell/vitest.config.ts
128
- why: Test framework configuration
129
- pattern: Tests in src/__tests__/**/*.test.ts, globals enabled
130
-
131
- - file: /home/dustin/projects/groundswell/package.json
132
- why: Test scripts and dependencies
133
- lines: 34-37
134
- pattern: "test": "vitest run", "test:watch": "vitest"
135
-
136
- # External best practices
137
- - url: https://stordahl.dev/writing/error-handling-decorators
138
- why: TypeScript decorator error handling patterns with state capture
139
- critical: Shows how decorators capture 'this' context and augment errors
140
-
141
- - url: https://docs.temporal.io/develop/typescript/failure-detection
142
- why: Workflow error handling with state capture patterns
143
- section: ApplicationFailure.create() with state capture
144
-
145
- - url: https://www.convex.dev/typescript/best-practices/error-handling-debugging/typescript-catch-error-type
146
- why: Type-safe error testing patterns in TypeScript
147
- critical: Custom error properties testing with type guards
148
-
149
- # Project architecture context
150
- - file: /home/dustin/projects/groundswell/plan/architecture/system_context.md
151
- why: Overall system architecture and workflow patterns
152
- section: "Hierarchy Patterns", "Event System"
153
- critical: Observer pattern, error event propagation
154
- ```
155
-
156
- ---
157
-
158
- ### Current Codebase Tree
159
-
160
- ```bash
161
- src/
162
- ├── __tests__/
163
- │ ├── unit/
164
- │ │ ├── workflow.test.ts # TARGET FILE - add test here
165
- │ │ ├── agent.test.ts
166
- │ │ ├── cache-key.test.ts
167
- │ │ ├── cache.test.ts
168
- │ │ ├── context.test.ts
169
- │ │ ├── decorators.test.ts
170
- │ │ ├── introspection-tools.test.ts
171
- │ │ ├── prompt.test.ts
172
- │ │ ├── reflection.test.ts
173
- │ │ └── tree-debugger.test.ts
174
- │ └── integration/
175
- │ └── agent-workflow.test.ts # Reference for functional workflow tests
176
- ├── core/
177
- │ ├── workflow.ts # Implementation being tested
178
- │ ├── workflow-context.ts
179
- │ └── logger.ts # WorkflowLogger for log capture
180
- ├── decorators/
181
- │ ├── observed-state.ts # @ObservedState and getObservedState()
182
- │ ├── step.ts
183
- │ └── task.ts
184
- └── types/
185
- ├── events.ts # WorkflowEvent types
186
- ├── logging.ts # LogEntry interface
187
- └── workflow.ts # WorkflowNode, WorkflowStatus
188
- ```
189
-
190
- ---
191
-
192
- ### Desired Codebase Tree (No New Files)
193
-
194
- ```bash
195
- # No new files needed - we are ADDING A TEST to existing file:
196
-
197
- src/__tests__/
198
- └── unit/
199
- └── workflow.test.ts # MODIFY: Add new test case at end of file
200
- # New test: "should capture state and logs in functional workflow error"
201
- ```
202
-
203
- ---
204
-
205
- ### Known Gotchas of Our Codebase & Library Quirks
206
-
207
- ```typescript
208
- // CRITICAL: Functional workflow pattern
209
- // Functional workflows use: new Workflow({ name }, async (ctx) => { ... })
210
- // Class-based workflows extend Workflow class
211
- // This test must use FUNCTIONAL pattern
212
-
213
- // CRITICAL: @ObservedState decorator behavior
214
- // @ObservedState() only works on CLASS fields, not in functional workflows
215
- // Therefore: To test state capture in functional workflows, we need a workaround:
216
- // 1. Create a test class with @ObservedState fields
217
- // 2. Use that class in the functional workflow context
218
- // OR: Test that error.state is an object (even if empty for pure functional workflows)
219
- // OR: Test logs capture primarily, and state capture as a bonus
220
-
221
- // CRITICAL: Error event structure
222
- // error.event.error.state is SerializedWorkflowState (Record<string, unknown>)
223
- // error.event.error.logs is LogEntry[]
224
- // Access via: (event as WorkflowEvent & { type: 'error' }).error.state
225
-
226
- // CRITICAL: Observer pattern
227
- // Observers only attach to ROOT workflows
228
- // Must call workflow.addObserver(observer) BEFORE running workflow
229
- // observer.onEvent captures events, filter for type === 'error'
230
-
231
- // CRITICAL: Test async errors
232
- // Use: await expect(workflow.run()).rejects.toThrow('error message')
233
- // Don't try/catch - use Vitest's async error assertion
234
-
235
- // CRITICAL: Vitest configuration
236
- // Test files must end in .test.ts
237
- // Global functions enabled (describe, it, expect available without import)
238
- // Run tests with: npm run test (or vitest run)
239
-
240
- // CRITICAL: LogEntry structure
241
- // Each log has: id, workflowId, timestamp, level, message, data?, parentLogId?
242
- // Check message content and level for validation
243
-
244
- // CRITICAL: getObservedState behavior
245
- // Returns empty object {} if no @ObservedState fields on the object
246
- // Hidden fields (hidden: true) are skipped
247
- // Redacted fields (redact: true) show '***'
248
- ```
249
-
250
- ---
251
-
252
- ## Implementation Blueprint
253
-
254
- ### Test Structure Design
255
-
256
- The test will follow this structure:
257
-
258
- 1. **Setup**: Create a test class with `@ObservedState` fields
259
- 2. **Create Functional Workflow**: Use `new Workflow({ name }, async (ctx) => { ... })`
260
- 3. **Observer Setup**: Create observer to capture error events
261
- 4. **Execution**: Run workflow, expect it to throw
262
- 5. **Assertions**: Validate error.state and error.logs
263
-
264
- **Important Design Decision**: Since functional workflows use an executor function (not a class), we cannot directly use `@ObservedState` on functional workflow fields. The test has two valid approaches:
265
-
266
- **Approach A (Recommended)**: Test logs capture primarily, and state capture structure:
267
- - Create functional workflow that logs messages
268
- - Trigger error
269
- - Assert error.logs contains the log entries
270
- - Assert error.state exists (even if empty for pure functional workflows)
271
-
272
- **Approach B**: Create a test class with observed state, then use it in a functional context:
273
- - More complex but tests full state capture
274
- - May not be representative of real functional workflow usage
275
-
276
- **This PRP recommends Approach A** as it's simpler and more representative of actual functional workflow usage.
277
-
278
- ### Implementation Tasks (ordered by dependencies)
279
-
280
- ```yaml
281
- Task 1: READ existing test file to understand patterns
282
- - READ: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
283
- - UNDERSTAND: Observer pattern, describe/it structure, import statements
284
- - VALIDATION: Comprehend existing test patterns before writing new test
285
-
286
- Task 2: CREATE new test case in workflow.test.ts
287
- - ADD: New describe block or it() block in existing 'Workflow' describe
288
- - LOCATION: After line 80, before closing describe brace
289
- - TEST NAME: "should capture state and logs in functional workflow error"
290
- - STRUCTURE: Follow existing test patterns (observer setup, async execution)
291
-
292
- Task 3: IMPLEMENT functional workflow with logging
293
- - CREATE: new Workflow({ name: 'ErrorCaptureTest' }, async (ctx) => { ... })
294
- - ADD: ctx.logger.info() and ctx.logger.warn() calls to generate logs
295
- - TRIGGER: throw new Error('Test error') to trigger error handler
296
- - PATTERN: Follow lines 93-106 of agent-workflow.test.ts for functional workflow syntax
297
-
298
- Task 4: IMPLEMENT observer to capture error events
299
- - CREATE: const events: WorkflowEvent[] = []
300
- - CREATE: observer with onEvent capturing events
301
- - PATTERN: Follow lines 190-195 of agent-workflow.test.ts
302
- - REGISTER: workflow.addObserver(observer) BEFORE run()
303
-
304
- Task 5: IMPLEMENT error assertions
305
- - ASSERT: await expect(workflow.run()).rejects.toThrow('Test error')
306
- - FILTER: const errorEvents = events.filter(e => e.type === 'error')
307
- - ASSERT: errorEvents.length >= 1
308
- - ASSERT: errorEvents[0].error.logs is array with length > 0
309
- - ASSERT: errorEvents[0].error.logs[0].message matches expected log
310
- - ASSERT: errorEvents[0].error.state is defined (object)
311
- - PATTERN: Follow lines 199-204 of agent-workflow.test.ts
312
-
313
- Task 6: RUN tests to validate
314
- - EXECUTE: npm run test
315
- - VERIFY: New test passes
316
- - VERIFY: No existing tests break
317
- - VALIDATION: All assertions pass
318
- ```
319
-
320
- ---
321
-
322
- ### Implementation Code Template
323
-
324
- ```typescript
325
- // Add this test to src/__tests__/unit/workflow.test.ts
326
- // Place after line 80, before closing describe brace
327
-
328
- it('should capture state and logs in functional workflow error', async () => {
329
- // Arrange: Create observer to capture events
330
- const events: WorkflowEvent[] = [];
331
-
332
- const observer: WorkflowObserver = {
333
- onLog: () => {},
334
- onEvent: (event) => events.push(event),
335
- onStateUpdated: () => {},
336
- onTreeChanged: () => {},
337
- };
338
-
339
- // Arrange: Create functional workflow with logging
340
- const workflow = new Workflow<void>(
341
- { name: 'ErrorCaptureTest' },
342
- async (ctx) => {
343
- // Log some messages during execution
344
- ctx.logger.info('Starting workflow execution');
345
- ctx.logger.warn('Potential issue detected');
346
-
347
- // Trigger error
348
- throw new Error('Test error');
349
- }
350
- );
351
-
352
- // Act: Attach observer and run workflow
353
- workflow.addObserver(observer);
354
- await expect(workflow.run()).rejects.toThrow('Test error');
355
-
356
- // Assert: Verify error event was emitted
357
- const errorEvents = events.filter((e) => e.type === 'error');
358
- expect(errorEvents.length).toBeGreaterThanOrEqual(1);
359
-
360
- // Assert: Verify error structure
361
- const errorEvent = errorEvents[0];
362
- expect(errorEvent.error).toBeDefined();
363
- expect(errorEvent.error.message).toBe('Test error');
364
-
365
- // Assert: Verify logs were captured
366
- expect(errorEvent.error.logs).toBeDefined();
367
- expect(Array.isArray(errorEvent.error.logs)).toBe(true);
368
- expect(errorEvent.error.logs.length).toBeGreaterThan(0);
369
-
370
- // Assert: Verify specific log entries
371
- const infoLog = errorEvent.error.logs.find((log) => log.message === 'Starting workflow execution');
372
- expect(infoLog).toBeDefined();
373
- expect(infoLog?.level).toBe('info');
374
-
375
- const warnLog = errorEvent.error.logs.find((log) => log.message === 'Potential issue detected');
376
- expect(warnLog).toBeDefined();
377
- expect(warnLog?.level).toBe('warn');
378
-
379
- // Assert: Verify state was captured (may be empty object for pure functional workflows)
380
- expect(errorEvent.error.state).toBeDefined();
381
- expect(typeof errorEvent.error.state).toBe('object');
382
-
383
- // Assert: Verify workflow status
384
- expect(workflow.status).toBe('failed');
385
- });
386
- ```
387
-
388
- ---
389
-
390
- ### Integration Points
391
-
392
- ```yaml
393
- NO NEW INTEGRATIONS NEEDED
394
- - This is a test addition only
395
- - No changes to production code
396
- - No new dependencies
397
- - No configuration changes
398
-
399
- MODIFIED FILES:
400
- - file: src/__tests__/unit/workflow.test.ts
401
- action: Append new test case before closing describe brace
402
- ```
403
-
404
- ---
405
-
406
- ## Validation Loop
407
-
408
- ### Level 1: Syntax & Style (Immediate Feedback)
409
-
410
- ```bash
411
- # Run after adding the test - fix any issues before proceeding
412
- npm run test # Run all tests
413
- # OR run specific test file:
414
- npx vitest run src/__tests__/unit/workflow.test.ts
415
-
416
- # Expected: All tests pass, including the new test
417
- # If TypeScript errors: Check import statements and type annotations
418
- # If test fails: Read error message and fix assertions
419
-
420
- # For TypeScript type checking (if available):
421
- npx tsc --noEmit # Type check the codebase
422
-
423
- # Expected: Zero type errors
424
- ```
425
-
426
- ---
427
-
428
- ### Level 2: Unit Tests (Component Validation)
429
-
430
- ```bash
431
- # Run the specific test file to validate
432
- npx vitest run src/__tests__/unit/workflow.test.ts
433
-
434
- # Expected output:
435
- # ✓ Workflow
436
- # ✓ should create with unique id
437
- # ✓ should use class name as default name
438
- # ✓ should use custom name when provided
439
- # ✓ should start with idle status
440
- # ✓ should attach child to parent
441
- # ✓ should emit logs to observers
442
- # ✓ should emit childAttached event
443
- # ✓ should capture state and logs in functional workflow error # NEW TEST
444
-
445
- # Run all tests to ensure no regressions
446
- npm run test
447
-
448
- # Expected: All 155+ tests pass (existing 154 + 1 new)
449
- ```
450
-
451
- ---
452
-
453
- ### Level 3: Integration Testing (System Validation)
454
-
455
- ```bash
456
- # Run all unit tests
457
- npm run test
458
-
459
- # Run with coverage (if configured)
460
- npx vitest run --coverage
461
-
462
- # Expected: All tests pass, coverage report shows new test is counted
463
-
464
- # Manual validation - run in watch mode to see test output
465
- npm run test:watch
466
-
467
- # Expected: Test runs successfully in watch mode, shows passing green checkmark
468
- ```
469
-
470
- ---
471
-
472
- ### Level 4: Creative & Domain-Specific Validation
473
-
474
- ```bash
475
- # Domain-specific validation for error testing:
476
-
477
- # 1. Test different log levels
478
- # Modify test to include: ctx.logger.debug(), ctx.logger.error()
479
- # Verify all log levels are captured
480
-
481
- # 2. Test with log data
482
- # Add: ctx.logger.info('Message', { key: 'value' })
483
- # Verify error.logs contains data field
484
-
485
- # 3. Test error object properties
486
- # Verify: error.event.error.workflowId matches workflow.id
487
- # Verify: error.event.error.stack is defined for Error objects
488
-
489
- # 4. Test multiple workflows
490
- # Create multiple workflows with errors
491
- # Verify each error event has correct workflowId
492
-
493
- # 5. Test state capture with class-based workflows
494
- # Create class-based workflow with @ObservedState
495
- # Trigger error and verify state capture
496
- # (This validates getObservedState() works correctly)
497
-
498
- # Edge case tests to consider:
499
- # - Workflow with no logs (error.logs should be empty array, not undefined)
500
- # - Workflow with non-Error throw (error.event.error.original is not Error)
501
- # - Multiple errors in sequence
502
- ```
503
-
504
- ---
505
-
506
- ## Final Validation Checklist
507
-
508
- ### Technical Validation
509
-
510
- - [ ] Test file compiles without TypeScript errors
511
- - [ ] All existing tests still pass: `npm run test`
512
- - [ ] New test passes: Look for green checkmark in test output
513
- - [ ] Test is properly formatted (run linter if available)
514
- - [ ] Test follows existing naming conventions
515
-
516
- ### Feature Validation
517
-
518
- - [ ] Test validates error.logs capture with log entries
519
- - [ ] Test validates error.state object exists
520
- - [ ] Test verifies specific log messages are captured
521
- - [ ] Test verifies log levels are preserved
522
- - [ ] Test verifies workflow status is 'failed' after error
523
-
524
- ### Code Quality Validation
525
-
526
- - [ ] Test follows existing patterns from workflow.test.ts
527
- - [ ] Test follows existing patterns from agent-workflow.test.ts
528
- - [ ] Observer pattern matches existing tests
529
- - [ ] Assertions use expect() correctly
530
- - [ ] Test name follows "should [verb] [feature]" pattern
531
- - [ ] Test has clear Arrange/Act/Assert sections
532
-
533
- ### Documentation & Testing Best Practices
534
-
535
- - [ ] Test is self-documenting with clear variable names
536
- - [ ] Test failure messages would be clear to future developers
537
- - [ ] Test covers both success and error paths appropriately
538
- - [ ] Test is deterministic (no randomness or timing dependencies)
539
-
540
- ---
541
-
542
- ## Anti-Patterns to Avoid
543
-
544
- - ❌ Don't create a separate test file - add to existing workflow.test.ts
545
- - ❌ Don't use try/catch - use Vitest's `await expect().rejects.toThrow()`
546
- - ❌ Don't forget to attach observer BEFORE running workflow
547
- - ❌ Don't assume error.state has specific properties (functional workflows may not have @ObservedState)
548
- - ❌ Don't hardcode array indices without filtering first (use `events.filter(e => e.type === 'error')`)
549
- - ❌ Don't skip testing the logs array - this is the primary fix being validated
550
- - ❌ Don't create unnecessary test helpers - keep test self-contained
551
- - ❌ Don't use class-based workflow pattern - must use functional workflow pattern
552
- - ❌ Don't forget to assert workflow.status is 'failed'
553
- - ❌ Don't use vague test names - be specific: "should capture state and logs in functional workflow error"
554
-
555
- ---
556
-
557
- ## External Research Summary
558
-
559
- Key findings from external research that inform this PRP:
560
-
561
- 1. **Temporal.io Error Patterns**: Workflows should capture state at failure point for debugging and recovery (https://docs.temporal.io/develop/typescript/failure-detection)
562
-
563
- 2. **Decorator State Capture**: Decorators can capture `this` context and augment errors with metadata (https://stordahl.dev/writing/error-handling-decorators)
564
-
565
- 3. **Type-Safe Error Testing**: Use type guards and test error properties, not just messages (https://www.convex.dev/typescript/best-practices/error-handling-debugging/typescript-catch-error-type)
566
-
567
- 4. **Best Practice**: Test error objects with custom properties using explicit property assertions, not just message matching
568
-
569
- 5. **Common Pitfall**: Don't lose original error when re-throwing - preserve with `error.cause` (handled in our implementation via `error.original`)
570
-
571
- ---
572
-
573
- ## Success Metrics
574
-
575
- **Confidence Score**: 9/10
576
-
577
- **Justification**:
578
- - Complete code template provided
579
- - All file paths and line numbers specified
580
- - External best practices incorporated
581
- - Existing test patterns thoroughly analyzed
582
- - Validation commands are specific and executable
583
- - Only 1 point deduction: Functional workflows have limitations on @ObservedState usage, but test addresses this appropriately
584
-
585
- **Expected Implementation Time**: 15-30 minutes
586
-
587
- **Risk Factors**:
588
- - Low risk: Test-only change, no production code modification
589
- - Low complexity: Follows well-established patterns
590
- - High confidence: Reference tests exist in codebase
591
-
592
- **Dependencies**:
593
- - P1.M1.T1.S1-S3 must be complete (they are)
594
- - Vitest must be properly configured (it is)
595
- - runFunctional() error handler must have state/logs capture (it does)
596
-
597
- ---
598
-
599
- ## Appendix: Quick Reference
600
-
601
- ### Key Files
602
-
603
- - **Test file to modify**: `/home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts`
604
- - **Implementation being tested**: `/home/dustin/projects/groundswell/src/core/workflow.ts:259-302`
605
- - **Reference test patterns**: `/home/dustin/projects/groundswell/src/__tests__/integration/agent-workflow.test.ts:181-205`
606
-
607
- ### Commands
608
-
609
- ```bash
610
- # Run tests
611
- npm run test
612
-
613
- # Run specific file
614
- npx vitest run src/__tests__/unit/workflow.test.ts
615
-
616
- # Watch mode
617
- npm run test:watch
618
- ```
619
-
620
- ### Test Pattern Quick Reference
621
-
622
- ```typescript
623
- // Observer setup
624
- const events: WorkflowEvent[] = [];
625
- const observer: WorkflowObserver = {
626
- onLog: () => {},
627
- onEvent: (event) => events.push(event),
628
- onStateUpdated: () => {},
629
- onTreeChanged: () => {},
630
- };
631
-
632
- // Functional workflow
633
- const workflow = new Workflow<void>({ name: 'Test' }, async (ctx) => {
634
- ctx.logger.info('message');
635
- throw new Error('error');
636
- });
637
-
638
- // Run and assert error
639
- workflow.addObserver(observer);
640
- await expect(workflow.run()).rejects.toThrow('error');
641
-
642
- // Validate error event
643
- const errorEvents = events.filter(e => e.type === 'error');
644
- expect(errorEvents.length).toBeGreaterThanOrEqual(1);
645
- expect(errorEvents[0].error.logs).toBeDefined();
646
- ```
647
-
648
- ---
649
-
650
- **PRP Version**: 1.0
651
- **Created**: 2025-01-11
652
- **Status**: Ready for Implementation