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,535 @@
|
|
|
1
|
+
# Product Requirement Prompt (PRP): Run Full Test Suite
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
**Feature Goal**: Execute the complete test suite to verify all 344+ tests pass after bug fix implementations from milestones P1.M1, P1.M2, and P1.M3.
|
|
6
|
+
|
|
7
|
+
**Deliverable**: A comprehensive test execution report documenting total test count, pass count, fail count, and analysis of any failures (distinguishing pre-existing from newly introduced).
|
|
8
|
+
|
|
9
|
+
**Success Definition**:
|
|
10
|
+
- All 344+ existing tests pass without regressions
|
|
11
|
+
- Test execution results captured with detailed metrics
|
|
12
|
+
- Any failures documented with root cause analysis
|
|
13
|
+
- Report stored at `plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md`
|
|
14
|
+
|
|
15
|
+
## User Persona
|
|
16
|
+
|
|
17
|
+
**Target User**: Development team and QA engineers responsible for validating bug fix implementations.
|
|
18
|
+
|
|
19
|
+
**Use Case**: Final validation step after completing all bug fixes to ensure no regressions were introduced and the system remains stable.
|
|
20
|
+
|
|
21
|
+
**User Journey**:
|
|
22
|
+
1. Execute full test suite using appropriate vitest command
|
|
23
|
+
2. Capture and parse test output for metrics
|
|
24
|
+
3. Analyze any failures to determine if they're pre-existing or caused by bug fixes
|
|
25
|
+
4. Document findings in structured report
|
|
26
|
+
5. If failures are found, coordinate with next subtask (P1.M4.T1.S2) for fixes
|
|
27
|
+
|
|
28
|
+
**Pain Points Addressed**:
|
|
29
|
+
- Manual test execution and result capture is error-prone
|
|
30
|
+
- Need to distinguish between pre-existing failures and regressions
|
|
31
|
+
- Requirement for auditable validation of bug fix quality
|
|
32
|
+
|
|
33
|
+
## Why
|
|
34
|
+
|
|
35
|
+
- **Quality Assurance**: Ensures all bug fixes from P1.M1 (WorkflowLogger.child()), P1.M2 (Promise.allSettled, ErrorMergeStrategy), and P1.M3 (observer error logging, tree debugger optimization, workflow name validation, isDescendantOf) don't break existing functionality
|
|
36
|
+
- **Regression Prevention**: Baseline of 344+ passing tests must be maintained
|
|
37
|
+
- **Release Readiness**: Test results inform whether the codebase is ready for documentation and release steps
|
|
38
|
+
- **Risk Mitigation**: Early detection of test failures prevents shipping broken code
|
|
39
|
+
|
|
40
|
+
## What
|
|
41
|
+
|
|
42
|
+
Execute the complete test suite using Vitest and produce a detailed execution report.
|
|
43
|
+
|
|
44
|
+
### Success Criteria
|
|
45
|
+
|
|
46
|
+
- [ ] Test suite executes completely (no early termination)
|
|
47
|
+
- [ ] Test count metrics captured: total tests, passed, failed, skipped
|
|
48
|
+
- [ ] 344+ tests pass (matching or exceeding baseline)
|
|
49
|
+
- [ ] All test failures analyzed and documented
|
|
50
|
+
- [ ] Pre-existing failures distinguished from new regressions
|
|
51
|
+
- [ ] Execution report generated at specified path
|
|
52
|
+
- [ ] Report includes vitest command used and execution timestamp
|
|
53
|
+
|
|
54
|
+
## All Needed Context
|
|
55
|
+
|
|
56
|
+
### Context Completeness Check
|
|
57
|
+
|
|
58
|
+
_Before writing this PRP, validate: "If someone knew nothing about this codebase, would they have everything needed to implement this successfully?"_
|
|
59
|
+
|
|
60
|
+
**Answer**: Yes - this PRP provides complete context including vitest configuration, test structure, bug fix summaries, expected baseline, and execution procedures.
|
|
61
|
+
|
|
62
|
+
### Documentation & References
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
# MUST READ - Include these in your context window
|
|
66
|
+
- url: https://vitest.dev/guide/cli.html
|
|
67
|
+
why: CLI command reference for running tests and capturing output
|
|
68
|
+
critical: Use `vitest run` for CI mode (single run), `--reporter=json` for programmatic parsing
|
|
69
|
+
|
|
70
|
+
- url: https://vitest.dev/guide/reporters.html
|
|
71
|
+
why: Built-in reporter options for different output formats
|
|
72
|
+
critical: JSON reporter enables automated test count extraction
|
|
73
|
+
|
|
74
|
+
- file: /home/dustin/projects/groundswell/vitest.config.ts
|
|
75
|
+
why: Test configuration - shows test file pattern (`src/__tests__/**/*.test.ts`)
|
|
76
|
+
pattern: include: ['src/__tests__/**/*.test.ts'], globals: true
|
|
77
|
+
gotcha: Tests use global describe/it/expect (no imports needed)
|
|
78
|
+
|
|
79
|
+
- file: /home/dustin/projects/groundswell/package.json
|
|
80
|
+
why: NPM scripts for test execution
|
|
81
|
+
pattern: "test": "vitest run", "test:watch": "vitest"
|
|
82
|
+
gotcha: Use `npm test` for consistent execution via project script
|
|
83
|
+
|
|
84
|
+
- file: /home/dustin/projects/groundswell/plan/001_d3bb02af4886/TEST_RESULTS.md
|
|
85
|
+
why: Documents expected baseline of 344 passing tests
|
|
86
|
+
section: "Testing Summary" and "Positive Findings"
|
|
87
|
+
gotcha: Baseline is 344 tests; any significant deviation requires investigation
|
|
88
|
+
|
|
89
|
+
- file: /home/dustin/projects/groundswell/docs/vitest-research.md
|
|
90
|
+
why: Project-specific vitest research with command examples
|
|
91
|
+
section: "Running Full Test Suite and Capturing Detailed Output"
|
|
92
|
+
gotcha: Multiple reporter formats available - JSON recommended for parsing
|
|
93
|
+
|
|
94
|
+
- file: /home/dustin/projects/groundswell/src/__tests__/**/*.test.ts
|
|
95
|
+
why: Understanding test structure and patterns in the codebase
|
|
96
|
+
pattern: Three categories: unit/, integration/, adversarial/
|
|
97
|
+
gotcha: 39 test files with ~175 test cases (some describe blocks contain nested tests)
|
|
98
|
+
|
|
99
|
+
# Bug Fix Implementation Context
|
|
100
|
+
- file: /home/dustin/projects/groundswell/src/core/logger.ts
|
|
101
|
+
why: P1.M1.T1 fix - WorkflowLogger.child() signature change
|
|
102
|
+
section: Lines 102-110 (method overloads and implementation)
|
|
103
|
+
gotcha: Backward compatible - accepts both string and Partial<LogEntry>
|
|
104
|
+
|
|
105
|
+
- file: /home/dustin/projects/groundswell/src/decorators/task.ts
|
|
106
|
+
why: P1.M2.T1 and P1.M2.T2 fixes - Promise.allSettled and ErrorMergeStrategy
|
|
107
|
+
section: Lines 113-142 (Promise.allSettled implementation), Lines 121-138 (error merging)
|
|
108
|
+
gotcha: Error handling now aggregates failures instead of throwing first error
|
|
109
|
+
|
|
110
|
+
- file: /home/dustin/projects/groundswell/src/core/workflow.ts
|
|
111
|
+
why: P1.M3.T1, P1.M3.T3, P1.M3.T4 fixes - Observer logging, name validation, isDescendantOf
|
|
112
|
+
section: Lines 426/444 (observer error logging), Lines 99-107 (name validation), Line 201 (isDescendantOf visibility)
|
|
113
|
+
gotcha: isDescendantOf changed from private to public
|
|
114
|
+
|
|
115
|
+
- file: /home/dustin/projects/groundswell/src/debugger/tree-debugger.ts
|
|
116
|
+
why: P1.M3.T2 fix - Tree debugger node map optimization
|
|
117
|
+
section: Lines 65-115 (removeSubtreeNodes and optimized onTreeChanged)
|
|
118
|
+
gotcha: Performance optimization - should not affect test results
|
|
119
|
+
|
|
120
|
+
# Test Utilities and Helpers
|
|
121
|
+
- file: /home/dustin/projects/groundswell/src/__tests__/helpers/tree-verification.ts
|
|
122
|
+
why: Critical tree validation helpers used throughout tests
|
|
123
|
+
pattern: collectAllNodes(), validateTreeConsistency(), verifyTreeMirror()
|
|
124
|
+
gotcha: Tests verify 1:1 mirror invariant between Workflow and WorkflowNode trees
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Current Codebase Tree
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
groundswell/
|
|
131
|
+
├── src/
|
|
132
|
+
│ ├── __tests__/
|
|
133
|
+
│ │ ├── unit/ # Unit tests for individual components
|
|
134
|
+
│ │ ├── integration/ # Integration tests between components
|
|
135
|
+
│ │ ├── adversarial/ # Stress tests and edge cases
|
|
136
|
+
│ │ └── helpers/ # Shared test utilities
|
|
137
|
+
│ │ └── tree-verification.ts
|
|
138
|
+
│ ├── core/
|
|
139
|
+
│ │ ├── logger.ts # P1.M1.T1: WorkflowLogger.child() fix
|
|
140
|
+
│ │ └── workflow.ts # P1.M3.T1/T3/T4: Observer logging, validation, isDescendantOf
|
|
141
|
+
│ ├── decorators/
|
|
142
|
+
│ │ └── task.ts # P1.M2.T1/T2: Promise.allSettled, ErrorMergeStrategy
|
|
143
|
+
│ └── debugger/
|
|
144
|
+
│ └── tree-debugger.ts # P1.M3.T2: Node map optimization
|
|
145
|
+
├── vitest.config.ts # Test configuration
|
|
146
|
+
├── package.json # NPM scripts: "test": "vitest run"
|
|
147
|
+
└── plan/
|
|
148
|
+
└── 001_d3bb02af4886/
|
|
149
|
+
└── bugfix/
|
|
150
|
+
└── 001_e8e04329daf3/
|
|
151
|
+
└── P1M4T1S1/
|
|
152
|
+
└── PRP.md # This file
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Desired Codebase Tree (Files to be Added)
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/
|
|
159
|
+
├── PRP.md # This file
|
|
160
|
+
├── TEST_EXECUTION_REPORT.md # OUTPUT: Test execution results (to be created)
|
|
161
|
+
└── research/ # Research artifacts (optional)
|
|
162
|
+
└── vitest-research.md # External vitest documentation research
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Known Gotchas of Our Codebase & Library Quirks
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// CRITICAL: Vitest configuration uses global test functions
|
|
169
|
+
// No need to import { describe, it, expect } from 'vitest' - they're global
|
|
170
|
+
|
|
171
|
+
// CRITICAL: Test file pattern is strict
|
|
172
|
+
// Only files matching src/__tests__/**/*.test.ts will be executed
|
|
173
|
+
// Test files elsewhere in the codebase will be ignored
|
|
174
|
+
|
|
175
|
+
// CRITICAL: Expected baseline is 344+ tests
|
|
176
|
+
// Documented in plan/001_d3bb02af4886/TEST_RESULTS.md
|
|
177
|
+
// Significant deviation from this count requires investigation
|
|
178
|
+
|
|
179
|
+
// GOTCHA: Test count can vary
|
|
180
|
+
// The 344 number is from a previous validation
|
|
181
|
+
// New tests may have been added in bug fixes
|
|
182
|
+
// Check for recent test additions in modified files
|
|
183
|
+
|
|
184
|
+
// GOTCHA: Some tests may be skipped
|
|
185
|
+
// Look for test.skip() or describe.skip() in test files
|
|
186
|
+
// Skipped tests appear in output but don't count as passed/failed
|
|
187
|
+
|
|
188
|
+
// GOTCHA: Promise.allSettled change affects error handling tests
|
|
189
|
+
// P1.M2.T1 changed concurrent task error behavior
|
|
190
|
+
// Tests expecting first-error-to-fail may need updates
|
|
191
|
+
// Error merge strategy tests (P1.M2.T2.S4) should cover new behavior
|
|
192
|
+
|
|
193
|
+
// GOTCHA: Workflow name validation may break existing tests
|
|
194
|
+
// P1.M3.T3 added strict validation for workflow names
|
|
195
|
+
// Tests creating workflows with empty/long names may now fail
|
|
196
|
+
// Check test workflow construction in setUp/beforeEach blocks
|
|
197
|
+
|
|
198
|
+
// PATTERN: Tree verification helpers are critical
|
|
199
|
+
// Many tests use helpers/tree-verification.ts for validation
|
|
200
|
+
// Failures in tree-related tests often indicate core invariant violations
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Implementation Blueprint
|
|
204
|
+
|
|
205
|
+
### Data Models and Structure
|
|
206
|
+
|
|
207
|
+
No data models required - this is a validation and reporting task. Output will be Markdown documentation.
|
|
208
|
+
|
|
209
|
+
### Implementation Tasks (ordered by dependencies)
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
Task 1: EXECUTE test suite with verbose output
|
|
213
|
+
- COMMAND: npm test 2>&1 | tee test-output.log
|
|
214
|
+
- PURPOSE: Run full test suite and capture complete output
|
|
215
|
+
- OUTPUT: Console output saved to test-output.log
|
|
216
|
+
- VALIDATION: Command exits with code 0 (all tests pass) or non-zero (failures present)
|
|
217
|
+
- TIMEOUT: None (let tests complete fully)
|
|
218
|
+
|
|
219
|
+
Task 2: EXECUTE test suite with JSON reporter for programmatic parsing
|
|
220
|
+
- COMMAND: npm test -- --reporter=json --outputFile=test-results.json
|
|
221
|
+
- PURPOSE: Generate machine-readable test results
|
|
222
|
+
- OUTPUT: test-results.json with detailed test metrics
|
|
223
|
+
- VALIDATION: JSON file is created and valid
|
|
224
|
+
- DEPENDS ON: Task 1 (optional - can run in parallel)
|
|
225
|
+
|
|
226
|
+
Task 3: PARSE test results and extract metrics
|
|
227
|
+
- INPUT: test-output.log and/or test-results.json
|
|
228
|
+
- EXTRACT: Total tests, passed, failed, skipped, duration
|
|
229
|
+
- METHOD: Parse console output OR JSON file
|
|
230
|
+
- OUTPUT: Structured metrics object with counts
|
|
231
|
+
- DEPENDS ON: Task 1 or Task 2
|
|
232
|
+
|
|
233
|
+
Task 4: ANALYZE any test failures
|
|
234
|
+
- INPUT: Failed test names and error messages from test results
|
|
235
|
+
- DETERMINE: Pre-existing vs. newly introduced failures
|
|
236
|
+
- METHOD: Compare against TEST_RESULTS.md baseline, check test dates, review git blame
|
|
237
|
+
- OUTPUT: Failure analysis with root cause assessment
|
|
238
|
+
- DEPENDS ON: Task 3
|
|
239
|
+
|
|
240
|
+
Task 5: CREATE test execution report
|
|
241
|
+
- TEMPLATE: Use markdown format with sections for summary, metrics, failures, analysis
|
|
242
|
+
- CONTENT: Include command used, timestamp, metrics, failure details
|
|
243
|
+
- LOCATION: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md
|
|
244
|
+
- DEPENDS ON: Task 3 and Task 4
|
|
245
|
+
- REQUIRED SECTIONS:
|
|
246
|
+
- Execution Summary (command, timestamp, duration)
|
|
247
|
+
- Test Metrics (total, passed, failed, skipped, pass rate)
|
|
248
|
+
- Failure Analysis (if any failures)
|
|
249
|
+
- Regression Assessment (new vs. pre-existing)
|
|
250
|
+
- Recommendations (next steps)
|
|
251
|
+
|
|
252
|
+
Task 6: VERIFY report completeness
|
|
253
|
+
- CHECK: All required sections present
|
|
254
|
+
- CHECK: Metrics accurate and consistent with console output
|
|
255
|
+
- CHECK: File saved at correct path
|
|
256
|
+
- CHECK: Markdown formatting valid
|
|
257
|
+
- DEPENDS ON: Task 5
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Implementation Patterns & Key Details
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
# Pattern: Running tests with multiple reporters
|
|
264
|
+
npm test -- --reporter=verbose --reporter=json --outputFile=test-results.json
|
|
265
|
+
# This produces both console output and JSON file for analysis
|
|
266
|
+
|
|
267
|
+
# Pattern: Extracting test count from vitest output
|
|
268
|
+
# Vitest console output format:
|
|
269
|
+
# Test Files 39 passed (39)
|
|
270
|
+
# Tests 344 passed (344)
|
|
271
|
+
# Use grep/awk to extract:
|
|
272
|
+
npm test 2>&1 | grep -E "Test Files|Tests" | tee test-summary.txt
|
|
273
|
+
|
|
274
|
+
# Pattern: JSON result parsing (Node.js one-liner)
|
|
275
|
+
node -e "const data = require('./test-results.json'); console.log(\`Total: \${data.stats.tests}, Passed: \${data.stats.tests - data.stats.failures}, Failed: \${data.stats.failures}\`)"
|
|
276
|
+
|
|
277
|
+
# Pattern: Checking for pre-existing failures
|
|
278
|
+
git log --oneline --all -- "src/__tests__/**/*.test.ts" | head -20
|
|
279
|
+
# Shows recent test file modifications
|
|
280
|
+
|
|
281
|
+
# Pattern: Analyzing specific test failures
|
|
282
|
+
npm test -- --testNamePattern="failing_test_name"
|
|
283
|
+
# Run only the failing test for detailed output
|
|
284
|
+
|
|
285
|
+
# Pattern: Determining if failure is new
|
|
286
|
+
git diff HEAD~5 -- "src/__tests__/file_with_failure.test.ts"
|
|
287
|
+
# Check if test was recently modified as part of bug fixes
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Integration Points
|
|
291
|
+
|
|
292
|
+
```yaml
|
|
293
|
+
NPM_SCRIPTS:
|
|
294
|
+
- use: npm test
|
|
295
|
+
- command: vitest run
|
|
296
|
+
- location: package.json scripts section
|
|
297
|
+
- gotcha: Don't use vitest directly - always use npm script for consistency
|
|
298
|
+
|
|
299
|
+
VITEST_CONFIG:
|
|
300
|
+
- location: vitest.config.ts
|
|
301
|
+
- include pattern: src/__tests__/**/*.test.ts
|
|
302
|
+
- globals: true (describe/it/expect available globally)
|
|
303
|
+
|
|
304
|
+
DOCUMENTATION:
|
|
305
|
+
- baseline: plan/001_d3bb02af4886/TEST_RESULTS.md
|
|
306
|
+
- expected: 344+ passing tests
|
|
307
|
+
- reference for comparison
|
|
308
|
+
|
|
309
|
+
NEXT_SUBTASK:
|
|
310
|
+
- if failures found: P1.M4.T1.S2 (Fix any test failures caused by bug fixes)
|
|
311
|
+
- handoff: Include failure details in report for next subtask
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Validation Loop
|
|
315
|
+
|
|
316
|
+
### Level 1: Test Execution Completeness (Immediate Feedback)
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# Verify test suite runs to completion
|
|
320
|
+
npm test 2>&1 | tee test-output.log
|
|
321
|
+
|
|
322
|
+
# Check for early termination or crashes
|
|
323
|
+
grep -i "error\|exception\|crash" test-output.log
|
|
324
|
+
# Expected: No unexpected errors or crashes (test failures are OK)
|
|
325
|
+
|
|
326
|
+
# Verify output contains test summary
|
|
327
|
+
grep -E "Test Files|Tests" test-output.log
|
|
328
|
+
# Expected: Summary lines with counts present
|
|
329
|
+
|
|
330
|
+
# Check exit code
|
|
331
|
+
echo $?
|
|
332
|
+
# Expected: 0 if all tests pass, 1 if any tests fail (both are valid outcomes)
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Level 2: Metrics Extraction Accuracy (Component Validation)
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# Generate JSON output for programmatic validation
|
|
339
|
+
npm test -- --reporter=json --outputFile=test-results.json
|
|
340
|
+
|
|
341
|
+
# Verify JSON file exists and is valid
|
|
342
|
+
cat test-results.json | jq . > /dev/null && echo "Valid JSON" || echo "Invalid JSON"
|
|
343
|
+
# Expected: "Valid JSON"
|
|
344
|
+
|
|
345
|
+
# Extract and verify metrics
|
|
346
|
+
cat test-results.json | jq '.stats | {tests: .tests, passed: (.tests - .failures), failed: .failures, duration: .duration}'
|
|
347
|
+
# Expected: Object with all fields populated
|
|
348
|
+
|
|
349
|
+
# Compare console output with JSON counts
|
|
350
|
+
CONSOLE_TESTS=$(grep "Tests" test-output.log | grep -oE "[0-9]+ passed" | grep -oE "[0-9]+")
|
|
351
|
+
JSON_TESTS=$(cat test-results.json | jq -r '.stats.tests')
|
|
352
|
+
echo "Console: $CONSOLE_TESTS, JSON: $JSON_TESTS"
|
|
353
|
+
# Expected: Numbers match (or close if accounting for skipped tests)
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Level 3: Baseline Validation (System Validation)
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
# Verify test count meets or exceeds baseline
|
|
360
|
+
CURRENT_COUNT=$(cat test-results.json | jq -r '.stats.tests')
|
|
361
|
+
BASELINE_COUNT=344
|
|
362
|
+
if [ "$CURRENT_COUNT" -ge "$BASELINE_COUNT" ]; then
|
|
363
|
+
echo "PASS: Test count ($CURRENT_COUNT) meets baseline ($BASELINE_COUNT)"
|
|
364
|
+
else
|
|
365
|
+
echo "WARNING: Test count ($CURRENT_COUNT) below baseline ($BASELINE_COUNT)"
|
|
366
|
+
fi
|
|
367
|
+
|
|
368
|
+
# Check pass rate
|
|
369
|
+
PASSED=$(cat test-results.json | jq -r '.stats.tests - .stats.failures')
|
|
370
|
+
PASS_RATE=$(echo "scale=2; $PASSED * 100 / $CURRENT_COUNT" | bc)
|
|
371
|
+
echo "Pass rate: $PASS_RATE%"
|
|
372
|
+
# Expected: 100% for success, <100% requires failure analysis
|
|
373
|
+
|
|
374
|
+
# Verify no new test files were accidentally excluded
|
|
375
|
+
NEW_TEST_FILES=$(git diff --name-only HEAD~10 | grep -E "\.test\.ts$" | wc -l)
|
|
376
|
+
echo "New or modified test files: $NEW_TEST_FILES"
|
|
377
|
+
# Expected: Informational - helps explain count changes
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Level 4: Report Quality Validation
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
# Verify report file exists
|
|
384
|
+
REPORT_PATH="plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md"
|
|
385
|
+
if [ -f "$REPORT_PATH" ]; then
|
|
386
|
+
echo "PASS: Report file exists at $REPORT_PATH"
|
|
387
|
+
else
|
|
388
|
+
echo "FAIL: Report file not found"
|
|
389
|
+
fi
|
|
390
|
+
|
|
391
|
+
# Verify required sections exist in report
|
|
392
|
+
for section in "Execution Summary" "Test Metrics" "Failure Analysis" "Regression Assessment"; do
|
|
393
|
+
if grep -q "$section" "$REPORT_PATH"; then
|
|
394
|
+
echo "PASS: Section '$section' present"
|
|
395
|
+
else
|
|
396
|
+
echo "FAIL: Section '$section' missing"
|
|
397
|
+
fi
|
|
398
|
+
done
|
|
399
|
+
|
|
400
|
+
# Verify markdown formatting
|
|
401
|
+
grep -E "^#+ " "$REPORT_PATH" | head -20
|
|
402
|
+
# Expected: Proper heading hierarchy present
|
|
403
|
+
|
|
404
|
+
# Verify test count documented in report
|
|
405
|
+
grep -E "[0-9]+ test" "$REPORT_PATH"
|
|
406
|
+
# Expected: Test counts mentioned in report
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## Final Validation Checklist
|
|
410
|
+
|
|
411
|
+
### Technical Validation
|
|
412
|
+
|
|
413
|
+
- [ ] Test suite executed completely with `npm test`
|
|
414
|
+
- [ ] Test output captured (console and/or JSON)
|
|
415
|
+
- [ ] Metrics extracted: total, passed, failed, skipped
|
|
416
|
+
- [ ] Test count meets or exceeds baseline (344+)
|
|
417
|
+
- [ ] Report file created at specified path
|
|
418
|
+
- [ ] Report contains all required sections
|
|
419
|
+
|
|
420
|
+
### Feature Validation
|
|
421
|
+
|
|
422
|
+
- [ ] Execution summary includes command, timestamp, duration
|
|
423
|
+
- [ ] Test metrics are accurate and clearly presented
|
|
424
|
+
- [ ] Failures (if any) are documented with error details
|
|
425
|
+
- [ ] Failure analysis distinguishes new vs. pre-existing
|
|
426
|
+
- [ ] Regression assessment is supported by evidence
|
|
427
|
+
- [ ] Recommendations provided for next steps (if applicable)
|
|
428
|
+
|
|
429
|
+
### Code Quality Validation
|
|
430
|
+
|
|
431
|
+
- [ ] Report follows markdown best practices
|
|
432
|
+
- [ ] All claims are supported by test output evidence
|
|
433
|
+
- [ ] File paths and commands are accurate
|
|
434
|
+
- [ ] Analysis is objective and fact-based
|
|
435
|
+
- [ ] Report is self-contained (no external references required)
|
|
436
|
+
|
|
437
|
+
### Documentation & Deployment
|
|
438
|
+
|
|
439
|
+
- [ ] Report stored at correct path: `plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md`
|
|
440
|
+
- [ ] Report is readable by both humans and machines
|
|
441
|
+
- [ ] Timestamped for version control traceability
|
|
442
|
+
- [ ] Ready for handoff to P1.M4.T1.S2 if failures found
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## Anti-Patterns to Avoid
|
|
447
|
+
|
|
448
|
+
- ❌ Don't assume test count without verification - always run and count
|
|
449
|
+
- ❌ Don't ignore skipped tests - document them separately
|
|
450
|
+
- ❌ Don't confuse test files with test cases (39 files != 39 tests)
|
|
451
|
+
- ❌ Don't modify tests during execution - this is a read-only validation task
|
|
452
|
+
- ❌ Don't rely on memory - capture all output to files
|
|
453
|
+
- ❌ Don't blame failures on bug fixes without evidence - verify with git history
|
|
454
|
+
- ❌ Don't skip the report creation - output is the primary deliverable
|
|
455
|
+
- ❌ Don't use relative paths in report - all paths should be absolute from project root
|
|
456
|
+
- ❌ Don't forget to document the vitest version used
|
|
457
|
+
- ❌ Don't proceed to P1.M4.T1.S2 without completing this report
|
|
458
|
+
|
|
459
|
+
## Appendix: Quick Reference
|
|
460
|
+
|
|
461
|
+
### Vitest Commands for This Task
|
|
462
|
+
|
|
463
|
+
```bash
|
|
464
|
+
# Basic test execution
|
|
465
|
+
npm test
|
|
466
|
+
|
|
467
|
+
# Verbose output with capture
|
|
468
|
+
npm test 2>&1 | tee test-output.log
|
|
469
|
+
|
|
470
|
+
# JSON output for parsing
|
|
471
|
+
npm test -- --reporter=json --outputFile=test-results.json
|
|
472
|
+
|
|
473
|
+
# Both console and JSON
|
|
474
|
+
npm test -- --reporter=verbose --reporter=json --outputFile=test-results.json
|
|
475
|
+
|
|
476
|
+
# Run specific test file (for debugging failures)
|
|
477
|
+
npm test -- src/__tests__/unit/workflow.test.ts
|
|
478
|
+
|
|
479
|
+
# Run tests matching pattern
|
|
480
|
+
npm test -- --testNamePattern="child"
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Test Result JSON Structure
|
|
484
|
+
|
|
485
|
+
```json
|
|
486
|
+
{
|
|
487
|
+
"stats": {
|
|
488
|
+
"tests": 344,
|
|
489
|
+
"failures": 0,
|
|
490
|
+
"errors": 0,
|
|
491
|
+
"duration": 5000
|
|
492
|
+
},
|
|
493
|
+
"testFiles": [
|
|
494
|
+
{
|
|
495
|
+
"name": "src/__tests__/unit/workflow.test.ts",
|
|
496
|
+
"tests": [
|
|
497
|
+
{
|
|
498
|
+
"name": "Workflow should execute steps",
|
|
499
|
+
"result": {
|
|
500
|
+
"status": "pass"
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
]
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
}
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### Report Template
|
|
510
|
+
|
|
511
|
+
```markdown
|
|
512
|
+
# Test Execution Report - P1.M4.T1.S1
|
|
513
|
+
|
|
514
|
+
## Execution Summary
|
|
515
|
+
- **Command**: `npm test`
|
|
516
|
+
- **Timestamp**: YYYY-MM-DD HH:MM:SS
|
|
517
|
+
- **Duration**: X seconds
|
|
518
|
+
- **Vitest Version**: X.X.X
|
|
519
|
+
|
|
520
|
+
## Test Metrics
|
|
521
|
+
- **Total Tests**: XXX
|
|
522
|
+
- **Passed**: XXX
|
|
523
|
+
- **Failed**: XXX
|
|
524
|
+
- **Skipped**: XXX
|
|
525
|
+
- **Pass Rate**: XX%
|
|
526
|
+
|
|
527
|
+
## Failure Analysis
|
|
528
|
+
[List any failures with error details and root cause analysis]
|
|
529
|
+
|
|
530
|
+
## Regression Assessment
|
|
531
|
+
[Analysis of whether failures are new or pre-existing]
|
|
532
|
+
|
|
533
|
+
## Recommendations
|
|
534
|
+
[Next steps based on findings]
|
|
535
|
+
```
|