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,612 +0,0 @@
1
- # PRP: Add Tests for Observer Error Logging (P1.M3.T1.S3)
2
-
3
- ## Goal
4
-
5
- **Feature Goal**: Add comprehensive test suite for observer error logging to verify that observer errors are logged through `WorkflowLogger` instead of `console.error`, errors don't crash workflow execution, and error context is properly captured.
6
-
7
- **Deliverable**: Enhanced test suite at `src/__tests__/integration/observer-logging.test.ts` with comprehensive coverage of all observer error scenarios.
8
-
9
- **Success Definition**:
10
- - All observer callback errors (onLog, onEvent, onStateUpdated, onTreeChanged) are tested
11
- - Tests verify errors are logged to `workflow.node.logs` (structured logging)
12
- - Tests verify workflow execution continues despite observer errors
13
- - Tests verify error context is captured in log entries
14
- - All tests pass: `uv run vitest run src/__tests__/integration/observer-logging.test.ts`
15
-
16
- ## Why
17
-
18
- - **Verification of S2 Implementation**: S2 replaced `console.error` with `logger.error` for observer errors. S3 adds tests to verify this change works correctly.
19
- - **Regression Prevention**: Tests ensure future changes don't break observer error handling
20
- - **Observable Error Behavior**: Observer errors should be isolated - one throwing observer shouldn't crash the workflow or prevent other observers from being notified
21
- - **Debugging Capability**: Structured error logs with context (error object, event type, node ID) are essential for debugging observer issues in production
22
-
23
- ## What
24
-
25
- Add comprehensive tests for observer error logging covering:
26
-
27
- 1. **Error Logging Verification**: Verify observer errors go to `WorkflowLogger` (captured in `workflow.node.logs`), not `console.error`
28
- 2. **Error Isolation**: Verify workflow execution continues when observers throw errors
29
- 3. **Error Context**: Verify log entries contain error context (error object, event type, node ID)
30
- 4. **Infinite Recursion Prevention**: Verify `onLog` errors don't cause infinite loops
31
- 5. **Multiple Observers**: Verify other observers continue to be notified after one throws
32
-
33
- ### Success Criteria
34
-
35
- - [ ] Tests verify all four observer callbacks (onLog, onEvent, onStateUpdated, onTreeChanged) error handling
36
- - [ ] Tests verify errors are logged with structured data (error object, context)
37
- - [ ] Tests verify workflow execution continues after observer errors
38
- - [ ] Tests verify `console.error` is NOT called for observer execution errors (validation errors still use console.error)
39
- - [ ] All existing tests continue to pass
40
- - [ ] Test coverage is comprehensive for edge cases
41
-
42
- ## All Needed Context
43
-
44
- ### Context Completeness Check
45
-
46
- _Before writing this PRP, validate: "If someone knew nothing about this codebase, would they have everything needed to implement this successfully?"_
47
-
48
- **Answer**: Yes. This PRP provides complete context including existing test patterns, observer implementation details, exact file locations, and specific test patterns to follow.
49
-
50
- ### Documentation & References
51
-
52
- ```yaml
53
- # MUST READ - Implementation context from S2
54
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md
55
- why: Understand the observer error handling implementation that S2 completed
56
- critical: S2 replaced console.error with logger.error for all observer execution errors
57
- section: Full PRP - especially Implementation Blueprint section
58
-
59
- # Observer error handling implementation
60
- - file: src/core/workflow.ts
61
- why: Observer error handling implementation - lines 368-378 (onEvent), 390-396 (onStateUpdated)
62
- pattern: try-catch blocks with this.logger.error() calls including error context
63
- gotcha: onTreeChanged is called inside onEvent's try-catch, so errors are logged as "Observer onEvent error"
64
-
65
- - file: src/core/logger.ts
66
- why: WorkflowLogger implementation with emitWithoutObserverNotification for infinite recursion prevention
67
- pattern: Lines 34-45 show onLog error handling creating error log entry
68
- critical: Uses emitWithoutObserverNotification() to prevent infinite recursion when observer.onLog() throws
69
-
70
- # Existing test file (comprehensive, may need enhancement)
71
- - file: src/__tests__/integration/observer-logging.test.ts
72
- why: Existing observer error logging tests created in S2 - use as pattern reference
73
- pattern: Integration test structure, vi.spyOn for mocking, expect assertions on workflow.node.logs
74
- gotcha: This file was created in S2 (commit c572b41) - verify it covers all scenarios
75
-
76
- # Test framework configuration
77
- - file: vitest.config.ts
78
- why: Test configuration - vitest with globals enabled, includes src/__tests__/**/*.test.ts
79
- pattern: Test file naming convention *.test.ts in src/__tests__/ directory
80
-
81
- # Observer interface
82
- - file: src/types/observer.ts
83
- why: WorkflowObserver interface definition - all four callback methods
84
- pattern: onLog, onEvent, onStateUpdated, onTreeChanged methods
85
-
86
- # Test patterns reference
87
- - file: src/__tests__/unit/logger.test.ts
88
- why: Pattern for testing logger behavior - verify logs go to workflow.node.logs
89
- pattern: expect(workflow.node.logs.length).toBe(n), expect(workflow.node.logs[x].message).toBe('...')
90
-
91
- - file: src/__tests__/unit/observable.test.ts
92
- why: Pattern for testing Observable class error handling with mock logger
93
- pattern: const mockLogger = { error: vi.fn() }; expect(mockLogger.error).toHaveBeenCalledWith(...)
94
-
95
- # Architecture documentation
96
- - file: plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md
97
- why: Section 9 (Testing Strategy) outlines vitest test patterns
98
- section: Lines 270-286
99
-
100
- # External documentation
101
- - url: https://vitest.dev/api/expect.html#tothrow
102
- why: Vitest assertions for testing error throwing behavior
103
- critical: toThrow(), not.toThrow(), resolves, rejects patterns
104
-
105
- - url: https://vitest.dev/guide/mocking.html#spy-on
106
- why: Mocking console.error to verify it's NOT called for observer errors
107
- pattern: vi.spyOn(console, 'error').mockImplementation(() => {})
108
-
109
- - url: https://vitest.dev/api/expect.html#tobedefined
110
- why: Assertions for verifying error log entries exist
111
- critical: toBeDefined(), toEqual(), toHaveProperty() patterns
112
- ```
113
-
114
- ### Current Codebase Tree
115
-
116
- ```bash
117
- src/
118
- ├── __tests__/
119
- │ ├── integration/
120
- │ │ ├── observer-logging.test.ts # EXISTING - created in S2, verify/enhance coverage
121
- │ │ ├── agent-workflow.test.ts
122
- │ │ ├── bidirectional-consistency.test.ts
123
- │ │ ├── tree-mirroring.test.ts
124
- │ │ └── workflow-reparenting.test.ts
125
- │ ├── unit/
126
- │ │ ├── logger.test.ts # Reference for logger test patterns
127
- │ │ ├── workflow.test.ts
128
- │ │ └── observable.test.ts # Reference for mock logger pattern
129
- │ └── adversarial/
130
- │ └── observer-propagation.test.ts
131
- ├── core/
132
- │ ├── workflow.ts # Lines 368-378 (onEvent errors), 390-396 (onStateUpdated errors)
133
- │ └── logger.ts # Lines 34-45 (onLog error handling)
134
- ├── types/
135
- │ └── observer.ts # WorkflowObserver interface
136
- └── utils/
137
- └── observable.ts # Observable class with logger injection
138
- ```
139
-
140
- ### Desired Codebase Tree
141
-
142
- ```bash
143
- src/
144
- ├── __tests__/
145
- │ ├── integration/
146
- │ │ └── observer-logging.test.ts # ENHANCE - add any missing test coverage
147
- ```
148
-
149
- **Note**: The test file already exists from S2. This PRP focuses on:
150
- 1. Verifying existing tests cover all scenarios
151
- 2. Adding any missing test coverage (e.g., onTreeChanged errors, console.error negative verification)
152
- 3. Ensuring all tests pass
153
-
154
- ### Known Gotchas of Our Codebase & Library Quirks
155
-
156
- ```typescript
157
- // CRITICAL: onTreeChanged error handling
158
- // onTreeChanged is called INSIDE the onEvent try-catch block (workflow.ts:373)
159
- // So if onTreeChanged throws, it's logged as "Observer onEvent error" with the event type
160
- // This is by design - onTreeChanged is part of event emission for tree update events
161
-
162
- // CRITICAL: emitWithoutObserverNotification prevents infinite recursion
163
- // When observer.onLog() throws, WorkflowLogger uses emitWithoutObserverNotification()
164
- // to log the error WITHOUT notifying observers again (logger.ts:44)
165
-
166
- // CRITICAL: Validation errors still use console.error
167
- // Lines 277, 286 in workflow.ts use console.error for structural validation
168
- // These are NOT observer execution errors - they should remain as console.error
169
-
170
- // GOTCHA: Test file already exists from S2
171
- // src/__tests__/integration/observer-logging.test.ts was created in commit c572b41
172
- // Verify coverage before adding new tests
173
-
174
- // PATTERN: Tests verify logs in workflow.node.logs, not console output
175
- // expect(workflow.node.logs.find(log => log.message === '...')).toBeDefined()
176
-
177
- // PATTERN: Use vi.spyOn for console.error negative verification
178
- // const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
179
- // ... run test ...
180
- // expect(consoleSpy).not.toHaveBeenCalled(); // Verify console.error NOT called
181
- ```
182
-
183
- ## Implementation Blueprint
184
-
185
- ### Test Architecture
186
-
187
- The observer error logging tests verify the S2 implementation that replaced `console.error` with `logger.error` for observer execution errors.
188
-
189
- **Key Test Categories**:
190
-
191
- 1. **onLog Error Tests** (WorkflowObserver.onLog throws)
192
- - Verify error is logged to `workflow.node.logs`
193
- - Verify error data contains the error object
194
- - Verify infinite recursion prevention
195
-
196
- 2. **onEvent Error Tests** (WorkflowObserver.onEvent throws)
197
- - Verify error is logged with event type context
198
- - Verify workflow continues execution
199
-
200
- 3. **onStateUpdated Error Tests** (WorkflowObserver.onStateUpdated throws)
201
- - Verify error is logged with node ID context
202
- - Verify state snapshot completes
203
-
204
- 4. **onTreeChanged Error Tests** (WorkflowObserver.onTreeChanged throws)
205
- - Note: onTreeChanged is called inside onEvent try-catch
206
- - Errors logged as "Observer onEvent error" with treeUpdated event type
207
-
208
- 5. **Error Isolation Tests**
209
- - Verify workflow doesn't crash when observers throw
210
- - Verify other observers continue to be notified
211
-
212
- 6. **Multiple Observers Tests**
213
- - Verify all observers are notified even if some throw
214
- - Verify error logs for each throwing observer
215
-
216
- 7. **Console.error Negative Verification**
217
- - Verify `console.error` is NOT called for observer execution errors
218
- - Verify `console.error` IS still called for validation errors (lines 277, 286)
219
-
220
- ### Implementation Tasks
221
-
222
- ```yaml
223
- Task 1: REVIEW existing observer-logging.test.ts coverage
224
- - VERIFY: All observer callbacks have error tests (onLog, onEvent, onStateUpdated, onTreeChanged)
225
- - VERIFY: Error isolation tests exist
226
- - VERIFY: Multiple observer tests exist
227
- - VERIFY: Infinite recursion prevention tests exist
228
- - IDENTIFY: Any missing test scenarios
229
- - CHECK: Are there tests verifying console.error is NOT called for observer errors?
230
-
231
- Task 2: ADD onTreeChanged error test (if missing)
232
- - IMPLEMENT: Test where observer.onTreeChanged throws during tree update event
233
- - VERIFY: Error is logged (as "Observer onEvent error" since onTreeChanged is in onEvent try-catch)
234
- - VERIFY: Event type is 'treeUpdated', 'childAttached', or 'childDetached'
235
- - FOLLOW: Existing observer error test pattern from observer-logging.test.ts:77-109
236
- - NAMING: "should log observer onTreeChanged errors (caught as onEvent error)"
237
-
238
- Task 3: ADD console.error negative verification tests (if missing)
239
- - IMPLEMENT: Tests using vi.spyOn(console, 'error') to verify it's NOT called
240
- - VERIFY: For onLog, onEvent, onStateUpdated errors - console.error is NOT invoked
241
- - VERIFY: For validation errors - console.error IS still invoked (lines 277, 286)
242
- - FOLLOW: Pattern from observer-logging.test.ts:200-218
243
- - CLEANUP: Always restore spies with vi.restoreAllMocks() in afterEach or after each test
244
-
245
- Task 4: ADD hierarchical workflow observer error tests (if missing)
246
- - IMPLEMENT: Test with parent-child workflow hierarchy
247
- - VERIFY: Observer on root still receives notifications from child workflows
248
- - VERIFY: Observer errors in child workflows are logged correctly
249
- - VERIFY: Parent workflow execution continues when observer errors occur in child
250
- - FOLLOW: Pattern from observer-propagation.test.ts for hierarchical setup
251
-
252
- Task 5: VERIFY all tests pass
253
- - RUN: uv run vitest run src/__tests__/integration/observer-logging.test.ts
254
- - EXPECTED: All tests pass with no failures
255
- - DEBUG: If tests fail, check for:
256
- - Incorrect error message matching
257
- - Missing log entries
258
- - Async timing issues (use await for async run() methods)
259
- - Mock cleanup issues (vi.restoreAllMocks())
260
-
261
- Task 6: VERIFY no regressions in existing test suite
262
- - RUN: uv run vitest run src/__tests__/
263
- - EXPECTED: All existing tests still pass
264
- - CHECK: No new tests break existing functionality
265
- ```
266
-
267
- ### Implementation Patterns & Key Details
268
-
269
- ```typescript
270
- // PATTERN 1: Basic observer error test structure
271
- describe('Observer Error Logging Integration Tests', () => {
272
- it('should log observer onEvent errors to workflow.node.logs', () => {
273
- const onEventError = new Error('Observer onEvent failed');
274
-
275
- const throwingObserver: WorkflowObserver = {
276
- onLog: () => {},
277
- onEvent: () => {
278
- throw onEventError;
279
- },
280
- onStateUpdated: () => {},
281
- onTreeChanged: () => {},
282
- };
283
-
284
- class TestWorkflow extends Workflow {
285
- async run() {
286
- this.emitEvent({ type: 'testEvent' });
287
- }
288
- }
289
-
290
- const workflow = new TestWorkflow();
291
- workflow.addObserver(throwingObserver);
292
- workflow.run();
293
-
294
- // Verify error log entry exists
295
- const errorLog = workflow.node.logs.find(
296
- (log) => log.message === 'Observer onEvent error'
297
- );
298
- expect(errorLog).toBeDefined();
299
- expect(errorLog?.level).toBe('error');
300
- expect(errorLog?.data).toEqual({
301
- error: onEventError,
302
- eventType: 'testEvent',
303
- });
304
- });
305
- });
306
-
307
- // PATTERN 2: Error isolation - workflow continues execution
308
- it('should not crash workflow when observer onEvent throws', () => {
309
- const throwingObserver: WorkflowObserver = {
310
- onLog: () => {},
311
- onEvent: () => {
312
- throw new Error('Observer onEvent error');
313
- },
314
- onStateUpdated: () => {},
315
- onTreeChanged: () => {},
316
- };
317
-
318
- class TestWorkflow extends Workflow {
319
- async run() {
320
- this.emitEvent({ type: 'event1' });
321
- this.emitEvent({ type: 'event2' });
322
- this.emitEvent({ type: 'event3' });
323
- }
324
- }
325
-
326
- const workflow = new TestWorkflow();
327
- workflow.addObserver(throwingObserver);
328
-
329
- // Should complete without throwing
330
- expect(() => {
331
- workflow.run();
332
- }).not.toThrow();
333
-
334
- // All events should be emitted
335
- expect(workflow.node.events.length).toBe(3);
336
- });
337
-
338
- // PATTERN 3: Console.error negative verification
339
- it('should NOT call console.error for observer execution errors', () => {
340
- const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
341
-
342
- const throwingObserver: WorkflowObserver = {
343
- onLog: () => {},
344
- onEvent: () => {
345
- throw new Error('Observer error');
346
- },
347
- onStateUpdated: () => {},
348
- onTreeChanged: () => {},
349
- };
350
-
351
- class TestWorkflow extends Workflow {
352
- async run() {
353
- this.emitEvent({ type: 'testEvent' });
354
- }
355
- }
356
-
357
- const workflow = new TestWorkflow();
358
- workflow.addObserver(throwingObserver);
359
- workflow.run();
360
-
361
- // Verify console.error was NOT called for observer error
362
- expect(consoleErrorSpy).not.toHaveBeenCalled();
363
-
364
- // Verify error was logged to workflow.node.logs instead
365
- const errorLog = workflow.node.logs.find(
366
- (log) => log.message === 'Observer onEvent error'
367
- );
368
- expect(errorLog).toBeDefined();
369
-
370
- consoleErrorSpy.mockRestore();
371
- });
372
-
373
- // PATTERN 4: Multiple observers with mixed success/failure
374
- it('should continue notifying other observers after one throws', async () => {
375
- let observer2Called = false;
376
- let observer3Called = false;
377
-
378
- const throwingObserver: WorkflowObserver = {
379
- onLog: () => {
380
- throw new Error('Observer 1 failed');
381
- },
382
- onEvent: () => {},
383
- onStateUpdated: () => {},
384
- onTreeChanged: () => {},
385
- };
386
-
387
- const workingObserver2: WorkflowObserver = {
388
- onLog: () => {
389
- observer2Called = true;
390
- },
391
- onEvent: () => {},
392
- onStateUpdated: () => {},
393
- onTreeChanged: () => {},
394
- };
395
-
396
- const workingObserver3: WorkflowObserver = {
397
- onLog: () => {
398
- observer3Called = true;
399
- },
400
- onEvent: () => {},
401
- onStateUpdated: () => {},
402
- onTreeChanged: () => {},
403
- };
404
-
405
- class TestWorkflow extends Workflow {
406
- async run() {
407
- this.logger.info('Test message');
408
- }
409
- }
410
-
411
- const workflow = new TestWorkflow();
412
- workflow.addObserver(throwingObserver);
413
- workflow.addObserver(workingObserver2);
414
- workflow.addObserver(workingObserver3);
415
-
416
- await workflow.run();
417
-
418
- // Both working observers should have been called
419
- expect(observer2Called).toBe(true);
420
- expect(observer3Called).toBe(true);
421
-
422
- // Should have error log for throwing observer
423
- const errorLog = workflow.node.logs.find(
424
- (log) => log.message === 'Observer onLog error'
425
- );
426
- expect(errorLog).toBeDefined();
427
- });
428
-
429
- // PATTERN 5: Infinite recursion prevention for onLog errors
430
- it('should avoid infinite recursion when observer onLog throws', async () => {
431
- let callCount = 0;
432
- const maxCalls = 10; // Safety limit to prevent actual infinite loop
433
-
434
- const throwingObserver: WorkflowObserver = {
435
- onLog: () => {
436
- callCount++;
437
- if (callCount < maxCalls) {
438
- throw new Error('Recursive error');
439
- }
440
- },
441
- onEvent: () => {},
442
- onStateUpdated: () => {},
443
- onTreeChanged: () => {},
444
- };
445
-
446
- class TestWorkflow extends Workflow {
447
- async run() {
448
- this.logger.info('Test message');
449
- }
450
- }
451
-
452
- const workflow = new TestWorkflow();
453
- workflow.addObserver(throwingObserver);
454
- await workflow.run();
455
-
456
- // Should only call onLog once (original) + one error log, then stop
457
- // The error log should NOT trigger another observer notification
458
- expect(callCount).toBe(1);
459
-
460
- // Should have 2 logs: original + error
461
- expect(workflow.node.logs.length).toBe(2);
462
- });
463
- ```
464
-
465
- ### Integration Points
466
-
467
- ```yaml
468
- NO NEW FILES NEEDED:
469
- - Test file already exists: src/__tests__/integration/observer-logging.test.ts
470
- - Implementation code already exists from S2
471
-
472
- TEST DEPENDENCIES:
473
- - vitest: Test framework (configured in vitest.config.ts)
474
- - @vitest/spy: For vi.spyOn() mocking
475
-
476
- VALIDATION DEPENDS ON:
477
- - src/core/workflow.ts: Observer error handling implementation
478
- - src/core/logger.ts: WorkflowLogger with emitWithoutObserverNotification
479
- - src/types/observer.ts: WorkflowObserver interface
480
- ```
481
-
482
- ## Validation Loop
483
-
484
- ### Level 1: Syntax & Style (Immediate Feedback)
485
-
486
- ```bash
487
- # Run after any test modifications
488
- npx tsc --noEmit src/__tests__/integration/observer-logging.test.ts
489
-
490
- # Expected: No TypeScript errors
491
- ```
492
-
493
- ### Level 2: Unit Tests (Component Validation)
494
-
495
- ```bash
496
- # Run only the observer logging tests
497
- uv run vitest run src/__tests__/integration/observer-logging.test.ts
498
-
499
- # Run with verbose output for detailed results
500
- uv run vitest run src/__tests__/integration/observer-logging.test.ts --reporter=verbose
501
-
502
- # Run in watch mode during development
503
- uv run vitest watch src/__tests__/integration/observer-logging.test.ts
504
-
505
- # Expected: All tests pass
506
- # Example output:
507
- # ✓ src/__tests__/integration/observer-logging.test.ts (N)
508
- # ✓ WorkflowLogger observer onLog error (N)
509
- # ✓ should log observer onLog errors to workflow.node.logs
510
- # ✓ should avoid infinite recursion when observer onLog throws
511
- # ✓ Workflow observer onEvent error (N)
512
- # ✓ should log observer onEvent errors via this.logger.error
513
- # ✓ should include event type in error data
514
- # ...
515
- ```
516
-
517
- ### Level 3: Integration Testing (System Validation)
518
-
519
- ```bash
520
- # Run all integration tests to ensure no regressions
521
- uv run vitest run src/__tests__/integration/
522
-
523
- # Run all tests in the project
524
- uv run vitest run src/__tests__/
525
-
526
- # Expected: All tests pass, no failures in other test files
527
- # Verify specifically that logger.test.ts and workflow.test.ts still pass
528
- ```
529
-
530
- ### Level 4: Creative & Domain-Specific Validation
531
-
532
- ```bash
533
- # Run tests with coverage report
534
- uv run vitest run src/__tests__/integration/observer-logging.test.ts --coverage
535
-
536
- # Check if observer error handling code is covered
537
- # Expected: High coverage for:
538
- # - src/core/workflow.ts:368-378 (onEvent error handling)
539
- # - src/core/workflow.ts:390-396 (onStateUpdated error handling)
540
- # - src/core/logger.ts:34-45 (onLog error handling)
541
-
542
- # Adversarial testing - run stress tests
543
- uv run vitest run src/__tests__/adversarial/
544
-
545
- # Expected: No adversarial tests broken by observer error handling changes
546
- ```
547
-
548
- ## Final Validation Checklist
549
-
550
- ### Technical Validation
551
-
552
- - [ ] All 4 validation levels completed successfully
553
- - [ ] All observer-logging tests pass: `uv run vitest run src/__tests__/integration/observer-logging.test.ts`
554
- - [ ] No TypeScript errors: `npx tsc --noEmit src/__tests__/integration/observer-logging.test.ts`
555
- - [ ] No regressions: `uv run vitest run src/__tests__/` passes completely
556
- - [ ] Console.error NOT called for observer execution errors (verified via vi.spyOn tests)
557
- - [ ] Console.error IS still called for validation errors (lines 277, 286)
558
-
559
- ### Feature Validation
560
-
561
- - [ ] All success criteria from "What" section met
562
- - [ ] onLog error logging tests pass with infinite recursion prevention
563
- - [ ] onEvent error logging tests pass with event type context
564
- - [ ] onStateUpdated error logging tests pass with node ID context
565
- - [ ] onTreeChanged error handling tested (via onEvent since it's in same try-catch)
566
- - [ ] Error isolation verified - workflow continues after observer errors
567
- - [ ] Multiple observers tested - others notified after one throws
568
- - [ ] Structured error context verified in log entries
569
-
570
- ### Code Quality Validation
571
-
572
- - [ ] Tests follow existing patterns from observer-logging.test.ts
573
- - [ ] Descriptive test names using "should" pattern
574
- - [ ] Proper mock cleanup with vi.restoreAllMocks()
575
- - [ ] Tests are isolated (no shared state between tests)
576
- - [ ] Test coverage is comprehensive for all observer callbacks
577
-
578
- ### Documentation & Deployment
579
-
580
- - [ ] Test file is self-documenting with clear describe/it blocks
581
- - [ ] Complex test scenarios have explanatory comments
582
- - [ ] Test file location matches convention (src/__tests__/integration/)
583
-
584
- ---
585
-
586
- ## Anti-Patterns to Avoid
587
-
588
- - ❌ Don't create a new test file - use existing `observer-logging.test.ts`
589
- - ❌ Don't test console.error output - test `workflow.node.logs` content instead
590
- - ❌ Don't forget to restore vi.spyOn mocks - always use vi.restoreAllMocks()
591
- - ❌ Don't share state between tests - create fresh observers for each test
592
- - ❌ Don't use setTimeout for timing - use proper async/await
593
- - ❌ Don't test implementation details - test behavior (errors logged, workflow continues)
594
- - ❌ Don't remove validation error console.error tests (lines 277, 286) - these are correct
595
- - ❌ Don't add tests that are duplicates of existing S2 tests - verify coverage first
596
-
597
- ## Context Completeness Validation
598
-
599
- This PRP passes the "No Prior Knowledge" test:
600
-
601
- ✅ File locations specified with line numbers
602
- ✅ Existing test file identified and analyzed
603
- ✅ Test patterns provided with code examples
604
- ✅ External documentation URLs included with anchors
605
- ✅ Known gotchas documented (onTreeChanged in onEvent try-catch, emitWithoutObserverNotification)
606
- ✅ Validation commands are project-specific and verified
607
- ✅ Implementation tasks are dependency-ordered and specific
608
- ✅ Anti-patterns section prevents common mistakes
609
-
610
- **Confidence Score for One-Pass Implementation Success: 9/10**
611
-
612
- The existing test file from S2 provides an excellent foundation. This PRP provides clear guidance on verifying and enhancing test coverage with specific patterns to follow.