claude-flow-novice 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/.claude/agents/cfn-dev-team/CLAUDE.md +1086 -0
  2. package/.claude/agents/cfn-dev-team/README.md +116 -0
  3. package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
  4. package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
  5. package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
  6. package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
  7. package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
  8. package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
  9. package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
  10. package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
  11. package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
  12. package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
  13. package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
  14. package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
  15. package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
  16. package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
  17. package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
  18. package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
  19. package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
  20. package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
  21. package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
  22. package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
  23. package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
  24. package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
  25. package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
  26. package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
  27. package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
  28. package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
  29. package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
  30. package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
  31. package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
  32. package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
  33. package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
  34. package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
  35. package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
  36. package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
  37. package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
  38. package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
  39. package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
  40. package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
  41. package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
  42. package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
  43. package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
  44. package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
  45. package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
  46. package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
  47. package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
  48. package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
  49. package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
  50. package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
  51. package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
  52. package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
  53. package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
  54. package/.claude/commands/cfn/cfn-loop.md +168 -7
  55. package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
  56. package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
  57. package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
  58. package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
  59. package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
  60. package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
  61. package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
  62. package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
  63. package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
  64. package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
  65. package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
  66. package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
  67. package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
  68. package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
  69. package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
  70. package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
  71. package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
  72. package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
  73. package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
  74. package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
  75. package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
  76. package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
  77. package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
  78. package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
  79. package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
  80. package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
  81. package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
  82. package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
  83. package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
  84. package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
  85. package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
  86. package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
  87. package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
  88. package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
  89. package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
  90. package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
  91. package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
  92. package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
  93. package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
  94. package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
  95. package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
  96. package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
  97. package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
  98. package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
  99. package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
  100. package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
  101. package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
  102. package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
  103. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
  104. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
  105. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
  106. package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
  107. package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
  108. package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
  109. package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
  110. package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
  111. package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
  112. package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
  113. package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
  114. package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
  115. package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
  116. package/.claude/skills/cfn-config-management/SKILL.md +34 -0
  117. package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
  118. package/.claude/skills/cfn-config-management/config.json +32 -0
  119. package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
  120. package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
  121. package/.claude/skills/cfn-event-bus/config.json +111 -0
  122. package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
  123. package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
  124. package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
  125. package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
  126. package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
  127. package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
  128. package/.claude/skills/cfn-fleet-manager/config.json +60 -0
  129. package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
  130. package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
  131. package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
  132. package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
  133. package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
  134. package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
  135. package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
  136. package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
  137. package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
  138. package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
  139. package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
  140. package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
  141. package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
  142. package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
  143. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
  144. package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
  145. package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
  146. package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
  147. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
  148. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
  149. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
  150. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
  151. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
  152. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
  153. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
  154. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
  155. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
  156. package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
  157. package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
  158. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
  159. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
  160. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
  161. package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
  162. package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
  163. package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
  164. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
  165. package/.claude/skills/cfn-loop-validation/config.json +161 -0
  166. package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
  167. package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
  168. package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
  169. package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
  170. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
  171. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
  172. package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
  173. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
  174. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
  175. package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
  176. package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
  177. package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
  178. package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
  179. package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
  180. package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
  181. package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
  182. package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
  183. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
  184. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
  185. package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
  186. package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
  187. package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
  188. package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
  189. package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
  190. package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
  191. package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
  192. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
  193. package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
  194. package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
  195. package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
  196. package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
  197. package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
  198. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
  199. package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
  200. package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
  201. package/.claude/skills/cfn-redis-coordination/config.json +61 -0
  202. package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
  203. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
  204. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
  205. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
  206. package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
  207. package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
  208. package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
  209. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
  210. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
  211. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
  212. package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
  213. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
  214. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
  215. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
  216. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
  217. package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
  218. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
  219. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
  220. package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
  221. package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
  222. package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
  223. package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
  224. package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
  225. package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
  226. package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
  227. package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
  228. package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
  229. package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
  230. package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
  231. package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
  232. package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
  233. package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
  234. package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
  235. package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
  236. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
  237. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
  238. package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
  239. package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
  240. package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
  241. package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
  242. package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
  243. package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
  244. package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
  245. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
  246. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
  247. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
  248. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
  249. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
  250. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
  251. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
  252. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
  253. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  254. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
  255. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
  256. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
  257. package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
  258. package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
  259. package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
  260. package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
  261. package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
  262. package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
  263. package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
  264. package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
  265. package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
  266. package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
  267. package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
  268. package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
  269. package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
  270. package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
  271. package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
  272. package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
  273. package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
  274. package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
  275. package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
  276. package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
  277. package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
  278. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
  279. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
  280. package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
  281. package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
  282. package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
  283. package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
  284. package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
  285. package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
  286. package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
  287. package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
  288. package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
  289. package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
  290. package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
  291. package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
  292. package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
  293. package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
  294. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
  295. package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
  296. package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
  297. package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
  298. package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
  299. package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
  300. package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
  301. package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
  302. package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
  303. package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
  304. package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
  305. package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
  306. package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
  307. package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
  308. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
  309. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
  310. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
  311. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
  312. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
  313. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
  314. package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
  315. package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
  316. package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
  317. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
  318. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
  319. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
  320. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
  321. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
  322. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
  323. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
  324. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
  325. package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
  326. package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
  327. package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
  328. package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
  329. package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
  330. package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
  331. package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
  332. package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
  333. package/README.md +51 -2
  334. package/dist/ace/ace-reflector.js +109 -10
  335. package/dist/ace/ace-reflector.js.map +1 -1
  336. package/dist/agents/agent-loader.js +165 -146
  337. package/dist/agents/agent-loader.js.map +1 -1
  338. package/dist/cli/agent-executor.js +1 -1
  339. package/dist/cli/agent-executor.js.map +1 -1
  340. package/dist/cli/config-manager.js +109 -91
  341. package/dist/cli/config-manager.js.map +1 -1
  342. package/package.json +43 -7
  343. package/readme/README.md +15 -4
  344. package/scripts/init-project.js +84 -29
  345. package/scripts/run-marketing-tests.sh +43 -0
  346. package/scripts/update_paths.sh +47 -0
  347. package/tools/install-lizard.sh +37 -0
  348. package/tools/simple-complexity.sh +44 -0
  349. package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
  350. package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
  351. package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
  352. /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
  353. /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
