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,460 +0,0 @@
|
|
|
1
|
-
name: "P1.M3.T3.S2 - Implement Workflow Name Validation in Constructor"
|
|
2
|
-
description: |
|
|
3
|
-
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Goal
|
|
7
|
-
|
|
8
|
-
**Feature Goal**: Add validation to the Workflow constructor to reject empty and whitespace-only workflow names while preserving existing behavior for undefined/null names.
|
|
9
|
-
|
|
10
|
-
**Deliverable**: Updated `src/core/workflow.ts` constructor with name validation logic that throws descriptive errors for invalid names.
|
|
11
|
-
|
|
12
|
-
**Success Definition**:
|
|
13
|
-
- Workflow constructor throws `Error` when name is empty string or whitespace-only
|
|
14
|
-
- Workflow constructor throws `Error` when name exceeds 100 characters
|
|
15
|
-
- Workflow constructor preserves existing fallback behavior when name is `undefined` or `null` (uses class name)
|
|
16
|
-
- TypeScript compiles without errors
|
|
17
|
-
- All tests pass including updated edge-case test
|
|
18
|
-
|
|
19
|
-
## User Persona (if applicable)
|
|
20
|
-
|
|
21
|
-
**Target User**: Developer using the Groundswell workflow engine
|
|
22
|
-
|
|
23
|
-
**Use Case**: Creating Workflow instances with custom or default names for identification in tree debugger and logging
|
|
24
|
-
|
|
25
|
-
**User Journey**:
|
|
26
|
-
1. Developer creates a `new Workflow('MyWorkflowName')` or extends Workflow class
|
|
27
|
-
2. If the name is invalid (empty/whitespace), they receive immediate, clear error feedback
|
|
28
|
-
3. If the name is valid or omitted, the workflow is created successfully
|
|
29
|
-
|
|
30
|
-
**Pain Points Addressed**:
|
|
31
|
-
- Empty workflow names appear as blank entries in tree debugger, causing confusion
|
|
32
|
-
- No validation feedback when developers accidentally use empty strings
|
|
33
|
-
- Inconsistent with industry best practices (all major workflow engines validate names)
|
|
34
|
-
|
|
35
|
-
## Why
|
|
36
|
-
|
|
37
|
-
- **User Experience**: Empty workflow names provide no useful information and create confusion in the tree debugger
|
|
38
|
-
- **Bug Fix**: Issue 8 explicitly frames empty names as a bug ("should probably be non-empty")
|
|
39
|
-
- **Industry Alignment**: All major workflow engines (Kubernetes, Airflow, AWS Step Functions) require non-empty names
|
|
40
|
-
- **Consistency**: Codebase already validates other critical inputs (circular references, duplicate registrations)
|
|
41
|
-
- **PRD Compliance**: PRD specifies name as "Human-readable name" - empty string is not human-readable
|
|
42
|
-
|
|
43
|
-
## What
|
|
44
|
-
|
|
45
|
-
Add validation logic to the Workflow constructor that:
|
|
46
|
-
1. Rejects empty strings (`''`)
|
|
47
|
-
2. Rejects whitespace-only strings (`' '`, `'\t\n'`)
|
|
48
|
-
3. Rejects names exceeding 100 characters
|
|
49
|
-
4. Preserves existing fallback behavior for `undefined`/`null` (uses class name)
|
|
50
|
-
5. Does NOT auto-trim leading/trailing whitespace (preserves user intent)
|
|
51
|
-
|
|
52
|
-
### Success Criteria
|
|
53
|
-
|
|
54
|
-
- [ ] Empty string names throw `Error` with message: "Workflow name cannot be empty or whitespace only"
|
|
55
|
-
- [ ] Whitespace-only names throw `Error` with message: "Workflow name cannot be empty or whitespace only"
|
|
56
|
-
- [ ] Names exceeding 100 characters throw `Error` with message: "Workflow name cannot exceed 100 characters"
|
|
57
|
-
- [ ] `undefined`/`null` names still use class name (existing behavior preserved)
|
|
58
|
-
- [ ] Valid names with leading/trailing whitespace are accepted as-is
|
|
59
|
-
- [ ] Both constructor patterns (class-based and functional) are validated
|
|
60
|
-
|
|
61
|
-
## All Needed Context
|
|
62
|
-
|
|
63
|
-
### Context Completeness Check
|
|
64
|
-
|
|
65
|
-
_Before writing this PRP, validate: "If someone knew nothing about this codebase, would they have everything needed to implement this successfully?"_
|
|
66
|
-
|
|
67
|
-
✅ **YES** - This PRP includes:
|
|
68
|
-
- Exact file path and line numbers for the modification
|
|
69
|
-
- Complete validation rules from S1 decision document
|
|
70
|
-
- Existing constructor code patterns to follow
|
|
71
|
-
- Error handling patterns used throughout codebase
|
|
72
|
-
- Test file that needs updating with specific line numbers
|
|
73
|
-
- Both constructor patterns that must be validated
|
|
74
|
-
- TypeScript compilation validation steps
|
|
75
|
-
|
|
76
|
-
### Documentation & References
|
|
77
|
-
|
|
78
|
-
```yaml
|
|
79
|
-
# MUST READ - Include these in your context window
|
|
80
|
-
- url: file:///home/dustin/projects/groundswell/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md
|
|
81
|
-
why: Contains complete validation rules decided in S1 (5 rules with examples)
|
|
82
|
-
critical: Implementation location specified as line ~98, after config normalization, before node creation
|
|
83
|
-
|
|
84
|
-
- file: src/core/workflow.ts
|
|
85
|
-
why: Contains the Workflow class constructor that needs modification
|
|
86
|
-
pattern: Constructor uses overloaded parameters (class-based: name, parent | functional: config, executor)
|
|
87
|
-
gotcha: Validation MUST apply to both constructor patterns - name comes from different sources
|
|
88
|
-
|
|
89
|
-
- file: src/core/workflow.ts:94
|
|
90
|
-
why: Line where `this.config = { name: name ?? this.constructor.name }` is set (class-based pattern)
|
|
91
|
-
pattern: Nullish coalescing preserves undefined fallback - must NOT break this
|
|
92
|
-
|
|
93
|
-
- file: src/core/workflow.ts:98-117
|
|
94
|
-
why: Constructor body - validation must be added AFTER line 94 (config set), BEFORE line 101 (node created)
|
|
95
|
-
pattern: Existing validation patterns in codebase use standard `Error` with descriptive messages
|
|
96
|
-
|
|
97
|
-
- file: src/__tests__/adversarial/edge-case.test.ts:107-117
|
|
98
|
-
why: This test currently EXPECTS empty names to work - must be updated to expect error thrown
|
|
99
|
-
pattern: Uses `expect(workflow.node.name).toBe('')` - needs `expect(() => new TestWorkflow('')).toThrow()`
|
|
100
|
-
|
|
101
|
-
- file: src/__tests__/unit/workflow.test.ts
|
|
102
|
-
why: Contains existing constructor test patterns to follow for new validation tests
|
|
103
|
-
pattern: Uses SimpleWorkflow class, `expect().toThrow()` for error testing
|
|
104
|
-
|
|
105
|
-
- docfile: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md
|
|
106
|
-
why: Complete validation rules with examples and anti-patterns to avoid
|
|
107
|
-
section: Rules 1-5 specify exact validation behavior required
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Current Codebase tree (run `tree` in the root of the project) to get an overview of the codebase
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
/home/dustin/projects/groundswell
|
|
114
|
-
├── src/
|
|
115
|
-
│ ├── core/
|
|
116
|
-
│ │ ├── workflow.ts # MODIFICATION TARGET (constructor at lines 83-117)
|
|
117
|
-
│ │ ├── agent.ts
|
|
118
|
-
│ │ ├── context.ts
|
|
119
|
-
│ │ └── ...
|
|
120
|
-
│ ├── types/
|
|
121
|
-
│ │ ├── workflow.ts # WorkflowConfig interface (name?: string)
|
|
122
|
-
│ │ └── ...
|
|
123
|
-
│ └── __tests__/
|
|
124
|
-
│ ├── adversarial/
|
|
125
|
-
│ │ └── edge-case.test.ts # UPDATE REQUIRED (line 107-117)
|
|
126
|
-
│ └── unit/
|
|
127
|
-
│ └── workflow.test.ts # REFERENCE for test patterns
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Desired Codebase tree with files to be added and responsibility of file
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
# No new files to be added
|
|
134
|
-
# Modifications only:
|
|
135
|
-
├── src/
|
|
136
|
-
│ ├── core/
|
|
137
|
-
│ │ └── workflow.ts # MODIFY: Add validation to constructor (~line 98-100)
|
|
138
|
-
└── __tests__/
|
|
139
|
-
├── adversarial/
|
|
140
|
-
│ └── edge-case.test.ts # MODIFY: Update test at lines 107-117 to expect error
|
|
141
|
-
└── unit/
|
|
142
|
-
└── workflow.test.ts # MODIFY: Add new validation test suite
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### Known Gotchas of our codebase & Library Quirks
|
|
146
|
-
|
|
147
|
-
```typescript
|
|
148
|
-
// CRITICAL: The Workflow constructor has TWO patterns - validation must work for both
|
|
149
|
-
// Pattern 1: Class-based - new Workflow(name?, parent?)
|
|
150
|
-
// Pattern 2: Functional - new Workflow(config, executor)
|
|
151
|
-
// The name parameter comes from different sources in each pattern!
|
|
152
|
-
|
|
153
|
-
// Pattern 1 (lines 88-94):
|
|
154
|
-
// this.config = { name: name ?? this.constructor.name };
|
|
155
|
-
// If name is string, use it. If undefined/null, use class name.
|
|
156
|
-
|
|
157
|
-
// Pattern 2 (lines 96-101):
|
|
158
|
-
// if (typeof name === 'object') { this.config = name; } else { ... }
|
|
159
|
-
// name is actually a WorkflowConfig object with name property
|
|
160
|
-
|
|
161
|
-
// GOTCHA: The parameter named "name" in the constructor signature
|
|
162
|
-
// can be either: string | WorkflowConfig | undefined
|
|
163
|
-
// After config normalization, always check: this.config.name
|
|
164
|
-
|
|
165
|
-
// VALIDATION LOCATION: After line 94, this.config.name is always defined
|
|
166
|
-
// Check if it's a string and validate. If undefined, class name was used (valid).
|
|
167
|
-
|
|
168
|
-
// GOTCHA: Don't use custom error classes - codebase uses standard Error throughout
|
|
169
|
-
// Examples from codebase:
|
|
170
|
-
// throw new Error('Circular parent-child relationship detected');
|
|
171
|
-
// throw new Error('Child already attached to this workflow');
|
|
172
|
-
|
|
173
|
-
// GOTCHA: The test at edge-case.test.ts:107-117 expects empty names to work
|
|
174
|
-
// This test MUST be updated or it will fail after implementation
|
|
175
|
-
|
|
176
|
-
// GOTCHA: TypeScript compilation is a validation gate - code must compile without errors
|
|
177
|
-
// Run: npx tsc --noEmit
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Implementation Blueprint
|
|
181
|
-
|
|
182
|
-
### Data models and structure
|
|
183
|
-
|
|
184
|
-
No new data models needed. This is a pure validation enhancement to existing constructor.
|
|
185
|
-
|
|
186
|
-
```typescript
|
|
187
|
-
// Existing models (no changes needed):
|
|
188
|
-
// - WorkflowConfig interface: { name?: string; ... }
|
|
189
|
-
// - Workflow class extends WorkflowNodeBase
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### Implementation Tasks (ordered by dependencies)
|
|
193
|
-
|
|
194
|
-
```yaml
|
|
195
|
-
Task 1: MODIFY src/core/workflow.ts constructor
|
|
196
|
-
- LOCATION: After line 94 (this.config assignment), before line 98 (conditional logic)
|
|
197
|
-
- IMPLEMENT: Name validation using this.config.name
|
|
198
|
-
- VALIDATION RULE 1 (Empty/Whitespace): if (typeof this.config.name === 'string' && this.config.name.trim().length === 0) throw new Error('Workflow name cannot be empty or whitespace only')
|
|
199
|
-
- VALIDATION RULE 2 (Max Length): if (typeof this.config.name === 'string' && this.config.name.length > 100) throw new Error('Workflow name cannot exceed 100 characters')
|
|
200
|
-
- PRESERVE: undefined/null fallback to class name (don't validate if this.config.name is undefined)
|
|
201
|
-
- PATTERN: Follow existing error throwing pattern in codebase (standard Error, descriptive message)
|
|
202
|
-
- GOTCHA: Only validate when this.config.name is explicitly a string - undefined means class name was used (valid)
|
|
203
|
-
|
|
204
|
-
Task 2: UPDATE src/__tests__/adversarial/edge-case.test.ts
|
|
205
|
-
- LOCATION: Lines 107-117 (test "should handle empty string workflow name")
|
|
206
|
-
- CHANGE: Modify test to expect error to be thrown
|
|
207
|
-
- PATTERN: expect(() => new TestWorkflow('')).toThrow('Workflow name cannot be empty or whitespace only')
|
|
208
|
-
- PRESERVE: Test structure and description, only change expectation
|
|
209
|
-
|
|
210
|
-
Task 3: CREATE new test suite in src/__tests__/unit/workflow.test.ts
|
|
211
|
-
- LOCATION: Add new describe block: 'Workflow Name Validation'
|
|
212
|
-
- IMPLEMENT: Comprehensive tests for all validation rules
|
|
213
|
-
- TEST CASES:
|
|
214
|
-
- Empty string should throw
|
|
215
|
-
- Whitespace-only (spaces) should throw
|
|
216
|
-
- Whitespace-only (tabs/newlines) should throw
|
|
217
|
-
- Name exceeding 100 characters should throw
|
|
218
|
-
- Exactly 100 characters should work
|
|
219
|
-
- Valid names should work
|
|
220
|
-
- Undefined should use class name (existing behavior)
|
|
221
|
-
- Null should use class name (existing behavior)
|
|
222
|
-
- Name with leading/trailing whitespace should be accepted as-is
|
|
223
|
-
- Both constructor patterns should be validated
|
|
224
|
-
- PATTERN: Follow existing test patterns in workflow.test.ts (SimpleWorkflow class, expect().toThrow())
|
|
225
|
-
|
|
226
|
-
Task 4: VERIFY TypeScript compilation
|
|
227
|
-
- RUN: npx tsc --noEmit
|
|
228
|
-
- EXPECT: Zero type errors
|
|
229
|
-
- FIX: Any type errors that arise from validation logic
|
|
230
|
-
|
|
231
|
-
Task 5: RUN full test suite
|
|
232
|
-
- RUN: npm test
|
|
233
|
-
- EXPECT: All tests pass
|
|
234
|
-
- FIX: Any failing tests (should only be the updated edge-case test now passing)
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### Implementation Patterns & Key Details
|
|
238
|
-
|
|
239
|
-
```typescript
|
|
240
|
-
// EXACT CODE TO INSERT at src/core/workflow.ts after line 94:
|
|
241
|
-
|
|
242
|
-
// Location: src/core/workflow.ts:94 (after this.config = { name: name ?? this.constructor.name })
|
|
243
|
-
// PATTERN: Only validate when name is explicitly provided as a string
|
|
244
|
-
// CRITICAL: undefined means class name was used - this is valid behavior
|
|
245
|
-
|
|
246
|
-
// Validate workflow name (after config is normalized)
|
|
247
|
-
if (typeof this.config.name === 'string') {
|
|
248
|
-
const trimmedName = this.config.name.trim();
|
|
249
|
-
if (trimmedName.length === 0) {
|
|
250
|
-
throw new Error('Workflow name cannot be empty or whitespace only');
|
|
251
|
-
}
|
|
252
|
-
if (this.config.name.length > 100) {
|
|
253
|
-
throw new Error('Workflow name cannot exceed 100 characters');
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// GOTCHA: We check this.config.name.length (not trimmed) for max length
|
|
258
|
-
// This matches the decision document Rule 2 exactly
|
|
259
|
-
|
|
260
|
-
// GOTCHA: We check trimmedName.length === 0 for whitespace-only detection
|
|
261
|
-
// This matches the decision document Rule 1 exactly
|
|
262
|
-
|
|
263
|
-
// GOTCHA: We DON'T auto-trim - we only reject if entirely whitespace
|
|
264
|
-
// This matches the decision document Rule 4 exactly
|
|
265
|
-
|
|
266
|
-
// Existing constructor structure for reference (lines 83-101):
|
|
267
|
-
constructor(name?: string | WorkflowConfig, parentOrExecutor?: Workflow | WorkflowExecutor<T>) {
|
|
268
|
-
this.id = generateId();
|
|
269
|
-
this.status = 'idle';
|
|
270
|
-
this.observers = [];
|
|
271
|
-
this.children = [];
|
|
272
|
-
this.parent = null;
|
|
273
|
-
|
|
274
|
-
// Class-based pattern: new Workflow(name?, parent?)
|
|
275
|
-
if (typeof name !== 'object' || name === null) {
|
|
276
|
-
this.config = { name: name ?? this.constructor.name };
|
|
277
|
-
this.parent = parentOrExecutor as Workflow | null;
|
|
278
|
-
}
|
|
279
|
-
// Functional pattern: new Workflow(config, executor)
|
|
280
|
-
else {
|
|
281
|
-
this.config = name;
|
|
282
|
-
this.executor = parentOrExecutor as WorkflowExecutor<T>;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// *** INSERT VALIDATION HERE *** (after line 94, before line 98)
|
|
286
|
-
// After this point, this.config.name is set for both patterns
|
|
287
|
-
|
|
288
|
-
this.node = new WorkflowNode({
|
|
289
|
-
id: this.id,
|
|
290
|
-
name: this.config.name ?? this.constructor.name,
|
|
291
|
-
// ... rest of node creation
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
### Integration Points
|
|
297
|
-
|
|
298
|
-
```yaml
|
|
299
|
-
VALIDATION:
|
|
300
|
-
- location: "src/core/workflow.ts constructor"
|
|
301
|
-
- line: "~94-97 (after config assignment, before node creation)"
|
|
302
|
-
- pattern: "Standard Error throwing with descriptive messages"
|
|
303
|
-
|
|
304
|
-
TESTS:
|
|
305
|
-
- update: "src/__tests__/adversarial/edge-case.test.ts:107-117"
|
|
306
|
-
- add: "src/__tests__/unit/workflow.test.ts (new describe block)"
|
|
307
|
-
- pattern: "expect(() => new Workflow('')).toThrow()"
|
|
308
|
-
|
|
309
|
-
COMPATIBILITY:
|
|
310
|
-
- breaking: "Yes - empty names will now throw errors"
|
|
311
|
-
- rationale: "Empty names provide no value and are bugs (Issue 8)"
|
|
312
|
-
- migration: "Provide meaningful names instead of empty strings"
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
## Validation Loop
|
|
316
|
-
|
|
317
|
-
### Level 1: Syntax & Style (Immediate Feedback)
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
# Run after file modification - fix before proceeding
|
|
321
|
-
npx tsc --noEmit # TypeScript type checking
|
|
322
|
-
npm run lint # ESLint checking (if configured)
|
|
323
|
-
npm run format # Prettier formatting (if configured)
|
|
324
|
-
|
|
325
|
-
# Expected: Zero errors. If errors exist, READ output and fix before proceeding.
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Level 2: Unit Tests (Component Validation)
|
|
329
|
-
|
|
330
|
-
```bash
|
|
331
|
-
# Test the specific validation functionality
|
|
332
|
-
npm test -- workflow.test.ts # Run workflow unit tests
|
|
333
|
-
npm test -- edge-case.test.ts # Run adversarial edge case tests
|
|
334
|
-
|
|
335
|
-
# Full test suite for affected areas
|
|
336
|
-
npm test # Run all tests
|
|
337
|
-
|
|
338
|
-
# Expected: All tests pass. The edge-case test should now pass with the updated expectation.
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
### Level 3: Integration Testing (System Validation)
|
|
342
|
-
|
|
343
|
-
```bash
|
|
344
|
-
# Verify workflow creation still works for valid names
|
|
345
|
-
node -e "
|
|
346
|
-
const { Workflow } = require('./dist/index.js');
|
|
347
|
-
class TestWF extends Workflow { async run() { return 'done'; } }
|
|
348
|
-
|
|
349
|
-
// Valid names should work
|
|
350
|
-
const wf1 = new TestWF('ValidName');
|
|
351
|
-
console.log('Valid name:', wf1.node.name);
|
|
352
|
-
|
|
353
|
-
// Undefined should use class name
|
|
354
|
-
const wf2 = new TestWF();
|
|
355
|
-
console.log('Undefined uses class name:', wf2.node.name);
|
|
356
|
-
|
|
357
|
-
// Empty should throw
|
|
358
|
-
try {
|
|
359
|
-
new TestWF('');
|
|
360
|
-
console.log('ERROR: Empty name should have thrown!');
|
|
361
|
-
} catch (e) {
|
|
362
|
-
console.log('Empty name correctly throws:', e.message);
|
|
363
|
-
}
|
|
364
|
-
"
|
|
365
|
-
|
|
366
|
-
# Expected: Valid names work, empty names throw with correct error message
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Level 4: Creative & Domain-Specific Validation
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# Test both constructor patterns
|
|
373
|
-
node -e "
|
|
374
|
-
const { Workflow } = require('./dist/index.js');
|
|
375
|
-
|
|
376
|
-
// Pattern 1: Class-based
|
|
377
|
-
try {
|
|
378
|
-
const wf1 = new Workflow(' '); // Whitespace only
|
|
379
|
-
console.log('ERROR: Whitespace should have thrown!');
|
|
380
|
-
} catch (e) {
|
|
381
|
-
console.log('Class-based pattern validation:', e.message);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// Pattern 2: Functional
|
|
385
|
-
try {
|
|
386
|
-
const wf2 = new Workflow({ name: '' }, async () => {});
|
|
387
|
-
console.log('ERROR: Empty should have thrown!');
|
|
388
|
-
} catch (e) {
|
|
389
|
-
console.log('Functional pattern validation:', e.message);
|
|
390
|
-
}
|
|
391
|
-
"
|
|
392
|
-
|
|
393
|
-
# Test max length validation
|
|
394
|
-
node -e "
|
|
395
|
-
const { Workflow } = require('./dist/index.js');
|
|
396
|
-
class TestWF extends Workflow { async run() { return 'done'; } }
|
|
397
|
-
|
|
398
|
-
const longName = 'a'.repeat(101);
|
|
399
|
-
try {
|
|
400
|
-
new TestWF(longName);
|
|
401
|
-
console.log('ERROR: 101 chars should have thrown!');
|
|
402
|
-
} catch (e) {
|
|
403
|
-
console.log('Max length validation:', e.message);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
const exactly100 = 'a'.repeat(100);
|
|
407
|
-
const wf3 = new TestWF(exactly100);
|
|
408
|
-
console.log('Exactly 100 chars works:', wf3.node.name.length === 100);
|
|
409
|
-
"
|
|
410
|
-
|
|
411
|
-
# Expected: All validation rules work correctly for both constructor patterns
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
## Final Validation Checklist
|
|
415
|
-
|
|
416
|
-
### Technical Validation
|
|
417
|
-
|
|
418
|
-
- [ ] TypeScript compiles without errors: `npx tsc --noEmit`
|
|
419
|
-
- [ ] All tests pass: `npm test`
|
|
420
|
-
- [ ] Empty string names throw error with correct message
|
|
421
|
-
- [ ] Whitespace-only names throw error with correct message
|
|
422
|
-
- [ ] Names > 100 chars throw error with correct message
|
|
423
|
-
- [ ] Exactly 100 chars works
|
|
424
|
-
- [ ] Undefined/null names use class name (existing behavior)
|
|
425
|
-
- [ ] Both constructor patterns are validated
|
|
426
|
-
|
|
427
|
-
### Feature Validation
|
|
428
|
-
|
|
429
|
-
- [ ] Validation location: after config assignment, before node creation
|
|
430
|
-
- [ ] Error messages match decision document exactly
|
|
431
|
-
- [ ] No auto-trimming of whitespace (user intent preserved)
|
|
432
|
-
- [ ] Edge-case test updated and passing
|
|
433
|
-
- [ ] New validation tests added and passing
|
|
434
|
-
|
|
435
|
-
### Code Quality Validation
|
|
436
|
-
|
|
437
|
-
- [ ] Follows existing error throwing patterns (standard Error, descriptive messages)
|
|
438
|
-
- [ ] No custom error classes created
|
|
439
|
-
- [ ] Code is self-documenting with clear variable names
|
|
440
|
-
- [ ] Breaking change is documented (test expectations updated)
|
|
441
|
-
|
|
442
|
-
### Documentation & Deployment
|
|
443
|
-
|
|
444
|
-
- [ ] Code changes are minimal and focused
|
|
445
|
-
- [ ] No new dependencies added
|
|
446
|
-
- [ ] No new files created (modifications only)
|
|
447
|
-
- [ ] Backward compatibility handled (undefined preserved)
|
|
448
|
-
|
|
449
|
-
---
|
|
450
|
-
|
|
451
|
-
## Anti-Patterns to Avoid
|
|
452
|
-
|
|
453
|
-
- ❌ Don't auto-trim names - preserve user intent, only reject whitespace-only
|
|
454
|
-
- ❌ Don't use custom error classes - codebase uses standard `Error`
|
|
455
|
-
- ❌ Don't forget both constructor patterns - validation must work for class-based AND functional
|
|
456
|
-
- ❌ Don't break the undefined fallback - preserve class name default behavior
|
|
457
|
-
- ❌ Don't validate when this.config.name is undefined - this means class name was used (valid)
|
|
458
|
-
- ❌ Don't check trimmed length for max length - check original length per decision document
|
|
459
|
-
- ❌ Don't update the edge-case test description - only change the expectation
|
|
460
|
-
- ❌ Don't skip testing both constructor patterns - they handle name differently
|