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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Redis Results Collection Primitive
|
|
4
|
+
# Updated interface to match orchestrator expectations
|
|
5
|
+
# Supports both legacy (--key) and new (--task-id --agent-ids --namespace) interfaces
|
|
6
|
+
|
|
7
|
+
# Initialize variables
|
|
8
|
+
task_id=""
|
|
9
|
+
agent_ids=""
|
|
10
|
+
key=""
|
|
11
|
+
namespace="swarm"
|
|
12
|
+
|
|
13
|
+
# Parse arguments
|
|
14
|
+
while [[ $# -gt 0 ]]; do
|
|
15
|
+
case "$1" in
|
|
16
|
+
--task-id)
|
|
17
|
+
task_id="$2"
|
|
18
|
+
shift 2
|
|
19
|
+
;;
|
|
20
|
+
--agent-ids)
|
|
21
|
+
agent_ids="$2"
|
|
22
|
+
shift 2
|
|
23
|
+
;;
|
|
24
|
+
--key)
|
|
25
|
+
key="$2"
|
|
26
|
+
shift 2
|
|
27
|
+
;;
|
|
28
|
+
--namespace)
|
|
29
|
+
namespace="$2"
|
|
30
|
+
shift 2
|
|
31
|
+
;;
|
|
32
|
+
*)
|
|
33
|
+
echo "Unknown argument: $1" >&2
|
|
34
|
+
exit 1
|
|
35
|
+
;;
|
|
36
|
+
esac
|
|
37
|
+
done
|
|
38
|
+
|
|
39
|
+
# Construct Redis key based on interface mode
|
|
40
|
+
if [[ -n "$task_id" && -n "$agent_ids" ]]; then
|
|
41
|
+
# New interface: collect from multiple agents
|
|
42
|
+
# Format: {namespace}:{task_id}:results
|
|
43
|
+
redis_key="${namespace}:${task_id}:results"
|
|
44
|
+
|
|
45
|
+
# Collect results from each agent
|
|
46
|
+
IFS=',' read -ra AGENTS <<< "$agent_ids"
|
|
47
|
+
results=""
|
|
48
|
+
for agent in "${AGENTS[@]}"; do
|
|
49
|
+
agent_key="${namespace}:${task_id}:${agent}:result"
|
|
50
|
+
agent_result=$(redis-cli get "$agent_key" 2>/dev/null)
|
|
51
|
+
if [[ -n "$agent_result" && "$agent_result" != "(nil)" ]]; then
|
|
52
|
+
results="${results}${agent}:${agent_result}"$'\n'
|
|
53
|
+
fi
|
|
54
|
+
done
|
|
55
|
+
|
|
56
|
+
# Print collected results
|
|
57
|
+
echo -n "$results"
|
|
58
|
+
elif [[ -n "$key" ]]; then
|
|
59
|
+
# Legacy interface: key is used directly (list-based)
|
|
60
|
+
redis_key="$key"
|
|
61
|
+
|
|
62
|
+
# Collect results from Redis list
|
|
63
|
+
results=$(redis-cli lrange "$redis_key" 0 -1 2>/dev/null)
|
|
64
|
+
|
|
65
|
+
# Print the results
|
|
66
|
+
echo "$results"
|
|
67
|
+
else
|
|
68
|
+
echo "Error: Either (--task-id and --agent-ids) or --key is required" >&2
|
|
69
|
+
echo "Usage: $0 --task-id <id> --agent-ids <comma-separated-ids> [--namespace <ns>]" >&2
|
|
70
|
+
echo " or: $0 --key <full-key>" >&2
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# Exit successfully
|
|
75
|
+
exit 0
|
|
Binary file
|
|
@@ -0,0 +1,320 @@
|
|
|
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 ""
|
package/.claude/skills/redis-coordination/{test-orchestrator.sh → demos/test-orchestrator.sh}
RENAMED
|
@@ -203,6 +203,31 @@ else
|
|
|
203
203
|
test_fail "Mode-specific thresholds should be documented (reference: CLAUDE.md)"
|
|
204
204
|
fi
|
|
205
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/redis-coordination/orchestrate-cfn-loop.sh && \
|
|
223
|
+
grep -q "no_deliverables\|DELIVERABLE.*FAILED" /mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/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
|
+
|
|
206
231
|
# ==============================================================================
|
|
207
232
|
# TEST SUMMARY
|
|
208
233
|
# ==============================================================================
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
##############################################################################
|
|
3
|
+
# Product Owner Decision Execution Script
|
|
4
|
+
#
|
|
5
|
+
# Handles the complete Product Owner decision protocol:
|
|
6
|
+
# 1. Query Loop 2 consensus from Redis
|
|
7
|
+
# 2. Apply GOAP decision framework
|
|
8
|
+
# 3. Push decision to Redis
|
|
9
|
+
# 4. Signal completion
|
|
10
|
+
# 5. Report confidence
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# ./execute-product-owner-decision.sh --task-id <task> --agent-id <agent>
|
|
14
|
+
##############################################################################
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
# Parse arguments
|
|
19
|
+
TASK_ID=""
|
|
20
|
+
AGENT_ID=""
|
|
21
|
+
|
|
22
|
+
while [[ $# -gt 0 ]]; do
|
|
23
|
+
case $1 in
|
|
24
|
+
--task-id)
|
|
25
|
+
TASK_ID="$2"
|
|
26
|
+
shift 2
|
|
27
|
+
;;
|
|
28
|
+
--agent-id)
|
|
29
|
+
AGENT_ID="$2"
|
|
30
|
+
shift 2
|
|
31
|
+
;;
|
|
32
|
+
*)
|
|
33
|
+
echo "Unknown option: $1"
|
|
34
|
+
echo "Usage: $0 --task-id <task> --agent-id <agent>"
|
|
35
|
+
exit 1
|
|
36
|
+
;;
|
|
37
|
+
esac
|
|
38
|
+
done
|
|
39
|
+
|
|
40
|
+
if [ -z "$TASK_ID" ] || [ -z "$AGENT_ID" ]; then
|
|
41
|
+
echo "Error: --task-id and --agent-id are required"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
echo "[Product Owner] Starting decision execution for task: $TASK_ID"
|
|
46
|
+
echo ""
|
|
47
|
+
|
|
48
|
+
# Step 1: Query Loop 2 consensus and context
|
|
49
|
+
echo "[Step 1] Querying Loop 2 consensus and context from Redis..."
|
|
50
|
+
CONSENSUS=$(redis-cli lindex "swarm:${TASK_ID}:metrics:loop2_consensus" 0 | jq -r '.consensus')
|
|
51
|
+
ITERATION=$(redis-cli lindex "swarm:${TASK_ID}:metrics:loop2_consensus" 0 | jq -r '.iteration')
|
|
52
|
+
|
|
53
|
+
# Get feedback from validators
|
|
54
|
+
FEEDBACK_JSON=$(redis-cli lrange "swarm:${TASK_ID}:loop2:feedback" 0 -1 | jq -s '.')
|
|
55
|
+
|
|
56
|
+
# Get acceptance criteria and scope
|
|
57
|
+
ACCEPTANCE_CRITERIA=$(redis-cli get "swarm:${TASK_ID}:success-criteria" | jq -r '.acceptanceCriteria // []')
|
|
58
|
+
EPIC_CONTEXT=$(redis-cli get "swarm:${TASK_ID}:epic-context")
|
|
59
|
+
IN_SCOPE=$(echo "$EPIC_CONTEXT" | jq -r '.inScope // []')
|
|
60
|
+
OUT_OF_SCOPE=$(echo "$EPIC_CONTEXT" | jq -r '.outOfScope // []')
|
|
61
|
+
EPIC_GOAL=$(echo "$EPIC_CONTEXT" | jq -r '.epicGoal // ""')
|
|
62
|
+
|
|
63
|
+
echo " Loop 2 Consensus: $CONSENSUS"
|
|
64
|
+
echo " Iteration: $ITERATION"
|
|
65
|
+
echo " Validator Feedback Items: $(echo "$FEEDBACK_JSON" | jq 'length')"
|
|
66
|
+
echo ""
|
|
67
|
+
|
|
68
|
+
# Step 2: Apply scope categorization
|
|
69
|
+
echo "[Step 2] Categorizing validator feedback by scope..."
|
|
70
|
+
|
|
71
|
+
# Initialize arrays
|
|
72
|
+
IN_SCOPE_ITEMS="[]"
|
|
73
|
+
OUT_OF_SCOPE_ITEMS="[]"
|
|
74
|
+
IN_SCOPE_CONSENSUS=0
|
|
75
|
+
OUT_OF_SCOPE_CONSENSUS=0
|
|
76
|
+
|
|
77
|
+
# Process feedback if available
|
|
78
|
+
if [ "$FEEDBACK_JSON" != "null" ] && [ "$FEEDBACK_JSON" != "[]" ]; then
|
|
79
|
+
# Categorize each feedback item
|
|
80
|
+
for feedback_item in $(echo "$FEEDBACK_JSON" | jq -r '.[] | @base64'); do
|
|
81
|
+
_jq() {
|
|
82
|
+
echo "$feedback_item" | base64 --decode | jq -r "$1"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
FEEDBACK_TEXT=$(_jq '.')
|
|
86
|
+
IS_IN_SCOPE="false"
|
|
87
|
+
|
|
88
|
+
# Check if feedback relates to acceptance criteria or inScope items
|
|
89
|
+
for criterion in $(echo "$ACCEPTANCE_CRITERIA" | jq -r '.[] | @base64'); do
|
|
90
|
+
CRITERION_TEXT=$(echo "$criterion" | base64 --decode)
|
|
91
|
+
if echo "$FEEDBACK_TEXT" | grep -iq "$(echo "$CRITERION_TEXT" | head -c 20)"; then
|
|
92
|
+
IS_IN_SCOPE="true"
|
|
93
|
+
break
|
|
94
|
+
fi
|
|
95
|
+
done
|
|
96
|
+
|
|
97
|
+
# Add to appropriate category
|
|
98
|
+
if [ "$IS_IN_SCOPE" = "true" ]; then
|
|
99
|
+
IN_SCOPE_ITEMS=$(echo "$IN_SCOPE_ITEMS" | jq --arg item "$FEEDBACK_TEXT" '. + [$item]')
|
|
100
|
+
else
|
|
101
|
+
OUT_OF_SCOPE_ITEMS=$(echo "$OUT_OF_SCOPE_ITEMS" | jq --arg item "$FEEDBACK_TEXT" '. + [$item]')
|
|
102
|
+
fi
|
|
103
|
+
done
|
|
104
|
+
|
|
105
|
+
# Calculate in-scope consensus (consensus weighted by in-scope ratio)
|
|
106
|
+
TOTAL_ITEMS=$(echo "$FEEDBACK_JSON" | jq 'length')
|
|
107
|
+
IN_SCOPE_COUNT=$(echo "$IN_SCOPE_ITEMS" | jq 'length')
|
|
108
|
+
|
|
109
|
+
if [ "$TOTAL_ITEMS" -gt 0 ]; then
|
|
110
|
+
# If there's feedback, weight consensus by in-scope ratio
|
|
111
|
+
IN_SCOPE_CONSENSUS=$(echo "scale=2; $CONSENSUS * $IN_SCOPE_COUNT / $TOTAL_ITEMS" | bc -l)
|
|
112
|
+
else
|
|
113
|
+
# No feedback means validators had no concerns - use full consensus
|
|
114
|
+
IN_SCOPE_CONSENSUS=$CONSENSUS
|
|
115
|
+
fi
|
|
116
|
+
else
|
|
117
|
+
# No feedback at all - use full consensus as in-scope
|
|
118
|
+
IN_SCOPE_CONSENSUS=$CONSENSUS
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
echo " In-Scope Items: $(echo "$IN_SCOPE_ITEMS" | jq 'length')"
|
|
122
|
+
echo " Out-of-Scope Items: $(echo "$OUT_OF_SCOPE_ITEMS" | jq 'length')"
|
|
123
|
+
echo " In-Scope Consensus: $IN_SCOPE_CONSENSUS"
|
|
124
|
+
echo ""
|
|
125
|
+
|
|
126
|
+
# Step 3: Apply GOAP decision framework with scope enforcement
|
|
127
|
+
echo "[Step 3] Applying GOAP decision framework with scope enforcement..."
|
|
128
|
+
|
|
129
|
+
# Default threshold (standard mode)
|
|
130
|
+
CONSENSUS_THRESHOLD=0.90
|
|
131
|
+
MAX_ITERATIONS=10
|
|
132
|
+
|
|
133
|
+
# Determine decision based on scope-aware consensus
|
|
134
|
+
DECISION_TYPE=""
|
|
135
|
+
DECISION_REASONING=""
|
|
136
|
+
DECISION_CONFIDENCE=0
|
|
137
|
+
BACKLOG_ITEMS="[]"
|
|
138
|
+
|
|
139
|
+
if (( $(echo "$CONSENSUS >= $CONSENSUS_THRESHOLD" | bc -l) )); then
|
|
140
|
+
# High consensus - check if there are out-of-scope items
|
|
141
|
+
OUT_OF_SCOPE_COUNT=$(echo "$OUT_OF_SCOPE_ITEMS" | jq 'length')
|
|
142
|
+
|
|
143
|
+
if [ "$OUT_OF_SCOPE_COUNT" -gt 0 ]; then
|
|
144
|
+
DECISION_TYPE="DEFER_AND_PROCEED"
|
|
145
|
+
DECISION_REASONING="In-scope work complete (consensus $CONSENSUS >= $CONSENSUS_THRESHOLD). Deferring $OUT_OF_SCOPE_COUNT out-of-scope items to backlog."
|
|
146
|
+
DECISION_CONFIDENCE=0.92
|
|
147
|
+
BACKLOG_ITEMS="$OUT_OF_SCOPE_ITEMS"
|
|
148
|
+
echo " Decision: DEFER_AND_PROCEED (moving out-of-scope items to backlog)"
|
|
149
|
+
else
|
|
150
|
+
DECISION_TYPE="PROCEED"
|
|
151
|
+
DECISION_REASONING="All work complete, consensus threshold met ($CONSENSUS >= $CONSENSUS_THRESHOLD)"
|
|
152
|
+
DECISION_CONFIDENCE=0.95
|
|
153
|
+
echo " Decision: PROCEED (consensus exceeds threshold, no out-of-scope items)"
|
|
154
|
+
fi
|
|
155
|
+
elif [ "$ITERATION" -lt "$MAX_ITERATIONS" ]; then
|
|
156
|
+
# Below consensus - check if in-scope consensus would meet threshold
|
|
157
|
+
if (( $(echo "$IN_SCOPE_CONSENSUS >= $CONSENSUS_THRESHOLD" | bc -l) )); then
|
|
158
|
+
# In-scope work is good, out-of-scope items preventing consensus
|
|
159
|
+
DECISION_TYPE="DEFER_AND_PROCEED"
|
|
160
|
+
DECISION_REASONING="In-scope consensus met ($IN_SCOPE_CONSENSUS >= $CONSENSUS_THRESHOLD). Out-of-scope items preventing overall consensus - deferring to backlog."
|
|
161
|
+
DECISION_CONFIDENCE=0.88
|
|
162
|
+
BACKLOG_ITEMS="$OUT_OF_SCOPE_ITEMS"
|
|
163
|
+
echo " Decision: DEFER_AND_PROCEED (in-scope work complete, deferring out-of-scope blockers)"
|
|
164
|
+
else
|
|
165
|
+
# In-scope work needs improvement
|
|
166
|
+
DECISION_TYPE="ITERATE"
|
|
167
|
+
DECISION_REASONING="In-scope consensus below threshold ($IN_SCOPE_CONSENSUS < $CONSENSUS_THRESHOLD), targeted improvements needed"
|
|
168
|
+
DECISION_CONFIDENCE=0.90
|
|
169
|
+
BACKLOG_ITEMS="$OUT_OF_SCOPE_ITEMS"
|
|
170
|
+
echo " Decision: ITERATE (in-scope work needs improvement, iteration $ITERATION/$MAX_ITERATIONS)"
|
|
171
|
+
fi
|
|
172
|
+
else
|
|
173
|
+
DECISION_TYPE="ABORT"
|
|
174
|
+
DECISION_REASONING="Max iterations reached ($ITERATION >= $MAX_ITERATIONS) without meeting in-scope consensus threshold"
|
|
175
|
+
DECISION_CONFIDENCE=0.85
|
|
176
|
+
echo " Decision: ABORT (max iterations reached)"
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
echo ""
|
|
180
|
+
|
|
181
|
+
# Build structured decision JSON with scope analysis
|
|
182
|
+
DECISION=$(jq -n \
|
|
183
|
+
--arg decision "$DECISION_TYPE" \
|
|
184
|
+
--arg reasoning "$DECISION_REASONING" \
|
|
185
|
+
--arg confidence "$DECISION_CONFIDENCE" \
|
|
186
|
+
--argjson in_scope_items "$IN_SCOPE_ITEMS" \
|
|
187
|
+
--argjson out_of_scope_items "$OUT_OF_SCOPE_ITEMS" \
|
|
188
|
+
--arg in_scope_consensus "$IN_SCOPE_CONSENSUS" \
|
|
189
|
+
--argjson backlog_items "$BACKLOG_ITEMS" \
|
|
190
|
+
'{
|
|
191
|
+
decision: $decision,
|
|
192
|
+
reasoning: $reasoning,
|
|
193
|
+
confidence: ($confidence | tonumber),
|
|
194
|
+
scope_analysis: {
|
|
195
|
+
in_scope_consensus: ($in_scope_consensus | tonumber),
|
|
196
|
+
in_scope_items: $in_scope_items,
|
|
197
|
+
out_of_scope_items: $out_of_scope_items
|
|
198
|
+
},
|
|
199
|
+
backlog_items: $backlog_items
|
|
200
|
+
}')
|
|
201
|
+
|
|
202
|
+
echo "[Step 4] Managing backlog items..."
|
|
203
|
+
if [ "$(echo "$BACKLOG_ITEMS" | jq 'length')" -gt 0 ]; then
|
|
204
|
+
# Store backlog items in Redis
|
|
205
|
+
BACKLOG_KEY="swarm:${TASK_ID}:backlog"
|
|
206
|
+
echo "$BACKLOG_ITEMS" | redis-cli -x LPUSH "$BACKLOG_KEY" >/dev/null
|
|
207
|
+
echo " ✓ Stored $(echo "$BACKLOG_ITEMS" | jq 'length') backlog items in Redis: $BACKLOG_KEY"
|
|
208
|
+
|
|
209
|
+
# Persist backlog to file for human review
|
|
210
|
+
BACKLOG_FILE=".claude/data/backlog/${TASK_ID}.json"
|
|
211
|
+
mkdir -p "$(dirname "$BACKLOG_FILE")"
|
|
212
|
+
|
|
213
|
+
BACKLOG_RECORD=$(jq -n \
|
|
214
|
+
--arg task_id "$TASK_ID" \
|
|
215
|
+
--arg timestamp "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
|
|
216
|
+
--arg epic_goal "$EPIC_GOAL" \
|
|
217
|
+
--argjson items "$BACKLOG_ITEMS" \
|
|
218
|
+
'{
|
|
219
|
+
task_id: $task_id,
|
|
220
|
+
timestamp: $timestamp,
|
|
221
|
+
epic_goal: $epic_goal,
|
|
222
|
+
deferred_items: $items,
|
|
223
|
+
status: "pending_review"
|
|
224
|
+
}')
|
|
225
|
+
|
|
226
|
+
echo "$BACKLOG_RECORD" > "$BACKLOG_FILE"
|
|
227
|
+
echo " ✓ Backlog persisted to: $BACKLOG_FILE"
|
|
228
|
+
else
|
|
229
|
+
echo " No backlog items to store"
|
|
230
|
+
fi
|
|
231
|
+
echo ""
|
|
232
|
+
|
|
233
|
+
echo "[Step 5] Pushing decision to Redis..."
|
|
234
|
+
DECISION_KEY="swarm:${TASK_ID}:${AGENT_ID}:decision"
|
|
235
|
+
echo "$DECISION" | redis-cli -x LPUSH "$DECISION_KEY" >/dev/null
|
|
236
|
+
echo " ✓ Decision pushed to: $DECISION_KEY"
|
|
237
|
+
echo " Content: $DECISION"
|
|
238
|
+
echo ""
|
|
239
|
+
|
|
240
|
+
# Step 6: Signal completion
|
|
241
|
+
echo "[Step 6] Signaling completion..."
|
|
242
|
+
DONE_KEY="swarm:${TASK_ID}:${AGENT_ID}:done"
|
|
243
|
+
redis-cli LPUSH "$DONE_KEY" "complete" >/dev/null
|
|
244
|
+
echo " ✓ Completion signaled"
|
|
245
|
+
echo ""
|
|
246
|
+
|
|
247
|
+
# Step 7: Report confidence
|
|
248
|
+
echo "[Step 7] Reporting confidence..."
|
|
249
|
+
./.claude/skills/redis-coordination/invoke-waiting-mode.sh report \
|
|
250
|
+
--task-id "$TASK_ID" \
|
|
251
|
+
--agent-id "$AGENT_ID" \
|
|
252
|
+
--confidence "$DECISION_CONFIDENCE"
|
|
253
|
+
|
|
254
|
+
echo ""
|
|
255
|
+
echo "🎉 Product Owner decision execution complete!"
|
|
256
|
+
echo " Decision: $DECISION_TYPE"
|
|
257
|
+
echo " Consensus: $CONSENSUS"
|
|
258
|
+
echo " Iteration: $ITERATION"
|