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,1011 +0,0 @@
1
- # Breaking Changes Audit Report - Version 0.0.3
2
-
3
- **PRP ID**: P1.M4.T3.S1
4
- **Audit Date**: 2026-01-12
5
- **Auditor**: Claude Code (PRP-Driven Implementation)
6
- **Report Version**: 1.0
7
-
8
- ---
9
-
10
- ## Executive Summary
11
-
12
- This comprehensive audit examines all bug fixes implemented in milestones P1.M1 (Critical), P1.M2 (Major), and P1.M3 (Minor) to identify breaking changes, assess their severity, and document mitigation strategies with migration paths.
13
-
14
- ### Overall Assessment
15
-
16
- | Metric | Value | Status |
17
- |--------|-------|--------|
18
- | **Total Bug Fixes Audited** | 8 | Complete |
19
- | **Breaking Changes Found** | 1 | Low Severity |
20
- | **Non-Breaking Changes** | 7 | Full Backward Compatibility |
21
- | **Test Pass Rate** | 100% (479/479) | Validated |
22
- | **Version Recommendation** | PATCH (0.0.3 → 0.0.4) | See Version Recommendation |
23
-
24
- ### Key Findings
25
-
26
- - **Primary Breaking Change**: Workflow constructor name validation (LOW severity)
27
- - **All Other Changes**: Non-breaking additive changes or internal implementation improvements
28
- - **Backward Compatibility**: Maintained for 7 of 8 fixes via function overloads, default preservation, or internal-only changes
29
- - **Migration Required**: Only for users relying on empty/whitespace workflow names
30
-
31
- ---
32
-
33
- ## Methodology
34
-
35
- This audit follows a systematic approach to identify and classify breaking changes:
36
-
37
- ### 1. Public API Surface Identification
38
-
39
- The public API surface is defined by all exports from `/home/dustin/projects/groundswell/src/index.ts`. Only changes to these exports can constitute breaking changes. Internal implementation changes are never breaking changes.
40
-
41
- **Public API Elements Include:**
42
- - All exported classes: `Workflow`, `WorkflowLogger`, `Agent`, `Prompt`, `MCPHandler`, `WorkflowTreeDebugger`
43
- - All exported decorators: `Step`, `Task`, `ObservedState`
44
- - All exported types and interfaces from `types/index.js`
45
- - All exported utility functions: `generateId`, `mergeWorkflowErrors`, `Observable`
46
-
47
- ### 2. Breaking Change Criteria
48
-
49
- Per [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html):
50
- > **MAJOR version** when you make incompatible API changes
51
- > **MINOR version** when you add functionality in a backward-compatible manner
52
- > **PATCH version** when you make backward-compatible bug fixes
53
-
54
- Breaking changes are defined as:
55
- - Function/method signature modifications that break existing call patterns
56
- - Interface property removal or requirement changes
57
- - Behavioral changes that break existing expectations
58
- - Removal of exported APIs
59
-
60
- ### 3. Severity Assessment Framework
61
-
62
- | Severity | Definition | Example |
63
- |----------|-----------|---------|
64
- | **Critical** | Data loss, security issue, complete feature failure | Removing required API, changing return type to incompatible |
65
- | **High** | Major disruption, complex migration | Removing commonly used method, tightening validation significantly |
66
- | **Medium** | Moderate disruption, straightforward migration | Changing optional to required, minor behavior change |
67
- | **Low** | Minor disruption, simple migration, fixes undefined behavior | Rejecting previously accepted invalid inputs |
68
-
69
- ### 4. Validation Methodology
70
-
71
- Each fix is validated against:
72
- 1. **Public API Impact**: Does the change affect exports from `src/index.ts`?
73
- 2. **Backward Compatibility**: Do existing usage patterns continue to work?
74
- 3. **Test Coverage**: Do all 479 tests pass without modification?
75
- 4. **PRD Alignment**: Does the fix correct PRD-violating behavior (which makes it non-breaking)?
76
-
77
- ---
78
-
79
- ## P1.M1 - Critical Fixes Audit
80
-
81
- ### WorkflowLogger.child() Signature Fix
82
-
83
- **File**: `/home/dustin/projects/groundswell/src/core/logger.ts:98-111`
84
- **Exported**: Yes - `WorkflowLogger` class is exported from `src/index.ts`
85
- **Public API Element**: `WorkflowLogger.child()` method
86
-
87
- #### Breaking Change Assessment
88
-
89
- **Classification**: **NON-BREAKING**
90
- **Severity**: N/A
91
-
92
- #### Public API Impact
93
-
94
- The `child()` method signature changed from:
95
- ```typescript
96
- // Before
97
- child(parentLogId: string): WorkflowLogger
98
-
99
- // After (with overloads)
100
- child(parentLogId: string): WorkflowLogger;
101
- child(meta: Partial<LogEntry>): WorkflowLogger;
102
- child(input: string | Partial<LogEntry>): WorkflowLogger
103
- ```
104
-
105
- #### Reasoning
106
-
107
- **Justification: Backward Compatible Implementation via Function Overloads**
108
-
109
- The implementation uses TypeScript function overloads to support both the legacy string-based API and the new `Partial<LogEntry>` API:
110
-
111
- ```typescript
112
- // src/core/logger.ts:98-111
113
- child(parentLogId: string): WorkflowLogger;
114
- child(meta: Partial<LogEntry>): WorkflowLogger;
115
- child(input: string | Partial<LogEntry>): WorkflowLogger {
116
- const parentLogId = typeof input === 'string' ? input : input.parentLogId;
117
- return new WorkflowLogger(this.node, this.observers, parentLogId);
118
- }
119
- ```
120
-
121
- **All existing call patterns continue to work:**
122
- - `logger.child('parent-id-123')` - Legacy string parameter
123
- - `logger.child('')` - Empty string (results in undefined parentLogId)
124
- - `logger.child({ parentLogId: 'parent-id' })` - New object syntax
125
-
126
- **Evidence from VERIFICATION_REPORT.md:**
127
- > All 361 tests pass without any code modifications required. 20 usage locations verified (2 existing + 18 new patterns).
128
-
129
- #### Migration Required
130
-
131
- **No** - Zero code changes required for existing users.
132
-
133
- #### Mitigation Strategy
134
-
135
- **Not applicable** - No migration needed. The function overload pattern ensures all existing code continues to work unchanged.
136
-
137
- **For new code**, users should use the more explicit `Partial<LogEntry>` syntax:
138
- ```typescript
139
- logger.child({ parentLogId: 'parent-id-123' })
140
- ```
141
-
142
- #### Verification
143
-
144
- **Test Coverage**: Comprehensive validation in `plan/.../P1M1T1S4/VERIFICATION_REPORT.md`
145
- - All 20 usage patterns verified working
146
- - 100% test pass rate (361 tests)
147
- - Edge cases documented and handled
148
-
149
- **Manual Verification**:
150
- ```bash
151
- npm test
152
- # Result: 479 tests passed (100% pass rate)
153
- ```
154
-
155
- ---
156
-
157
- ## P1.M2 - Major Fixes Audit
158
-
159
- ### Promise.allSettled for Concurrent Tasks
160
-
161
- **File**: `/home/dustin/projects/groundswell/src/decorators/task.ts:112-142`
162
- **Exported**: Yes - `Task` decorator is exported from `src/index.ts`
163
- **Public API Element**: `@Task` decorator behavior with `concurrent: true` option
164
-
165
- #### Breaking Change Assessment
166
-
167
- **Classification**: **NON-BREAKING**
168
- **Severity**: N/A
169
-
170
- #### Public API Impact
171
-
172
- The `@Task` decorator now uses `Promise.allSettled()` instead of `Promise.all()` for concurrent workflow execution:
173
-
174
- ```typescript
175
- // src/decorators/task.ts:112-142
176
- const results = await Promise.allSettled(runnable.map((w) => w.run()));
177
-
178
- const rejected = results.filter(
179
- (r): r is PromiseRejectedResult => r.status === 'rejected'
180
- );
181
-
182
- if (rejected.length > 0) {
183
- // Check if error merge strategy is enabled
184
- if (opts.errorMergeStrategy?.enabled) {
185
- // ... merge errors
186
- }
187
- // Backward compatibility: throw first error
188
- throw rejected[0].reason;
189
- }
190
- ```
191
-
192
- #### Reasoning
193
-
194
- **Justification: Default Behavior Unchanged (Backward Compatible)**
195
-
196
- The key behavioral difference between `Promise.all()` and `Promise.allSettled()` is:
197
- - `Promise.all()`: Rejects immediately on first error
198
- - `Promise.allSettled()`: Waits for all promises to complete
199
-
200
- However, **the default behavior is preserved**:
201
- ```typescript
202
- // Backward compatibility: throw first error
203
- throw rejected[0].reason;
204
- ```
205
-
206
- **Existing code expectations are maintained:**
207
- - When concurrent tasks fail, an error is still thrown
208
- - The first error (in array order) is thrown by default
209
- - No code changes required for existing users
210
-
211
- **The enhancement is additive:**
212
- - New `errorMergeStrategy` option enables aggregate error handling
213
- - When enabled, all errors are collected and merged
214
- - When disabled (default), behavior is identical to `Promise.all()`
215
-
216
- #### Migration Required
217
-
218
- **No** - Default behavior unchanged.
219
-
220
- #### Mitigation Strategy
221
-
222
- **Not applicable** - No migration needed.
223
-
224
- **For users wanting aggregate error handling**, the new feature is opt-in:
225
- ```typescript
226
- @Task({
227
- concurrent: true,
228
- errorMergeStrategy: {
229
- enabled: true,
230
- // Custom combine function optional
231
- }
232
- })
233
- async myTask() {
234
- // ...
235
- }
236
- ```
237
-
238
- #### Verification
239
-
240
- **Test Coverage**: `src/__tests__/adversarial/concurrent-task-failures.test.ts` validates concurrent task error handling behavior.
241
-
242
- ---
243
-
244
- ### ErrorMergeStrategy Implementation
245
-
246
- **File**: `/home/dustin/projects/groundswell/src/types/decorators.ts:25-32`
247
- **Exported**: Yes - `TaskOptions` interface and `ErrorMergeStrategy` type are exported from `src/index.ts`
248
- **Public API Element**: `TaskOptions.errorMergeStrategy` property
249
-
250
- #### Breaking Change Assessment
251
-
252
- **Classification**: **NON-BREAKING**
253
- **Severity**: N/A
254
-
255
- #### Public API Impact
256
-
257
- New optional property added to `TaskOptions` interface:
258
-
259
- ```typescript
260
- // src/types/decorators.ts:25-32
261
- export interface TaskOptions {
262
- /** Custom task name (defaults to method name) */
263
- name?: string;
264
- /** If true, run returned workflows concurrently */
265
- concurrent?: boolean;
266
- /** Strategy for merging errors from concurrent task execution */
267
- errorMergeStrategy?: ErrorMergeStrategy;
268
- }
269
- ```
270
-
271
- #### Reasoning
272
-
273
- **Justification: Additive Interface Change (New Optional Property)**
274
-
275
- Adding optional properties to interfaces is explicitly non-breaking per TypeScript and Semantic Versioning guidelines:
276
-
277
- 1. **Existing code without the property continues to work** - The property is optional
278
- 2. **Default behavior preserved** - Property defaults to `undefined`, which disables the feature
279
- 3. **No existing functionality affected** - This is purely additive
280
-
281
- From [TypeScript wiki on Breaking Changes](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes):
282
- > Adding new members to an interface is generally safe; existing code won't use them.
283
-
284
- #### Migration Required
285
-
286
- **No** - This is purely additive.
287
-
288
- #### Mitigation Strategy
289
-
290
- **Not applicable** - No migration needed.
291
-
292
- **New utility function exported**: `mergeWorkflowErrors()` is now available from `src/index.ts` for custom error merging logic.
293
-
294
- #### Verification
295
-
296
- **Test Coverage**: `src/__tests__/adversarial/error-merge-strategy.test.ts` validates error merge strategy functionality.
297
-
298
- ---
299
-
300
- ### trackTiming Default Documentation
301
-
302
- **File**: `/home/dustin/projects/groundswell/src/decorators/step.ts:94-101`
303
- **Related PRD File**: `/home/dustin/projects/groundswell/PRD.md`
304
- **Exported**: Yes - `Step` decorator is exported from `src/index.ts`
305
- **Public API Element**: `StepOptions.trackTiming` property
306
-
307
- #### Breaking Change Assessment
308
-
309
- **Classification**: **NON-BREAKING**
310
- **Severity**: N/A
311
-
312
- #### Public API Impact
313
-
314
- **Documentation-only change** - No code behavior modified.
315
-
316
- The implementation has always used:
317
- ```typescript
318
- // src/decorators/step.ts:94-101
319
- if (opts.trackTiming !== false) {
320
- wf.emitEvent({
321
- type: 'stepEnd',
322
- node: wf.node,
323
- step: stepName,
324
- duration,
325
- });
326
- }
327
- ```
328
-
329
- This means `trackTiming` defaults to `true` (enabled) unless explicitly set to `false`.
330
-
331
- The fix clarifies this in the PRD documentation.
332
-
333
- #### Reasoning
334
-
335
- **Justification: Documentation-Only Change (No Behavior Change)**
336
-
337
- 1. **No code was modified** - The `!== false` check has always been the implementation
338
- 2. **Runtime behavior unchanged** - Timing was always tracked by default
339
- 3. **PRD alignment only** - Documentation updated to match actual implementation
340
-
341
- From the PRD snapshot (`prd_snapshot.md`):
342
- > Issue 4: "PRD shows `trackTiming?: boolean` in options but doesn't explicitly state default value"
343
-
344
- This was a documentation gap, not a behavior change.
345
-
346
- #### Migration Required
347
-
348
- **No** - No behavior change.
349
-
350
- #### Mitigation Strategy
351
-
352
- **Not applicable** - No migration needed.
353
-
354
- #### Verification
355
-
356
- **Manual Verification**: Inspect `src/decorators/step.ts:94-101` - confirms `!== false` check was always present.
357
-
358
- ---
359
-
360
- ## P1.M3 - Minor Fixes Audit
361
-
362
- ### Console.error to Logger Replacement
363
-
364
- **File**: `/home/dustin/projects/groundswell/src/core/workflow.ts:426, 444`
365
- **Exported**: No - Internal implementation detail
366
- **Public API Element**: N/A (Internal implementation)
367
-
368
- #### Breaking Change Assessment
369
-
370
- **Classification**: **NON-BREAKING**
371
- **Severity**: N/A
372
-
373
- #### Public API Impact
374
-
375
- Internal error logging changed from:
376
- ```typescript
377
- // Before
378
- console.error('Observer onEvent error:', err);
379
- console.error('Observer onStateUpdated error:', err);
380
-
381
- // After
382
- this.logger.error('Observer onEvent error', { error: err, eventType: event.type });
383
- this.logger.error('Observer onStateUpdated error', { error: err, nodeId: this.node.id });
384
- ```
385
-
386
- #### Reasoning
387
-
388
- **Justification: Internal Implementation Detail Only**
389
-
390
- 1. **Not a public API change** - Observer error handling is internal to the `Workflow` class
391
- 2. **No public API surface affected** - `Workflow` class methods and signatures unchanged
392
- 3. **Observable behavior identical** - Observer errors are still handled and logged
393
- 4. **Improved logging** - Structured logging provides better debugging context
394
-
395
- Per Semantic Versioning:
396
- > PATCH version when you make backward-compatible bug fixes... Internal implementation changes are not breaking changes.
397
-
398
- #### Migration Required
399
-
400
- **No** - Internal implementation only.
401
-
402
- #### Mitigation Strategy
403
-
404
- **Not applicable** - No migration needed.
405
-
406
- **Users who previously saw console.error output** will now see structured log entries through the workflow logger, which provides better context and filtering capabilities.
407
-
408
- ---
409
-
410
- ### Tree Debugger Optimization
411
-
412
- **File**: `/home/dustin/projects/groundswell/src/debugger/tree-debugger.ts:65-84, 92-117`
413
- **Exported**: Yes - `WorkflowTreeDebugger` class is exported from `src/index.ts`
414
- **Public API Element**: `WorkflowTreeDebugger` internal implementation
415
-
416
- #### Breaking Change Assessment
417
-
418
- **Classification**: **NON-BREAKING**
419
- **Severity**: N/A
420
-
421
- #### Public API Impact
422
-
423
- Performance optimization changed internal node map update algorithm:
424
-
425
- ```typescript
426
- // src/debugger/tree-debugger.ts:65-84, 92-117
427
- // Before: O(n) full map rebuild on every change
428
- onTreeChanged(root: WorkflowNode): void {
429
- this.root = root;
430
- this.nodeMap.clear();
431
- this.buildNodeMap(root); // O(n) rebuild
432
- }
433
-
434
- // After: O(k) incremental update for subtree removal
435
- private removeSubtreeNodes(nodeId: string): void {
436
- // BFS traversal to collect descendant IDs - O(k) where k = subtree size
437
- const toRemove: string[] = [];
438
- const queue: WorkflowNode[] = [node];
439
- while (queue.length > 0) {
440
- const current = queue.shift()!;
441
- toRemove.push(current.id);
442
- queue.push(...current.children);
443
- }
444
- for (const id of toRemove) {
445
- this.nodeMap.delete(id); // Batch delete
446
- }
447
- }
448
- ```
449
-
450
- #### Reasoning
451
-
452
- **Justification: Performance Optimization Without API Changes**
453
-
454
- 1. **Public API unchanged** - All `WorkflowTreeDebugger` methods have identical signatures
455
- 2. **Observable behavior identical** - Same methods, same return values, same events
456
- 3. **Only performance characteristics improved** - O(n) → O(k) for subtree operations
457
- 4. **Internal implementation detail** - Node map management is private
458
-
459
- From the verification report:
460
- > Incremental Node Map Updates: Detach operations complete in <1ms (target met)
461
- > 10-node subtree attaches in 0.042ms
462
- > 101-node subtree detaches in 0.163ms
463
-
464
- #### Migration Required
465
-
466
- **No** - Performance-only improvement.
467
-
468
- #### Mitigation Strategy
469
-
470
- **Not applicable** - No migration needed.
471
-
472
- **Users benefit from improved performance** without any code changes.
473
-
474
- #### Verification
475
-
476
- **Test Coverage**: `src/__tests__/unit/tree-debugger-incremental.test.ts` validates incremental node map updates.
477
-
478
- **Performance Benchmarks**: `src/__tests__/adversarial/node-map-update-benchmarks.test.ts` confirms O(k) performance.
479
-
480
- ---
481
-
482
- ### Workflow Name Validation
483
-
484
- **File**: `/home/dustin/projects/groundswell/src/core/workflow.ts:98-107`
485
- **Exported**: Yes - `Workflow` class is exported from `src/index.ts`
486
- **Public API Element**: `Workflow` constructor
487
-
488
- #### Breaking Change Assessment
489
-
490
- **Classification**: **BREAKING**
491
- **Severity**: **LOW**
492
-
493
- #### Public API Impact
494
-
495
- The `Workflow` constructor now validates the `name` parameter:
496
-
497
- ```typescript
498
- // src/core/workflow.ts:98-107
499
- // Validate workflow name (after config is normalized)
500
- if (typeof this.config.name === 'string') {
501
- const trimmedName = this.config.name.trim();
502
- if (trimmedName.length === 0) {
503
- throw new Error('Workflow name cannot be empty or whitespace only');
504
- }
505
- if (this.config.name.length > 100) {
506
- throw new Error('Workflow name cannot exceed 100 characters');
507
- }
508
- }
509
- ```
510
-
511
- **Previously accepted inputs now rejected:**
512
- - Empty string: `new Workflow({ name: '' })`
513
- - Whitespace-only: `new Workflow({ name: ' ' })`
514
- - Names >100 chars: `new Workflow({ name: 'a'.repeat(101) })`
515
-
516
- #### Reasoning
517
-
518
- **Why This is Potentially Breaking:**
519
-
520
- 1. **Constructor now throws for previously accepted inputs** - Tightened validation
521
- 2. **Affects public API** - `Workflow` constructor signature unchanged but behavior modified
522
- 3. **May affect existing code** - If users rely on empty/invalid names
523
-
524
- **Why LOW Severity:**
525
-
526
- 1. **Fixing undefined behavior** - Empty names don't represent valid usage
527
- 2. **Likelihood: RARE** - Most users use meaningful names
528
- 3. **Simple migration** - Provide valid names
529
- 4. **Fail-fast principle** - Better to catch invalid configuration early
530
- 5. **Aligns with PRD intent** - Workflows should have meaningful names
531
-
532
- From the PRD snapshot (`prd_snapshot.md`):
533
- > Issue 8: "Empty string workflow names are accepted... Add validation to reject empty or whitespace-only names"
534
-
535
- This fixes undefined/invalid behavior rather than breaking valid usage.
536
-
537
- #### Migration Required
538
-
539
- **Yes** - Only for users using empty/whitespace/long workflow names.
540
-
541
- #### Mitigation Strategy
542
-
543
- **What Changed:**
544
- The `Workflow` constructor now validates the `name` parameter and throws a `TypeError` for:
545
- - Empty strings: `''`
546
- - Whitespace-only names: `' '`, `'\t\n'`
547
- - Names exceeding 100 characters
548
-
549
- **Before (Invalid Pattern Now Rejected):**
550
- ```typescript
551
- // These now throw Error
552
- const workflow1 = new Workflow({ name: '' });
553
- const workflow2 = new Workflow({ name: ' ' });
554
- const workflow3 = new Workflow({ name: 'a'.repeat(101) });
555
- ```
556
-
557
- **After (Correct Pattern):**
558
- ```typescript
559
- // Provide meaningful names
560
- const workflow1 = new Workflow({ name: 'MyWorkflow' });
561
- const workflow2 = new Workflow({ name: 'DataProcessor' });
562
- const workflow3 = new Workflow({ name: 'Analysis' });
563
- ```
564
-
565
- **Migration Steps:**
566
- 1. Search your codebase for `new Workflow(` patterns
567
- 2. Verify all workflow names are non-empty strings with meaningful content
568
- 3. Ensure no workflow names exceed 100 characters
569
- 4. Run your test suite to catch any validation failures
570
- 5. Update tests that use empty/invalid names to use valid names
571
-
572
- **Impact Assessment:**
573
- - **Severity**: LOW - Empty names don't represent valid usage
574
- - **Likelihood**: RARE - Most users use meaningful names
575
- - **Migration**: SIMPLE - Provide valid names
576
-
577
- #### Verification
578
-
579
- **Test Coverage**: `src/__tests__/unit/workflow.test.ts` validates name enforcement.
580
-
581
- **Manual Verification**:
582
- ```typescript
583
- // Test empty name
584
- new Workflow({ name: '' });
585
- // Throws: Error: Workflow name cannot be empty or whitespace only
586
-
587
- // Test whitespace name
588
- new Workflow({ name: ' ' });
589
- // Throws: Error: Workflow name cannot be empty or whitespace only
590
-
591
- // Test long name
592
- new Workflow({ name: 'a'.repeat(101) });
593
- // Throws: Error: Workflow name cannot exceed 100 characters
594
- ```
595
-
596
- ---
597
-
598
- ### isDescendantOf Public API
599
-
600
- **File**: `/home/dustin/projects/groundswell/src/core/workflow.ts:201-219`
601
- **Exported**: Yes - `Workflow` class is exported from `src/index.ts`
602
- **Public API Element**: `Workflow.isDescendantOf()` method
603
-
604
- #### Breaking Change Assessment
605
-
606
- **Classification**: **NON-BREAKING**
607
- **Severity**: N/A
608
-
609
- #### Public API Impact
610
-
611
- Previously private method `isDescendantOf()` is now public:
612
-
613
- ```typescript
614
- // src/core/workflow.ts:201-219
615
- public isDescendantOf(ancestor: Workflow): boolean {
616
- const visited = new Set<Workflow>();
617
- let current: Workflow | null = this.parent;
618
-
619
- while (current !== null) {
620
- if (visited.has(current)) {
621
- throw new Error('Circular parent-child relationship detected');
622
- }
623
- visited.add(current);
624
-
625
- if (current === ancestor) {
626
- return true;
627
- }
628
-
629
- current = current.parent;
630
- }
631
-
632
- return false;
633
- }
634
- ```
635
-
636
- #### Reasoning
637
-
638
- **Justification: Making Private Method Public (Additive Change)**
639
-
640
- 1. **Purely additive** - New public method, no existing functionality removed
641
- 2. **No breaking changes** - Existing code unaffected
642
- 3. **Enables new use cases** - Users can now check workflow hierarchy relationships
643
- 4. **Already existed** - Method was previously private, now publicly accessible
644
-
645
- Per TypeScript/Semver guidelines:
646
- > Making private methods public is additive (non-breaking) - it adds new capabilities without removing existing ones.
647
-
648
- From the PRD snapshot (`prd_snapshot.md`):
649
- > Issue 9: "Consider adding a public `isDescendantOf(other: Workflow): boolean` method for external use"
650
-
651
- This addresses the request for hierarchy validation API.
652
-
653
- #### Migration Required
654
-
655
- **No** - Purely additive.
656
-
657
- #### Mitigation Strategy
658
-
659
- **Not applicable** - No migration needed.
660
-
661
- **New capability available** - Users can now:
662
- - Check ancestry relationships: `child.isDescendantOf(ancestor)`
663
- - Validate before attaching: `if (!newChild.isDescendantOf(parent))`
664
- - Check topology membership: `workflow.isDescendantOf(productionRoot)`
665
-
666
- #### Verification
667
-
668
- **Test Coverage**: `src/__tests__/unit/workflow-isDescendantOf.test.ts` (13 tests) validates public API functionality.
669
-
670
- ---
671
-
672
- ## Summary of Findings
673
-
674
- ### Breaking Changes Inventory
675
-
676
- | Fix | Milestone | Classification | Severity | Migration Required |
677
- |-----|-----------|----------------|----------|-------------------|
678
- | **Workflow name validation** | P1.M3.T3 | BREAKING | **LOW** | Yes (rare cases) |
679
-
680
- ### Non-Breaking Changes Justification
681
-
682
- | Fix | Milestone | Classification | Justification |
683
- |-----|-----------|----------------|---------------|
684
- | **WorkflowLogger.child() signature** | P1.M1.T1 | NON-BREAKING | Function overloads maintain backward compatibility; all 361 tests pass |
685
- | **Promise.allSettled for concurrent tasks** | P1.M2.T1 | NON-BREAKING | Default behavior unchanged (throws first error); additive error merging |
686
- | **ErrorMergeStrategy implementation** | P1.M2.T2 | NON-BREAKING | Additive - new optional property on TaskOptions interface |
687
- | **trackTiming default documentation** | P1.M2.T3 | NON-BREAKING | Documentation-only change; no behavior modified |
688
- | **Console.error to logger replacement** | P1.M3.T1 | NON-BREAKING | Internal implementation detail only; public API unchanged |
689
- | **Tree debugger optimization** | P1.M3.T2 | NON-BREAKING | Performance-only improvement; no API changes |
690
- | **isDescendantOf public API** | P1.M3.T4 | NON-BREAKING | Additive - private method made public |
691
-
692
- ---
693
-
694
- ## Version Recommendation
695
-
696
- ### Semantic Versioning Analysis
697
-
698
- #### Breaking Changes Found: 1
699
-
700
- **Breaking Change: Workflow name validation**
701
- - **Severity**: LOW
702
- - **Impact**: Constructor rejects empty/whitespace/long names
703
- - **Migration**: Simple (provide valid names)
704
- - **Likelihood**: Rare (most users use meaningful names)
705
-
706
- ### Version Bump Recommendation: **PATCH (0.0.3 → 0.0.4)**
707
-
708
- **Reasoning:**
709
-
710
- According to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html):
711
- - **MAJOR (0.0.3 → 0.1.0)**: Incompatible API changes
712
- - **MINOR (0.0.3 → 0.0.4)**: Backward-compatible functionality
713
- - **PATCH (0.0.3 → 0.0.4)**: Backward-compatible bug fixes
714
-
715
- **Decision: PATCH version bump**
716
-
717
- While there is technically one breaking change (workflow name validation), the recommendation is for a **PATCH bump** rather than MAJOR for the following reasons:
718
-
719
- 1. **Version 0.x.x special rules**: According to semver, versions < 1.0.0 may have breaking changes. The project is at version 0.0.3, indicating pre-1.0 stability.
720
-
721
- 2. **LOW severity**: The breaking change fixes undefined/invalid behavior (empty names) rather than breaking valid usage patterns.
722
-
723
- 3. **Minimal user impact**: Empty/whitespace workflow names don't represent meaningful usage - they indicate buggy code or incomplete implementation.
724
-
725
- 4. **Fail-fast improvement**: Rejecting invalid names early is a quality improvement that prevents subtle bugs.
726
-
727
- 5. **Simple migration**: Users affected (if any)只需提供有意义的名称 - a straightforward fix.
728
-
729
- 6. **Clear error messages**: The validation throws descriptive errors guiding users to the fix.
730
-
731
- **Alternative Consideration: MINOR bump (0.0.3 → 0.1.0)**
732
-
733
- A MINOR bump could be justified because:
734
- - New public APIs added (`isDescendantOf`, `mergeWorkflowErrors`)
735
- - New decorator options (`errorMergeStrategy`)
736
-
737
- However, since the primary intent is bug fixes rather than new features, **PATCH** is more appropriate.
738
-
739
- ### Final Recommendation
740
-
741
- **Release as version 0.0.4** with the following CHANGELOG entry:
742
-
743
- ```markdown
744
- ## [0.0.4] - 2026-01-12
745
-
746
- ### Added
747
-
748
- - Public `isDescendantOf()` method to Workflow class for hierarchy validation
749
- - Public `mergeWorkflowErrors()` utility function for concurrent error aggregation
750
- - `ErrorMergeStrategy` option for @Task decorator concurrent error handling
751
-
752
- ### Fixed
753
-
754
- - WorkflowLogger.child() signature updated to accept Partial<LogEntry> (backward compatible)
755
- - Concurrent task execution now uses Promise.allSettled() for comprehensive error collection
756
- - Observer errors now logged via workflow logger instead of console.error
757
- - Tree debugger optimized with incremental node map updates
758
- - Workflow constructor now validates name parameter (rejects empty/whitespace/long names)
759
-
760
- ### Changed
761
-
762
- - Documentation clarified: @Step trackTiming defaults to true
763
-
764
- ### Migration Notes
765
-
766
- If you use empty or whitespace-only workflow names, update to meaningful names:
767
- ```typescript
768
- // Before (now throws)
769
- new Workflow({ name: '' });
770
-
771
- // After
772
- new Workflow({ name: 'MyWorkflow' });
773
- ```
774
- ```
775
-
776
- ---
777
-
778
- ## Migration Guide
779
-
780
- ### Breaking Change: Workflow Name Validation
781
-
782
- #### What Changed
783
-
784
- The `Workflow` constructor now validates the `name` parameter and throws an `Error` for:
785
- - Empty strings: `''`
786
- - Whitespace-only names: `' '`, `'\t\n'`, etc.
787
- - Names exceeding 100 characters
788
-
789
- Previously, these invalid names were silently accepted, leading to confusing debug output and tree visualizations.
790
-
791
- #### Before (Invalid Pattern - Now Rejected)
792
-
793
- ```typescript
794
- // These now throw Error
795
- const workflow1 = new Workflow({ name: '' });
796
- const workflow2 = new Workflow({ name: ' ' });
797
- const workflow3 = new Workflow({ name: '\t\n' });
798
- const workflow4 = new Workflow({ name: 'a'.repeat(101) });
799
- ```
800
-
801
- **Error Messages:**
802
- - `Error: Workflow name cannot be empty or whitespace only`
803
- - `Error: Workflow name cannot exceed 100 characters`
804
-
805
- #### After (Correct Pattern)
806
-
807
- ```typescript
808
- // Provide meaningful names
809
- const workflow1 = new Workflow({ name: 'DataProcessor' });
810
- const workflow2 = new Workflow({ name: 'AnalysisWorkflow' });
811
- const workflow3 = new Workflow({ name: 'ETLPipeline' });
812
- const workflow4 = new Workflow({ name: 'ReportGenerator' });
813
- ```
814
-
815
- #### Migration Steps
816
-
817
- 1. **Search for workflow creation patterns**:
818
- ```bash
819
- # Search your codebase
820
- grep -r "new Workflow" --include="*.ts" --include="*.js"
821
- ```
822
-
823
- 2. **Identify invalid names**:
824
- - Empty strings: `name: ''`
825
- - Whitespace-only: `name: ' '`
826
- - Overly long names: > 100 characters
827
-
828
- 3. **Replace with meaningful names**:
829
- ```typescript
830
- // Replace empty names with descriptive names
831
- new Workflow({ name: 'MyWorkflow' })
832
-
833
- // Replace whitespace with actual content
834
- new Workflow({ name: 'DataProcessor' })
835
-
836
- // Shorten long names to <= 100 characters
837
- new Workflow({ name: 'ShortDescriptiveName' })
838
- ```
839
-
840
- 4. **Update test fixtures**:
841
- ```typescript
842
- // In tests, use meaningful fixture names
843
- const testWorkflow = new Workflow({ name: 'TestWorkflow' });
844
- ```
845
-
846
- 5. **Run your test suite**:
847
- ```bash
848
- npm test
849
- # Fix any validation failures that appear
850
- ```
851
-
852
- 6. **Verify all workflows have valid names**:
853
- ```bash
854
- # Search for any remaining empty/whitespace names
855
- grep -r 'name:.*""\|name:.*[[:space:]]\{1,\}"' --include="*.ts" --include="*.js"
856
- ```
857
-
858
- #### Impact Assessment
859
-
860
- | Factor | Assessment |
861
- |--------|------------|
862
- | **Severity** | LOW - Empty names don't represent valid usage |
863
- | **Likelihood** | RARE - Most users use meaningful names |
864
- | **Migration Effort** | SIMPLE - Provide valid names |
865
- | **Rollback Required** | NO - This is a quality improvement |
866
- | **Users Affected** | Minimal - Only those with invalid names |
867
-
868
- #### Common Patterns
869
-
870
- **Pattern 1: Test Workflows**
871
- ```typescript
872
- // Before
873
- const wf = new Workflow({ name: '' });
874
-
875
- // After
876
- const wf = new Workflow({ name: 'TestWorkflow' });
877
- ```
878
-
879
- **Pattern 2: Dynamically Generated Names**
880
- ```typescript
881
- // Before - May generate empty names
882
- const wf = new Workflow({ name: userInput || '' });
883
-
884
- // After - Provide default
885
- const wf = new Workflow({ name: userInput || 'DefaultWorkflow' });
886
- ```
887
-
888
- **Pattern 3: Whitespace Names**
889
- ```typescript
890
- // Before - Accidental whitespace
891
- const wf = new Workflow({ name: ' ' });
892
-
893
- // After - Trim or provide content
894
- const wf = new Workflow({ name: workflowName.trim() });
895
- ```
896
-
897
- #### Testing Your Migration
898
-
899
- 1. **Unit Tests**: Ensure all workflow creation tests use valid names
900
- 2. **Integration Tests**: Verify workflow trees build without validation errors
901
- 3. **Manual Testing**: Create workflows with various valid names
902
- 4. **Edge Cases**: Test names at 100-character boundary
903
-
904
- #### Example Migration Script
905
-
906
- If you have many workflows to update, use this search pattern:
907
-
908
- ```bash
909
- # Find all workflow creations with empty names
910
- grep -rn 'new Workflow.*name.*""' src/
911
-
912
- # Find all workflow creations with whitespace names
913
- grep -rn 'new Workflow.*name.*"[[:space:]]"' src/
914
- ```
915
-
916
- ---
917
-
918
- ## References
919
-
920
- ### Implementation Files
921
-
922
- | Bug Fix | Implementation File | Lines |
923
- |---------|---------------------|-------|
924
- | WorkflowLogger.child() signature | `/home/dustin/projects/groundswell/src/core/logger.ts` | 98-111 |
925
- | Promise.allSettled for concurrent tasks | `/home/dustin/projects/groundswell/src/decorators/task.ts` | 112-142 |
926
- | ErrorMergeStrategy (type) | `/home/dustin/projects/groundswell/src/types/decorators.ts` | 25-32 |
927
- | ErrorMergeStrategy (implementation) | `/home/dustin/projects/groundswell/src/utils/workflow-error-utils.ts` | 23-56 |
928
- | trackTiming default | `/home/dustin/projects/groundswell/src/decorators/step.ts` | 94-101 |
929
- | Console.error replacement | `/home/dustin/projects/groundswell/src/core/workflow.ts` | 426, 444 |
930
- | Tree debugger optimization | `/home/dustin/projects/groundswell/src/debugger/tree-debugger.ts` | 65-84, 92-117 |
931
- | Workflow name validation | `/home/dustin/projects/groundswell/src/core/workflow.ts` | 98-107 |
932
- | isDescendantOf public API | `/home/dustin/projects/groundswell/src/core/workflow.ts` | 201-219 |
933
-
934
- ### Verification Documents
935
-
936
- | Document | Location | Purpose |
937
- |----------|----------|---------|
938
- | child() Verification Report | `/home/dustin/projects/groundswell/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md` | Proves backward compatibility of child() signature change |
939
- | Test Execution Report | `/home/dustin/projects/groundswell/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md` | Full test suite validation (479 tests, 100% pass rate) |
940
- | PRD Snapshot | `/home/dustin/projects/groundswell/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md` | Original bug descriptions and PRD violations |
941
- | CHANGELOG | `/home/dustin/projects/groundswell/CHANGELOG.md` | Project changelog with migration patterns |
942
-
943
- ### External Standards
944
-
945
- | Standard | URL | Purpose |
946
- |----------|-----|---------|
947
- | Semantic Versioning 2.0.0 | https://semver.org/spec/v2.0.0.html | Definitive specification for version bumping and breaking changes |
948
- | TypeScript Breaking Changes | https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes | TypeScript-specific breaking change patterns |
949
-
950
- ### Test Files
951
-
952
- | Test File | Purpose |
953
- |-----------|---------|
954
- | `src/__tests__/unit/logger.test.ts` | Validates WorkflowLogger.child() signature compatibility (17 tests) |
955
- | `src/__tests__/adversarial/concurrent-task-failures.test.ts` | Validates Promise.allSettled behavior (10 tests) |
956
- | `src/__tests__/adversarial/error-merge-strategy.test.ts` | Validates ErrorMergeStrategy functionality (17 tests) |
957
- | `src/__tests__/unit/workflow.test.ts` | Validates workflow name validation (28 tests) |
958
- | `src/__tests__/unit/workflow-isDescendantOf.test.ts` | Validates public isDescendantOf API (13 tests) |
959
- | `src/__tests__/unit/tree-debugger-incremental.test.ts` | Validates tree debugger optimization (6 tests) |
960
- | `src/__tests__/integration/observer-logging.test.ts` | Validates observer error logging (20 tests) |
961
-
962
- ---
963
-
964
- ## Appendix A: Public API Surface Inventory
965
-
966
- The following exports from `/home/dustin/projects/groundswell/src/index.ts` constitute the complete public API surface:
967
-
968
- ### Core Classes
969
- - `Workflow` - Base workflow class
970
- - `WorkflowLogger` - Structured logging with parent-child relationships
971
- - `Agent` - LLM agent wrapper
972
- - `Prompt` - Prompt template handler
973
- - `MCPHandler` - Model Context Protocol handler
974
-
975
- ### Decorators
976
- - `@Step` - Method decorator for step execution
977
- - `@Task` - Method decorator for workflow spawning
978
- - `@ObservedState` - Property decorator for state observation
979
-
980
- ### Debugger
981
- - `WorkflowTreeDebugger` - Real-time tree visualization
982
-
983
- ### Utilities
984
- - `Observable` - Observable pattern implementation
985
- - `generateId()` - Unique ID generator
986
- - `mergeWorkflowErrors()` - Concurrent error aggregation utility
987
-
988
- ### Factory Functions
989
- - `createWorkflow()` - Workflow factory
990
- - `createAgent()` - Agent factory
991
- - `createPrompt()` - Prompt factory
992
- - `quickWorkflow()` - Quick workflow creation
993
- - `quickAgent()` - Quick agent creation
994
-
995
- ### Types (All from `types/index.js`)
996
- - `WorkflowStatus`, `WorkflowNode`, `LogLevel`, `LogEntry`
997
- - `SerializedWorkflowState`, `StateFieldMetadata`
998
- - `WorkflowError`, `WorkflowEvent`, `WorkflowObserver`
999
- - `StepOptions`, `TaskOptions`, `ErrorMergeStrategy`
1000
- - `Tool`, `ToolResult`, `MCPServer`, `Skill`, `HookHandler`
1001
- - `AgentConfig`, `PromptConfig`, `PromptOverrides`
1002
- - `WorkflowContext`, `WorkflowConfig`, `WorkflowResult`
1003
- - `EventTreeHandle`, `EventNode`, `EventMetrics`
1004
- - `AgentLike`, `PromptLike`
1005
- - `ReflectionAPI`, `ReflectionConfig`, `ReflectionContext`, `ReflectionResult`
1006
-
1007
- ---
1008
-
1009
- **Report Completed**: 2026-01-12
1010
- **PRP Status**: Complete
1011
- **Next Step**: Proceed to P1.M4.T3.S2 - Backward Compatibility Testing