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,564 @@
1
+ # PRP: P1.M2.T2.S1 - Add errorMergeStrategy to TaskOptions Interface
2
+
3
+ ---
4
+
5
+ ## Goal
6
+
7
+ **Feature Goal**: Extend the `TaskOptions` interface to include `errorMergeStrategy?: ErrorMergeStrategy` field, enabling configuration of concurrent error aggregation behavior in the @Task decorator.
8
+
9
+ **Deliverable**: Modified `src/types/decorators.ts` with:
10
+ 1. Import statement for `ErrorMergeStrategy` type
11
+ 2. New optional `errorMergeStrategy` field added to `TaskOptions` interface
12
+ 3. TypeScript compilation successful with no type errors
13
+
14
+ **Success Definition**:
15
+ - TypeScript compiler (`tsc --noEmit`) completes without errors
16
+ - `TaskOptions` interface includes the new field with correct type annotation
17
+ - Export of `TaskOptions` from `src/types/index.ts` continues to work
18
+ - The field is properly optional (can be omitted when using @Task decorator)
19
+
20
+ ---
21
+
22
+ ## User Persona (if applicable)
23
+
24
+ **Target User**: Library Developer / Architect
25
+
26
+ **Use Case**: A developer implementing concurrent workflow tasks needs to configure how multiple errors from failed concurrent operations should be merged and propagated.
27
+
28
+ **User Journey**:
29
+ 1. Developer reads @Task decorator documentation
30
+ 2. Developer discovers `errorMergeStrategy` option in TaskOptions
31
+ 3. Developer passes `errorMergeStrategy` configuration to @Task decorator
32
+ 4. Concurrent task failures are aggregated according to the specified strategy
33
+
34
+ **Pain Points Addressed**:
35
+ - Currently no way to configure error merging for concurrent tasks
36
+ - ErrorMergeStrategy type exists but is completely unused (zero imports in codebase)
37
+ - Developers cannot opt-in to multi-error aggregation behavior
38
+
39
+ ---
40
+
41
+ ## Why
42
+
43
+ - **Architectural Foundation**: This change enables P1.M2.T2.S2 (implement error aggregation logic in @Task decorator). Without this field, there is no configuration hook to pass ErrorMergeStrategy into the decorator.
44
+ - **PRD Compliance**: PRD Section 10 specifies "Optional Multi-Error Merging" as a feature. The type exists but has no implementation path.
45
+ - **Backward Compatibility**: Adding an optional field maintains existing behavior (undefined = default behavior unchanged) while enabling future functionality.
46
+ - **Dependency Chain**: This is the first subtask in P1.M2.T2, the parent task depends on this interface change being complete before error aggregation logic can be implemented.
47
+
48
+ ---
49
+
50
+ ## What
51
+
52
+ Add `errorMergeStrategy?: ErrorMergeStrategy` field to the `TaskOptions` interface in `src/types/decorators.ts`.
53
+
54
+ ### Current State
55
+ ```typescript
56
+ // src/types/decorators.ts
57
+ export interface TaskOptions {
58
+ /** Custom task name (defaults to method name) */
59
+ name?: string;
60
+ /** If true, run returned workflows concurrently */
61
+ concurrent?: boolean;
62
+ }
63
+ ```
64
+
65
+ ### Target State
66
+ ```typescript
67
+ // src/types/decorators.ts
68
+ import type { ErrorMergeStrategy } from './error-strategy.js';
69
+
70
+ export interface TaskOptions {
71
+ /** Custom task name (defaults to method name) */
72
+ name?: string;
73
+ /** If true, run returned workflows concurrently */
74
+ concurrent?: boolean;
75
+ /** Strategy for merging errors from concurrent task execution */
76
+ errorMergeStrategy?: ErrorMergeStrategy;
77
+ }
78
+ ```
79
+
80
+ ### Success Criteria
81
+
82
+ - [ ] `import type { ErrorMergeStrategy } from './error-strategy.js';` added at top of file
83
+ - [ ] `errorMergeStrategy?: ErrorMergeStrategy;` field added to TaskOptions interface
84
+ - [ ] Field placed after `concurrent` (maintains logical ordering)
85
+ - [ ] JSDoc comment included: `/** Strategy for merging errors from concurrent task execution */`
86
+ - [ ] TypeScript compilation succeeds: `npx tsc --noEmit`
87
+ - [ ] No linting errors: `npm run lint` (if available)
88
+ - [ ] Export verification: `TaskOptions` still exports correctly from `src/types/index.ts`
89
+
90
+ ---
91
+
92
+ ## All Needed Context
93
+
94
+ ### Context Completeness Check
95
+
96
+ **"No Prior Knowledge" Test**: If someone knew nothing about this codebase, would they have everything needed to implement this successfully?
97
+
98
+ - [X] Exact file path and current content of target file (`src/types/decorators.ts`)
99
+ - [X] Exact definition of type to import (`ErrorMergeStrategy` from `src/types/error-strategy.ts`)
100
+ - [X] Import syntax pattern used in codebase (`import type` with `.js` extension)
101
+ - [X] JSDoc comment formatting pattern from existing code
102
+ - [X] Validation commands that work in this project
103
+
104
+ ### Documentation & References
105
+
106
+ ```yaml
107
+ # MUST READ - Include these in your context window
108
+
109
+ - file: src/types/decorators.ts
110
+ why: Target file to modify - contains TaskOptions interface that needs the new field
111
+ pattern: Interface definition with optional fields using `?` syntax, JSDoc comments above each field
112
+ gotcha: File uses no imports currently - this will be the first import added
113
+ current_content: |
114
+ export interface StepOptions {
115
+ name?: string;
116
+ snapshotState?: boolean;
117
+ trackTiming?: boolean;
118
+ logStart?: boolean;
119
+ logFinish?: boolean;
120
+ }
121
+
122
+ export interface TaskOptions {
123
+ name?: string;
124
+ concurrent?: boolean;
125
+ }
126
+
127
+ - file: src/types/error-strategy.ts
128
+ why: Contains the ErrorMergeStrategy interface definition that needs to be imported
129
+ pattern: Type-only import with `.js` extension (TypeScript module resolution)
130
+ gotcha: The file itself imports WorkflowError from './error.js'
131
+ current_content: |
132
+ import type { WorkflowError } from './error.js';
133
+
134
+ export interface ErrorMergeStrategy {
135
+ /** Enable error merging (default: false, first error wins) */
136
+ enabled: boolean;
137
+ /** Maximum depth to merge errors */
138
+ maxMergeDepth?: number;
139
+ /** Custom function to combine multiple errors */
140
+ combine?(errors: WorkflowError[]): WorkflowError;
141
+ }
142
+
143
+ - file: src/types/index.ts
144
+ why: Central export barrel - verify TaskOptions export continues to work
145
+ pattern: Re-exports using `export type { TaskOptions } from './decorators.js';`
146
+ gotcha: This file already exports both StepOptions and TaskOptions from decorators.ts
147
+
148
+ - docfile: plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md
149
+ why: Architectural context explaining why ErrorMergeStrategy exists but isn't used
150
+ section: Lines 101-105 ("Status: Defined But Unused"), Lines 163-168 ("Recommended Extension")
151
+ critical: |
152
+ - ErrorMergeStrategy is exported from src/index.ts
153
+ - ZERO imports anywhere in implementation files
154
+ - Only appears in type definitions and documentation
155
+ - TaskOptions interface does not include errorMergeStrategy property
156
+ - @Task decorator has no way to receive ErrorMergeStrategy configuration
157
+
158
+ - url: https://www.typescriptlang.org/docs/handbook/2/objects.html#optional-properties
159
+ why: TypeScript official documentation on optional properties syntax
160
+ section: Optional Properties section
161
+ critical: Use `propertyName?: Type` syntax for optional fields
162
+
163
+ - url: https://www.typescriptlang.org/docs/handbook/modules.html#importing-types
164
+ why: TypeScript official documentation on type-only imports
165
+ section: Importing Types section
166
+ critical: Use `import type { TypeName } from './module.js';` for type-only imports
167
+
168
+ - file: src/types/workflow-context.ts
169
+ why: Example of proper type import pattern in codebase
170
+ pattern: Lines 8-9 show `import type { WorkflowNode } from './workflow.js';`
171
+ gotcha: All type imports in this codebase use `.js` extension (TypeScript module resolution to .js files)
172
+
173
+ - file: src/types/agent.ts
174
+ why: Example of optional configuration interface pattern similar to TaskOptions
175
+ pattern: AgentConfig interface shows multiple optional boolean and complex type fields
176
+ gotcha: Optional fields for feature flags and configuration options follow consistent naming
177
+ ```
178
+
179
+ ### Current Codebase Tree
180
+
181
+ ```bash
182
+ /home/dustin/projects/groundswell
183
+ ├── plan/
184
+ │ └── 001_d3bb02af4886/
185
+ │ └── bugfix/
186
+ │ └── 001_e8e04329daf3/
187
+ │ ├── architecture/
188
+ │ │ └── error_handling_patterns.md # READ: Architectural context
189
+ │ ├── P1M2T2S1/
190
+ │ │ ├── research/ # External research storage
191
+ │ │ └── PRP.md # ← CREATE THIS FILE
192
+ │ └── docs/
193
+ ├── src/
194
+ │ ├── types/
195
+ │ │ ├── decorators.ts # ← MODIFY: Add field here
196
+ │ │ ├── error-strategy.ts # READ: ErrorMergeStrategy definition
197
+ │ │ ├── error.ts # REFERENCE: WorkflowError type
198
+ │ │ └── index.ts # VERIFY: Export still works
199
+ │ ├── decorators/
200
+ │ │ └── task.ts # FUTURE: Will use this field (P1.M2.T2.S2)
201
+ └── tsconfig.json # REFERENCE: TypeScript config
202
+ ```
203
+
204
+ ### Desired Codebase Tree with Files to be Modified
205
+
206
+ ```bash
207
+ # No new files - modification only
208
+ # Modified: src/types/decorators.ts
209
+ # - Add: import type { ErrorMergeStrategy } from './error-strategy.js';
210
+ # - Add: errorMergeStrategy?: ErrorMergeStrategy; field to TaskOptions interface
211
+ ```
212
+
213
+ ### Known Gotchas of Our Codebase & Library Quirks
214
+
215
+ ```typescript
216
+ // CRITICAL: TypeScript Module Resolution
217
+ // This codebase uses .js extensions in import statements even though source files are .ts
218
+ // This is because TypeScript compiles to .js and the import paths reflect the output structure
219
+ // WRONG: import type { ErrorMergeStrategy } from './error-strategy';
220
+ // CORRECT: import type { ErrorMergeStrategy } from './error-strategy.js';
221
+
222
+ // CRITICAL: Type-Only Imports
223
+ // This codebase consistently uses 'import type' for type imports, not regular imports
224
+ // WRONG: import { ErrorMergeStrategy } from './error-strategy.js';
225
+ // CORRECT: import type { ErrorMergeStrategy } from './error-strategy.js';
226
+
227
+ // CRITICAL: No Interface Extension Pattern
228
+ // This codebase does NOT use 'interface Child extends Parent'
229
+ // Types remain independent and reference each other through imports
230
+ // This avoids circular dependencies in complex type graphs
231
+
232
+ // CRITICAL: JSDoc Comment Format
233
+ // Each field in the interface has a JSDoc comment above it
234
+ // Use /** ... */ syntax (not // comments)
235
+ // Comment format: /** [Brief description of what the field does] */
236
+
237
+ // CRITICAL: Optional Field Ordering
238
+ // Existing TaskOptions fields: name, concurrent
239
+ // Add new field after existing fields (maintains append pattern)
240
+ // Keep related fields grouped (errorMergeStrategy relates to concurrent)
241
+
242
+ // CRITICAL: This File Currently Has No Imports
243
+ // src/types/decorators.ts is standalone - this will be its FIRST import
244
+ // Verify the import is placed at the very top of the file, before any interface definitions
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Implementation Blueprint
250
+
251
+ ### Data Models and Structure
252
+
253
+ No new data models needed. Using existing types:
254
+ - `ErrorMergeStrategy` from `src/types/error-strategy.ts` (already defined)
255
+ - `TaskOptions` from `src/types/decorators.ts` (being extended)
256
+
257
+ ### Implementation Tasks (ordered by dependencies)
258
+
259
+ ```yaml
260
+ Task 1: ADD import statement to src/types/decorators.ts
261
+ - ADD: import type { ErrorMergeStrategy } from './error-strategy.js';
262
+ - PLACEMENT: Top of file, before any interface definitions
263
+ - PATTERN: Follow src/types/workflow-context.ts import pattern (lines 8-9)
264
+ - SYNTAX: Use 'import type' for type-only import
265
+ - EXTENSION: Must use '.js' extension (TypeScript module resolution)
266
+ - DEPENDENCIES: None (first task)
267
+
268
+ Task 2: MODIFY TaskOptions interface in src/types/decorators.ts
269
+ - ADD: errorMergeStrategy?: ErrorMergeStrategy; field
270
+ - PLACEMENT: After 'concurrent?: boolean;' field
271
+ - JSDOC: /** Strategy for merging errors from concurrent task execution */
272
+ - PATTERN: Follow existing field format (name + JSDoc above, same indentation)
273
+ - TYPE: ErrorMergeStrategy (imported in Task 1)
274
+ - OPTIONAL: Use '?' to make field optional (backward compatibility)
275
+ - DEPENDENCIES: Task 1 must complete first
276
+
277
+ Task 3: VERIFY TypeScript compilation
278
+ - RUN: npx tsc --noEmit
279
+ - EXPECTED: No errors, clean compilation
280
+ - VERIFY: TaskOptions type includes new field
281
+ - DEPENDENCIES: Task 1 and Task 2 complete
282
+ ```
283
+
284
+ ### Implementation Patterns & Key Details
285
+
286
+ ```typescript
287
+ // FILE: src/types/decorators.ts
288
+ // This is the complete target file after modification
289
+
290
+ // ============================================================================
291
+ // IMPORTS (new - this file previously had no imports)
292
+ // ============================================================================
293
+ import type { ErrorMergeStrategy } from './error-strategy.js';
294
+
295
+ // ============================================================================
296
+ // STEP OPTIONS (unchanged - for reference)
297
+ // ============================================================================
298
+ /**
299
+ * Configuration options for @Step decorator
300
+ */
301
+ export interface StepOptions {
302
+ /** Custom step name (defaults to method name) */
303
+ name?: string;
304
+ /** If true, capture state snapshot after step completion */
305
+ snapshotState?: boolean;
306
+ /** Track and emit step duration (default: true) */
307
+ trackTiming?: boolean;
308
+ /** If true, log message at step start */
309
+ logStart?: boolean;
310
+ /** If true, log message at step end */
311
+ logFinish?: boolean;
312
+ }
313
+
314
+ // ============================================================================
315
+ // TASK OPTIONS (modified - new field added)
316
+ // ============================================================================
317
+ /**
318
+ * Configuration options for @Task decorator
319
+ *
320
+ * @note The decorator uses lenient validation - non-Workflow returns are
321
+ * silently skipped. See the @Task decorator JSDoc for details.
322
+ */
323
+ export interface TaskOptions {
324
+ /** Custom task name (defaults to method name) */
325
+ name?: string;
326
+ /** If true, run returned workflows concurrently */
327
+ concurrent?: boolean;
328
+ /** Strategy for merging errors from concurrent task execution */
329
+ errorMergeStrategy?: ErrorMergeStrategy;
330
+ }
331
+
332
+ // ============================================================================
333
+ // PATTERN NOTES
334
+ // ============================================================================
335
+ // 1. Import is type-only: 'import type { ... }'
336
+ // 2. Import uses .js extension: './error-strategy.js'
337
+ // 3. Import is at top of file, before any code
338
+ // 4. New field uses '?' for optional
339
+ // 5. New field has JSDoc comment above (same format as other fields)
340
+ // 6. New field placed after existing fields (append pattern)
341
+ // 7. Indentation matches existing code (2 spaces)
342
+ ```
343
+
344
+ ### Integration Points
345
+
346
+ ```yaml
347
+ TYPE_SYSTEM:
348
+ - verify: "TaskOptions export from src/types/index.ts still works"
349
+ - verify: "TypeScript compiler recognizes the new field"
350
+ - verify: "Type inference works when using @Task decorator with new option"
351
+
352
+ FUTURE_INTEGRATION:
353
+ - reference: "src/decorators/task.ts will read this field in P1.M2.T2.S2"
354
+ - reference: "ErrorMergeStrategy.combine() will be called during error aggregation"
355
+ - reference: "Promise.allSettled implementation will check this field (P1.M2.T1.S2)"
356
+ ```
357
+
358
+ ---
359
+
360
+ ## Validation Loop
361
+
362
+ ### Level 1: Syntax & Style (Immediate Feedback)
363
+
364
+ ```bash
365
+ # Run after file modification - fix before proceeding
366
+
367
+ # TypeScript type checking
368
+ npx tsc --noEmit
369
+
370
+ # Expected: Zero errors. Output should be silent with exit code 0.
371
+
372
+ # If you see errors like:
373
+ # - "Cannot find module './error-strategy.js'" → Check the import path and .js extension
374
+ # - "Duplicate identifier" → Check for accidental duplicate field or interface declaration
375
+ # - "Property 'errorMergeStrategy' does not exist" → Check field name and type spelling
376
+
377
+ # Linting (if project has linting configured)
378
+ npm run lint 2>/dev/null || npx eslint src/types/decorators.ts 2>/dev/null || echo "No linter configured"
379
+
380
+ # Expected: Zero linting errors. If ESLint is configured, it should pass.
381
+ ```
382
+
383
+ ### Level 2: Unit Tests (Component Validation)
384
+
385
+ ```bash
386
+ # Verify TaskOptions type exports correctly
387
+ node -e "
388
+ const ts = require('typescript');
389
+ const program = ts.createProgram('./src/types/decorators.ts', { module: ts.ModuleKind.ESNext });
390
+ const source = program.getSourceFile('./src/types/decorators.ts');
391
+ console.log('File parsed successfully');
392
+ console.log('Exports:', source.statements.filter(s => s.modifiers?.some(m => m.kind === 83)).map(s => s.name.text));
393
+ " 2>/dev/null || echo "TypeScript API test skipped"
394
+
395
+ # Manual type verification using TypeScript compiler API
396
+ cat > /tmp/test-taskoptions-type.ts << 'EOF'
397
+ import type { TaskOptions } from './src/types/decorators.js';
398
+ import type { ErrorMergeStrategy } from './src/types/error-strategy.js';
399
+
400
+ // This should compile without errors
401
+ const options1: TaskOptions = {};
402
+ const options2: TaskOptions = { name: 'myTask' };
403
+ const options3: TaskOptions = { concurrent: true };
404
+ const options4: TaskOptions = { errorMergeStrategy: { enabled: true } };
405
+ const options5: TaskOptions = {
406
+ name: 'myTask',
407
+ concurrent: true,
408
+ errorMergeStrategy: {
409
+ enabled: true,
410
+ maxMergeDepth: 5,
411
+ combine: (errors) => errors[0]
412
+ }
413
+ };
414
+
415
+ // This should fail type checking (uncomment to verify error handling)
416
+ // const invalid: TaskOptions = { errorMergeStrategy: 'not an object' };
417
+
418
+ console.log('All type checks passed!');
419
+ EOF
420
+
421
+ npx tsc --noEmit /tmp/test-taskoptions-type.ts
422
+
423
+ # Expected: Zero errors. All test cases should compile successfully.
424
+ ```
425
+
426
+ ### Level 3: Integration Testing (System Validation)
427
+
428
+ ```bash
429
+ # Verify export chain from src/types/index.ts
430
+ cat > /tmp/test-export.ts << 'EOF'
431
+ // Test that TaskOptions still exports correctly
432
+ import type { TaskOptions } from './src/types/index.js';
433
+
434
+ const test: TaskOptions = {
435
+ concurrent: true,
436
+ errorMergeStrategy: { enabled: true }
437
+ };
438
+
439
+ console.log('TaskOptions export verified:', test);
440
+ EOF
441
+
442
+ npx tsc --noEmit /tmp/test-export.ts
443
+
444
+ # Expected: Zero errors. Export chain should work.
445
+
446
+ # Verify no breaking changes to existing code
447
+ # (This ensures backward compatibility - existing @Task usage still works)
448
+ grep -r "@Task" src/ --include="*.ts" | grep -v "node_modules" | head -5
449
+
450
+ # Expected: Existing @Task decorator usage should still be valid.
451
+ # The new field is optional, so all existing usage is unaffected.
452
+ ```
453
+
454
+ ### Level 4: Domain-Specific Validation
455
+
456
+ ```bash
457
+ # Type shape verification - ensure ErrorMergeStrategy type is correctly imported
458
+ cat > /tmp/test-type-shape.ts << 'EOF'
459
+ import type { TaskOptions } from './src/types/decorators.js';
460
+ import type { ErrorMergeStrategy } from './src/types/error-strategy.js';
461
+
462
+ // Verify the type shape matches expectations
463
+ const testStrategy: ErrorMergeStrategy = {
464
+ enabled: true,
465
+ maxMergeDepth: 10,
466
+ combine: (errors) => errors[0]
467
+ };
468
+
469
+ const testOptions: TaskOptions = {
470
+ errorMergeStrategy: testStrategy
471
+ };
472
+
473
+ // Type-level test: ensure the field is actually optional
474
+ const optionalTest: TaskOptions = {}; // Should work - all fields optional
475
+
476
+ console.log('Type shape verification passed');
477
+ EOF
478
+
479
+ npx tsc --noEmit /tmp/test-type-shape.ts
480
+
481
+ # Expected: Zero errors. Type shape should match ErrorMergeStrategy interface.
482
+
483
+ # Verify module resolution (the .js extension in imports)
484
+ node -e "console.log('Module resolution test: OK')" 2>/dev/null
485
+
486
+ # Check for any circular dependency issues
487
+ npx tsc --noEmit --listFiles /tmp/test-type-shape.ts 2>&1 | grep -i "circular\|cycle" || echo "No circular dependencies detected"
488
+
489
+ # Expected: No circular dependency warnings.
490
+ ```
491
+
492
+ ---
493
+
494
+ ## Final Validation Checklist
495
+
496
+ ### Technical Validation
497
+
498
+ - [ ] TypeScript compilation succeeds: `npx tsc --noEmit` (zero errors)
499
+ - [ ] Import statement uses `import type` syntax (not regular import)
500
+ - [ ] Import statement uses `.js` extension (not `.ts`)
501
+ - [ ] Field is optional (`errorMergeStrategy?: ErrorMergeStrategy`)
502
+ - [ ] Field type is `ErrorMergeStrategy` (exact interface name)
503
+ - [ ] JSDoc comment included above the field
504
+ - [ ] Export from `src/types/index.ts` still works
505
+ - [ ] No circular dependencies introduced
506
+
507
+ ### Feature Validation
508
+
509
+ - [ ] `TaskOptions` interface has exactly 3 fields: name, concurrent, errorMergeStrategy
510
+ - [ ] Field ordering is logical (errorMergeStrategy after concurrent)
511
+ - [ ] All existing @Task decorator usage still compiles (backward compatibility)
512
+ - [ ] New field can be used with ErrorMergeStrategy objects
513
+ - [ ] Type inference works correctly when field is provided
514
+
515
+ ### Code Quality Validation
516
+
517
+ - [ ] Follows existing codebase patterns (JSDoc format, indentation, naming)
518
+ - [ ] File placement unchanged (still in src/types/decorators.ts)
519
+ - [ ] No additional changes beyond the specified field and import
520
+ - [ ] No anti-patterns introduced (no interface extension, no circular deps)
521
+
522
+ ### Documentation & Deployment
523
+
524
+ - [ ] PRP is self-documenting with clear step-by-step instructions
525
+ - [ ] All file references include exact paths
526
+ - [ ] All gotchas are documented for future reference
527
+ - [ ] Validation commands are project-specific and executable
528
+
529
+ ---
530
+
531
+ ## Anti-Patterns to Avoid
532
+
533
+ - ❌ **Don't use regular import**: Use `import type { ErrorMergeStrategy }` not `import { ErrorMergeStrategy }`
534
+ - ❌ **Don't use .ts extension**: Use `./error-strategy.js` not `./error-strategy.ts` in imports
535
+ - ❌ **Don't make field required**: Use `errorMergeStrategy?:` not `errorMergeStrategy:` (must be optional for backward compatibility)
536
+ - ❌ **Don't skip JSDoc**: Add comment above the field like other fields have
537
+ - ❌ **Don't use interface extension**: Don't do `interface ExtendedTaskOptions extends TaskOptions` - modify TaskOptions directly
538
+ - ❌ **Don't place import in middle of file**: Import must be at top of file, before interface definitions
539
+ - ❌ **Don't change existing fields**: Only add the new field, don't modify name or concurrent fields
540
+ - ❌ **Don't forget .js extension**: TypeScript module resolution requires .js in source imports
541
+
542
+ ---
543
+
544
+ ## Success Metrics
545
+
546
+ **Confidence Score**: 10/10
547
+
548
+ **Validation Rationale**:
549
+ 1. **Single File Modification**: Only one file needs changes (`src/types/decorators.ts`)
550
+ 2. **Simple Change**: Add import + add field (2 lines of code)
551
+ 3. **Clear Type Definition**: ErrorMergeStrategy is already well-defined
552
+ 4. **No Runtime Impact**: This is a type-only change, no runtime behavior changes
553
+ 5. **Backward Compatible**: Optional field means all existing code continues to work
554
+ 6. **Well-Researched**: All patterns and gotchas documented from codebase analysis
555
+ 7. **Clear Validation**: TypeScript compiler provides immediate feedback
556
+
557
+ **One-Pass Implementation Success Factors**:
558
+ - Exact file path and current content provided
559
+ - Exact type definition to import provided
560
+ - Import syntax pattern documented with examples
561
+ - JSDoc format pattern documented
562
+ - Validation commands that work in this project
563
+ - All gotchas documented (module resolution, type-only imports, no extension pattern)
564
+ - Success criteria is specific and measurable