claude-flow-novice 2.14.3 → 2.14.5

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.
Files changed (194) hide show
  1. package/.claude/commands/CFN_LOOP_TASK_MODE.md +4 -47
  2. package/.claude/commands/seo/SEO_TASK_MODE.md +892 -0
  3. package/.claude/commands/seo/seo-blog.md +428 -0
  4. package/.claude/commands/seo/seo-landing.md +91 -0
  5. package/.claude/commands/seo/seo-product.md +104 -0
  6. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
  7. package/claude-assets/agents/cfn-dev-team/coordinators/epic-creator.md +120 -0
  8. package/claude-assets/agents/cfn-seo-team/AGENT_CREATION_REPORT.md +481 -0
  9. package/claude-assets/agents/cfn-seo-team/DELEGATION_MATRIX.md +371 -0
  10. package/claude-assets/agents/cfn-seo-team/HUMANIZER_PROMPTS.md +536 -0
  11. package/claude-assets/agents/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +642 -0
  12. package/claude-assets/agents/cfn-seo-team/cfn-seo-coordinator.md +414 -0
  13. package/claude-assets/agents/cfn-seo-team/competitive-seo-analyst.md +423 -0
  14. package/claude-assets/agents/cfn-seo-team/content-atomization-specialist.md +580 -0
  15. package/claude-assets/agents/cfn-seo-team/content-seo-strategist.md +245 -0
  16. package/claude-assets/agents/cfn-seo-team/eeat-content-auditor.md +389 -0
  17. package/claude-assets/agents/cfn-seo-team/geo-optimization-expert.md +269 -0
  18. package/claude-assets/agents/cfn-seo-team/link-building-specialist.md +291 -0
  19. package/claude-assets/agents/cfn-seo-team/local-seo-optimizer.md +333 -0
  20. package/claude-assets/agents/cfn-seo-team/programmatic-seo-engineer.md +244 -0
  21. package/claude-assets/agents/cfn-seo-team/schema-markup-engineer.md +430 -0
  22. package/claude-assets/agents/cfn-seo-team/seo-analytics-specialist.md +376 -0
  23. package/claude-assets/agents/cfn-seo-team/seo-validators/accessibility-validator.md +565 -0
  24. package/claude-assets/agents/cfn-seo-team/seo-validators/audience-validator.md +484 -0
  25. package/claude-assets/agents/cfn-seo-team/seo-validators/branding-validator.md +452 -0
  26. package/claude-assets/agents/cfn-seo-team/seo-validators/humanizer-validator.md +333 -0
  27. package/claude-assets/agents/cfn-seo-team/technical-seo-specialist.md +228 -0
  28. package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +4 -47
  29. package/claude-assets/commands/seo/SEO_TASK_MODE.md +892 -0
  30. package/claude-assets/commands/seo/seo-blog.md +428 -0
  31. package/claude-assets/commands/seo/seo-landing.md +91 -0
  32. package/claude-assets/commands/seo/seo-product.md +104 -0
  33. package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
  34. package/claude-assets/skills/seo-orchestration/SKILL.md +292 -0
  35. package/claude-assets/skills/seo-orchestration/orchestrate-seo.sh +566 -0
  36. package/claude-assets/skills/seo-orchestration/orchestrate-seo.sh.backup +755 -0
  37. package/claude-assets/skills/seo-orchestration/validate-consensus.sh +270 -0
  38. package/dist/agents/agent-loader.js +165 -146
  39. package/dist/agents/agent-loader.js.map +1 -1
  40. package/dist/cli/agent-prompt-builder.js +25 -0
  41. package/dist/cli/agent-prompt-builder.js.map +1 -1
  42. package/package.json +1 -1
  43. package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
  44. package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  45. package/.claude/skills/cfn-redis-coordination/LOGGING.md +0 -260
  46. package/.claude/skills/cfn-redis-coordination/README.md +0 -65
  47. package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
  48. package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  49. package/.claude/skills/cfn-redis-coordination/SKILL.md +0 -720
  50. package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
  51. package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
  52. package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
  53. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
  54. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
  55. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
  56. package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
  57. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
  58. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
  59. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
  60. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
  61. package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
  62. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
  63. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
  64. package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
  65. package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
  66. package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
  67. package/.claude/skills/cfn-redis-coordination/examples/README.md +0 -73
  68. package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
  69. package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
  70. package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
  71. package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
  72. package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  73. package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
  74. package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
  75. package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
  76. package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
  77. package/.claude/skills/cfn-redis-coordination/heartbeat.sh +0 -126
  78. package/.claude/skills/cfn-redis-coordination/init-swarm.sh +0 -148
  79. package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
  80. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
  81. package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
  82. package/.claude/skills/cfn-redis-coordination/log-event.sh +0 -109
  83. package/.claude/skills/cfn-redis-coordination/metrics-export.sh +0 -674
  84. package/.claude/skills/cfn-redis-coordination/metrics-schema.json +0 -66
  85. package/.claude/skills/cfn-redis-coordination/metrics-storage.md +0 -31
  86. package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
  87. package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
  88. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
  89. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
  90. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  91. package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
  92. package/.claude/skills/cfn-redis-coordination/priority_wake.py +0 -134
  93. package/.claude/skills/cfn-redis-coordination/query-dlq.sh +0 -162
  94. package/.claude/skills/cfn-redis-coordination/query-logs.sh +0 -103
  95. package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
  96. package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
  97. package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
  98. package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
  99. package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
  100. package/.claude/skills/cfn-redis-coordination/signal.sh +0 -38
  101. package/.claude/skills/cfn-redis-coordination/store-context.sh +0 -86
  102. package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
  103. package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
  104. package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
  105. package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
  106. package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
  107. package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
  108. package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
  109. package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
  110. package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
  111. package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
  112. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  113. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  114. package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
  115. package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
  116. package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
  117. package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
  118. package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
  119. package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
  120. package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  121. package/claude-assets/skills/cfn-redis-coordination/LOGGING.md +0 -260
  122. package/claude-assets/skills/cfn-redis-coordination/README.md +0 -65
  123. package/claude-assets/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
  124. package/claude-assets/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  125. package/claude-assets/skills/cfn-redis-coordination/SKILL.md +0 -720
  126. package/claude-assets/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
  127. package/claude-assets/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
  128. package/claude-assets/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
  129. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
  130. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
  131. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
  132. package/claude-assets/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
  133. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
  134. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
  135. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
  136. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
  137. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
  138. package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
  139. package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
  140. package/claude-assets/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
  141. package/claude-assets/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
  142. package/claude-assets/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
  143. package/claude-assets/skills/cfn-redis-coordination/examples/README.md +0 -73
  144. package/claude-assets/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
  145. package/claude-assets/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
  146. package/claude-assets/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
  147. package/claude-assets/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
  148. package/claude-assets/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  149. package/claude-assets/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
  150. package/claude-assets/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
  151. package/claude-assets/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
  152. package/claude-assets/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
  153. package/claude-assets/skills/cfn-redis-coordination/heartbeat.sh +0 -126
  154. package/claude-assets/skills/cfn-redis-coordination/init-swarm.sh +0 -148
  155. package/claude-assets/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
  156. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
  157. package/claude-assets/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
  158. package/claude-assets/skills/cfn-redis-coordination/log-event.sh +0 -109
  159. package/claude-assets/skills/cfn-redis-coordination/metrics-export.sh +0 -674
  160. package/claude-assets/skills/cfn-redis-coordination/metrics-schema.json +0 -66
  161. package/claude-assets/skills/cfn-redis-coordination/metrics-storage.md +0 -31
  162. package/claude-assets/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
  163. package/claude-assets/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
  164. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
  165. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
  166. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  167. package/claude-assets/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
  168. package/claude-assets/skills/cfn-redis-coordination/priority_wake.py +0 -134
  169. package/claude-assets/skills/cfn-redis-coordination/query-dlq.sh +0 -162
  170. package/claude-assets/skills/cfn-redis-coordination/query-logs.sh +0 -103
  171. package/claude-assets/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
  172. package/claude-assets/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
  173. package/claude-assets/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
  174. package/claude-assets/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
  175. package/claude-assets/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
  176. package/claude-assets/skills/cfn-redis-coordination/signal.sh +0 -38
  177. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +0 -86
  178. package/claude-assets/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
  179. package/claude-assets/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
  180. package/claude-assets/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
  181. package/claude-assets/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
  182. package/claude-assets/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
  183. package/claude-assets/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
  184. package/claude-assets/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
  185. package/claude-assets/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
  186. package/claude-assets/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
  187. package/claude-assets/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
  188. package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  189. package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  190. package/claude-assets/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
  191. package/claude-assets/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
  192. package/claude-assets/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
  193. package/claude-assets/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
  194. package/claude-assets/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