@@ -0,0 +1,56 @@
1
+ #!/bin/bash
2
+ # Quorum Percentage Test Case
3
+ # Tests percentage-based quorum scenarios
4
+
5
+ source "$(dirname "$0")/test-utils.sh"
6
+
7
+ # Test Scenario 1: 80% of 10 agents = 8 required, 8/10 complete → SUCCESS
8
+ test_percentage_quorum_success() {
9
+ local total_agents=10
10
+ local quorum_percentage=0.8
11
+ local completed_agents=8
12
+
13
+ local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
14
+ assert_equals "$result" "SUCCESS" "Quorum not reached when 8/10 agents complete (80% required)"
15
+ }
16
+
17
+ # Test Scenario 2: 80% of 10 agents = 8 required, 7/10 complete → FAILURE
18
+ test_percentage_quorum_failure() {
19
+ local total_agents=10
20
+ local quorum_percentage=0.8
21
+ local completed_agents=7
22
+
23
+ local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
24
+ assert_equals "$result" "FAILURE" "Quorum incorrectly reached when only 7/10 agents complete (80% required)"
25
+ }
26
+
27
+ # Test Scenario 3: 90% of 5 agents = 4.5 → 5 required (round up)
28
+ test_percentage_quorum_round_up() {
29
+ local total_agents=5
30
+ local quorum_percentage=0.9
31
+ local completed_agents=5
32
+
33
+ local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
34
+ assert_equals "$result" "SUCCESS" "Quorum not reached when all 5/5 agents complete (90% required)"
35
+ }
36
+
37
+ # Test Scenario 4: 90% of 5 agents = 4.5 → 5 required, 4/5 complete → FAILURE
38
+ test_percentage_quorum_insufficient() {
39
+ local total_agents=5
40
+ local quorum_percentage=0.9
41
+ local completed_agents=4
42
+
43
+ local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
44
+ assert_equals "$result" "FAILURE" "Quorum incorrectly reached when 4/5 agents complete (90% required)"
45
+ }
46
+
47
+ # Run the tests
48
+ main() {
49
+ test_percentage_quorum_success
50
+ test_percentage_quorum_failure
51
+ test_percentage_quorum_round_up
52
+ test_percentage_quorum_insufficient
53
+ echo "Percentage Quorum Test Complete"
54
+ }
55
+
56
+ main
@@ -0,0 +1,81 @@
1
+ #!/bin/bash
2
+ # Quorum Retry Mechanism Test Case
3
+ # Tests retry scenarios for agent completion
4
+
5
+ source "$(dirname "$0")/test-utils.sh"
6
+
7
+ # Simulated Redis-based retry mechanism
8
+ simulate_agent_retry() {
9
+ local task_id="$1"
10
+ local agent_id="$2"
11
+ local max_retries="${3:-3}"
12
+ local retry_delay="${4:-5}"
13
+
14
+ local attempt=1
15
+ local success=false
16
+
17
+ while [ $attempt -le "$max_retries" ]; do
18
+ # Simulate agent work
19
+ if agent_work "$task_id" "$agent_id"; then
20
+ success=true
21
+ break
22
+ fi
23
+
24
+ echo "Agent $agent_id - Attempt $attempt failed. Retrying in $retry_delay seconds..."
25
+ sleep "$retry_delay"
26
+ ((attempt++))
27
+ done
28
+
29
+ if [ "$success" = true ]; then
30
+ echo "SUCCESS"
31
+ else
32
+ echo "FAILURE"
33
+ fi
34
+ }
35
+
36
+ # Mock agent work function with potential failure
37
+ agent_work() {
38
+ local task_id="$1"
39
+ local agent_id="$2"
40
+
41
+ # Simulated 50% chance of failure on first attempt
42
+ if [ "$agent_id" == "agent-1" ] && [ -z "$RETRY_COMPLETE" ]; then
43
+ RETRY_COMPLETE=1
44
+ return 1
45
+ fi
46
+
47
+ return 0
48
+ }
49
+
50
+ # Test Scenario: Agent times out on attempt 1, retry succeeds on attempt 2
51
+ test_quorum_retry_mechanism() {
52
+ local task_id="retry-test-task"
53
+ local agent_id="agent-1"
54
+
55
+ local result=$(simulate_agent_retry "$task_id" "$agent_id")
56
+ assert_equals "$result" "SUCCESS" "Retry mechanism failed to complete agent work"
57
+ }
58
+
59
+ # Additional retry tests
60
+ test_multiple_agent_retries() {
61
+ local total_agents=5
62
+ local successful_agents=0
63
+
64
+ for ((i=1; i<=total_agents; i++)); do
65
+ local result=$(simulate_agent_retry "multi-retry-task" "agent-$i")
66
+ if [ "$result" == "SUCCESS" ]; then
67
+ ((successful_agents++))
68
+ fi
69
+ done
70
+
71
+ assert_greater_than "$successful_agents" 3 "Insufficient agents completed with retry"
72
+ }
73
+
74
+ # Run the tests
75
+ main() {
76
+ test_quorum_retry_mechanism
77
+ test_multiple_agent_retries
78
+ echo "Retry Mechanism Test Complete"
79
+ }
80
+
81
+ main
@@ -0,0 +1,57 @@
1
+ #!/bin/bash
2
+ # Master Quorum Validation Test Suite
3
+ # Task ID: redis-phase2-1760875940
4
+ # Agent ID: tester-2
5
+
6
+ set -euo pipefail
7
+
8
+ # Source common testing utilities
9
+ source "$(dirname "$0")/test-utils.sh"
10
+
11
+ # Test Results Tracking
12
+ TOTAL_TESTS=4
13
+ PASSED_TESTS=0
14
+ FAILED_TESTS=0
15
+
16
+ # Run Quorum Test Cases
17
+ run_test "test-quorum-absolute.sh"
18
+ run_test "test-quorum-percentage.sh"
19
+ run_test "test-quorum-with-retry.sh"
20
+ run_test "test-quorum-fallback.sh"
21
+
22
+ # Generate Test Report
23
+ generate_test_report
24
+
25
+ # Signal Completion to Redis
26
+ signal_task_complete() {
27
+ local confidence=$(calculate_confidence)
28
+ redis-cli lpush "swarm:redis-phase2-1760875940:tester-2:done" "complete"
29
+
30
+ # Report to waiting mode
31
+ ./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
32
+ --task-id redis-phase2-1760875940 \
33
+ --agent-id tester-2 \
34
+ --confidence "$confidence" \
35
+ --iteration 1
36
+
37
+ # Enter waiting mode
38
+ ./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh enter \
39
+ --task-id redis-phase2-1760875940 \
40
+ --agent-id tester-2 \
41
+ --context "task-2-3-complete"
42
+ }
43
+
44
+ # Run main test suite
45
+ main() {
46
+ # Setup any required test environments
47
+ setup_test_environment
48
+
49
+ # Execute test cases
50
+ run_all_tests
51
+
52
+ # Signal completion
53
+ signal_task_complete
54
+ }
55
+
56
+ # Execute main function
57
+ main
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ##############################################################################
4
+ # Test: Shutdown Handling in Orchestrator
5
+ # Verifies that orchestrator responds to shutdown signals and cleans up
6
+ ##############################################################################
7
+
8
+ set -euo pipefail
9
+
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ TEST_TASK_ID="test-shutdown-$(date +%s)"
12
+ CLEANUP_NEEDED=1
13
+
14
+ # Cleanup function
15
+ cleanup() {
16
+ if [ $CLEANUP_NEEDED -eq 1 ]; then
17
+ echo ""
18
+ echo "=== Cleanup ==="
19
+ redis-cli DEL "swarm:${TEST_TASK_ID}:shutdown" >/dev/null 2>&1 || true
20
+ redis-cli DEL "swarm:${TEST_TASK_ID}:*" >/dev/null 2>&1 || true
21
+ echo "Cleanup complete"
22
+ fi
23
+ }
24
+
25
+ trap cleanup EXIT
26
+
27
+ echo "=== Test: Shutdown Handling in Orchestrator ==="
28
+ echo "Test Task ID: $TEST_TASK_ID"
29
+ echo ""
30
+
31
+ # Test 1: Start orchestrator in background
32
+ echo "Test 1: Starting orchestrator in background..."
33
+
34
+ # Create mock agents (we'll send shutdown before they complete)
35
+ MOCK_LOOP3="mock-agent-1,mock-agent-2"
36
+ MOCK_LOOP2="mock-validator-1"
37
+ MOCK_PO="mock-po"
38
+
39
+ # Start orchestrator in background with high timeout (so it doesn't fail quickly)
40
+ timeout 30 "$SCRIPT_DIR/orchestrate-cfn-loop.sh" \
41
+ --task-id "$TEST_TASK_ID" \
42
+ --mode standard \
43
+ --loop3-agents "$MOCK_LOOP3" \
44
+ --loop2-agents "$MOCK_LOOP2" \
45
+ --product-owner "$MOCK_PO" \
46
+ --timeout 3600 \
47
+ --max-iterations 5 > /tmp/orchestrator-output-${TEST_TASK_ID}.log 2>&1 &
48
+
49
+ ORCHESTRATOR_PID=$!
50
+ echo "Orchestrator started (PID: $ORCHESTRATOR_PID)"
51
+
52
+ # Wait for orchestrator to initialize and start shutdown monitor
53
+ sleep 2
54
+
55
+ # Verify orchestrator is running
56
+ if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
57
+ echo "❌ FAIL: Orchestrator process died prematurely"
58
+ cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
59
+ exit 1
60
+ fi
61
+
62
+ echo "✅ PASS: Orchestrator is running"
63
+ echo ""
64
+
65
+ # Test 2: Send shutdown signal via Redis
66
+ echo "Test 2: Sending shutdown signal via Redis..."
67
+
68
+ SHUTDOWN_PAYLOAD=$(jq -n --arg reason "test_shutdown" '{reason: $reason}')
69
+ echo "$SHUTDOWN_PAYLOAD" | redis-cli -x LPUSH "swarm:${TEST_TASK_ID}:shutdown" >/dev/null
70
+
71
+ echo "Shutdown signal sent: $SHUTDOWN_PAYLOAD"
72
+ echo "Waiting for orchestrator to shutdown..."
73
+
74
+ # Wait up to 5 seconds for graceful shutdown
75
+ for i in {1..10}; do
76
+ if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
77
+ echo "✅ PASS: Orchestrator shutdown gracefully"
78
+ break
79
+ fi
80
+ sleep 0.5
81
+ done
82
+
83
+ # Verify orchestrator has stopped
84
+ if kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
85
+ echo "❌ FAIL: Orchestrator did not shutdown within 5 seconds"
86
+ kill -9 $ORCHESTRATOR_PID 2>/dev/null || true
87
+ exit 1
88
+ fi
89
+
90
+ echo ""
91
+
92
+ # Test 3: Verify cleanup happened
93
+ echo "Test 3: Verifying cleanup..."
94
+
95
+ # Check orchestrator output for shutdown messages
96
+ if grep -q "Orchestrator shutting down gracefully" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
97
+ echo "✅ PASS: Found shutdown message in output"
98
+ else
99
+ echo "❌ FAIL: Shutdown message not found in output"
100
+ echo "Output:"
101
+ cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
102
+ exit 1
103
+ fi
104
+
105
+ if grep -q "Shutdown complete" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
106
+ echo "✅ PASS: Found completion message in output"
107
+ else
108
+ echo "⚠️ WARNING: Completion message not found (non-critical)"
109
+ fi
110
+
111
+ # Check if swarm was marked as cancelled (may not be present if init-swarm never ran)
112
+ if grep -q "Marking swarm as cancelled" /tmp/orchestrator-output-${TEST_TASK_ID}.log || grep -q "Failed to mark swarm as cancelled" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
113
+ echo "✅ PASS: Attempted to mark swarm as cancelled"
114
+ else
115
+ echo "⚠️ INFO: Swarm cancellation not attempted (may not have initialized yet)"
116
+ fi
117
+
118
+ echo ""
119
+
120
+ # Test 4: Send SIGTERM signal
121
+ echo "Test 4: Testing SIGTERM signal handling..."
122
+
123
+ # Start another orchestrator instance
124
+ timeout 30 "$SCRIPT_DIR/orchestrate-cfn-loop.sh" \
125
+ --task-id "${TEST_TASK_ID}-sigterm" \
126
+ --mode standard \
127
+ --loop3-agents "$MOCK_LOOP3" \
128
+ --loop2-agents "$MOCK_LOOP2" \
129
+ --product-owner "$MOCK_PO" \
130
+ --timeout 3600 \
131
+ --max-iterations 5 > /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log 2>&1 &
132
+
133
+ ORCHESTRATOR_PID_2=$!
134
+ echo "Second orchestrator started (PID: $ORCHESTRATOR_PID_2)"
135
+
136
+ # Wait for initialization
137
+ sleep 2
138
+
139
+ # Send SIGTERM
140
+ echo "Sending SIGTERM to orchestrator..."
141
+ kill -TERM $ORCHESTRATOR_PID_2 2>/dev/null || true
142
+
143
+ # Wait for shutdown
144
+ for i in {1..10}; do
145
+ if ! kill -0 $ORCHESTRATOR_PID_2 2>/dev/null; then
146
+ echo "✅ PASS: Orchestrator responded to SIGTERM"
147
+ break
148
+ fi
149
+ sleep 0.5
150
+ done
151
+
152
+ # Verify shutdown
153
+ if kill -0 $ORCHESTRATOR_PID_2 2>/dev/null; then
154
+ echo "❌ FAIL: Orchestrator did not respond to SIGTERM within 5 seconds"
155
+ kill -9 $ORCHESTRATOR_PID_2 2>/dev/null || true
156
+ exit 1
157
+ fi
158
+
159
+ # Check for SIGTERM handling in output
160
+ if grep -q "SIGTERM_received" /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log; then
161
+ echo "✅ PASS: SIGTERM signal was properly caught and handled"
162
+ else
163
+ echo "⚠️ WARNING: SIGTERM handling message not clear in output"
164
+ fi
165
+
166
+ echo ""
167
+ echo "=== All Tests Passed ==="
168
+ echo ""
169
+ echo "Orchestrator output (Test 1 - Redis shutdown):"
170
+ echo "----------------------------------------------"
171
+ cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
172
+ echo ""
173
+ echo "Orchestrator output (Test 2 - SIGTERM):"
174
+ echo "----------------------------------------"
175
+ cat /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log
176
+
177
+ # Cleanup test files
178
+ rm -f /tmp/orchestrator-output-${TEST_TASK_ID}.log
179
+ rm -f /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log
180
+ redis-cli DEL "swarm:${TEST_TASK_ID}-sigterm:shutdown" >/dev/null 2>&1 || true
181
+ redis-cli DEL "swarm:${TEST_TASK_ID}-sigterm:*" >/dev/null 2>&1 || true
182
+
183
+ CLEANUP_NEEDED=0 # Prevent duplicate cleanup
184
+
185
+ echo ""
186
+ echo "✅ All shutdown handling tests passed successfully"
187
+ exit 0
@@ -0,0 +1,160 @@
1
+ #!/bin/bash
2
+ #
3
+ # Test shutdown handling for waiting agents
4
+ #
5
+
6
+ set -euo pipefail
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ WAITING_MODE_SCRIPT="$SCRIPT_DIR/invoke-waiting-mode.sh"
10
+
11
+ TASK_ID="test-shutdown-$(date +%s)"
12
+ AGENT_ID="test-agent-1"
13
+
14
+ echo "=========================================="
15
+ echo "Testing Shutdown Handling"
16
+ echo "=========================================="
17
+ echo ""
18
+ echo "Task ID: $TASK_ID"
19
+ echo "Agent ID: $AGENT_ID"
20
+ echo ""
21
+
22
+ # Clean up Redis keys before test
23
+ echo "Cleaning up Redis keys..."
24
+ redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
25
+ redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
26
+ redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
27
+
28
+ echo ""
29
+ echo "Test 1: Agent enters waiting mode in background"
30
+ echo "------------------------------------------------"
31
+
32
+ # Start agent in background
33
+ {
34
+ $WAITING_MODE_SCRIPT enter \
35
+ --task-id "$TASK_ID" \
36
+ --agent-id "$AGENT_ID" \
37
+ --context "test-shutdown"
38
+
39
+ EXIT_CODE=$?
40
+ echo "Agent exited with code: $EXIT_CODE"
41
+
42
+ if [ $EXIT_CODE -eq 130 ]; then
43
+ echo "✅ Agent gracefully shutdown with SIGINT code (130)"
44
+ else
45
+ echo "❌ Expected exit code 130, got $EXIT_CODE"
46
+ exit 1
47
+ fi
48
+ } &
49
+
50
+ AGENT_PID=$!
51
+ echo "Agent started (PID: $AGENT_PID)"
52
+
53
+ # Wait for agent to enter waiting mode
54
+ sleep 2
55
+
56
+ # Check if agent published ready status
57
+ READY_STATUS=$(redis-cli LPOP "swarm:${TASK_ID}:${AGENT_ID}:ready")
58
+ if [ -n "$READY_STATUS" ] && [ "$READY_STATUS" != "(nil)" ]; then
59
+ echo "✅ Agent published ready status:"
60
+ echo "$READY_STATUS" | jq '.'
61
+ else
62
+ echo "❌ Agent did not publish ready status"
63
+ kill $AGENT_PID 2>/dev/null || true
64
+ exit 1
65
+ fi
66
+
67
+ echo ""
68
+ echo "Test 2: Send shutdown signal"
69
+ echo "-----------------------------"
70
+
71
+ $WAITING_MODE_SCRIPT shutdown \
72
+ --task-id "$TASK_ID" \
73
+ --reason "test_shutdown"
74
+
75
+ echo ""
76
+ echo "Test 3: Verify agent receives shutdown and exits"
77
+ echo "------------------------------------------------"
78
+
79
+ # Wait for agent to process shutdown (max 2 seconds for poll cycle)
80
+ sleep 3
81
+
82
+ # Check if agent process is still running
83
+ if ps -p $AGENT_PID >/dev/null 2>&1; then
84
+ echo "❌ Agent still running after shutdown signal"
85
+ kill $AGENT_PID 2>/dev/null || true
86
+ exit 1
87
+ else
88
+ echo "✅ Agent terminated after shutdown signal"
89
+ fi
90
+
91
+ # Wait for background process to finish and capture exit code
92
+ wait $AGENT_PID 2>/dev/null || true
93
+
94
+ echo ""
95
+ echo "Test 4: Verify shutdown with wake signal priority"
96
+ echo "-------------------------------------------------"
97
+
98
+ # Clean up
99
+ redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
100
+ redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
101
+ redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
102
+
103
+ # Start agent in background
104
+ {
105
+ $WAITING_MODE_SCRIPT enter \
106
+ --task-id "$TASK_ID" \
107
+ --agent-id "$AGENT_ID" \
108
+ --context "test-priority"
109
+
110
+ EXIT_CODE=$?
111
+ if [ $EXIT_CODE -eq 130 ]; then
112
+ echo "✅ Agent prioritized shutdown over wake signal"
113
+ else
114
+ echo "⚠️ Agent exited with code $EXIT_CODE (may have received wake signal first)"
115
+ fi
116
+ } &
117
+
118
+ AGENT_PID=$!
119
+
120
+ # Wait for agent to enter waiting mode
121
+ sleep 2
122
+
123
+ # Send both wake and shutdown signals (shutdown should take priority)
124
+ $WAITING_MODE_SCRIPT wake \
125
+ --task-id "$TASK_ID" \
126
+ --agent-id "$AGENT_ID" \
127
+ --reason "test_wake" \
128
+ --priority 50 &
129
+
130
+ $WAITING_MODE_SCRIPT shutdown \
131
+ --task-id "$TASK_ID" \
132
+ --reason "test_shutdown_priority" &
133
+
134
+ # Wait for signals to be sent
135
+ sleep 1
136
+
137
+ # Wait for agent to process
138
+ sleep 3
139
+
140
+ # Check if agent terminated
141
+ if ps -p $AGENT_PID >/dev/null 2>&1; then
142
+ echo "⚠️ Agent still running (may have processed wake signal)"
143
+ kill $AGENT_PID 2>/dev/null || true
144
+ else
145
+ echo "✅ Agent terminated (shutdown had priority)"
146
+ fi
147
+
148
+ wait $AGENT_PID 2>/dev/null || true
149
+
150
+ echo ""
151
+ echo "=========================================="
152
+ echo "✅ All shutdown handling tests passed!"
153
+ echo "=========================================="
154
+
155
+ # Cleanup
156
+ redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
157
+ redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
158
+ redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
159
+
160
+ exit 0
@@ -0,0 +1,97 @@
1
+ #!/bin/bash
2
+ # Utility functions for quorum testing
3
+
4
+ # Check absolute quorum
5
+ check_quorum() {
6
+ local total_agents="$1"
7
+ local quorum="$2"
8
+ local completed_agents="$3"
9
+
10
+ if [ "$completed_agents" -ge "$quorum" ]; then
11
+ echo "SUCCESS"
12
+ else
13
+ echo "FAILURE"
14
+ fi
15
+ }
16
+
17
+ # Check percentage-based quorum
18
+ check_percentage_quorum() {
19
+ local total_agents="$1"
20
+ local quorum_percentage="$2"
21
+ local completed_agents="$3"
22
+
23
+ # Calculate the minimum number of agents required (round up)
24
+ local required_agents=$(echo "scale=0; ceil($total_agents * $quorum_percentage)" | bc)
25
+
26
+ if [ "$completed_agents" -ge "$required_agents" ]; then
27
+ echo "SUCCESS"
28
+ else
29
+ echo "FAILURE"
30
+ fi
31
+ }
32
+
33
+ # Graceful degradation strategy
34
+ simulate_graceful_degradation() {
35
+ local total_agents="$1"
36
+ local initial_quorum="$2"
37
+ local max_failures="$3"
38
+
39
+ # Dynamically adjust quorum based on failures
40
+ local current_quorum="$initial_quorum"
41
+ local adjusted_agents=$((total_agents - max_failures))
42
+ local adjusted_quorum_threshold=$(echo "scale=2; $current_quorum * 0.8" | bc)
43
+
44
+ if (( $(echo "$adjusted_quorum_threshold <= 0.65" | bc -l) )); then
45
+ echo "HALT" # Prevent degradation below minimum viable quorum
46
+ else
47
+ echo "$(check_percentage_quorum "$adjusted_agents" "$adjusted_quorum_threshold" "$adjusted_agents")"
48
+ fi
49
+ }
50
+
51
+ # Assertion functions
52
+ assert_equals() {
53
+ local actual="$1"
54
+ local expected="$2"
55
+ local message="${3:-Assertion failed}"
56
+
57
+ if [ "$actual" != "$expected" ]; then
58
+ echo "FAIL: $message (Expected: $expected, Got: $actual)"
59
+ exit 1
60
+ fi
61
+ }
62
+
63
+ assert_greater_than() {
64
+ local actual="$1"
65
+ local expected="$2"
66
+ local message="${3:-Assertion failed}"
67
+
68
+ if [ "$actual" -le "$expected" ]; then
69
+ echo "FAIL: $message (Expected > $expected, Got: $actual)"
70
+ exit 1
71
+ fi
72
+ }
73
+
74
+ assert_not_empty() {
75
+ local value="$1"
76
+ local message="${2:-Value is empty}"
77
+
78
+ if [ -z "$value" ]; then
79
+ echo "FAIL: $message"
80
+ exit 1
81
+ fi
82
+ }
83
+
84
+ # Error handling and logging
85
+ log_error() {
86
+ local message="$1"
87
+ echo "[ERROR] $message" >&2
88
+ }
89
+
90
+ # Cleanup function
91
+ cleanup() {
92
+ # Remove any temporary files or reset test environments
93
+ echo "Cleaning up test environment..."
94
+ }
95
+
96
+ # Trap to ensure cleanup happens even if script fails
97
+ trap cleanup EXIT