claude-flow-novice 2.5.2 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/adaptive-context/cfn-v3-reflection.json +21 -0
- package/.claude/agents/AGENT_LIFECYCLE.md +495 -0
- package/.claude/agents/CLAUDE.md +1002 -1233
- package/.claude/agents/accessibility-advocate.md +457 -0
- package/.claude/agents/agent-principles/README.md +226 -226
- package/.claude/agents/agent-principles/agent-type-guidelines.md +10 -0
- package/.claude/agents/agent-principles/format-selection.md +10 -0
- package/.claude/agents/agent-principles/phase4-template-optimization.md +502 -494
- package/.claude/agents/agent-principles/prompt-engineering.md +8 -0
- package/.claude/agents/agent-principles/quality-metrics.md +8 -0
- package/.claude/agents/analysis/code-analyzer.md +7 -17
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +2 -104
- package/.claude/agents/analysis/perf-analyzer.md +2 -196
- package/.claude/agents/context/context-curator.md +78 -84
- package/.claude/agents/context/context-reflector.md +27 -81
- package/.claude/agents/coordinators/README.md +42 -0
- package/.claude/agents/coordinators/cfn-v3-coordinator.md +440 -0
- package/.claude/agents/{product-owner-team → coordinators}/cto-agent.md +154 -187
- package/.claude/agents/coordinators/multi-sprint-coordinator.md +50 -0
- package/.claude/agents/{product-owner-team → coordinators}/product-owner-agent.md +6 -39
- package/.claude/agents/{cfn-loop → coordinators}/product-owner.md +72 -17
- package/.claude/agents/core-agents/reviewer.md +114 -135
- package/.claude/agents/custom/agent-builder.md +637 -0
- package/.claude/agents/developers/README.md +69 -0
- package/.claude/agents/developers/backend-dev.md +77 -0
- package/.claude/agents/{core-agents → developers}/coder.md +131 -26
- package/.claude/agents/developers/react-frontend-engineer.md +121 -0
- package/.claude/agents/{frontend → developers}/state-architect.md +1 -0
- package/.claude/agents/{frontend → developers}/ui-designer.md +1 -0
- package/.claude/agents/development/backend/dev-backend-api.md +0 -29
- package/.claude/agents/development/npm-package-specialist.md +355 -347
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +8 -0
- package/.claude/agents/documentation/api-docs.md +8 -0
- package/.claude/agents/github/github-commit-agent.md +125 -117
- package/.claude/agents/goal/goal-planner.md +8 -0
- package/.claude/agents/infrastructure/README.md +100 -0
- package/.claude/agents/{specialized → infrastructure}/devops-engineer.md +131 -150
- package/.claude/agents/planners/README.md +94 -0
- package/.claude/agents/{core-agents → planners}/analyst.md +1 -22
- package/.claude/agents/{planning-team → planners}/api-designer-persona.md +8 -0
- package/.claude/agents/{core-agents → planners}/architect.md +7 -20
- package/.claude/agents/{core-agents → planners}/planner.md +0 -21
- package/.claude/agents/{planning-team → planners}/security-architect-persona.md +8 -28
- package/.claude/agents/{planning-team → planners}/system-architect-persona.md +6 -38
- package/.claude/agents/{architecture → planners}/system-architect.md +12 -17
- package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +132 -161
- package/.claude/agents/product-owner-team/power-user-persona.md +149 -182
- package/.claude/agents/retrospective-analyst.md +84 -0
- package/.claude/agents/reviewers/README.md +58 -0
- package/.claude/agents/{analysis → reviewers}/code-quality-validator.md +8 -17
- package/.claude/agents/reviewers/reviewer.md +181 -0
- package/.claude/agents/sparc/architecture.md +6 -25
- package/.claude/agents/sparc/pseudocode.md +6 -0
- package/.claude/agents/sparc/refinement.md +6 -0
- package/.claude/agents/sparc/specification.md +1 -0
- package/.claude/agents/specialists/README.md +60 -0
- package/.claude/agents/{core-agents → specialists}/base-template-generator.md +8 -21
- package/.claude/agents/{specialized → specialists}/cli-agent-optimizer.md +1 -1
- package/.claude/agents/{specialized → specialists}/code-booster.md +1 -0
- package/.claude/agents/{consensus → specialists}/consensus-builder.md +1 -17
- package/.claude/agents/{specialized/mobile → specialists}/mobile-dev.md +0 -20
- package/.claude/agents/{core-agents → specialists}/performance-benchmarker.md +134 -148
- package/.claude/agents/{specialized → specialists}/rust-developer.md +1 -20
- package/.claude/agents/{specialized → specialists}/rust-enterprise-developer.md +1 -20
- package/.claude/agents/{specialized → specialists}/rust-mvp-developer.md +1 -20
- package/.claude/agents/{core-agents → specialists}/security-manager.md +68 -88
- package/.claude/agents/{security → specialists}/security-specialist-existing.md +6 -57
- package/.claude/agents/{security → specialists}/security-specialist.md +6 -30
- package/.claude/agents/{specialized/mobile → specialists}/spec-mobile-react-native.md +2 -21
- package/.claude/agents/testers/README.md +94 -0
- package/.claude/agents/{testing → testers}/e2e/playwright-agent.md +1 -20
- package/.claude/agents/{testing → testers}/interaction-tester.md +1 -20
- package/.claude/agents/{testing → testers}/playwright-tester.md +1 -1
- package/.claude/agents/testers/tester.md +139 -0
- package/.claude/agents/testers/unit/tdd-london-swarm.md +49 -0
- package/.claude/agents/testers/validation/production-validator.md +33 -0
- package/.claude/agents-ignore/cfn-loop-coordinator.md +157 -0
- package/.claude/agents-ignore/cfn-loop-coordinator.md.backup +156 -0
- package/.claude/agents-ignore/coordinator.md.backup +182 -0
- package/.claude/agents-ignore/cost-savings-cfn-loop-coordinator.md +760 -0
- package/.claude/agents-ignore/cost-savings-coordinator.md +173 -0
- package/.claude/artifacts/ace-reflections/REFLECT-001-summary.json +39 -0
- package/.claude/artifacts/ace-reflections/sprint-7_$(date -u +/"%Y%m%d_%H%M%S/").json" +47 -0
- package/.claude/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +61 -0
- package/.claude/commands/CFN_COORDINATOR_PARAMETERS.md +10 -10
- package/.claude/commands/cfn-loop-epic.md +43 -19
- package/.claude/commands/cfn-loop-single.md +3 -3
- package/.claude/commands/cfn-loop-sprints.md +1 -1
- package/.claude/commands/cfn-loop.md +45 -32
- package/.claude/commands/cfn-mode.md +20 -0
- package/.claude/commands/custom-routing-activate.md +37 -123
- package/.claude/commands/custom-routing-deactivate.md +27 -124
- package/.claude/commands/switch-api.md +41 -16
- package/.claude/commands/write-plan.md +104 -0
- package/.claude/data/cfn-loop.db +0 -0
- package/.claude/data/cfn_loop_logs.db +0 -0
- package/.claude/hooks/BACKUP_USAGE.md +243 -0
- package/.claude/hooks/post-edit-cfn-retrospective.sh +79 -0
- package/.claude/hooks/post-edit.sh +21 -0
- package/.claude/hooks/pre-edit-backup.sh +71 -0
- package/.claude/hooks/restore-from-backup.sh +37 -0
- package/.claude/prompts/cfn-loop-context.md +115 -0
- package/.claude/prompts/loop-specific/loop2.md +50 -0
- package/.claude/prompts/loop-specific/loop3.md +43 -0
- package/.claude/prompts/loop-specific/loop4.md +54 -0
- package/.claude/root-claude-distribute/CLAUDE.md +76 -2
- package/.claude/skills/ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/ace-system/store-reflection.sh +33 -136
- package/.claude/skills/agent-discovery/SKILL.md +40 -0
- package/.claude/skills/agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/agent-discovery/discover-agents.py +175 -0
- package/.claude/skills/agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/agent-discovery/temp_script.py +0 -0
- package/.claude/skills/agent-execution/execute-agent.sh +126 -0
- package/.claude/skills/agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/agent-selector/SKILL.md +90 -0
- package/.claude/skills/agent-selector/select-agents.sh +96 -0
- package/.claude/skills/agent-spawning/agent-selection-guide.md +1 -1
- package/.claude/skills/agent-swap/SKILL.md +36 -0
- package/.claude/skills/agent-swap/recommend-swap.sh +60 -0
- package/.claude/skills/api-validation/test-endpoints.sh +54 -0
- package/.claude/skills/automatic-memory-persistence/SKILL.md +73 -0
- package/.claude/skills/automatic-memory-persistence/persist-agent-output.sh +49 -0
- package/.claude/skills/automatic-memory-persistence/query-agent-history.sh +35 -0
- package/.claude/skills/automatic-memory-persistence/test-memory-persistence.sh +235 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +41 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
- package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
- package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +840 -0
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
- package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
- package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +307 -217
- package/.claude/skills/complexity-estimator/SKILL.md +96 -0
- package/.claude/skills/complexity-estimator/estimate-complexity.sh +144 -0
- package/.claude/skills/context-pruner/SKILL.md +75 -0
- package/.claude/skills/context-pruner/prune-context.sh +73 -0
- package/.claude/skills/defense-in-depth/SKILL.md +133 -0
- package/.claude/skills/dependency-extractor/SKILL.md +35 -0
- package/.claude/skills/dependency-extractor/extract-dependencies.sh +66 -0
- package/.claude/skills/epic-decomposer/SKILL.md +44 -0
- package/.claude/skills/epic-decomposer/decompose-epic.sh +104 -0
- package/.claude/skills/improvement-recommender/SKILL.md +33 -0
- package/.claude/skills/improvement-recommender/recommend-improvements.sh +92 -0
- package/.claude/skills/intervention-detector/SKILL.md +39 -0
- package/.claude/skills/intervention-detector/detect-intervention.sh +111 -0
- package/.claude/skills/intervention-orchestrator/SKILL.md +43 -0
- package/.claude/skills/intervention-orchestrator/execute-intervention.sh +59 -0
- package/.claude/skills/loop2-output-processing/SKILL.md +163 -0
- package/.claude/skills/loop2-output-processing/execute-and-extract.sh +77 -0
- package/.claude/skills/loop2-output-processing/execute-and-extract.sh.backup +36 -0
- package/.claude/skills/loop2-output-processing/parse-feedback.sh +147 -0
- package/.claude/skills/loop2-output-processing/process-validator-output.sh +275 -0
- package/.claude/skills/loop2-output-processing/test-bug27-fix.sh +200 -0
- package/.claude/skills/loop2-output-processing/test-loop2-processing.sh +113 -0
- package/.claude/skills/loop3-output-processing/AGENT_COMPLETION_PROTOCOL.md +206 -0
- package/.claude/skills/loop3-output-processing/SKILL.md +421 -0
- package/.claude/skills/loop3-output-processing/calculate-confidence.sh +28 -0
- package/.claude/skills/loop3-output-processing/execute-and-extract.sh +85 -0
- package/.claude/skills/loop3-output-processing/parse-confidence.sh +31 -0
- package/.claude/skills/loop3-output-processing/test-agent-timeout.sh +327 -0
- package/.claude/skills/loop3-output-processing/test-loop3-processing.sh +155 -0
- package/.claude/skills/loop3-output-processing/verify-deliverables.sh +42 -0
- package/.claude/skills/pattern-extraction/SKILL.md +30 -0
- package/.claude/skills/pattern-extraction/extract-patterns.sh +80 -0
- package/.claude/skills/playbook/SKILL.md +113 -0
- package/.claude/skills/playbook/init-playbook.sh +54 -0
- package/.claude/skills/playbook/playbook.db +0 -0
- package/.claude/skills/playbook/query-playbook.sh +79 -0
- package/.claude/skills/playbook/update-playbook.sh +69 -0
- package/.claude/skills/playbook-auto-update/SKILL.md +29 -0
- package/.claude/skills/playbook-auto-update/auto-update-playbook.sh +86 -0
- package/.claude/skills/product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/redis-coordination/AGENT_LOGGING.md +280 -0
- package/.claude/skills/redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/redis-coordination/README.md +30 -29
- package/.claude/skills/redis-coordination/SKILL.md +685 -83
- package/.claude/skills/redis-coordination/agent-log.sh +124 -0
- package/.claude/skills/redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/redis-coordination/demos/test-iteration-feedback.sh +320 -0
- package/.claude/skills/redis-coordination/{test-orchestrator.sh → demos/test-orchestrator.sh} +25 -0
- package/.claude/skills/redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/redis-coordination/get-agent-timeout.sh +176 -176
- package/.claude/skills/redis-coordination/init-swarm.sh +6 -1
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +106 -183
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/redis-coordination/log-event.sh +109 -0
- package/.claude/skills/redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +31 -933
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/redis-coordination/send-heartbeat.sh +164 -72
- package/.claude/skills/redis-coordination/signal.sh +38 -0
- package/.claude/skills/redis-coordination/store-context.sh +86 -0
- package/.claude/skills/redis-coordination/store-epic-context.sh +123 -0
- package/.claude/skills/redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +101 -101
- package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +98 -98
- package/.claude/skills/redis-coordination/tests/integration-test.sh +169 -169
- package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +81 -81
- package/.claude/skills/redis-coordination/tests/run-test-suite.sh +91 -91
- package/.claude/skills/redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/redis-coordination/tests/test-utils.sh +53 -121
- package/.claude/skills/redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/retrospective-report/SKILL.md +31 -0
- package/.claude/skills/retrospective-report/generate-report.sh +101 -0
- package/.claude/skills/run-all-skill-tests.sh +124 -0
- package/.claude/skills/scope-simplifier/SKILL.md +37 -0
- package/.claude/skills/scope-simplifier/simplify-scope.sh +68 -0
- package/.claude/skills/simplified-agent-lifecycle/COST_ANALYSIS.md +49 -0
- package/.claude/skills/simplified-agent-lifecycle/DESIGN.md +98 -0
- package/.claude/skills/simplified-agent-lifecycle/MIGRATION_PLAN.md +74 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/specialist-injection/SKILL.md +41 -0
- package/.claude/skills/specialist-injection/recommend-specialist.sh +57 -0
- package/.claude/skills/sprint-execution/SKILL.md +27 -0
- package/.claude/skills/sprint-execution/execute-sprint-task.sh +59 -0
- package/.claude/skills/sprint-execution/execute-sprint.sh +65 -0
- package/.claude/skills/sprint-planner/SKILL.md +37 -0
- package/.claude/skills/sprint-planner/plan-sprint.sh +85 -0
- package/.claude/skills/standardized-error-handling/SKILL.md +56 -0
- package/.claude/skills/standardized-error-handling/capture-agent-error.sh +87 -0
- package/.claude/skills/standardized-error-handling/test-error-handling.sh +166 -0
- package/.claude/skills/task-classifier/SKILL.md +94 -0
- package/.claude/skills/task-classifier/classify-task.sh +115 -0
- package/.claude/skills/validation-templates/SKILL.md +47 -0
- package/.claude/skills/validation-templates/content.json +38 -0
- package/.claude/skills/validation-templates/data.json +38 -0
- package/.claude/skills/validation-templates/design.json +38 -0
- package/.claude/skills/validation-templates/infrastructure.json +38 -0
- package/.claude/skills/validation-templates/research.json +38 -0
- package/.claude/skills/validation-templates/software.json +38 -0
- package/.claude/skills/webapp-testing/README.md +142 -0
- package/.claude/skills/webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/webapp-testing/SKILL.md +877 -0
- package/.claude/skills/webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/webapp-testing/test-webapp-testing.sh +233 -0
- package/.claude/spawn-pattern-examples.md +3 -3
- package/CLAUDE.md +364 -16
- package/README.md +598 -251
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-command.js +153 -0
- package/dist/cli/agent-command.js.map +1 -0
- package/dist/cli/agent-definition-parser.js +183 -0
- package/dist/cli/agent-definition-parser.js.map +1 -0
- package/dist/cli/agent-executor.js +310 -0
- package/dist/cli/agent-executor.js.map +1 -0
- package/dist/cli/agent-prompt-builder.js +268 -0
- package/dist/cli/agent-prompt-builder.js.map +1 -0
- package/dist/cli/agent-spawn.js +56 -2
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/anthropic-client.js +421 -0
- package/dist/cli/anthropic-client.js.map +1 -0
- package/dist/cli/cfn-context.js +150 -0
- package/dist/cli/cfn-context.js.map +1 -1
- package/dist/cli/cfn-fork.js +159 -0
- package/dist/cli/cfn-fork.js.map +1 -0
- package/dist/cli/cli-agent-context.js +358 -0
- package/dist/cli/cli-agent-context.js.map +1 -0
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork.js +201 -0
- package/dist/cli/conversation-fork.js.map +1 -0
- package/dist/cli/index.js +119 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/iteration-history.js +188 -0
- package/dist/cli/iteration-history.js.map +1 -0
- package/dist/cli/tool-definitions.js +263 -0
- package/dist/cli/tool-definitions.js.map +1 -0
- package/dist/cli/tool-executor.js +247 -0
- package/dist/cli/tool-executor.js.map +1 -0
- package/dist/hello.js +8 -0
- package/dist/hello.js.map +1 -0
- package/package.json +16 -6
- package/scripts/README.md +68 -0
- package/scripts/cfn-intervention-example.sh +21 -0
- package/scripts/migrate-test-infrastructure.sh +40 -0
- package/scripts/switch-api.sh +233 -0
- package/scripts/validate-test-migration.sh +49 -0
- package/scripts/verify-no-secrets.sh +55 -0
- package/.claude/agents/architecture/system-architect.md.backup +0 -603
- package/.claude/agents/code-booster.md +0 -131
- package/.claude/agents/consensus/performance-benchmarker.md +0 -101
- package/.claude/agents/consensus/security-manager.md +0 -107
- package/.claude/agents/context-curator.md +0 -167
- package/.claude/agents/context-reflector.md +0 -65
- package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
- package/.claude/agents/core-agents/code-quality-validator.md +0 -149
- package/.claude/agents/core-agents/context-curator.md +0 -452
- package/.claude/agents/core-agents/context-reflector.md +0 -273
- package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -190
- package/.claude/agents/core-agents/tester.md +0 -170
- package/.claude/agents/development/backend-dev.md +0 -165
- package/.claude/agents/devops/devops-engineer.md +0 -148
- package/.claude/agents/frontend/interaction-tester.md +0 -139
- package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
- package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
- package/.claude/agents/testing/production-validator.md +0 -179
- package/.claude/agents/testing/tdd-london-swarm.md +0 -209
- package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
- package/.claude/agents/testing/validation/production-validator.md +0 -43
- package/dist/coordination/fleet-manager.test.js +0 -141
- package/dist/coordination/fleet-manager.test.js.map +0 -1
- package/dist/middleware/transparency-middleware.test.js +0 -184
- package/dist/middleware/transparency-middleware.test.js.map +0 -1
- /package/.claude/agents/{core-agents → developers}/researcher.md +0 -0
- /package/.claude/agents/{consensus → specialists}/crdt-synchronizer.md +0 -0
- /package/.claude/agents/{consensus → specialists}/quorum-manager.md +0 -0
- /package/.claude/agents/{consensus → specialists}/raft-manager.md +0 -0
- /package/.claude/{agents/core-agents → agents-ignore}/coordinator.md +0 -0
- /package/.claude/{agents/core-agents/cost-savings-coordinator.md → agents-ignore/cost-savings-coordinator.md.backup} +0 -0
- /package/.claude/skills/redis-coordination/{phase4-wake-queue-test-report.md → demos/phase4-wake-queue-test-report.md} +0 -0
- /package/.claude/skills/redis-coordination/{test-bzpopmin-fix.sh → demos/test-bzpopmin-fix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-cancel-swarm.sh → demos/test-cancel-swarm.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-dlq.sh → demos/test-dlq.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake-phase4-unix.sh → demos/test-priority-wake-phase4-unix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake-phase4.sh → demos/test-priority-wake-phase4.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake.sh → demos/test-priority-wake.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quick-fix.sh → demos/test-quick-fix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-absolute.sh → demos/test-quorum-absolute.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-fallback.sh → demos/test-quorum-fallback.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-percentage.sh → demos/test-quorum-percentage.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-with-retry.sh → demos/test-quorum-with-retry.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum.sh → demos/test-quorum.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-shutdown-handling.sh → demos/test-shutdown-handling.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-shutdown.sh → demos/test-shutdown.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-utils-unix.sh → demos/test-utils-unix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-utils.sh → demos/test-utils.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-waiting-mode.sh → demos/test-waiting-mode.sh} +0 -0
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Integration Test Suite
|
|
3
|
-
# Validates full CFN Loop retry and DLQ mechanisms
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
# Source test utilities
|
|
8
|
-
source "$(dirname "$0")/test-utils.sh"
|
|
9
|
-
|
|
10
|
-
# Simulate a CFN Loop with potential failures
|
|
11
|
-
test_cfn_loop_retry_integration() {
|
|
12
|
-
local task_id="integration-test-$(date +%s)"
|
|
13
|
-
local agent_ids=("researcher" "backend-dev" "devops")
|
|
14
|
-
local failed_stages=()
|
|
15
|
-
|
|
16
|
-
# Mock agent with potential failure
|
|
17
|
-
mock_agent_with_retry() {
|
|
18
|
-
local agent_id="$1"
|
|
19
|
-
local stage="$2"
|
|
20
|
-
|
|
21
|
-
# Simulate potential failures
|
|
22
|
-
local failure_probability=0.3 # 30% chance of failure
|
|
23
|
-
local random_value=$(shuf -i 1-10 -n 1)
|
|
24
|
-
|
|
25
|
-
if [ $random_value -le 3 ]; then
|
|
26
|
-
echo "Agent $agent_id failed at stage $stage"
|
|
27
|
-
failed_stages+=("$stage")
|
|
28
|
-
return 1
|
|
29
|
-
fi
|
|
30
|
-
return 0
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
# Run mock CFN Loop
|
|
34
|
-
local max_iterations=5
|
|
35
|
-
for ((iteration=1; iteration<=max_iterations; iteration++)); do
|
|
36
|
-
echo "CFN Loop Iteration $iteration"
|
|
37
|
-
|
|
38
|
-
for agent_id in "${agent_ids[@]}"; do
|
|
39
|
-
if ! mock_agent_with_retry "$agent_id" "iteration-$iteration"; then
|
|
40
|
-
# Retry mechanism
|
|
41
|
-
./.claude/skills/redis-coordination/retry-mechanism.sh \
|
|
42
|
-
--task-id "$task_id" \
|
|
43
|
-
--agent-id "$agent_id" \
|
|
44
|
-
--max-retries 3
|
|
45
|
-
fi
|
|
46
|
-
|
|
47
|
-
# Signal agent completion
|
|
48
|
-
redis-cli lpush "swarm:$task_id:$agent_id:done" "complete"
|
|
49
|
-
done
|
|
50
|
-
|
|
51
|
-
# Check consensus
|
|
52
|
-
local consensus_result=$(./.claude/skills/redis-coordination/check-consensus.sh \
|
|
53
|
-
--task-id "$task_id" \
|
|
54
|
-
--min-confidence 0.85)
|
|
55
|
-
|
|
56
|
-
if [ "$consensus_result" == "success" ]; then
|
|
57
|
-
break
|
|
58
|
-
fi
|
|
59
|
-
done
|
|
60
|
-
|
|
61
|
-
# Validate test results
|
|
62
|
-
assert_not_empty "$consensus_result" "No consensus reached"
|
|
63
|
-
|
|
64
|
-
# Check if any agents had to be retried
|
|
65
|
-
if [ ${#failed_stages[@]} -gt 0 ]; then
|
|
66
|
-
echo "Stages with failures: ${failed_stages[@]}"
|
|
67
|
-
fi
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
# Test DLQ capture during orchestration
|
|
71
|
-
test_dlq_capture_during_orchestration() {
|
|
72
|
-
local task_id="dlq-capture-$(date +%s)"
|
|
73
|
-
local agent_id="critical-agent"
|
|
74
|
-
local error_scenarios=(
|
|
75
|
-
"connection_timeout"
|
|
76
|
-
"invalid_configuration"
|
|
77
|
-
"resource_exhaustion"
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
for scenario in "${error_scenarios[@]}"; do
|
|
81
|
-
# Simulate orchestration failure
|
|
82
|
-
local result=$(
|
|
83
|
-
./.claude/skills/redis-coordination/orchestrate-cfn-loop.sh \
|
|
84
|
-
--task-id "$task_id" \
|
|
85
|
-
--agent-id "$agent_id" \
|
|
86
|
-
--error-scenario "$scenario" 2>&1
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
# Check if DLQ write occurred
|
|
90
|
-
local dlq_entry=$(./.claude/skills/redis-coordination/query-dlq.sh \
|
|
91
|
-
--task-id "$task_id")
|
|
92
|
-
|
|
93
|
-
assert_not_empty "$dlq_entry" "DLQ not captured for $scenario"
|
|
94
|
-
assert_contains "$dlq_entry" "$scenario" "Scenario details missing in DLQ"
|
|
95
|
-
done
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
# Config loading test
|
|
99
|
-
test_config_loading() {
|
|
100
|
-
local config_variations=(
|
|
101
|
-
"/tmp/full-config.json"
|
|
102
|
-
"/tmp/minimal-config.json"
|
|
103
|
-
"/tmp/override-config.json"
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
for config_path in "${config_variations[@]}"; do
|
|
107
|
-
# Generate test configurations
|
|
108
|
-
case "$config_path" in
|
|
109
|
-
"/tmp/full-config.json")
|
|
110
|
-
cat > "$config_path" << EOF
|
|
111
|
-
{
|
|
112
|
-
"retry_max_attempts": 5,
|
|
113
|
-
"backoff_base": 2,
|
|
114
|
-
"dlq_ttl_days": 7,
|
|
115
|
-
"log_level": "debug"
|
|
116
|
-
}
|
|
117
|
-
EOF
|
|
118
|
-
;;
|
|
119
|
-
"/tmp/minimal-config.json")
|
|
120
|
-
cat > "$config_path" << EOF
|
|
121
|
-
{
|
|
122
|
-
"retry_max_attempts": 3
|
|
123
|
-
}
|
|
124
|
-
EOF
|
|
125
|
-
;;
|
|
126
|
-
"/tmp/override-config.json")
|
|
127
|
-
cat > "$config_path" << EOF
|
|
128
|
-
{
|
|
129
|
-
"retry_max_attempts": 10,
|
|
130
|
-
"feature_flags": {
|
|
131
|
-
"advanced_retry": true,
|
|
132
|
-
"dlq_monitoring": true
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
EOF
|
|
136
|
-
;;
|
|
137
|
-
esac
|
|
138
|
-
|
|
139
|
-
# Test config loading
|
|
140
|
-
local result=$(./.claude/skills/redis-coordination/load-config.sh \
|
|
141
|
-
--config "$config_path")
|
|
142
|
-
|
|
143
|
-
assert_not_empty "$result" "Config loading failed for $config_path"
|
|
144
|
-
done
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
# Run integration tests
|
|
148
|
-
main() {
|
|
149
|
-
local passed=0
|
|
150
|
-
local total_tests=3
|
|
151
|
-
local tests=(
|
|
152
|
-
"test_cfn_loop_retry_integration"
|
|
153
|
-
"test_dlq_capture_during_orchestration"
|
|
154
|
-
"test_config_loading"
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
for test in "${tests[@]}"; do
|
|
158
|
-
if $test; then
|
|
159
|
-
((passed++))
|
|
160
|
-
fi
|
|
161
|
-
done
|
|
162
|
-
|
|
163
|
-
# Compute and report confidence
|
|
164
|
-
report_test_results "redis-phase1-1760875302" "tester-1" "$passed" "$total_tests"
|
|
165
|
-
|
|
166
|
-
# Return pass/fail
|
|
167
|
-
[ $passed -eq $total_tests ]
|
|
168
|
-
}
|
|
169
|
-
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Integration Test Suite
|
|
3
|
+
# Validates full CFN Loop retry and DLQ mechanisms
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Source test utilities
|
|
8
|
+
source "$(dirname "$0")/test-utils.sh"
|
|
9
|
+
|
|
10
|
+
# Simulate a CFN Loop with potential failures
|
|
11
|
+
test_cfn_loop_retry_integration() {
|
|
12
|
+
local task_id="integration-test-$(date +%s)"
|
|
13
|
+
local agent_ids=("researcher" "backend-dev" "devops")
|
|
14
|
+
local failed_stages=()
|
|
15
|
+
|
|
16
|
+
# Mock agent with potential failure
|
|
17
|
+
mock_agent_with_retry() {
|
|
18
|
+
local agent_id="$1"
|
|
19
|
+
local stage="$2"
|
|
20
|
+
|
|
21
|
+
# Simulate potential failures
|
|
22
|
+
local failure_probability=0.3 # 30% chance of failure
|
|
23
|
+
local random_value=$(shuf -i 1-10 -n 1)
|
|
24
|
+
|
|
25
|
+
if [ $random_value -le 3 ]; then
|
|
26
|
+
echo "Agent $agent_id failed at stage $stage"
|
|
27
|
+
failed_stages+=("$stage")
|
|
28
|
+
return 1
|
|
29
|
+
fi
|
|
30
|
+
return 0
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Run mock CFN Loop
|
|
34
|
+
local max_iterations=5
|
|
35
|
+
for ((iteration=1; iteration<=max_iterations; iteration++)); do
|
|
36
|
+
echo "CFN Loop Iteration $iteration"
|
|
37
|
+
|
|
38
|
+
for agent_id in "${agent_ids[@]}"; do
|
|
39
|
+
if ! mock_agent_with_retry "$agent_id" "iteration-$iteration"; then
|
|
40
|
+
# Retry mechanism
|
|
41
|
+
./.claude/skills/redis-coordination/retry-mechanism.sh \
|
|
42
|
+
--task-id "$task_id" \
|
|
43
|
+
--agent-id "$agent_id" \
|
|
44
|
+
--max-retries 3
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Signal agent completion
|
|
48
|
+
redis-cli lpush "swarm:$task_id:$agent_id:done" "complete"
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
# Check consensus
|
|
52
|
+
local consensus_result=$(./.claude/skills/redis-coordination/check-consensus.sh \
|
|
53
|
+
--task-id "$task_id" \
|
|
54
|
+
--min-confidence 0.85)
|
|
55
|
+
|
|
56
|
+
if [ "$consensus_result" == "success" ]; then
|
|
57
|
+
break
|
|
58
|
+
fi
|
|
59
|
+
done
|
|
60
|
+
|
|
61
|
+
# Validate test results
|
|
62
|
+
assert_not_empty "$consensus_result" "No consensus reached"
|
|
63
|
+
|
|
64
|
+
# Check if any agents had to be retried
|
|
65
|
+
if [ ${#failed_stages[@]} -gt 0 ]; then
|
|
66
|
+
echo "Stages with failures: ${failed_stages[@]}"
|
|
67
|
+
fi
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Test DLQ capture during orchestration
|
|
71
|
+
test_dlq_capture_during_orchestration() {
|
|
72
|
+
local task_id="dlq-capture-$(date +%s)"
|
|
73
|
+
local agent_id="critical-agent"
|
|
74
|
+
local error_scenarios=(
|
|
75
|
+
"connection_timeout"
|
|
76
|
+
"invalid_configuration"
|
|
77
|
+
"resource_exhaustion"
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
for scenario in "${error_scenarios[@]}"; do
|
|
81
|
+
# Simulate orchestration failure
|
|
82
|
+
local result=$(
|
|
83
|
+
./.claude/skills/redis-coordination/orchestrate-cfn-loop.sh \
|
|
84
|
+
--task-id "$task_id" \
|
|
85
|
+
--agent-id "$agent_id" \
|
|
86
|
+
--error-scenario "$scenario" 2>&1
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Check if DLQ write occurred
|
|
90
|
+
local dlq_entry=$(./.claude/skills/redis-coordination/query-dlq.sh \
|
|
91
|
+
--task-id "$task_id")
|
|
92
|
+
|
|
93
|
+
assert_not_empty "$dlq_entry" "DLQ not captured for $scenario"
|
|
94
|
+
assert_contains "$dlq_entry" "$scenario" "Scenario details missing in DLQ"
|
|
95
|
+
done
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# Config loading test
|
|
99
|
+
test_config_loading() {
|
|
100
|
+
local config_variations=(
|
|
101
|
+
"/tmp/full-config.json"
|
|
102
|
+
"/tmp/minimal-config.json"
|
|
103
|
+
"/tmp/override-config.json"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
for config_path in "${config_variations[@]}"; do
|
|
107
|
+
# Generate test configurations
|
|
108
|
+
case "$config_path" in
|
|
109
|
+
"/tmp/full-config.json")
|
|
110
|
+
cat > "$config_path" << EOF
|
|
111
|
+
{
|
|
112
|
+
"retry_max_attempts": 5,
|
|
113
|
+
"backoff_base": 2,
|
|
114
|
+
"dlq_ttl_days": 7,
|
|
115
|
+
"log_level": "debug"
|
|
116
|
+
}
|
|
117
|
+
EOF
|
|
118
|
+
;;
|
|
119
|
+
"/tmp/minimal-config.json")
|
|
120
|
+
cat > "$config_path" << EOF
|
|
121
|
+
{
|
|
122
|
+
"retry_max_attempts": 3
|
|
123
|
+
}
|
|
124
|
+
EOF
|
|
125
|
+
;;
|
|
126
|
+
"/tmp/override-config.json")
|
|
127
|
+
cat > "$config_path" << EOF
|
|
128
|
+
{
|
|
129
|
+
"retry_max_attempts": 10,
|
|
130
|
+
"feature_flags": {
|
|
131
|
+
"advanced_retry": true,
|
|
132
|
+
"dlq_monitoring": true
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
EOF
|
|
136
|
+
;;
|
|
137
|
+
esac
|
|
138
|
+
|
|
139
|
+
# Test config loading
|
|
140
|
+
local result=$(./.claude/skills/redis-coordination/load-config.sh \
|
|
141
|
+
--config "$config_path")
|
|
142
|
+
|
|
143
|
+
assert_not_empty "$result" "Config loading failed for $config_path"
|
|
144
|
+
done
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Run integration tests
|
|
148
|
+
main() {
|
|
149
|
+
local passed=0
|
|
150
|
+
local total_tests=3
|
|
151
|
+
local tests=(
|
|
152
|
+
"test_cfn_loop_retry_integration"
|
|
153
|
+
"test_dlq_capture_during_orchestration"
|
|
154
|
+
"test_config_loading"
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
for test in "${tests[@]}"; do
|
|
158
|
+
if $test; then
|
|
159
|
+
((passed++))
|
|
160
|
+
fi
|
|
161
|
+
done
|
|
162
|
+
|
|
163
|
+
# Compute and report confidence
|
|
164
|
+
report_test_results "redis-phase1-1760875302" "tester-1" "$passed" "$total_tests"
|
|
165
|
+
|
|
166
|
+
# Return pass/fail
|
|
167
|
+
[ $passed -eq $total_tests ]
|
|
168
|
+
}
|
|
169
|
+
|
|
170
170
|
main
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Retry Mechanism Test Suite
|
|
3
|
-
# Validates retry logic, backoff, and timeout behavior
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
# Source common test utilities
|
|
8
|
-
source "$(dirname "$0")/test-utils.sh"
|
|
9
|
-
|
|
10
|
-
# Test retry mechanism with different retry counts
|
|
11
|
-
test_retry_mechanism() {
|
|
12
|
-
local retry_counts=(0 1 3 5)
|
|
13
|
-
local base_backoff=2 # Base backoff in seconds
|
|
14
|
-
|
|
15
|
-
for retries in "${retry_counts[@]}"; do
|
|
16
|
-
echo "Testing retry mechanism with $retries retries"
|
|
17
|
-
|
|
18
|
-
# Simulated failure function
|
|
19
|
-
mock_failed_operation() {
|
|
20
|
-
local attempt=1
|
|
21
|
-
local max_attempts=$((retries + 1))
|
|
22
|
-
|
|
23
|
-
while [ $attempt -le $max_attempts ]; do
|
|
24
|
-
if [ $attempt -eq $max_attempts ]; then
|
|
25
|
-
echo "Final attempt failed"
|
|
26
|
-
return 1
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
# Simulate failure
|
|
30
|
-
echo "Attempt $attempt failed, will retry"
|
|
31
|
-
sleep $((base_backoff ** attempt))
|
|
32
|
-
((attempt++))
|
|
33
|
-
done
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
# Capture timing and retry logs
|
|
37
|
-
local start_time=$(date +%s)
|
|
38
|
-
local log_file="/tmp/retry-test-$retries.log"
|
|
39
|
-
|
|
40
|
-
if ! mock_failed_operation 2>"$log_file"; then
|
|
41
|
-
local end_time=$(date +%s)
|
|
42
|
-
local total_time=$((end_time - start_time))
|
|
43
|
-
|
|
44
|
-
# Validate retry count and timing
|
|
45
|
-
local actual_retries=$(($(grep -c "Attempt" "$log_file") - 1))
|
|
46
|
-
assert_equal "$actual_retries" "$retries" "Retry count mismatch for $retries retries"
|
|
47
|
-
|
|
48
|
-
# Validate exponential backoff (roughly)
|
|
49
|
-
local expected_max_wait=$((base_backoff ** (retries + 1)))
|
|
50
|
-
assert "[ $total_time -le $((expected_max_wait + 5)) ]" "Backoff timing incorrect"
|
|
51
|
-
else
|
|
52
|
-
fail "Operation should have failed after $retries retries"
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
# Clean up log
|
|
56
|
-
rm "$log_file"
|
|
57
|
-
done
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
# Test timeout behavior
|
|
61
|
-
test_timeout_behavior() {
|
|
62
|
-
local timeout_duration=10 # 10 seconds
|
|
63
|
-
local long_running_operation() {
|
|
64
|
-
sleep 15 # Longer than timeout
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
local start_time=$(date +%s)
|
|
68
|
-
timeout $timeout_duration long_running_operation || true
|
|
69
|
-
local end_time=$(date +%s)
|
|
70
|
-
|
|
71
|
-
local total_time=$((end_time - start_time))
|
|
72
|
-
assert "[ $total_time -ge $timeout_duration ] && [ $total_time -le $((timeout_duration + 2)) ]" "Timeout not enforced correctly"
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
# Run tests
|
|
76
|
-
main() {
|
|
77
|
-
test_retry_mechanism
|
|
78
|
-
test_timeout_behavior
|
|
79
|
-
echo "Retry Mechanism Tests: PASSED"
|
|
80
|
-
}
|
|
81
|
-
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Retry Mechanism Test Suite
|
|
3
|
+
# Validates retry logic, backoff, and timeout behavior
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Source common test utilities
|
|
8
|
+
source "$(dirname "$0")/test-utils.sh"
|
|
9
|
+
|
|
10
|
+
# Test retry mechanism with different retry counts
|
|
11
|
+
test_retry_mechanism() {
|
|
12
|
+
local retry_counts=(0 1 3 5)
|
|
13
|
+
local base_backoff=2 # Base backoff in seconds
|
|
14
|
+
|
|
15
|
+
for retries in "${retry_counts[@]}"; do
|
|
16
|
+
echo "Testing retry mechanism with $retries retries"
|
|
17
|
+
|
|
18
|
+
# Simulated failure function
|
|
19
|
+
mock_failed_operation() {
|
|
20
|
+
local attempt=1
|
|
21
|
+
local max_attempts=$((retries + 1))
|
|
22
|
+
|
|
23
|
+
while [ $attempt -le $max_attempts ]; do
|
|
24
|
+
if [ $attempt -eq $max_attempts ]; then
|
|
25
|
+
echo "Final attempt failed"
|
|
26
|
+
return 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# Simulate failure
|
|
30
|
+
echo "Attempt $attempt failed, will retry"
|
|
31
|
+
sleep $((base_backoff ** attempt))
|
|
32
|
+
((attempt++))
|
|
33
|
+
done
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# Capture timing and retry logs
|
|
37
|
+
local start_time=$(date +%s)
|
|
38
|
+
local log_file="/tmp/retry-test-$retries.log"
|
|
39
|
+
|
|
40
|
+
if ! mock_failed_operation 2>"$log_file"; then
|
|
41
|
+
local end_time=$(date +%s)
|
|
42
|
+
local total_time=$((end_time - start_time))
|
|
43
|
+
|
|
44
|
+
# Validate retry count and timing
|
|
45
|
+
local actual_retries=$(($(grep -c "Attempt" "$log_file") - 1))
|
|
46
|
+
assert_equal "$actual_retries" "$retries" "Retry count mismatch for $retries retries"
|
|
47
|
+
|
|
48
|
+
# Validate exponential backoff (roughly)
|
|
49
|
+
local expected_max_wait=$((base_backoff ** (retries + 1)))
|
|
50
|
+
assert "[ $total_time -le $((expected_max_wait + 5)) ]" "Backoff timing incorrect"
|
|
51
|
+
else
|
|
52
|
+
fail "Operation should have failed after $retries retries"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Clean up log
|
|
56
|
+
rm "$log_file"
|
|
57
|
+
done
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# Test timeout behavior
|
|
61
|
+
test_timeout_behavior() {
|
|
62
|
+
local timeout_duration=10 # 10 seconds
|
|
63
|
+
local long_running_operation() {
|
|
64
|
+
sleep 15 # Longer than timeout
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
local start_time=$(date +%s)
|
|
68
|
+
timeout $timeout_duration long_running_operation || true
|
|
69
|
+
local end_time=$(date +%s)
|
|
70
|
+
|
|
71
|
+
local total_time=$((end_time - start_time))
|
|
72
|
+
assert "[ $total_time -ge $timeout_duration ] && [ $total_time -le $((timeout_duration + 2)) ]" "Timeout not enforced correctly"
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Run tests
|
|
76
|
+
main() {
|
|
77
|
+
test_retry_mechanism
|
|
78
|
+
test_timeout_behavior
|
|
79
|
+
echo "Retry Mechanism Tests: PASSED"
|
|
80
|
+
}
|
|
81
|
+
|
|
82
82
|
main
|