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,434 @@
1
+ # Product Requirement Prompt (PRP): Add Tests for Public isDescendantOf API
2
+
3
+ ---
4
+
5
+ ## Goal
6
+
7
+ **Feature Goal**: Add comprehensive test coverage for the public `isDescendantOf` API method, ensuring full validation of true positive (descendant), true negative (not descendant), and edge cases (self-reference, circular reference) scenarios.
8
+
9
+ **Deliverable**: Enhanced test suite in `src/__tests__/unit/workflow-isDescendantOf.test.ts` with additional test cases for any gaps in existing coverage.
10
+
11
+ **Success Definition**:
12
+ - All test scenarios pass including edge cases for circular reference handling
13
+ - Test coverage includes true positive, true negative, self-reference, and corrupted tree scenarios
14
+ - Public API accessibility verified without type casting
15
+ - All existing tests continue to pass
16
+
17
+ ## User Persona (if applicable)
18
+
19
+ **Target User**: Library developers integrating Groundswell workflow engine into their applications.
20
+
21
+ **Use Case**: Developers need to programmatically validate workflow hierarchy relationships to:
22
+ - Prevent circular references before attaching workflows
23
+ - Validate workflows belong to specific hierarchies (e.g., production vs staging)
24
+ - Implement conditional logic based on ancestry position
25
+
26
+ **User Journey**:
27
+ 1. Developer has workflow instances with parent-child relationships
28
+ 2. Developer calls `workflow.isDescendantOf(potentialAncestor)` to check relationship
29
+ 3. Method returns boolean indicating ancestry status
30
+ 4. Developer uses result for validation, conditional logic, or error prevention
31
+
32
+ **Pain Points Addressed**:
33
+ - No programmatic way to check ancestry without manual parent chain traversal
34
+ - Risk of creating circular references when attaching workflows
35
+ - Difficulty validating workflow hierarchy membership for multi-environment setups
36
+
37
+ ## Why
38
+
39
+ - **API Validation**: P1.M3.T4.S2 made `isDescendantOf` public; tests ensure the public API works correctly
40
+ - **Contract Compliance**: Work item contract requires tests covering true positive, true negative, edge cases (same workflow, circular reference)
41
+ - **Safety**: Circular reference detection prevents infinite loops and corrupted tree structures
42
+ - **Developer Confidence**: Comprehensive tests demonstrate reliability for external consumers
43
+
44
+ ## What
45
+
46
+ Add test coverage for the public `isDescendantOf` API method. The test file already exists with substantial coverage (21 tests), but one gap exists: no direct test of `isDescendantOf` throwing an error when called on a corrupted tree with circular references.
47
+
48
+ ### Success Criteria
49
+
50
+ - [ ] All existing tests pass (21 current tests)
51
+ - [ ] New test added for `isDescendantOf` error handling with circular references
52
+ - [ ] Test coverage includes: direct descendants, nested descendants, unrelated workflows, siblings, self-reference, orphan workflows, complex hierarchies, circular reference error handling
53
+ - [ ] Public API accessibility verified without `(as any)` type casting
54
+
55
+ ## All Needed Context
56
+
57
+ ### Context Completeness Check
58
+
59
+ **"No Prior Knowledge" test**: A developer unfamiliar with this codebase would have everything needed to implement these tests because:
60
+ - Existing test file provides clear patterns to follow
61
+ - Method implementation is fully documented
62
+ - Test patterns are consistent across the codebase
63
+ - Edge cases are clearly identified
64
+
65
+ ### Documentation & References
66
+
67
+ ```yaml
68
+ # MUST READ - Implementation to test
69
+ - file: src/core/workflow.ts:201-219
70
+ why: Exact implementation of isDescendantOf method to test
71
+ pattern: Iterative traversal with visited Set for cycle detection
72
+ critical: Method throws "Circular parent-child relationship detected" when cycle found
73
+
74
+ # MUST READ - Documentation of method behavior
75
+ - file: src/core/workflow.ts:152-200
76
+ why: JSDoc documentation with usage examples and security warning
77
+ section: Security warning about information disclosure
78
+
79
+ # MUST READ - Existing tests to extend
80
+ - file: src/__tests__/unit/workflow-isDescendantOf.test.ts
81
+ why: Current test coverage (21 tests) - identify what's missing
82
+ pattern: Nested describe blocks with BDD-style naming
83
+ coverage: Public API accessibility, direct/nested descendants, unrelated, siblings, self-reference, complex hierarchies
84
+ gap: No direct test of isDescendantOf throwing on corrupted tree
85
+
86
+ # MUST READ - Related circular reference tests
87
+ - file: src/__tests__/adversarial/complex-circular-reference.test.ts
88
+ why: Pattern for testing circular references via attachChild()
89
+ pattern: Tests attachChild() which internally uses isDescendantOf()
90
+ gotcha: These test attachChild(), not isDescendantOf() directly
91
+
92
+ - file: src/__tests__/unit/workflow.test.ts:285-313
93
+ why: Tests getRoot() and getRootObservers() throwing on circular reference
94
+ pattern: Manually create circular ref, then test method throws
95
+ gap: No test for isDescendantOf() throwing on corrupted tree
96
+
97
+ # MUST READ - Test configuration
98
+ - file: vitest.config.ts
99
+ why: Vitest configuration for running tests
100
+ pattern: Tests in src/__tests__/**/*.test.ts, globals enabled
101
+
102
+ # MUST READ - Test helper patterns
103
+ - file: src/__tests__/adversarial/circular-reference.test.ts:20-26
104
+ why: SimpleWorkflow class pattern for testing
105
+ pattern: Extend Workflow, implement minimal run() method
106
+
107
+ # EXTERNAL RESEARCH - Vitest Documentation
108
+ - url: https://vitest.dev/api/
109
+ why: Complete vitest API reference for assertions and test functions
110
+ critical: expect().toThrow() for error testing
111
+
112
+ - url: https://vitest.dev/guide/assertion.html
113
+ why: Assertion patterns including toThrow(), toBe(), toEqual()
114
+ section: Error testing with expect().toThrow()
115
+
116
+ - url: https://vitest.dev/guide/test-context.html
117
+ why: Test context patterns (beforeEach, afterEach, vi, etc.)
118
+ section: Mocking with vi.spyOn() and vi.restoreAllMocks()
119
+ ```
120
+
121
+ ### Current Codebase Tree
122
+
123
+ ```bash
124
+ src/
125
+ ├── core/
126
+ │ ├── workflow.ts # Workflow class with isDescendantOf (lines 201-219)
127
+ │ ├── logger.ts # WorkflowLogger for hierarchical logging
128
+ │ └── index.ts
129
+ ├── types/
130
+ │ └── workflow.ts # Workflow TypeScript interfaces
131
+ ├── __tests__/
132
+ │ ├── unit/
133
+ │ │ ├── workflow.test.ts # General workflow tests
134
+ │ │ ├── workflow-isDescendantOf.test.ts # TARGET FILE - Current isDescendantOf tests
135
+ │ │ ├── workflow-detachChild.test.ts # Example public method test pattern
136
+ │ │ └── ...
137
+ │ ├── adversarial/
138
+ │ │ ├── circular-reference.test.ts # Circular ref patterns
139
+ │ │ └── complex-circular-reference.test.ts # Multi-level circular ref tests
140
+ │ └── integration/
141
+ │ └── ...
142
+ ├── index.ts # Main exports
143
+ └── vitest.config.ts # Test configuration
144
+ ```
145
+
146
+ ### Desired Codebase Tree with Files to be Added
147
+
148
+ ```bash
149
+ # NO NEW FILES - Existing file will be enhanced
150
+ src/__tests__/unit/
151
+ └── workflow-isDescendantOf.test.ts # MODIFY: Add circular reference error test
152
+ ```
153
+
154
+ ### Known Gotchas of Our Codebase & Library Quirks
155
+
156
+ ```typescript
157
+ // CRITICAL: isDescendantOf throws "Circular parent-child relationship detected"
158
+ // when it encounters a cycle during traversal. This is NOT tested directly yet.
159
+
160
+ // GOTCHA: Circular reference must be created MANUALLY by setting .parent property
161
+ // Normal attachChild() prevents this, so test must bypass normal safeguards:
162
+ const parent = new Workflow('parent');
163
+ const child = new Workflow('child', parent);
164
+ parent.parent = child; // Manual corruption - bypasses attachChild validation
165
+
166
+ // GOTCHA: isDescendantOf starts from this.parent, NOT this
167
+ // So workflow.isDescendantOf(workflow) returns false (not considered descendant of self)
168
+
169
+ // GOTCHA: Vitest globals are enabled - no need to import describe/it/expect
170
+ // But existing tests explicitly import them - follow existing pattern
171
+
172
+ // PATTERN: Use SimpleWorkflow class extension for tests requiring run() method
173
+ class SimpleWorkflow extends Workflow {
174
+ async run(): Promise<string> {
175
+ this.setStatus('running');
176
+ this.setStatus('completed');
177
+ return 'done';
178
+ }
179
+ }
180
+
181
+ // PATTERN: Console mocking in adversarial tests
182
+ beforeEach(() => {
183
+ vi.spyOn(console, 'log').mockImplementation(() => {});
184
+ vi.spyOn(console, 'error').mockImplementation(() => {});
185
+ });
186
+ afterEach(() => {
187
+ vi.restoreAllMocks();
188
+ });
189
+ ```
190
+
191
+ ## Implementation Blueprint
192
+
193
+ ### Data models and structure
194
+
195
+ No new data models needed. Testing existing `Workflow` class with signature:
196
+ ```typescript
197
+ public isDescendantOf(ancestor: Workflow): boolean
198
+ ```
199
+
200
+ ### Implementation Tasks (ordered by dependencies)
201
+
202
+ ```yaml
203
+ Task 1: ANALYZE existing test coverage in workflow-isDescendantOf.test.ts
204
+ - READ: src/__tests__/unit/workflow-isDescendantOf.test.ts
205
+ - IDENTIFY: Test categories covered (21 existing tests)
206
+ - IDENTIFY: Missing test scenarios (circular reference error handling)
207
+ - DOCUMENT: Test patterns used in existing tests
208
+
209
+ Task 2: VERIFY isDescendantOf implementation error handling
210
+ - READ: src/core/workflow.ts:201-219
211
+ - UNDERSTAND: Cycle detection algorithm with visited Set
212
+ - CONFIRM: Error message is "Circular parent-child relationship detected"
213
+ - UNDERSTAND: When error is thrown (when visited.has(current) is true)
214
+
215
+ Task 3: REVIEW circular reference test patterns
216
+ - READ: src/__tests__/unit/workflow.test.ts:285-313
217
+ - READ: src/__tests__/adversarial/complex-circular-reference.test.ts
218
+ - EXTRACT: Pattern for creating manual circular reference
219
+ - EXTRACT: Pattern for testing thrown errors
220
+
221
+ Task 4: ADD new test for isDescendantOf circular reference error
222
+ - FILE: src/__tests__/unit/workflow-isDescendantOf.test.ts
223
+ - ADD: New describe block "Edge Cases: Circular Reference Detection"
224
+ - IMPLEMENT: Test that creates manual circular reference
225
+ - IMPLEMENT: Test that calls isDescendantOf() on corrupted tree
226
+ - ASSERT: expect(() => descendant.isDescendantOf(ancestor)).toThrow('Circular parent-child relationship detected')
227
+ - PLACEMENT: After existing "Edge Cases" describe block (line 157)
228
+
229
+ Task 5: RUN test suite to verify all tests pass
230
+ - COMMAND: npm test or uv run vitest run
231
+ - VERIFY: All 21 existing tests still pass
232
+ - VERIFY: New test passes
233
+ - VERIFY: No regressions in other test files
234
+ ```
235
+
236
+ ### Implementation Patterns & Key Details
237
+
238
+ ```typescript
239
+ // Pattern: Creating manual circular reference for testing
240
+ // FROM: src/__tests__/unit/workflow.test.ts:285-296
241
+ const parent = new SimpleWorkflow('Parent');
242
+ const child = new SimpleWorkflow('Child', parent);
243
+
244
+ // Act: Create circular reference manually
245
+ // This simulates a bug or malicious input that creates a cycle
246
+ parent.parent = child;
247
+
248
+ // Assert: isDescendantOf should throw error for circular reference
249
+ expect(() => parent.isDescendantOf(child)).toThrow(
250
+ 'Circular parent-child relationship detected'
251
+ );
252
+
253
+ // Pattern: Existing test file structure
254
+ // FROM: src/__tests__/unit/workflow-isDescendantOf.test.ts
255
+ import { describe, it, expect } from 'vitest';
256
+ import { Workflow } from '../../core/workflow.js';
257
+
258
+ describe('Workflow.isDescendantOf() - Public API', () => {
259
+ describe('Existing Test Categories', () => {
260
+ // Tests here...
261
+ });
262
+
263
+ describe('Edge Cases: Circular Reference Detection', () => {
264
+ // NEW TEST GOES HERE
265
+ });
266
+ });
267
+ ```
268
+
269
+ ### Integration Points
270
+
271
+ ```yaml
272
+ NO NEW INTEGRATIONS:
273
+ - This task only adds tests
274
+ - No changes to production code
275
+ - No new dependencies
276
+ - No configuration changes
277
+
278
+ TEST INTEGRATION:
279
+ - Tests run via existing vitest configuration
280
+ - Test file follows existing naming pattern
281
+ - Test structure follows existing patterns in codebase
282
+ ```
283
+
284
+ ## Validation Loop
285
+
286
+ ### Level 1: Syntax & Style (Immediate Feedback)
287
+
288
+ ```bash
289
+ # Run after adding test - TypeScript compilation check
290
+ npx tsc --noEmit
291
+
292
+ # Check if TypeScript compiler finds any issues with the new test
293
+ # Expected: No TypeScript errors
294
+
295
+ # Run linter if configured
296
+ npm run lint 2>/dev/null || echo "No lint script configured"
297
+ # Expected: No linting errors
298
+
299
+ # Format check
300
+ npx prettier --check src/__tests__/unit/workflow-isDescendantOf.test.ts 2>/dev/null || echo "Prettier not configured"
301
+ ```
302
+
303
+ ### Level 2: Unit Tests (Component Validation)
304
+
305
+ ```bash
306
+ # Run specific test file to verify new test
307
+ npm test -- workflow-isDescendantOf.test.ts
308
+
309
+ # Alternative: Using vitest directly
310
+ npx vitest run src/__tests__/unit/workflow-isDescendantOf.test.ts
311
+
312
+ # Expected: All tests pass, including new circular reference test
313
+
314
+ # Run full unit test suite to ensure no regressions
315
+ npm test -- src/__tests__/unit/
316
+
317
+ # Expected: All unit tests pass
318
+
319
+ # Check test coverage for isDescendantOf
320
+ npx vitest run --coverage src/__tests__/unit/workflow-isDescendantOf.test.ts
321
+
322
+ # Expected: 100% coverage for isDescendantOf method
323
+ ```
324
+
325
+ ### Level 3: Integration Testing (System Validation)
326
+
327
+ ```bash
328
+ # Run full test suite
329
+ npm test
330
+ # OR: npx vitest run
331
+
332
+ # Expected: All tests pass (unit, integration, adversarial)
333
+
334
+ # Verify specific test categories
335
+ npm test -- -t "isDescendantOf"
336
+
337
+ # Expected: All isDescendantOf tests pass (22 tests total)
338
+
339
+ # Verify no impact on related workflow tests
340
+ npm test -- workflow.test.ts
341
+ npm test -- workflow-detachChild.test.ts
342
+
343
+ # Expected: All related tests pass
344
+ ```
345
+
346
+ ### Level 4: Creative & Domain-Specific Validation
347
+
348
+ ```bash
349
+ # Manual verification: Check that test properly validates error case
350
+ # 1. Review test code to ensure it correctly creates circular reference
351
+ # 2. Verify error message matches implementation exactly
352
+ # 3. Confirm test would catch regression if cycle detection was removed
353
+
354
+ # Documentation verification
355
+ grep -n "Circular parent-child relationship detected" src/core/workflow.ts
356
+ grep -n "Circular parent-child relationship detected" src/__tests__/unit/workflow-isDescendantOf.test.ts
357
+
358
+ # Expected: Error message appears in both implementation and test
359
+
360
+ # Test coverage verification
361
+ npx vitest run --coverage --reporter=verbose
362
+
363
+ # Expected: isDescendantOf shows 100% coverage including error path
364
+ ```
365
+
366
+ ## Final Validation Checklist
367
+
368
+ ### Technical Validation
369
+
370
+ - [ ] TypeScript compiles without errors: `npx tsc --noEmit`
371
+ - [ ] All existing tests pass: `npm test`
372
+ - [ ] New test for circular reference error handling passes
373
+ - [ ] Test coverage for isDescendantOf is 100%
374
+ - [ ] No linting errors (if linter configured)
375
+
376
+ ### Feature Validation
377
+
378
+ - [ ] True positive tests: Direct descendants return true
379
+ - [ ] True positive tests: Nested descendants return true
380
+ - [ ] True negative tests: Unrelated workflows return false
381
+ - [ ] True negative tests: Siblings return false
382
+ - [ ] True negative tests: Reverse relationship (parent checking child) returns false
383
+ - [ ] Edge case: Self-reference returns false
384
+ - [ ] Edge case: Orphan workflow returns false
385
+ - [ ] Edge case: Circular reference throws "Circular parent-child relationship detected"
386
+ - [ ] Public API accessibility: No type casting required
387
+
388
+ ### Code Quality Validation
389
+
390
+ - [ ] Test follows existing patterns in workflow-isDescendantOf.test.ts
391
+ - [ ] Test uses SimpleWorkflow class if needed (not needed for this test)
392
+ - [ ] Test name follows BDD-style convention: "should [do something] when [condition]"
393
+ - [ ] Test is in appropriate describe block (Edge Cases)
394
+ - [ ] Test includes clear comments explaining the scenario
395
+
396
+ ### Documentation & Deployment
397
+
398
+ - [ ] Test includes explanatory comments for complex scenario (circular reference creation)
399
+ - [ ] Test file header documentation is accurate
400
+ - [ ] No changes to production code (this is a test-only task)
401
+
402
+ ---
403
+
404
+ ## Anti-Patterns to Avoid
405
+
406
+ - ❌ Don't modify the production code (this is a test-only task)
407
+ - ❌ Don't create circular references through attachChild() (it's designed to prevent them)
408
+ - ❌ Don't skip testing the error path (that's the whole point of this task)
409
+ - ❌ Don't use different assertion patterns than existing tests
410
+ - ❌ Don't forget to clean up any mocks in afterEach
411
+ - ❌ Don't add console output in tests (use console mocking if needed)
412
+ - ❌ Don't test the private implementation details - test the public API behavior
413
+ - ❌ Don't create unnecessary test files - add to existing workflow-isDescendantOf.test.ts
414
+
415
+ ## Summary
416
+
417
+ **Current State**: `src/__tests__/unit/workflow-isDescendantOf.test.ts` contains 21 tests covering most scenarios but lacks a direct test for circular reference error handling.
418
+
419
+ **Required Change**: Add one new test that:
420
+ 1. Creates a manual circular reference by setting `.parent` property directly
421
+ 2. Calls `isDescendantOf()` on the corrupted tree
422
+ 3. Asserts that it throws "Circular parent-child relationship detected"
423
+
424
+ **Implementation Effort**: Low (~10 lines of code following existing patterns)
425
+
426
+ **Confidence Score**: 10/10 for one-pass implementation success
427
+
428
+ ---
429
+
430
+ **Sources:**
431
+
432
+ - [Vitest API Reference](https://vitest.dev/api/)
433
+ - [Vitest Assertion API](https://vitest.dev/guide/assertion.html)
434
+ - [Vitest Test Context](https://vitest.dev/guide/test-context.html)