groundswell 0.0.2 → 1.0.0
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/LICENSE +21 -0
- package/README.md +26 -9
- package/dist/cache/cache-key.d.ts +86 -0
- package/dist/cache/cache-key.d.ts.map +1 -0
- package/dist/cache/cache-key.js +204 -0
- package/dist/cache/cache-key.js.map +1 -0
- package/dist/cache/cache.d.ts +104 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +179 -0
- package/dist/cache/cache.js.map +1 -0
- package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/core/agent.d.ts +203 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +833 -0
- package/dist/core/agent.js.map +1 -0
- package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +80 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/event-tree.d.ts +72 -0
- package/dist/core/event-tree.d.ts.map +1 -0
- package/dist/core/event-tree.js +211 -0
- package/dist/core/event-tree.js.map +1 -0
- package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
- package/dist/core/factory.d.ts.map +1 -0
- package/dist/core/factory.js +110 -0
- package/dist/core/factory.js.map +1 -0
- package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +50 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +91 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/mcp-handler.d.ts +127 -0
- package/dist/core/mcp-handler.d.ts.map +1 -0
- package/dist/core/mcp-handler.js +323 -0
- package/dist/core/mcp-handler.js.map +1 -0
- package/dist/core/prompt.d.ts +80 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +120 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/workflow-context.d.ts +61 -0
- package/dist/core/workflow-context.d.ts.map +1 -0
- package/dist/core/workflow-context.js +358 -0
- package/dist/core/workflow-context.js.map +1 -0
- package/dist/core/workflow.d.ts +543 -0
- package/dist/core/workflow.d.ts.map +1 -0
- package/dist/core/workflow.js +986 -0
- package/dist/core/workflow.js.map +1 -0
- package/dist/debugger/event-replayer.d.ts +422 -0
- package/dist/debugger/event-replayer.d.ts.map +1 -0
- package/dist/debugger/event-replayer.js +639 -0
- package/dist/debugger/event-replayer.js.map +1 -0
- package/dist/debugger/index.d.ts +2 -0
- package/dist/debugger/index.d.ts.map +1 -0
- package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
- package/dist/debugger/index.js.map +1 -0
- package/dist/debugger/tree-debugger.d.ts +240 -0
- package/dist/debugger/tree-debugger.d.ts.map +1 -0
- package/dist/debugger/tree-debugger.js +620 -0
- package/dist/debugger/tree-debugger.js.map +1 -0
- package/dist/decorators/index.d.ts +4 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/observed-state.d.ts +32 -0
- package/dist/decorators/observed-state.d.ts.map +1 -0
- package/dist/decorators/observed-state.js +79 -0
- package/dist/decorators/observed-state.js.map +1 -0
- package/dist/decorators/step.d.ts +15 -0
- package/dist/decorators/step.d.ts.map +1 -0
- package/dist/decorators/step.js +192 -0
- package/dist/decorators/step.js.map +1 -0
- package/dist/decorators/task.d.ts +50 -0
- package/dist/decorators/task.d.ts.map +1 -0
- package/dist/decorators/task.js +118 -0
- package/dist/decorators/task.js.map +1 -0
- package/dist/examples/index.d.ts +3 -0
- package/dist/examples/index.d.ts.map +1 -0
- package/{src/examples/index.ts → dist/examples/index.js} +1 -0
- package/dist/examples/index.js.map +1 -0
- package/dist/examples/tdd-orchestrator.d.ts +15 -0
- package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
- package/dist/examples/tdd-orchestrator.js +121 -0
- package/dist/examples/tdd-orchestrator.js.map +1 -0
- package/dist/examples/test-cycle-workflow.d.ts +14 -0
- package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
- package/dist/examples/test-cycle-workflow.js +116 -0
- package/dist/examples/test-cycle-workflow.js.map +1 -0
- package/dist/harnesses/claude-code-harness.d.ts +391 -0
- package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
- package/dist/harnesses/claude-code-harness.js +1076 -0
- package/dist/harnesses/claude-code-harness.js.map +1 -0
- package/dist/harnesses/harness-registry.d.ts +440 -0
- package/dist/harnesses/harness-registry.d.ts.map +1 -0
- package/dist/harnesses/harness-registry.js +543 -0
- package/dist/harnesses/harness-registry.js.map +1 -0
- package/dist/harnesses/index.d.ts +12 -0
- package/dist/harnesses/index.d.ts.map +1 -0
- package/dist/harnesses/index.js +11 -0
- package/dist/harnesses/index.js.map +1 -0
- package/dist/harnesses/pi-harness.d.ts +219 -0
- package/dist/harnesses/pi-harness.d.ts.map +1 -0
- package/dist/harnesses/pi-harness.js +676 -0
- package/dist/harnesses/pi-harness.js.map +1 -0
- package/dist/harnesses/pi-schema-converter.d.ts +24 -0
- package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
- package/dist/harnesses/pi-schema-converter.js +81 -0
- package/dist/harnesses/pi-schema-converter.js.map +1 -0
- package/dist/harnesses/register-defaults.d.ts +24 -0
- package/dist/harnesses/register-defaults.d.ts.map +1 -0
- package/dist/harnesses/register-defaults.js +40 -0
- package/dist/harnesses/register-defaults.js.map +1 -0
- package/dist/harnesses/session-store.d.ts +201 -0
- package/dist/harnesses/session-store.d.ts.map +1 -0
- package/dist/harnesses/session-store.js +254 -0
- package/dist/harnesses/session-store.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/reflection/index.d.ts +5 -0
- package/dist/reflection/index.d.ts.map +1 -0
- package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
- package/dist/reflection/index.js.map +1 -0
- package/dist/reflection/reflection.d.ts +84 -0
- package/dist/reflection/reflection.d.ts.map +1 -0
- package/dist/reflection/reflection.js +344 -0
- package/dist/reflection/reflection.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/introspection.d.ts +165 -0
- package/dist/tools/introspection.d.ts.map +1 -0
- package/dist/tools/introspection.js +324 -0
- package/dist/tools/introspection.js.map +1 -0
- package/dist/types/agent.d.ts +1317 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +423 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/decorators.d.ts +40 -0
- package/dist/types/decorators.d.ts.map +1 -0
- package/dist/types/decorators.js +2 -0
- package/dist/types/decorators.js.map +1 -0
- package/dist/types/error-strategy.d.ts +13 -0
- package/dist/types/error-strategy.d.ts.map +1 -0
- package/dist/types/error-strategy.js +2 -0
- package/dist/types/error-strategy.js.map +1 -0
- package/dist/types/error.d.ts +20 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +2 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/events.d.ts +113 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +2 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/harnesses.d.ts +474 -0
- package/dist/types/harnesses.d.ts.map +1 -0
- package/dist/types/harnesses.js +2 -0
- package/dist/types/harnesses.js.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logging.d.ts +24 -0
- package/dist/types/logging.d.ts.map +1 -0
- package/dist/types/logging.js +2 -0
- package/dist/types/logging.js.map +1 -0
- package/dist/types/observer.d.ts +18 -0
- package/dist/types/observer.d.ts.map +1 -0
- package/dist/types/observer.js +2 -0
- package/dist/types/observer.js.map +1 -0
- package/dist/types/prompt.d.ts +31 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +6 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/providers.d.ts +691 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/providers.js +14 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/types/reflection.d.ts +96 -0
- package/dist/types/reflection.d.ts.map +1 -0
- package/dist/types/reflection.js +24 -0
- package/dist/types/reflection.js.map +1 -0
- package/dist/types/restart.d.ts +132 -0
- package/dist/types/restart.d.ts.map +1 -0
- package/dist/types/restart.js +2 -0
- package/dist/types/restart.js.map +1 -0
- package/dist/types/sdk-primitives.d.ts +118 -0
- package/dist/types/sdk-primitives.d.ts.map +1 -0
- package/dist/types/sdk-primitives.js +6 -0
- package/dist/types/sdk-primitives.js.map +1 -0
- package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
- package/dist/types/snapshot.d.ts.map +1 -0
- package/dist/types/snapshot.js +2 -0
- package/dist/types/snapshot.js.map +1 -0
- package/dist/types/streaming.d.ts +194 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +67 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/workflow-context.d.ts +275 -0
- package/dist/types/workflow-context.d.ts.map +1 -0
- package/dist/types/workflow-context.js +8 -0
- package/dist/types/workflow-context.js.map +1 -0
- package/dist/types/workflow.d.ts +30 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +2 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/agent-validation.d.ts +88 -0
- package/dist/utils/agent-validation.d.ts.map +1 -0
- package/dist/utils/agent-validation.js +87 -0
- package/dist/utils/agent-validation.js.map +1 -0
- package/dist/utils/delay.d.ts +7 -0
- package/dist/utils/delay.d.ts.map +1 -0
- package/dist/utils/delay.js +9 -0
- package/dist/utils/delay.js.map +1 -0
- package/dist/utils/harness-config.d.ts +180 -0
- package/dist/utils/harness-config.d.ts.map +1 -0
- package/dist/utils/harness-config.js +311 -0
- package/dist/utils/harness-config.js.map +1 -0
- package/dist/utils/id.d.ts +6 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +12 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/model-spec.d.ts +110 -0
- package/dist/utils/model-spec.d.ts.map +1 -0
- package/dist/utils/model-spec.js +149 -0
- package/dist/utils/model-spec.js.map +1 -0
- package/dist/utils/observable.d.ts +54 -0
- package/dist/utils/observable.d.ts.map +1 -0
- package/dist/utils/observable.js +82 -0
- package/dist/utils/observable.js.map +1 -0
- package/dist/utils/provider-config.d.ts +10 -0
- package/dist/utils/provider-config.d.ts.map +1 -0
- package/dist/utils/provider-config.js +10 -0
- package/dist/utils/provider-config.js.map +1 -0
- package/dist/utils/restart-analysis.d.ts +202 -0
- package/dist/utils/restart-analysis.d.ts.map +1 -0
- package/dist/utils/restart-analysis.js +426 -0
- package/dist/utils/restart-analysis.js.map +1 -0
- package/dist/utils/session-serialization.d.ts +118 -0
- package/dist/utils/session-serialization.d.ts.map +1 -0
- package/dist/utils/session-serialization.js +217 -0
- package/dist/utils/session-serialization.js.map +1 -0
- package/dist/utils/workflow-error-utils.d.ts +22 -0
- package/dist/utils/workflow-error-utils.d.ts.map +1 -0
- package/dist/utils/workflow-error-utils.js +45 -0
- package/dist/utils/workflow-error-utils.js.map +1 -0
- package/package.json +34 -5
- package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
- package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
- package/.claude/commands/task-breakdown.md +0 -94
- package/.claude/settings.local.json +0 -9
- package/.claude/system_prompts/task-breakdown.md +0 -101
- package/CHANGELOG.md +0 -188
- package/PRD.md +0 -543
- package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
- package/PRPs/PRDs/002-agent-prompt.md +0 -390
- package/PRPs/PRDs/003-agent-prompt.md +0 -943
- package/PRPs/PRDs/004-agent-prompt.md +0 -1136
- package/PRPs/PRDs/tasks-001.json +0 -492
- package/PRPs/README.md +0 -83
- package/PRPs/templates/prp_base.md +0 -222
- package/docs/agent.md +0 -422
- package/docs/prompt.md +0 -419
- package/docs/workflow.md +0 -600
- package/examples/README.md +0 -258
- package/examples/examples/01-basic-workflow.ts +0 -100
- package/examples/examples/02-decorator-options.ts +0 -217
- package/examples/examples/03-parent-child.ts +0 -241
- package/examples/examples/04-observers-debugger.ts +0 -340
- package/examples/examples/05-error-handling.ts +0 -387
- package/examples/examples/06-concurrent-tasks.ts +0 -352
- package/examples/examples/07-agent-loops.ts +0 -432
- package/examples/examples/08-sdk-features.ts +0 -667
- package/examples/examples/09-reflection.ts +0 -573
- package/examples/examples/10-introspection.ts +0 -550
- package/examples/examples/11-reparenting-workflows.ts +0 -269
- package/examples/index.ts +0 -147
- package/examples/utils/helpers.ts +0 -57
- package/package-lock.json +0 -2398
- package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
- package/plan/001_d3bb02af4886/backlog.json +0 -867
- package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
- package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
- package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
- package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
- package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
- package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
- package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
- package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
- package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
- package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
- package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
- package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
- package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
- package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
- package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
- package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
- package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
- package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
- package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
- package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
- package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
- package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
- package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
- package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
- package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
- package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
- package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
- package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
- package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
- package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
- package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
- package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
- package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
- package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
- package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
- package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
- package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
- package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
- package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
- package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
- package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
- package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
- package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
- package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
- package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
- package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
- package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
- package/scripts/generate-llms-full.ts +0 -206
- package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
- package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
- package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
- package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
- package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
- package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
- package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
- package/src/__tests__/adversarial/edge-case.test.ts +0 -703
- package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
- package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
- package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
- package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
- package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
- package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
- package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
- package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
- package/src/__tests__/helpers/index.ts +0 -18
- package/src/__tests__/helpers/tree-verification.ts +0 -257
- package/src/__tests__/integration/agent-workflow.test.ts +0 -256
- package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
- package/src/__tests__/integration/observer-logging.test.ts +0 -643
- package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
- package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
- package/src/__tests__/unit/agent.test.ts +0 -169
- package/src/__tests__/unit/cache-key.test.ts +0 -182
- package/src/__tests__/unit/cache.test.ts +0 -172
- package/src/__tests__/unit/context.test.ts +0 -217
- package/src/__tests__/unit/decorators.test.ts +0 -100
- package/src/__tests__/unit/introspection-tools.test.ts +0 -277
- package/src/__tests__/unit/logger.test.ts +0 -293
- package/src/__tests__/unit/observable.test.ts +0 -321
- package/src/__tests__/unit/prompt.test.ts +0 -135
- package/src/__tests__/unit/reflection.test.ts +0 -210
- package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
- package/src/__tests__/unit/tree-debugger.test.ts +0 -85
- package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
- package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
- package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
- package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
- package/src/__tests__/unit/workflow.test.ts +0 -357
- package/src/cache/cache-key.ts +0 -244
- package/src/cache/cache.ts +0 -236
- package/src/core/agent.ts +0 -593
- package/src/core/event-tree.ts +0 -260
- package/src/core/logger.ts +0 -112
- package/src/core/mcp-handler.ts +0 -184
- package/src/core/prompt.ts +0 -150
- package/src/core/workflow-context.ts +0 -351
- package/src/core/workflow.ts +0 -540
- package/src/debugger/tree-debugger.ts +0 -255
- package/src/decorators/observed-state.ts +0 -95
- package/src/decorators/step.ts +0 -139
- package/src/decorators/task.ts +0 -159
- package/src/examples/tdd-orchestrator.ts +0 -65
- package/src/examples/test-cycle-workflow.ts +0 -64
- package/src/index.ts +0 -142
- package/src/reflection/reflection.ts +0 -407
- package/src/tools/index.ts +0 -36
- package/src/tools/introspection.ts +0 -464
- package/src/types/agent.ts +0 -90
- package/src/types/decorators.ts +0 -32
- package/src/types/error-strategy.ts +0 -13
- package/src/types/error.ts +0 -20
- package/src/types/events.ts +0 -75
- package/src/types/index.ts +0 -55
- package/src/types/logging.ts +0 -24
- package/src/types/observer.ts +0 -18
- package/src/types/prompt.ts +0 -40
- package/src/types/reflection.ts +0 -117
- package/src/types/sdk-primitives.ts +0 -128
- package/src/types/workflow-context.ts +0 -163
- package/src/types/workflow.ts +0 -37
- package/src/utils/id.ts +0 -11
- package/src/utils/index.ts +0 -4
- package/src/utils/observable.ts +0 -106
- package/src/utils/workflow-error-utils.ts +0 -56
- package/tsconfig.json +0 -22
- package/vitest.config.ts +0 -16
|
@@ -1,564 +0,0 @@
|
|
|
1
|
-
# PRP: P1.M2.T2.S1 - Add errorMergeStrategy to TaskOptions Interface
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
## Goal
|
|
6
|
-
|
|
7
|
-
**Feature Goal**: Extend the `TaskOptions` interface to include `errorMergeStrategy?: ErrorMergeStrategy` field, enabling configuration of concurrent error aggregation behavior in the @Task decorator.
|
|
8
|
-
|
|
9
|
-
**Deliverable**: Modified `src/types/decorators.ts` with:
|
|
10
|
-
1. Import statement for `ErrorMergeStrategy` type
|
|
11
|
-
2. New optional `errorMergeStrategy` field added to `TaskOptions` interface
|
|
12
|
-
3. TypeScript compilation successful with no type errors
|
|
13
|
-
|
|
14
|
-
**Success Definition**:
|
|
15
|
-
- TypeScript compiler (`tsc --noEmit`) completes without errors
|
|
16
|
-
- `TaskOptions` interface includes the new field with correct type annotation
|
|
17
|
-
- Export of `TaskOptions` from `src/types/index.ts` continues to work
|
|
18
|
-
- The field is properly optional (can be omitted when using @Task decorator)
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## User Persona (if applicable)
|
|
23
|
-
|
|
24
|
-
**Target User**: Library Developer / Architect
|
|
25
|
-
|
|
26
|
-
**Use Case**: A developer implementing concurrent workflow tasks needs to configure how multiple errors from failed concurrent operations should be merged and propagated.
|
|
27
|
-
|
|
28
|
-
**User Journey**:
|
|
29
|
-
1. Developer reads @Task decorator documentation
|
|
30
|
-
2. Developer discovers `errorMergeStrategy` option in TaskOptions
|
|
31
|
-
3. Developer passes `errorMergeStrategy` configuration to @Task decorator
|
|
32
|
-
4. Concurrent task failures are aggregated according to the specified strategy
|
|
33
|
-
|
|
34
|
-
**Pain Points Addressed**:
|
|
35
|
-
- Currently no way to configure error merging for concurrent tasks
|
|
36
|
-
- ErrorMergeStrategy type exists but is completely unused (zero imports in codebase)
|
|
37
|
-
- Developers cannot opt-in to multi-error aggregation behavior
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Why
|
|
42
|
-
|
|
43
|
-
- **Architectural Foundation**: This change enables P1.M2.T2.S2 (implement error aggregation logic in @Task decorator). Without this field, there is no configuration hook to pass ErrorMergeStrategy into the decorator.
|
|
44
|
-
- **PRD Compliance**: PRD Section 10 specifies "Optional Multi-Error Merging" as a feature. The type exists but has no implementation path.
|
|
45
|
-
- **Backward Compatibility**: Adding an optional field maintains existing behavior (undefined = default behavior unchanged) while enabling future functionality.
|
|
46
|
-
- **Dependency Chain**: This is the first subtask in P1.M2.T2, the parent task depends on this interface change being complete before error aggregation logic can be implemented.
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## What
|
|
51
|
-
|
|
52
|
-
Add `errorMergeStrategy?: ErrorMergeStrategy` field to the `TaskOptions` interface in `src/types/decorators.ts`.
|
|
53
|
-
|
|
54
|
-
### Current State
|
|
55
|
-
```typescript
|
|
56
|
-
// src/types/decorators.ts
|
|
57
|
-
export interface TaskOptions {
|
|
58
|
-
/** Custom task name (defaults to method name) */
|
|
59
|
-
name?: string;
|
|
60
|
-
/** If true, run returned workflows concurrently */
|
|
61
|
-
concurrent?: boolean;
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Target State
|
|
66
|
-
```typescript
|
|
67
|
-
// src/types/decorators.ts
|
|
68
|
-
import type { ErrorMergeStrategy } from './error-strategy.js';
|
|
69
|
-
|
|
70
|
-
export interface TaskOptions {
|
|
71
|
-
/** Custom task name (defaults to method name) */
|
|
72
|
-
name?: string;
|
|
73
|
-
/** If true, run returned workflows concurrently */
|
|
74
|
-
concurrent?: boolean;
|
|
75
|
-
/** Strategy for merging errors from concurrent task execution */
|
|
76
|
-
errorMergeStrategy?: ErrorMergeStrategy;
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Success Criteria
|
|
81
|
-
|
|
82
|
-
- [ ] `import type { ErrorMergeStrategy } from './error-strategy.js';` added at top of file
|
|
83
|
-
- [ ] `errorMergeStrategy?: ErrorMergeStrategy;` field added to TaskOptions interface
|
|
84
|
-
- [ ] Field placed after `concurrent` (maintains logical ordering)
|
|
85
|
-
- [ ] JSDoc comment included: `/** Strategy for merging errors from concurrent task execution */`
|
|
86
|
-
- [ ] TypeScript compilation succeeds: `npx tsc --noEmit`
|
|
87
|
-
- [ ] No linting errors: `npm run lint` (if available)
|
|
88
|
-
- [ ] Export verification: `TaskOptions` still exports correctly from `src/types/index.ts`
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## All Needed Context
|
|
93
|
-
|
|
94
|
-
### Context Completeness Check
|
|
95
|
-
|
|
96
|
-
**"No Prior Knowledge" Test**: If someone knew nothing about this codebase, would they have everything needed to implement this successfully?
|
|
97
|
-
|
|
98
|
-
- [X] Exact file path and current content of target file (`src/types/decorators.ts`)
|
|
99
|
-
- [X] Exact definition of type to import (`ErrorMergeStrategy` from `src/types/error-strategy.ts`)
|
|
100
|
-
- [X] Import syntax pattern used in codebase (`import type` with `.js` extension)
|
|
101
|
-
- [X] JSDoc comment formatting pattern from existing code
|
|
102
|
-
- [X] Validation commands that work in this project
|
|
103
|
-
|
|
104
|
-
### Documentation & References
|
|
105
|
-
|
|
106
|
-
```yaml
|
|
107
|
-
# MUST READ - Include these in your context window
|
|
108
|
-
|
|
109
|
-
- file: src/types/decorators.ts
|
|
110
|
-
why: Target file to modify - contains TaskOptions interface that needs the new field
|
|
111
|
-
pattern: Interface definition with optional fields using `?` syntax, JSDoc comments above each field
|
|
112
|
-
gotcha: File uses no imports currently - this will be the first import added
|
|
113
|
-
current_content: |
|
|
114
|
-
export interface StepOptions {
|
|
115
|
-
name?: string;
|
|
116
|
-
snapshotState?: boolean;
|
|
117
|
-
trackTiming?: boolean;
|
|
118
|
-
logStart?: boolean;
|
|
119
|
-
logFinish?: boolean;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export interface TaskOptions {
|
|
123
|
-
name?: string;
|
|
124
|
-
concurrent?: boolean;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
- file: src/types/error-strategy.ts
|
|
128
|
-
why: Contains the ErrorMergeStrategy interface definition that needs to be imported
|
|
129
|
-
pattern: Type-only import with `.js` extension (TypeScript module resolution)
|
|
130
|
-
gotcha: The file itself imports WorkflowError from './error.js'
|
|
131
|
-
current_content: |
|
|
132
|
-
import type { WorkflowError } from './error.js';
|
|
133
|
-
|
|
134
|
-
export interface ErrorMergeStrategy {
|
|
135
|
-
/** Enable error merging (default: false, first error wins) */
|
|
136
|
-
enabled: boolean;
|
|
137
|
-
/** Maximum depth to merge errors */
|
|
138
|
-
maxMergeDepth?: number;
|
|
139
|
-
/** Custom function to combine multiple errors */
|
|
140
|
-
combine?(errors: WorkflowError[]): WorkflowError;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
- file: src/types/index.ts
|
|
144
|
-
why: Central export barrel - verify TaskOptions export continues to work
|
|
145
|
-
pattern: Re-exports using `export type { TaskOptions } from './decorators.js';`
|
|
146
|
-
gotcha: This file already exports both StepOptions and TaskOptions from decorators.ts
|
|
147
|
-
|
|
148
|
-
- docfile: plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md
|
|
149
|
-
why: Architectural context explaining why ErrorMergeStrategy exists but isn't used
|
|
150
|
-
section: Lines 101-105 ("Status: Defined But Unused"), Lines 163-168 ("Recommended Extension")
|
|
151
|
-
critical: |
|
|
152
|
-
- ErrorMergeStrategy is exported from src/index.ts
|
|
153
|
-
- ZERO imports anywhere in implementation files
|
|
154
|
-
- Only appears in type definitions and documentation
|
|
155
|
-
- TaskOptions interface does not include errorMergeStrategy property
|
|
156
|
-
- @Task decorator has no way to receive ErrorMergeStrategy configuration
|
|
157
|
-
|
|
158
|
-
- url: https://www.typescriptlang.org/docs/handbook/2/objects.html#optional-properties
|
|
159
|
-
why: TypeScript official documentation on optional properties syntax
|
|
160
|
-
section: Optional Properties section
|
|
161
|
-
critical: Use `propertyName?: Type` syntax for optional fields
|
|
162
|
-
|
|
163
|
-
- url: https://www.typescriptlang.org/docs/handbook/modules.html#importing-types
|
|
164
|
-
why: TypeScript official documentation on type-only imports
|
|
165
|
-
section: Importing Types section
|
|
166
|
-
critical: Use `import type { TypeName } from './module.js';` for type-only imports
|
|
167
|
-
|
|
168
|
-
- file: src/types/workflow-context.ts
|
|
169
|
-
why: Example of proper type import pattern in codebase
|
|
170
|
-
pattern: Lines 8-9 show `import type { WorkflowNode } from './workflow.js';`
|
|
171
|
-
gotcha: All type imports in this codebase use `.js` extension (TypeScript module resolution to .js files)
|
|
172
|
-
|
|
173
|
-
- file: src/types/agent.ts
|
|
174
|
-
why: Example of optional configuration interface pattern similar to TaskOptions
|
|
175
|
-
pattern: AgentConfig interface shows multiple optional boolean and complex type fields
|
|
176
|
-
gotcha: Optional fields for feature flags and configuration options follow consistent naming
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Current Codebase Tree
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
/home/dustin/projects/groundswell
|
|
183
|
-
├── plan/
|
|
184
|
-
│ └── 001_d3bb02af4886/
|
|
185
|
-
│ └── bugfix/
|
|
186
|
-
│ └── 001_e8e04329daf3/
|
|
187
|
-
│ ├── architecture/
|
|
188
|
-
│ │ └── error_handling_patterns.md # READ: Architectural context
|
|
189
|
-
│ ├── P1M2T2S1/
|
|
190
|
-
│ │ ├── research/ # External research storage
|
|
191
|
-
│ │ └── PRP.md # ← CREATE THIS FILE
|
|
192
|
-
│ └── docs/
|
|
193
|
-
├── src/
|
|
194
|
-
│ ├── types/
|
|
195
|
-
│ │ ├── decorators.ts # ← MODIFY: Add field here
|
|
196
|
-
│ │ ├── error-strategy.ts # READ: ErrorMergeStrategy definition
|
|
197
|
-
│ │ ├── error.ts # REFERENCE: WorkflowError type
|
|
198
|
-
│ │ └── index.ts # VERIFY: Export still works
|
|
199
|
-
│ ├── decorators/
|
|
200
|
-
│ │ └── task.ts # FUTURE: Will use this field (P1.M2.T2.S2)
|
|
201
|
-
└── tsconfig.json # REFERENCE: TypeScript config
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Desired Codebase Tree with Files to be Modified
|
|
205
|
-
|
|
206
|
-
```bash
|
|
207
|
-
# No new files - modification only
|
|
208
|
-
# Modified: src/types/decorators.ts
|
|
209
|
-
# - Add: import type { ErrorMergeStrategy } from './error-strategy.js';
|
|
210
|
-
# - Add: errorMergeStrategy?: ErrorMergeStrategy; field to TaskOptions interface
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Known Gotchas of Our Codebase & Library Quirks
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
// CRITICAL: TypeScript Module Resolution
|
|
217
|
-
// This codebase uses .js extensions in import statements even though source files are .ts
|
|
218
|
-
// This is because TypeScript compiles to .js and the import paths reflect the output structure
|
|
219
|
-
// WRONG: import type { ErrorMergeStrategy } from './error-strategy';
|
|
220
|
-
// CORRECT: import type { ErrorMergeStrategy } from './error-strategy.js';
|
|
221
|
-
|
|
222
|
-
// CRITICAL: Type-Only Imports
|
|
223
|
-
// This codebase consistently uses 'import type' for type imports, not regular imports
|
|
224
|
-
// WRONG: import { ErrorMergeStrategy } from './error-strategy.js';
|
|
225
|
-
// CORRECT: import type { ErrorMergeStrategy } from './error-strategy.js';
|
|
226
|
-
|
|
227
|
-
// CRITICAL: No Interface Extension Pattern
|
|
228
|
-
// This codebase does NOT use 'interface Child extends Parent'
|
|
229
|
-
// Types remain independent and reference each other through imports
|
|
230
|
-
// This avoids circular dependencies in complex type graphs
|
|
231
|
-
|
|
232
|
-
// CRITICAL: JSDoc Comment Format
|
|
233
|
-
// Each field in the interface has a JSDoc comment above it
|
|
234
|
-
// Use /** ... */ syntax (not // comments)
|
|
235
|
-
// Comment format: /** [Brief description of what the field does] */
|
|
236
|
-
|
|
237
|
-
// CRITICAL: Optional Field Ordering
|
|
238
|
-
// Existing TaskOptions fields: name, concurrent
|
|
239
|
-
// Add new field after existing fields (maintains append pattern)
|
|
240
|
-
// Keep related fields grouped (errorMergeStrategy relates to concurrent)
|
|
241
|
-
|
|
242
|
-
// CRITICAL: This File Currently Has No Imports
|
|
243
|
-
// src/types/decorators.ts is standalone - this will be its FIRST import
|
|
244
|
-
// Verify the import is placed at the very top of the file, before any interface definitions
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Implementation Blueprint
|
|
250
|
-
|
|
251
|
-
### Data Models and Structure
|
|
252
|
-
|
|
253
|
-
No new data models needed. Using existing types:
|
|
254
|
-
- `ErrorMergeStrategy` from `src/types/error-strategy.ts` (already defined)
|
|
255
|
-
- `TaskOptions` from `src/types/decorators.ts` (being extended)
|
|
256
|
-
|
|
257
|
-
### Implementation Tasks (ordered by dependencies)
|
|
258
|
-
|
|
259
|
-
```yaml
|
|
260
|
-
Task 1: ADD import statement to src/types/decorators.ts
|
|
261
|
-
- ADD: import type { ErrorMergeStrategy } from './error-strategy.js';
|
|
262
|
-
- PLACEMENT: Top of file, before any interface definitions
|
|
263
|
-
- PATTERN: Follow src/types/workflow-context.ts import pattern (lines 8-9)
|
|
264
|
-
- SYNTAX: Use 'import type' for type-only import
|
|
265
|
-
- EXTENSION: Must use '.js' extension (TypeScript module resolution)
|
|
266
|
-
- DEPENDENCIES: None (first task)
|
|
267
|
-
|
|
268
|
-
Task 2: MODIFY TaskOptions interface in src/types/decorators.ts
|
|
269
|
-
- ADD: errorMergeStrategy?: ErrorMergeStrategy; field
|
|
270
|
-
- PLACEMENT: After 'concurrent?: boolean;' field
|
|
271
|
-
- JSDOC: /** Strategy for merging errors from concurrent task execution */
|
|
272
|
-
- PATTERN: Follow existing field format (name + JSDoc above, same indentation)
|
|
273
|
-
- TYPE: ErrorMergeStrategy (imported in Task 1)
|
|
274
|
-
- OPTIONAL: Use '?' to make field optional (backward compatibility)
|
|
275
|
-
- DEPENDENCIES: Task 1 must complete first
|
|
276
|
-
|
|
277
|
-
Task 3: VERIFY TypeScript compilation
|
|
278
|
-
- RUN: npx tsc --noEmit
|
|
279
|
-
- EXPECTED: No errors, clean compilation
|
|
280
|
-
- VERIFY: TaskOptions type includes new field
|
|
281
|
-
- DEPENDENCIES: Task 1 and Task 2 complete
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
### Implementation Patterns & Key Details
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
// FILE: src/types/decorators.ts
|
|
288
|
-
// This is the complete target file after modification
|
|
289
|
-
|
|
290
|
-
// ============================================================================
|
|
291
|
-
// IMPORTS (new - this file previously had no imports)
|
|
292
|
-
// ============================================================================
|
|
293
|
-
import type { ErrorMergeStrategy } from './error-strategy.js';
|
|
294
|
-
|
|
295
|
-
// ============================================================================
|
|
296
|
-
// STEP OPTIONS (unchanged - for reference)
|
|
297
|
-
// ============================================================================
|
|
298
|
-
/**
|
|
299
|
-
* Configuration options for @Step decorator
|
|
300
|
-
*/
|
|
301
|
-
export interface StepOptions {
|
|
302
|
-
/** Custom step name (defaults to method name) */
|
|
303
|
-
name?: string;
|
|
304
|
-
/** If true, capture state snapshot after step completion */
|
|
305
|
-
snapshotState?: boolean;
|
|
306
|
-
/** Track and emit step duration (default: true) */
|
|
307
|
-
trackTiming?: boolean;
|
|
308
|
-
/** If true, log message at step start */
|
|
309
|
-
logStart?: boolean;
|
|
310
|
-
/** If true, log message at step end */
|
|
311
|
-
logFinish?: boolean;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// ============================================================================
|
|
315
|
-
// TASK OPTIONS (modified - new field added)
|
|
316
|
-
// ============================================================================
|
|
317
|
-
/**
|
|
318
|
-
* Configuration options for @Task decorator
|
|
319
|
-
*
|
|
320
|
-
* @note The decorator uses lenient validation - non-Workflow returns are
|
|
321
|
-
* silently skipped. See the @Task decorator JSDoc for details.
|
|
322
|
-
*/
|
|
323
|
-
export interface TaskOptions {
|
|
324
|
-
/** Custom task name (defaults to method name) */
|
|
325
|
-
name?: string;
|
|
326
|
-
/** If true, run returned workflows concurrently */
|
|
327
|
-
concurrent?: boolean;
|
|
328
|
-
/** Strategy for merging errors from concurrent task execution */
|
|
329
|
-
errorMergeStrategy?: ErrorMergeStrategy;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
// ============================================================================
|
|
333
|
-
// PATTERN NOTES
|
|
334
|
-
// ============================================================================
|
|
335
|
-
// 1. Import is type-only: 'import type { ... }'
|
|
336
|
-
// 2. Import uses .js extension: './error-strategy.js'
|
|
337
|
-
// 3. Import is at top of file, before any code
|
|
338
|
-
// 4. New field uses '?' for optional
|
|
339
|
-
// 5. New field has JSDoc comment above (same format as other fields)
|
|
340
|
-
// 6. New field placed after existing fields (append pattern)
|
|
341
|
-
// 7. Indentation matches existing code (2 spaces)
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
### Integration Points
|
|
345
|
-
|
|
346
|
-
```yaml
|
|
347
|
-
TYPE_SYSTEM:
|
|
348
|
-
- verify: "TaskOptions export from src/types/index.ts still works"
|
|
349
|
-
- verify: "TypeScript compiler recognizes the new field"
|
|
350
|
-
- verify: "Type inference works when using @Task decorator with new option"
|
|
351
|
-
|
|
352
|
-
FUTURE_INTEGRATION:
|
|
353
|
-
- reference: "src/decorators/task.ts will read this field in P1.M2.T2.S2"
|
|
354
|
-
- reference: "ErrorMergeStrategy.combine() will be called during error aggregation"
|
|
355
|
-
- reference: "Promise.allSettled implementation will check this field (P1.M2.T1.S2)"
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
---
|
|
359
|
-
|
|
360
|
-
## Validation Loop
|
|
361
|
-
|
|
362
|
-
### Level 1: Syntax & Style (Immediate Feedback)
|
|
363
|
-
|
|
364
|
-
```bash
|
|
365
|
-
# Run after file modification - fix before proceeding
|
|
366
|
-
|
|
367
|
-
# TypeScript type checking
|
|
368
|
-
npx tsc --noEmit
|
|
369
|
-
|
|
370
|
-
# Expected: Zero errors. Output should be silent with exit code 0.
|
|
371
|
-
|
|
372
|
-
# If you see errors like:
|
|
373
|
-
# - "Cannot find module './error-strategy.js'" → Check the import path and .js extension
|
|
374
|
-
# - "Duplicate identifier" → Check for accidental duplicate field or interface declaration
|
|
375
|
-
# - "Property 'errorMergeStrategy' does not exist" → Check field name and type spelling
|
|
376
|
-
|
|
377
|
-
# Linting (if project has linting configured)
|
|
378
|
-
npm run lint 2>/dev/null || npx eslint src/types/decorators.ts 2>/dev/null || echo "No linter configured"
|
|
379
|
-
|
|
380
|
-
# Expected: Zero linting errors. If ESLint is configured, it should pass.
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
### Level 2: Unit Tests (Component Validation)
|
|
384
|
-
|
|
385
|
-
```bash
|
|
386
|
-
# Verify TaskOptions type exports correctly
|
|
387
|
-
node -e "
|
|
388
|
-
const ts = require('typescript');
|
|
389
|
-
const program = ts.createProgram('./src/types/decorators.ts', { module: ts.ModuleKind.ESNext });
|
|
390
|
-
const source = program.getSourceFile('./src/types/decorators.ts');
|
|
391
|
-
console.log('File parsed successfully');
|
|
392
|
-
console.log('Exports:', source.statements.filter(s => s.modifiers?.some(m => m.kind === 83)).map(s => s.name.text));
|
|
393
|
-
" 2>/dev/null || echo "TypeScript API test skipped"
|
|
394
|
-
|
|
395
|
-
# Manual type verification using TypeScript compiler API
|
|
396
|
-
cat > /tmp/test-taskoptions-type.ts << 'EOF'
|
|
397
|
-
import type { TaskOptions } from './src/types/decorators.js';
|
|
398
|
-
import type { ErrorMergeStrategy } from './src/types/error-strategy.js';
|
|
399
|
-
|
|
400
|
-
// This should compile without errors
|
|
401
|
-
const options1: TaskOptions = {};
|
|
402
|
-
const options2: TaskOptions = { name: 'myTask' };
|
|
403
|
-
const options3: TaskOptions = { concurrent: true };
|
|
404
|
-
const options4: TaskOptions = { errorMergeStrategy: { enabled: true } };
|
|
405
|
-
const options5: TaskOptions = {
|
|
406
|
-
name: 'myTask',
|
|
407
|
-
concurrent: true,
|
|
408
|
-
errorMergeStrategy: {
|
|
409
|
-
enabled: true,
|
|
410
|
-
maxMergeDepth: 5,
|
|
411
|
-
combine: (errors) => errors[0]
|
|
412
|
-
}
|
|
413
|
-
};
|
|
414
|
-
|
|
415
|
-
// This should fail type checking (uncomment to verify error handling)
|
|
416
|
-
// const invalid: TaskOptions = { errorMergeStrategy: 'not an object' };
|
|
417
|
-
|
|
418
|
-
console.log('All type checks passed!');
|
|
419
|
-
EOF
|
|
420
|
-
|
|
421
|
-
npx tsc --noEmit /tmp/test-taskoptions-type.ts
|
|
422
|
-
|
|
423
|
-
# Expected: Zero errors. All test cases should compile successfully.
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
### Level 3: Integration Testing (System Validation)
|
|
427
|
-
|
|
428
|
-
```bash
|
|
429
|
-
# Verify export chain from src/types/index.ts
|
|
430
|
-
cat > /tmp/test-export.ts << 'EOF'
|
|
431
|
-
// Test that TaskOptions still exports correctly
|
|
432
|
-
import type { TaskOptions } from './src/types/index.js';
|
|
433
|
-
|
|
434
|
-
const test: TaskOptions = {
|
|
435
|
-
concurrent: true,
|
|
436
|
-
errorMergeStrategy: { enabled: true }
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
console.log('TaskOptions export verified:', test);
|
|
440
|
-
EOF
|
|
441
|
-
|
|
442
|
-
npx tsc --noEmit /tmp/test-export.ts
|
|
443
|
-
|
|
444
|
-
# Expected: Zero errors. Export chain should work.
|
|
445
|
-
|
|
446
|
-
# Verify no breaking changes to existing code
|
|
447
|
-
# (This ensures backward compatibility - existing @Task usage still works)
|
|
448
|
-
grep -r "@Task" src/ --include="*.ts" | grep -v "node_modules" | head -5
|
|
449
|
-
|
|
450
|
-
# Expected: Existing @Task decorator usage should still be valid.
|
|
451
|
-
# The new field is optional, so all existing usage is unaffected.
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
### Level 4: Domain-Specific Validation
|
|
455
|
-
|
|
456
|
-
```bash
|
|
457
|
-
# Type shape verification - ensure ErrorMergeStrategy type is correctly imported
|
|
458
|
-
cat > /tmp/test-type-shape.ts << 'EOF'
|
|
459
|
-
import type { TaskOptions } from './src/types/decorators.js';
|
|
460
|
-
import type { ErrorMergeStrategy } from './src/types/error-strategy.js';
|
|
461
|
-
|
|
462
|
-
// Verify the type shape matches expectations
|
|
463
|
-
const testStrategy: ErrorMergeStrategy = {
|
|
464
|
-
enabled: true,
|
|
465
|
-
maxMergeDepth: 10,
|
|
466
|
-
combine: (errors) => errors[0]
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
const testOptions: TaskOptions = {
|
|
470
|
-
errorMergeStrategy: testStrategy
|
|
471
|
-
};
|
|
472
|
-
|
|
473
|
-
// Type-level test: ensure the field is actually optional
|
|
474
|
-
const optionalTest: TaskOptions = {}; // Should work - all fields optional
|
|
475
|
-
|
|
476
|
-
console.log('Type shape verification passed');
|
|
477
|
-
EOF
|
|
478
|
-
|
|
479
|
-
npx tsc --noEmit /tmp/test-type-shape.ts
|
|
480
|
-
|
|
481
|
-
# Expected: Zero errors. Type shape should match ErrorMergeStrategy interface.
|
|
482
|
-
|
|
483
|
-
# Verify module resolution (the .js extension in imports)
|
|
484
|
-
node -e "console.log('Module resolution test: OK')" 2>/dev/null
|
|
485
|
-
|
|
486
|
-
# Check for any circular dependency issues
|
|
487
|
-
npx tsc --noEmit --listFiles /tmp/test-type-shape.ts 2>&1 | grep -i "circular\|cycle" || echo "No circular dependencies detected"
|
|
488
|
-
|
|
489
|
-
# Expected: No circular dependency warnings.
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
---
|
|
493
|
-
|
|
494
|
-
## Final Validation Checklist
|
|
495
|
-
|
|
496
|
-
### Technical Validation
|
|
497
|
-
|
|
498
|
-
- [ ] TypeScript compilation succeeds: `npx tsc --noEmit` (zero errors)
|
|
499
|
-
- [ ] Import statement uses `import type` syntax (not regular import)
|
|
500
|
-
- [ ] Import statement uses `.js` extension (not `.ts`)
|
|
501
|
-
- [ ] Field is optional (`errorMergeStrategy?: ErrorMergeStrategy`)
|
|
502
|
-
- [ ] Field type is `ErrorMergeStrategy` (exact interface name)
|
|
503
|
-
- [ ] JSDoc comment included above the field
|
|
504
|
-
- [ ] Export from `src/types/index.ts` still works
|
|
505
|
-
- [ ] No circular dependencies introduced
|
|
506
|
-
|
|
507
|
-
### Feature Validation
|
|
508
|
-
|
|
509
|
-
- [ ] `TaskOptions` interface has exactly 3 fields: name, concurrent, errorMergeStrategy
|
|
510
|
-
- [ ] Field ordering is logical (errorMergeStrategy after concurrent)
|
|
511
|
-
- [ ] All existing @Task decorator usage still compiles (backward compatibility)
|
|
512
|
-
- [ ] New field can be used with ErrorMergeStrategy objects
|
|
513
|
-
- [ ] Type inference works correctly when field is provided
|
|
514
|
-
|
|
515
|
-
### Code Quality Validation
|
|
516
|
-
|
|
517
|
-
- [ ] Follows existing codebase patterns (JSDoc format, indentation, naming)
|
|
518
|
-
- [ ] File placement unchanged (still in src/types/decorators.ts)
|
|
519
|
-
- [ ] No additional changes beyond the specified field and import
|
|
520
|
-
- [ ] No anti-patterns introduced (no interface extension, no circular deps)
|
|
521
|
-
|
|
522
|
-
### Documentation & Deployment
|
|
523
|
-
|
|
524
|
-
- [ ] PRP is self-documenting with clear step-by-step instructions
|
|
525
|
-
- [ ] All file references include exact paths
|
|
526
|
-
- [ ] All gotchas are documented for future reference
|
|
527
|
-
- [ ] Validation commands are project-specific and executable
|
|
528
|
-
|
|
529
|
-
---
|
|
530
|
-
|
|
531
|
-
## Anti-Patterns to Avoid
|
|
532
|
-
|
|
533
|
-
- ❌ **Don't use regular import**: Use `import type { ErrorMergeStrategy }` not `import { ErrorMergeStrategy }`
|
|
534
|
-
- ❌ **Don't use .ts extension**: Use `./error-strategy.js` not `./error-strategy.ts` in imports
|
|
535
|
-
- ❌ **Don't make field required**: Use `errorMergeStrategy?:` not `errorMergeStrategy:` (must be optional for backward compatibility)
|
|
536
|
-
- ❌ **Don't skip JSDoc**: Add comment above the field like other fields have
|
|
537
|
-
- ❌ **Don't use interface extension**: Don't do `interface ExtendedTaskOptions extends TaskOptions` - modify TaskOptions directly
|
|
538
|
-
- ❌ **Don't place import in middle of file**: Import must be at top of file, before interface definitions
|
|
539
|
-
- ❌ **Don't change existing fields**: Only add the new field, don't modify name or concurrent fields
|
|
540
|
-
- ❌ **Don't forget .js extension**: TypeScript module resolution requires .js in source imports
|
|
541
|
-
|
|
542
|
-
---
|
|
543
|
-
|
|
544
|
-
## Success Metrics
|
|
545
|
-
|
|
546
|
-
**Confidence Score**: 10/10
|
|
547
|
-
|
|
548
|
-
**Validation Rationale**:
|
|
549
|
-
1. **Single File Modification**: Only one file needs changes (`src/types/decorators.ts`)
|
|
550
|
-
2. **Simple Change**: Add import + add field (2 lines of code)
|
|
551
|
-
3. **Clear Type Definition**: ErrorMergeStrategy is already well-defined
|
|
552
|
-
4. **No Runtime Impact**: This is a type-only change, no runtime behavior changes
|
|
553
|
-
5. **Backward Compatible**: Optional field means all existing code continues to work
|
|
554
|
-
6. **Well-Researched**: All patterns and gotchas documented from codebase analysis
|
|
555
|
-
7. **Clear Validation**: TypeScript compiler provides immediate feedback
|
|
556
|
-
|
|
557
|
-
**One-Pass Implementation Success Factors**:
|
|
558
|
-
- Exact file path and current content provided
|
|
559
|
-
- Exact type definition to import provided
|
|
560
|
-
- Import syntax pattern documented with examples
|
|
561
|
-
- JSDoc format pattern documented
|
|
562
|
-
- Validation commands that work in this project
|
|
563
|
-
- All gotchas documented (module resolution, type-only imports, no extension pattern)
|
|
564
|
-
- Success criteria is specific and measurable
|