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
package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md
ADDED
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
# Console.error Call Inventory
|
|
2
|
+
|
|
3
|
+
## Executive Summary
|
|
4
|
+
|
|
5
|
+
- **Total console.error calls found**: 8
|
|
6
|
+
- **Observer-related**: 6 (to be replaced in P1.M3.T1.S2)
|
|
7
|
+
- **Other purpose**: 2 (validation errors to preserve)
|
|
8
|
+
|
|
9
|
+
## Observer-Related Console.error Calls
|
|
10
|
+
|
|
11
|
+
### 1. src/core/logger.ts:27
|
|
12
|
+
|
|
13
|
+
**Method**: `WorkflowLogger.emit()`
|
|
14
|
+
|
|
15
|
+
**Error Type**: Observer onLog callback error
|
|
16
|
+
|
|
17
|
+
**Context**: Emitting log entries to observers
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
private emit(entry: LogEntry): void {
|
|
21
|
+
this.node.logs.push(entry);
|
|
22
|
+
for (const obs of this.observers) {
|
|
23
|
+
try {
|
|
24
|
+
obs.onLog(entry);
|
|
25
|
+
} catch (err) {
|
|
26
|
+
console.error('Observer onLog error:', err);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Categorization**: Observer-related - **REPLACE** in P1.M3.T1.S2
|
|
33
|
+
|
|
34
|
+
**Replacement Pattern**: `this.logger.error('Observer onLog error', { error: err })`
|
|
35
|
+
|
|
36
|
+
**Note**: WorkflowLogger class has access to its own emit() method, but this is a recursive case. The replacement should call `this.log('error', 'Observer onLog error', { error: err })` to use the internal logging mechanism without infinite recursion.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### 2. src/core/workflow.ts:376
|
|
41
|
+
|
|
42
|
+
**Method**: `Workflow.emitEvent()`
|
|
43
|
+
|
|
44
|
+
**Error Type**: Observer onEvent callback error
|
|
45
|
+
|
|
46
|
+
**Context**: Emitting workflow events to root observers
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
public emitEvent(event: WorkflowEvent): void {
|
|
50
|
+
this.node.events.push(event);
|
|
51
|
+
|
|
52
|
+
const observers = this.getRootObservers();
|
|
53
|
+
for (const obs of observers) {
|
|
54
|
+
try {
|
|
55
|
+
obs.onEvent(event);
|
|
56
|
+
|
|
57
|
+
// Also notify tree changed for tree update events
|
|
58
|
+
if (event.type === 'treeUpdated' || event.type === 'childAttached' || event.type === 'childDetached') {
|
|
59
|
+
obs.onTreeChanged(this.getRoot().node);
|
|
60
|
+
}
|
|
61
|
+
} catch (err) {
|
|
62
|
+
console.error('Observer onEvent error:', err);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Categorization**: Observer-related - **REPLACE** in P1.M3.T1.S2
|
|
69
|
+
|
|
70
|
+
**Replacement Pattern**: `this.logger.error('Observer onEvent error', { error: err, eventType: event.type })`
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### 3. src/core/workflow.ts:394
|
|
75
|
+
|
|
76
|
+
**Method**: `Workflow.snapshotState()`
|
|
77
|
+
|
|
78
|
+
**Error Type**: Observer onStateUpdated callback error
|
|
79
|
+
|
|
80
|
+
**Context**: Notifying observers of state snapshot updates
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
public snapshotState(): void {
|
|
84
|
+
const snapshot = getObservedState(this);
|
|
85
|
+
this.node.stateSnapshot = snapshot;
|
|
86
|
+
|
|
87
|
+
// Notify observers
|
|
88
|
+
const observers = this.getRootObservers();
|
|
89
|
+
for (const obs of observers) {
|
|
90
|
+
try {
|
|
91
|
+
obs.onStateUpdated(this.node);
|
|
92
|
+
} catch (err) {
|
|
93
|
+
console.error('Observer onStateUpdated error:', err);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Emit snapshot event
|
|
98
|
+
this.emitEvent({
|
|
99
|
+
type: 'stateSnapshot',
|
|
100
|
+
node: this.node,
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Emit treeUpdated event to trigger tree debugger rebuild
|
|
104
|
+
this.emitEvent({ type: 'treeUpdated', root: this.getRoot().node });
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Categorization**: Observer-related - **REPLACE** in P1.M3.T1.S2
|
|
109
|
+
|
|
110
|
+
**Replacement Pattern**: `this.logger.error('Observer onStateUpdated error', { error: err, nodeId: this.node.id })`
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### 4. src/utils/observable.ts:39
|
|
115
|
+
|
|
116
|
+
**Method**: `Observable.next()`
|
|
117
|
+
|
|
118
|
+
**Error Type**: Subscriber next callback error
|
|
119
|
+
|
|
120
|
+
**Context**: Emitting values to subscribers
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
next(value: T): void {
|
|
124
|
+
for (const subscriber of this.subscribers) {
|
|
125
|
+
try {
|
|
126
|
+
subscriber.next?.(value);
|
|
127
|
+
} catch (err) {
|
|
128
|
+
console.error('Observable subscriber error:', err);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Categorization**: Observer-related - **REPLACE** in P1.M3.T1.S2
|
|
135
|
+
|
|
136
|
+
**Replacement Pattern**: Will need logger injection pattern (Observable class does not have WorkflowLogger access)
|
|
137
|
+
|
|
138
|
+
**Implementation Notes**:
|
|
139
|
+
- Observable<T> is a standalone utility class
|
|
140
|
+
- No access to WorkflowLogger
|
|
141
|
+
- Will need constructor injection or fallback pattern
|
|
142
|
+
- See Implementation Notes for P1.M3.T1.S2 section below
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### 5. src/utils/observable.ts:52
|
|
147
|
+
|
|
148
|
+
**Method**: `Observable.error()`
|
|
149
|
+
|
|
150
|
+
**Error Type**: Subscriber error handler failure
|
|
151
|
+
|
|
152
|
+
**Context**: Signaling errors to subscribers
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
error(err: unknown): void {
|
|
156
|
+
for (const subscriber of this.subscribers) {
|
|
157
|
+
try {
|
|
158
|
+
subscriber.error?.(err);
|
|
159
|
+
} catch (e) {
|
|
160
|
+
console.error('Observable error handler failed:', e);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Categorization**: Observer-related - **REPLACE** in P1.M3.T1.S2
|
|
167
|
+
|
|
168
|
+
**Replacement Pattern**: Same logger injection pattern as observable.ts:39
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### 6. src/utils/observable.ts:65
|
|
173
|
+
|
|
174
|
+
**Method**: `Observable.complete()`
|
|
175
|
+
|
|
176
|
+
**Error Type**: Subscriber complete callback failure
|
|
177
|
+
|
|
178
|
+
**Context**: Signaling completion to subscribers
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
complete(): void {
|
|
182
|
+
for (const subscriber of this.subscribers) {
|
|
183
|
+
try {
|
|
184
|
+
subscriber.complete?.();
|
|
185
|
+
} catch (err) {
|
|
186
|
+
console.error('Observable complete handler failed:', err);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
this.subscribers.clear();
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Categorization**: Observer-related - **REPLACE** in P1.M3.T1.S2
|
|
194
|
+
|
|
195
|
+
**Replacement Pattern**: Same logger injection pattern as observable.ts:39
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Other Purpose Console.error Calls
|
|
200
|
+
|
|
201
|
+
### 1. src/core/workflow.ts:277
|
|
202
|
+
|
|
203
|
+
**Method**: `Workflow.attachChild()`
|
|
204
|
+
|
|
205
|
+
**Error Type**: Validation error - child already has parent
|
|
206
|
+
|
|
207
|
+
**Context**: Structural validation before throwing exception
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
// Check if child already has a different parent
|
|
211
|
+
if (child.parent !== null && child.parent !== this) {
|
|
212
|
+
const errorMessage =
|
|
213
|
+
`Child '${child.node.name}' already has a parent '${child.parent.node.name}'. ` +
|
|
214
|
+
`A workflow can only have one parent. ` +
|
|
215
|
+
`Use detachChild() on '${child.parent.node.name}' first if you need to reparent.`;
|
|
216
|
+
console.error(errorMessage);
|
|
217
|
+
throw new Error(errorMessage);
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Categorization**: Other purpose - **DO NOT REPLACE**
|
|
222
|
+
|
|
223
|
+
**Rationale**: Validation error that immediately throws. The console.error provides immediate visibility before the stack trace. This is a structural invariant violation, not an observer callback error.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### 2. src/core/workflow.ts:286
|
|
228
|
+
|
|
229
|
+
**Method**: `Workflow.attachChild()`
|
|
230
|
+
|
|
231
|
+
**Error Type**: Validation error - circular reference detection
|
|
232
|
+
|
|
233
|
+
**Context**: Cycle detection before throwing exception
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
// Check if child is an ancestor (would create circular reference)
|
|
237
|
+
if (this.isDescendantOf(child)) {
|
|
238
|
+
const errorMessage =
|
|
239
|
+
`Cannot attach child '${child.node.name}' - it is an ancestor of '${this.node.name}'. ` +
|
|
240
|
+
`This would create a circular reference.`;
|
|
241
|
+
console.error(errorMessage);
|
|
242
|
+
throw new Error(errorMessage);
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Categorization**: Other purpose - **DO NOT REPLACE**
|
|
247
|
+
|
|
248
|
+
**Rationale**: Validation error that immediately throws. The console.error provides immediate visibility before the stack trace. This is a structural invariant violation (circular reference), not an observer callback error.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Replacement Recommendations
|
|
253
|
+
|
|
254
|
+
### Observer-Related Calls (Replace with logger.error)
|
|
255
|
+
|
|
256
|
+
| File | Line | Observer Type | Current Call |
|
|
257
|
+
|------|------|---------------|--------------|
|
|
258
|
+
| src/core/logger.ts | 27 | WorkflowObserver.onLog | `console.error('Observer onLog error:', err)` |
|
|
259
|
+
| src/core/workflow.ts | 376 | WorkflowObserver.onEvent | `console.error('Observer onEvent error:', err)` |
|
|
260
|
+
| src/core/workflow.ts | 394 | WorkflowObserver.onStateUpdated | `console.error('Observer onStateUpdated error:', err)` |
|
|
261
|
+
| src/utils/observable.ts | 39 | Observer.next | `console.error('Observable subscriber error:', err)` |
|
|
262
|
+
| src/utils/observable.ts | 52 | Observer.error | `console.error('Observable error handler failed:', e)` |
|
|
263
|
+
| src/utils/observable.ts | 65 | Observer.complete | `console.error('Observable complete handler failed:', err)` |
|
|
264
|
+
|
|
265
|
+
### Validation Errors (Preserve as console.error)
|
|
266
|
+
|
|
267
|
+
| File | Line | Purpose | Reason |
|
|
268
|
+
|------|------|---------|--------|
|
|
269
|
+
| src/core/workflow.ts | 277 | Child already has parent validation | Structural validation before throw |
|
|
270
|
+
| src/core/workflow.ts | 286 | Circular reference detection | Structural validation before throw |
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Implementation Notes for P1.M3.T1.S2
|
|
275
|
+
|
|
276
|
+
### 1. Workflow Class Calls (Direct Access)
|
|
277
|
+
|
|
278
|
+
**Files**: src/core/workflow.ts:376, src/core/workflow.ts:394
|
|
279
|
+
|
|
280
|
+
- Workflow class has `this.logger` property available
|
|
281
|
+
- Use: `this.logger.error('Observer onEvent error', { error: err, eventType: event.type })`
|
|
282
|
+
|
|
283
|
+
### 2. WorkflowLogger Recursive Case
|
|
284
|
+
|
|
285
|
+
**File**: src/core/logger.ts:27
|
|
286
|
+
|
|
287
|
+
- WorkflowLogger cannot call `this.log()` from within `emit()` as it would create recursion
|
|
288
|
+
- Recommended approach: Create a separate internal error logging path
|
|
289
|
+
- Options:
|
|
290
|
+
- Use `this.node.logs.push()` directly with error entry (bypass emit)
|
|
291
|
+
- Add a `private emitWithoutObserverNotification()` method
|
|
292
|
+
- Call `this.log()` with a flag to skip observer notification
|
|
293
|
+
|
|
294
|
+
### 3. Observable Class Logger Injection Pattern
|
|
295
|
+
|
|
296
|
+
**Files**: src/utils/observable.ts:39, 52, 65
|
|
297
|
+
|
|
298
|
+
- Observable<T> is a standalone utility class with no WorkflowLogger access
|
|
299
|
+
- Recommended pattern: Constructor injection with optional fallback
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// Recommended implementation for Observable class
|
|
303
|
+
export interface ObservableLogger {
|
|
304
|
+
error(message: string, data?: unknown): void;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export class Observable<T> {
|
|
308
|
+
private subscribers: Set<Observer<T>> = new Set();
|
|
309
|
+
private logger?: ObservableLogger;
|
|
310
|
+
|
|
311
|
+
constructor(logger?: ObservableLogger) {
|
|
312
|
+
this.logger = logger;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
private logError(message: string, error: unknown): void {
|
|
316
|
+
if (this.logger) {
|
|
317
|
+
this.logger.error(message, { error });
|
|
318
|
+
} else {
|
|
319
|
+
// Fallback to console.error if no logger provided
|
|
320
|
+
console.error(message, error);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
next(value: T): void {
|
|
325
|
+
for (const subscriber of this.subscribers) {
|
|
326
|
+
try {
|
|
327
|
+
subscriber.next?.(value);
|
|
328
|
+
} catch (err) {
|
|
329
|
+
this.logError('Observable subscriber error', err);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Similar pattern for error() and complete() methods
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### 4. Key Implementation Principles
|
|
339
|
+
|
|
340
|
+
1. **Preserve error isolation**: Observer errors should never crash workflows
|
|
341
|
+
2. **Add context**: Include error details, observer type, event type
|
|
342
|
+
3. **Maintain backward compatibility**: Observable class should work without logger
|
|
343
|
+
4. **Follow existing patterns**: Match WorkflowLogger.error() signature: `error(message: string, data?: unknown): void`
|
|
344
|
+
|
|
345
|
+
### 5. Testing Considerations
|
|
346
|
+
|
|
347
|
+
After replacement in P1.M3.T1.S2:
|
|
348
|
+
- Verify observer errors are logged to WorkflowLogger (not console)
|
|
349
|
+
- Verify observer errors don't crash workflows (error isolation preserved)
|
|
350
|
+
- Verify log entries contain proper error context
|
|
351
|
+
- Verify Observable class works with and without logger injection
|
|
352
|
+
- Verify validation errors still use console.error (unchanged)
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Observer Interface Reference
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
// WorkflowObserver interface (src/types/observer.ts)
|
|
360
|
+
export interface WorkflowObserver {
|
|
361
|
+
onLog(entry: LogEntry): void; // Error at src/core/logger.ts:27
|
|
362
|
+
onEvent(event: WorkflowEvent): void; // Error at src/core/workflow.ts:376
|
|
363
|
+
onStateUpdated(node: WorkflowNode): void; // Error at src/core/workflow.ts:394
|
|
364
|
+
onTreeChanged(root: WorkflowNode): void; // No error handling (safe implementation)
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// Observer interface for Observable class (src/utils/observable.ts)
|
|
368
|
+
export interface Observer<T> {
|
|
369
|
+
next?: (value: T) => void; // Error at src/utils/observable.ts:39
|
|
370
|
+
error?: (error: unknown) => void; // Error at src/utils/observable.ts:52
|
|
371
|
+
complete?: () => void; // Error at src/utils/observable.ts:65
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Search Methodology
|
|
378
|
+
|
|
379
|
+
**Command Used**:
|
|
380
|
+
```bash
|
|
381
|
+
grep -rn "console\.error" src/ --exclude-dir=__tests__
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Excluded Files**:
|
|
385
|
+
- Test files in `src/__tests__/` directory
|
|
386
|
+
- Test assertions using `expect(console.error).toHaveBeenCalled()`
|
|
387
|
+
- Comments referencing console.error
|
|
388
|
+
|
|
389
|
+
**Production Code Files Analyzed**:
|
|
390
|
+
- src/core/logger.ts
|
|
391
|
+
- src/core/workflow.ts
|
|
392
|
+
- src/utils/observable.ts
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Validation Performed
|
|
397
|
+
|
|
398
|
+
### Level 1: Search Completeness
|
|
399
|
+
- [x] Grep search for 'console.error' executed in src/ directory
|
|
400
|
+
- [x] Test files excluded from search results
|
|
401
|
+
- [x] 8 console.error calls found (matches expected)
|
|
402
|
+
|
|
403
|
+
### Level 2: Categorization Accuracy
|
|
404
|
+
- [x] Observer calls identified (6 calls in try-catch around observer/subscriber callbacks)
|
|
405
|
+
- [x] Validation errors identified (2 calls before throw statements)
|
|
406
|
+
- [x] All categorizations match code context
|
|
407
|
+
|
|
408
|
+
### Level 3: Document Quality
|
|
409
|
+
- [x] All console.error calls documented with file path and line number
|
|
410
|
+
- [x] Each call includes the containing method/function name
|
|
411
|
+
- [x] Categorization (observer-related vs other) is clearly stated
|
|
412
|
+
- [x] Code snippets show the surrounding context (try-catch, throw, etc.)
|
|
413
|
+
- [x] Replacement recommendations section provides clear guidance
|
|
414
|
+
- [x] Non-observer calls include rationale for preservation
|
|
415
|
+
|
|
416
|
+
### Level 4: Handoff Readiness
|
|
417
|
+
- [x] All file references include exact paths and line numbers
|
|
418
|
+
- [x] Next task (P1.M3.T1.S2) can proceed with only this document
|
|
419
|
+
- [x] Implementation notes provide specific patterns for each context
|
|
420
|
+
- [x] Observable logger injection pattern documented
|
|
421
|
+
- [x] No additional research required for implementation
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Summary
|
|
426
|
+
|
|
427
|
+
This inventory provides complete information for P1.M3.T1.S2 to replace observer error console.error calls with logger.error(). The key findings are:
|
|
428
|
+
|
|
429
|
+
1. **6 observer-related console.error calls** need replacement
|
|
430
|
+
2. **2 validation error console.error calls** should be preserved
|
|
431
|
+
3. **Workflow class calls** can directly use `this.logger.error()`
|
|
432
|
+
4. **WorkflowLogger recursive case** needs special handling to avoid infinite recursion
|
|
433
|
+
5. **Observable class** needs logger injection pattern with fallback
|
|
434
|
+
|
|
435
|
+
The next task (P1.M3.T1.S2) can proceed using only this document and the existing codebase.
|