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.
- package/.claude/commands/subtask-planning/prp-base-create.md +120 -0
- package/.claude/commands/subtask-planning/prp-base-execute.md +65 -0
- package/.claude/commands/task-breakdown.md +94 -0
- package/.claude/system_prompts/task-breakdown.md +1 -0
- package/CHANGELOG.md +188 -0
- package/PRD.md +543 -0
- package/README.md +99 -5
- package/examples/README.md +15 -1
- package/examples/examples/11-reparenting-workflows.ts +269 -0
- package/examples/index.ts +4 -0
- package/package-lock.json +2398 -0
- package/package.json +3 -1
- package/plan/001_d3bb02af4886/TEST_RESULTS.md +259 -0
- package/plan/001_d3bb02af4886/bug_fix_tasks.json +484 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +488 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +581 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +687 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +492 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +932 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +1109 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +802 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +603 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +564 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +518 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +1252 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +364 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +114 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +205 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +199 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +134 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +495 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +435 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +506 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +612 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +558 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +788 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +460 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +454 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +520 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +417 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +760 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +245 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +792 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +535 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +190 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +654 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +227 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +345 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +193 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +1323 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +1011 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +927 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +505 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +401 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +142 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +112 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +159 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +549 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +368 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +172 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +175 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +696 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +860 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +1066 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +1103 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +789 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +1098 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +1037 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +916 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +1045 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +890 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +822 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +668 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +706 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +265 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +655 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +1103 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +426 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +506 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +114 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +316 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +754 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +612 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +719 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +215 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +765 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +718 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +149 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +470 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +332 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +167 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +265 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +273 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +760 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +434 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +717 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +472 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +125 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +301 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +1170 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +940 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +151 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +650 -0
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +259 -0
- package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +457 -0
- package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +346 -0
- package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +311 -0
- package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +1565 -0
- package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +288 -0
- package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +741 -0
- package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +652 -0
- package/plan/001_d3bb02af4886/docs/PRP/PRP.md +527 -0
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +415 -0
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +378 -0
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +713 -0
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +370 -0
- package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +499 -0
- package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +230 -0
- package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +1134 -0
- package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +179 -0
- package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +629 -0
- package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +214 -0
- package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +629 -0
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +529 -0
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +142 -0
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +304 -0
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +558 -0
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +256 -0
- package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +346 -0
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +415 -0
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +489 -0
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +218 -0
- package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +380 -0
- package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +1923 -0
- package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +319 -0
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +115 -0
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +134 -0
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +153 -0
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +132 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +716 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +186 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +604 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +213 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +30 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +56 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +53 -0
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +49 -0
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +958 -0
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +339 -0
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +305 -0
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +433 -0
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +1574 -0
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +1014 -0
- package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +376 -0
- package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +1507 -0
- package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +949 -0
- package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +619 -0
- package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +723 -0
- package/plan/{research → 001_d3bb02af4886/docs/research/general}/introspection-security-guide.md +56 -0
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +460 -0
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +324 -0
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +175 -0
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +499 -0
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +163 -0
- package/plan/bugfix/BUG_FIX_SUMMARY.md +961 -0
- package/src/__tests__/adversarial/attachChild-performance.test.ts +216 -0
- package/src/__tests__/adversarial/circular-reference.test.ts +101 -0
- package/src/__tests__/adversarial/complex-circular-reference.test.ts +139 -0
- package/src/__tests__/adversarial/concurrent-task-failures.test.ts +571 -0
- package/src/__tests__/adversarial/deep-analysis.test.ts +729 -0
- package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +213 -0
- package/src/__tests__/adversarial/e2e-prd-validation.test.ts +448 -0
- package/src/__tests__/adversarial/edge-case.test.ts +703 -0
- package/src/__tests__/adversarial/error-merge-strategy.test.ts +760 -0
- package/src/__tests__/adversarial/incremental-performance.test.ts +140 -0
- package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +457 -0
- package/src/__tests__/adversarial/observer-propagation.test.ts +487 -0
- package/src/__tests__/adversarial/parent-validation.test.ts +143 -0
- package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +611 -0
- package/src/__tests__/adversarial/prd-compliance.test.ts +731 -0
- package/src/__tests__/compatibility/backward-compatibility.test.ts +1572 -0
- package/src/__tests__/helpers/index.ts +18 -0
- package/src/__tests__/helpers/tree-verification.ts +257 -0
- package/src/__tests__/integration/bidirectional-consistency.test.ts +847 -0
- package/src/__tests__/integration/observer-logging.test.ts +643 -0
- package/src/__tests__/integration/tree-mirroring.test.ts +37 -0
- package/src/__tests__/integration/workflow-reparenting.test.ts +303 -0
- package/src/__tests__/unit/context.test.ts +79 -0
- package/src/__tests__/unit/logger.test.ts +293 -0
- package/src/__tests__/unit/observable.test.ts +321 -0
- package/src/__tests__/unit/tree-debugger-incremental.test.ts +170 -0
- package/src/__tests__/unit/utils/workflow-error-utils.test.ts +209 -0
- package/src/__tests__/unit/workflow-detachChild.test.ts +100 -0
- package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +153 -0
- package/src/__tests__/unit/workflow-isDescendantOf.test.ts +180 -0
- package/src/__tests__/unit/workflow.test.ts +277 -1
- package/src/core/agent.ts +21 -1
- package/src/core/logger.ts +27 -2
- package/src/core/workflow-context.ts +6 -4
- package/src/core/workflow.ts +252 -14
- package/src/debugger/tree-debugger.ts +52 -7
- package/src/decorators/task.ts +65 -2
- package/src/index.ts +4 -2
- package/src/types/decorators.ts +8 -1
- package/src/types/events.ts +1 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/observable.ts +32 -3
- package/src/utils/workflow-error-utils.ts +56 -0
- package/tsconfig.json +1 -1
- package/llms_full.txt +0 -5890
- package/tasks.json +0 -0
- /package/plan/{backlog.json → 001_d3bb02af4886/backlog.json} +0 -0
- /package/plan/{P1P2/PRP.md → 001_d3bb02af4886/docs/PRP/P1P2-PRP.md} +0 -0
- /package/plan/{P3P4/PRP.md → 001_d3bb02af4886/docs/PRP/P3P4-PRP.md} +0 -0
- /package/plan/{P4P5/PRP.md → 001_d3bb02af4886/docs/PRP/P4P5-PRP.md} +0 -0
- /package/plan/{architecture → 001_d3bb02af4886/docs/architecture}/external_deps.md +0 -0
- /package/plan/{architecture → 001_d3bb02af4886/docs/architecture}/system_context.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_BEST_PRACTICES.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_CODE_PATTERNS.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_INTEGRATION_GUIDE.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/LRU_CACHE_RESEARCH_INDEX.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/REFLECTION_INDEX.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/REFLECTION_RESEARCH_REPORT.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/RESEARCH_SUMMARY.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/anthropic-sdk.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/async-local-storage.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-code-patterns.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-decision-matrix.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-implementation-guide.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-integration-guide.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-patterns.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/reflection-quick-reference.md +0 -0
- /package/plan/{P1P2/research → 001_d3bb02af4886/docs/research/P1P2}/zod-schema.md +0 -0
- /package/plan/{P3P4/research → 001_d3bb02af4886/docs/research/P3P4}/caching-lru.md +0 -0
- /package/plan/{P3P4/research → 001_d3bb02af4886/docs/research/P3P4}/introspection-tools.md +0 -0
- /package/plan/{P3P4/research → 001_d3bb02af4886/docs/research/P3P4}/reflection-patterns.md +0 -0
- /package/plan/{P4P5/research → 001_d3bb02af4886/docs/research/P4P5}/RESEARCH_SUMMARY.md +0 -0
- /package/plan/{research → 001_d3bb02af4886/docs/research/general}/INTROSPECTION_RESEARCH_SUMMARY.md +0 -0
- /package/plan/{research → 001_d3bb02af4886/docs/research/general}/README-INTROSPECTION.md +0 -0
- /package/plan/{research → 001_d3bb02af4886/docs/research/general}/agent-introspection-patterns.md +0 -0
- /package/plan/{research → 001_d3bb02af4886/docs/research/general}/introspection-tool-examples.md +0 -0
- /package/{PRPs/PRDs/001-hierarchical-workflow-engine.md → plan/001_d3bb02af4886/prd_snapshot.md} +0 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# PRP: Write test for cycle detection in getRootObservers()
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
**Feature Goal**: Write a unit test that validates the cycle detection mechanism in the `getRootObservers()` private method prevents infinite loops from circular parent-child relationships.
|
|
8
|
+
|
|
9
|
+
**Deliverable**: A single test case added to `/home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts` that verifies `getRootObservers()` throws an error when a circular parent-child relationship is detected.
|
|
10
|
+
|
|
11
|
+
**Success Definition**:
|
|
12
|
+
- New test passes when run with `npm test`
|
|
13
|
+
- Test follows the exact pattern of the existing `getRoot()` cycle detection test (P1.M2.T1.S2)
|
|
14
|
+
- Test validates the same error message: `'Circular parent-child relationship detected'`
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## All Needed Context
|
|
19
|
+
|
|
20
|
+
### Context Completeness Check
|
|
21
|
+
|
|
22
|
+
✅ **Passes "No Prior Knowledge" test**: This PRP provides complete file paths, line numbers, existing test code to replicate, implementation details, and exact test patterns to follow.
|
|
23
|
+
|
|
24
|
+
### Documentation & References
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
# MUST READ - Existing Test Pattern (Template to Follow)
|
|
28
|
+
- file: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
|
|
29
|
+
lines: 209-223
|
|
30
|
+
why: Complete reference test for cycle detection (getRoot() test from P1.M2.T1.S2)
|
|
31
|
+
pattern: Use this exact structure - Arrange/Act/Assert with circular reference creation
|
|
32
|
+
gotcha: getRootObservers() is private (not protected), requiring different access approach
|
|
33
|
+
|
|
34
|
+
# Implementation Being Tested
|
|
35
|
+
- file: /home/dustin/projects/groundswell/src/core/workflow.ts
|
|
36
|
+
lines: 124-139
|
|
37
|
+
why: The getRootObservers() method implementation with cycle detection logic
|
|
38
|
+
critical: Throws `new Error('Circular parent-child relationship detected')` on cycle
|
|
39
|
+
gotcha: Private method - cannot be accessed directly via (instance as any)
|
|
40
|
+
|
|
41
|
+
# Test Utilities
|
|
42
|
+
- file: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
|
|
43
|
+
lines: 4-11
|
|
44
|
+
why: SimpleWorkflow test class definition to use in test
|
|
45
|
+
pattern: Extend Workflow class, implement async run() method
|
|
46
|
+
|
|
47
|
+
# For Comparison
|
|
48
|
+
- file: /home/dustin/projects/groundswell/src/core/workflow.ts
|
|
49
|
+
lines: 145-160
|
|
50
|
+
why: getRoot() method - has identical cycle detection logic but is protected
|
|
51
|
+
pattern: Same error message, same traversal approach
|
|
52
|
+
|
|
53
|
+
# Research Documentation
|
|
54
|
+
- docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/existing_test_pattern.md
|
|
55
|
+
why: Detailed analysis of P1.M2.T1.S2 test pattern to replicate
|
|
56
|
+
|
|
57
|
+
- docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/getRootObservers_implementation.md
|
|
58
|
+
why: Complete implementation details of getRootObservers() method
|
|
59
|
+
|
|
60
|
+
- docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/test_conventions.md
|
|
61
|
+
why: Project test conventions and patterns
|
|
62
|
+
|
|
63
|
+
- docfile: /home/dustin/projects/groundswell/plan/bugfix/P1M2T1S4/research/codebase_structure.md
|
|
64
|
+
why: File organization and directory structure
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Current Codebase Tree (Relevant Files)
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
/home/dustin/projects/groundswell/
|
|
71
|
+
├── src/
|
|
72
|
+
│ ├── core/
|
|
73
|
+
│ │ └── workflow.ts # Lines 124-139: getRootObservers() with cycle detection
|
|
74
|
+
│ ├── __tests__/
|
|
75
|
+
│ │ └── unit/
|
|
76
|
+
│ │ └── workflow.test.ts # Lines 209-223: getRoot() cycle detection test
|
|
77
|
+
│ └── index.js # Main exports
|
|
78
|
+
└── plan/
|
|
79
|
+
└── bugfix/
|
|
80
|
+
└── P1M2T1S4/ # This subtask directory
|
|
81
|
+
├── research/ # Research documentation
|
|
82
|
+
└── PRP.md # This file
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Desired Codebase Tree After Implementation
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# No new files - test is added to existing workflow.test.ts
|
|
89
|
+
# Test should be added after line 223 (after getRoot() cycle detection test)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Known Gotchas of Our Codebase & Library Quirks
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// CRITICAL: getRootObservers() is PRIVATE, not protected
|
|
96
|
+
// Unlike getRoot() which is protected, getRootObservers() cannot be accessed via (instance as any)
|
|
97
|
+
// The method is called internally by:
|
|
98
|
+
// - Constructor (line 111) - for logger creation
|
|
99
|
+
// - emitEvent() method (line 205)
|
|
100
|
+
// - snapshotState() method (line 228)
|
|
101
|
+
|
|
102
|
+
// GOTCHA: Testing private methods in this codebase
|
|
103
|
+
// Since getRootObservers() is private, you must trigger it indirectly through:
|
|
104
|
+
// 1. Creating a workflow with observers after establishing a cycle
|
|
105
|
+
// 2. Calling a method that uses getRootObservers() (e.g., emitEvent, snapshotState)
|
|
106
|
+
// 3. Or accessing via TypeScript casting if the test framework allows
|
|
107
|
+
|
|
108
|
+
// CRITICAL: Error message must match EXACTLY
|
|
109
|
+
throw new Error('Circular parent-child relationship detected')
|
|
110
|
+
// The test should expect this exact string
|
|
111
|
+
|
|
112
|
+
// PATTERN: Circular reference creation
|
|
113
|
+
parent.parent = child; // This creates the cycle that triggers detection
|
|
114
|
+
|
|
115
|
+
// GOTCHA: Test placement
|
|
116
|
+
// Add test immediately after line 223 (within same describe block)
|
|
117
|
+
// Keep similar test together for maintainability
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Implementation Blueprint
|
|
123
|
+
|
|
124
|
+
### Test Structure
|
|
125
|
+
|
|
126
|
+
The test should follow the exact Arrange/Act/Assert pattern from P1.M2.T1.S2:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
it('should detect circular relationship in getRootObservers', () => {
|
|
130
|
+
// Arrange: Create parent and child workflows
|
|
131
|
+
// Act: Create circular reference manually
|
|
132
|
+
// Assert: Verify error is thrown
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Implementation Tasks (ordered by dependencies)
|
|
137
|
+
|
|
138
|
+
```yaml
|
|
139
|
+
Task 1: LOCATE the test insertion point
|
|
140
|
+
- FIND: /home/dustin/projects/groundswell/src/__tests__/unit/workflow.test.ts
|
|
141
|
+
- NAVIGATE to: Line 223 (end of existing getRoot() cycle detection test)
|
|
142
|
+
- VERIFY: Inside the describe('Workflow', ...) block
|
|
143
|
+
- INSERT: New test immediately after line 223
|
|
144
|
+
|
|
145
|
+
Task 2: WRITE the test case
|
|
146
|
+
- IMPLEMENT: Test following exact pattern from lines 209-223
|
|
147
|
+
- NAMING: 'should detect circular relationship in getRootObservers'
|
|
148
|
+
- PATTERN:
|
|
149
|
+
1. Arrange: Create parent and child workflows using SimpleWorkflow
|
|
150
|
+
2. Act: Create circular reference (parent.parent = child)
|
|
151
|
+
3. Assert: Expect error when getRootObservers() is called
|
|
152
|
+
|
|
153
|
+
- CRITICAL: Handle private method access
|
|
154
|
+
- Option A: Use (workflow as any).getRootObservers() if TypeScript allows
|
|
155
|
+
- Option B: Trigger through a public method that calls getRootObservers()
|
|
156
|
+
- Option C: Test the side effect (error thrown during observer-related operations)
|
|
157
|
+
|
|
158
|
+
Task 3: VERIFY error message matching
|
|
159
|
+
- EXPECT: 'Circular parent-child relationship detected'
|
|
160
|
+
- USE: expect(() => ...).toThrow('Circular parent-child relationship detected')
|
|
161
|
+
- ENSURE: Exact string match with implementation (line 131 in workflow.ts)
|
|
162
|
+
|
|
163
|
+
Task 4: RUN tests to validate
|
|
164
|
+
- EXECUTE: npm test
|
|
165
|
+
- VERIFY: New test passes
|
|
166
|
+
- CONFIRM: No existing tests broken
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Implementation Patterns & Key Details
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
// EXISTING TEST PATTERN (P1.M2.T1.S2) - Lines 209-223
|
|
173
|
+
it('should detect circular parent relationship', () => {
|
|
174
|
+
// Arrange: Create parent and child workflows
|
|
175
|
+
const parent = new SimpleWorkflow('Parent');
|
|
176
|
+
const child = new SimpleWorkflow('Child', parent);
|
|
177
|
+
|
|
178
|
+
// Act: Create circular reference manually
|
|
179
|
+
// This simulates a bug or malicious input that creates a cycle
|
|
180
|
+
parent.parent = child;
|
|
181
|
+
|
|
182
|
+
// Assert: getRoot() should throw error for circular reference
|
|
183
|
+
// Note: getRoot() is protected, so we cast to any to access it
|
|
184
|
+
expect(() => (parent as any).getRoot()).toThrow(
|
|
185
|
+
'Circular parent-child relationship detected'
|
|
186
|
+
);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
// NEW TEST PATTERN FOR getRootObservers()
|
|
190
|
+
// Key difference: getRootObservers() is PRIVATE
|
|
191
|
+
it('should detect circular relationship in getRootObservers', () => {
|
|
192
|
+
// Arrange: Create parent and child workflows
|
|
193
|
+
const parent = new SimpleWorkflow('Parent');
|
|
194
|
+
const child = new SimpleWorkflow('Child', parent);
|
|
195
|
+
|
|
196
|
+
// Act: Create circular reference manually
|
|
197
|
+
parent.parent = child;
|
|
198
|
+
|
|
199
|
+
// Assert: getRootObservers() should throw error for circular reference
|
|
200
|
+
// NOTE: getRootObservers() is private - may need alternative access
|
|
201
|
+
// Option 1: Direct access if test framework allows
|
|
202
|
+
expect(() => (parent as any).getRootObservers()).toThrow(
|
|
203
|
+
'Circular parent-child relationship detected'
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
// Option 2: Trigger through method that uses getRootObservers()
|
|
207
|
+
// e.g., expect(() => parent.emitEvent(...)).toThrow(...)
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// TEST UTILITY CLASS (Already defined at lines 4-11)
|
|
211
|
+
class SimpleWorkflow extends Workflow {
|
|
212
|
+
async run(): Promise<string> {
|
|
213
|
+
this.setStatus('running');
|
|
214
|
+
this.logger.info('Running simple workflow');
|
|
215
|
+
this.setStatus('completed');
|
|
216
|
+
return 'done';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// IMPORTS (Already present at line 1-2)
|
|
221
|
+
import { describe, it, expect } from 'vitest';
|
|
222
|
+
import { Workflow, /* ... */ } from '../../index.js';
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Critical Implementation Details
|
|
226
|
+
|
|
227
|
+
```yaml
|
|
228
|
+
# Private Method Access Challenge
|
|
229
|
+
- getRootObservers() is private (line 124)
|
|
230
|
+
- Cannot be accessed directly like protected getRoot() method
|
|
231
|
+
- Consider using (instance as any) if TypeScript compilation allows
|
|
232
|
+
- Alternative: Trigger through public methods that call getRootObservers():
|
|
233
|
+
* Constructor calls it for logger (line 111)
|
|
234
|
+
* emitEvent() calls it (line 205)
|
|
235
|
+
* snapshotState() calls it (line 228)
|
|
236
|
+
|
|
237
|
+
# Error Message Exact Match
|
|
238
|
+
- Implementation: throw new Error('Circular parent-child relationship detected')
|
|
239
|
+
- Test must use: expect(() => ...).toThrow('Circular parent-child relationship detected')
|
|
240
|
+
|
|
241
|
+
# Test Naming Convention
|
|
242
|
+
- Format: 'should [expected behavior]'
|
|
243
|
+
- Suggested: 'should detect circular relationship in getRootObservers'
|
|
244
|
+
- Or: 'should detect circular parent relationship in getRootObservers'
|
|
245
|
+
|
|
246
|
+
# Test Placement
|
|
247
|
+
- Insert after line 223 (immediately after getRoot() cycle detection test)
|
|
248
|
+
- Keep related cycle detection tests together
|
|
249
|
+
- Within describe('Workflow', ...) block
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Validation Loop
|
|
255
|
+
|
|
256
|
+
### Level 1: Syntax & Style (Immediate Feedback)
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Run TypeScript check on the test file
|
|
260
|
+
npx tsc --noEmit src/__tests__/unit/workflow.test.ts
|
|
261
|
+
|
|
262
|
+
# Run linter (if project uses one)
|
|
263
|
+
npm run lint 2>/dev/null || echo "No lint script configured"
|
|
264
|
+
|
|
265
|
+
# Expected: Zero TypeScript errors
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Level 2: Unit Tests (Component Validation)
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Run the specific test file
|
|
272
|
+
npm test -- workflow.test.ts
|
|
273
|
+
|
|
274
|
+
# Run only cycle detection tests
|
|
275
|
+
npm test -- -t "should detect circular"
|
|
276
|
+
|
|
277
|
+
# Full test suite
|
|
278
|
+
npm test
|
|
279
|
+
|
|
280
|
+
# Expected:
|
|
281
|
+
# - New test passes: "should detect circular relationship in getRootObservers"
|
|
282
|
+
# - All existing tests still pass
|
|
283
|
+
# - No test failures or errors
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Level 3: Integration Testing (System Validation)
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Ensure no regressions in workflow functionality
|
|
290
|
+
npm test -- --coverage
|
|
291
|
+
|
|
292
|
+
# Verify cycle detection works in practice
|
|
293
|
+
# (This is covered by the unit test itself)
|
|
294
|
+
|
|
295
|
+
# Expected: All integration tests pass
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Level 4: Manual Verification
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# Open the test file and visually verify:
|
|
302
|
+
# 1. Test is properly placed after line 223
|
|
303
|
+
# 2. Test follows the Arrange/Act/Assert pattern
|
|
304
|
+
# 3. Comments explain each step
|
|
305
|
+
# 4. Error message matches exactly
|
|
306
|
+
|
|
307
|
+
# Run tests in watch mode to see real-time results
|
|
308
|
+
npm run test:watch
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Final Validation Checklist
|
|
314
|
+
|
|
315
|
+
### Technical Validation
|
|
316
|
+
|
|
317
|
+
- [ ] Test file compiles without TypeScript errors
|
|
318
|
+
- [ ] New test passes: `npm test -- workflow.test.ts`
|
|
319
|
+
- [ ] All existing tests still pass: `npm test`
|
|
320
|
+
- [ ] Test is placed at correct location (after line 223)
|
|
321
|
+
- [ ] Error message matches implementation exactly
|
|
322
|
+
|
|
323
|
+
### Feature Validation
|
|
324
|
+
|
|
325
|
+
- [ ] Test follows P1.M2.T1.S2 pattern (Arrange/Act/Assert)
|
|
326
|
+
- [ ] Circular reference is created correctly (`parent.parent = child`)
|
|
327
|
+
- [ ] Error is thrown when cycle is detected
|
|
328
|
+
- [ ] Test validates correct error message
|
|
329
|
+
|
|
330
|
+
### Code Quality Validation
|
|
331
|
+
|
|
332
|
+
- [ ] Test has clear, descriptive name
|
|
333
|
+
- [ ] Comments explain the test purpose
|
|
334
|
+
- [ ] Test is maintainable and follows project conventions
|
|
335
|
+
- [ ] No code duplication beyond necessary pattern replication
|
|
336
|
+
|
|
337
|
+
### Documentation & Deployment
|
|
338
|
+
|
|
339
|
+
- [ ] PRP is complete and self-documenting
|
|
340
|
+
- [ ] Research findings are stored in research/ directory
|
|
341
|
+
- [ ] Test location is documented for future reference
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Anti-Patterns to Avoid
|
|
346
|
+
|
|
347
|
+
- ❌ Don't place test in wrong location (must be after line 223)
|
|
348
|
+
- ❌ Don't use different error message (must be exact match)
|
|
349
|
+
- ❌ Don't forget to use SimpleWorkflow class (already defined)
|
|
350
|
+
- ❌ Don't omit Arrange/Act/Assert comments
|
|
351
|
+
- ❌ Don't use different naming convention
|
|
352
|
+
- ❌ Don't modify existing tests
|
|
353
|
+
- ❌ Don't create new test file (add to existing workflow.test.ts)
|
|
354
|
+
- ❌ Don't skip validation (must run tests and verify pass)
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Success Metrics
|
|
359
|
+
|
|
360
|
+
**Confidence Score**: 10/10 for one-pass implementation success
|
|
361
|
+
|
|
362
|
+
**Validation**: This PRP provides:
|
|
363
|
+
- Exact file paths and line numbers for all references
|
|
364
|
+
- Complete existing test code to replicate
|
|
365
|
+
- Implementation details with exact error message
|
|
366
|
+
- Clear handling of private method access challenge
|
|
367
|
+
- Project test conventions and patterns
|
|
368
|
+
- Research documentation for additional context
|
|
369
|
+
|
|
370
|
+
The implementing agent has everything needed to write a passing test for cycle detection in getRootObservers() using only this PRP and codebase access.
|