groundswell 0.0.1 → 0.0.2

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 (242) hide show
  1. package/.claude/commands/subtask-planning/prp-base-create.md +120 -0
  2. package/.claude/commands/subtask-planning/prp-base-execute.md +65 -0
  3. package/.claude/commands/task-breakdown.md +94 -0
  4. package/.claude/system_prompts/task-breakdown.md +1 -0
  5. package/CHANGELOG.md +188 -0
  6. package/PRD.md +543 -0
  7. package/README.md +99 -5
  8. package/examples/README.md +15 -1
  9. package/examples/examples/11-reparenting-workflows.ts +269 -0
  10. package/examples/index.ts +4 -0
  11. package/package-lock.json +2398 -0
  12. package/package.json +3 -1
  13. package/plan/001_d3bb02af4886/TEST_RESULTS.md +259 -0
  14. package/plan/001_d3bb02af4886/bug_fix_tasks.json +484 -0
  15. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +488 -0
  16. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +581 -0
  17. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +687 -0
  18. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +492 -0
  19. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +932 -0
  20. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +1109 -0
  21. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +802 -0
  22. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +603 -0
  23. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +564 -0
  24. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +518 -0
  25. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +1252 -0
  26. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +364 -0
  27. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +114 -0
  28. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +205 -0
  29. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +199 -0
  30. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +134 -0
  31. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +495 -0
  32. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +435 -0
  33. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +506 -0
  34. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +612 -0
  35. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +558 -0
  36. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +788 -0
  37. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +460 -0
  38. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +454 -0
  39. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +520 -0
  40. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +417 -0
  41. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +760 -0
  42. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +245 -0
  43. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +792 -0
  44. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +535 -0
  45. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +190 -0
  46. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +654 -0
  47. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +227 -0
  48. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +345 -0
  49. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +193 -0
  50. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +1323 -0
  51. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +1011 -0
  52. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +927 -0
  53. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +505 -0
  54. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +401 -0
  55. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +142 -0
  56. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +112 -0
  57. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +159 -0
  58. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +549 -0
  59. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +368 -0
  60. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +172 -0
  61. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +175 -0
  62. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +696 -0
  63. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +860 -0
  64. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +1066 -0
  65. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +1103 -0
  66. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +789 -0
  67. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +1098 -0
  68. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +1037 -0
  69. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +916 -0
  70. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +1045 -0
  71. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +890 -0
  72. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +822 -0
  73. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +668 -0
  74. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +706 -0
  75. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +265 -0
  76. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +655 -0
  77. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +1103 -0
  78. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +426 -0
  79. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +506 -0
  80. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +114 -0
  81. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +316 -0
  82. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +754 -0
  83. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +612 -0
  84. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +719 -0
  85. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +215 -0
  86. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +765 -0
  87. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +718 -0
  88. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +149 -0
  89. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +470 -0
  90. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +332 -0
  91. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +167 -0
  92. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +265 -0
  93. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +273 -0
  94. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +760 -0
  95. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +434 -0
  96. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +717 -0
  97. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +472 -0
  98. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +125 -0
  99. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +301 -0
  100. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +1170 -0
  101. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +940 -0
  102. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +151 -0
  103. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +650 -0
  104. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +259 -0
  105. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +457 -0
  106. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +346 -0
  107. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +311 -0
  108. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +1565 -0
  109. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +288 -0
  110. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +741 -0
  111. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +652 -0
  112. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +527 -0
  113. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +415 -0
  114. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +378 -0
  115. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +713 -0
  116. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +370 -0
  117. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +499 -0
  118. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +230 -0
  119. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +1134 -0
  120. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +179 -0
  121. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +629 -0
  122. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +214 -0
  123. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +629 -0
  124. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +529 -0
  125. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +142 -0
  126. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +304 -0
  127. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +558 -0
  128. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +256 -0
  129. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +346 -0
  130. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +415 -0
  131. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +489 -0
  132. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +218 -0
  133. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +380 -0
  134. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +1923 -0
  135. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +319 -0
  136. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +115 -0
  137. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +134 -0
  138. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +153 -0
  139. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +132 -0
  140. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +716 -0
  141. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +186 -0
  142. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +604 -0
  143. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +213 -0
  144. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +30 -0
  145. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +56 -0
  146. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +53 -0
  147. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +49 -0
  148. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +958 -0
  149. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +339 -0
  150. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +305 -0
  151. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +433 -0
  152. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +1574 -0
  153. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +1014 -0
  154. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +376 -0
  155. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +1507 -0
  156. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +949 -0
  157. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +619 -0
  158. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +723 -0
  159. package/plan/{research → 001_d3bb02af4886/docs/research/general}/introspection-security-guide.md +56 -0
  160. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +460 -0
  161. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +324 -0
  162. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +175 -0
  163. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +499 -0
  164. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +163 -0
  165. package/plan/bugfix/BUG_FIX_SUMMARY.md +961 -0
  166. package/src/__tests__/adversarial/attachChild-performance.test.ts +216 -0
  167. package/src/__tests__/adversarial/circular-reference.test.ts +101 -0
  168. package/src/__tests__/adversarial/complex-circular-reference.test.ts +139 -0
  169. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +571 -0
  170. package/src/__tests__/adversarial/deep-analysis.test.ts +729 -0
  171. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +213 -0
  172. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +448 -0
  173. package/src/__tests__/adversarial/edge-case.test.ts +703 -0
  174. package/src/__tests__/adversarial/error-merge-strategy.test.ts +760 -0
  175. package/src/__tests__/adversarial/incremental-performance.test.ts +140 -0
  176. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +457 -0
  177. package/src/__tests__/adversarial/observer-propagation.test.ts +487 -0
  178. package/src/__tests__/adversarial/parent-validation.test.ts +143 -0
  179. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +611 -0
  180. package/src/__tests__/adversarial/prd-compliance.test.ts +731 -0
  181. package/src/__tests__/compatibility/backward-compatibility.test.ts +1572 -0
  182. package/src/__tests__/helpers/index.ts +18 -0
  183. package/src/__tests__/helpers/tree-verification.ts +257 -0
  184. package/src/__tests__/integration/bidirectional-consistency.test.ts +847 -0
  185. package/src/__tests__/integration/observer-logging.test.ts +643 -0
  186. package/src/__tests__/integration/tree-mirroring.test.ts +37 -0
  187. package/src/__tests__/integration/workflow-reparenting.test.ts +303 -0
  188. package/src/__tests__/unit/context.test.ts +79 -0
  189. package/src/__tests__/unit/logger.test.ts +293 -0
  190. package/src/__tests__/unit/observable.test.ts +321 -0
  191. package/src/__tests__/unit/tree-debugger-incremental.test.ts +170 -0
  192. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +209 -0
  193. package/src/__tests__/unit/workflow-detachChild.test.ts +100 -0
  194. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +153 -0
  195. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +180 -0
  196. package/src/__tests__/unit/workflow.test.ts +277 -1
  197. package/src/core/agent.ts +21 -1
  198. package/src/core/logger.ts +27 -2
  199. package/src/core/workflow-context.ts +6 -4
  200. package/src/core/workflow.ts +252 -14
  201. package/src/debugger/tree-debugger.ts +52 -7
  202. package/src/decorators/task.ts +65 -2
  203. package/src/index.ts +4 -2
  204. package/src/types/decorators.ts +8 -1
  205. package/src/types/events.ts +1 -0
  206. package/src/utils/index.ts +1 -0
  207. package/src/utils/observable.ts +32 -3
  208. package/src/utils/workflow-error-utils.ts +56 -0
  209. package/tsconfig.json +1 -1
  210. package/llms_full.txt +0 -5890
  211. package/tasks.json +0 -0
  212. /package/plan/{backlog.json → 001_d3bb02af4886/backlog.json} +0 -0
  213. /package/plan/{P1P2/PRP.md → 001_d3bb02af4886/docs/PRP/P1P2-PRP.md} +0 -0
  214. /package/plan/{P3P4/PRP.md → 001_d3bb02af4886/docs/PRP/P3P4-PRP.md} +0 -0
  215. /package/plan/{P4P5/PRP.md → 001_d3bb02af4886/docs/PRP/P4P5-PRP.md} +0 -0
  216. /package/plan/{architecture → 001_d3bb02af4886/docs/architecture}/external_deps.md +0 -0
  217. /package/plan/{architecture → 001_d3bb02af4886/docs/architecture}/system_context.md +0 -0
  218. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_BEST_PRACTICES.md +0 -0
  219. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_CODE_PATTERNS.md +0 -0
  220. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_INTEGRATION_GUIDE.md +0 -0
  221. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_RESEARCH_INDEX.md +0 -0
  222. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/REFLECTION_INDEX.md +0 -0
  223. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/REFLECTION_RESEARCH_REPORT.md +0 -0
  224. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/RESEARCH_SUMMARY.md +0 -0
  225. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/anthropic-sdk.md +0 -0
  226. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/async-local-storage.md +0 -0
  227. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-code-patterns.md +0 -0
  228. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-decision-matrix.md +0 -0
  229. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-implementation-guide.md +0 -0
  230. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-integration-guide.md +0 -0
  231. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-patterns.md +0 -0
  232. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-quick-reference.md +0 -0
  233. /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/zod-schema.md +0 -0
  234. /package/plan/{P3P4/research → 001_d3bb02af4886/docs/research/P3P4}/caching-lru.md +0 -0
  235. /package/plan/{P3P4/research → 001_d3bb02af4886/docs/research/P3P4}/introspection-tools.md +0 -0
  236. /package/plan/{P3P4/research → 001_d3bb02af4886/docs/research/P3P4}/reflection-patterns.md +0 -0
  237. /package/plan/{P4P5/research → 001_d3bb02af4886/docs/research/P4P5}/RESEARCH_SUMMARY.md +0 -0
  238. /package/plan/{research → 001_d3bb02af4886/docs/research/general}/INTROSPECTION_RESEARCH_SUMMARY.md +0 -0
  239. /package/plan/{research → 001_d3bb02af4886/docs/research/general}/README-INTROSPECTION.md +0 -0
  240. /package/plan/{research → 001_d3bb02af4886/docs/research/general}/agent-introspection-patterns.md +0 -0
  241. /package/plan/{research → 001_d3bb02af4886/docs/research/general}/introspection-tool-examples.md +0 -0
  242. /package/{PRPs/PRDs/001-hierarchical-workflow-engine.md → plan/001_d3bb02af4886/prd_snapshot.md} +0 -0
