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,159 +0,0 @@
1
- # Vitest Testing Best Practices Research
2
-
3
- ## Official Documentation URLs
4
-
5
- - **Main Documentation**: https://vitest.dev
6
- - **API Reference**: https://vitest.dev/api/
7
- - **Mocking**: https://vitest.dev/guide/mocking.html
8
- - **Mock Functions**: https://vitest.dev/api/mock.html
9
- - **test.each()**: https://vitest.dev/api/test.html#test-each
10
- - **expectTypeOf()**: https://vitest.dev/api/expect.html#expecttypeof
11
-
12
- ## Parameterized Tests with test.each()
13
-
14
- ### Array-Based Pattern
15
- ```typescript
16
- test.each([
17
- [1, 2, 3],
18
- [2, 3, 5],
19
- [10, 20, 30],
20
- ])('add(%i, %i) = %i', (a, b, expected) => {
21
- expect(add(a, b)).toBe(expected);
22
- });
23
- ```
24
-
25
- ### Object-Based Pattern
26
- ```typescript
27
- test.each([
28
- { level: 'info', method: 'info', message: 'info message' },
29
- { level: 'warn', method: 'warn', message: 'warn message' },
30
- { level: 'error', method: 'error', message: 'error message' },
31
- ])('should log $level correctly', ({ level, method, message }) => {
32
- const consoleSpy = vi.spyOn(console, level).mockImplementation(() => {});
33
- logger[method](message);
34
- expect(consoleSpy).toHaveBeenCalledWith(message);
35
- consoleSpy.mockRestore();
36
- });
37
- ```
38
-
39
- ### Template String Pattern
40
- ```typescript
41
- test.each`
42
- a | b | expected
43
- ${1} | ${2} | ${3}
44
- ${2} | ${3} | ${5}
45
- `('returns $expected when adding $a and $b', ({ a, b, expected }) => {
46
- expect(add(a, b)).toBe(expected);
47
- });
48
- ```
49
-
50
- ## Mock Patterns
51
-
52
- ### vi.fn() for Mock Functions
53
- ```typescript
54
- const mockFn = vi.fn();
55
- const mockTransport = { write: vi.fn() };
56
- ```
57
-
58
- ### vi.spyOn() for Spying
59
- ```typescript
60
- const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
61
- // ... test code
62
- consoleSpy.mockRestore();
63
- ```
64
-
65
- ### beforeEach/afterEach for Setup
66
- ```typescript
67
- describe('Logger tests', () => {
68
- let consoleLogSpy: ReturnType<typeof vi.spyOn>;
69
-
70
- beforeEach(() => {
71
- consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
72
- });
73
-
74
- afterEach(() => {
75
- consoleLogSpy.mockRestore();
76
- });
77
-
78
- it('test case', () => {
79
- // consoleLogSpy is already set up
80
- });
81
- });
82
- ```
83
-
84
- ## Testing Hierarchical Relationships
85
-
86
- ```typescript
87
- describe('HierarchicalLogger', () => {
88
- it('should create child logger with parent reference', () => {
89
- const root = new HierarchicalLogger('root');
90
- const child = new HierarchicalLogger('child', root);
91
-
92
- expect(child.getParent()).toBe(root);
93
- });
94
-
95
- it('should calculate full path for nested children', () => {
96
- const root = new HierarchicalLogger('root');
97
- const child = new HierarchicalLogger('child', root);
98
- const grandchild = new HierarchicalLogger('grandchild', child);
99
-
100
- expect(grandchild.getFullPath()).toBe('root.child.grandchild');
101
- });
102
- });
103
- ```
104
-
105
- ## Testing Backward Compatibility
106
-
107
- ```typescript
108
- describe('Backward compatibility', () => {
109
- it('should support old method signature', () => {
110
- const logger = new Logger();
111
- expect(() => logger.log('message')).not.toThrow();
112
- });
113
-
114
- it('should support new method signature', () => {
115
- const logger = new Logger();
116
- expect(() => logger.log('info', 'message')).not.toThrow();
117
- });
118
-
119
- it('should maintain old behavior with signature change', () => {
120
- const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
121
- const logger = new Logger();
122
-
123
- logger.log('message');
124
-
125
- expect(consoleSpy).toHaveBeenCalledWith('message');
126
- consoleSpy.mockRestore();
127
- });
128
- });
129
- ```
130
-
131
- ## Testing Type Safety
132
-
133
- ```typescript
134
- import { expectTypeOf } from 'vitest';
135
-
136
- describe('Type testing', () => {
137
- it('should have correct types', () => {
138
- const logger = new Logger();
139
-
140
- expectTypeOf(logger.log).toBeFunction();
141
- expectTypeOf(logger.log).parameters.toEqualTypeOf<[string]>();
142
- expectTypeOf(logger.log).returns.toBeVoid();
143
- });
144
-
145
- it('should support interface compatibility', () => {
146
- expectTypeOf<Logger>().toMatchTypeOf<ILogger>();
147
- });
148
- });
149
- ```
150
-
151
- ## Best Practices
152
-
153
- 1. **Group related tests with `describe`**
154
- 2. **Use descriptive test names** that explain what is being tested
155
- 3. **Follow AAA pattern** (Arrange, Act, Assert)
156
- 4. **Keep tests independent and isolated**
157
- 5. **Always restore mocks** in `afterEach`
158
- 6. **Prefer spies over mocks** when possible
159
- 7. **Mock at the boundary** of your code
@@ -1,549 +0,0 @@
1
- # Product Requirement Prompt (PRP)
2
- ## P1.M1.T1.S4: Verify All Existing child() Calls Still Work
3
-
4
- ---
5
-
6
- ## Goal
7
-
8
- **Feature Goal**: Verify complete backward compatibility of the WorkflowLogger.child() signature change from `child(parentLogId: string)` to `child(meta: Partial<LogEntry>)` while ensuring all 361 existing tests pass without modification.
9
-
10
- **Deliverable**: A verification report documenting:
11
- - All child() usage locations and their compatibility status
12
- - Full test suite execution results (all 361 tests passing)
13
- - Any edge cases discovered and how they were handled
14
- - Confirmation that no production code changes are required
15
-
16
- **Success Definition**:
17
- - All existing child() call sites verified as compatible
18
- - Full test suite passes with zero failures (`npm test` exit code 0)
19
- - No breaking changes detected in any usage pattern
20
- - Edge cases documented with resolution strategy
21
-
22
- ---
23
-
24
- ## User Persona
25
-
26
- **Target User**: Development team maintaining the hierarchical workflow engine
27
-
28
- **Use Case**: Ensure that the child() signature enhancement (S2) maintains full backward compatibility with existing code and tests
29
-
30
- **User Journey**:
31
- 1. Execute the verification process using this PRP
32
- 2. Run the full test suite to confirm no regressions
33
- 3. Review the verification report documenting all usage patterns
34
- 4. Proceed with confidence that the signature change is safe
35
-
36
- **Pain Points Addressed**:
37
- - Fear of breaking existing functionality when changing method signatures
38
- - Uncertainty about which call sites might be affected
39
- - Need for systematic verification rather than ad-hoc testing
40
-
41
- ---
42
-
43
- ## Why
44
-
45
- - **Business Value**: Ensures production stability by validating that the child() signature enhancement doesn't break existing workflows
46
- - **Integration**: Completes the P1.M1.T1 bug fix sequence by verifying S2 implementation works correctly
47
- - **Problems Solved**: Provides confidence that the Partial<LogEntry> signature is backward compatible and production-ready
48
-
49
- ---
50
-
51
- ## What
52
-
53
- Verify that all existing child() method calls continue to work correctly after the signature change from `child(parentLogId: string)` to `child(meta: Partial<LogEntry>)` with backward-compatible overloads.
54
-
55
- ### Success Criteria
56
-
57
- - [ ] All 361 existing tests pass without modification
58
- - [ ] All child() usage locations documented and verified compatible
59
- - [ ] No breaking changes detected in any call site
60
- - [ ] Verification report created documenting findings
61
-
62
- ---
63
-
64
- ## All Needed Context
65
-
66
- ### Context Completeness Check
67
-
68
- **No Prior Knowledge Test**: If someone knew nothing about this codebase, they would need:
69
- - The exact test command to run
70
- - The file pattern for child() usage locations
71
- - The expected test count (361 tests)
72
- - The signature change details
73
- - What constitutes success vs failure
74
-
75
- This PRP provides all of the above.
76
-
77
- ### Documentation & References
78
-
79
- ```yaml
80
- # MUST READ - Implementation context from previous subtasks
81
-
82
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md
83
- why: Contains the original PRP for updating child() signature
84
- section: Implementation Blueprint - shows the exact signature change pattern
85
-
86
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md
87
- why: Contains the test implementation PRP
88
- section: All Needed Context - shows test patterns and validation commands
89
-
90
- - file: src/core/logger.ts
91
- why: The actual child() implementation with overloads
92
- pattern: Look for the child() method with function overloads (lines ~84-95)
93
- gotcha: Implementation uses `typeof input === 'string'` type guard
94
-
95
- - file: src/types/logging.ts
96
- why: LogEntry interface definition
97
- pattern: Contains LogEntry interface with parentLogId field
98
- gotcha: Only parentLogId field from Partial<LogEntry> is used in child()
99
-
100
- - file: package.json
101
- why: Test commands and dependencies
102
- section: scripts section - contains "test": "vitest run" command
103
-
104
- - file: vitest.config.ts
105
- why: Test framework configuration
106
- pattern: Test files located in src/__tests__/**/*.test.ts
107
-
108
- # EXISTING USAGE LOCATIONS - Known child() call sites
109
-
110
- - file: src/__tests__/unit/logger.test.ts
111
- why: Primary test file with comprehensive child() usage patterns
112
- pattern: 16 different child() call patterns including Partial<LogEntry> and string
113
- gotcha: Empty string '' results in undefined parentLogId
114
-
115
- - file: src/__tests__/adversarial/deep-analysis.test.ts
116
- why: Edge case testing for empty string
117
- pattern: Line 61 - `this.logger.child('')`
118
- gotcha: Tests empty string handling
119
-
120
- - file: src/__tests__/adversarial/edge-case.test.ts
121
- why: Backward compatibility verification
122
- pattern: Line 96 - `this.logger.child('parent-id-123')`
123
- gotcha: Tests legacy string parameter support
124
-
125
- # CRITICAL RESEARCH FINDINGS
126
-
127
- - docfile: plan/001_d3bb02af4886/architecture/logger_child_signature_analysis.md
128
- why: Detailed analysis of the signature mismatch issue
129
- section: Complete document
130
- critical: "Current implementation uses child(parentLogId: string) but PRD requires child(meta: Partial<LogEntry>)"
131
-
132
- - docfile: plan/001_d3bb02af4886/architecture/codebase_structure.md
133
- why: Overall codebase architecture and WorkflowLogger design
134
- section: Section 7 - WorkflowLogger Architecture
135
- critical: "Shows dual tree architecture and observer patterns"
136
- ```
137
-
138
- ### Current Codebase Tree
139
-
140
- ```bash
141
- src/
142
- ├── core/
143
- │ └── logger.ts # WorkflowLogger class with child() method
144
- ├── types/
145
- │ └── logging.ts # LogEntry interface definition
146
- └── __tests__/
147
- ├── unit/
148
- │ └── logger.test.ts # 16 child() usage patterns (new tests from S3)
149
- ├── adversarial/
150
- │ ├── deep-analysis.test.ts # 1 child() usage (empty string edge case)
151
- │ └── edge-case.test.ts # 1 child() usage (backward compatibility)
152
- ├── integration/ # Integration tests (no direct child() usage)
153
- └── helpers/ # Test utilities
154
- ```
155
-
156
- ### Known child() Usage Patterns
157
-
158
- ```typescript
159
- // Pattern 1: Partial<LogEntry> with parentLogId (NEW - S3 tests)
160
- logger.child({ parentLogId: 'parent-123' })
161
-
162
- // Pattern 2: Partial<LogEntry> with both id and parentLogId (NEW - S3 tests)
163
- logger.child({ id: 'custom-id', parentLogId: 'correct-parent' })
164
-
165
- // Pattern 3: Partial<LogEntry> with only id field (NEW - S3 tests)
166
- logger.child({ id: 'custom-id' }) // parentLogId will be undefined
167
-
168
- // Pattern 4: Empty Partial<LogEntry> (NEW - S3 tests)
169
- logger.child({}) // parentLogId will be undefined
170
-
171
- // Pattern 5: String parameter - backward compatible (EXISTING)
172
- logger.child('parent-id-123')
173
-
174
- // Pattern 6: Empty string (EXISTING)
175
- logger.child('') // parentLogId will be undefined (empty string is falsy)
176
-
177
- // Pattern 7: Variable string (EXISTING)
178
- logger.child(parentLogId) // parentLogId is string variable
179
-
180
- // Pattern 8: Variable Partial<LogEntry> (NEW - S3 tests)
181
- logger.child({ parentLogId }) // parentLogId from variable
182
- ```
183
-
184
- ### Known Gotchas & Implementation Quirks
185
-
186
- ```typescript
187
- // CRITICAL: Empty string behavior
188
- // logger.child('') results in undefined parentLogId (empty string is falsy)
189
- // This is INTENTIONAL - empty string means "no parent"
190
-
191
- // CRITICAL: Only parentLogId field is used from Partial<LogEntry>
192
- // logger.child({ id: 'custom-id' }) does NOT use the id field
193
- // The id field is completely ignored by the implementation
194
-
195
- // CRITICAL: Type guard pattern in implementation
196
- // The implementation uses: typeof input === 'string' ? input : input.parentLogId
197
- // This means { parentLogId: undefined } results in undefined parentLogId
198
-
199
- // CRITICAL: No production code uses child()
200
- // Only test files call child() - reducing risk of breaking changes
201
- ```
202
-
203
- ---
204
-
205
- ## Implementation Blueprint
206
-
207
- ### Data Models and Structure
208
-
209
- This task is **verification only** - no data model changes are required.
210
-
211
- The relevant data structure is the `LogEntry` interface:
212
-
213
- ```typescript
214
- // src/types/logging.ts
215
- export interface LogEntry {
216
- id: string; // Unique identifier for the log entry
217
- workflowId: string; // Associated workflow ID
218
- timestamp: number; // Unix timestamp
219
- level: LogLevel; // debug, info, warn, error
220
- message: string; // Log message
221
- data?: unknown; // Optional payload data
222
- parentLogId?: string; // Parent log entry ID (ONLY field used by child())
223
- }
224
- ```
225
-
226
- ### Implementation Tasks (ordered by dependencies)
227
-
228
- ```yaml
229
- Task 1: LOCATE and DOCUMENT all child() usage locations
230
- - EXECUTE: grep -rn "\.child(" src/__tests__/ --include="*.ts"
231
- - DOCUMENT: Each file, line number, and usage pattern
232
- - CATEGORIZE: As "existing (pre-S2)" or "new (S3 tests)"
233
- - OUTPUT: Create usage_inventory.md with complete list
234
- - EXPECTED: 18 total usages (2 existing + 16 new from S3)
235
-
236
- Task 2: VERIFY TypeScript compilation succeeds
237
- - EXECUTE: npm run build OR tsc --noEmit (if available)
238
- - VALIDATE: No type errors related to child() calls
239
- - CHECK: Function overload resolution works correctly
240
- - OUTPUT: Record compilation success/failure
241
- - EXPECTED: Zero compilation errors
242
-
243
- Task 3: RUN the full test suite
244
- - EXECUTE: npm test
245
- - CAPTURE: Full test output including pass/fail counts
246
- - VALIDATE: All 361 tests pass
247
- - RECORD: Test execution time
248
- - OUTPUT: Save test results to test_results.txt
249
- - EXPECTED: 361 passing, 0 failing
250
-
251
- Task 4: VERIFY existing test files pass individually
252
- - EXECUTE: npx vitest run src/__tests__/adversarial/deep-analysis.test.ts
253
- - EXECUTE: npx vitest run src/__tests__/adversarial/edge-case.test.ts
254
- - VALIDATE: Both existing test files pass
255
- - CONFIRM: No test modifications were required
256
- - OUTPUT: Record individual test results
257
- - EXPECTED: All tests pass, no code changes needed
258
-
259
- Task 5: VERIFY new S3 tests demonstrate new functionality
260
- - EXECUTE: npx vitest run src/__tests__/unit/logger.test.ts
261
- - VALIDATE: All 16 new usage patterns work correctly
262
- - CONFIRM: Partial<LogEntry> signature works as expected
263
- - OUTPUT: Record new test functionality verification
264
- - EXPECTED: All S3 tests pass
265
-
266
- Task 6: DOCUMENT edge cases and their handling
267
- - ANALYZE: Empty string behavior (logger.child(''))
268
- - ANALYZE: Empty object behavior (logger.child({}))
269
- - ANALYZE: id field ignoring (logger.child({ id: 'x' }))
270
- - DOCUMENT: Each edge case and its resolution
271
- - OUTPUT: Create edge_case_analysis.md
272
- - INCLUDE: Code examples showing expected vs actual behavior
273
-
274
- Task 7: CREATE final verification report
275
- - COMPILE: Results from Tasks 1-6
276
- - SUMMARIZE: All usage patterns verified as compatible
277
- - CONFIRM: Backward compatibility maintained
278
- - DOCUMENT: Any unexpected findings
279
- - OUTPUT: VERIFICATION_REPORT.md with:
280
- * Executive summary
281
- * Detailed findings by file
282
- * Test results summary
283
- * Edge case analysis
284
- * Conclusion and recommendations
285
- ```
286
-
287
- ### Implementation Patterns & Key Details
288
-
289
- ```bash
290
- # PATTERN: Running individual test files
291
- npx vitest run <path-to-test-file>
292
-
293
- # PATTERN: Running all tests
294
- npm test
295
- # OR
296
- npx vitest run
297
-
298
- # PATTERN: Checking TypeScript compilation
299
- npm run build
300
- # OR if build script doesn't exist
301
- npx tsc --noEmit
302
-
303
- # PATTERN: Searching for usage patterns
304
- grep -rn "\.child(" src/ --include="*.ts"
305
- # OR with ripgrep (if available)
306
- rg "\.child\(" src/ -t ts
307
-
308
- # CRITICAL: Test count expectations
309
- # - 361 total tests (not 344 as originally stated)
310
- # - 135 test suites (describe blocks)
311
- # - 28 test files
312
- # - Expect all tests to pass with zero failures
313
- ```
314
-
315
- ### Integration Points
316
-
317
- ```yaml
318
- NO NEW INTEGRATIONS REQUIRED
319
- - This is a verification task only
320
- - No code changes needed
321
- - No configuration changes needed
322
- - No migration needed
323
-
324
- EXISTING INTEGRATION POINTS TO VERIFY
325
- - WorkflowLogger: src/core/logger.ts - child() method
326
- - LogEntry type: src/types/logging.ts - Partial<LogEntry> signature
327
- - Test framework: vitest.config.ts - test execution
328
- - Build system: package.json - build/test scripts
329
- ```
330
-
331
- ---
332
-
333
- ## Validation Loop
334
-
335
- ### Level 1: Syntax & Type Verification (Immediate Feedback)
336
-
337
- ```bash
338
- # Verify TypeScript compilation succeeds
339
- npm run build
340
-
341
- # Expected output:
342
- # ✓ Built successfully
343
- # or similar success message
344
-
345
- # If build script doesn't exist, use:
346
- npx tsc --noEmit
347
-
348
- # Expected: Zero type errors
349
- # If errors exist, READ output and identify if child()-related
350
-
351
- # Alternative: Just run tests (tests include type checking)
352
- npm test
353
- # Tests will fail if there are type errors
354
- ```
355
-
356
- ### Level 2: Individual Usage Verification (Component Validation)
357
-
358
- ```bash
359
- # Verify each existing usage location individually
360
-
361
- # 1. Deep analysis test (existing - pre-S2)
362
- npx vitest run src/__tests__/adversarial/deep-analysis.test.ts
363
- # Expected: All tests pass, especially line 61 test with empty string
364
-
365
- # 2. Edge case test (existing - pre-S2)
366
- npx vitest run src/__tests__/adversarial/edge-case.test.ts
367
- # Expected: All tests pass, especially line 96 test with string parameter
368
-
369
- # 3. New logger tests (S3 additions)
370
- npx vitest run src/__tests__/unit/logger.test.ts
371
- # Expected: All 16 new test patterns pass
372
-
373
- # If any test fails:
374
- # 1. Read the error message carefully
375
- # 2. Identify if it's related to child() signature
376
- # 3. Check if the failure is in existing or new tests
377
- # 4. Document the issue in edge_case_analysis.md
378
- ```
379
-
380
- ### Level 3: Full Test Suite (System Validation)
381
-
382
- ```bash
383
- # Run the complete test suite
384
- npm test
385
-
386
- # Expected output format:
387
- # ✓ src/__tests__/unit/logger.test.ts (16)
388
- # ✓ src/__tests__/adversarial/deep-analysis.test.ts (X)
389
- # ✓ src/__tests__/adversarial/edge-case.test.ts (Y)
390
- # ... [all test files]
391
- #
392
- # Test Files 28 passed (28)
393
- # Tests 361 passed (361)
394
- # Start at: <timestamp>
395
- # End at: <timestamp>
396
-
397
- # Success criteria:
398
- # - Test Files: 28 passed
399
- # - Tests: 361 passed
400
- # - Duration: < 30 seconds (typical)
401
-
402
- # If tests fail:
403
- # 1. Note which test files failed
404
- # 2. Note specific test names that failed
405
- # 3. Read error messages to understand root cause
406
- # 4. Check if failure is child()-related
407
- # 5. Document findings in verification report
408
-
409
- # Capture full output to file:
410
- npm test 2>&1 | tee test_results.txt
411
- ```
412
-
413
- ### Level 4: Documentation & Reporting (Verification Output)
414
-
415
- ```bash
416
- # Create comprehensive verification report
417
-
418
- # 1. Create usage inventory
419
- cat > usage_inventory.md << 'EOF'
420
- # child() Usage Inventory
421
-
422
- ## Summary
423
- - Total usages found: [count]
424
- - Existing (pre-S2): [count]
425
- - New (S3 tests): [count]
426
- - Production code: [count]
427
-
428
- ## Detailed Usage by File
429
-
430
- ### src/__tests__/unit/logger.test.ts
431
- - Line X: `logger.child({ parentLogId: '...' })` - NEW
432
- - Line Y: `logger.child('...')` - NEW/BACKWARD_COMPAT
433
- [... list all usages]
434
-
435
- ### src/__tests__/adversarial/deep-analysis.test.ts
436
- - Line 61: `logger.child('')` - EXISTING
437
-
438
- ### src/__tests__/adversarial/edge-case.test.ts
439
- - Line 96: `logger.child('parent-id-123')` - EXISTING
440
- EOF
441
-
442
- # 2. Create verification report
443
- cat > VERIFICATION_REPORT.md << 'EOF'
444
- # child() Signature Change Verification Report
445
-
446
- ## Executive Summary
447
- [High-level summary of verification results]
448
-
449
- ## Test Results
450
- [Full test suite results]
451
-
452
- ## Usage Compatibility Analysis
453
- [Analysis of each usage pattern]
454
-
455
- ## Edge Cases Discovered
456
- [Documentation of edge cases and their handling]
457
-
458
- ## Conclusion
459
- [Final verdict on backward compatibility]
460
-
461
- ## Recommendations
462
- [Any recommendations for future work]
463
- EOF
464
-
465
- # 3. Create edge case analysis
466
- cat > edge_case_analysis.md << 'EOF'
467
- # child() Edge Case Analysis
468
-
469
- ## Edge Case 1: Empty String
470
- ### Usage: logger.child('')
471
- ### Expected Behavior: parentLogId = undefined
472
- ### Actual Behavior: parentLogId = undefined
473
- ### Status: ✅ Works correctly
474
- ### Explanation: Empty string is falsy, results in undefined
475
-
476
- ## Edge Case 2: Empty Object
477
- ### Usage: logger.child({})
478
- ### Expected Behavior: parentLogId = undefined
479
- ### Actual Behavior: parentLogId = undefined
480
- ### Status: ✅ Works correctly
481
- ### Explanation: No parentLogId field in object
482
-
483
- [... continue for all edge cases]
484
- EOF
485
- ```
486
-
487
- ---
488
-
489
- ## Final Validation Checklist
490
-
491
- ### Technical Validation
492
-
493
- - [ ] All 361 tests pass: `npm test` exit code 0
494
- - [ ] No TypeScript compilation errors
495
- - [ ] All existing child() usage locations documented
496
- - [ ] All new child() usage patterns from S3 verified
497
- - [ ] Test execution time recorded
498
-
499
- ### Feature Validation
500
-
501
- - [ ] Backward compatibility confirmed (2 existing usages work)
502
- - [ ] New Partial<LogEntry> signature works (16 new patterns)
503
- - [ ] Edge cases documented with expected behavior
504
- - [ ] No breaking changes detected
505
- - [ ] Zero test failures
506
-
507
- ### Documentation Validation
508
-
509
- - [ ] usage_inventory.md created with all usage locations
510
- - [ ] edge_case_analysis.md documents all edge cases
511
- - [ ] VERIFICATION_REPORT.md contains comprehensive findings
512
- - [ ] Test results captured (test_results.txt or similar)
513
-
514
- ### Code Quality Validation
515
-
516
- - [ ] No production code changes required
517
- - [ ] No configuration changes required
518
- - [ ] All tests pass without modification
519
- - [ ] Verification process is reproducible
520
-
521
- ---
522
-
523
- ## Anti-Patterns to Avoid
524
-
525
- - ❌ Don't modify any existing test code to "make it pass"
526
- - ❌ Don't skip running the full test suite
527
- - ❌ Don't ignore test failures - investigate and document
528
- - ❌ Don't assume compatibility without actually running tests
529
- - ❌ Don't forget to document edge cases discovered
530
- - ❌ Don't proceed to next task without completing verification
531
- - ❌ Don't modify production code unless a breaking bug is found
532
- - ❌ Don't rely on partial test runs - full suite must pass
533
-
534
- ---
535
-
536
- ## Confidence Score
537
-
538
- **8/10** - High confidence for one-pass verification success
539
-
540
- **Reasoning**:
541
- - ✅ Clear, well-defined task with specific success criteria
542
- - ✅ All usage locations known and documented
543
- - ✅ Test infrastructure is well-established (Vitest)
544
- - ✅ Previous subtasks (S1-S3) completed successfully
545
- - ✅ Implementation already uses backward-compatible overloads
546
- - ⚠️ Test count mismatch (344 vs 361) suggests recent changes
547
- - ⚠️ Edge case behavior (empty string) needs careful verification
548
-
549
- **Risk Mitigation**: The verification is non-destructive (no code changes), so the worst case is discovering issues that need to be addressed in a follow-up task.