@@ -1,56 +0,0 @@
1
- #!/bin/bash
2
- # Quorum Percentage Test Case
3
- # Tests percentage-based quorum scenarios
4
-
5
- source "$(dirname "$0")/test-utils.sh"
6
-
7
- # Test Scenario 1: 80% of 10 agents = 8 required, 8/10 complete → SUCCESS
8
- test_percentage_quorum_success() {
9
- local total_agents=10
10
- local quorum_percentage=0.8
11
- local completed_agents=8
12
-
13
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
14
- assert_equals "$result" "SUCCESS" "Quorum not reached when 8/10 agents complete (80% required)"
15
- }
16
-
17
- # Test Scenario 2: 80% of 10 agents = 8 required, 7/10 complete → FAILURE
18
- test_percentage_quorum_failure() {
19
- local total_agents=10
20
- local quorum_percentage=0.8
21
- local completed_agents=7
22
-
23
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
24
- assert_equals "$result" "FAILURE" "Quorum incorrectly reached when only 7/10 agents complete (80% required)"
25
- }
26
-
27
- # Test Scenario 3: 90% of 5 agents = 4.5 → 5 required (round up)
28
- test_percentage_quorum_round_up() {
29
- local total_agents=5
30
- local quorum_percentage=0.9
31
- local completed_agents=5
32
-
33
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
34
- assert_equals "$result" "SUCCESS" "Quorum not reached when all 5/5 agents complete (90% required)"
35
- }
36
-
37
- # Test Scenario 4: 90% of 5 agents = 4.5 → 5 required, 4/5 complete → FAILURE
38
- test_percentage_quorum_insufficient() {
39
- local total_agents=5
40
- local quorum_percentage=0.9
41
- local completed_agents=4
42
-
43
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
44
- assert_equals "$result" "FAILURE" "Quorum incorrectly reached when 4/5 agents complete (90% required)"
45
- }
46
-
47
- # Run the tests
48
- main() {
49
- test_percentage_quorum_success
50
- test_percentage_quorum_failure
51
- test_percentage_quorum_round_up
52
- test_percentage_quorum_insufficient
53
- echo "Percentage Quorum Test Complete"
54
- }
55
-
56
- main
@@ -1,81 +0,0 @@
1
- #!/bin/bash
2
- # Quorum Retry Mechanism Test Case
3
- # Tests retry scenarios for agent completion
4
-
5
- source "$(dirname "$0")/test-utils.sh"
6
-
7
- # Simulated Redis-based retry mechanism
8
- simulate_agent_retry() {
9
- local task_id="$1"
10
- local agent_id="$2"
11
- local max_retries="${3:-3}"
12
- local retry_delay="${4:-5}"
13
-
14
- local attempt=1
15
- local success=false
16
-
17
- while [ $attempt -le "$max_retries" ]; do
18
- # Simulate agent work
19
- if agent_work "$task_id" "$agent_id"; then
20
- success=true
21
- break
22
- fi
23
-
24
- echo "Agent $agent_id - Attempt $attempt failed. Retrying in $retry_delay seconds..."
25
- sleep "$retry_delay"
26
- ((attempt++))
27
- done
28
-
29
- if [ "$success" = true ]; then
30
- echo "SUCCESS"
31
- else
32
- echo "FAILURE"
33
- fi
34
- }
35
-
36
- # Mock agent work function with potential failure
37
- agent_work() {
38
- local task_id="$1"
39
- local agent_id="$2"
40
-
41
- # Simulated 50% chance of failure on first attempt
42
- if [ "$agent_id" == "agent-1" ] && [ -z "$RETRY_COMPLETE" ]; then
43
- RETRY_COMPLETE=1
44
- return 1
45
- fi
46
-
47
- return 0
48
- }
49
-
50
- # Test Scenario: Agent times out on attempt 1, retry succeeds on attempt 2
51
- test_quorum_retry_mechanism() {
52
- local task_id="retry-test-task"
53
- local agent_id="agent-1"
54
-
55
- local result=$(simulate_agent_retry "$task_id" "$agent_id")
56
- assert_equals "$result" "SUCCESS" "Retry mechanism failed to complete agent work"
57
- }
58
-
59
- # Additional retry tests
60
- test_multiple_agent_retries() {
61
- local total_agents=5
62
- local successful_agents=0
63
-
64
- for ((i=1; i<=total_agents; i++)); do
65
- local result=$(simulate_agent_retry "multi-retry-task" "agent-$i")
66
- if [ "$result" == "SUCCESS" ]; then
67
- ((successful_agents++))
68
- fi
69
- done
70
-
71
- assert_greater_than "$successful_agents" 3 "Insufficient agents completed with retry"
72
- }
73
-
74
- # Run the tests
75
- main() {
76
- test_quorum_retry_mechanism
77
- test_multiple_agent_retries
78
- echo "Retry Mechanism Test Complete"
79
- }
80
-
81
- main
@@ -1,57 +0,0 @@
1
- #!/bin/bash
2
- # Master Quorum Validation Test Suite
3
- # Task ID: redis-phase2-1760875940
4
- # Agent ID: tester-2
5
-
6
- set -euo pipefail
7
-
8
- # Source common testing utilities
9
- source "$(dirname "$0")/test-utils.sh"
10
-
11
- # Test Results Tracking
12
- TOTAL_TESTS=4
13
- PASSED_TESTS=0
14
- FAILED_TESTS=0
15
-
16
- # Run Quorum Test Cases
17
- run_test "test-quorum-absolute.sh"
18
- run_test "test-quorum-percentage.sh"
19
- run_test "test-quorum-with-retry.sh"
20
- run_test "test-quorum-fallback.sh"
21
-
22
- # Generate Test Report
23
- generate_test_report
24
-
25
- # Signal Completion to Redis
26
- signal_task_complete() {
27
- local confidence=$(calculate_confidence)
28
- redis-cli lpush "swarm:redis-phase2-1760875940:tester-2:done" "complete"
29
-
30
- # Report to waiting mode
31
- ./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
32
- --task-id redis-phase2-1760875940 \
33
- --agent-id tester-2 \
34
- --confidence "$confidence" \
35
- --iteration 1
36
-
37
- # Enter waiting mode
38
- ./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh enter \
39
- --task-id redis-phase2-1760875940 \
40
- --agent-id tester-2 \
41
- --context "task-2-3-complete"
42
- }
43
-
44
- # Run main test suite
45
- main() {
46
- # Setup any required test environments
47
- setup_test_environment
48
-
49
- # Execute test cases
50
- run_all_tests
51
-
52
- # Signal completion
53
- signal_task_complete
54
- }
55
-
56
- # Execute main function
57
- main
@@ -1,187 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- ##############################################################################
4
- # Test: Shutdown Handling in Orchestrator
5
- # Verifies that orchestrator responds to shutdown signals and cleans up
6
- ##############################################################################
7
-
8
- set -euo pipefail
9
-
10
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
- TEST_TASK_ID="test-shutdown-$(date +%s)"
12
- CLEANUP_NEEDED=1
13
-
14
- # Cleanup function
15
- cleanup() {
16
- if [ $CLEANUP_NEEDED -eq 1 ]; then
17
- echo ""
18
- echo "=== Cleanup ==="
19
- redis-cli DEL "swarm:${TEST_TASK_ID}:shutdown" >/dev/null 2>&1 || true
20
- redis-cli DEL "swarm:${TEST_TASK_ID}:*" >/dev/null 2>&1 || true
21
- echo "Cleanup complete"
22
- fi
23
- }
24
-
25
- trap cleanup EXIT
26
-
27
- echo "=== Test: Shutdown Handling in Orchestrator ==="
28
- echo "Test Task ID: $TEST_TASK_ID"
29
- echo ""
30
-
31
- # Test 1: Start orchestrator in background
32
- echo "Test 1: Starting orchestrator in background..."
33
-
34
- # Create mock agents (we'll send shutdown before they complete)
35
- MOCK_LOOP3="mock-agent-1,mock-agent-2"
36
- MOCK_LOOP2="mock-validator-1"
37
- MOCK_PO="mock-po"
38
-
39
- # Start orchestrator in background with high timeout (so it doesn't fail quickly)
40
- timeout 30 "$SCRIPT_DIR/orchestrate-cfn-loop.sh" \
41
- --task-id "$TEST_TASK_ID" \
42
- --mode standard \
43
- --loop3-agents "$MOCK_LOOP3" \
44
- --loop2-agents "$MOCK_LOOP2" \
45
- --product-owner "$MOCK_PO" \
46
- --timeout 3600 \
47
- --max-iterations 5 > /tmp/orchestrator-output-${TEST_TASK_ID}.log 2>&1 &
48
-
49
- ORCHESTRATOR_PID=$!
50
- echo "Orchestrator started (PID: $ORCHESTRATOR_PID)"
51
-
52
- # Wait for orchestrator to initialize and start shutdown monitor
53
- sleep 2
54
-
55
- # Verify orchestrator is running
56
- if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
57
- echo "❌ FAIL: Orchestrator process died prematurely"
58
- cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
59
- exit 1
60
- fi
61
-
62
- echo "✅ PASS: Orchestrator is running"
63
- echo ""
64
-
65
- # Test 2: Send shutdown signal via Redis
66
- echo "Test 2: Sending shutdown signal via Redis..."
67
-
68
- SHUTDOWN_PAYLOAD=$(jq -n --arg reason "test_shutdown" '{reason: $reason}')
69
- echo "$SHUTDOWN_PAYLOAD" | redis-cli -x LPUSH "swarm:${TEST_TASK_ID}:shutdown" >/dev/null
70
-
71
- echo "Shutdown signal sent: $SHUTDOWN_PAYLOAD"
72
- echo "Waiting for orchestrator to shutdown..."
73
-
74
- # Wait up to 5 seconds for graceful shutdown
75
- for i in {1..10}; do
76
- if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
77
- echo "✅ PASS: Orchestrator shutdown gracefully"
78
- break
79
- fi
80
- sleep 0.5
81
- done
82
-
83
- # Verify orchestrator has stopped
84
- if kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
85
- echo "❌ FAIL: Orchestrator did not shutdown within 5 seconds"
86
- kill -9 $ORCHESTRATOR_PID 2>/dev/null || true
87
- exit 1
88
- fi
89
-
90
- echo ""
91
-
92
- # Test 3: Verify cleanup happened
93
- echo "Test 3: Verifying cleanup..."
94
-
95
- # Check orchestrator output for shutdown messages
96
- if grep -q "Orchestrator shutting down gracefully" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
97
- echo "✅ PASS: Found shutdown message in output"
98
- else
99
- echo "❌ FAIL: Shutdown message not found in output"
100
- echo "Output:"
101
- cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
102
- exit 1
103
- fi
104
-
105
- if grep -q "Shutdown complete" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
106
- echo "✅ PASS: Found completion message in output"
107
- else
108
- echo "⚠️ WARNING: Completion message not found (non-critical)"
109
- fi
110
-
111
- # Check if swarm was marked as cancelled (may not be present if init-swarm never ran)
112
- if grep -q "Marking swarm as cancelled" /tmp/orchestrator-output-${TEST_TASK_ID}.log || grep -q "Failed to mark swarm as cancelled" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
113
- echo "✅ PASS: Attempted to mark swarm as cancelled"
114
- else
115
- echo "⚠️ INFO: Swarm cancellation not attempted (may not have initialized yet)"
116
- fi
117
-
118
- echo ""
119
-
120
- # Test 4: Send SIGTERM signal
121
- echo "Test 4: Testing SIGTERM signal handling..."
122
-
123
- # Start another orchestrator instance
124
- timeout 30 "$SCRIPT_DIR/orchestrate-cfn-loop.sh" \
125
- --task-id "${TEST_TASK_ID}-sigterm" \
126
- --mode standard \
127
- --loop3-agents "$MOCK_LOOP3" \
128
- --loop2-agents "$MOCK_LOOP2" \
129
- --product-owner "$MOCK_PO" \
130
- --timeout 3600 \
131
- --max-iterations 5 > /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log 2>&1 &
132
-
133
- ORCHESTRATOR_PID_2=$!
134
- echo "Second orchestrator started (PID: $ORCHESTRATOR_PID_2)"
135
-
136
- # Wait for initialization
137
- sleep 2
138
-
139
- # Send SIGTERM
140
- echo "Sending SIGTERM to orchestrator..."
141
- kill -TERM $ORCHESTRATOR_PID_2 2>/dev/null || true
142
-
143
- # Wait for shutdown
144
- for i in {1..10}; do
145
- if ! kill -0 $ORCHESTRATOR_PID_2 2>/dev/null; then
146
- echo "✅ PASS: Orchestrator responded to SIGTERM"
147
- break
148
- fi
149
- sleep 0.5
150
- done
151
-
152
- # Verify shutdown
153
- if kill -0 $ORCHESTRATOR_PID_2 2>/dev/null; then
154
- echo "❌ FAIL: Orchestrator did not respond to SIGTERM within 5 seconds"
155
- kill -9 $ORCHESTRATOR_PID_2 2>/dev/null || true
156
- exit 1
157
- fi
158
-
159
- # Check for SIGTERM handling in output
160
- if grep -q "SIGTERM_received" /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log; then
161
- echo "✅ PASS: SIGTERM signal was properly caught and handled"
162
- else
163
- echo "⚠️ WARNING: SIGTERM handling message not clear in output"
164
- fi
165
-
166
- echo ""
167
- echo "=== All Tests Passed ==="
168
- echo ""
169
- echo "Orchestrator output (Test 1 - Redis shutdown):"
170
- echo "----------------------------------------------"
171
- cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
172
- echo ""
173
- echo "Orchestrator output (Test 2 - SIGTERM):"
174
- echo "----------------------------------------"
175
- cat /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log
176
-
177
- # Cleanup test files
178
- rm -f /tmp/orchestrator-output-${TEST_TASK_ID}.log
179
- rm -f /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log
180
- redis-cli DEL "swarm:${TEST_TASK_ID}-sigterm:shutdown" >/dev/null 2>&1 || true
181
- redis-cli DEL "swarm:${TEST_TASK_ID}-sigterm:*" >/dev/null 2>&1 || true
182
-
183
- CLEANUP_NEEDED=0 # Prevent duplicate cleanup
184
-
185
- echo ""
186
- echo "✅ All shutdown handling tests passed successfully"
187
- exit 0
@@ -1,160 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # Test shutdown handling for waiting agents
4
- #
5
-
6
- set -euo pipefail
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- WAITING_MODE_SCRIPT="$SCRIPT_DIR/invoke-waiting-mode.sh"
10
-
11
- TASK_ID="test-shutdown-$(date +%s)"
12
- AGENT_ID="test-agent-1"
13
-
14
- echo "=========================================="
15
- echo "Testing Shutdown Handling"
16
- echo "=========================================="
17
- echo ""
18
- echo "Task ID: $TASK_ID"
19
- echo "Agent ID: $AGENT_ID"
20
- echo ""
21
-
22
- # Clean up Redis keys before test
23
- echo "Cleaning up Redis keys..."
24
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
25
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
26
- redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
27
-
28
- echo ""
29
- echo "Test 1: Agent enters waiting mode in background"
30
- echo "------------------------------------------------"
31
-
32
- # Start agent in background
33
- {
34
- $WAITING_MODE_SCRIPT enter \
35
- --task-id "$TASK_ID" \
36
- --agent-id "$AGENT_ID" \
37
- --context "test-shutdown"
38
-
39
- EXIT_CODE=$?
40
- echo "Agent exited with code: $EXIT_CODE"
41
-
42
- if [ $EXIT_CODE -eq 130 ]; then
43
- echo "✅ Agent gracefully shutdown with SIGINT code (130)"
44
- else
45
- echo "❌ Expected exit code 130, got $EXIT_CODE"
46
- exit 1
47
- fi
48
- } &
49
-
50
- AGENT_PID=$!
51
- echo "Agent started (PID: $AGENT_PID)"
52
-
53
- # Wait for agent to enter waiting mode
54
- sleep 2
55
-
56
- # Check if agent published ready status
57
- READY_STATUS=$(redis-cli LPOP "swarm:${TASK_ID}:${AGENT_ID}:ready")
58
- if [ -n "$READY_STATUS" ] && [ "$READY_STATUS" != "(nil)" ]; then
59
- echo "✅ Agent published ready status:"
60
- echo "$READY_STATUS" | jq '.'
61
- else
62
- echo "❌ Agent did not publish ready status"
63
- kill $AGENT_PID 2>/dev/null || true
64
- exit 1
65
- fi
66
-
67
- echo ""
68
- echo "Test 2: Send shutdown signal"
69
- echo "-----------------------------"
70
-
71
- $WAITING_MODE_SCRIPT shutdown \
72
- --task-id "$TASK_ID" \
73
- --reason "test_shutdown"
74
-
75
- echo ""
76
- echo "Test 3: Verify agent receives shutdown and exits"
77
- echo "------------------------------------------------"
78
-
79
- # Wait for agent to process shutdown (max 2 seconds for poll cycle)
80
- sleep 3
81
-
82
- # Check if agent process is still running
83
- if ps -p $AGENT_PID >/dev/null 2>&1; then
84
- echo "❌ Agent still running after shutdown signal"
85
- kill $AGENT_PID 2>/dev/null || true
86
- exit 1
87
- else
88
- echo "✅ Agent terminated after shutdown signal"
89
- fi
90
-
91
- # Wait for background process to finish and capture exit code
92
- wait $AGENT_PID 2>/dev/null || true
93
-
94
- echo ""
95
- echo "Test 4: Verify shutdown with wake signal priority"
96
- echo "-------------------------------------------------"
97
-
98
- # Clean up
99
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
100
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
101
- redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
102
-
103
- # Start agent in background
104
- {
105
- $WAITING_MODE_SCRIPT enter \
106
- --task-id "$TASK_ID" \
107
- --agent-id "$AGENT_ID" \
108
- --context "test-priority"
109
-
110
- EXIT_CODE=$?
111
- if [ $EXIT_CODE -eq 130 ]; then
112
- echo "✅ Agent prioritized shutdown over wake signal"
113
- else
114
- echo "⚠️ Agent exited with code $EXIT_CODE (may have received wake signal first)"
115
- fi
116
- } &
117
-
118
- AGENT_PID=$!
119
-
120
- # Wait for agent to enter waiting mode
121
- sleep 2
122
-
123
- # Send both wake and shutdown signals (shutdown should take priority)
124
- $WAITING_MODE_SCRIPT wake \
125
- --task-id "$TASK_ID" \
126
- --agent-id "$AGENT_ID" \
127
- --reason "test_wake" \
128
- --priority 50 &
129
-
130
- $WAITING_MODE_SCRIPT shutdown \
131
- --task-id "$TASK_ID" \
132
- --reason "test_shutdown_priority" &
133
-
134
- # Wait for signals to be sent
135
- sleep 1
136
-
137
- # Wait for agent to process
138
- sleep 3
139
-
140
- # Check if agent terminated
141
- if ps -p $AGENT_PID >/dev/null 2>&1; then
142
- echo "⚠️ Agent still running (may have processed wake signal)"
143
- kill $AGENT_PID 2>/dev/null || true
144
- else
145
- echo "✅ Agent terminated (shutdown had priority)"
146
- fi
147
-
148
- wait $AGENT_PID 2>/dev/null || true
149
-
150
- echo ""
151
- echo "=========================================="
152
- echo "✅ All shutdown handling tests passed!"
153
- echo "=========================================="
154
-
155
- # Cleanup
156
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
157
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
158
- redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
159
-
160
- exit 0
@@ -1,97 +0,0 @@
1
- #!/bin/bash
2
- # Utility functions for quorum testing
3
-
4
- # Check absolute quorum
5
- check_quorum() {
6
- local total_agents="$1"
7
- local quorum="$2"
8
- local completed_agents="$3"
9
-
10
- if [ "$completed_agents" -ge "$quorum" ]; then
11
- echo "SUCCESS"
12
- else
13
- echo "FAILURE"
14
- fi
15
- }
16
-
17
- # Check percentage-based quorum
18
- check_percentage_quorum() {
19
- local total_agents="$1"
20
- local quorum_percentage="$2"
21
- local completed_agents="$3"
22
-
23
- # Calculate the minimum number of agents required (round up)
24
- local required_agents=$(echo "scale=0; ceil($total_agents * $quorum_percentage)" | bc)
25
-
26
- if [ "$completed_agents" -ge "$required_agents" ]; then
27
- echo "SUCCESS"
28
- else
29
- echo "FAILURE"
30
- fi
31
- }
32
-
33
- # Graceful degradation strategy
34
- simulate_graceful_degradation() {
35
- local total_agents="$1"
36
- local initial_quorum="$2"
37
- local max_failures="$3"
38
-
39
- # Dynamically adjust quorum based on failures
40
- local current_quorum="$initial_quorum"
41
- local adjusted_agents=$((total_agents - max_failures))
42
- local adjusted_quorum_threshold=$(echo "scale=2; $current_quorum * 0.8" | bc)
43
-
44
- if (( $(echo "$adjusted_quorum_threshold <= 0.65" | bc -l) )); then
45
- echo "HALT" # Prevent degradation below minimum viable quorum
46
- else
47
- echo "$(check_percentage_quorum "$adjusted_agents" "$adjusted_quorum_threshold" "$adjusted_agents")"
48
- fi
49
- }
50
-
51
- # Assertion functions
52
- assert_equals() {
53
- local actual="$1"
54
- local expected="$2"
55
- local message="${3:-Assertion failed}"
56
-
57
- if [ "$actual" != "$expected" ]; then
58
- echo "FAIL: $message (Expected: $expected, Got: $actual)"
59
- exit 1
60
- fi
61
- }
62
-
63
- assert_greater_than() {
64
- local actual="$1"
65
- local expected="$2"
66
- local message="${3:-Assertion failed}"
67
-
68
- if [ "$actual" -le "$expected" ]; then
69
- echo "FAIL: $message (Expected > $expected, Got: $actual)"
70
- exit 1
71
- fi
72
- }
73
-
74
- assert_not_empty() {
75
- local value="$1"
76
- local message="${2:-Value is empty}"
77
-
78
- if [ -z "$value" ]; then
79
- echo "FAIL: $message"
80
- exit 1
81
- fi
82
- }
83
-
84
- # Error handling and logging
85
- log_error() {
86
- local message="$1"
87
- echo "[ERROR] $message" >&2
88
- }
89
-
90
- # Cleanup function
91
- cleanup() {
92
- # Remove any temporary files or reset test environments
93
- echo "Cleaning up test environment..."
94
- }
95
-
96
- # Trap to ensure cleanup happens even if script fails
97
- trap cleanup EXIT