@@ -716,6 +716,62 @@ Malicious Agent → Requests event history for very large time range
716
716
 
717
717
  ---
718
718
 
719
+ ### Threat 5: Topology Exposure via isDescendantOf
720
+
721
+ **Attack Scenario:**
722
+ ```
723
+ Attacker → Calls workflow.isDescendantOf(suspectWorkflow)
724
+ → Learns hierarchy relationship between workflows
725
+ → Maps workflow tree structure
726
+ → Extracts business intelligence from topology
727
+ ```
728
+
729
+ **Risk Level:** LOW (same as current exposure)
730
+
731
+ **Rationale:**
732
+ - `parent` and `children` properties are already public
733
+ - `getNode()` exposes full tree structure
734
+ - `isDescendantOf()` only provides convenience, not new information
735
+ - Attacker can already traverse tree manually
736
+
737
+ **Affected Method:** `Workflow.isDescendantOf()` (newly public)
738
+
739
+ **Mitigation:**
740
+ 1. **Application-Level Access Control** - If exposing workflows via API:
741
+ ```typescript
742
+ // Validate user has permission to access workflow
743
+ if (!user.canAccessWorkflow(workflowId)) {
744
+ throw new Error('Unauthorized');
745
+ }
746
+ // Only then allow isDescendantOf calls
747
+ ```
748
+
749
+ 2. **Filter Hierarchy Information** - For unauthenticated users:
750
+ ```typescript
751
+ // Return filtered view without hierarchy
752
+ const filteredWorkflow = {
753
+ id: workflow.id,
754
+ name: workflow.name,
755
+ // Omit parent, children, isDescendantOf
756
+ };
757
+ ```
758
+
759
+ 3. **Audit Topology Access** - Log calls to isDescendantOf:
760
+ ```typescript
761
+ auditLog.log({
762
+ timestamp: Date.now(),
763
+ userId: user.id,
764
+ action: 'isDescendantOf',
765
+ workflowId: workflow.id,
766
+ ancestorId: ancestor.id
767
+ });
768
+ ```
769
+
770
+ **Recommendation:** Document that applications should implement access control
771
+ if exposing workflows via APIs. The library itself provides no built-in security.
772
+
773
+ ---
774
+
719
775
  ## Implementation Checklist
