claude-flow-novice 2.14.2 → 2.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/dist/cli/agent-prompt-builder.js +25 -0
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/package.json +1 -1
- package/scripts/init-project.js +1 -1
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +0 -260
- package/.claude/skills/cfn-redis-coordination/README.md +0 -65
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/.claude/skills/cfn-redis-coordination/SKILL.md +0 -720
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
- package/.claude/skills/cfn-redis-coordination/examples/README.md +0 -73
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +0 -126
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +0 -148
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
- package/.claude/skills/cfn-redis-coordination/log-event.sh +0 -109
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +0 -674
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +0 -66
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +0 -31
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +0 -134
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +0 -162
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +0 -103
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
- package/.claude/skills/cfn-redis-coordination/signal.sh +0 -38
- package/.claude/skills/cfn-redis-coordination/store-context.sh +0 -86
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
- package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
- package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/claude-assets/skills/cfn-redis-coordination/LOGGING.md +0 -260
- package/claude-assets/skills/cfn-redis-coordination/README.md +0 -65
- package/claude-assets/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
- package/claude-assets/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/claude-assets/skills/cfn-redis-coordination/SKILL.md +0 -720
- package/claude-assets/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
- package/claude-assets/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
- package/claude-assets/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
- package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
- package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
- package/claude-assets/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
- package/claude-assets/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
- package/claude-assets/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
- package/claude-assets/skills/cfn-redis-coordination/examples/README.md +0 -73
- package/claude-assets/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
- package/claude-assets/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/claude-assets/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
- package/claude-assets/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
- package/claude-assets/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/claude-assets/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
- package/claude-assets/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
- package/claude-assets/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
- package/claude-assets/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
- package/claude-assets/skills/cfn-redis-coordination/heartbeat.sh +0 -126
- package/claude-assets/skills/cfn-redis-coordination/init-swarm.sh +0 -148
- package/claude-assets/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
- package/claude-assets/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
- package/claude-assets/skills/cfn-redis-coordination/log-event.sh +0 -109
- package/claude-assets/skills/cfn-redis-coordination/metrics-export.sh +0 -674
- package/claude-assets/skills/cfn-redis-coordination/metrics-schema.json +0 -66
- package/claude-assets/skills/cfn-redis-coordination/metrics-storage.md +0 -31
- package/claude-assets/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
- package/claude-assets/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/claude-assets/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
- package/claude-assets/skills/cfn-redis-coordination/priority_wake.py +0 -134
- package/claude-assets/skills/cfn-redis-coordination/query-dlq.sh +0 -162
- package/claude-assets/skills/cfn-redis-coordination/query-logs.sh +0 -103
- package/claude-assets/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
- package/claude-assets/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
- package/claude-assets/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
- package/claude-assets/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
- package/claude-assets/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
- package/claude-assets/skills/cfn-redis-coordination/signal.sh +0 -38
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +0 -86
- package/claude-assets/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
- package/claude-assets/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
- package/claude-assets/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
- package/claude-assets/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
- package/claude-assets/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/claude-assets/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
- package/claude-assets/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
- package/claude-assets/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/claude-assets/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
- package/claude-assets/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
- package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/claude-assets/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
- package/claude-assets/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
- package/claude-assets/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
- package/claude-assets/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
- package/claude-assets/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
##############################################################################
|
|
4
|
-
# Test Dead Letter Queue (DLQ) Functionality
|
|
5
|
-
# Validates DLQ write and query operations with simulated failures
|
|
6
|
-
##############################################################################
|
|
7
|
-
|
|
8
|
-
set -euo pipefail
|
|
9
|
-
|
|
10
|
-
TASK_ID="test-dlq-$(date +%s)"
|
|
11
|
-
TEST_AGENT="test-agent-1"
|
|
12
|
-
|
|
13
|
-
echo "=== DLQ Functionality Test ==="
|
|
14
|
-
echo "Task ID: $TASK_ID"
|
|
15
|
-
echo "Test Agent: $TEST_AGENT"
|
|
16
|
-
echo ""
|
|
17
|
-
|
|
18
|
-
##############################################################################
|
|
19
|
-
# Test 1: Simulate DLQ Write
|
|
20
|
-
##############################################################################
|
|
21
|
-
echo "[Test 1] Simulating DLQ write for failed agent..."
|
|
22
|
-
|
|
23
|
-
DLQ_KEY="swarm:${TASK_ID}:dlq:${TEST_AGENT}"
|
|
24
|
-
DLQ_ENTRY=$(jq -n \
|
|
25
|
-
--arg reason "timeout_after_retries" \
|
|
26
|
-
--arg retries "3" \
|
|
27
|
-
--arg ts "$(date +%s)" \
|
|
28
|
-
'{reason: $reason, retry_count: ($retries | tonumber), timestamp: ($ts | tonumber)}')
|
|
29
|
-
|
|
30
|
-
echo "$DLQ_ENTRY" | redis-cli -x LPUSH "$DLQ_KEY" >/dev/null
|
|
31
|
-
redis-cli EXPIRE "$DLQ_KEY" 604800 >/dev/null # 7 days TTL
|
|
32
|
-
|
|
33
|
-
echo " ✓ DLQ entry written"
|
|
34
|
-
echo ""
|
|
35
|
-
|
|
36
|
-
##############################################################################
|
|
37
|
-
# Test 2: Query Specific Agent DLQ
|
|
38
|
-
##############################################################################
|
|
39
|
-
echo "[Test 2] Querying DLQ for specific agent..."
|
|
40
|
-
./.claude/skills/cfn-redis-coordination/query-dlq.sh \
|
|
41
|
-
--task-id "$TASK_ID" \
|
|
42
|
-
--agent-id "$TEST_AGENT"
|
|
43
|
-
echo ""
|
|
44
|
-
|
|
45
|
-
##############################################################################
|
|
46
|
-
# Test 3: Add Multiple Failures
|
|
47
|
-
##############################################################################
|
|
48
|
-
echo "[Test 3] Adding multiple failure entries..."
|
|
49
|
-
|
|
50
|
-
TEST_AGENT_2="test-agent-2"
|
|
51
|
-
DLQ_KEY_2="swarm:${TASK_ID}:dlq:${TEST_AGENT_2}"
|
|
52
|
-
|
|
53
|
-
for i in {1..3}; do
|
|
54
|
-
DLQ_ENTRY=$(jq -n \
|
|
55
|
-
--arg reason "timeout_after_retries" \
|
|
56
|
-
--arg retries "$i" \
|
|
57
|
-
--arg ts "$(date +%s)" \
|
|
58
|
-
'{reason: $reason, retry_count: ($retries | tonumber), timestamp: ($ts | tonumber)}')
|
|
59
|
-
|
|
60
|
-
echo "$DLQ_ENTRY" | redis-cli -x LPUSH "$DLQ_KEY_2" >/dev/null
|
|
61
|
-
sleep 1
|
|
62
|
-
done
|
|
63
|
-
|
|
64
|
-
redis-cli EXPIRE "$DLQ_KEY_2" 604800 >/dev/null
|
|
65
|
-
|
|
66
|
-
echo " ✓ Added 3 failure entries for $TEST_AGENT_2"
|
|
67
|
-
echo ""
|
|
68
|
-
|
|
69
|
-
##############################################################################
|
|
70
|
-
# Test 4: Query All DLQ Entries for Task
|
|
71
|
-
##############################################################################
|
|
72
|
-
echo "[Test 4] Querying all DLQ entries for task..."
|
|
73
|
-
./.claude/skills/cfn-redis-coordination/query-dlq.sh --task-id "$TASK_ID"
|
|
74
|
-
echo ""
|
|
75
|
-
|
|
76
|
-
##############################################################################
|
|
77
|
-
# Test 5: Verify TTL
|
|
78
|
-
##############################################################################
|
|
79
|
-
echo "[Test 5] Verifying TTL..."
|
|
80
|
-
TTL=$(redis-cli TTL "$DLQ_KEY")
|
|
81
|
-
EXPECTED_TTL=604800 # 7 days
|
|
82
|
-
|
|
83
|
-
if [ "$TTL" -gt 0 ] && [ "$TTL" -le "$EXPECTED_TTL" ]; then
|
|
84
|
-
echo " ✓ TTL correctly set: ${TTL}s (~7 days)"
|
|
85
|
-
else
|
|
86
|
-
echo " ✗ TTL verification failed: ${TTL}s"
|
|
87
|
-
exit 1
|
|
88
|
-
fi
|
|
89
|
-
echo ""
|
|
90
|
-
|
|
91
|
-
##############################################################################
|
|
92
|
-
# Test 6: Verify Entry Count
|
|
93
|
-
##############################################################################
|
|
94
|
-
echo "[Test 6] Verifying entry counts..."
|
|
95
|
-
|
|
96
|
-
COUNT_1=$(redis-cli LLEN "$DLQ_KEY")
|
|
97
|
-
COUNT_2=$(redis-cli LLEN "$DLQ_KEY_2")
|
|
98
|
-
|
|
99
|
-
echo " Agent 1 entries: $COUNT_1 (expected: 1)"
|
|
100
|
-
echo " Agent 2 entries: $COUNT_2 (expected: 3)"
|
|
101
|
-
|
|
102
|
-
if [ "$COUNT_1" = "1" ] && [ "$COUNT_2" = "3" ]; then
|
|
103
|
-
echo " ✓ Entry counts correct"
|
|
104
|
-
else
|
|
105
|
-
echo " ✗ Entry count mismatch"
|
|
106
|
-
exit 1
|
|
107
|
-
fi
|
|
108
|
-
echo ""
|
|
109
|
-
|
|
110
|
-
##############################################################################
|
|
111
|
-
# Cleanup
|
|
112
|
-
##############################################################################
|
|
113
|
-
echo "[Cleanup] Removing test DLQ entries..."
|
|
114
|
-
redis-cli DEL "$DLQ_KEY" "$DLQ_KEY_2" >/dev/null
|
|
115
|
-
echo " ✓ Cleanup complete"
|
|
116
|
-
echo ""
|
|
117
|
-
|
|
118
|
-
##############################################################################
|
|
119
|
-
# Summary
|
|
120
|
-
##############################################################################
|
|
121
|
-
echo "=== Test Summary ==="
|
|
122
|
-
echo "✅ All DLQ tests passed!"
|
|
123
|
-
echo ""
|
|
124
|
-
echo "Validated:"
|
|
125
|
-
echo " - DLQ write functionality"
|
|
126
|
-
echo " - Single agent query"
|
|
127
|
-
echo " - Multi-agent query"
|
|
128
|
-
echo " - TTL expiration (7 days)"
|
|
129
|
-
echo " - Entry counting"
|
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# Test Script: Iteration Feedback Mechanism
|
|
4
|
-
#
|
|
5
|
-
# Validates that:
|
|
6
|
-
# 1. Validators can report feedback with confidence scores
|
|
7
|
-
# 2. Orchestrator collects and aggregates feedback
|
|
8
|
-
# 3. Feedback is passed to Loop 3 agents via wake signal
|
|
9
|
-
# 4. Feedback is stored in Redis with TTL
|
|
10
|
-
# 5. Agents can read feedback for iteration N
|
|
11
|
-
|
|
12
|
-
set -euo pipefail
|
|
13
|
-
|
|
14
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
15
|
-
TASK_ID="test-feedback-$(date +%s)"
|
|
16
|
-
|
|
17
|
-
echo "=========================================="
|
|
18
|
-
echo "Iteration Feedback Mechanism Test"
|
|
19
|
-
echo "=========================================="
|
|
20
|
-
echo "Task ID: $TASK_ID"
|
|
21
|
-
echo ""
|
|
22
|
-
|
|
23
|
-
# Cleanup function
|
|
24
|
-
cleanup() {
|
|
25
|
-
echo ""
|
|
26
|
-
echo "Cleaning up Redis keys..."
|
|
27
|
-
redis-cli --scan --pattern "swarm:${TASK_ID}:*" | xargs -r redis-cli del >/dev/null 2>&1 || true
|
|
28
|
-
echo "✅ Cleanup complete"
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
# Register cleanup on exit
|
|
32
|
-
trap cleanup EXIT
|
|
33
|
-
|
|
34
|
-
# Test 1: Validators report confidence with feedback
|
|
35
|
-
echo "=== Test 1: Validators Report Feedback ==="
|
|
36
|
-
echo ""
|
|
37
|
-
|
|
38
|
-
VALIDATOR_1="reviewer-1"
|
|
39
|
-
VALIDATOR_2="tester-1"
|
|
40
|
-
VALIDATOR_3="security-1"
|
|
41
|
-
|
|
42
|
-
# Validator 1: Low confidence with specific feedback
|
|
43
|
-
echo "[$VALIDATOR_1] Reporting confidence 0.65 with 2 feedback items..."
|
|
44
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh report \
|
|
45
|
-
--task-id "$TASK_ID" \
|
|
46
|
-
--agent-id "$VALIDATOR_1" \
|
|
47
|
-
--confidence 0.65 \
|
|
48
|
-
--iteration 1 \
|
|
49
|
-
--feedback "Add error handling for null inputs,Improve documentation for API endpoints"
|
|
50
|
-
|
|
51
|
-
echo ""
|
|
52
|
-
|
|
53
|
-
# Validator 2: Medium confidence with 3 feedback items
|
|
54
|
-
echo "[$VALIDATOR_2] Reporting confidence 0.72 with 3 feedback items..."
|
|
55
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh report \
|
|
56
|
-
--task-id "$TASK_ID" \
|
|
57
|
-
--agent-id "$VALIDATOR_2" \
|
|
58
|
-
--confidence 0.72 \
|
|
59
|
-
--iteration 1 \
|
|
60
|
-
--feedback "Increase test coverage to 80%,Add edge case tests for empty arrays,Fix flaky timeout test"
|
|
61
|
-
|
|
62
|
-
echo ""
|
|
63
|
-
|
|
64
|
-
# Validator 3: Low confidence with security feedback
|
|
65
|
-
echo "[$VALIDATOR_3] Reporting confidence 0.60 with 2 feedback items..."
|
|
66
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh report \
|
|
67
|
-
--task-id "$TASK_ID" \
|
|
68
|
-
--agent-id "$VALIDATOR_3" \
|
|
69
|
-
--confidence 0.60 \
|
|
70
|
-
--iteration 1 \
|
|
71
|
-
--feedback "Fix SQL injection vulnerability in query builder,Add rate limiting to API endpoints"
|
|
72
|
-
|
|
73
|
-
echo ""
|
|
74
|
-
|
|
75
|
-
# Test 2: Collect feedback from validators
|
|
76
|
-
echo "=== Test 2: Orchestrator Collects Feedback ==="
|
|
77
|
-
echo ""
|
|
78
|
-
|
|
79
|
-
COLLECT_OUTPUT=$($SCRIPT_DIR/invoke-waiting-mode.sh collect \
|
|
80
|
-
--task-id "$TASK_ID" \
|
|
81
|
-
--agent-ids "$VALIDATOR_1,$VALIDATOR_2,$VALIDATOR_3")
|
|
82
|
-
|
|
83
|
-
echo "$COLLECT_OUTPUT"
|
|
84
|
-
echo ""
|
|
85
|
-
|
|
86
|
-
# Extract consensus and feedback
|
|
87
|
-
CONSENSUS=$(echo "$COLLECT_OUTPUT" | tail -1)
|
|
88
|
-
echo "Calculated Consensus: $CONSENSUS"
|
|
89
|
-
|
|
90
|
-
# Verify feedback aggregation
|
|
91
|
-
if echo "$COLLECT_OUTPUT" | grep -q "Aggregated Feedback"; then
|
|
92
|
-
echo "✅ Feedback aggregated successfully"
|
|
93
|
-
FEEDBACK_COUNT=$(echo "$COLLECT_OUTPUT" | grep -c '^\s*-' || echo "0")
|
|
94
|
-
echo " Total feedback items: $FEEDBACK_COUNT"
|
|
95
|
-
else
|
|
96
|
-
echo "❌ No aggregated feedback found"
|
|
97
|
-
exit 1
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
echo ""
|
|
101
|
-
|
|
102
|
-
# Test 3: Wake Loop 3 agent with validator feedback
|
|
103
|
-
echo "=== Test 3: Wake Loop 3 Agent with Feedback ==="
|
|
104
|
-
echo ""
|
|
105
|
-
|
|
106
|
-
LOOP3_AGENT="backend-dev"
|
|
107
|
-
|
|
108
|
-
# Extract aggregated feedback for passing to Loop 3
|
|
109
|
-
LOOP2_FEEDBACK=$(echo "$COLLECT_OUTPUT" | sed -n '/Aggregated Feedback/,/Consensus:/p' | grep '^\s*-' | sed 's/^\s*-\s*//' | paste -sd ',' -)
|
|
110
|
-
|
|
111
|
-
# Build full feedback message
|
|
112
|
-
FULL_FEEDBACK="Improve consensus from $CONSENSUS to >=0.90,$LOOP2_FEEDBACK"
|
|
113
|
-
|
|
114
|
-
echo "Waking $LOOP3_AGENT with comprehensive feedback..."
|
|
115
|
-
echo "Feedback items: $(echo "$FULL_FEEDBACK" | tr ',' '\n' | wc -l)"
|
|
116
|
-
echo ""
|
|
117
|
-
|
|
118
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh wake \
|
|
119
|
-
--task-id "$TASK_ID" \
|
|
120
|
-
--agent-id "$LOOP3_AGENT" \
|
|
121
|
-
--reason "cfn_loop_iteration" \
|
|
122
|
-
--iteration 2 \
|
|
123
|
-
--priority 30 \
|
|
124
|
-
--feedback "$FULL_FEEDBACK"
|
|
125
|
-
|
|
126
|
-
echo ""
|
|
127
|
-
|
|
128
|
-
# Test 4: Verify feedback stored in Redis
|
|
129
|
-
echo "=== Test 4: Verify Feedback Storage ==="
|
|
130
|
-
echo ""
|
|
131
|
-
|
|
132
|
-
FEEDBACK_KEY="swarm:${TASK_ID}:${LOOP3_AGENT}:feedback:iteration-2"
|
|
133
|
-
echo "Checking Redis key: $FEEDBACK_KEY"
|
|
134
|
-
|
|
135
|
-
STORED_FEEDBACK=$(redis-cli get "$FEEDBACK_KEY")
|
|
136
|
-
|
|
137
|
-
if [ -n "$STORED_FEEDBACK" ] && [ "$STORED_FEEDBACK" != "(nil)" ]; then
|
|
138
|
-
echo "✅ Feedback stored successfully"
|
|
139
|
-
echo ""
|
|
140
|
-
echo "Stored feedback (JSON array):"
|
|
141
|
-
echo "$STORED_FEEDBACK" | jq '.'
|
|
142
|
-
echo ""
|
|
143
|
-
|
|
144
|
-
# Verify TTL
|
|
145
|
-
TTL=$(redis-cli ttl "$FEEDBACK_KEY")
|
|
146
|
-
echo "TTL: $TTL seconds ($(echo "scale=1; $TTL / 3600" | bc) hours)"
|
|
147
|
-
|
|
148
|
-
if [ "$TTL" -gt 0 ] && [ "$TTL" -le 86400 ]; then
|
|
149
|
-
echo "✅ TTL is correct (≤24 hours)"
|
|
150
|
-
else
|
|
151
|
-
echo "❌ TTL is incorrect: $TTL"
|
|
152
|
-
exit 1
|
|
153
|
-
fi
|
|
154
|
-
else
|
|
155
|
-
echo "❌ Feedback not found in Redis"
|
|
156
|
-
exit 1
|
|
157
|
-
fi
|
|
158
|
-
|
|
159
|
-
echo ""
|
|
160
|
-
|
|
161
|
-
# Test 5: Agent reads feedback
|
|
162
|
-
echo "=== Test 5: Agent Reads Feedback ==="
|
|
163
|
-
echo ""
|
|
164
|
-
|
|
165
|
-
echo "Simulating agent reading feedback from Redis..."
|
|
166
|
-
AGENT_FEEDBACK=$(redis-cli get "$FEEDBACK_KEY")
|
|
167
|
-
|
|
168
|
-
if [ -n "$AGENT_FEEDBACK" ] && [ "$AGENT_FEEDBACK" != "(nil)" ]; then
|
|
169
|
-
echo "✅ Agent successfully read feedback"
|
|
170
|
-
echo ""
|
|
171
|
-
echo "Feedback items available to agent:"
|
|
172
|
-
echo "$AGENT_FEEDBACK" | jq -r '.[]' | nl -w2 -s'. '
|
|
173
|
-
echo ""
|
|
174
|
-
|
|
175
|
-
ITEM_COUNT=$(echo "$AGENT_FEEDBACK" | jq '. | length')
|
|
176
|
-
echo "Total actionable items: $ITEM_COUNT"
|
|
177
|
-
else
|
|
178
|
-
echo "❌ Agent failed to read feedback"
|
|
179
|
-
exit 1
|
|
180
|
-
fi
|
|
181
|
-
|
|
182
|
-
echo ""
|
|
183
|
-
|
|
184
|
-
# Test 6: Wake queue contains feedback
|
|
185
|
-
echo "=== Test 6: Verify Wake Queue Feedback ==="
|
|
186
|
-
echo ""
|
|
187
|
-
|
|
188
|
-
WAKE_QUEUE="swarm:${TASK_ID}:${LOOP3_AGENT}:wake-queue"
|
|
189
|
-
echo "Checking wake queue: $WAKE_QUEUE"
|
|
190
|
-
|
|
191
|
-
# Pop wake message from queue
|
|
192
|
-
WAKE_MSG=$(redis-cli ZPOPMIN "$WAKE_QUEUE" 1 | sed -n '1p')
|
|
193
|
-
|
|
194
|
-
if [ -n "$WAKE_MSG" ] && [ "$WAKE_MSG" != "(nil)" ]; then
|
|
195
|
-
echo "✅ Wake message found in queue"
|
|
196
|
-
echo ""
|
|
197
|
-
echo "Wake message contents:"
|
|
198
|
-
echo "$WAKE_MSG" | jq '.'
|
|
199
|
-
echo ""
|
|
200
|
-
|
|
201
|
-
# Verify feedback in wake message
|
|
202
|
-
WAKE_FEEDBACK=$(echo "$WAKE_MSG" | jq -r '.feedback[]' 2>/dev/null | head -3)
|
|
203
|
-
if [ -n "$WAKE_FEEDBACK" ]; then
|
|
204
|
-
echo "✅ Feedback included in wake message"
|
|
205
|
-
echo ""
|
|
206
|
-
echo "First 3 feedback items:"
|
|
207
|
-
echo "$WAKE_MSG" | jq -r '.feedback[]' | head -3 | nl -w2 -s'. '
|
|
208
|
-
else
|
|
209
|
-
echo "❌ No feedback in wake message"
|
|
210
|
-
exit 1
|
|
211
|
-
fi
|
|
212
|
-
else
|
|
213
|
-
echo "❌ No wake message in queue"
|
|
214
|
-
exit 1
|
|
215
|
-
fi
|
|
216
|
-
|
|
217
|
-
echo ""
|
|
218
|
-
|
|
219
|
-
# Test 7: Multiple iterations
|
|
220
|
-
echo "=== Test 7: Multiple Iteration Feedback ==="
|
|
221
|
-
echo ""
|
|
222
|
-
|
|
223
|
-
echo "Simulating iteration 3 feedback..."
|
|
224
|
-
ITERATION_3_FEEDBACK="Address remaining issues from iteration 2,Add integration tests,Update changelog"
|
|
225
|
-
|
|
226
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh wake \
|
|
227
|
-
--task-id "$TASK_ID" \
|
|
228
|
-
--agent-id "$LOOP3_AGENT" \
|
|
229
|
-
--reason "cfn_loop_iteration" \
|
|
230
|
-
--iteration 3 \
|
|
231
|
-
--priority 30 \
|
|
232
|
-
--feedback "$ITERATION_3_FEEDBACK"
|
|
233
|
-
|
|
234
|
-
echo ""
|
|
235
|
-
|
|
236
|
-
# Verify both iteration feedbacks are stored separately
|
|
237
|
-
FEEDBACK_KEY_2="swarm:${TASK_ID}:${LOOP3_AGENT}:feedback:iteration-2"
|
|
238
|
-
FEEDBACK_KEY_3="swarm:${TASK_ID}:${LOOP3_AGENT}:feedback:iteration-3"
|
|
239
|
-
|
|
240
|
-
FEEDBACK_2=$(redis-cli get "$FEEDBACK_KEY_2")
|
|
241
|
-
FEEDBACK_3=$(redis-cli get "$FEEDBACK_KEY_3")
|
|
242
|
-
|
|
243
|
-
if [ -n "$FEEDBACK_2" ] && [ "$FEEDBACK_2" != "(nil)" ]; then
|
|
244
|
-
echo "✅ Iteration 2 feedback persists"
|
|
245
|
-
echo " Items: $(echo "$FEEDBACK_2" | jq '. | length')"
|
|
246
|
-
fi
|
|
247
|
-
|
|
248
|
-
if [ -n "$FEEDBACK_3" ] && [ "$FEEDBACK_3" != "(nil)" ]; then
|
|
249
|
-
echo "✅ Iteration 3 feedback stored"
|
|
250
|
-
echo " Items: $(echo "$FEEDBACK_3" | jq '. | length')"
|
|
251
|
-
fi
|
|
252
|
-
|
|
253
|
-
echo ""
|
|
254
|
-
|
|
255
|
-
# Test 8: Edge cases
|
|
256
|
-
echo "=== Test 8: Edge Cases ==="
|
|
257
|
-
echo ""
|
|
258
|
-
|
|
259
|
-
# Empty feedback
|
|
260
|
-
echo "Testing wake with empty feedback..."
|
|
261
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh wake \
|
|
262
|
-
--task-id "$TASK_ID" \
|
|
263
|
-
--agent-id "test-agent" \
|
|
264
|
-
--reason "test" \
|
|
265
|
-
--iteration 1 \
|
|
266
|
-
--priority 50 \
|
|
267
|
-
--feedback ""
|
|
268
|
-
|
|
269
|
-
EMPTY_FEEDBACK_KEY="swarm:${TASK_ID}:test-agent:feedback:iteration-1"
|
|
270
|
-
EMPTY_RESULT=$(redis-cli get "$EMPTY_FEEDBACK_KEY")
|
|
271
|
-
|
|
272
|
-
if [ -z "$EMPTY_RESULT" ] || [ "$EMPTY_RESULT" = "(nil)" ]; then
|
|
273
|
-
echo "✅ Empty feedback not stored (expected)"
|
|
274
|
-
else
|
|
275
|
-
echo "⚠️ Empty feedback stored: $EMPTY_RESULT"
|
|
276
|
-
fi
|
|
277
|
-
|
|
278
|
-
echo ""
|
|
279
|
-
|
|
280
|
-
# Iteration 0 (no feedback storage)
|
|
281
|
-
echo "Testing wake with iteration 0..."
|
|
282
|
-
$SCRIPT_DIR/invoke-waiting-mode.sh wake \
|
|
283
|
-
--task-id "$TASK_ID" \
|
|
284
|
-
--agent-id "test-agent-2" \
|
|
285
|
-
--reason "initial" \
|
|
286
|
-
--iteration 0 \
|
|
287
|
-
--priority 50 \
|
|
288
|
-
--feedback "This should not be stored"
|
|
289
|
-
|
|
290
|
-
ITER_0_KEY="swarm:${TASK_ID}:test-agent-2:feedback:iteration-0"
|
|
291
|
-
ITER_0_RESULT=$(redis-cli get "$ITER_0_KEY")
|
|
292
|
-
|
|
293
|
-
if [ -z "$ITER_0_RESULT" ] || [ "$ITER_0_RESULT" = "(nil)" ]; then
|
|
294
|
-
echo "✅ Iteration 0 feedback not stored (expected)"
|
|
295
|
-
else
|
|
296
|
-
echo "❌ Iteration 0 feedback should not be stored: '$ITER_0_RESULT'"
|
|
297
|
-
exit 1
|
|
298
|
-
fi
|
|
299
|
-
|
|
300
|
-
echo ""
|
|
301
|
-
|
|
302
|
-
# Summary
|
|
303
|
-
echo "=========================================="
|
|
304
|
-
echo "Test Summary"
|
|
305
|
-
echo "=========================================="
|
|
306
|
-
echo "✅ All tests passed!"
|
|
307
|
-
echo ""
|
|
308
|
-
echo "Validated:"
|
|
309
|
-
echo " 1. Validators can report feedback with confidence"
|
|
310
|
-
echo " 2. Orchestrator collects and aggregates feedback"
|
|
311
|
-
echo " 3. Feedback passed to Loop 3 agents via wake signal"
|
|
312
|
-
echo " 4. Feedback stored in Redis with 24-hour TTL"
|
|
313
|
-
echo " 5. Agents can read feedback for iteration N"
|
|
314
|
-
echo " 6. Wake queue contains feedback in message"
|
|
315
|
-
echo " 7. Multiple iterations maintain separate feedback"
|
|
316
|
-
echo " 8. Edge cases handled correctly"
|
|
317
|
-
echo ""
|
|
318
|
-
echo "Task ID: $TASK_ID"
|
|
319
|
-
echo "Feedback mechanism is fully operational!"
|
|
320
|
-
echo ""
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Test Suite for orchestrate-cfn-loop.sh
|
|
4
|
-
# Tests dependency enforcement, BLPOP blocking, and agent completion protocol
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
ORCHESTRATOR="$SCRIPT_DIR/orchestrate-cfn-loop.sh"
|
|
10
|
-
|
|
11
|
-
# Colors for output
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
RED='\033[0;31m'
|
|
14
|
-
YELLOW='\033[1;33m'
|
|
15
|
-
NC='\033[0m' # No Color
|
|
16
|
-
|
|
17
|
-
# Test counters
|
|
18
|
-
TESTS_RUN=0
|
|
19
|
-
TESTS_PASSED=0
|
|
20
|
-
TESTS_FAILED=0
|
|
21
|
-
|
|
22
|
-
# Test helpers
|
|
23
|
-
function test_start() {
|
|
24
|
-
echo -e "${YELLOW}[TEST]${NC} $1"
|
|
25
|
-
TESTS_RUN=$((TESTS_RUN + 1))
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function test_pass() {
|
|
29
|
-
echo -e "${GREEN} ✓ PASS${NC}"
|
|
30
|
-
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function test_fail() {
|
|
34
|
-
echo -e "${RED} ✗ FAIL${NC} $1"
|
|
35
|
-
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function cleanup_redis() {
|
|
39
|
-
local TASK_ID="$1"
|
|
40
|
-
redis-cli --scan --pattern "swarm:${TASK_ID}:*" | xargs -r redis-cli del > /dev/null 2>&1 || true
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
# ==============================================================================
|
|
44
|
-
# TEST 1: Orchestrator script exists and is executable
|
|
45
|
-
# ==============================================================================
|
|
46
|
-
test_start "Orchestrator script exists and is executable"
|
|
47
|
-
|
|
48
|
-
if [ -f "$ORCHESTRATOR" ] && [ -x "$ORCHESTRATOR" ]; then
|
|
49
|
-
test_pass
|
|
50
|
-
else
|
|
51
|
-
test_fail "Script not found or not executable: $ORCHESTRATOR"
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
# ==============================================================================
|
|
55
|
-
# TEST 2: Redis connection available
|
|
56
|
-
# ==============================================================================
|
|
57
|
-
test_start "Redis connection available"
|
|
58
|
-
|
|
59
|
-
if redis-cli ping > /dev/null 2>&1; then
|
|
60
|
-
test_pass
|
|
61
|
-
else
|
|
62
|
-
test_fail "Redis not available. Start Redis server: redis-server"
|
|
63
|
-
exit 1
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
# ==============================================================================
|
|
67
|
-
# TEST 3: Orchestrator script is a bash script
|
|
68
|
-
# ==============================================================================
|
|
69
|
-
test_start "Orchestrator script is a bash script"
|
|
70
|
-
|
|
71
|
-
# Check if orchestrator exists (validation will be added later)
|
|
72
|
-
if [ -f "$ORCHESTRATOR" ]; then
|
|
73
|
-
test_pass
|
|
74
|
-
else
|
|
75
|
-
test_fail "Orchestrator script not found"
|
|
76
|
-
fi
|
|
77
|
-
|
|
78
|
-
# ==============================================================================
|
|
79
|
-
# TEST 4: Agent completion protocol - Signal :done key
|
|
80
|
-
# ==============================================================================
|
|
81
|
-
test_start "Agent completion protocol - Signal :done key"
|
|
82
|
-
|
|
83
|
-
TASK_ID="test-completion-$(date +%s)"
|
|
84
|
-
AGENT_ID="test-agent-1"
|
|
85
|
-
|
|
86
|
-
cleanup_redis "$TASK_ID"
|
|
87
|
-
|
|
88
|
-
# Simulate agent completing work
|
|
89
|
-
redis-cli lpush "swarm:${TASK_ID}:${AGENT_ID}:done" "complete" > /dev/null
|
|
90
|
-
|
|
91
|
-
# Verify signal present
|
|
92
|
-
SIGNAL=$(redis-cli blpop "swarm:${TASK_ID}:${AGENT_ID}:done" 1 2>&1 | tail -n 1)
|
|
93
|
-
if [ "$SIGNAL" == "complete" ]; then
|
|
94
|
-
test_pass
|
|
95
|
-
else
|
|
96
|
-
test_fail "Signal not found in Redis"
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
|
-
cleanup_redis "$TASK_ID"
|
|
100
|
-
|
|
101
|
-
# ==============================================================================
|
|
102
|
-
# TEST 5: BLPOP blocking behavior (timeout)
|
|
103
|
-
# ==============================================================================
|
|
104
|
-
test_start "BLPOP blocking behavior (timeout)"
|
|
105
|
-
|
|
106
|
-
TASK_ID="test-blocking-$(date +%s)"
|
|
107
|
-
AGENT_ID="nonexistent-agent"
|
|
108
|
-
|
|
109
|
-
cleanup_redis "$TASK_ID"
|
|
110
|
-
|
|
111
|
-
# BLPOP with 1 second timeout (should timeout since no agent signals)
|
|
112
|
-
START_TIME=$(date +%s)
|
|
113
|
-
redis-cli blpop "swarm:${TASK_ID}:${AGENT_ID}:done" 1 > /dev/null 2>&1
|
|
114
|
-
END_TIME=$(date +%s)
|
|
115
|
-
ELAPSED=$((END_TIME - START_TIME))
|
|
116
|
-
|
|
117
|
-
if [ "$ELAPSED" -ge 1 ] && [ "$ELAPSED" -le 2 ]; then
|
|
118
|
-
test_pass
|
|
119
|
-
else
|
|
120
|
-
test_fail "BLPOP timeout behavior incorrect (elapsed: ${ELAPSED}s, expected: 1-2s)"
|
|
121
|
-
fi
|
|
122
|
-
|
|
123
|
-
cleanup_redis "$TASK_ID"
|
|
124
|
-
|
|
125
|
-
# ==============================================================================
|
|
126
|
-
# TEST 6: Agent completion protocol - Report confidence
|
|
127
|
-
# ==============================================================================
|
|
128
|
-
test_start "Agent completion protocol - Report confidence"
|
|
129
|
-
|
|
130
|
-
TASK_ID="test-confidence-$(date +%s)"
|
|
131
|
-
AGENT_ID="test-agent-1"
|
|
132
|
-
|
|
133
|
-
cleanup_redis "$TASK_ID"
|
|
134
|
-
|
|
135
|
-
# Simulate agent reporting confidence
|
|
136
|
-
OUTPUT=$(./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
|
|
137
|
-
--task-id "$TASK_ID" \
|
|
138
|
-
--agent-id "$AGENT_ID" \
|
|
139
|
-
--confidence 0.85 \
|
|
140
|
-
--iteration 1 2>&1)
|
|
141
|
-
|
|
142
|
-
# Check if report was successful
|
|
143
|
-
if echo "$OUTPUT" | grep -q "0.85" || redis-cli exists "swarm:${TASK_ID}:${AGENT_ID}:result" | grep -q "1"; then
|
|
144
|
-
test_pass
|
|
145
|
-
else
|
|
146
|
-
test_fail "Confidence not stored correctly"
|
|
147
|
-
fi
|
|
148
|
-
|
|
149
|
-
cleanup_redis "$TASK_ID"
|
|
150
|
-
|
|
151
|
-
# ==============================================================================
|
|
152
|
-
# TEST 7: Collect consensus from multiple agents
|
|
153
|
-
# ==============================================================================
|
|
154
|
-
test_start "Collect consensus from multiple agents"
|
|
155
|
-
|
|
156
|
-
TASK_ID="test-consensus-$(date +%s)"
|
|
157
|
-
|
|
158
|
-
cleanup_redis "$TASK_ID"
|
|
159
|
-
|
|
160
|
-
# Simulate 3 agents reporting confidence
|
|
161
|
-
./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
|
|
162
|
-
--task-id "$TASK_ID" \
|
|
163
|
-
--agent-id "agent-1" \
|
|
164
|
-
--confidence 0.85 \
|
|
165
|
-
--iteration 1 > /dev/null 2>&1
|
|
166
|
-
|
|
167
|
-
./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
|
|
168
|
-
--task-id "$TASK_ID" \
|
|
169
|
-
--agent-id "agent-2" \
|
|
170
|
-
--confidence 0.90 \
|
|
171
|
-
--iteration 1 > /dev/null 2>&1
|
|
172
|
-
|
|
173
|
-
./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
|
|
174
|
-
--task-id "$TASK_ID" \
|
|
175
|
-
--agent-id "agent-3" \
|
|
176
|
-
--confidence 0.78 \
|
|
177
|
-
--iteration 1 > /dev/null 2>&1
|
|
178
|
-
|
|
179
|
-
# Collect consensus
|
|
180
|
-
CONSENSUS=$(./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh collect \
|
|
181
|
-
--task-id "$TASK_ID" \
|
|
182
|
-
--agent-ids "agent-1,agent-2,agent-3" 2>&1)
|
|
183
|
-
|
|
184
|
-
# Check for .84 or 0.84 in output (average: (0.85 + 0.90 + 0.78) / 3 = 0.843)
|
|
185
|
-
if echo "$CONSENSUS" | grep -qE "(0\.84|\.84)"; then
|
|
186
|
-
test_pass
|
|
187
|
-
else
|
|
188
|
-
test_fail "Consensus calculation incorrect: $CONSENSUS"
|
|
189
|
-
fi
|
|
190
|
-
|
|
191
|
-
cleanup_redis "$TASK_ID"
|
|
192
|
-
|
|
193
|
-
# ==============================================================================
|
|
194
|
-
# TEST 8: Mode-specific thresholds documentation
|
|
195
|
-
# ==============================================================================
|
|
196
|
-
test_start "Mode-specific thresholds documentation"
|
|
197
|
-
|
|
198
|
-
# Check if CLAUDE.md has mode thresholds (primary documentation location)
|
|
199
|
-
if grep -q "MVP" /mnt/c/Users/masha/Documents/claude-flow-novice/CLAUDE.md 2>/dev/null && \
|
|
200
|
-
grep -q "Standard" /mnt/c/Users/masha/Documents/claude-flow-novice/CLAUDE.md 2>/dev/null; then
|
|
201
|
-
test_pass
|
|
202
|
-
else
|
|
203
|
-
test_fail "Mode-specific thresholds should be documented (reference: CLAUDE.md)"
|
|
204
|
-
fi
|
|
205
|
-
|
|
206
|
-
# ==============================================================================
|
|
207
|
-
# TEST 9: Deliverable verification (BUG #11 fix)
|
|
208
|
-
# ==============================================================================
|
|
209
|
-
test_start "Deliverable verification - prevents consensus on vapor"
|
|
210
|
-
|
|
211
|
-
TASK_ID="deliverable-test-$(date +%s)"
|
|
212
|
-
|
|
213
|
-
# Simulate Loop 3 completion with high confidence but NO files changed
|
|
214
|
-
redis-cli lpush "swarm:${TASK_ID}:coder-1:done" "complete" > /dev/null 2>&1
|
|
215
|
-
redis-cli lpush "swarm:${TASK_ID}:coder-1:result" "0.95" > /dev/null 2>&1
|
|
216
|
-
|
|
217
|
-
# Verify orchestrator checks git status and overrides confidence when no files exist
|
|
218
|
-
# The implementation should check: git status --short | grep -E "^(A|M|\?\?)" | wc -l
|
|
219
|
-
# If count == 0, override confidence to 0.0
|
|
220
|
-
|
|
221
|
-
# Check that deliverable verification logic exists in orchestrator
|
|
222
|
-
if grep -q "FILES_CHANGED.*git status.*short" /mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh && \
|
|
223
|
-
grep -q "no_deliverables\|DELIVERABLE.*FAILED" /mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh; then
|
|
224
|
-
test_pass
|
|
225
|
-
else
|
|
226
|
-
test_fail "Deliverable verification logic not found in orchestrator"
|
|
227
|
-
fi
|
|
228
|
-
|
|
229
|
-
cleanup_redis "$TASK_ID"
|
|
230
|
-
|
|
231
|
-
# ==============================================================================
|
|
232
|
-
# TEST SUMMARY
|
|
233
|
-
# ==============================================================================
|
|
234
|
-
echo ""
|
|
235
|
-
echo "========================================"
|
|
236
|
-
echo "TEST SUMMARY"
|
|
237
|
-
echo "========================================"
|
|
238
|
-
echo -e "Tests Run: ${TESTS_RUN}"
|
|
239
|
-
echo -e "Tests Passed: ${GREEN}${TESTS_PASSED}${NC}"
|
|
240
|
-
echo -e "Tests Failed: ${RED}${TESTS_FAILED}${NC}"
|
|
241
|
-
echo "========================================"
|
|
242
|
-
|
|
243
|
-
if [ "$TESTS_FAILED" -eq 0 ]; then
|
|
244
|
-
echo -e "${GREEN}✓ All tests passed${NC}"
|
|
245
|
-
exit 0
|
|
246
|
-
else
|
|
247
|
-
echo -e "${RED}✗ Some tests failed${NC}"
|
|
248
|
-
exit 1
|
|
249
|
-
fi
|