claude-flow-novice 2.0.0 → 2.0.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/agents/CLAUDE.md +669 -51
- package/.claude/agents/agent-principles/CODER_AGENT_GUIDELINES.md +1245 -0
- package/.claude/agents/agent-principles/agent-type-guidelines.md +137 -0
- package/.claude/agents/agent-principles/format-selection.md +20 -0
- package/.claude/agents/agent-principles/prompt-engineering.md +165 -35
- package/.claude/agents/agent-principles/quality-metrics.md +83 -2
- package/.claude/agents/analysis/code-analyzer.md +722 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +33 -3
- package/.claude/agents/analysis/perf-analyzer.md +812 -0
- package/.claude/agents/architecture/system-architect.md +25 -11
- package/.claude/agents/cfn-loop/product-owner.md +458 -2
- package/.claude/agents/code-booster.md +13 -2
- package/.claude/agents/consensus/byzantine-coordinator.md +259 -6
- package/.claude/agents/consensus/consensus-builder.md +135 -2
- package/.claude/agents/consensus/crdt-synchronizer.md +307 -771
- package/.claude/agents/consensus/gossip-coordinator.md +227 -2
- package/.claude/agents/consensus/performance-benchmarker.md +385 -704
- package/.claude/agents/consensus/quorum-manager.md +241 -749
- package/.claude/agents/consensus/raft-manager.md +195 -2
- package/.claude/agents/consensus/security-manager.md +461 -518
- package/.claude/agents/core-agents/analyst.md +560 -0
- package/.claude/agents/core-agents/architect.md +578 -0
- package/.claude/agents/core-agents/base-template-generator.md +137 -0
- package/.claude/agents/core-agents/coder.md +409 -0
- package/.claude/agents/core-agents/coordinator.md +1429 -0
- package/.claude/agents/core-agents/planner.md +343 -0
- package/.claude/agents/core-agents/researcher.md +414 -0
- package/.claude/agents/core-agents/reviewer.md +652 -0
- package/.claude/agents/core-agents/task-coordinator.md +400 -0
- package/.claude/agents/core-agents/tester.md +912 -0
- package/.claude/agents/development/backend/dev-backend-api.md +418 -23
- package/.claude/agents/devops/devops-engineer.md +240 -433
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +350 -11
- package/.claude/agents/examples/blocking-coordinator-example.md +388 -0
- package/.claude/agents/frontend/interaction-tester.md +334 -17
- package/.claude/agents/frontend/react-frontend-engineer.md +255 -2
- package/.claude/agents/frontend/state-architect.md +235 -9
- package/.claude/agents/frontend/ui-designer.md +261 -132
- package/.claude/agents/goal/goal-planner.md +803 -52
- package/.claude/agents/planning-team/api-designer-persona.md +736 -0
- package/.claude/agents/planning-team/security-architect-persona.md +643 -0
- package/.claude/agents/planning-team/system-architect-persona.md +585 -0
- package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +796 -0
- package/.claude/agents/product-owner-team/cto-agent.md +473 -0
- package/.claude/agents/product-owner-team/power-user-persona.md +590 -0
- package/.claude/agents/product-owner-team/product-owner-agent.md +806 -0
- package/.claude/agents/security/security-specialist.md +515 -13
- package/.claude/agents/sparc/architecture.md +237 -1
- package/.claude/agents/sparc/pseudocode.md +237 -1
- package/.claude/agents/sparc/refinement.md +244 -1
- package/.claude/agents/sparc/specification.md +282 -21
- package/.claude/agents/specialized/code-booster.md +826 -0
- package/.claude/agents/specialized/mobile/mobile-dev.md +560 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +33 -1
- package/.claude/agents/swarm/adaptive-coordinator-enhanced.md +485 -746
- package/.claude/agents/swarm/adaptive-coordinator.md +269 -37
- package/.claude/agents/swarm/blocking-coordinator-example.md +456 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +324 -60
- package/.claude/agents/swarm/mesh-coordinator.md +774 -324
- package/.claude/agents/swarm/test-coordinator.md +123 -74
- package/.claude/agents/testing/e2e/playwright-agent.md +32 -0
- package/.claude/agents/testing/interaction-tester.md +525 -0
- package/.claude/agents/testing/playwright-tester.md +405 -0
- package/.claude/agents/testing/production-validator.md +644 -0
- package/.claude/agents/testing/tdd-london-swarm.md +659 -0
- package/.claude/agents/testing/unit/tdd-london-swarm.md +27 -0
- package/.claude/agents/testing/validation/production-validator.md +390 -1
- package/.claude/agents-ignore/mesh-coordinator-backup.md +435 -0
- package/.claude/commands/cfn-loop-document.md +441 -0
- package/.claude/commands/github-commit.md +289 -0
- package/.claude-flow-novice/.claude/agents/CLAUDE.md +669 -51
- package/.claude-flow-novice/.claude/agents/agent-principles/agent-type-guidelines.md +137 -0
- package/.claude-flow-novice/.claude/agents/agent-principles/format-selection.md +20 -0
- package/.claude-flow-novice/.claude/agents/agent-principles/prompt-engineering.md +165 -35
- package/.claude-flow-novice/.claude/agents/agent-principles/quality-metrics.md +83 -2
- package/.claude-flow-novice/.claude/agents/analysis/code-analyzer.md +722 -192
- package/.claude-flow-novice/.claude/agents/analysis/code-review/analyze-code-quality.md +33 -3
- package/.claude-flow-novice/.claude/agents/analysis/perf-analyzer.md +812 -0
- package/.claude-flow-novice/.claude/agents/architecture/system-architect.md +25 -11
- package/.claude-flow-novice/.claude/agents/cfn-loop/product-owner.md +458 -2
- package/.claude-flow-novice/.claude/agents/code-booster.md +13 -2
- package/.claude-flow-novice/.claude/agents/consensus/byzantine-coordinator.md +259 -6
- package/.claude-flow-novice/.claude/agents/consensus/consensus-builder.md +135 -2
- package/.claude-flow-novice/.claude/agents/consensus/crdt-synchronizer.md +307 -771
- package/.claude-flow-novice/.claude/agents/consensus/gossip-coordinator.md +227 -2
- package/.claude-flow-novice/.claude/agents/consensus/performance-benchmarker.md +385 -704
- package/.claude-flow-novice/.claude/agents/consensus/quorum-manager.md +241 -749
- package/.claude-flow-novice/.claude/agents/consensus/raft-manager.md +195 -2
- package/.claude-flow-novice/.claude/agents/consensus/security-manager.md +461 -518
- package/.claude-flow-novice/.claude/agents/core-agents/analyst.md +560 -0
- package/.claude-flow-novice/.claude/agents/core-agents/architect.md +578 -0
- package/.claude-flow-novice/.claude/agents/core-agents/base-template-generator.md +137 -0
- package/.claude-flow-novice/.claude/agents/core-agents/coder.md +409 -0
- package/.claude-flow-novice/.claude/agents/core-agents/coordinator.md +1429 -0
- package/.claude-flow-novice/.claude/agents/core-agents/planner.md +343 -0
- package/.claude-flow-novice/.claude/agents/core-agents/researcher.md +414 -0
- package/.claude-flow-novice/.claude/agents/core-agents/reviewer.md +652 -0
- package/.claude-flow-novice/.claude/agents/core-agents/task-coordinator.md +400 -0
- package/.claude-flow-novice/.claude/agents/core-agents/tester.md +912 -0
- package/.claude-flow-novice/.claude/agents/development/backend/dev-backend-api.md +418 -23
- package/.claude-flow-novice/.claude/agents/devops/devops-engineer.md +240 -433
- package/.claude-flow-novice/.claude/agents/documentation/api-docs/docs-api-openapi.md +350 -11
- package/.claude-flow-novice/.claude/agents/examples/blocking-coordinator-example.md +388 -0
- package/.claude-flow-novice/.claude/agents/frontend/interaction-tester.md +334 -17
- package/.claude-flow-novice/.claude/agents/frontend/react-frontend-engineer.md +255 -2
- package/.claude-flow-novice/.claude/agents/frontend/state-architect.md +235 -9
- package/.claude-flow-novice/.claude/agents/frontend/ui-designer.md +261 -132
- package/.claude-flow-novice/.claude/agents/goal/goal-planner.md +803 -52
- package/.claude-flow-novice/.claude/agents/planning-team/api-designer-persona.md +736 -0
- package/.claude-flow-novice/.claude/agents/planning-team/security-architect-persona.md +643 -0
- package/.claude-flow-novice/.claude/agents/planning-team/system-architect-persona.md +585 -0
- package/.claude-flow-novice/.claude/agents/predesign-negotiation/accessibility-advocate-persona.md +796 -0
- package/.claude-flow-novice/.claude/agents/predesign-negotiation/cto-agent.md +473 -0
- package/.claude-flow-novice/.claude/agents/predesign-negotiation/power-user-persona.md +590 -0
- package/.claude-flow-novice/.claude/agents/predesign-negotiation/product-owner-agent.md +806 -0
- package/.claude-flow-novice/.claude/agents/product-owner-team/accessibility-advocate-persona.md +796 -0
- package/.claude-flow-novice/.claude/agents/product-owner-team/cto-agent.md +473 -0
- package/.claude-flow-novice/.claude/agents/product-owner-team/power-user-persona.md +590 -0
- package/.claude-flow-novice/.claude/agents/product-owner-team/product-owner-agent.md +806 -0
- package/.claude-flow-novice/.claude/agents/security/security-specialist.md +515 -13
- package/.claude-flow-novice/.claude/agents/sparc/architecture.md +237 -1
- package/.claude-flow-novice/.claude/agents/sparc/pseudocode.md +237 -1
- package/.claude-flow-novice/.claude/agents/sparc/refinement.md +244 -1
- package/.claude-flow-novice/.claude/agents/sparc/specification.md +282 -21
- package/.claude-flow-novice/.claude/agents/specialized/code-booster.md +826 -0
- package/.claude-flow-novice/.claude/agents/specialized/mobile/mobile-dev.md +560 -0
- package/.claude-flow-novice/.claude/agents/specialized/mobile/spec-mobile-react-native.md +33 -1
- package/.claude-flow-novice/.claude/agents/swarm/adaptive-coordinator-enhanced.md +485 -746
- package/.claude-flow-novice/.claude/agents/swarm/adaptive-coordinator.md +269 -37
- package/.claude-flow-novice/.claude/agents/swarm/blocking-coordinator-example.md +456 -0
- package/.claude-flow-novice/.claude/agents/swarm/hierarchical-coordinator.md +324 -60
- package/.claude-flow-novice/.claude/agents/swarm/mesh-coordinator.md +774 -324
- package/.claude-flow-novice/.claude/agents/swarm/test-coordinator.md +123 -74
- package/.claude-flow-novice/.claude/agents/testing/e2e/playwright-agent.md +32 -0
- package/.claude-flow-novice/.claude/agents/testing/interaction-tester.md +525 -0
- package/.claude-flow-novice/.claude/agents/testing/playwright-tester.md +405 -0
- package/.claude-flow-novice/.claude/agents/testing/production-validator.md +644 -0
- package/.claude-flow-novice/.claude/agents/testing/tdd-london-swarm.md +659 -0
- package/.claude-flow-novice/.claude/agents/testing/unit/tdd-london-swarm.md +27 -0
- package/.claude-flow-novice/.claude/agents/testing/validation/production-validator.md +390 -1
- package/.claude-flow-novice/config/typescript/tsconfig.tsbuildinfo +1 -1
- package/.claude-flow-novice/dist/__tests__/redis/RedisHealthMonitor.test.d.ts +14 -0
- package/.claude-flow-novice/dist/agents/heartbeat-manager.d.ts +73 -0
- package/.claude-flow-novice/dist/agents/lifecycle-cleanup-enhanced.d.ts +190 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/agent-lifecycle-sqlite.test.d.ts +17 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/blocking-coordination-audit.test.d.ts +16 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/blocking-coordination-signals.test.d.ts +14 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/byzantine-consensus-adapter.test.d.ts +14 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/byzantine-performance.test.d.ts +17 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/cfn-loop-byzantine-integration.test.d.ts +15 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/cfn-loop-e2e.test.d.ts +15 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/cfn-loop-memory-manager.test.d.ts +9 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/cleanup-integration.test.d.ts +21 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/cleanup-performance-validation.test.d.ts +13 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/coordinator-timeout-handler.test.d.ts +14 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/dead-coordinator-detection.test.d.ts +15 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/doc-code-examples-validator.d.ts +35 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/doc-executable-examples.test.d.ts +10 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/extended-timeout-testing.test.d.ts +24 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/heartbeat-warning-system.test.d.ts +21 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/redis-health-monitor.test.d.ts +22 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/signal-ack-protocol.test.d.ts +21 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/sqlite-memory-manager.test.d.ts +19 -0
- package/.claude-flow-novice/dist/cfn-loop/__tests__/test-utilities.d.ts +133 -0
- package/.claude-flow-novice/dist/cfn-loop/agent-lifecycle-sqlite.d.ts +143 -0
- package/.claude-flow-novice/dist/cfn-loop/blocking-coordination-signals.d.ts +178 -0
- package/.claude-flow-novice/dist/cfn-loop/blocking-coordination.d.ts +268 -0
- package/.claude-flow-novice/dist/cfn-loop/byzantine-consensus-adapter.d.ts +193 -0
- package/.claude-flow-novice/dist/cfn-loop/cfn-loop-memory-manager.d.ts +221 -0
- package/.claude-flow-novice/dist/cfn-loop/cfn-loop-orchestrator.d.ts +193 -1
- package/.claude-flow-novice/dist/cfn-loop/checkpoint-serializer.d.ts +113 -0
- package/.claude-flow-novice/dist/cfn-loop/circuit-breaker.d.ts +8 -2
- package/.claude-flow-novice/dist/cfn-loop/conflict-resolver.d.ts +221 -0
- package/.claude-flow-novice/dist/cfn-loop/consensus/enterprise-planning-consensus.d.ts +61 -0
- package/.claude-flow-novice/dist/cfn-loop/consensus/mvp-consensus.d.ts +33 -0
- package/.claude-flow-novice/dist/cfn-loop/coordination-validator.d.ts +121 -0
- package/.claude-flow-novice/dist/cfn-loop/coordinator-timeout-handler.d.ts +195 -0
- package/.claude-flow-novice/dist/cfn-loop/crash-detector.d.ts +138 -0
- package/.claude-flow-novice/dist/cfn-loop/epic-report-generator.d.ts +136 -0
- package/.claude-flow-novice/dist/cfn-loop/git-checkpoint-integration.example.d.ts +13 -0
- package/.claude-flow-novice/dist/cfn-loop/git-checkpoint-manager.d.ts +165 -0
- package/.claude-flow-novice/dist/cfn-loop/heartbeat-integration-example.d.ts +16 -0
- package/.claude-flow-novice/dist/cfn-loop/heartbeat-warning-system.d.ts +202 -0
- package/.claude-flow-novice/dist/cfn-loop/meta-coordinator.d.ts +208 -0
- package/.claude-flow-novice/dist/cfn-loop/modes/__tests__/mode-selection.test.d.ts +9 -0
- package/.claude-flow-novice/dist/cfn-loop/modes/enterprise-mode.d.ts +37 -0
- package/.claude-flow-novice/dist/cfn-loop/modes/index.d.ts +111 -0
- package/.claude-flow-novice/dist/cfn-loop/modes/mvp-mode.d.ts +31 -0
- package/.claude-flow-novice/dist/cfn-loop/modes/standard-mode.d.ts +31 -0
- package/.claude-flow-novice/dist/cfn-loop/modes/types.d.ts +135 -0
- package/.claude-flow-novice/dist/cfn-loop/product-owner/enterprise-owner-team.d.ts +50 -0
- package/.claude-flow-novice/dist/cfn-loop/product-owner/mvp-owner.d.ts +31 -0
- package/.claude-flow-novice/dist/cfn-loop/recovery-engine.d.ts +183 -0
- package/.claude-flow-novice/dist/cfn-loop/redis-health-integration-example.d.ts +13 -0
- package/.claude-flow-novice/dist/cfn-loop/redis-health-monitor.d.ts +164 -0
- package/.claude-flow-novice/dist/cfn-loop/redis-pubsub-helpers.d.ts +230 -0
- package/.claude-flow-novice/dist/cfn-loop/sprint-coordinator-enhanced.d.ts +199 -0
- package/.claude-flow-novice/dist/cfn-loop/state-checkpoint-manager.d.ts +198 -0
- package/.claude-flow-novice/dist/cfn-loop/test-aggregator.d.ts +205 -0
- package/.claude-flow-novice/dist/cfn-loop/test-lock-coordinator.d.ts +176 -0
- package/.claude-flow-novice/dist/cfn-loop/test-product-owner-decision.d.ts +19 -0
- package/.claude-flow-novice/dist/cfn-loop/types.d.ts +174 -0
- package/.claude-flow-novice/dist/cfn-loop/validator-methods-replacement.d.ts +68 -0
- package/.claude-flow-novice/dist/cli/cleanup-orphans.d.ts +54 -0
- package/.claude-flow-novice/dist/cli/commands/agent-lifecycle.d.ts +226 -0
- package/.claude-flow-novice/dist/cli/commands/cfn-loop-parallel.d.ts +21 -0
- package/.claude-flow-novice/dist/cli/commands/recovery-resume.d.ts +33 -0
- package/.claude-flow-novice/dist/cli/commands/recovery-status.d.ts +57 -0
- package/.claude-flow-novice/dist/cli/commands/recovery.d.ts +88 -0
- package/.claude-flow-novice/dist/cli/commands/validate-coordination.d.ts +14 -0
- package/.claude-flow-novice/dist/cli/node-compat.d.ts +1 -1
- package/.claude-flow-novice/dist/cli/simple-commands/hive-mind/queen.d.ts +3 -3
- package/.claude-flow-novice/dist/cli/utils/interactive-detector.d.ts +1 -1
- package/.claude-flow-novice/dist/cli/utils/redis-client.d.ts +1 -5
- package/.claude-flow-novice/dist/consensus/byzantine-coordinator.d.ts +314 -0
- package/.claude-flow-novice/dist/constants/agent-types.d.ts +2 -2
- package/.claude-flow-novice/dist/coordination/hive-orchestrator.d.ts +1 -1
- package/.claude-flow-novice/dist/coordination/validation-schemas.d.ts +12 -12
- package/.claude-flow-novice/dist/hooks/index.d.ts +1 -1
- package/.claude-flow-novice/dist/hooks/useSwarmRealtimeData.d.ts +11 -11
- package/.claude-flow-novice/dist/memory/advanced-memory-manager.d.ts +1 -0
- package/.claude-flow-novice/dist/memory/backends/sqlite.d.ts +1 -0
- package/.claude-flow-novice/dist/memory/distributed-memory.d.ts +1 -0
- package/.claude-flow-novice/dist/memory/secret-detector.d.ts +131 -0
- package/.claude-flow-novice/dist/memory/sqlite-enhanced-backend.d.ts +1 -0
- package/.claude-flow-novice/dist/monitoring/memory-leak-dashboard-widget.d.ts +194 -0
- package/.claude-flow-novice/dist/providers/api-key-rotation-example.d.ts +54 -0
- package/.claude-flow-novice/dist/providers/api-key-rotator.d.ts +166 -0
- package/.claude-flow-novice/dist/providers/rate-limit-detector.d.ts +60 -0
- package/.claude-flow-novice/dist/redis/RedisHealthMonitor.d.ts +162 -0
- package/.claude-flow-novice/dist/redis/health-integration-example.d.ts +86 -0
- package/.claude-flow-novice/dist/services/swarm-memory-manager.d.ts +1 -0
- package/.claude-flow-novice/dist/src/agents/heartbeat-manager.js +144 -0
- package/.claude-flow-novice/dist/src/agents/lifecycle-cleanup-enhanced.js +514 -0
- package/.claude-flow-novice/dist/src/automation/test-pipeline/PipelineValidator.js +1 -1
- package/.claude-flow-novice/dist/src/automation/test-pipeline/SwarmTestCoordinator.js +1 -1
- package/.claude-flow-novice/dist/src/cfn-loop/agent-lifecycle-sqlite.js +385 -0
- package/.claude-flow-novice/dist/src/cfn-loop/blocking-coordination-signals.js +470 -0
- package/.claude-flow-novice/dist/src/cfn-loop/blocking-coordination.js +768 -0
- package/.claude-flow-novice/dist/src/cfn-loop/byzantine-consensus-adapter.js +548 -0
- package/.claude-flow-novice/dist/src/cfn-loop/cfn-loop-memory-manager.js +589 -0
- package/.claude-flow-novice/dist/src/cfn-loop/cfn-loop-orchestrator.js +1059 -21
- package/.claude-flow-novice/dist/src/cfn-loop/checkpoint-serializer.js +308 -0
- package/.claude-flow-novice/dist/src/cfn-loop/circuit-breaker.js +34 -9
- package/.claude-flow-novice/dist/src/cfn-loop/conflict-resolver.js +525 -0
- package/.claude-flow-novice/dist/src/cfn-loop/consensus/enterprise-planning-consensus.js +403 -0
- package/.claude-flow-novice/dist/src/cfn-loop/consensus/mvp-consensus.js +235 -0
- package/.claude-flow-novice/dist/src/cfn-loop/coordination-validator.js +304 -0
- package/.claude-flow-novice/dist/src/cfn-loop/coordinator-timeout-handler.js +600 -0
- package/.claude-flow-novice/dist/src/cfn-loop/crash-detector.js +362 -0
- package/.claude-flow-novice/dist/src/cfn-loop/epic-report-generator.js +283 -0
- package/.claude-flow-novice/dist/src/cfn-loop/git-checkpoint-integration.example.js +161 -0
- package/.claude-flow-novice/dist/src/cfn-loop/git-checkpoint-manager.js +486 -0
- package/.claude-flow-novice/dist/src/cfn-loop/heartbeat-integration-example.js +187 -0
- package/.claude-flow-novice/dist/src/cfn-loop/heartbeat-warning-system.js +492 -0
- package/.claude-flow-novice/dist/src/cfn-loop/meta-coordinator.js +538 -0
- package/.claude-flow-novice/dist/src/cfn-loop/modes/enterprise-mode.js +132 -0
- package/.claude-flow-novice/dist/src/cfn-loop/modes/index.js +191 -0
- package/.claude-flow-novice/dist/src/cfn-loop/modes/mvp-mode.js +79 -0
- package/.claude-flow-novice/dist/src/cfn-loop/modes/standard-mode.js +81 -0
- package/.claude-flow-novice/dist/src/cfn-loop/modes/types.js +41 -0
- package/.claude-flow-novice/dist/src/cfn-loop/product-owner/enterprise-owner-team.js +380 -0
- package/.claude-flow-novice/dist/src/cfn-loop/product-owner/mvp-owner.js +170 -0
- package/.claude-flow-novice/dist/src/cfn-loop/recovery-engine.js +546 -0
- package/.claude-flow-novice/dist/src/cfn-loop/redis-health-integration-example.js +215 -0
- package/.claude-flow-novice/dist/src/cfn-loop/redis-health-monitor.js +414 -0
- package/.claude-flow-novice/dist/src/cfn-loop/redis-pubsub-helpers.js +463 -0
- package/.claude-flow-novice/dist/src/cfn-loop/sprint-coordinator-enhanced.js +466 -0
- package/.claude-flow-novice/dist/src/cfn-loop/state-checkpoint-manager.js +402 -0
- package/.claude-flow-novice/dist/src/cfn-loop/test-aggregator.js +476 -0
- package/.claude-flow-novice/dist/src/cfn-loop/test-lock-coordinator.js +446 -0
- package/.claude-flow-novice/dist/src/cfn-loop/test-product-owner-decision.js +69 -0
- package/.claude-flow-novice/dist/src/cfn-loop/types.js +30 -0
- package/.claude-flow-novice/dist/src/cfn-loop/validator-methods-replacement.js +362 -0
- package/.claude-flow-novice/dist/src/cli/cleanup-orphans.js +246 -0
- package/.claude-flow-novice/dist/src/cli/commands/agent-lifecycle.js +1058 -0
- package/.claude-flow-novice/dist/src/cli/commands/cfn-loop-parallel.js +436 -0
- package/.claude-flow-novice/dist/src/cli/commands/index.js +86 -0
- package/.claude-flow-novice/dist/src/cli/commands/parse-epic.js +64 -2
- package/.claude-flow-novice/dist/src/cli/commands/recovery-resume.js +369 -0
- package/.claude-flow-novice/dist/src/cli/commands/recovery-status.js +265 -0
- package/.claude-flow-novice/dist/src/cli/commands/recovery.js +546 -0
- package/.claude-flow-novice/dist/src/cli/commands/validate-coordination.js +211 -0
- package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/CLAUDE-backup-pre-enterprise-loop.md +735 -0
- package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/CLAUDE.md +176 -326
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/transparency-system.js +1 -1
- package/.claude-flow-novice/dist/src/memory/advanced-memory-manager.js +17 -2
- package/.claude-flow-novice/dist/src/memory/backends/sqlite.js +23 -1
- package/.claude-flow-novice/dist/src/memory/distributed-memory.js +18 -3
- package/.claude-flow-novice/dist/src/memory/secret-detector.js +253 -0
- package/.claude-flow-novice/dist/src/memory/sqlite-enhanced-backend.js +20 -1
- package/.claude-flow-novice/dist/src/monitoring/memory-leak-dashboard-widget.js +421 -0
- package/.claude-flow-novice/dist/src/observability/prometheus-metrics.d.js +8 -0
- package/.claude-flow-novice/dist/src/providers/api-key-rotation-example.js +165 -0
- package/.claude-flow-novice/dist/src/providers/api-key-rotator.js +412 -0
- package/.claude-flow-novice/dist/src/providers/rate-limit-detector.js +193 -0
- package/.claude-flow-novice/dist/src/redis/RedisHealthMonitor.js +429 -0
- package/.claude-flow-novice/dist/src/redis/health-integration-example.js +353 -0
- package/.claude-flow-novice/dist/src/services/swarm-memory-manager.js +72 -42
- package/.claude-flow-novice/dist/src/sqlite/ACLEnforcer.cjs +928 -0
- package/.claude-flow-novice/dist/src/sqlite/AgentRegistry.cjs +702 -0
- package/.claude-flow-novice/dist/src/sqlite/AgentRegistry.js +702 -0
- package/.claude-flow-novice/dist/src/sqlite/EncryptionKeyManager.cjs +754 -0
- package/.claude-flow-novice/dist/src/sqlite/EncryptionKeyManager.js +754 -0
- package/.claude-flow-novice/dist/src/sqlite/MemoryStoreAdapter.cjs +571 -0
- package/.claude-flow-novice/dist/src/sqlite/MemoryStoreAdapter.js +571 -0
- package/.claude-flow-novice/dist/src/sqlite/MultiLayerCache.cjs +640 -0
- package/.claude-flow-novice/dist/src/sqlite/MultiLayerCache.js +640 -0
- package/.claude-flow-novice/dist/src/sqlite/RedisCoordinator.cjs +636 -0
- package/.claude-flow-novice/dist/src/sqlite/RedisCoordinator.js +636 -0
- package/.claude-flow-novice/dist/src/sqlite/SwarmMemoryManager.cjs +750 -0
- package/.claude-flow-novice/dist/src/sqlite/SwarmMemoryManager.js +750 -0
- package/.claude-flow-novice/dist/src/sqlite/index.cjs +620 -0
- package/.claude-flow-novice/dist/src/sqlite/index.js +620 -0
- package/.claude-flow-novice/dist/src/sqlite/performance-benchmarks.cjs +839 -0
- package/.claude-flow-novice/dist/src/sqlite/performance-benchmarks.js +839 -0
- package/.claude-flow-novice/dist/src/testing/performance/PerformanceTestRunner.js +1 -1
- package/.claude-flow-novice/dist/src/wasm-regex-engine/pkg/wasm_regex_engine.d.js +11 -0
- package/.claude-flow-novice/dist/src/wasm-regex-engine/pkg/wasm_regex_engine_bg.wasm.d.js +28 -0
- package/.claude-flow-novice/dist/web/api/routes/parallel-status.d.ts +105 -0
- package/.claude-flow-novice/dist/web/dashboard/hooks/useWebSocket.d.ts +4 -4
- package/.claude-flow-novice/tsconfig.tsbuildinfo +1 -1
- package/AUTO_SETUP.md +271 -0
- package/CLAUDE.md +176 -326
- package/README.md +127 -30
- package/config/.env.example +17 -0
- package/config/cfn-loop/enterprise-criteria.json +207 -0
- package/config/cfn-loop/instructions/enterprise-instructions.md +506 -0
- package/config/cfn-loop/instructions/mvp-instructions.md +420 -0
- package/config/cfn-loop/instructions/standard-instructions.md +497 -0
- package/config/cfn-loop/mvp-criteria.json +133 -0
- package/config/docker/DEPLOYMENT_VALIDATION_RESULTS.md +1 -1
- package/config/docker/QUICK_START.txt +7 -5
- package/config/docker/STABILITY_TEST_README.md +10 -10
- package/config/hooks/AGENT_TEMPLATE_VALIDATOR_COMPLETION.md +440 -0
- package/config/hooks/BLOCKING_COORDINATION_VALIDATOR_IMPLEMENTATION_REPORT.md +559 -0
- package/config/hooks/BLOCKING_COORDINATION_VALIDATOR_README.md +467 -0
- package/config/hooks/CFN_LOOP_MEMORY_VALIDATOR_IMPLEMENTATION.md +343 -0
- package/config/hooks/COVERAGE_VALIDATOR_QUICK_START.md +218 -0
- package/config/hooks/POST_TEST_COVERAGE_README.md +657 -0
- package/config/hooks/README-AGENT-TEMPLATE-VALIDATOR.md +464 -0
- package/config/hooks/README-CFN-LOOP-MEMORY-VALIDATOR.md +442 -0
- package/config/hooks/TEST_COVERAGE_VALIDATOR_COMPLETION.md +497 -0
- package/config/hooks/WASM_REGEX_ENGINE.md +210 -0
- package/config/hooks/coverage.config.json +40 -0
- package/config/hooks/hook-manager.cjs +47 -0
- package/config/hooks/markdown-validator.js +202 -0
- package/config/hooks/post-edit-agent-template.js +607 -0
- package/config/hooks/post-edit-blocking-coordination.js +748 -0
- package/config/hooks/post-edit-cfn-loop-memory.cjs +503 -0
- package/config/hooks/post-edit-pipeline.js +290 -145
- package/config/hooks/post-test-coverage.js +981 -0
- package/config/hooks/pre-commit-db-scan +119 -0
- package/config/hooks/pre-edit-security.js +33 -6
- package/config/hooks/pre-tool-validation.js +60 -1
- package/config/hooks/safety-validator.js +236 -21
- package/config/hooks/safety-validator.js.backup +1323 -0
- package/config/hooks/validators/CWEValidator.js +152 -0
- package/config/hooks/validators/ComplianceValidator.js +187 -0
- package/config/hooks/validators/DependencyScanner.js +162 -0
- package/config/hooks/validators/InputSanitizer.js +134 -0
- package/config/hooks/validators/OWASPValidator.js +197 -0
- package/config/hooks/validators/SecurityPatternScanner.js +318 -0
- package/config/jest/jest.config.js +12 -1
- package/docs/PRE_COMMIT_HOOK.md +294 -0
- package/docs/README.md +130 -153
- package/docs/TEST_INFRASTRUCTURE.md +381 -0
- package/docs/agent-lifecycle-hooks.md +860 -0
- package/docs/api/FUNCTION_CATALOG.md +584 -0
- package/docs/api/ROUTING_QUICK_REFERENCE.md +117 -0
- package/docs/api/VALIDATION_QUICK_REFERENCE.md +172 -0
- package/docs/api/blocking-coordination-api.md +1451 -0
- package/docs/architecture/MULTI_SWARM_COORDINATION_README.md +620 -0
- package/docs/architecture/README_REALTIME_COMMUNICATION.md +463 -0
- package/docs/architecture/REALTIME_COMMUNICATION_ANALYSIS.md +321 -0
- package/docs/architecture/WASM_ARCHITECTURE_SUMMARY.md +429 -0
- package/docs/architecture/WASM_INTEGRATION_ARCHITECTURE.md +1330 -0
- package/docs/archive/2025-10-10-architecture/deprecated-implementations/BLOCKING_COORDINATION_VALIDATION_FINAL.md +334 -0
- package/docs/archive/2025-10-10-architecture/deprecated-implementations/blocking-coordination-pattern.md +484 -0
- package/docs/archive/2025-10-10-architecture/deprecated-implementations/production-blocking-coordination-plan.md +764 -0
- package/docs/archive/2025-10-10-architecture/deprecated-implementations/revised-production-blocking-plan.md +614 -0
- package/docs/archive/2025-10-10-architecture/implementation-guides/WASM_IMPLEMENTATION_GUIDE.md +1011 -0
- package/docs/archive/2025-10-10-architecture/implementation-guides/WASM_ROLLOUT_PLAN.md +701 -0
- package/docs/archive/2025-10-10-architecture/implementation-guides/agent-lifecycle-implementation-plan.md +1428 -0
- package/docs/archive/2025-10-10-architecture/other-designs/CORRECTED-task-tool-constraints.md +366 -0
- package/docs/archive/2025-10-10-architecture/other-designs/claude-code-task-tool-constraints.md +401 -0
- package/docs/archive/2025-10-10-architecture/other-designs/cleanup-architecture-explanation.md +423 -0
- package/docs/archive/2025-10-10-guides/setup-guides/CONTRIBUTING.md +136 -0
- package/docs/archive/2025-10-10-guides/setup-guides/DEVELOPMENT_SETUP.md +486 -0
- package/docs/archive/2025-10-10-guides/setup-guides/EXAMPLES.md +793 -0
- package/docs/archive/2025-10-10-guides/setup-guides/INSTALLATION.md +608 -0
- package/docs/archive/2025-10-10-guides/setup-guides/QUICK_START_INSTALLATION.md +521 -0
- package/docs/archive/2025-10-10-guides/setup-guides/README.md +162 -0
- package/docs/archive/2025-10-10-guides/setup-guides/TROUBLESHOOTING.md +1388 -0
- package/docs/archive/2025-10-10-operations/ARCHIVE_MIGRATION_PLAN.md +214 -0
- package/docs/archive/2025-10-10-performance/wasm-deliverables/WASM_DELIVERABLES.md +421 -0
- package/docs/archive/ARCHIVAL_EXECUTION_REPORT_2025-10-10.md +219 -0
- package/docs/archive/HTTP_POLLING_FALLBACK.md +283 -0
- package/docs/archive/reference-historical/BACKUP_MANIFEST.md +32 -0
- package/docs/archive/reference-historical/README-PHASE4.md +355 -0
- package/docs/archive/reference-historical/READMEv2.md +524 -0
- package/docs/deployment/blocking-coordination-secrets.md +1445 -0
- package/docs/implementation/SQLITE_INTEGRATION_IMPLEMENTATION.md +663 -0
- package/docs/integration/cfn-loop-examples.md +1107 -0
- package/docs/observability/prometheus-setup.md +455 -0
- package/docs/operations/OPERATIONS_FOLDER_REVIEW_REPORT.json +135 -0
- package/docs/operations/failure-recovery-playbook.md +877 -0
- package/docs/operations/monitoring-runbook.md +880 -0
- package/docs/patterns/blocking-coordination-pattern.md +642 -0
- package/docs/reference/CHANGELOG-POST-EDIT-PIPELINE.md +370 -0
- package/docs/reference/MANUAL_NPM_PUBLICATION_GUIDE.md +248 -0
- package/docs/security/SEC-002-race-condition-fix.md +300 -0
- package/docs/security/SEC-003-JSON-VALIDATION.md +215 -0
- package/docs/testing/chaos-engineering.md +524 -0
- package/docs/training/best-practices.md +1241 -0
- package/docs/training/faq.md +1483 -0
- package/docs/training/interactive-tutorial.md +966 -0
- package/docs/training/troubleshooting-guide.md +1279 -0
- package/docs/training/video-walkthrough-script.md +675 -0
- package/examples/demonstrations/phase5-demonstration.cjs +227 -0
- package/examples/rest-api-simple/sparc-implementation-roadmap.md +1 -1
- package/examples/rest-api-simple/sparc-implementation-roadmap.md.backup-1760135091708 +190 -0
- package/examples/templates/basic-swarm/CLAUDE.md +464 -0
- package/examples/templates/custom-agent/CLAUDE.md +299 -0
- package/examples/templates/custom-agent/package.json +26 -0
- package/examples/templates/event-bus/package.json +28 -0
- package/examples/templates/fleet-manager/CLAUDE.md +134 -0
- package/examples/templates/fleet-manager/package.json +28 -0
- package/package.json +60 -18
- package/readme/additional-commands.md +365 -2
- package/readme/cfn-loop-modes.md +527 -0
- package/readme/logs-cli-redis.md +82 -14
- package/readme/logs-documentation-index.md +8 -0
- package/readme/logs-features.md +188 -24
- package/readme/logs-slash-commands.md +35 -11
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dev/demo-phase3-compliance.js +2 -2
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/performance-test-runner.js +7 -7
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +30 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitoring/README.md +6 -6
- package/scripts/monitoring/analyze-resources.sh +1 -1
- package/scripts/monitoring/dynamic-monitor.sh +4 -4
- package/scripts/monitoring/test-monitor-quick.sh +1 -1
- package/scripts/performance-test-runner.js +7 -7
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +13 -8
- package/scripts/test/quick-multilingual-demo.js +2 -2
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +44 -14
- package/src/cli/simple-commands/init/templates/CLAUDE-backup-pre-enterprise-loop.md +735 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md +176 -326
- package/src/observability/blocking-coordination-metrics.js +161 -0
- package/src/observability/prometheus-metrics.d.ts +21 -0
- package/src/observability/prometheus-metrics.js +280 -0
- package/wiki/tutorials/beginner/04-quality-testing.md +3 -3
- package/.claude/agents/analyst.md +0 -300
- package/.claude/agents/architect.md +0 -558
- package/.claude/agents/base-template-generator.md +0 -65
- package/.claude/agents/coder.md +0 -181
- package/.claude/agents/planner.md +0 -135
- package/.claude/agents/researcher.md +0 -185
- package/.claude/agents/reviewer.md +0 -293
- package/.claude/agents/task-coordinator.md +0 -126
- package/.claude/agents/tester.md +0 -664
- package/MCP_DEPRECATION_COMPLETE.md +0 -375
- package/V2.0.0_READY_FOR_PUBLICATION.md +0 -417
- package/V2_RELEASE_SUMMARY.md +0 -568
- package/docs/DEPLOYMENT.md +0 -523
- package/docs/TROUBLESHOOTING.md +0 -1388
- package/docs/agent-token-analysis-results.json +0 -1329
- package/docs/architecture/agent-lifecycle-implementation-plan.md +0 -1428
- package/templates/custom-agent/package.json +0 -26
- package/templates/event-bus/package.json +0 -28
- package/templates/fleet-manager/package.json +0 -28
- /package/.claude/{agents → agents-ignore}/benchmarking-tests/test-agent-code-heavy.md +0 -0
- /package/.claude/{agents → agents-ignore}/benchmarking-tests/test-agent-metadata.md +0 -0
- /package/.claude/{agents → agents-ignore}/benchmarking-tests/test-agent-minimal.md +0 -0
- /package/.claude/{agents/coordinator.md → agents-ignore/coordinator-backup.md} +0 -0
- /package/.claude/{agents → agents-ignore}/data/ml/data-ml-model.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/code-review-swarm.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/github-modes.md +0 -0
- /package/.claude/{agents/templates → agents-ignore/github}/github-pr-manager.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/github-specialist.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/issue-tracker.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/multi-repo-swarm.md +0 -0
- /package/.claude/{agents/devops/ci-cd → agents-ignore/github}/ops-cicd-github.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/pr-manager.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/project-board-sync.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/release-manager.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/release-swarm.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/repo-architect.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/swarm-issue.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/swarm-pr.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/sync-coordinator.md +0 -0
- /package/.claude/{agents → agents-ignore}/github/workflow-automation.md +0 -0
- /package/.claude/{agents → agents-ignore}/neural/neural-pattern-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/neural/safla-neural.md +0 -0
- /package/.claude/{agents → agents-ignore}/optimization/benchmark-suite.md +0 -0
- /package/.claude/{agents → agents-ignore}/optimization/load-balancer.md +0 -0
- /package/.claude/{agents → agents-ignore}/optimization/perf-analyzer.md +0 -0
- /package/.claude/{agents → agents-ignore}/optimization/performance-monitor.md +0 -0
- /package/.claude/{agents → agents-ignore}/optimization/resource-allocator.md +0 -0
- /package/.claude/{agents → agents-ignore}/optimization/topology-optimizer.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/consciousness-evolution-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/matrix-solver-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/nanosecond-scheduler-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/pagerank-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/phi-calculator-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/psycho-symbolic-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/sublinear.md +0 -0
- /package/.claude/{agents → agents-ignore}/sublinear/temporal-advantage-agent.md +0 -0
- /package/.claude/{agents/architecture → agents-ignore}/system-design/arch-system-design.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/automation-smart-agent.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/coordinator-swarm-init.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/implementer-sparc-coder.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/memory-coordinator.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/migration-plan.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/orchestrator-task.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/performance-analyzer.md +0 -0
- /package/.claude/{agents → agents-ignore}/templates/sparc-coordinator.md +0 -0
- /package/{.claude/agents/specialized → .claude-flow-novice/.claude/agents/agent-principles}/CODER_AGENT_GUIDELINES.md +0 -0
- /package/docs/{API.md → api/API.md} +0 -0
- /package/docs/{CONFIGURATION.md → api/CONFIGURATION.md} +0 -0
- /package/docs/{PROVIDER_ROUTING_CONFIGURATION.md → api/PROVIDER_ROUTING_CONFIGURATION.md} +0 -0
- /package/docs/{PROVIDER_ROUTING_VERIFICATION.md → api/PROVIDER_ROUTING_VERIFICATION.md} +0 -0
- /package/docs/{ROUTING_FLOW_DIAGRAM.md → api/ROUTING_FLOW_DIAGRAM.md} +0 -0
- /package/{AGENT_PERFORMANCE_GUIDELINES.md → docs/architecture/AGENT_PERFORMANCE_GUIDELINES.md} +0 -0
- /package/docs/{EVENTEMITTER_CLEANUP_PATTERN.md → architecture/EVENTEMITTER_CLEANUP_PATTERN.md} +0 -0
- /package/docs/{REDIS_COORDINATION_SYSTEM.md → architecture/REDIS_COORDINATION_SYSTEM.md} +0 -0
- /package/docs/{SYSTEM_ARCHITECTURE.md → architecture/SYSTEM_ARCHITECTURE.md} +0 -0
- /package/docs/{consensus → architecture/consensus}/QUORUM_VERIFICATION_GUIDE.md +0 -0
- /package/docs/{consensus → architecture/consensus}/README.md +0 -0
- /package/docs/{consensus → architecture/consensus}/consensus-verification-1758747665635.json +0 -0
- /package/docs/{agents → archive/2025-10-10-architecture/agent-subdirectory}/MIGRATION_SUMMARY.md +0 -0
- /package/docs/{agents → archive/2025-10-10-architecture/agent-subdirectory}/README.md +0 -0
- /package/docs/{agent-booster-architecture.md → archive/2025-10-10-architecture/agent-subdirectory/agent-booster-architecture.md} +0 -0
- /package/docs/{agent-prompt-guidelines.md → archive/2025-10-10-architecture/agent-subdirectory/agent-prompt-guidelines.md} +0 -0
- /package/docs/{agent-token-usage-analysis-report.md → archive/2025-10-10-architecture/agent-subdirectory/agent-token-usage-analysis-report.md} +0 -0
- /package/docs/{agents → archive/2025-10-10-architecture/agent-subdirectory}/consensus-README.md +0 -0
- /package/docs/{agents → archive/2025-10-10-architecture/agent-subdirectory}/dependency-tracking-examples.md +0 -0
- /package/docs/{agents → archive/2025-10-10-architecture/agent-subdirectory}/optimization-README.md +0 -0
- /package/docs/{agents → archive/2025-10-10-architecture/agent-subdirectory}/swarm-README.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/CONSENSUS-COMPARISON.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/ROUND-5-EXECUTIVE-SUMMARY.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/consolidated-consensus-report.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-consensus-round-2.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-3-consensus-summary.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-3-validator-1.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-3-validator-2.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-3-validator-3.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-3-validator-4.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-4-consensus-summary.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-4-validator-1.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-4-validator-2.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-4-validator-3.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-4-validator-4.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-round-5-final-consensus.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/fullstack-swarm-consensus-report.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/post-edit-consensus-round-2.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/raft-implementation-summary.md +0 -0
- /package/docs/{consensus → archive/2025-10-10-architecture/consensus-rounds}/verification-summary.md +0 -0
- /package/docs/{comprehensive-mcp-solution-architecture.md → archive/2025-10-10-architecture/deprecated-implementations/comprehensive-mcp-solution-architecture.md} +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture}/experimental/ExperimentalFeaturesArchitecture.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/frontend-specific}/frontend-agent-ecosystem-integration.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/frontend-specific}/frontend-agent-technical-decisions.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/frontend-specific}/frontend-backend-coordination-interfaces.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/frontend-specific}/react-frontend-agent-specification.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/github-specific}/github-agent-consolidation-architecture.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/github-specific}/github-architecture-diagrams.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/implementation-guides}/agent-lifecycle-implementation-guide.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/implementation-guides}/implementation-guide.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/implementation-guides}/implementation-specifications.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/implementation-guides}/integration-guide.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/implementation-guides}/performance-optimization-guide.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/old-summaries}/architecture-summary-report.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/old-summaries}/fullstack-swarm-implementation-summary.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/old-summaries}/ultra-fast-communication-summary.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/agent-discovery-registration-system.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/agent-lifecycle-management-architecture.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/architectural-decisions.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/architecture-decision-records.md +0 -0
- /package/docs/{claude-soul-implementation.md → archive/2025-10-10-architecture/other-designs/claude-soul-implementation.md} +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/file-based-cross-team-communication.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/full-stack-swarm-team-specification.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/fullstack-communication-integration.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/stage3-unified-system-architecture.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/ultra-fast-communication-bus-design.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/other-designs}/zero-latency-communication-architecture.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/dynamic-agent-spawning-architecture.md +0 -0
- /package/docs/{fleet-manager-design.md → archive/2025-10-10-architecture/specific-feature-specs/fleet-manager-design.md} +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/fleet-manager-npm-architecture.md +0 -0
- /package/docs/{help-coordinator-implementation.md → archive/2025-10-10-architecture/specific-feature-specs/help-coordinator-implementation.md} +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/high-performance-memory-store.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/intelligent-configuration-system.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/message-serialization-compression-strategy.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/priority-queue-dead-letter-design.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/swarm-message-router-extension-design.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/swarm-router-implementation-spec.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/user-preference-storage-design.md +0 -0
- /package/docs/{architecture → archive/2025-10-10-architecture/specific-feature-specs}/websocket-connection-scaling-design.md +0 -0
- /package/docs/{swarm-coordination-test-results.md → archive/2025-10-10-architecture/test-results/swarm-coordination-test-results.md} +0 -0
- /package/docs/{development → archive/2025-10-10-development}/COMPREHENSIVE_WORKFLOW_SYSTEM.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/DEVELOPMENT_WORKFLOW.md +0 -0
- /package/docs/{EXAMPLES.md → archive/2025-10-10-development/EXAMPLES.md} +0 -0
- /package/docs/{development → archive/2025-10-10-development}/SPARC.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/agent-scope-creep-prevention-guide.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/cargo-build-validator-summary.md +0 -0
- /package/docs/{development → archive/2025-10-10-development/cli-consolidation}/command-consolidation-technical-spec.md +0 -0
- /package/docs/{development → archive/2025-10-10-development/cli-consolidation}/consolidated-cli-implementation.md +0 -0
- /package/docs/{development → archive/2025-10-10-development/cli-consolidation}/consolidated-command-design.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/experimental-features-improvement-plan.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/feature-simplification-strategy.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/fullstack-swarm-fixes-round-1.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/fullstack-swarm-fixes-round-3.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/fullstack-swarm-fixes-round-4.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/fullstack-swarm-fixes-round-5.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/round-5-quick-reference.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/round-5-summary.md +0 -0
- /package/docs/{fixes → archive/2025-10-10-development/fixes}/round-5-visual-summary.md +0 -0
- /package/docs/{implementation → archive/2025-10-10-development/implementation}/configuration-system-specs.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/npm-packaging-solution.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/pair-optimization.md +0 -0
- /package/docs/{phase11-cli-integration-complete.md → archive/2025-10-10-development/phase-summaries/phase11-cli-integration-complete.md} +0 -0
- /package/docs/{phase4-deployment-summary.md → archive/2025-10-10-development/phase-summaries/phase4-deployment-summary.md} +0 -0
- /package/docs/{development → archive/2025-10-10-development}/rust-framework-detection.md +0 -0
- /package/docs/{SDK-INTEGRATION-TEST-SUMMARY.md → archive/2025-10-10-development/sdk-integration/SDK-INTEGRATION-TEST-SUMMARY.md} +0 -0
- /package/docs/{SDK-TESTING.md → archive/2025-10-10-development/sdk-integration/SDK-TESTING.md} +0 -0
- /package/docs/{claude-agent-sdk-integration-strategy.md → archive/2025-10-10-development/sdk-integration/claude-agent-sdk-integration-strategy.md} +0 -0
- /package/docs/{sdk-integration-phase1.md → archive/2025-10-10-development/sdk-integration/sdk-integration-phase1.md} +0 -0
- /package/docs/{sdk-migration-guide.md → archive/2025-10-10-development/sdk-integration/sdk-migration-guide.md} +0 -0
- /package/docs/{sdk-phase1-summary.md → archive/2025-10-10-development/sdk-integration/sdk-phase1-summary.md} +0 -0
- /package/docs/{swarm-fullstack → archive/2025-10-10-development/swarm-fullstack}/IMPLEMENTATION-SUMMARY.md +0 -0
- /package/docs/{swarm-fullstack → archive/2025-10-10-development/swarm-fullstack}/frontend-testing-system.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/technical-implementation-guide.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/token-tracking-guide.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/token-tracking-status.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/troubleshooting.md +0 -0
- /package/docs/{development → archive/2025-10-10-development}/typescript-distribution-solution.md +0 -0
- /package/docs/{personalization → archive/2025-10-10-guides/personalization}/cli-integration-guide.md +0 -0
- /package/docs/{phase4-ux → archive/2025-10-10-guides/phase4-ux}/error-handling-ux-guide.md +0 -0
- /package/docs/{phase4-ux → archive/2025-10-10-guides/phase4-ux}/rollout-monitoring-dashboard.md +0 -0
- /package/docs/{phase4-ux → archive/2025-10-10-guides/phase4-ux}/user-experience-validation-framework.md +0 -0
- /package/docs/{phase4-ux → archive/2025-10-10-guides/phase4-ux}/user-onboarding-experience.md +0 -0
- /package/docs/{NOVICE_USER_GUIDE.md → archive/2025-10-10-guides/setup-guides/NOVICE_USER_GUIDE.md} +0 -0
- /package/docs/{QUICK_START.md → archive/2025-10-10-guides/setup-guides/QUICK_START.md} +0 -0
- /package/docs/{SETUP_WIZARD.md → archive/2025-10-10-guides/setup-guides/SETUP_WIZARD.md} +0 -0
- /package/docs/{ZAIR_SETUP_CHECKLIST.md → archive/2025-10-10-guides/setup-guides/ZAIR_SETUP_CHECKLIST.md} +0 -0
- /package/docs/{user → archive/2025-10-10-guides/user-guides}/PREFERENCE_SYSTEM_GUIDE.md +0 -0
- /package/docs/{user → archive/2025-10-10-guides/user-guides}/USER_GUIDE.md +0 -0
- /package/docs/{user → archive/2025-10-10-guides/user-guides}/enterprise-stakeholder-guide.md +0 -0
- /package/docs/{user → archive/2025-10-10-guides/user-guides}/novice-user-guide.md +0 -0
- /package/docs/{user → archive/2025-10-10-guides/user-guides}/tutorial.md +0 -0
- /package/docs/{user → archive/2025-10-10-guides/user-guides}/ux-assessment-pain-points.md +0 -0
- /package/docs/{ux-design/mockups → archive/2025-10-10-guides/ux-design}/configuration-ui-mockups.md +0 -0
- /package/docs/{ux-design/wizards → archive/2025-10-10-guides/ux-design}/configuration-wizard-flows.md +0 -0
- /package/docs/{ux-design/ui-patterns → archive/2025-10-10-guides/ux-design}/progressive-disclosure-patterns.md +0 -0
- /package/docs/{ux-design → archive/2025-10-10-guides/ux-design}/usability-testing-plan.md +0 -0
- /package/docs/{ux-design/user-journeys → archive/2025-10-10-guides/ux-design}/user-personas-analysis.md +0 -0
- /package/docs/{ux-design/accessibility → archive/2025-10-10-guides/ux-design}/wcag-compliance-guidelines.md +0 -0
- /package/docs/{HOOK-COMPARISON.md → archive/2025-10-10-integration/HOOK-COMPARISON.md} +0 -0
- /package/docs/{POST-EDIT-PIPELINE-AGENT-INFO.md → archive/2025-10-10-integration/POST-EDIT-PIPELINE-AGENT-INFO.md} +0 -0
- /package/docs/{POST-EDIT-PIPELINE-MERGED.md → archive/2025-10-10-integration/POST-EDIT-PIPELINE-MERGED.md} +0 -0
- /package/docs/{POST-EDIT-PIPELINE-UNIFIED.md → archive/2025-10-10-integration/POST-EDIT-PIPELINE-UNIFIED.md} +0 -0
- /package/docs/{automation → archive/2025-10-10-integration/automation}/swarm-test-pipeline-strategy.md +0 -0
- /package/docs/{integration → archive/2025-10-10-integration/mcp-compatibility}/issue-772-implementation-plan.md +0 -0
- /package/docs/{mcp-backwards-compatibility.md → archive/2025-10-10-integration/mcp-compatibility/mcp-backwards-compatibility.md} +0 -0
- /package/docs/{mcp-novice-simplification.md → archive/2025-10-10-integration/mcp-compatibility/mcp-novice-simplification.md} +0 -0
- /package/docs/{slash-commands → archive/2025-10-10-integration/slash-commands}/cfn-claude-sync-usage.md +0 -0
- /package/docs/{slash-commands → archive/2025-10-10-integration/slash-commands}/cfn-loop-quick-reference.md +0 -0
- /package/docs/{slash-commands → archive/2025-10-10-integration/slash-commands}/cfn-loop-usage.md +0 -0
- /package/docs/{final-slash-commands-setup.md → archive/2025-10-10-integration/slash-commands/final-slash-commands-setup.md} +0 -0
- /package/docs/{commands → archive/2025-10-10-integration/slash-commands}/fullstack.md +0 -0
- /package/docs/{slash-commands-complete-status.md → archive/2025-10-10-integration/slash-commands/slash-commands-complete-status.md} +0 -0
- /package/docs/{slash-commands-status-report.md → archive/2025-10-10-integration/slash-commands/slash-commands-status-report.md} +0 -0
- /package/docs/{workflows → archive/2025-10-10-integration/workflows}/IMPLEMENTATION_SUMMARY.md +0 -0
- /package/docs/{workflows → archive/2025-10-10-integration/workflows}/README.md +0 -0
- /package/docs/{workflows → archive/2025-10-10-integration/workflows}/iterative-build-test-workflow.md +0 -0
- /package/docs/{DOCUMENTATION_AUTO_UPDATER_CHANGELOG.md → archive/2025-10-10-migration/deprecation-notices/DOCUMENTATION_AUTO_UPDATER_CHANGELOG.md} +0 -0
- /package/{MCP_DEPRECATION_NOTICE.md → docs/archive/2025-10-10-migration/deprecation-notices/MCP_DEPRECATION_NOTICE.md} +0 -0
- /package/docs/{migration → archive/2025-10-10-migration/deprecation-notices}/README.md +0 -0
- /package/docs/{deprecation-report.md → archive/2025-10-10-migration/deprecation-notices/deprecation-report.md} +0 -0
- /package/docs/{migration → archive/2025-10-10-migration/v2-migration}/COMPREHENSIVE_MIGRATION_GUIDE.md +0 -0
- /package/docs/{V1_TO_V2_MIGRATION.md → archive/2025-10-10-migration/v2-migration/V1_TO_V2_MIGRATION.md} +0 -0
- /package/{V2_MIGRATION_GUIDE.md → docs/archive/2025-10-10-migration/v2-migration/V2_MIGRATION_GUIDE.md} +0 -0
- /package/docs/{migration → archive/2025-10-10-migration/v2-migration}/migration-assessment-toolkit.md +0 -0
- /package/docs/{npm-package-updates.md → archive/2025-10-10-migration/v2-migration/npm-package-updates.md} +0 -0
- /package/docs/{migration → archive/2025-10-10-migration/v2-migration}/proven-migration-case-studies.md +0 -0
- /package/docs/{APM_INTEGRATION_GUIDE.md → archive/2025-10-10-operations/APM_INTEGRATION_GUIDE.md} +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/DEPLOYMENT.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/ENABLE_AUTHENTICATION.md +0 -0
- /package/docs/{HOW_METRICS_WORK.md → archive/2025-10-10-operations/HOW_METRICS_WORK.md} +0 -0
- /package/docs/{METRICS_PLACEMENT_STRATEGY.md → archive/2025-10-10-operations/METRICS_PLACEMENT_STRATEGY.md} +0 -0
- /package/docs/{PRODUCTION_OPERATIONS.md → archive/2025-10-10-operations/PRODUCTION_OPERATIONS.md} +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/RESOURCE_MANAGEMENT_IMPLEMENTATION_PLAN.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/RESOURCE_MANAGEMENT_TECHNICAL_SPECS.md +0 -0
- /package/docs/{SESSION_CLEANUP_SYSTEM.md → archive/2025-10-10-operations/SESSION_CLEANUP_SYSTEM.md} +0 -0
- /package/docs/{V2_TRANSPARENCY_SYSTEM.md → archive/2025-10-10-operations/V2_TRANSPARENCY_SYSTEM.md} +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/analytics-system.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/benchmarks}/benchmark-claude-flow-conflict-analysis.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/benchmarks}/benchmark-cleanup-analysis.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/benchmarks}/build-artifacts-analysis.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/byzantine-consensus}/FINAL_BYZANTINE_CONSENSUS_VERIFICATION_REPORT.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/byzantine-consensus}/byzantine-consensus-verification-report-phase2.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/byzantine-consensus}/byzantine-consensus-verification-report-phase4.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/chrome-mcp-research-report.md +0 -0
- /package/docs/{ci-cd → archive/2025-10-10-operations/ci-cd}/README.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/cli-command-consolidation-analysis.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/DEPLOYMENT_GUIDE.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/DEPLOYMENT_STRATEGIES.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/DISASTER_RECOVERY.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/DOCKER_SECURITY.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/HELM_CHARTS.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/INFRASTRUCTURE_AS_CODE.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/MONITORING_OBSERVABILITY.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/PERFORMANCE_OPTIMIZATION.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/README.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/pm2-setup.md +0 -0
- /package/docs/{deployment → archive/2025-10-10-operations/deployment}/production-deployment-guide.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/deployment-checklist.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/deployment-report.md +0 -0
- /package/docs/{metrics-counter-usage.md → archive/2025-10-10-operations/metrics-counter-usage.md} +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/migration-strategy.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/performance-analysis}/agent-analysis-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/performance-analysis}/agent-persistence-performance-analysis.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/performance-analysis}/performance-analysis-report.md +0 -0
- /package/docs/{runbooks → archive/2025-10-10-operations/runbooks}/DATABASE_PERFORMANCE_RUNBOOK.md +0 -0
- /package/docs/{runbooks → archive/2025-10-10-operations/runbooks}/EMERGENCY_RESPONSE_PROCEDURES.md +0 -0
- /package/docs/{runbooks → archive/2025-10-10-operations/runbooks}/SERVICE_OUTAGE_RUNBOOK.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/shadcn-mcp-swarm-research-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/training-pipeline-demo.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations}/training-pipeline-real-only.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/COMPREHENSIVE_QA_VALIDATION_REPORT.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/PRODUCTION_VALIDATION_REPORT.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/WIKI_VALIDATION_REPORT.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/checkpoint-1-3-validation-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/checkpoint-1-4-validation-summary.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/cli-validation-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/command-consolidation-usability-validation.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/configuration-system-validation-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/experimental-features-validation-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/final-validation-summary.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/unified-config-validation-report.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/validation-executive-summary.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/validator-scope-overreach-analysis.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/verification-integration.md +0 -0
- /package/docs/{operations → archive/2025-10-10-operations/validation-reports}/verification-validation.md +0 -0
- /package/docs/{performance → archive/2025-10-10-performance}/COMPREHENSIVE_SQLITE_ANALYSIS.md +0 -0
- /package/docs/{LRU_GARBAGE_COLLECTION.md → archive/2025-10-10-performance/LRU_GARBAGE_COLLECTION.md} +0 -0
- /package/docs/{OPTIMIZATION_SAFETY_REPORT.md → archive/2025-10-10-performance/OPTIMIZATION_SAFETY_REPORT.md} +0 -0
- /package/docs/{performance → archive/2025-10-10-performance}/Phase3-Remediation-Report.md +0 -0
- /package/docs/{benchmark-realistic-code-generation.md → archive/2025-10-10-performance/benchmarks/benchmark-realistic-code-generation.md} +0 -0
- /package/docs/{benchmark-rust-known-issues.md → archive/2025-10-10-performance/benchmarks/benchmark-rust-known-issues.md} +0 -0
- /package/docs/{benchmark-rust-support-summary.md → archive/2025-10-10-performance/benchmarks/benchmark-rust-support-summary.md} +0 -0
- /package/docs/{optimization → archive/2025-10-10-performance/optimization}/README.md +0 -0
- /package/docs/{optimization → archive/2025-10-10-performance/optimization}/communication-improvements.md +0 -0
- /package/docs/{performance → archive/2025-10-10-performance/optimization}/sqlite-performance-analysis.md +0 -0
- /package/docs/{security → archive/2025-10-10-security}/DEPLOYMENT_CHECKLIST.md +0 -0
- /package/docs/{security → archive/2025-10-10-security}/GIT_SECRETS_SETUP.md +0 -0
- /package/docs/{operations/SECURITY_AUDIT_REPORT.md → archive/2025-10-10-security/PACKAGE_SECURITY_AUDIT.md} +0 -0
- /package/docs/{security → archive/2025-10-10-security}/SECRET-DETECTION.md +0 -0
- /package/docs/{SECURITY_AUDIT_REPORT.md → archive/2025-10-10-security/SECRET_DETECTION_AUDIT.md} +0 -0
- /package/docs/{security → archive/2025-10-10-security/authentication}/JWT_AUTHENTICATION.md +0 -0
- /package/docs/{security → archive/2025-10-10-security/authentication}/MIGRATION_BASE64_TO_JWT.md +0 -0
- /package/docs/{security → archive/2025-10-10-security/authentication}/REDIS_AUTHENTICATION.md +0 -0
- /package/docs/{SECURITY_AUTH.md → archive/2025-10-10-security/authentication/SECURITY_AUTH.md} +0 -0
- /package/docs/{certification → archive/2025-10-10-security/certification}/FINAL-PRODUCTION-CERTIFICATION.md +0 -0
- /package/docs/{certification → archive/2025-10-10-security/certification}/README.md +0 -0
- /package/docs/{certification → archive/2025-10-10-security/certification}/fullstack-swarm-production-cert.md +0 -0
- /package/docs/{certification → archive/2025-10-10-security/certification}/post-edit-pipeline-production-cert.md +0 -0
- /package/docs/{security → archive/2025-10-10-security}/phase5-security-implementation-summary.md +0 -0
- /package/docs/{security → archive/2025-10-10-security}/sec-024-lamport-clock-implementation.md +0 -0
- /package/docs/{security → archive/2025-10-10-security/vulnerabilities}/CRYPTO_CIPHER_FIX_REPORT.md +0 -0
- /package/docs/{security → archive/2025-10-10-security/vulnerabilities}/CRYPTO_VULNERABILITY_SUMMARY.md +0 -0
- /package/docs/{security → archive/2025-10-10-security/vulnerabilities}/cve-2025-005-006-implementation.md +0 -0
- /package/docs/{security → archive/2025-10-10-security/vulnerabilities}/rbac-test-bypass-fix.md +0 -0
- /package/docs/{testing → archive/2025-10-10-testing}/README.md +0 -0
- /package/docs/{testing → archive/2025-10-10-testing}/consensus-decision-matrix.md +0 -0
- /package/docs/{testing → archive/2025-10-10-testing}/playwright-mcp-integration-guide.md +0 -0
- /package/docs/{CROSS_PLATFORM_TEST_RESULTS.md → archive/2025-10-10-testing/test-results/CROSS_PLATFORM_TEST_RESULTS.md} +0 -0
- /package/docs/{V2_MULTI_LEVEL_TEST_RESULTS.md → archive/2025-10-10-testing/test-results/V2_MULTI_LEVEL_TEST_RESULTS.md} +0 -0
- /package/docs/{backend-testing-system.md → archive/2025-10-10-testing/test-results/backend-testing-system.md} +0 -0
- /package/docs/{benchmark-test-report.md → archive/2025-10-10-testing/test-results/benchmark-test-report.md} +0 -0
- /package/docs/{testing → archive/2025-10-10-testing/test-results}/comprehensive-test-results.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/PRODUCTION-CERTIFICATION-SUMMARY.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/byzantine-consensus-coordination-report.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/byzantine-consensus-summary.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/completion-validation-verification-report.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/fullstack-integration-report.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/phase2-byzantine-consensus-verification-report.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/phase2-completion-consensus-report.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/stage5-consensus-report.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/stage6-final-certification.md +0 -0
- /package/docs/{validation → archive/2025-10-10-testing/validation}/stage7-production-certification.md +0 -0
- /package/docs/{ERROR_HANDLING_IMPLEMENTATION_SUMMARY.md → archive/ERROR_HANDLING_IMPLEMENTATION_SUMMARY.md} +0 -0
- /package/docs/{ERROR_MESSAGES_GUIDE.md → archive/ERROR_MESSAGES_GUIDE.md} +0 -0
- /package/docs/{HTTP_POLLING_FALLBACK.md → archive/HTTP_POLLING_FALLBACK.md.backup-1760135090706} +0 -0
- /package/docs/{phase2-implementation-summary.md → archive/cfn-loop/completed-phases/phase2-implementation-summary.md} +0 -0
- /package/docs/{CFN_LOOP.md → archive/cfn-loop/deprecated-3-loop/CFN_LOOP.md} +0 -0
- /package/docs/{validation-loop-pattern.md → archive/cfn-loop/early-patterns/validation-loop-pattern.md} +0 -0
- /package/docs/{MCP_ENDPOINTS_REFERENCE.md → archive/deprecated-mcp/MCP_ENDPOINTS_REFERENCE.md} +0 -0
- /package/docs/{api → archive/deprecated-mcp}/MCP_TOOLS.md +0 -0
- /package/docs/{api → archive/deprecated-mcp}/mcp-swarm-integration-api.md +0 -0
- /package/docs/{API_AUTH.md → archive/phase3-auth-unimplemented/API_AUTH.md} +0 -0
- /package/docs/{AUTHENTICATION.md → archive/phase3-auth-unimplemented/AUTHENTICATION.md} +0 -0
- /package/docs/{AUTH_DOCUMENTATION_SUMMARY.md → archive/phase3-auth-unimplemented/AUTH_DOCUMENTATION_SUMMARY.md} +0 -0
- /package/docs/{AUTH_MIGRATION.md → archive/phase3-auth-unimplemented/AUTH_MIGRATION.md} +0 -0
- /package/docs/{phase5-booster-integration-summary.md → archive/phase5-booster-integration-summary.md} +0 -0
- /package/{CHANGELOG_V2.md → docs/archive/reference-historical/CHANGELOG_V2.md} +0 -0
- /package/docs/{INDEX.md → archive/reference-historical/INDEX.md} +0 -0
- /package/docs/{CFN_LOOP_PHASE_ORCHESTRATION.md → cfn-loop/CFN_LOOP_PHASE_ORCHESTRATION.md} +0 -0
- /package/docs/{CFN_LOOP_SCOPE_CONTROL.md → cfn-loop/CFN_LOOP_SCOPE_CONTROL.md} +0 -0
- /package/docs/{CFN_LOOP_SELF_LOOPING_ADDITIONS.md → cfn-loop/CFN_LOOP_SELF_LOOPING_ADDITIONS.md} +0 -0
- /package/docs/{SPRINT_ORCHESTRATION.md → cfn-loop/SPRINT_ORCHESTRATION.md} +0 -0
- /package/docs/{epic-iteration-limits-implementation.md → cfn-loop/epic-iteration-limits-implementation.md} +0 -0
- /package/docs/{phase-5-sprint-5.2-multi-level-control.md → cfn-loop/phase-5-sprint-5.2-multi-level-control.md} +0 -0
- /package/docs/{phase-orchestrator-sprint-enhancement-summary.md → cfn-loop/phase-orchestrator-sprint-enhancement-summary.md} +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_06_ARCHITECTURE_SUMMARY.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_06_COMPONENT_INTERFACES.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_06_INTEGRATION_STRATEGY.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_06_MESH_COORDINATION_ARCHITECTURE.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_06_README.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_07_HELP_SYSTEM_ARCHITECTURE.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/PHASE_0_SDK_FOUNDATION.md +0 -0
- /package/docs/{phases → cfn-loop/phases}/phase-05-architecture.md +0 -0
- /package/docs/{self-validating-loops-implementation.md → cfn-loop/self-validating-loops-implementation.md} +0 -0
- /package/{CHANGELOG.md → docs/reference/CHANGELOG.md} +0 -0
- /package/{NPM_PACKAGE_CONTENTS.md → docs/reference/NPM_PACKAGE_CONTENTS.md} +0 -0
- /package/{README-NPM.md → docs/reference/README-NPM.md} +0 -0
- /package/docs/{SITE_MAP.md → reference/SITE_MAP.md} +0 -0
- /package/docs/{research → reference/research}/AGENT_ACCESSIBILITY_GUIDE.md +0 -0
- /package/docs/{research → reference/research}/AGENT_PERMISSION_SYSTEM_ANALYSIS.md +0 -0
- /package/docs/{research → reference/research}/CLAUDE_AGENT_SDK_COMPREHENSIVE_ANALYSIS.md +0 -0
- /package/docs/{research → reference/research}/CLAUDE_AGENT_SDK_EXECUTIVE_SUMMARY.md +0 -0
- /package/docs/{research → reference/research}/CLEANUP_CRITERIA_QUICK_REFERENCE.md +0 -0
- /package/docs/{research → reference/research}/claude-session-cpu-behavior-analysis.md +0 -0
- /package/docs/{research → reference/research}/completion-validation-research.md +0 -0
- /package/docs/{templates → reference/templates}/PHASE_DOCUMENT_TEMPLATE.md +0 -0
- /package/docs/{templates → reference/templates}/PHASE_TEMPLATE_USAGE_GUIDE.md +0 -0
- /package/docs/{TEMPLATE_CUSTOMIZATION_GUIDE.md → reference/templates/TEMPLATE_CUSTOMIZATION_GUIDE.md} +0 -0
- /package/docs/{TEMPLATE_EXAMPLES_AND_BEST_PRACTICES.md → reference/templates/TEMPLATE_EXAMPLES_AND_BEST_PRACTICES.md} +0 -0
- /package/docs/{TEMPLATE_SYSTEM_DOCUMENTATION.md → reference/templates/TEMPLATE_SYSTEM_DOCUMENTATION.md} +0 -0
- /package/docs/{wiki → reference/wiki}/background-commands.md +0 -0
- /package/docs/{wiki → reference/wiki}/efficiency-patterns-and-anti-patterns.md +0 -0
- /package/docs/{wiki → reference/wiki}/monitoring-and-metrics-guide.md +0 -0
- /package/docs/{wiki → reference/wiki}/performance-benchmarking-tools.md +0 -0
- /package/docs/{wiki → reference/wiki}/performance-optimization-strategies.md +0 -0
- /package/docs/{wiki → reference/wiki}/performance-testing-framework.md +0 -0
- /package/docs/{wiki → reference/wiki}/resource-optimization-techniques.md +0 -0
- /package/docs/{wiki → reference/wiki}/scalability-guidelines.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/README.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/authentication-authorization-strategies.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/compliance-automation-workflows.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/compliance-frameworks-integration.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/enterprise-security-patterns.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/incident-response-guide.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/secrets-management-guide.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/secure-coding-patterns.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/security-best-practices.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/security-first-development-workflows.md +0 -0
- /package/docs/{wiki → reference/wiki}/security/security-testing-framework.md +0 -0
- /package/docs/{wiki → reference/wiki}/session-persistence.md +0 -0
- /package/docs/{wiki → reference/wiki}/stream-chain-command.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/README.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/cli-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/configuration-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/debug-mode.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/error-analysis.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/linux-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/log-analysis.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/macos-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/mcp-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/performance-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/quick-reference.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting/windows-troubleshooting.md +0 -0
- /package/docs/{wiki → reference/wiki}/troubleshooting-slow-workflows.md +0 -0
- /package/docs/{CROSS_PLATFORM_VALIDATION_CONFIDENCE.json → testing/CROSS_PLATFORM_VALIDATION_CONFIDENCE.json} +0 -0
- /package/docs/{validation → testing/validation}/byzantine-validation-report.json +0 -0
- /package/{templates → examples/templates}/README.md +0 -0
- /package/{templates → examples/templates}/basic-swarm/.claude/settings.json +0 -0
- /package/{templates/basic-swarm/CLAUDE.md → examples/templates/basic-swarm/CLAUDE.md.backup-1760135091193} +0 -0
- /package/{templates → examples/templates}/basic-swarm/coordination.md +0 -0
- /package/{templates → examples/templates}/basic-swarm/memory-bank.md +0 -0
- /package/{templates → examples/templates}/basic-swarm/package.json +0 -0
- /package/{templates → examples/templates}/custom-agent/.claude/settings.json +0 -0
- /package/{templates/custom-agent/CLAUDE.md → examples/templates/custom-agent/CLAUDE.md.backup-1760135091180} +0 -0
- /package/{templates → examples/templates}/event-bus/.claude/settings.json +0 -0
- /package/{templates → examples/templates}/event-bus/CLAUDE.md +0 -0
- /package/{templates → examples/templates}/fleet-manager/.claude/settings.json +0 -0
- /package/{templates/fleet-manager/CLAUDE.md → examples/templates/fleet-manager/CLAUDE.md.backup-1760135091167} +0 -0
- /package/{docs → scripts}/agent-token-analysis.js +0 -0
|
@@ -0,0 +1,1241 @@
|
|
|
1
|
+
# Blocking Coordination Best Practices
|
|
2
|
+
|
|
3
|
+
**Version:** 1.0
|
|
4
|
+
**Last Updated:** 2025-10-10
|
|
5
|
+
**Audience:** DevOps Engineers, SREs, Backend Developers
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Timeout Selection
|
|
10
|
+
|
|
11
|
+
### Principle
|
|
12
|
+
**Timeouts should be 2× the expected task duration** to account for variance while preventing indefinite blocking.
|
|
13
|
+
|
|
14
|
+
### Guidelines by Environment
|
|
15
|
+
|
|
16
|
+
**Development (Fast Feedback)**
|
|
17
|
+
```typescript
|
|
18
|
+
const TIMEOUT_DEVELOPMENT = 5 * 60 * 1000; // 5 minutes
|
|
19
|
+
```
|
|
20
|
+
- **Use Case:** Local development, unit tests
|
|
21
|
+
- **Rationale:** Fast feedback loop for developers
|
|
22
|
+
- **Trade-off:** May timeout on slower machines
|
|
23
|
+
|
|
24
|
+
**Staging (Realistic Scenarios)**
|
|
25
|
+
```typescript
|
|
26
|
+
const TIMEOUT_STAGING = 15 * 60 * 1000; // 15 minutes
|
|
27
|
+
```
|
|
28
|
+
- **Use Case:** Integration tests, QA validation
|
|
29
|
+
- **Rationale:** Matches production load patterns
|
|
30
|
+
- **Trade-off:** Longer test runs
|
|
31
|
+
|
|
32
|
+
**Production (Accommodate Load)**
|
|
33
|
+
```typescript
|
|
34
|
+
const TIMEOUT_PRODUCTION = 30 * 60 * 1000; // 30 minutes
|
|
35
|
+
```
|
|
36
|
+
- **Use Case:** CFN Loop 2 consensus validation, Loop 4 GOAP decisions
|
|
37
|
+
- **Rationale:** Handles peak load, slow validators, network jitter
|
|
38
|
+
- **Trade-off:** Slower failure detection
|
|
39
|
+
|
|
40
|
+
### Dynamic Timeout Calculation
|
|
41
|
+
|
|
42
|
+
**Based on Historical Data**
|
|
43
|
+
```typescript
|
|
44
|
+
class CoordinatorWithAdaptiveTimeout extends BlockingCoordinator {
|
|
45
|
+
private async calculateTimeout(taskType: string): Promise<number> {
|
|
46
|
+
// Get P95 duration from metrics
|
|
47
|
+
const p95Duration = await this.metrics.getHistogramQuantile(
|
|
48
|
+
'blocking_coordination_duration_seconds',
|
|
49
|
+
0.95,
|
|
50
|
+
{ task_type: taskType }
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// 2× P95 with 5min minimum, 60min maximum
|
|
54
|
+
const timeout = Math.min(
|
|
55
|
+
Math.max(p95Duration * 2 * 1000, 5 * 60 * 1000),
|
|
56
|
+
60 * 60 * 1000
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return timeout;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async blockUntilSignal(): Promise<void> {
|
|
63
|
+
const timeout = await this.calculateTimeout('consensus_validation');
|
|
64
|
+
return super.blockUntilSignal(timeout);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Environment-Specific Configuration
|
|
70
|
+
|
|
71
|
+
**Using Environment Variables**
|
|
72
|
+
```bash
|
|
73
|
+
# .env.development
|
|
74
|
+
BLOCKING_TIMEOUT=300000 # 5 minutes
|
|
75
|
+
|
|
76
|
+
# .env.staging
|
|
77
|
+
BLOCKING_TIMEOUT=900000 # 15 minutes
|
|
78
|
+
|
|
79
|
+
# .env.production
|
|
80
|
+
BLOCKING_TIMEOUT=1800000 # 30 minutes
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Loading in Code**
|
|
84
|
+
```typescript
|
|
85
|
+
const timeout = process.env.BLOCKING_TIMEOUT
|
|
86
|
+
? parseInt(process.env.BLOCKING_TIMEOUT)
|
|
87
|
+
: 600000; // Default 10 minutes
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Anti-Patterns
|
|
91
|
+
|
|
92
|
+
**❌ Timeout Too Short (False Positives)**
|
|
93
|
+
```typescript
|
|
94
|
+
// BAD: 1 minute timeout for 5-minute task
|
|
95
|
+
const timeout = 60000;
|
|
96
|
+
await this.blockUntilSignal(timeout);
|
|
97
|
+
// Result: Frequent timeouts, wasted work
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**❌ Timeout Too Long (Slow Failure Detection)**
|
|
101
|
+
```typescript
|
|
102
|
+
// BAD: 24 hour timeout for 10-minute task
|
|
103
|
+
const timeout = 24 * 60 * 60 * 1000;
|
|
104
|
+
await this.blockUntilSignal(timeout);
|
|
105
|
+
// Result: Dead coordinators not detected for 24 hours
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**❌ No Timeout (Infinite Wait)**
|
|
109
|
+
```typescript
|
|
110
|
+
// BAD: Blocks forever if signal never arrives
|
|
111
|
+
await this.blockUntilSignal(Infinity);
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 2. Heartbeat Configuration
|
|
117
|
+
|
|
118
|
+
### Principle
|
|
119
|
+
**Heartbeat interval, TTL, and dead threshold form a triad that balances detection speed with false positive prevention.**
|
|
120
|
+
|
|
121
|
+
### Recommended Values
|
|
122
|
+
|
|
123
|
+
**Heartbeat Interval: 5 seconds**
|
|
124
|
+
```typescript
|
|
125
|
+
const HEARTBEAT_INTERVAL = 5000; // 5s
|
|
126
|
+
```
|
|
127
|
+
- **Rationale:** Frequent enough for <2min detection, low enough Redis load
|
|
128
|
+
- **Trade-off:** 5s = 17,280 heartbeats/day per coordinator (acceptable for <100 coordinators)
|
|
129
|
+
|
|
130
|
+
**Heartbeat TTL: 90 seconds (18× interval)**
|
|
131
|
+
```typescript
|
|
132
|
+
const HEARTBEAT_TTL = 90; // 90s
|
|
133
|
+
```
|
|
134
|
+
- **Rationale:** 3× detection threshold for network jitter tolerance
|
|
135
|
+
- **Trade-off:** Coordinator appears alive for 90s after death
|
|
136
|
+
|
|
137
|
+
**Dead Coordinator Threshold: 120 seconds (24× interval)**
|
|
138
|
+
```typescript
|
|
139
|
+
const DEAD_COORDINATOR_THRESHOLD = 120000; // 120s
|
|
140
|
+
```
|
|
141
|
+
- **Rationale:** 2× TTL prevents false positives from Redis slowdowns
|
|
142
|
+
- **Trade-off:** 2-minute delay before escalation
|
|
143
|
+
|
|
144
|
+
### Relationship Diagram
|
|
145
|
+
```
|
|
146
|
+
Heartbeat sent every 5s
|
|
147
|
+
↓
|
|
148
|
+
Heartbeat expires after 90s (TTL)
|
|
149
|
+
↓
|
|
150
|
+
Heartbeat considered stale after 120s (threshold)
|
|
151
|
+
↓
|
|
152
|
+
Escalation after 3 warnings over 5 minutes
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Scaling Considerations
|
|
156
|
+
|
|
157
|
+
**Low Coordinator Count (<10)**
|
|
158
|
+
```typescript
|
|
159
|
+
// Can afford more frequent heartbeats
|
|
160
|
+
const HEARTBEAT_INTERVAL = 3000; // 3s
|
|
161
|
+
const HEARTBEAT_TTL = 60; // 60s
|
|
162
|
+
const DEAD_THRESHOLD = 90000; // 90s
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**High Coordinator Count (>100)**
|
|
166
|
+
```typescript
|
|
167
|
+
// Reduce Redis load
|
|
168
|
+
const HEARTBEAT_INTERVAL = 10000; // 10s
|
|
169
|
+
const HEARTBEAT_TTL = 180; // 180s
|
|
170
|
+
const DEAD_THRESHOLD = 240000; // 240s
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Implementation
|
|
174
|
+
|
|
175
|
+
**Heartbeat Sender**
|
|
176
|
+
```typescript
|
|
177
|
+
class BlockingCoordinator {
|
|
178
|
+
private startHeartbeat(): void {
|
|
179
|
+
// Send initial heartbeat immediately
|
|
180
|
+
this.sendHeartbeat();
|
|
181
|
+
|
|
182
|
+
// Then every HEARTBEAT_INTERVAL
|
|
183
|
+
this.heartbeatInterval = setInterval(
|
|
184
|
+
() => this.sendHeartbeat(),
|
|
185
|
+
HEARTBEAT_INTERVAL
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private async sendHeartbeat(): Promise<void> {
|
|
190
|
+
try {
|
|
191
|
+
await this.redis.setex(
|
|
192
|
+
`blocking:heartbeat:${this.id}`,
|
|
193
|
+
HEARTBEAT_TTL,
|
|
194
|
+
JSON.stringify({
|
|
195
|
+
coordinatorId: this.id,
|
|
196
|
+
timestamp: Date.now(),
|
|
197
|
+
status: 'alive',
|
|
198
|
+
pid: process.pid,
|
|
199
|
+
hostname: os.hostname()
|
|
200
|
+
})
|
|
201
|
+
);
|
|
202
|
+
} catch (error) {
|
|
203
|
+
console.error(`Heartbeat failed: ${error.message}`);
|
|
204
|
+
// Don't throw - coordinator continues running
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private stopHeartbeat(): void {
|
|
209
|
+
if (this.heartbeatInterval) {
|
|
210
|
+
clearInterval(this.heartbeatInterval);
|
|
211
|
+
this.heartbeatInterval = null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Heartbeat Monitor**
|
|
218
|
+
```typescript
|
|
219
|
+
class TimeoutHandler {
|
|
220
|
+
async checkCoordinatorActivity(): Promise<void> {
|
|
221
|
+
const keys = await this.scanKeys('blocking:heartbeat:*');
|
|
222
|
+
|
|
223
|
+
for (const key of keys) {
|
|
224
|
+
const data = await this.redis.get(key);
|
|
225
|
+
|
|
226
|
+
if (!data) {
|
|
227
|
+
// Key expired = coordinator dead
|
|
228
|
+
const coordinatorId = key.replace('blocking:heartbeat:', '');
|
|
229
|
+
await this.handleDeadCoordinator(coordinatorId);
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const heartbeat = JSON.parse(data);
|
|
234
|
+
const age = Date.now() - heartbeat.timestamp;
|
|
235
|
+
|
|
236
|
+
if (age > DEAD_COORDINATOR_THRESHOLD) {
|
|
237
|
+
await this.escalateStaleCoordinator(heartbeat.coordinatorId, age);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Anti-Patterns
|
|
245
|
+
|
|
246
|
+
**❌ Heartbeat Interval Too Long (Slow Detection)**
|
|
247
|
+
```typescript
|
|
248
|
+
// BAD: 60s interval = 5+ minute detection time
|
|
249
|
+
const HEARTBEAT_INTERVAL = 60000;
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**❌ TTL < Interval (Heartbeat Expires Between Sends)**
|
|
253
|
+
```typescript
|
|
254
|
+
// BAD: TTL shorter than interval
|
|
255
|
+
const HEARTBEAT_INTERVAL = 10000; // 10s
|
|
256
|
+
const HEARTBEAT_TTL = 5; // 5s
|
|
257
|
+
// Result: Heartbeat expires before next send
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**❌ Threshold < TTL (False Positives)**
|
|
261
|
+
```typescript
|
|
262
|
+
// BAD: Threshold shorter than TTL
|
|
263
|
+
const HEARTBEAT_TTL = 90;
|
|
264
|
+
const DEAD_THRESHOLD = 60000; // 60s
|
|
265
|
+
// Result: Coordinators marked dead while heartbeat still valid
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 3. Signal Retry Strategy
|
|
271
|
+
|
|
272
|
+
### Principle
|
|
273
|
+
**Retry with exponential backoff balances persistence with resource conservation.**
|
|
274
|
+
|
|
275
|
+
### Recommended Configuration
|
|
276
|
+
|
|
277
|
+
**Max Retry Attempts: 3**
|
|
278
|
+
```typescript
|
|
279
|
+
const MAX_SIGNAL_RETRIES = 3;
|
|
280
|
+
```
|
|
281
|
+
- **Rationale:** 3 attempts = 7s total delay (1s + 2s + 4s), catches transient failures
|
|
282
|
+
- **Trade-off:** More retries = longer latency before escalation
|
|
283
|
+
|
|
284
|
+
**Exponential Backoff: [1s, 2s, 4s]**
|
|
285
|
+
```typescript
|
|
286
|
+
const RETRY_DELAYS = [1000, 2000, 4000];
|
|
287
|
+
```
|
|
288
|
+
- **Rationale:** Matches circuit breaker delays, doubles each attempt
|
|
289
|
+
- **Trade-off:** Fixed delays don't adapt to actual failure cause
|
|
290
|
+
|
|
291
|
+
### Implementation
|
|
292
|
+
|
|
293
|
+
**Signal Sending with Retry**
|
|
294
|
+
```typescript
|
|
295
|
+
class BlockingCoordinator {
|
|
296
|
+
async sendSignalWithRetry(
|
|
297
|
+
receiverId: string,
|
|
298
|
+
type: string,
|
|
299
|
+
maxRetries = MAX_SIGNAL_RETRIES
|
|
300
|
+
): Promise<void> {
|
|
301
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
302
|
+
try {
|
|
303
|
+
await this.sendSignal(receiverId, type);
|
|
304
|
+
|
|
305
|
+
// Wait for ACK with timeout
|
|
306
|
+
const ackReceived = await this.waitForAck(receiverId, 5000);
|
|
307
|
+
|
|
308
|
+
if (ackReceived) {
|
|
309
|
+
return; // Success
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
throw new Error('ACK timeout');
|
|
313
|
+
} catch (error) {
|
|
314
|
+
if (attempt === maxRetries - 1) {
|
|
315
|
+
// Final attempt failed
|
|
316
|
+
throw new Error(
|
|
317
|
+
`Failed to send signal after ${maxRetries} attempts: ${error.message}`
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const delay = RETRY_DELAYS[attempt];
|
|
322
|
+
console.warn(
|
|
323
|
+
`Signal send failed (attempt ${attempt + 1}/${maxRetries}), retrying in ${delay}ms`
|
|
324
|
+
);
|
|
325
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
private async waitForAck(
|
|
331
|
+
senderId: string,
|
|
332
|
+
timeout: number
|
|
333
|
+
): Promise<boolean> {
|
|
334
|
+
const startTime = Date.now();
|
|
335
|
+
|
|
336
|
+
while (Date.now() - startTime < timeout) {
|
|
337
|
+
const ack = await this.redis.get(`blocking:ack:${this.id}`);
|
|
338
|
+
|
|
339
|
+
if (ack) {
|
|
340
|
+
const ackData = JSON.parse(ack);
|
|
341
|
+
if (ackData.receiverId === this.id) {
|
|
342
|
+
await this.redis.del(`blocking:ack:${this.id}`);
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
await new Promise(resolve => setTimeout(resolve, 100)); // Poll every 100ms
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Give-Up Condition
|
|
356
|
+
|
|
357
|
+
**Escalate After Max Retries**
|
|
358
|
+
```typescript
|
|
359
|
+
try {
|
|
360
|
+
await coordinator.sendSignalWithRetry(receiverId, 'wake');
|
|
361
|
+
} catch (error) {
|
|
362
|
+
// All retries failed, escalate to timeout handler
|
|
363
|
+
console.error(`Signal delivery failed, escalating: ${error.message}`);
|
|
364
|
+
|
|
365
|
+
await timeoutHandler.handleUnreachableCoordinator(receiverId, {
|
|
366
|
+
reason: 'signal_delivery_failure',
|
|
367
|
+
attempts: MAX_SIGNAL_RETRIES,
|
|
368
|
+
error: error.message
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Advanced: Jittered Backoff
|
|
374
|
+
|
|
375
|
+
**Prevent Thundering Herd**
|
|
376
|
+
```typescript
|
|
377
|
+
function getRetryDelay(attempt: number, baseDelay = 1000): number {
|
|
378
|
+
const exponentialDelay = baseDelay * Math.pow(2, attempt);
|
|
379
|
+
const jitter = Math.random() * exponentialDelay * 0.1; // ±10% jitter
|
|
380
|
+
return exponentialDelay + jitter;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Example: attempt 2 with 1000ms base
|
|
384
|
+
// exponentialDelay = 1000 * 2^2 = 4000ms
|
|
385
|
+
// jitter = random(0, 400)
|
|
386
|
+
// total = 4000-4400ms
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Anti-Patterns
|
|
390
|
+
|
|
391
|
+
**❌ No Retry (Fragile)**
|
|
392
|
+
```typescript
|
|
393
|
+
// BAD: Single attempt, no retry
|
|
394
|
+
await this.sendSignal(receiverId, 'wake');
|
|
395
|
+
// Result: Transient failures cause immediate escalation
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**❌ Infinite Retry (Resource Exhaustion)**
|
|
399
|
+
```typescript
|
|
400
|
+
// BAD: Retry forever
|
|
401
|
+
while (true) {
|
|
402
|
+
try {
|
|
403
|
+
await this.sendSignal(receiverId, 'wake');
|
|
404
|
+
break;
|
|
405
|
+
} catch (error) {
|
|
406
|
+
await sleep(1000); // Infinite loop
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**❌ Fixed Delay (Thundering Herd)**
|
|
412
|
+
```typescript
|
|
413
|
+
// BAD: All coordinators retry at same time
|
|
414
|
+
for (let i = 0; i < 3; i++) {
|
|
415
|
+
await sleep(5000); // Always 5s
|
|
416
|
+
await this.sendSignal(receiverId, 'wake');
|
|
417
|
+
}
|
|
418
|
+
// Result: All coordinators hit Redis simultaneously
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 4. HMAC Secret Management
|
|
424
|
+
|
|
425
|
+
### Principle
|
|
426
|
+
**HMAC secrets must be cryptographically secure, shared across all coordinators, rotated regularly, and never stored in version control.**
|
|
427
|
+
|
|
428
|
+
### Secret Generation
|
|
429
|
+
|
|
430
|
+
**Generate with OpenSSL (256-bit)**
|
|
431
|
+
```bash
|
|
432
|
+
# Generate new secret
|
|
433
|
+
openssl rand -hex 32
|
|
434
|
+
|
|
435
|
+
# Output: 64-character hex string (256 bits)
|
|
436
|
+
# Example: a1b2c3d4e5f6...
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**Store in Secret Manager**
|
|
440
|
+
```bash
|
|
441
|
+
# HashiCorp Vault
|
|
442
|
+
vault kv put secret/cfn-loop/blocking-coordination \
|
|
443
|
+
secret="$(openssl rand -hex 32)"
|
|
444
|
+
|
|
445
|
+
# AWS Secrets Manager
|
|
446
|
+
aws secretsmanager create-secret \
|
|
447
|
+
--name cfn-loop/blocking-coordination \
|
|
448
|
+
--secret-string "$(openssl rand -hex 32)"
|
|
449
|
+
|
|
450
|
+
# Kubernetes Secret
|
|
451
|
+
kubectl create secret generic blocking-coordination \
|
|
452
|
+
--from-literal=secret="$(openssl rand -hex 32)"
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Secret Distribution
|
|
456
|
+
|
|
457
|
+
**Pull from Vault at Startup**
|
|
458
|
+
```typescript
|
|
459
|
+
import { VaultClient } from 'vault-client';
|
|
460
|
+
|
|
461
|
+
class BlockingCoordinator {
|
|
462
|
+
private async loadSecret(): Promise<string> {
|
|
463
|
+
const vault = new VaultClient({
|
|
464
|
+
endpoint: process.env.VAULT_ADDR,
|
|
465
|
+
token: process.env.VAULT_TOKEN
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
const { data } = await vault.read('secret/cfn-loop/blocking-coordination');
|
|
469
|
+
return data.secret;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
async initialize() {
|
|
473
|
+
this.secret = await this.loadSecret();
|
|
474
|
+
// Use this.secret for HMAC signing
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Environment Variable (Least Secure)**
|
|
480
|
+
```bash
|
|
481
|
+
# Only for development
|
|
482
|
+
export BLOCKING_COORDINATION_SECRET="dev-secret-do-not-use-in-prod"
|
|
483
|
+
|
|
484
|
+
# For production, use secret injection
|
|
485
|
+
# Kubernetes: Use secret as env var
|
|
486
|
+
# Docker: Use secrets file
|
|
487
|
+
# Systemd: Use EnvironmentFile with restricted permissions
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Secret Rotation Strategy
|
|
491
|
+
|
|
492
|
+
**Dual-Secret Zero-Downtime Rotation**
|
|
493
|
+
|
|
494
|
+
**Phase 1: Add New Secret**
|
|
495
|
+
```bash
|
|
496
|
+
# Add new secret alongside old
|
|
497
|
+
vault kv patch secret/cfn-loop/blocking-coordination \
|
|
498
|
+
secret_new="$(openssl rand -hex 32)"
|
|
499
|
+
|
|
500
|
+
# Update coordinator to accept both secrets
|
|
501
|
+
export BLOCKING_COORDINATION_SECRET="old-secret"
|
|
502
|
+
export BLOCKING_COORDINATION_SECRET_NEW="new-secret"
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Phase 2: Update Verification Logic**
|
|
506
|
+
```typescript
|
|
507
|
+
class BlockingCoordinator {
|
|
508
|
+
private verifySignalSignature(signal: Signal): boolean {
|
|
509
|
+
// Try new secret first
|
|
510
|
+
if (process.env.BLOCKING_COORDINATION_SECRET_NEW) {
|
|
511
|
+
const validWithNew = this.verifyWithSecret(
|
|
512
|
+
signal,
|
|
513
|
+
process.env.BLOCKING_COORDINATION_SECRET_NEW
|
|
514
|
+
);
|
|
515
|
+
if (validWithNew) return true;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
// Fall back to old secret
|
|
519
|
+
return this.verifyWithSecret(
|
|
520
|
+
signal,
|
|
521
|
+
process.env.BLOCKING_COORDINATION_SECRET!
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
private verifyWithSecret(signal: Signal, secret: string): boolean {
|
|
526
|
+
const payload = `${signal.senderId}:${signal.receiverId}:${signal.type}:${signal.timestamp}`;
|
|
527
|
+
const expectedSignature = crypto
|
|
528
|
+
.createHmac('sha256', secret)
|
|
529
|
+
.update(payload)
|
|
530
|
+
.digest('hex');
|
|
531
|
+
|
|
532
|
+
return crypto.timingSafeEqual(
|
|
533
|
+
Buffer.from(signal.signature!, 'hex'),
|
|
534
|
+
Buffer.from(expectedSignature, 'hex')
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
**Phase 3: Wait for In-Flight Signals to Clear**
|
|
541
|
+
```bash
|
|
542
|
+
# Signal TTL is 24 hours
|
|
543
|
+
# Wait 24 hours to ensure no signals signed with old secret remain
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
**Phase 4: Promote New Secret**
|
|
547
|
+
```bash
|
|
548
|
+
# Remove old secret from Vault
|
|
549
|
+
vault kv patch secret/cfn-loop/blocking-coordination \
|
|
550
|
+
secret="$BLOCKING_COORDINATION_SECRET_NEW"
|
|
551
|
+
|
|
552
|
+
vault kv delete secret/cfn-loop/blocking-coordination/secret_new
|
|
553
|
+
|
|
554
|
+
# Update environment variables
|
|
555
|
+
export BLOCKING_COORDINATION_SECRET="$BLOCKING_COORDINATION_SECRET_NEW"
|
|
556
|
+
unset BLOCKING_COORDINATION_SECRET_NEW
|
|
557
|
+
|
|
558
|
+
# Restart coordinators
|
|
559
|
+
systemctl restart coordinator@*
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### Rotation Schedule
|
|
563
|
+
|
|
564
|
+
**Production: 90 days**
|
|
565
|
+
- Aligns with common compliance requirements (PCI DSS, SOC 2)
|
|
566
|
+
- Balances security with operational overhead
|
|
567
|
+
|
|
568
|
+
**Staging: 30 days**
|
|
569
|
+
- Tests rotation procedure more frequently
|
|
570
|
+
- Catches automation issues before production
|
|
571
|
+
|
|
572
|
+
**Development: No rotation**
|
|
573
|
+
- Use fixed dev secret for simplicity
|
|
574
|
+
- Never use dev secret in staging/production
|
|
575
|
+
|
|
576
|
+
### Anti-Patterns
|
|
577
|
+
|
|
578
|
+
**❌ Secret in Git**
|
|
579
|
+
```bash
|
|
580
|
+
# BAD: Secret committed to repository
|
|
581
|
+
# .env
|
|
582
|
+
BLOCKING_COORDINATION_SECRET=a1b2c3d4e5f6...
|
|
583
|
+
|
|
584
|
+
# Result: Secret leaked in git history forever
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**❌ Weak Secret**
|
|
588
|
+
```bash
|
|
589
|
+
# BAD: Short or predictable secret
|
|
590
|
+
export BLOCKING_COORDINATION_SECRET="password123"
|
|
591
|
+
|
|
592
|
+
# Result: Vulnerable to brute force
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
**❌ Same Secret Across Environments**
|
|
596
|
+
```bash
|
|
597
|
+
# BAD: Dev, staging, prod use same secret
|
|
598
|
+
export BLOCKING_COORDINATION_SECRET="shared-secret"
|
|
599
|
+
|
|
600
|
+
# Result: Dev compromise affects production
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
**❌ No Rotation**
|
|
604
|
+
```bash
|
|
605
|
+
# BAD: Secret never rotated
|
|
606
|
+
# Created: 2020-01-01
|
|
607
|
+
# Current: 2025-10-10
|
|
608
|
+
# Last rotated: Never
|
|
609
|
+
|
|
610
|
+
# Result: Increased risk of compromise over time
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## 5. Redis Key Management
|
|
616
|
+
|
|
617
|
+
### Principle
|
|
618
|
+
**All Redis keys must have TTL, use SCAN instead of KEYS, and follow consistent namespacing to prevent memory leaks and DoS.**
|
|
619
|
+
|
|
620
|
+
### Always Use TTL
|
|
621
|
+
|
|
622
|
+
**Set TTL on Every Key**
|
|
623
|
+
```typescript
|
|
624
|
+
// ❌ BAD: No TTL
|
|
625
|
+
await redis.set('blocking:signal:coord-123', JSON.stringify(signal));
|
|
626
|
+
|
|
627
|
+
// ✅ GOOD: 24h TTL
|
|
628
|
+
await redis.setex(
|
|
629
|
+
'blocking:signal:coord-123',
|
|
630
|
+
86400, // 24 hours
|
|
631
|
+
JSON.stringify(signal)
|
|
632
|
+
);
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
**TTL Guidelines**
|
|
636
|
+
- **Signals:** 24 hours (24 × 3600 = 86400s)
|
|
637
|
+
- **Heartbeats:** 90 seconds
|
|
638
|
+
- **ACKs:** 1 hour (3600s)
|
|
639
|
+
- **State:** 1 hour (3600s)
|
|
640
|
+
- **Warnings:** 5 minutes (300s)
|
|
641
|
+
|
|
642
|
+
**Verify TTL in Tests**
|
|
643
|
+
```typescript
|
|
644
|
+
it('should set TTL on signal keys', async () => {
|
|
645
|
+
await coordinator.sendSignal('receiver-1', 'wake');
|
|
646
|
+
|
|
647
|
+
const ttl = await redis.ttl('blocking:signal:receiver-1');
|
|
648
|
+
expect(ttl).toBeGreaterThan(86000); // ~24 hours
|
|
649
|
+
expect(ttl).toBeLessThanOrEqual(86400);
|
|
650
|
+
});
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
### Use SCAN Instead of KEYS
|
|
654
|
+
|
|
655
|
+
**Why KEYS is Dangerous**
|
|
656
|
+
```typescript
|
|
657
|
+
// ❌ BAD: KEYS blocks Redis (O(N) complexity)
|
|
658
|
+
const keys = await redis.keys('blocking:heartbeat:*');
|
|
659
|
+
|
|
660
|
+
// With 10,000 keys:
|
|
661
|
+
// - Blocks Redis for ~500ms
|
|
662
|
+
// - All other operations wait
|
|
663
|
+
// - Can cause cascading timeouts
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
**SCAN is Non-Blocking**
|
|
667
|
+
```typescript
|
|
668
|
+
// ✅ GOOD: SCAN is cursor-based (doesn't block)
|
|
669
|
+
async function* scanKeys(pattern: string): AsyncGenerator<string> {
|
|
670
|
+
let cursor = '0';
|
|
671
|
+
|
|
672
|
+
do {
|
|
673
|
+
const [nextCursor, keys] = await redis.scan(
|
|
674
|
+
cursor,
|
|
675
|
+
'MATCH', pattern,
|
|
676
|
+
'COUNT', 100 // Scan 100 keys per iteration
|
|
677
|
+
);
|
|
678
|
+
|
|
679
|
+
for (const key of keys) {
|
|
680
|
+
yield key;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
cursor = nextCursor;
|
|
684
|
+
} while (cursor !== '0');
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// Usage:
|
|
688
|
+
for await (const key of scanKeys('blocking:heartbeat:*')) {
|
|
689
|
+
const data = await redis.get(key);
|
|
690
|
+
// Process key
|
|
691
|
+
}
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
**Performance Comparison**
|
|
695
|
+
```
|
|
696
|
+
10,000 keys in Redis:
|
|
697
|
+
|
|
698
|
+
KEYS blocking:heartbeat:*
|
|
699
|
+
- Time: 500ms
|
|
700
|
+
- Blocks: All operations
|
|
701
|
+
- Memory: Full result set
|
|
702
|
+
|
|
703
|
+
SCAN 0 MATCH blocking:heartbeat:* COUNT 100
|
|
704
|
+
- Time: 100 iterations × 5ms = 500ms
|
|
705
|
+
- Blocks: None (5ms per iteration)
|
|
706
|
+
- Memory: 100 keys at a time
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
### Namespace Properly
|
|
710
|
+
|
|
711
|
+
**Key Naming Convention**
|
|
712
|
+
```
|
|
713
|
+
blocking:<type>:<identifier>
|
|
714
|
+
|
|
715
|
+
Examples:
|
|
716
|
+
blocking:signal:coord-123
|
|
717
|
+
blocking:heartbeat:coord-456
|
|
718
|
+
blocking:ack:coord-789
|
|
719
|
+
blocking:warning:coord-abc
|
|
720
|
+
blocking:state:coord-def
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
**Benefits:**
|
|
724
|
+
- Easy to find all blocking-related keys: `blocking:*`
|
|
725
|
+
- Group by type: `blocking:signal:*`
|
|
726
|
+
- Avoid collisions with other systems
|
|
727
|
+
|
|
728
|
+
**Implementation**
|
|
729
|
+
```typescript
|
|
730
|
+
class BlockingCoordinator {
|
|
731
|
+
private keyName(type: string, identifier?: string): string {
|
|
732
|
+
const base = `blocking:${type}`;
|
|
733
|
+
return identifier ? `${base}:${identifier}` : base;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
async sendSignal(receiverId: string, type: string): Promise<void> {
|
|
737
|
+
const key = this.keyName('signal', receiverId);
|
|
738
|
+
await this.redis.setex(key, 86400, JSON.stringify({...}));
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
async sendHeartbeat(): Promise<void> {
|
|
742
|
+
const key = this.keyName('heartbeat', this.id);
|
|
743
|
+
await this.redis.setex(key, 90, JSON.stringify({...}));
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
### Memory Management
|
|
749
|
+
|
|
750
|
+
**Monitor Key Count**
|
|
751
|
+
```bash
|
|
752
|
+
# Count blocking keys
|
|
753
|
+
redis-cli --scan --pattern "blocking:*" | wc -l
|
|
754
|
+
|
|
755
|
+
# Set alert: >10,000 keys
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
**Monitor Memory Usage**
|
|
759
|
+
```bash
|
|
760
|
+
# Check total memory
|
|
761
|
+
redis-cli INFO memory | grep used_memory_human
|
|
762
|
+
|
|
763
|
+
# Check memory per key type
|
|
764
|
+
redis-cli --bigkeys
|
|
765
|
+
|
|
766
|
+
# Set alert: >80% maxmemory
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
**Eviction Policy**
|
|
770
|
+
```bash
|
|
771
|
+
# Configure eviction for memory pressure
|
|
772
|
+
redis-cli CONFIG SET maxmemory-policy volatile-lru
|
|
773
|
+
|
|
774
|
+
# Evicts keys with TTL set, least recently used first
|
|
775
|
+
# Protects keys without TTL from eviction
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
### Anti-Patterns
|
|
779
|
+
|
|
780
|
+
**❌ No TTL (Memory Leak)**
|
|
781
|
+
```typescript
|
|
782
|
+
// BAD: Key lives forever
|
|
783
|
+
await redis.set('blocking:signal:coord-123', data);
|
|
784
|
+
|
|
785
|
+
// Result: Redis memory grows unbounded
|
|
786
|
+
```
|
|
787
|
+
|
|
788
|
+
**❌ Using KEYS in Production (DoS)**
|
|
789
|
+
```typescript
|
|
790
|
+
// BAD: Blocks Redis
|
|
791
|
+
const keys = await redis.keys('blocking:*');
|
|
792
|
+
|
|
793
|
+
// Result: 500ms+ blocking time with 10k keys
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
**❌ Inconsistent Namespacing**
|
|
797
|
+
```typescript
|
|
798
|
+
// BAD: Multiple naming schemes
|
|
799
|
+
await redis.set('signal:coord-123', data);
|
|
800
|
+
await redis.set('coordinator:signal:456', data);
|
|
801
|
+
await redis.set('coord_signal_789', data);
|
|
802
|
+
|
|
803
|
+
// Result: Can't find all related keys
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
---
|
|
807
|
+
|
|
808
|
+
## 6. Monitoring Thresholds
|
|
809
|
+
|
|
810
|
+
### Principle
|
|
811
|
+
**Thresholds should be set based on percentiles (P50/P95/P99) to capture both typical and tail behavior.**
|
|
812
|
+
|
|
813
|
+
### Blocking Duration Thresholds
|
|
814
|
+
|
|
815
|
+
**Info: P50 <60s (Baseline)**
|
|
816
|
+
```yaml
|
|
817
|
+
# Prometheus alert
|
|
818
|
+
- alert: BaselineBlockingDuration
|
|
819
|
+
expr: histogram_quantile(0.50, blocking_coordination_duration_seconds) < 60
|
|
820
|
+
labels:
|
|
821
|
+
severity: info
|
|
822
|
+
annotations:
|
|
823
|
+
summary: "Blocking duration baseline: {{ $value }}s"
|
|
824
|
+
```
|
|
825
|
+
- **Meaning:** Half of blocking operations complete in <60s
|
|
826
|
+
- **Action:** No action, informational only
|
|
827
|
+
|
|
828
|
+
**Warning: P95 >300s (5 minutes)**
|
|
829
|
+
```yaml
|
|
830
|
+
- alert: HighBlockingDuration
|
|
831
|
+
expr: histogram_quantile(0.95, blocking_coordination_duration_seconds) > 300
|
|
832
|
+
for: 5m
|
|
833
|
+
labels:
|
|
834
|
+
severity: warning
|
|
835
|
+
annotations:
|
|
836
|
+
summary: "High P95 blocking duration: {{ $value }}s"
|
|
837
|
+
description: "Check validator performance and network"
|
|
838
|
+
```
|
|
839
|
+
- **Meaning:** 5% of operations take >5 minutes
|
|
840
|
+
- **Action:** Investigate slow validators, network issues
|
|
841
|
+
|
|
842
|
+
**Critical: P99 >1800s (30 minutes)**
|
|
843
|
+
```yaml
|
|
844
|
+
- alert: CriticalBlockingDuration
|
|
845
|
+
expr: histogram_quantile(0.99, blocking_coordination_duration_seconds) > 1800
|
|
846
|
+
for: 2m
|
|
847
|
+
labels:
|
|
848
|
+
severity: critical
|
|
849
|
+
annotations:
|
|
850
|
+
summary: "Critical P99 blocking duration: {{ $value }}s"
|
|
851
|
+
description: "Immediate investigation required"
|
|
852
|
+
```
|
|
853
|
+
- **Meaning:** 1% of operations take >30 minutes
|
|
854
|
+
- **Action:** Page on-call, investigate immediately
|
|
855
|
+
|
|
856
|
+
### Active Coordinator Thresholds
|
|
857
|
+
|
|
858
|
+
**Info: <10 Coordinators**
|
|
859
|
+
```yaml
|
|
860
|
+
- alert: NormalCoordinatorCount
|
|
861
|
+
expr: active_coordinators < 10
|
|
862
|
+
labels:
|
|
863
|
+
severity: info
|
|
864
|
+
annotations:
|
|
865
|
+
summary: "{{ $value }} active coordinators"
|
|
866
|
+
```
|
|
867
|
+
- **Meaning:** Typical workload
|
|
868
|
+
- **Action:** None
|
|
869
|
+
|
|
870
|
+
**Warning: 10-20 Coordinators**
|
|
871
|
+
```yaml
|
|
872
|
+
- alert: ElevatedCoordinatorCount
|
|
873
|
+
expr: active_coordinators >= 10 and active_coordinators < 20
|
|
874
|
+
for: 5m
|
|
875
|
+
labels:
|
|
876
|
+
severity: warning
|
|
877
|
+
annotations:
|
|
878
|
+
summary: "{{ $value }} active coordinators (elevated)"
|
|
879
|
+
description: "Consider scaling Redis or batching work"
|
|
880
|
+
```
|
|
881
|
+
- **Meaning:** Heavy workload
|
|
882
|
+
- **Action:** Monitor Redis performance, consider batching
|
|
883
|
+
|
|
884
|
+
**Critical: >20 Coordinators**
|
|
885
|
+
```yaml
|
|
886
|
+
- alert: HighCoordinatorCount
|
|
887
|
+
expr: active_coordinators >= 20
|
|
888
|
+
for: 2m
|
|
889
|
+
labels:
|
|
890
|
+
severity: critical
|
|
891
|
+
annotations:
|
|
892
|
+
summary: "{{ $value }} active coordinators (critical)"
|
|
893
|
+
description: "Scale Redis cluster or reduce coordinator spawning"
|
|
894
|
+
```
|
|
895
|
+
- **Meaning:** Very heavy workload, Redis may be overloaded
|
|
896
|
+
- **Action:** Scale Redis, batch work, reduce coordinator count
|
|
897
|
+
|
|
898
|
+
### Signal Delivery Latency Thresholds
|
|
899
|
+
|
|
900
|
+
**Target: P95 <5s**
|
|
901
|
+
```yaml
|
|
902
|
+
- alert: NormalSignalLatency
|
|
903
|
+
expr: histogram_quantile(0.95, signal_delivery_latency_seconds) < 5
|
|
904
|
+
labels:
|
|
905
|
+
severity: info
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
**Warning: P95 >10s**
|
|
909
|
+
```yaml
|
|
910
|
+
- alert: HighSignalLatency
|
|
911
|
+
expr: histogram_quantile(0.95, signal_delivery_latency_seconds) > 10
|
|
912
|
+
for: 3m
|
|
913
|
+
labels:
|
|
914
|
+
severity: warning
|
|
915
|
+
annotations:
|
|
916
|
+
summary: "High P95 signal latency: {{ $value }}s"
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
### Timeout Event Rate Thresholds
|
|
920
|
+
|
|
921
|
+
**Warning: >0.5 events/sec**
|
|
922
|
+
```yaml
|
|
923
|
+
- alert: HighTimeoutRate
|
|
924
|
+
expr: rate(timeout_events_total[5m]) > 0.5
|
|
925
|
+
for: 5m
|
|
926
|
+
labels:
|
|
927
|
+
severity: warning
|
|
928
|
+
annotations:
|
|
929
|
+
summary: "High timeout rate: {{ $value }}/s"
|
|
930
|
+
```
|
|
931
|
+
|
|
932
|
+
**Critical: >2 events/sec**
|
|
933
|
+
```yaml
|
|
934
|
+
- alert: CriticalTimeoutRate
|
|
935
|
+
expr: rate(timeout_events_total[5m]) > 2
|
|
936
|
+
for: 2m
|
|
937
|
+
labels:
|
|
938
|
+
severity: critical
|
|
939
|
+
annotations:
|
|
940
|
+
summary: "Critical timeout rate: {{ $value }}/s"
|
|
941
|
+
```
|
|
942
|
+
|
|
943
|
+
---
|
|
944
|
+
|
|
945
|
+
## 7. Cleanup Script Scheduling
|
|
946
|
+
|
|
947
|
+
### Principle
|
|
948
|
+
**Cleanup must run frequently enough to prevent accumulation but not so often that it overloads Redis.**
|
|
949
|
+
|
|
950
|
+
### Recommended Frequency: Every 5 Minutes
|
|
951
|
+
|
|
952
|
+
**Cron Configuration**
|
|
953
|
+
```bash
|
|
954
|
+
# Edit crontab
|
|
955
|
+
crontab -e
|
|
956
|
+
|
|
957
|
+
# Add cleanup job
|
|
958
|
+
*/5 * * * * /usr/bin/node /opt/cfn-loop/config/hooks/cleanup-stale-coordinators.js >> /var/log/cfn-loop/cleanup.log 2>&1
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
**Systemd Timer (Preferred)**
|
|
962
|
+
```ini
|
|
963
|
+
# /etc/systemd/system/cleanup-coordinators.timer
|
|
964
|
+
[Unit]
|
|
965
|
+
Description=Cleanup stale coordinator state
|
|
966
|
+
Requires=cleanup-coordinators.service
|
|
967
|
+
|
|
968
|
+
[Timer]
|
|
969
|
+
OnBootSec=5min
|
|
970
|
+
OnUnitActiveSec=5min
|
|
971
|
+
AccuracySec=1s
|
|
972
|
+
|
|
973
|
+
[Install]
|
|
974
|
+
WantedBy=timers.target
|
|
975
|
+
```
|
|
976
|
+
|
|
977
|
+
```ini
|
|
978
|
+
# /etc/systemd/system/cleanup-coordinators.service
|
|
979
|
+
[Unit]
|
|
980
|
+
Description=Cleanup stale coordinator state
|
|
981
|
+
|
|
982
|
+
[Service]
|
|
983
|
+
Type=oneshot
|
|
984
|
+
ExecStart=/usr/bin/node /opt/cfn-loop/config/hooks/cleanup-stale-coordinators.js
|
|
985
|
+
StandardOutput=journal
|
|
986
|
+
StandardError=journal
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
```bash
|
|
990
|
+
# Enable timer
|
|
991
|
+
sudo systemctl enable cleanup-coordinators.timer
|
|
992
|
+
sudo systemctl start cleanup-coordinators.timer
|
|
993
|
+
|
|
994
|
+
# Check status
|
|
995
|
+
sudo systemctl list-timers | grep cleanup
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
### Stale Threshold: 10 Minutes
|
|
999
|
+
|
|
1000
|
+
**Definition**
|
|
1001
|
+
```typescript
|
|
1002
|
+
const STALE_THRESHOLD = 10 * 60 * 1000; // 10 minutes
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
**Rationale:**
|
|
1006
|
+
- 2× dead coordinator threshold (120s)
|
|
1007
|
+
- Prevents accidental cleanup of slow but alive coordinators
|
|
1008
|
+
- Allows time for 3 warnings + escalation
|
|
1009
|
+
|
|
1010
|
+
**Implementation**
|
|
1011
|
+
```typescript
|
|
1012
|
+
async function cleanupStaleCoordinators() {
|
|
1013
|
+
const now = Date.now();
|
|
1014
|
+
|
|
1015
|
+
for await (const key of scanKeys('blocking:heartbeat:*')) {
|
|
1016
|
+
const data = await redis.get(key);
|
|
1017
|
+
if (!data) continue;
|
|
1018
|
+
|
|
1019
|
+
const { timestamp } = JSON.parse(data);
|
|
1020
|
+
const age = now - timestamp;
|
|
1021
|
+
|
|
1022
|
+
if (age > STALE_THRESHOLD) {
|
|
1023
|
+
const coordinatorId = key.replace('blocking:heartbeat:', '');
|
|
1024
|
+
console.log(`Cleaning up stale coordinator: ${coordinatorId} (${age}ms old)`);
|
|
1025
|
+
|
|
1026
|
+
await redis.del(key);
|
|
1027
|
+
await redis.del(`blocking:signal:${coordinatorId}`);
|
|
1028
|
+
await redis.del(`blocking:ack:${coordinatorId}`);
|
|
1029
|
+
await redis.del(`blocking:warning:${coordinatorId}`);
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
### Execution Time Target: <60s
|
|
1036
|
+
|
|
1037
|
+
**Why 60s?**
|
|
1038
|
+
- Cleanup runs every 5 minutes
|
|
1039
|
+
- <60s ensures no overlap between runs
|
|
1040
|
+
- Allows time for other Redis operations
|
|
1041
|
+
|
|
1042
|
+
**Optimization: Use SCAN**
|
|
1043
|
+
```typescript
|
|
1044
|
+
// Use SCAN with COUNT to limit per-iteration work
|
|
1045
|
+
async function* scanKeys(pattern: string): AsyncGenerator<string> {
|
|
1046
|
+
let cursor = '0';
|
|
1047
|
+
|
|
1048
|
+
do {
|
|
1049
|
+
const [nextCursor, keys] = await redis.scan(
|
|
1050
|
+
cursor,
|
|
1051
|
+
'MATCH', pattern,
|
|
1052
|
+
'COUNT', 100 // Process 100 keys per iteration
|
|
1053
|
+
);
|
|
1054
|
+
|
|
1055
|
+
for (const key of keys) {
|
|
1056
|
+
yield key;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
cursor = nextCursor;
|
|
1060
|
+
} while (cursor !== '0');
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// With 10,000 keys:
|
|
1064
|
+
// - 100 iterations × 5ms = 500ms total
|
|
1065
|
+
// - Well under 60s target
|
|
1066
|
+
```
|
|
1067
|
+
|
|
1068
|
+
**Monitoring**
|
|
1069
|
+
```yaml
|
|
1070
|
+
# Prometheus metric
|
|
1071
|
+
cleanup_duration_seconds:
|
|
1072
|
+
type: histogram
|
|
1073
|
+
buckets: [1, 5, 10, 30, 60]
|
|
1074
|
+
|
|
1075
|
+
# Alert if cleanup takes >60s
|
|
1076
|
+
- alert: SlowCleanup
|
|
1077
|
+
expr: histogram_quantile(0.95, cleanup_duration_seconds) > 60
|
|
1078
|
+
for: 5m
|
|
1079
|
+
labels:
|
|
1080
|
+
severity: warning
|
|
1081
|
+
annotations:
|
|
1082
|
+
summary: "Cleanup taking >60s: {{ $value }}s"
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
---
|
|
1086
|
+
|
|
1087
|
+
## 8. Circuit Breaker Tuning
|
|
1088
|
+
|
|
1089
|
+
### Principle
|
|
1090
|
+
**Circuit breaker prevents cascading failures by failing fast when Redis is unavailable, then retrying with exponential backoff.**
|
|
1091
|
+
|
|
1092
|
+
### Max Attempts: 4
|
|
1093
|
+
|
|
1094
|
+
**Why 4?**
|
|
1095
|
+
- Total delay: 1s + 2s + 4s + 8s = 15 seconds
|
|
1096
|
+
- Catches transient failures (network blip, Redis restart)
|
|
1097
|
+
- Fails fast enough to avoid blocking coordinators for too long
|
|
1098
|
+
|
|
1099
|
+
**Implementation**
|
|
1100
|
+
```typescript
|
|
1101
|
+
private async redisOperationWithCircuitBreaker<T>(
|
|
1102
|
+
operation: () => Promise<T>
|
|
1103
|
+
): Promise<T> {
|
|
1104
|
+
const maxAttempts = 4;
|
|
1105
|
+
const delays = [1000, 2000, 4000, 8000];
|
|
1106
|
+
|
|
1107
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
1108
|
+
try {
|
|
1109
|
+
return await operation();
|
|
1110
|
+
} catch (error) {
|
|
1111
|
+
if (attempt === maxAttempts - 1) {
|
|
1112
|
+
throw new Error(`Circuit breaker open: Redis unavailable after ${maxAttempts} attempts`);
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
const delay = delays[attempt];
|
|
1116
|
+
console.warn(`Redis operation failed (attempt ${attempt + 1}/${maxAttempts}), retrying in ${delay}ms`);
|
|
1117
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
throw new Error('Unreachable');
|
|
1122
|
+
}
|
|
1123
|
+
```
|
|
1124
|
+
|
|
1125
|
+
### Delays: [1s, 2s, 4s, 8s] (Exponential Backoff)
|
|
1126
|
+
|
|
1127
|
+
**Why Exponential?**
|
|
1128
|
+
- Doubles each attempt (2^n pattern)
|
|
1129
|
+
- Gives Redis time to recover from temporary overload
|
|
1130
|
+
- Prevents thundering herd (all coordinators retry at once)
|
|
1131
|
+
|
|
1132
|
+
**Backoff Comparison**
|
|
1133
|
+
```
|
|
1134
|
+
Fixed (1s each): 1s → 2s → 3s → 4s (too fast, hammers Redis)
|
|
1135
|
+
Linear (n seconds): 1s → 3s → 6s → 10s (slower start)
|
|
1136
|
+
Exponential (2^n): 1s → 3s → 7s → 15s (balanced)
|
|
1137
|
+
```
|
|
1138
|
+
|
|
1139
|
+
### Open Threshold: 10 Consecutive Failures
|
|
1140
|
+
|
|
1141
|
+
**Why 10?**
|
|
1142
|
+
- High enough to tolerate intermittent failures
|
|
1143
|
+
- Low enough to fail fast when Redis is truly down
|
|
1144
|
+
- 10 failures × 15s = 2.5 minutes before permanent open
|
|
1145
|
+
|
|
1146
|
+
**Implementation**
|
|
1147
|
+
```typescript
|
|
1148
|
+
class CircuitBreaker {
|
|
1149
|
+
private consecutiveFailures = 0;
|
|
1150
|
+
private isOpen = false;
|
|
1151
|
+
|
|
1152
|
+
async execute<T>(operation: () => Promise<T>): Promise<T> {
|
|
1153
|
+
if (this.isOpen) {
|
|
1154
|
+
throw new Error('Circuit breaker is open');
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
try {
|
|
1158
|
+
const result = await this.retryWithBackoff(operation);
|
|
1159
|
+
this.consecutiveFailures = 0; // Reset on success
|
|
1160
|
+
return result;
|
|
1161
|
+
} catch (error) {
|
|
1162
|
+
this.consecutiveFailures++;
|
|
1163
|
+
|
|
1164
|
+
if (this.consecutiveFailures >= 10) {
|
|
1165
|
+
this.isOpen = true;
|
|
1166
|
+
console.error('Circuit breaker opened after 10 consecutive failures');
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
throw error;
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
reset() {
|
|
1174
|
+
this.isOpen = false;
|
|
1175
|
+
this.consecutiveFailures = 0;
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
```
|
|
1179
|
+
|
|
1180
|
+
**Auto-Reset After Cooldown**
|
|
1181
|
+
```typescript
|
|
1182
|
+
class CircuitBreaker {
|
|
1183
|
+
private openTimestamp: number | null = null;
|
|
1184
|
+
private readonly cooldownPeriod = 60000; // 60 seconds
|
|
1185
|
+
|
|
1186
|
+
async execute<T>(operation: () => Promise<T>): Promise<T> {
|
|
1187
|
+
// Try to close circuit after cooldown
|
|
1188
|
+
if (this.isOpen && this.openTimestamp) {
|
|
1189
|
+
const elapsed = Date.now() - this.openTimestamp;
|
|
1190
|
+
if (elapsed > this.cooldownPeriod) {
|
|
1191
|
+
console.log('Circuit breaker cooldown complete, trying half-open state');
|
|
1192
|
+
this.isOpen = false;
|
|
1193
|
+
this.consecutiveFailures = 0;
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
if (this.isOpen) {
|
|
1198
|
+
throw new Error('Circuit breaker is open');
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
try {
|
|
1202
|
+
const result = await this.retryWithBackoff(operation);
|
|
1203
|
+
this.consecutiveFailures = 0;
|
|
1204
|
+
this.openTimestamp = null;
|
|
1205
|
+
return result;
|
|
1206
|
+
} catch (error) {
|
|
1207
|
+
this.consecutiveFailures++;
|
|
1208
|
+
|
|
1209
|
+
if (this.consecutiveFailures >= 10) {
|
|
1210
|
+
this.isOpen = true;
|
|
1211
|
+
this.openTimestamp = Date.now();
|
|
1212
|
+
console.error('Circuit breaker opened after 10 consecutive failures');
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
throw error;
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
```
|
|
1220
|
+
|
|
1221
|
+
---
|
|
1222
|
+
|
|
1223
|
+
## Summary Checklist
|
|
1224
|
+
|
|
1225
|
+
Before deploying blocking coordination to production, verify:
|
|
1226
|
+
|
|
1227
|
+
- [ ] Timeout set to 2× expected duration (30min for production)
|
|
1228
|
+
- [ ] Heartbeat interval 5s, TTL 90s, dead threshold 120s
|
|
1229
|
+
- [ ] Signal retry: max 3 attempts, exponential backoff [1s, 2s, 4s]
|
|
1230
|
+
- [ ] HMAC secret 256-bit, stored in Vault/Secrets Manager
|
|
1231
|
+
- [ ] Secret rotation schedule: 90 days production, 30 days staging
|
|
1232
|
+
- [ ] All Redis keys have TTL (signals 24h, heartbeats 90s, ACKs 1h)
|
|
1233
|
+
- [ ] Use SCAN instead of KEYS for all bulk operations
|
|
1234
|
+
- [ ] Key namespacing: `blocking:<type>:<identifier>`
|
|
1235
|
+
- [ ] Prometheus alerts configured for all 4 metrics
|
|
1236
|
+
- [ ] Cleanup script runs every 5 minutes (cron/systemd timer)
|
|
1237
|
+
- [ ] Cleanup stale threshold 10 minutes, execution <60s
|
|
1238
|
+
- [ ] Circuit breaker: 4 attempts, [1s, 2s, 4s, 8s] delays, 10 failure threshold
|
|
1239
|
+
- [ ] Integration tests cover timeout, retry, and cleanup scenarios
|
|
1240
|
+
- [ ] Grafana dashboard deployed and accessible
|
|
1241
|
+
- [ ] On-call runbook updated with troubleshooting procedures
|