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
@@ -0,0 +1,370 @@
1
+ # PRP: Write test for cycle detection in getRootObservers()
2
+
3
+ ---
4
+
5
+ ## Goal
6
+
7
+ **Feature Goal**: Write a unit test that validates the cycle detection mechanism in the `getRootObservers()` private method prevents infinite loops from circular parent-child relationships.
8
+
9
+ **Deliverable**: A single test case added to `/home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts` that verifies `getRootObservers()` throws an error when a circular parent-child relationship is detected.
10
+
11
+ **Success Definition**:
12
+ - New test passes when run with `npm test`
13
+ - Test follows the exact pattern of the existing `getRoot()` cycle detection test (P1.M2.T1.S2)
14
+ - Test validates the same error message: `'Circular parent-child relationship detected'`
15
+
16
+ ---
17
+
18
+ ## All Needed Context
19
+
20
+ ### Context Completeness Check
21
+
22
+ ✅ **Passes "No Prior Knowledge" test**: This PRP provides complete file paths, line numbers, existing test code to replicate, implementation details, and exact test patterns to follow.
23
+
24
+ ### Documentation & References
25
+
26
+ ```yaml
27
+ # MUST READ - Existing Test Pattern (Template to Follow)
28
+ - file: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
29
+ lines: 209-223
30
+ why: Complete reference test for cycle detection (getRoot() test from P1.M2.T1.S2)
31
+ pattern: Use this exact structure - Arrange/Act/Assert with circular reference creation
32
+ gotcha: getRootObservers() is private (not protected), requiring different access approach
33
+
34
+ # Implementation Being Tested
35
+ - file: /home/dustin/projects/groundswell/src/core/workflow.ts
36
+ lines: 124-139
37
+ why: The getRootObservers() method implementation with cycle detection logic
38
+ critical: Throws `new Error('Circular parent-child relationship detected')` on cycle
39
+ gotcha: Private method - cannot be accessed directly via (instance as any)
40
+
41
+ # Test Utilities
42
+ - file: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
43
+ lines: 4-11
44
+ why: SimpleWorkflow test class definition to use in test
45
+ pattern: Extend Workflow class, implement async run() method
46
+
47
+ # For Comparison
48
+ - file: /home/dustin/projects/groundswell/src/core/workflow.ts
49
+ lines: 145-160
50
+ why: getRoot() method - has identical cycle detection logic but is protected
51
+ pattern: Same error message, same traversal approach
52
+
53
+ # Research Documentation
54
+ - docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/existing_test_pattern.md
55
+ why: Detailed analysis of P1.M2.T1.S2 test pattern to replicate
56
+
57
+ - docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/getRootObservers_implementation.md
58
+ why: Complete implementation details of getRootObservers() method
59
+
60
+ - docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/test_conventions.md
61
+ why: Project test conventions and patterns
62
+
63
+ - docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/codebase_structure.md
64
+ why: File organization and directory structure
65
+ ```
66
+
67
+ ### Current Codebase Tree (Relevant Files)
68
+
69
+ ```bash
70
+ /home/dustin/projects/groundswell/
71
+ ├── src/
72
+ │ ├── core/
73
+ │ │ └── workflow.ts # Lines 124-139: getRootObservers() with cycle detection
74
+ │ ├── __tests__/
75
+ │ │ └── unit/
76
+ │ │ └── workflow.test.ts # Lines 209-223: getRoot() cycle detection test
77
+ │ └── index.js # Main exports
78
+ └── plan/
79
+ └── bugfix/
80
+ └── P1M2T1S4/ # This subtask directory
81
+ ├── research/ # Research documentation
82
+ └── PRP.md # This file
83
+ ```
84
+
85
+ ### Desired Codebase Tree After Implementation
86
+
87
+ ```bash
88
+ # No new files - test is added to existing workflow.test.ts
89
+ # Test should be added after line 223 (after getRoot() cycle detection test)
90
+ ```
91
+
92
+ ### Known Gotchas of Our Codebase & Library Quirks
93
+
94
+ ```typescript
95
+ // CRITICAL: getRootObservers() is PRIVATE, not protected
96
+ // Unlike getRoot() which is protected, getRootObservers() cannot be accessed via (instance as any)
97
+ // The method is called internally by:
98
+ // - Constructor (line 111) - for logger creation
99
+ // - emitEvent() method (line 205)
100
+ // - snapshotState() method (line 228)
101
+
102
+ // GOTCHA: Testing private methods in this codebase
103
+ // Since getRootObservers() is private, you must trigger it indirectly through:
104
+ // 1. Creating a workflow with observers after establishing a cycle
105
+ // 2. Calling a method that uses getRootObservers() (e.g., emitEvent, snapshotState)
106
+ // 3. Or accessing via TypeScript casting if the test framework allows
107
+
108
+ // CRITICAL: Error message must match EXACTLY
109
+ throw new Error('Circular parent-child relationship detected')
110
+ // The test should expect this exact string
111
+
112
+ // PATTERN: Circular reference creation
113
+ parent.parent = child; // This creates the cycle that triggers detection
114
+
115
+ // GOTCHA: Test placement
116
+ // Add test immediately after line 223 (within same describe block)
117
+ // Keep similar test together for maintainability
118
+ ```
119
+
120
+ ---
121
+
122
+ ## Implementation Blueprint
123
+
124
+ ### Test Structure
125
+
126
+ The test should follow the exact Arrange/Act/Assert pattern from P1.M2.T1.S2:
127
+
128
+ ```typescript
129
+ it('should detect circular relationship in getRootObservers', () => {
130
+ // Arrange: Create parent and child workflows
131
+ // Act: Create circular reference manually
132
+ // Assert: Verify error is thrown
133
+ });
134
+ ```
135
+
136
+ ### Implementation Tasks (ordered by dependencies)
137
+
138
+ ```yaml
139
+ Task 1: LOCATE the test insertion point
140
+ - FIND: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
141
+ - NAVIGATE to: Line 223 (end of existing getRoot() cycle detection test)
142
+ - VERIFY: Inside the describe('Workflow', ...) block
143
+ - INSERT: New test immediately after line 223
144
+
145
+ Task 2: WRITE the test case
146
+ - IMPLEMENT: Test following exact pattern from lines 209-223
147
+ - NAMING: 'should detect circular relationship in getRootObservers'
148
+ - PATTERN:
149
+ 1. Arrange: Create parent and child workflows using SimpleWorkflow
150
+ 2. Act: Create circular reference (parent.parent = child)
151
+ 3. Assert: Expect error when getRootObservers() is called
152
+
153
+ - CRITICAL: Handle private method access
154
+ - Option A: Use (workflow as any).getRootObservers() if TypeScript allows
155
+ - Option B: Trigger through a public method that calls getRootObservers()
156
+ - Option C: Test the side effect (error thrown during observer-related operations)
157
+
158
+ Task 3: VERIFY error message matching
159
+ - EXPECT: 'Circular parent-child relationship detected'
160
+ - USE: expect(() => ...).toThrow('Circular parent-child relationship detected')
161
+ - ENSURE: Exact string match with implementation (line 131 in workflow.ts)
162
+
163
+ Task 4: RUN tests to validate
164
+ - EXECUTE: npm test
165
+ - VERIFY: New test passes
166
+ - CONFIRM: No existing tests broken
167
+ ```
168
+
169
+ ### Implementation Patterns & Key Details
170
+
171
+ ```typescript
172
+ // EXISTING TEST PATTERN (P1.M2.T1.S2) - Lines 209-223
173
+ it('should detect circular parent relationship', () => {
174
+ // Arrange: Create parent and child workflows
175
+ const parent = new SimpleWorkflow('Parent');
176
+ const child = new SimpleWorkflow('Child', parent);
177
+
178
+ // Act: Create circular reference manually
179
+ // This simulates a bug or malicious input that creates a cycle
180
+ parent.parent = child;
181
+
182
+ // Assert: getRoot() should throw error for circular reference
183
+ // Note: getRoot() is protected, so we cast to any to access it
184
+ expect(() => (parent as any).getRoot()).toThrow(
185
+ 'Circular parent-child relationship detected'
186
+ );
187
+ });
188
+
189
+ // NEW TEST PATTERN FOR getRootObservers()
190
+ // Key difference: getRootObservers() is PRIVATE
191
+ it('should detect circular relationship in getRootObservers', () => {
192
+ // Arrange: Create parent and child workflows
193
+ const parent = new SimpleWorkflow('Parent');
194
+ const child = new SimpleWorkflow('Child', parent);
195
+
196
+ // Act: Create circular reference manually
197
+ parent.parent = child;
198
+
199
+ // Assert: getRootObservers() should throw error for circular reference
200
+ // NOTE: getRootObservers() is private - may need alternative access
201
+ // Option 1: Direct access if test framework allows
202
+ expect(() => (parent as any).getRootObservers()).toThrow(
203
+ 'Circular parent-child relationship detected'
204
+ );
205
+
206
+ // Option 2: Trigger through method that uses getRootObservers()
207
+ // e.g., expect(() => parent.emitEvent(...)).toThrow(...)
208
+ });
209
+
210
+ // TEST UTILITY CLASS (Already defined at lines 4-11)
211
+ class SimpleWorkflow extends Workflow {
212
+ async run(): Promise<string> {
213
+ this.setStatus('running');
214
+ this.logger.info('Running simple workflow');
215
+ this.setStatus('completed');
216
+ return 'done';
217
+ }
218
+ }
219
+
220
+ // IMPORTS (Already present at line 1-2)
221
+ import { describe, it, expect } from 'vitest';
222
+ import { Workflow, /* ... */ } from '../../index.js';
223
+ ```
224
+
225
+ ### Critical Implementation Details
226
+
227
+ ```yaml
228
+ # Private Method Access Challenge
229
+ - getRootObservers() is private (line 124)
230
+ - Cannot be accessed directly like protected getRoot() method
231
+ - Consider using (instance as any) if TypeScript compilation allows
232
+ - Alternative: Trigger through public methods that call getRootObservers():
233
+ * Constructor calls it for logger (line 111)
234
+ * emitEvent() calls it (line 205)
235
+ * snapshotState() calls it (line 228)
236
+
237
+ # Error Message Exact Match
238
+ - Implementation: throw new Error('Circular parent-child relationship detected')
239
+ - Test must use: expect(() => ...).toThrow('Circular parent-child relationship detected')
240
+
241
+ # Test Naming Convention
242
+ - Format: 'should [expected behavior]'
243
+ - Suggested: 'should detect circular relationship in getRootObservers'
244
+ - Or: 'should detect circular parent relationship in getRootObservers'
245
+
246
+ # Test Placement
247
+ - Insert after line 223 (immediately after getRoot() cycle detection test)
248
+ - Keep related cycle detection tests together
249
+ - Within describe('Workflow', ...) block
250
+ ```
251
+
252
+ ---
253
+
254
+ ## Validation Loop
255
+
256
+ ### Level 1: Syntax & Style (Immediate Feedback)
257
+
258
+ ```bash
259
+ # Run TypeScript check on the test file
260
+ npx tsc --noEmit src/__tests__/unit/workflow.test.ts
261
+
262
+ # Run linter (if project uses one)
263
+ npm run lint 2>/dev/null || echo "No lint script configured"
264
+
265
+ # Expected: Zero TypeScript errors
266
+ ```
267
+
268
+ ### Level 2: Unit Tests (Component Validation)
269
+
270
+ ```bash
271
+ # Run the specific test file
272
+ npm test -- workflow.test.ts
273
+
274
+ # Run only cycle detection tests
275
+ npm test -- -t "should detect circular"
276
+
277
+ # Full test suite
278
+ npm test
279
+
280
+ # Expected:
281
+ # - New test passes: "should detect circular relationship in getRootObservers"
282
+ # - All existing tests still pass
283
+ # - No test failures or errors
284
+ ```
285
+
286
+ ### Level 3: Integration Testing (System Validation)
287
+
288
+ ```bash
289
+ # Ensure no regressions in workflow functionality
290
+ npm test -- --coverage
291
+
292
+ # Verify cycle detection works in practice
293
+ # (This is covered by the unit test itself)
294
+
295
+ # Expected: All integration tests pass
296
+ ```
297
+
298
+ ### Level 4: Manual Verification
299
+
300
+ ```bash
301
+ # Open the test file and visually verify:
302
+ # 1. Test is properly placed after line 223
303
+ # 2. Test follows the Arrange/Act/Assert pattern
304
+ # 3. Comments explain each step
305
+ # 4. Error message matches exactly
306
+
307
+ # Run tests in watch mode to see real-time results
308
+ npm run test:watch
309
+ ```
310
+
311
+ ---
312
+
313
+ ## Final Validation Checklist
314
+
315
+ ### Technical Validation
316
+
317
+ - [ ] Test file compiles without TypeScript errors
318
+ - [ ] New test passes: `npm test -- workflow.test.ts`
319
+ - [ ] All existing tests still pass: `npm test`
320
+ - [ ] Test is placed at correct location (after line 223)
321
+ - [ ] Error message matches implementation exactly
322
+
323
+ ### Feature Validation
324
+
325
+ - [ ] Test follows P1.M2.T1.S2 pattern (Arrange/Act/Assert)
326
+ - [ ] Circular reference is created correctly (`parent.parent = child`)
327
+ - [ ] Error is thrown when cycle is detected
328
+ - [ ] Test validates correct error message
329
+
330
+ ### Code Quality Validation
331
+
332
+ - [ ] Test has clear, descriptive name
333
+ - [ ] Comments explain the test purpose
334
+ - [ ] Test is maintainable and follows project conventions
335
+ - [ ] No code duplication beyond necessary pattern replication
336
+
337
+ ### Documentation & Deployment
338
+
339
+ - [ ] PRP is complete and self-documenting
340
+ - [ ] Research findings are stored in research/ directory
341
+ - [ ] Test location is documented for future reference
342
+
343
+ ---
344
+
345
+ ## Anti-Patterns to Avoid
346
+
347
+ - ❌ Don't place test in wrong location (must be after line 223)
348
+ - ❌ Don't use different error message (must be exact match)
349
+ - ❌ Don't forget to use SimpleWorkflow class (already defined)
350
+ - ❌ Don't omit Arrange/Act/Assert comments
351
+ - ❌ Don't use different naming convention
352
+ - ❌ Don't modify existing tests
353
+ - ❌ Don't create new test file (add to existing workflow.test.ts)
354
+ - ❌ Don't skip validation (must run tests and verify pass)
355
+
356
+ ---
357
+
358
+ ## Success Metrics
359
+
360
+ **Confidence Score**: 10/10 for one-pass implementation success
361
+
362
+ **Validation**: This PRP provides:
363
+ - Exact file paths and line numbers for all references
364
+ - Complete existing test code to replicate
365
+ - Implementation details with exact error message
366
+ - Clear handling of private method access challenge
367
+ - Project test conventions and patterns
368
+ - Research documentation for additional context
369
+
370
+ The implementing agent has everything needed to write a passing test for cycle detection in getRootObservers() using only this PRP and codebase access.