720
776
 
721
777
  ### Data Protection
@@ -0,0 +1,460 @@
1
+ # PRP: Incremental Node Map Updates for WorkflowTreeDebugger
2
+
3
+ **Task ID**: P1.M3.T2
4
+ **Status**: Planned
5
+ **Story Points**: 4 (3 subtasks)
6
+
7
+ ## Overview
8
+
9
+ Optimize WorkflowTreeDebugger's node map maintenance by replacing O(n) full rebuilds with O(1)-O(k) incremental updates when tree structure changes.
10
+
11
+ ## Problem Statement
12
+
13
+ ### Current Implementation
14
+
15
+ **File**: `/home/dustin/projects/groundswell/src/debugger/tree-debugger.ts`
16
+
17
+ ```typescript
18
+ onTreeChanged(root: WorkflowNode): void {
19
+ this.root = root;
20
+ this.nodeMap.clear(); // ❌ Clears entire map
21
+ this.buildNodeMap(root); // ❌ O(n) rebuild
22
+ }
23
+ ```
24
+
25
+ **Issues**:
26
+ - **Time Complexity**: O(n) for every tree change
27
+ - **Memory Impact**: Full Map reconstruction triggers garbage collection
28
+ - **Scaling Problem**: With 1000+ node trees, every structural change becomes expensive
29
+ - **Unnecessary Work**: Most tree changes affect only a small subtree
30
+
31
+ ### Impact Analysis
32
+
33
+ From bug report Issue 7 and `plan/bugfix/architecture/codebase_structure.md`:
34
+ - Tree changes trigger `onTreeChanged()` which rebuilds entire nodeMap
35
+ - For large trees, this causes performance degradation
36
+ - Affects all operations that use `getNode(id)` for lookups
37
+
38
+ ## Research Summary
39
+
40
+ ### Key Findings
41
+
42
+ Based on research documented in:
43
+ `/home/dustin/projects/groundswell/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md`
44
+
45
+ 1. **Map Operations** (MDN):
46
+ - `Map.set()`, `Map.get()`, `Map.delete()` are O(1) average case
47
+ - Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#instance-methods
48
+
49
+ 2. **Tree Diffing** (React):
50
+ - Only process changed subtrees, not entire tree
51
+ - Source: https://react.dev/learn/understanding-reacts-render-phase
52
+
53
+ 3. **Performance Characteristics**:
54
+ - Full rebuild: O(n) every time
55
+ - Incremental: O(k) where k = nodes in affected subtree
56
+ - Expected improvement: 100-1000× for large trees
57
+
58
+ ### Recommended Pattern
59
+
60
+ **Event-Driven Incremental Updates**:
61
+
62
+ ```typescript
63
+ onEvent(event: WorkflowEvent): void {
64
+ switch (event.type) {
65
+ case 'childAttached':
66
+ // ✅ O(k) - Add only new subtree
67
+ this.addSubtree(event.child);
68
+ break;
69
+
70
+ case 'childDetached':
71
+ // ✅ O(k) - Remove only detached subtree
72
+ this.removeSubtree(event.childId);
73
+ break;
74
+
75
+ case 'treeUpdated':
76
+ // ✅ O(1) - Just update reference
77
+ this.root = event.root;
78
+ break;
79
+ }
80
+ }
81
+ ```
82
+
83
+ ## Proposed Solution
84
+
85
+ ### Architecture
86
+
87
+ ```
88
+ ┌─────────────────────────────────────────────────────────────┐
89
+ │ WorkflowTreeDebugger │
90
+ ├─────────────────────────────────────────────────────────────┤
91
+ │ ┌─────────────────┐ ┌─────────────────────────────┐ │
92
+ │ │ nodeMap │ │ Event Handlers │ │
93
+ │ │ Map<string, │ │ - handleChildAttached() │ │
94
+ │ │ Workflow- │ │ - handleChildDetached() │ │
95
+ │ │ Node> │ │ - handleTreeUpdated() │ │
96
+ │ └────────┬────────┘ └──────────┬──────────────────┘ │
97
+ │ │ │ │
98
+ │ │ ┌────────────────────┴──────────────────┐ │
99
+ │ ├───│ Incremental Update Methods │ │
100
+ │ │ │ - addSubtree(node) O(k) │ │
101
+ │ │ │ - removeSubtree(nodeId) O(k) │ │
102
+ │ │ │ - buildNodeMap(root) O(n) │ │
103
+ │ │ └───────────────────────────────────────┘ │
104
+ │ │ │
105
+ │ ▼ │
106
+ │ ┌─────────────────────────────────────────────────────┐ │
107
+ │ │ Public API │ │
108
+ │ │ - getNode(id) O(1) │ │
109
+ │ │ - getTree() O(1) │ │
110
+ │ │ - toTreeString() O(n) │ │
111
+ │ └─────────────────────────────────────────────────────┘ │
112
+ └─────────────────────────────────────────────────────────────┘
113
+ ```
114
+
115
+ ### Implementation Plan
116
+
117
+ #### Phase 1: Research & Analysis (S1 - 1 story point)
118
+
119
+ **Status**: Complete
120
+ **Output**: This PRP and research documentation
121
+
122
+ Tasks completed:
123
+ - [x] Analyze current `onTreeChanged()` implementation
124
+ - [x] Identify event types that trigger tree changes
125
+ - [x] Document opportunities for incremental updates
126
+ - [x] Research best practices and patterns
127
+
128
+ #### Phase 2: Implementation (S2 - 2 story points)
129
+
130
+ **Status**: Planned
131
+ **Implementation Steps**:
132
+
133
+ 1. **Add helper methods to WorkflowTreeDebugger**:
134
+
135
+ ```typescript
136
+ /**
137
+ * Add a node and all its descendants to the node map
138
+ * Time Complexity: O(k) where k = nodes in subtree
139
+ */
140
+ private addSubtree(node: WorkflowNode): void {
141
+ const queue = [node];
142
+ while (queue.length > 0) {
143
+ const current = queue.shift()!;
144
+ this.nodeMap.set(current.id, current);
145
+ queue.push(...current.children);
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Remove a node and all its descendants from the node map
151
+ * Time Complexity: O(k) where k = nodes in subtree
152
+ */
153
+ private removeSubtree(nodeId: string): void {
154
+ const node = this.nodeMap.get(nodeId);
155
+ if (!node) return;
156
+
157
+ // BFS to collect all descendants
158
+ const toRemove: string[] = [];
159
+ const queue = [node];
160
+ while (queue.length > 0) {
161
+ const current = queue.shift()!;
162
+ toRemove.push(current.id);
163
+ queue.push(...current.children);
164
+ }
165
+
166
+ // Remove all collected nodes
167
+ for (const id of toRemove) {
168
+ this.nodeMap.delete(id);
169
+ }
170
+ }
171
+ ```
172
+
173
+ 2. **Update `onEvent()` to handle incremental updates**:
174
+
175
+ ```typescript
176
+ onEvent(event: WorkflowEvent): void {
177
+ switch (event.type) {
178
+ case 'childAttached':
179
+ // ✅ Incremental: Add only the new subtree
180
+ this.addSubtree(event.child);
181
+ break;
182
+
183
+ case 'childDetached':
184
+ // ✅ Incremental: Remove only the detached subtree
185
+ this.removeSubtree(event.childId);
186
+ break;
187
+
188
+ case 'treeUpdated':
189
+ // ✅ No map update needed - node references unchanged
190
+ this.root = event.root;
191
+ break;
192
+
193
+ default:
194
+ // Other events don't affect tree structure
195
+ break;
196
+ }
197
+
198
+ // Forward to event stream
199
+ this.events.next(event);
200
+ }
201
+ ```
202
+
203
+ 3. **Simplify `onTreeChanged()`**:
204
+
205
+ ```typescript
206
+ onTreeChanged(root: WorkflowNode): void {
207
+ // ✅ Just update root reference
208
+ // Map is already updated incrementally via onEvent()
209
+ this.root = root;
210
+ }
211
+ ```
212
+
213
+ 4. **Update JSDoc comments**:
214
+
215
+ ```typescript
216
+ /**
217
+ * Build node lookup map recursively
218
+ * Time Complexity: O(n) where n = total nodes
219
+ * @deprecated Used only for initial build. Use addSubtree/removeSubtree for incremental updates.
220
+ */
221
+ private buildNodeMap(node: WorkflowNode): void {
222
+ this.nodeMap.set(node.id, node);
223
+ for (const child of node.children) {
224
+ this.buildNodeMap(child);
225
+ }
226
+ }
227
+ ```
228
+
229
+ **Acceptance Criteria**:
230
+ - [ ] `addSubtree()` method implemented with O(k) complexity
231
+ - [ ] `removeSubtree()` method implemented with O(k) complexity
232
+ - [ ] `onEvent()` handles all tree change events incrementally
233
+ - [ ] `onTreeChanged()` simplified to only update root reference
234
+ - [ ] All existing tests pass
235
+ - [ ] Code includes JSDoc comments with time complexity
236
+
237
+ #### Phase 3: Benchmarking & Validation (S3 - 1 story point)
238
+
239
+ **Status**: Planned
240
+ **Implementation Steps**:
241
+
242
+ 1. **Create benchmark test**:
243
+
244
+ ```typescript
245
+ // File: src/__tests__/performance/tree-debugger-benchmark.test.ts
246
+
247
+ import { performance } from 'perf_hooks';
248
+ import { Workflow } from '../../core/workflow';
249
+ import { WorkflowTreeDebugger } from '../../debugger/tree-debugger';
250
+
251
+ describe('WorkflowTreeDebugger Performance', () => {
252
+ it('should efficiently handle single node detachment in large tree', () => {
253
+ // Create tree with 1000 nodes
254
+ const root = new Workflow('root');
255
+ for (let i = 0; i < 100; i++) {
256
+ const parent = new Workflow(`parent-${i}`);
257
+ root.attachChild(parent);
258
+ for (let j = 0; j < 10; j++) {
259
+ const child = new Workflow(`child-${i}-${j}`);
260
+ parent.attachChild(child);
261
+ }
262
+ }
263
+
264
+ const debugger = new WorkflowTreeDebugger(root);
265
+
266
+ // Benchmark detachment
267
+ const start = performance.now();
268
+ const nodeToDetach = root.children[0];
269
+ nodeToDetach.detachChild(); // This triggers childDetached event
270
+ const end = performance.now();
271
+
272
+ const duration = end - start;
273
+
274
+ // With incremental updates, should be <1ms for single node
275
+ // With full rebuild, would be ~10-100ms for 1000 node tree
276
+ expect(duration).toBeLessThan(5); // 5ms threshold
277
+ });
278
+
279
+ it('should handle rapid sequential changes efficiently', () => {
280
+ const root = new Workflow('root');
281
+ const children: Workflow[] = [];
282
+
283
+ // Create 100 children
284
+ for (let i = 0; i < 100; i++) {
285
+ const child = new Workflow(`child-${i}`);
286
+ children.push(child);
287
+ root.attachChild(child);
288
+ }
289
+
290
+ const debugger = new WorkflowTreeDebugger(root);
291
+
292
+ // Benchmark rapid detachments
293
+ const start = performance.now();
294
+ for (let i = 0; i < 50; i++) {
295
+ children[i].detachChild();
296
+ }
297
+ const end = performance.now();
298
+
299
+ const duration = end - start;
300
+
301
+ // With incremental updates: ~1-5ms total
302
+ // With full rebuild: ~500-1000ms total
303
+ expect(duration).toBeLessThan(50); // 50ms threshold
304
+ });
305
+ });
306
+ ```
307
+
308
+ 2. **Validate correctness**:
309
+
310
+ ```typescript
311
+ describe('WorkflowTreeDebugger Incremental Updates', () => {
312
+ it('should correctly maintain node map after childAttached', () => {
313
+ const root = new Workflow('root');
314
+ const debugger = new WorkflowTreeDebugger(root);
315
+
316
+ const child = new Workflow('child');
317
+ root.attachChild(child);
318
+
319
+ expect(debugger.getNode('child')).toBe(child.node);
320
+ expect(debugger.getNode('root')).toBe(root.node);
321
+ });
322
+
323
+ it('should correctly maintain node map after childDetached', () => {
324
+ const root = new Workflow('root');
325
+ const child = new Workflow('child');
326
+ const grandchild = new Workflow('grandchild');
327
+
328
+ root.attachChild(child);
329
+ child.attachChild(grandchild);
330
+
331
+ const debugger = new WorkflowTreeDebugger(root);
332
+
333
+ // Detach child (should remove child and grandchild)
334
+ child.detachChild();
335
+
336
+ expect(debugger.getNode('child')).toBeUndefined();
337
+ expect(debugger.getNode('grandchild')).toBeUndefined();
338
+ expect(debugger.getNode('root')).toBe(root.node);
339
+ });
340
+
341
+ it('should handle reparenting correctly', () => {
342
+ const root1 = new Workflow('root1');
343
+ const root2 = new Workflow('root2');
344
+ const child = new Workflow('child');
345
+ const grandchild = new Workflow('grandchild');
346
+
347
+ root1.attachChild(child);
348
+ child.attachChild(grandchild);
349
+
350
+ const debugger = new WorkflowTreeDebugger(root1);
351
+
352
+ // Reparent: detach from root1, attach to root2
353
+ child.detachChild();
354
+ root2.attachChild(child);
355
+
356
+ // Verify map state
357
+ expect(debugger.getNode('child')).toBe(child.node);
358
+ expect(debugger.getNode('grandchild')).toBe(grandchild.node);
359
+ });
360
+ });
361
+ ```
362
+
363
+ **Acceptance Criteria**:
364
+ - [ ] Benchmark tests created and passing
365
+ - [ ] Performance improvement demonstrated (100×+ for large trees)
366
+ - [ ] Correctness tests verify map integrity
367
+ - [ ] Results documented in test output
368
+
369
+ ## Testing Strategy
370
+
371
+ ### Unit Tests
372
+ - Test `addSubtree()` with various subtree sizes
373
+ - Test `removeSubtree()` with various subtree sizes
374
+ - Test `onEvent()` for all event types
375
+ - Test edge cases (empty tree, single node, deep hierarchy)
376
+
377
+ ### Integration Tests
378
+ - Test real workflow scenarios
379
+ - Test reparenting workflows
380
+ - Test concurrent modifications
381
+ - Test debugger accuracy after changes
382
+
383
+ ### Performance Tests
384
+ - Benchmark single node operations
385
+ - Benchmark subtree operations
386
+ - Compare before/after optimization
387
+ - Test with trees of varying sizes (10, 100, 1000 nodes)
388
+
389
+ ## Risks & Mitigations
390
+
391
+ ### Risk 1: Incorrect Subtree Cleanup
392
+ **Description**: Forgetting to remove descendants when detaching a node
393
+ **Impact**: Orphaned nodes remain in map, causing stale lookups
394
+ **Mitigation**: Comprehensive unit tests, code review
395
+
396
+ ### Risk 2: Event Ordering Issues
397
+ **Description**: Events arriving out of order causing map inconsistency
398
+ **Impact**: Map becomes corrupted
399
+ **Mitigation**: Tests for concurrent modifications, event ordering
400
+
401
+ ### Risk 3: Performance Regression for Small Trees
402
+ **Description**: Incremental overhead slower for very small trees
403
+ **Impact**: Unnecessary complexity for small use cases
404
+ **Mitigation**: Benchmark various tree sizes, document when optimization applies
405
+
406
+ ## Success Metrics
407
+
408
+ ### Performance
409
+ - [ ] Single node attach: <1ms (vs ~10ms with rebuild)
410
+ - [ ] Single node detach: <1ms (vs ~10ms with rebuild)
411
+ - [ ] 100-node tree operations: <10ms (vs ~1000ms with rebuild)
412
+
413
+ ### Correctness
414
+ - [ ] All existing tests pass
415
+ - [ ] New correctness tests pass
416
+ - [ ] No memory leaks (verify with heap snapshots)
417
+
418
+ ### Code Quality
419
+ - [ ] JSDoc comments with time complexity
420
+ - [ ] Code review approved
421
+ - [ ] No TypeScript errors
422
+
423
+ ## Dependencies
424
+
425
+ ### Task Dependencies
426
+ - P1.M3.T2.S1 (Research) - Complete
427
+ - P1.M3.T2.S2 (Implementation) - Depends on S1
428
+ - P1.M3.T2.S3 (Benchmarking) - Depends on S2
429
+
430
+ ### External Dependencies
431
+ - None (uses existing APIs)
432
+
433
+ ## Timeline
434
+
435
+ - **S1 (Research)**: Complete
436
+ - **S2 (Implementation)**: 2-3 hours
437
+ - **S3 (Benchmarking)**: 1-2 hours
438
+ - **Total**: 4-6 hours (4 story points)
439
+
440
+ ## References
441
+
442
+ ### Documentation
443
+ - [Research Report](/home/dustin/projects/groundswell/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md)
444
+ - [Quick Reference](/home/dustin/projects/groundswell/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md)
445
+
446
+ ### External Resources
447
+ - [MDN - Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
448
+ - [React Reconciliation](https://react.dev/learn/understanding-reacts-render-phase)
449
+ - [Stack Overflow - Map Complexity](https://stackoverflow.com/questions/38476433/what-is-the-time-complexity-of-map-set-in-javascript)
450
+
451
+ ### Code References
452
+ - Implementation: `/home/dustin/projects/groundswell/src/debugger/tree-debugger.ts`
453
+ - Tests: `/home/dustin/projects/groundswell/src/__tests__/unit/tree-debugger.test.ts`
454
+ - Events: `/home/dustin/projects/groundswell/src/types/events.ts`
455
+
456
+ ---
457
+
458
+ **Document Version**: 1.0
459
+ **Last Updated**: 2026-01-12
460
+ **Status**: Ready for Implementation