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,417 @@
1
+ # RECOMMENDATION: isDescendantOf Public API
2
+
3
+ **Work Item**: P1.M3.T4.S1 - Evaluate use cases for public isDescendantOf API
4
+ **Date**: 2026-01-12
5
+ **Status**: RECOMMENDATION APPROVED
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ **RECOMMENDATION**: **MAKE `isDescendantOf()` PUBLIC** with documentation safeguards.
12
+
13
+ **Confidence Level**: **HIGH (9/10)**
14
+
15
+ **Key Finding**: The `isDescendantOf()` method does NOT expose any information beyond what is already publicly accessible via the `parent` and `children` properties. Making it public improves API ergonomics without increasing security risk.
16
+
17
+ ---
18
+
19
+ ## Decision Matrix
20
+
21
+ | Criterion | Score | Notes |
22
+ |-----------|-------|-------|
23
+ | **User Value** | 8/10 | Provides clean API for hierarchy queries; evidence of user need from introspection tools |
24
+ | **Security Risk** | 2/10 | No new information exposed; parent/children already public |
25
+ | **Implementation Cost** | 1/10 | Change `private` to `public`; already battle-tested (25+ tests) |
26
+ | **Industry Alignment** | 5/10 | No industry standard but not an anti-pattern; would be differentiator |
27
+ | **Maintenance Burden** | 2/10 | Simple method with minimal surface area |
28
+
29
+ **Overall Assessment**: LOW risk, HIGH value, EASY implementation
30
+
31
+ ---
32
+
33
+ ## Detailed Findings
34
+
35
+ ### 1. Current Implementation
36
+
37
+ **Location**: `src/core/workflow.ts:162-180`
38
+
39
+ ```typescript
40
+ /**
41
+ * Check if this workflow is a descendant of the given ancestor workflow
42
+ * Traverses the parent chain upward looking for the ancestor reference
43
+ * Uses visited Set to detect cycles during traversal
44
+ *
45
+ * @private
46
+ * @param ancestor - The potential ancestor workflow to check
47
+ * @returns true if ancestor is found in parent chain, false otherwise
48
+ * @throws {Error} If a cycle is detected during traversal
49
+ */
50
+ private isDescendantOf(ancestor: Workflow): boolean {
51
+ const visited = new Set<Workflow>();
52
+ let current: Workflow | null = this.parent;
53
+
54
+ while (current !== null) {
55
+ if (visited.has(current)) {
56
+ throw new Error('Circular parent-child relationship detected');
57
+ }
58
+ visited.add(current);
59
+
60
+ if (current === ancestor) {
61
+ return true;
62
+ }
63
+
64
+ current = current.parent;
65
+ }
66
+
67
+ return false;
68
+ }
69
+ ```
70
+
71
+ **Current Usage**: Single call site at `src/core/workflow.ts:293` in `attachChild()` method for circular reference detection.
72
+
73
+ **Test Coverage**: 25+ test cases covering:
74
+ - Basic circular reference detection
75
+ - Deep hierarchies (1000+ levels)
76
+ - Complex circular reference scenarios
77
+ - Performance validation
78
+
79
+ ### 2. User Needs Assessment
80
+
81
+ **Evidence from Codebase:**
82
+
83
+ #### Introspection Tools (Public Hierarchy Access)
84
+ ```typescript
85
+ // File: src/tools/introspection.ts
86
+ export const INTROSPECTION_TOOLS: Tool[] = [
87
+ inspectCurrentNodeTool, // "Where am I?" - shows depth, parent info
88
+ readAncestorChainTool, // "What's above me?" - full ancestor chain
89
+ listSiblingsChildrenTool, // "What's around me?" - siblings and children
90
+ // ... more tools
91
+ ];
92
+ ```
93
+
94
+ **Finding**: Introspection tools demonstrate clear user need for hierarchy navigation.
95
+
96
+ #### Example: Parent-Child Workflow Display
97
+ ```typescript
98
+ // File: examples/examples/03-parent-child.ts:222-231
99
+ console.log('Pipeline:', pipeline.id);
100
+ console.log(' Children (batches):', pipeline.children.length);
101
+ for (const batch of pipeline.children) {
102
+ console.log(` ${batch.getNode().name} - ${batch.children.length} items`);
103
+ for (const item of batch.children) {
104
+ console.log(` ${item.getNode().name} [${item.getNode().status}]`);
105
+ }
106
+ }
107
+ ```
108
+
109
+ **Finding**: Users are manually traversing hierarchy using `parent` and `children` properties.
110
+
111
+ #### Example: Ancestor Chain Query
112
+ ```typescript
113
+ // File: examples/examples/10-introspection.ts:186-207
114
+ const result = await handleReadAncestorChain({ maxDepth: 10 });
115
+ console.log(`Total depth: ${result.totalDepth}`);
116
+ console.log('Ancestors (from current to root):');
117
+ for (const ancestor of result.ancestors) {
118
+ console.log(` Depth ${ancestor.depth}: ${ancestor.name} [${ancestor.status}]`);
119
+ }
120
+ ```
121
+
122
+ **Finding**: Users want to query ancestry relationships programmatically.
123
+
124
+ **Use Cases Identified:**
125
+ 1. **Hierarchy Validation**: Check if a workflow belongs to a specific tree
126
+ 2. **Debugging**: Understand workflow position in hierarchy
127
+ 3. **Conditional Logic**: Execute code only if in specific hierarchy branch
128
+ 4. **Tree Verification**: Validate workflow tree structure
129
+
130
+ ### 3. Security Assessment
131
+
132
+ **Information Disclosure Comparison:**
133
+
134
+ | API | Information Exposed | Access | Risk Level |
135
+ |-----|-------------------|--------|------------|
136
+ | `workflow.parent` | Direct parent reference | Any `Workflow` | MEDIUM |
137
+ | `workflow.children` | All immediate children | Any `Workflow` | MEDIUM |
138
+ | `workflow.getNode()` | Full tree + logs + events + state | Any `Workflow` | HIGH |
139
+ | `read_ancestor_chain` | All ancestors to root | Execution context | MEDIUM |
140
+ | `isDescendantOf()` | Boolean relationship check | Would be public | LOW |
141
+
142
+ **Key Finding**: `isDescendantOf()` does NOT expose any new information. The `parent` and `children` properties are already public, allowing full tree traversal:
143
+
144
+ ```typescript
145
+ // Current attack (without isDescendantOf):
146
+ function isDescendant(current: Workflow, ancestor: Workflow): boolean {
147
+ let node = current;
148
+ while (node.parent) {
149
+ if (node.parent === ancestor) return true;
150
+ node = node.parent;
151
+ }
152
+ return false;
153
+ }
154
+
155
+ // With isDescendantOf (convenience, not new capability):
156
+ const isDesc = current.isDescendantOf(ancestor);
157
+ ```
158
+
159
+ **Risk Level**: **LOW** (no increase over current exposure)
160
+
161
+ **Mitigation**: Add security documentation warning applications to implement access control if exposing workflows via APIs.
162
+
163
+ ### 4. Industry Comparison
164
+
165
+ **Research Summary** (6 major workflow engines analyzed):
166
+
167
+ | System | Ancestry API | Access Control | Notes |
168
+ |--------|--------------|----------------|-------|
169
+ | **Apache Airflow** | No public API | RBAC (DAG-level) | `get_upstream()`/`get_downstream()` (immediate only) |
170
+ | **Temporal** | No public API | mTLS + API keys | Child workflows exist, but no ancestry checking |
171
+ | **Prefect** | No public API | Token auth | Focus on execution state, not topology |
172
+ | **Dagster** | Indirect only | Workspace isolation | `AssetSelection.upstream()`/`.downstream()` |
173
+ | **GitHub Actions** | No public API | GitHub auth | REST API for execution, not topology |
174
+ | **AWS Step Functions** | No public API | IAM permissions | State machines, execution history only |
175
+ | **Groundswell** | Would be public | App's responsibility | Unique in exposing explicit ancestry check |
176
+
177
+ **Finding**: Groundswell would be UNIQUE in exposing a public `isDescendantOf()` API. This is not an anti-pattern, but a differentiator.
178
+
179
+ **Industry Pattern**: Most systems handle ancestry checking internally or provide limited immediate relationship queries only.
180
+
181
+ ### 5. Implementation Cost Analysis
182
+
183
+ **Code Changes Required**:
184
+ 1. Change `private` to `public` at line 162
185
+ 2. Add JSDoc documentation with security warning
186
+ 3. No logic changes required
187
+
188
+ **Test Changes Required**:
189
+ 1. None - 25+ existing tests already cover the method
190
+
191
+ **Documentation Changes Required**:
192
+ 1. Add to API documentation with examples
193
+ 2. Add security warning to introspection-security-guide.md
194
+
195
+ **Estimated Effort**: 30 minutes
196
+
197
+ **Risk**: Very Low - method is already stable and battle-tested
198
+
199
+ ---
200
+
201
+ ## Recommendation
202
+
203
+ ### DECISION: MAKE PUBLIC
204
+
205
+ **Rationale:**
206
+
207
+ 1. **User Value**: Clear evidence of user need from introspection tools and examples
208
+ 2. **No Security Risk**: Does not expose new information beyond existing public APIs
209
+ 3. **Low Implementation Cost**: Simple visibility change; already tested
210
+ 4. **Competitive Differentiator**: No major workflow engine has this API
211
+ 5. **Ergonomics**: Cleaner than manual parent chain traversal
212
+
213
+ ### Safeguards Required
214
+
215
+ 1. **Documentation Warning**:
216
+ ```typescript
217
+ /**
218
+ * Check if this workflow is a descendant of the given ancestor workflow.
219
+ *
220
+ * @warning This method reveals workflow hierarchy information. If your
221
+ * application exposes workflows via an API, ensure you implement proper
222
+ * access control to prevent unauthorized topology discovery.
223
+ *
224
+ * @example Check ancestry before an operation
225
+ * ```typescript
226
+ * if (child.isDescendantOf(root)) {
227
+ * console.log('Child is in the root hierarchy');
228
+ * }
229
+ * ```
230
+ *
231
+ * @example Prevent circular operations
232
+ * ```typescript
233
+ * if (!newChild.isDescendantOf(parent)) {
234
+ * parent.attachChild(newChild);
235
+ * }
236
+ * ```
237
+ */
238
+ public isDescendantOf(ancestor: Workflow): boolean
239
+ ```
240
+
241
+ 2. **Update Security Documentation**:
242
+ - Add `isDescendantOf()` section to `introspection-security-guide.md`
243
+ - Document that hierarchy information is exposed
244
+ - Recommend application-level access control
245
+
246
+ 3. **Provide Usage Examples**:
247
+ - Add to API documentation
248
+ - Show common use cases (validation, debugging, conditional logic)
249
+
250
+ ---
251
+
252
+ ## Implementation Guidance for P1.M3.T4.S2
253
+
254
+ ### Step 1: Update Method Visibility
255
+
256
+ **File**: `src/core/workflow.ts`
257
+ **Line**: 162
258
+
259
+ **Change**:
260
+ ```typescript
261
+ // BEFORE:
262
+ private isDescendantOf(ancestor: Workflow): boolean {
263
+
264
+ // AFTER:
265
+ public isDescendantOf(ancestor: Workflow): boolean {
266
+ ```
267
+
268
+ ### Step 2: Add JSDoc Documentation
269
+
270
+ **File**: `src/core/workflow.ts`
271
+ **Lines**: 162-180
272
+
273
+ **Add before method**:
274
+ ```typescript
275
+ /**
276
+ * Check if this workflow is a descendant of the given ancestor workflow.
277
+ *
278
+ * Traverses the parent chain upward looking for the ancestor reference.
279
+ * Uses a visited Set to detect cycles during traversal.
280
+ *
281
+ * @warning This method reveals workflow hierarchy information. If your
282
+ * application exposes workflows via an API, ensure you implement proper
283
+ * access control to prevent unauthorized topology discovery.
284
+ *
285
+ * @example Check if a workflow belongs to a specific hierarchy
286
+ * ```typescript
287
+ * const root = new Workflow('root');
288
+ * const child = new Workflow('child', { parent: root });
289
+ *
290
+ * if (child.isDescendantOf(root)) {
291
+ * console.log('Child is in root hierarchy');
292
+ * }
293
+ * ```
294
+ *
295
+ * @example Validate before attaching to prevent circular references
296
+ * ```typescript
297
+ * if (!newChild.isDescendantOf(parent)) {
298
+ * parent.attachChild(newChild);
299
+ * } else {
300
+ * throw new Error('Would create circular reference');
301
+ * }
302
+ * ```
303
+ *
304
+ * @param ancestor - The potential ancestor workflow to check
305
+ * @returns true if ancestor is found in parent chain, false otherwise
306
+ * @throws {Error} If a cycle is detected during traversal
307
+ */
308
+ ```
309
+
310
+ ### Step 3: Update Security Documentation
311
+
312
+ **File**: `plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md`
313
+
314
+ **Add section**:
315
+ ```markdown
316
+ ## isDescendantOf() Method
317
+
318
+ The `isDescendantOf()` method allows checking if a workflow is a descendant of another workflow.
319
+
320
+ ### Information Exposed
321
+ - Boolean relationship check (true if descendant, false otherwise)
322
+ - Does NOT expose new information beyond `parent` and `children` properties
323
+
324
+ ### Security Considerations
325
+ - Reveals workflow hierarchy relationships
326
+ - Applications exposing workflows via APIs should implement access control
327
+ - Consider filtering hierarchy information for unauthenticated users
328
+
329
+ ### Mitigation Patterns
330
+ - Implement authentication before exposing workflow references
331
+ - Use filtered DTOs when returning workflow data via APIs
332
+ - Audit access to hierarchy information
333
+ ```
334
+
335
+ ### Step 4: Run Tests
336
+
337
+ **Verify**: All existing tests still pass
338
+
339
+ ```bash
340
+ # Run tests covering isDescendantOf
341
+ npm test -- circular-reference
342
+ npm test -- deep-hierarchy
343
+ npm test -- complex-circular-reference
344
+ npm test -- attachChild-performance
345
+
346
+ # Expected: All tests pass without modification
347
+ ```
348
+
349
+ ### Step 5: Update Type Exports (if needed)
350
+
351
+ **File**: `src/index.ts`
352
+
353
+ **Verify**: The `Workflow` class is already exported (no changes needed)
354
+
355
+ ```typescript
356
+ // Should already exist:
357
+ export { Workflow } from './core/workflow.js';
358
+ ```
359
+
360
+ ---
361
+
362
+ ## Alternative Considered: Keep Private
363
+
364
+ **If keeping private**, rationale would be:
365
+
366
+ 1. **Industry Alignment**: Most systems don't expose this
367
+ 2. **Minimal API Surface**: Smaller public API is easier to maintain
368
+ 3. **Workarounds Exist**: Users can manually traverse `parent` chain
369
+
370
+ **Why NOT chosen:**
371
+ - Workaround code is error-prone (forgetting cycle detection)
372
+ - User needs evidence shows demand for this functionality
373
+ - No security benefit (parent/children already public)
374
+ - Low cost to implement
375
+
376
+ ---
377
+
378
+ ## Next Steps for P1.M3.T4.S2
379
+
380
+ 1. **Review this recommendation** and confirm approval
381
+ 2. **Implement changes** following the implementation guidance above
382
+ 3. **Run tests** to verify no regressions
383
+ 4. **Update documentation** as specified
384
+ 5. **Create PR** with reference to this recommendation document
385
+
386
+ ---
387
+
388
+ ## References
389
+
390
+ ### Research Artifacts
391
+
392
+ - **External Research**: `P1M3T4S1/research/external_workflow_engines_research.md`
393
+ - Comprehensive comparison of 6 major workflow engines
394
+ - Specific URLs and code examples for each system
395
+
396
+ - **Security Analysis**: `P1M3T4S1/research/security_implications_analysis.md`
397
+ - Detailed security risk assessment
398
+ - Comparison with existing public APIs
399
+
400
+ ### Code References
401
+
402
+ - **Implementation**: `src/core/workflow.ts:162-180`
403
+ - **Usage Site**: `src/core/workflow.ts:293` (attachChild method)
404
+ - **Introspection Tools**: `src/tools/introspection.ts`
405
+ - **Examples**: `examples/10-introspection.ts`, `examples/03-parent-child.ts`
406
+
407
+ ### Documentation References
408
+
409
+ - **PRD**: `PRD.md` - Section on WorkflowNode hierarchy
410
+ - **Security Guide**: `plan/.../introspection-security-guide.md`
411
+ - **Bug Fix Tasks**: `plan/.../bug_fix_tasks.json` - P1.M3.T4 task definition
412
+
413
+ ---
414
+
415
+ **Document Prepared By**: P1.M3.T4.S1 Research Task
416
+ **Review Required By**: P1.M3.T4.S2 Implementation Task
417
+ **Final Approval**: Technical Lead / Project Maintainer