claude-flow-novice 2.15.3 → 2.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/agent-loader.js +146 -165
  246. package/dist/agents/agent-loader.js.map +1 -1
  247. package/dist/agents/task-agent-integration.js +1 -1
  248. package/dist/agents/task-agent-integration.js.map +1 -1
  249. package/dist/api/health-endpoints.js +390 -0
  250. package/dist/api/health-endpoints.js.map +1 -0
  251. package/dist/cli/agent-executor.js +4 -1
  252. package/dist/cli/agent-executor.js.map +1 -1
  253. package/dist/cli/agent-prompt-builder.js +89 -1
  254. package/dist/cli/agent-prompt-builder.js.map +1 -1
  255. package/dist/cli/agent-spawn.js +130 -37
  256. package/dist/cli/agent-spawn.js.map +1 -1
  257. package/dist/cli/skill-cache-validator.js +412 -0
  258. package/dist/cli/skill-cache-validator.js.map +1 -0
  259. package/dist/cli/skill-cli.js +991 -0
  260. package/dist/cli/skill-cli.js.map +1 -0
  261. package/dist/cli/skill-execution-logger.js +284 -0
  262. package/dist/cli/skill-execution-logger.js.map +1 -0
  263. package/dist/cli/skill-loader.js +457 -0
  264. package/dist/cli/skill-loader.js.map +1 -0
  265. package/dist/coordination/event-bus.js +2 -2
  266. package/dist/coordination/event-bus.js.map +1 -1
  267. package/dist/coordination/fleet-manager.js +1 -1
  268. package/dist/coordination/fleet-manager.js.map +1 -1
  269. package/dist/coordination/index.js +23 -9
  270. package/dist/coordination/index.js.map +1 -1
  271. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  272. package/dist/db/migration-manager.js +483 -0
  273. package/dist/db/migration-manager.js.map +1 -0
  274. package/dist/db/skills-query.js +535 -0
  275. package/dist/db/skills-query.js.map +1 -0
  276. package/dist/integration/DatabaseHandoff.js +1 -1
  277. package/dist/integration/DatabaseHandoff.js.map +1 -1
  278. package/dist/jobs/edge-case-analyzer.js +367 -0
  279. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  280. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  281. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  282. package/dist/lib/agent-output-parser.js.map +1 -1
  283. package/dist/lib/agent-output-validator.js.map +1 -1
  284. package/dist/lib/agent-workspace.js +281 -0
  285. package/dist/lib/agent-workspace.js.map +1 -0
  286. package/dist/lib/atomic-file-writer.js +377 -0
  287. package/dist/lib/atomic-file-writer.js.map +1 -0
  288. package/dist/lib/backup-manager.js +779 -0
  289. package/dist/lib/backup-manager.js.map +1 -0
  290. package/dist/lib/checkpoint-manager.js +837 -0
  291. package/dist/lib/checkpoint-manager.js.map +1 -0
  292. package/dist/lib/circuit-breaker.js +340 -0
  293. package/dist/lib/circuit-breaker.js.map +1 -0
  294. package/dist/lib/completion-signal-handler.js +243 -0
  295. package/dist/lib/completion-signal-handler.js.map +1 -0
  296. package/dist/lib/config-manager.js +312 -0
  297. package/dist/lib/config-manager.js.map +1 -0
  298. package/dist/lib/config-migrator.js +386 -0
  299. package/dist/lib/config-migrator.js.map +1 -0
  300. package/dist/lib/config-validator.js.map +1 -1
  301. package/dist/lib/correlation-cache.js +311 -0
  302. package/dist/lib/correlation-cache.js.map +1 -0
  303. package/dist/lib/correlation.js +263 -0
  304. package/dist/lib/correlation.js.map +1 -0
  305. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  306. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  307. package/dist/lib/database-service/correlation.js +329 -0
  308. package/dist/lib/database-service/correlation.js.map +1 -0
  309. package/dist/lib/database-service/errors.js +120 -0
  310. package/dist/lib/database-service/errors.js.map +1 -0
  311. package/dist/lib/database-service/index.js +168 -0
  312. package/dist/lib/database-service/index.js.map +1 -0
  313. package/dist/lib/database-service/postgres-adapter.js +526 -0
  314. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  315. package/dist/lib/database-service/redis-adapter.js +360 -0
  316. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  317. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  318. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  319. package/dist/lib/database-service/transaction-manager.js +773 -0
  320. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  321. package/dist/lib/database-service/types.js +23 -0
  322. package/dist/lib/database-service/types.js.map +1 -0
  323. package/dist/lib/deadlock-resolver.js +292 -0
  324. package/dist/lib/deadlock-resolver.js.map +1 -0
  325. package/dist/lib/distributed-lock.js +451 -0
  326. package/dist/lib/distributed-lock.js.map +1 -0
  327. package/dist/lib/edge-case-deduplicator.js +227 -0
  328. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  329. package/dist/lib/encryption-manager.js +322 -0
  330. package/dist/lib/encryption-manager.js.map +1 -0
  331. package/dist/lib/error-aggregator.js +234 -0
  332. package/dist/lib/error-aggregator.js.map +1 -0
  333. package/dist/lib/errors.js +287 -0
  334. package/dist/lib/errors.js.map +1 -0
  335. package/dist/lib/file-lock-manager.js +578 -0
  336. package/dist/lib/file-lock-manager.js.map +1 -0
  337. package/dist/lib/file-operations.js +367 -0
  338. package/dist/lib/file-operations.js.map +1 -0
  339. package/dist/lib/idempotent-write.js +237 -0
  340. package/dist/lib/idempotent-write.js.map +1 -0
  341. package/dist/lib/integration-schema-validator.js +522 -0
  342. package/dist/lib/integration-schema-validator.js.map +1 -0
  343. package/dist/lib/lock-health-monitor.js +298 -0
  344. package/dist/lib/lock-health-monitor.js.map +1 -0
  345. package/dist/lib/log-shipper.js +422 -0
  346. package/dist/lib/log-shipper.js.map +1 -0
  347. package/dist/lib/logging.js +146 -0
  348. package/dist/lib/logging.js.map +1 -0
  349. package/dist/lib/message-deduplicator.js +439 -0
  350. package/dist/lib/message-deduplicator.js.map +1 -0
  351. package/dist/lib/multi-system-query.js +604 -0
  352. package/dist/lib/multi-system-query.js.map +1 -0
  353. package/dist/lib/orphan-detector.js +332 -0
  354. package/dist/lib/orphan-detector.js.map +1 -0
  355. package/dist/lib/password-generator.js +166 -0
  356. package/dist/lib/password-generator.js.map +1 -0
  357. package/dist/lib/path-validator.js +429 -0
  358. package/dist/lib/path-validator.js.map +1 -0
  359. package/dist/lib/query-translator.js +905 -0
  360. package/dist/lib/query-translator.js.map +1 -0
  361. package/dist/lib/queue-recovery.js +469 -0
  362. package/dist/lib/queue-recovery.js.map +1 -0
  363. package/dist/lib/redis-queue-manager.js +512 -0
  364. package/dist/lib/redis-queue-manager.js.map +1 -0
  365. package/dist/lib/reflection-archiver.js +272 -0
  366. package/dist/lib/reflection-archiver.js.map +1 -0
  367. package/dist/lib/retry-manager.js +453 -0
  368. package/dist/lib/retry-manager.js.map +1 -0
  369. package/dist/lib/retry.js +262 -0
  370. package/dist/lib/retry.js.map +1 -0
  371. package/dist/lib/schema-transform.js +695 -0
  372. package/dist/lib/schema-transform.js.map +1 -0
  373. package/dist/lib/schema-validator.js +491 -0
  374. package/dist/lib/schema-validator.js.map +1 -0
  375. package/dist/lib/skill-cache.js +297 -0
  376. package/dist/lib/skill-cache.js.map +1 -0
  377. package/dist/lib/skill-content-manager.js +337 -0
  378. package/dist/lib/skill-content-manager.js.map +1 -0
  379. package/dist/lib/skill-frontmatter-parser.js +237 -0
  380. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  381. package/dist/lib/skill-git-integration.js +275 -0
  382. package/dist/lib/skill-git-integration.js.map +1 -0
  383. package/dist/lib/skill-markdown-validator.js +396 -0
  384. package/dist/lib/skill-markdown-validator.js.map +1 -0
  385. package/dist/lib/skill-output-parser.js +312 -0
  386. package/dist/lib/skill-output-parser.js.map +1 -0
  387. package/dist/lib/unified-query-api.js +467 -0
  388. package/dist/lib/unified-query-api.js.map +1 -0
  389. package/dist/middleware/auth-middleware.js +350 -0
  390. package/dist/middleware/auth-middleware.js.map +1 -0
  391. package/dist/middleware/schema-validation.js +347 -0
  392. package/dist/middleware/schema-validation.js.map +1 -0
  393. package/dist/providers/anthropic-provider.js +1 -1
  394. package/dist/providers/anthropic-provider.js.map +1 -1
  395. package/dist/providers/provider-factory.js +2 -2
  396. package/dist/providers/provider-factory.js.map +1 -1
  397. package/dist/services/edge-case-analyzer.js +321 -0
  398. package/dist/services/edge-case-analyzer.js.map +1 -0
  399. package/dist/services/edge-case-deduplicator.js +266 -0
  400. package/dist/services/edge-case-deduplicator.js.map +1 -0
  401. package/dist/services/edge-case-detector.js +337 -0
  402. package/dist/services/edge-case-detector.js.map +1 -0
  403. package/dist/services/edge-case-tracker.js +547 -0
  404. package/dist/services/edge-case-tracker.js.map +1 -0
  405. package/dist/services/health-check-system.js +586 -0
  406. package/dist/services/health-check-system.js.map +1 -0
  407. package/dist/services/metrics-logger.js +412 -0
  408. package/dist/services/metrics-logger.js.map +1 -0
  409. package/dist/services/patch-generator.js +378 -0
  410. package/dist/services/patch-generator.js.map +1 -0
  411. package/dist/services/patch-validator.js +337 -0
  412. package/dist/services/patch-validator.js.map +1 -0
  413. package/dist/services/performance-monitor.js +811 -0
  414. package/dist/services/performance-monitor.js.map +1 -0
  415. package/dist/services/promotion-pipeline.js +918 -0
  416. package/dist/services/promotion-pipeline.js.map +1 -0
  417. package/dist/services/promotion-validator.js +394 -0
  418. package/dist/services/promotion-validator.js.map +1 -0
  419. package/dist/services/reflection-logger.js +388 -0
  420. package/dist/services/reflection-logger.js.map +1 -0
  421. package/dist/services/skill-deployment.js +472 -0
  422. package/dist/services/skill-deployment.js.map +1 -0
  423. package/dist/services/skill-loader.js +427 -0
  424. package/dist/services/skill-loader.js.map +1 -0
  425. package/dist/services/skill-promotion.js +372 -0
  426. package/dist/services/skill-promotion.js.map +1 -0
  427. package/dist/services/skill-validator.js +454 -0
  428. package/dist/services/skill-validator.js.map +1 -0
  429. package/dist/services/skill-versioning.js +244 -0
  430. package/dist/services/skill-versioning.js.map +1 -0
  431. package/dist/services/workspace-supervisor.js +597 -0
  432. package/dist/services/workspace-supervisor.js.map +1 -0
  433. package/dist/types/edge-case.js +45 -0
  434. package/dist/types/edge-case.js.map +1 -0
  435. package/package.json +201 -177
  436. package/readme/README.md +19 -4
  437. package/scripts/backup-cleanup.sh +627 -0
  438. package/scripts/cleanup-workspaces.sh +412 -0
  439. package/scripts/cleanup-yaml-configs.sh +141 -0
  440. package/scripts/deploy-approved-skills.sh +263 -0
  441. package/scripts/health-check.sh +447 -0
  442. package/scripts/log-aggregator.sh +554 -0
  443. package/scripts/log-monitor.sh +629 -0
  444. package/scripts/manage-agent-workspaces.sh +434 -0
  445. package/scripts/migrate-schema.sh +533 -0
  446. package/scripts/promote-staged-skills.sh +423 -0
  447. package/scripts/verify-no-secrets.sh +88 -35
  448. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  449. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  450. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  451. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  452. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  453. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  454. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  455. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  456. package/README.md.backup_before_replace +0 -781
  457. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  458. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  459. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  460. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  461. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -1,27 +1,51 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  ##############################################################################
4
- # Gate Check Helper
5
- # Validates Loop 3 self-assessment against gate threshold
4
+ # Gate Check Helper - Test-Driven Validation with Hybrid Fallback
5
+ # Validates Loop 3 self-assessment using test-driven or confidence-based strategies
6
6
  #
7
7
  # Usage:
8
8
  # gate-check.sh --task-id <id> \
9
9
  # --agents <agent1,agent2,...> \
10
10
  # --threshold <0.0-1.0> \
11
- # --min-quorum <n|n%|0.n>
11
+ # --min-quorum <n|n%|0.n> \
12
+ # [--mode <mvp|standard|enterprise>] \
13
+ # [--success-criteria <json>] \
14
+ # [--strategy <test-driven|confidence|auto>]
15
+ #
16
+ # Environment:
17
+ # CFN_GATE_STRATEGY: test-driven|confidence|auto (default: auto)
12
18
  #
13
19
  # Returns:
14
- # Exit 0: Gate passed (Loop 3 meets threshold)
15
- # Exit 1: Gate failed (Loop 3 needs iteration)
20
+ # Exit 0: Gate passed
21
+ # Exit 1: Gate failed (needs iteration)
16
22
  ##############################################################################
17
23
 
18
24
  set -euo pipefail
19
25
 
26
+ # Script directory for helper resolution
27
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
28
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
29
+
30
+ # SECURITY FIX #1: Path Traversal Prevention (CWE-22)
31
+ # Validate PROJECT_ROOT is within expected location to prevent symlink attacks
32
+ EXPECTED_PREFIX="/home/user/claude-flow-novice"
33
+ if [[ ! "$PROJECT_ROOT" =~ ^${EXPECTED_PREFIX//./\\.} ]]; then
34
+ echo "❌ SECURITY ERROR: Invalid project root detected" >&2
35
+ echo " Expected prefix: $EXPECTED_PREFIX" >&2
36
+ echo " Actual path: $PROJECT_ROOT" >&2
37
+ echo " Risk: Path traversal / symlink attack" >&2
38
+ exit 1
39
+ fi
40
+
20
41
  # Parameters
21
42
  TASK_ID=""
22
43
  AGENTS=""
23
44
  THRESHOLD=""
24
45
  MIN_QUORUM=""
46
+ MODE="standard"
47
+ SUCCESS_CRITERIA=""
48
+ STRATEGY="${CFN_GATE_STRATEGY:-auto}"
25
49
 
26
50
  # Parse arguments
27
51
  while [[ $# -gt 0 ]]; do
@@ -30,61 +54,541 @@ while [[ $# -gt 0 ]]; do
30
54
  --agents) AGENTS="$2"; shift 2 ;;
31
55
  --threshold) THRESHOLD="$2"; shift 2 ;;
32
56
  --min-quorum) MIN_QUORUM="$2"; shift 2 ;;
57
+ --mode) MODE="$2"; shift 2 ;;
58
+ --success-criteria) SUCCESS_CRITERIA="$2"; shift 2 ;;
59
+ --strategy) STRATEGY="$2"; shift 2 ;;
33
60
  *) echo "Unknown option: $1"; exit 1 ;;
34
61
  esac
35
62
  done
36
63
 
37
64
  # Validation
38
65
  if [ -z "$TASK_ID" ] || [ -z "$AGENTS" ] || [ -z "$THRESHOLD" ] || [ -z "$MIN_QUORUM" ]; then
39
- echo "Error: Missing required parameters"
66
+ echo "Error: Missing required parameters" >&2
40
67
  exit 1
41
68
  fi
42
69
 
43
- # Use Redis Coordination skill to collect confidence scores
44
- SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.claude/skills/cfn-cfn-.." && pwd)"
45
- REDIS_COORD_SKILL="$SKILL_DIR/redis-coordination"
70
+ ##############################################################################
71
+ # Helper Functions
72
+ ##############################################################################
46
73
 
47
- echo "Gate Check Configuration:"
48
- echo " Task ID: $TASK_ID"
49
- echo " Agent IDs: $AGENTS"
50
- echo " Min Quorum: $MIN_QUORUM"
51
- echo ""
74
+ # Validate JSON structure of success criteria
75
+ # SECURITY FIX #2: JSON Schema Validation (CWE-400)
76
+ # Prevents DoS via excessively large test suite arrays and invalid field values
77
+ validate_success_criteria() {
78
+ local CRITERIA="$1"
79
+ local MAX_TEST_SUITES=50 # DoS prevention: max 50 test suites
80
+ local MAX_FIELD_LENGTH=256 # Field name length limit
81
+ local PASS_THRESHOLD_MIN=0.0
82
+ local PASS_THRESHOLD_MAX=1.0
83
+ local TIMEOUT_MIN=1
84
+ local TIMEOUT_MAX=3600
52
85
 
53
- # Collect Loop 3 confidence scores
54
- # Note: invoke-waiting-mode.sh outputs consensus to stdout and verbose messages to stderr
55
- # We capture only stdout to get the numeric consensus value
56
- CONSENSUS=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \
57
- --task-id "$TASK_ID" \
58
- --agent-ids "$AGENTS" \
59
- --min-quorum "$MIN_QUORUM") || {
60
- echo "❌ Error: Failed to collect Loop 3 confidence scores"
61
- echo " Agent IDs: $AGENTS"
62
- echo " Output: $CONSENSUS"
63
- exit 1
86
+ if [ -z "$CRITERIA" ]; then
87
+ echo "❌ No success criteria provided" >&2
88
+ return 1
89
+ fi
90
+
91
+ # Validate JSON structure
92
+ if ! echo "$CRITERIA" | jq empty 2>/dev/null; then
93
+ echo "❌ Invalid JSON in success criteria" >&2
94
+ return 1
95
+ fi
96
+
97
+ # Check for required fields
98
+ if ! echo "$CRITERIA" | jq -e '.test_suites' >/dev/null 2>&1; then
99
+ echo "❌ Missing test_suites array in success criteria" >&2
100
+ return 1
101
+ fi
102
+
103
+ # SECURITY FIX #2a: Array size validation - prevent DoS
104
+ local TEST_SUITE_COUNT
105
+ TEST_SUITE_COUNT=$(echo "$CRITERIA" | jq '.test_suites | length')
106
+
107
+ if [ -z "$TEST_SUITE_COUNT" ] || [ "$TEST_SUITE_COUNT" -lt 0 ]; then
108
+ echo "❌ Invalid test_suites array" >&2
109
+ return 1
110
+ fi
111
+
112
+ if [ "$TEST_SUITE_COUNT" -gt "$MAX_TEST_SUITES" ]; then
113
+ echo "❌ SECURITY ERROR: test_suites array exceeds maximum size" >&2
114
+ echo " Count: $TEST_SUITE_COUNT (max: $MAX_TEST_SUITES)" >&2
115
+ echo " Risk: DoS via resource exhaustion" >&2
116
+ return 1
117
+ fi
118
+
119
+ # SECURITY FIX #2b: Field-level validation
120
+ local SUITE_INDEX=0
121
+ while [ "$SUITE_INDEX" -lt "$TEST_SUITE_COUNT" ]; do
122
+ local SUITE
123
+ SUITE=$(echo "$CRITERIA" | jq ".test_suites[$SUITE_INDEX]")
124
+
125
+ # Validate pass_threshold (0.0-1.0)
126
+ local PASS_THRESHOLD
127
+ PASS_THRESHOLD=$(echo "$SUITE" | jq -r '.pass_threshold // 0.5')
128
+
129
+ if ! [[ "$PASS_THRESHOLD" =~ ^[0-9]+\.?[0-9]*$ ]]; then
130
+ echo "❌ Invalid pass_threshold in test suite $SUITE_INDEX: $PASS_THRESHOLD" >&2
131
+ return 1
132
+ fi
133
+
134
+ # Use bc for floating point comparison
135
+ if (( $(echo "$PASS_THRESHOLD < $PASS_THRESHOLD_MIN" | bc -l) )) || \
136
+ (( $(echo "$PASS_THRESHOLD > $PASS_THRESHOLD_MAX" | bc -l) )); then
137
+ echo "❌ pass_threshold out of range [0.0-1.0] in suite $SUITE_INDEX: $PASS_THRESHOLD" >&2
138
+ return 1
139
+ fi
140
+
141
+ # SECURITY FIX #2c: Timeout range validation (1-3600 seconds)
142
+ local TIMEOUT
143
+ TIMEOUT=$(echo "$SUITE" | jq -r '.timeout // 300')
144
+
145
+ if ! [[ "$TIMEOUT" =~ ^[0-9]+$ ]]; then
146
+ echo "❌ Invalid timeout in test suite $SUITE_INDEX: $TIMEOUT (must be integer)" >&2
147
+ return 1
148
+ fi
149
+
150
+ if [ "$TIMEOUT" -lt "$TIMEOUT_MIN" ] || [ "$TIMEOUT" -gt "$TIMEOUT_MAX" ]; then
151
+ echo "❌ Timeout out of range [${TIMEOUT_MIN}-${TIMEOUT_MAX}s] in suite $SUITE_INDEX: ${TIMEOUT}s" >&2
152
+ return 1
153
+ fi
154
+
155
+ # Validate suite name length
156
+ local SUITE_NAME
157
+ SUITE_NAME=$(echo "$SUITE" | jq -r '.name // "unnamed"')
158
+
159
+ if [ ${#SUITE_NAME} -gt "$MAX_FIELD_LENGTH" ]; then
160
+ echo "❌ Test suite name exceeds maximum length in suite $SUITE_INDEX" >&2
161
+ return 1
162
+ fi
163
+
164
+ SUITE_INDEX=$((SUITE_INDEX + 1))
165
+ done
166
+
167
+ return 0
64
168
  }
65
169
 
66
- # Validate consensus is a valid number
67
- if ! [[ "$CONSENSUS" =~ ^[0-9]+\.?[0-9]*$ ]]; then
68
- echo "⚠️ WARNING: Invalid consensus value: $CONSENSUS (expected numeric)"
69
- echo " Defaulting to 0.0"
70
- CONSENSUS="0.0"
71
- fi
170
+ # Check if success criteria exists and is valid
171
+ has_success_criteria() {
172
+ if [ -z "$SUCCESS_CRITERIA" ]; then
173
+ return 1
174
+ fi
72
175
 
73
- echo "Loop 3 Gate Check:"
74
- echo " Consensus: $CONSENSUS"
75
- echo " Threshold: $THRESHOLD"
76
- echo " Required: >= $THRESHOLD"
176
+ validate_success_criteria "$SUCCESS_CRITERIA" >/dev/null 2>&1
177
+ }
77
178
 
78
- # Compare consensus to gate threshold
79
- if (( $(echo "$CONSENSUS >= $THRESHOLD" | bc -l) )); then
80
- echo "✅ Gate PASSED - Loop 3 self-validation successful"
179
+ # Get mode-specific test pass threshold
180
+ get_mode_threshold() {
181
+ local MODE="$1"
81
182
 
82
- # NOTE: Orchestrator controls Loop 2 spawn timing directly (orchestrate.sh line 520)
83
- # No signal broadcast needed - Loop 2 agents spawn after this helper returns 0
183
+ case "$MODE" in
184
+ mvp) echo "0.80" ;;
185
+ standard) echo "0.95" ;;
186
+ enterprise) echo "0.99" ;;
187
+ *) echo "0.95" ;; # Default to standard
188
+ esac
189
+ }
84
190
 
85
- exit 0
86
- else
87
- echo "❌ Gate FAILED - Loop 3 needs improvement"
88
- echo " Gap: $(echo "$THRESHOLD - $CONSENSUS" | bc -l)"
89
- exit 1
90
- fi
191
+ # Validate command safety (prevent shell injection)
192
+ validate_command_safety() {
193
+ local COMMAND="$1"
194
+
195
+ # Check for dangerous shell patterns
196
+ # Allow: && (AND operator), || (OR operator)
197
+ # Block: ; (command separator), | (pipe), > < (redirects), ` (backticks), $() (command substitution), {} (brace expansion)
198
+
199
+ # Remove safe operators first
200
+ local SANITIZED="${COMMAND//&&/}"
201
+ SANITIZED="${SANITIZED//||/}"
202
+
203
+ # Now check for remaining dangerous metacharacters
204
+ if [[ "$SANITIZED" =~ [\;\|\>\<\`\$\(\)\{\}] ]]; then
205
+ echo "❌ Unsafe command detected: contains dangerous shell metacharacters" >&2
206
+ echo " Blocked patterns: ; | > < \` \$() {}" >&2
207
+ return 1
208
+ fi
209
+
210
+ return 0
211
+ }
212
+
213
+ # Check if command is required or optional
214
+ is_required() {
215
+ local SUITE_JSON="$1"
216
+ local REQUIRED=$(echo "$SUITE_JSON" | jq -r '.required // true')
217
+
218
+ [ "$REQUIRED" = "true" ]
219
+ }
220
+
221
+ # Execute a single test suite
222
+ execute_test_suite() {
223
+ local SUITE_JSON="$1"
224
+ local SUITE_NAME=$(echo "$SUITE_JSON" | jq -r '.name // "unnamed"')
225
+ local COMMAND=$(echo "$SUITE_JSON" | jq -r '.command')
226
+ local TIMEOUT=$(echo "$SUITE_JSON" | jq -r '.timeout // 300')
227
+ local FRAMEWORK=$(echo "$SUITE_JSON" | jq -r '.framework // "auto"')
228
+
229
+ echo " Executing test suite: $SUITE_NAME" >&2
230
+
231
+ # Validate command safety
232
+ if ! validate_command_safety "$COMMAND"; then
233
+ echo " ❌ Command validation failed" >&2
234
+ return 1
235
+ fi
236
+
237
+ # Execute with timeout
238
+ local OUTPUT
239
+ local EXIT_CODE=0
240
+
241
+ OUTPUT=$(cd "$PROJECT_ROOT" && timeout "$TIMEOUT" bash -c "$COMMAND" 2>&1) || EXIT_CODE=$?
242
+
243
+ if [ $EXIT_CODE -eq 124 ]; then
244
+ echo " ⚠️ Test execution timed out after ${TIMEOUT}s" >&2
245
+ echo '{"pass_rate": 0.0, "passed": 0, "failed": 0, "total": 0, "status": "timeout"}'
246
+ return 1
247
+ elif [ $EXIT_CODE -ne 0 ]; then
248
+ echo " ⚠️ Test execution failed with exit code $EXIT_CODE" >&2
249
+ fi
250
+
251
+ # Parse test results
252
+ local RESULTS
253
+ if [ -x "$PROJECT_ROOT/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh" ]; then
254
+ # Use dedicated parser if available (expects positional params: framework, output)
255
+ RESULTS=$("$PROJECT_ROOT/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh" \
256
+ "$FRAMEWORK" \
257
+ "$OUTPUT" 2>/dev/null) || {
258
+ echo " ⚠️ Failed to parse test results" >&2
259
+ RESULTS='{"pass_rate": 0.0, "passed": 0, "failed": 0, "total": 0, "status": "parse_error"}'
260
+ }
261
+ else
262
+ # Fallback: simple pattern matching
263
+ RESULTS=$(parse_test_results_fallback "$OUTPUT" "$FRAMEWORK" "$EXIT_CODE")
264
+ fi
265
+
266
+ local PASS_RATE=$(echo "$RESULTS" | jq -r '.pass_rate // 0.0')
267
+ local PASSED=$(echo "$RESULTS" | jq -r '.passed // 0')
268
+ local TOTAL=$(echo "$RESULTS" | jq -r '.total // 0')
269
+
270
+ echo " Pass rate: $PASS_RATE ($PASSED/$TOTAL tests)" >&2
271
+
272
+ echo "$RESULTS"
273
+ }
274
+
275
+ # Fallback test result parser (simple pattern matching)
276
+ parse_test_results_fallback() {
277
+ local OUTPUT="$1"
278
+ local FRAMEWORK="$2"
279
+ local EXIT_CODE="$3"
280
+
281
+ local PASSED=0
282
+ local FAILED=0
283
+ local TOTAL=0
284
+
285
+ # Try common test output patterns
286
+ if echo "$OUTPUT" | grep -qE "([0-9]+) passed.*([0-9]+) failed"; then
287
+ PASSED=$(echo "$OUTPUT" | grep -oE "([0-9]+) passed" | grep -oE "[0-9]+" | head -1)
288
+ FAILED=$(echo "$OUTPUT" | grep -oE "([0-9]+) failed" | grep -oE "[0-9]+" | head -1)
289
+ elif echo "$OUTPUT" | grep -qE "([0-9]+)/([0-9]+) tests? passed"; then
290
+ PASSED=$(echo "$OUTPUT" | grep -oE "([0-9]+)/([0-9]+)" | cut -d'/' -f1)
291
+ TOTAL=$(echo "$OUTPUT" | grep -oE "([0-9]+)/([0-9]+)" | cut -d'/' -f2)
292
+ FAILED=$((TOTAL - PASSED))
293
+ fi
294
+
295
+ TOTAL=$((PASSED + FAILED))
296
+
297
+ # Calculate pass rate
298
+ local PASS_RATE="0.0"
299
+ if [ $TOTAL -gt 0 ]; then
300
+ PASS_RATE=$(echo "scale=2; $PASSED / $TOTAL" | bc -l)
301
+ elif [ $EXIT_CODE -eq 0 ]; then
302
+ # No test output but exit code 0 - assume success
303
+ PASS_RATE="1.0"
304
+ PASSED=1
305
+ TOTAL=1
306
+ fi
307
+
308
+ echo "{\"pass_rate\": $PASS_RATE, \"passed\": $PASSED, \"failed\": $FAILED, \"total\": $TOTAL, \"status\": \"parsed\"}"
309
+ }
310
+
311
+ # Calculate aggregate pass rate from multiple test suites
312
+ calculate_aggregate_pass_rate() {
313
+ local RESULTS_FILE="$1"
314
+
315
+ local TOTAL_PASSED=0
316
+ local TOTAL_TESTS=0
317
+
318
+ while IFS= read -r RESULT; do
319
+ local PASSED=$(echo "$RESULT" | jq -r '.passed // 0')
320
+ local TOTAL=$(echo "$RESULT" | jq -r '.total // 0')
321
+
322
+ TOTAL_PASSED=$((TOTAL_PASSED + PASSED))
323
+ TOTAL_TESTS=$((TOTAL_TESTS + TOTAL))
324
+ done < "$RESULTS_FILE"
325
+
326
+ if [ $TOTAL_TESTS -eq 0 ]; then
327
+ echo "0.0"
328
+ else
329
+ echo "scale=4; $TOTAL_PASSED / $TOTAL_TESTS" | bc -l
330
+ fi
331
+ }
332
+
333
+ # Store test results (Redis for CLI mode, file for Task mode)
334
+ store_test_results() {
335
+ local TASK_ID="$1"
336
+ local PASS_RATE="$2"
337
+ local RESULTS_FILE="$3"
338
+
339
+ # Check if running in CLI mode (Redis available)
340
+ if command -v redis-cli >/dev/null 2>&1 && redis-cli ping >/dev/null 2>&1; then
341
+ # Store in Redis
342
+ redis-cli HSET "task:$TASK_ID:gate" "test_pass_rate" "$PASS_RATE" >/dev/null
343
+ redis-cli HSET "task:$TASK_ID:gate" "test_results" "$(cat "$RESULTS_FILE")" >/dev/null
344
+ redis-cli EXPIRE "task:$TASK_ID:gate" 86400 >/dev/null # 24h TTL
345
+ else
346
+ # Task mode: store in temp file for coordinator to read
347
+ local OUTPUT_DIR="/tmp/cfn-gate-results"
348
+ mkdir -p "$OUTPUT_DIR"
349
+ echo "$PASS_RATE" > "$OUTPUT_DIR/$TASK_ID.pass_rate"
350
+ cp "$RESULTS_FILE" "$OUTPUT_DIR/$TASK_ID.results.json"
351
+ fi
352
+ }
353
+
354
+ # Generate iteration context for failed gate
355
+ generate_iteration_context() {
356
+ local TASK_ID="$1"
357
+ local PASS_RATE="$2"
358
+ local THRESHOLD="$3"
359
+ local RESULTS_FILE="$4"
360
+
361
+ local CONTEXT_FILE="/tmp/cfn-iteration-context-$TASK_ID.json"
362
+
363
+ # Extract failed test details
364
+ local FAILED_TESTS=$(jq -s '[.[] | select(.pass_rate < 1.0)]' "$RESULTS_FILE")
365
+
366
+ # Generate context
367
+ cat > "$CONTEXT_FILE" <<EOF
368
+ {
369
+ "gate_status": "failed",
370
+ "pass_rate": $PASS_RATE,
371
+ "threshold": $THRESHOLD,
372
+ "gap": $(echo "$THRESHOLD - $PASS_RATE" | bc -l),
373
+ "failed_tests": $FAILED_TESTS,
374
+ "recommendations": [
375
+ "Review failed test suites",
376
+ "Fix implementation issues",
377
+ "Re-run validation"
378
+ ]
379
+ }
380
+ EOF
381
+
382
+ echo " Iteration context saved to: $CONTEXT_FILE" >&2
383
+ }
384
+
385
+ ##############################################################################
386
+ # Test-Driven Gate Check
387
+ ##############################################################################
388
+
389
+ gate_check_test_driven() {
390
+ local TASK_ID="$1"
391
+ local MODE="$2"
392
+ local SUCCESS_CRITERIA="$3"
393
+
394
+ # SECURITY FIX #3: DoS Prevention - Total Time Limit
395
+ # Prevent unbounded test execution time (default 30 min, configurable)
396
+ local MAX_TOTAL_TIME=${CFN_MAX_GATE_TIME:-1800} # Default 30 minutes (1800 seconds)
397
+ local START_TIME=$(date +%s)
398
+
399
+ echo "🧪 Test-Driven Gate Check"
400
+ echo " Task ID: $TASK_ID"
401
+ echo " Mode: $MODE"
402
+ echo " Max Total Time: ${MAX_TOTAL_TIME}s"
403
+ echo ""
404
+
405
+ # Validate success criteria
406
+ if ! validate_success_criteria "$SUCCESS_CRITERIA"; then
407
+ echo "❌ Invalid success criteria" >&2
408
+ return 1
409
+ fi
410
+
411
+ # Extract test suites
412
+ local TEST_SUITES=$(echo "$SUCCESS_CRITERIA" | jq -c '.test_suites[]')
413
+
414
+ if [ -z "$TEST_SUITES" ]; then
415
+ echo "❌ No test suites defined in success criteria" >&2
416
+ return 1
417
+ fi
418
+
419
+ # Temporary file for results
420
+ # SECURITY FIX #4: Secure Temp File Permissions
421
+ # Set restrictive permissions (owner read/write only) to prevent information disclosure
422
+ local RESULTS_FILE=$(mktemp)
423
+ chmod 600 "$RESULTS_FILE"
424
+ trap "rm -f '$RESULTS_FILE'" EXIT
425
+
426
+ # Execute each test suite
427
+ local SUITE_COUNT=0
428
+ local FAILED_REQUIRED=0
429
+
430
+ while IFS= read -r SUITE; do
431
+ SUITE_COUNT=$((SUITE_COUNT + 1))
432
+
433
+ # SECURITY FIX #3 (continued): Check total execution time
434
+ local CURRENT_TIME=$(date +%s)
435
+ local ELAPSED=$((CURRENT_TIME - START_TIME))
436
+
437
+ if [ $ELAPSED -gt $MAX_TOTAL_TIME ]; then
438
+ echo "❌ SECURITY ERROR: Total execution time exceeded" >&2
439
+ echo " Elapsed: ${ELAPSED}s > Max: ${MAX_TOTAL_TIME}s" >&2
440
+ echo " Risk: DoS via unbounded execution" >&2
441
+ return 1
442
+ fi
443
+
444
+ local RESULT
445
+ RESULT=$(execute_test_suite "$SUITE") || {
446
+ if is_required "$SUITE"; then
447
+ FAILED_REQUIRED=$((FAILED_REQUIRED + 1))
448
+ echo " ❌ Required test suite failed" >&2
449
+ fi
450
+ }
451
+
452
+ echo "$RESULT" >> "$RESULTS_FILE"
453
+ done <<< "$TEST_SUITES"
454
+
455
+ # If any required test suite failed completely, gate fails immediately
456
+ if [ $FAILED_REQUIRED -gt 0 ]; then
457
+ echo ""
458
+ echo "❌ Gate FAILED: $FAILED_REQUIRED required test suite(s) failed completely" >&2
459
+ generate_iteration_context "$TASK_ID" "0.0" "$(get_mode_threshold "$MODE")" "$RESULTS_FILE"
460
+ return 1
461
+ fi
462
+
463
+ # Calculate aggregate pass rate
464
+ local TOTAL_PASS_RATE
465
+ TOTAL_PASS_RATE=$(calculate_aggregate_pass_rate "$RESULTS_FILE")
466
+
467
+ # Store results
468
+ store_test_results "$TASK_ID" "$TOTAL_PASS_RATE" "$RESULTS_FILE"
469
+
470
+ # Get threshold for mode
471
+ local TEST_THRESHOLD
472
+ TEST_THRESHOLD=$(get_mode_threshold "$MODE")
473
+
474
+ echo ""
475
+ echo "Test Results Summary:"
476
+ echo " Aggregate Pass Rate: $TOTAL_PASS_RATE"
477
+ echo " Required Threshold: $TEST_THRESHOLD ($MODE mode)"
478
+ echo ""
479
+
480
+ # Check threshold
481
+ if (( $(echo "$TOTAL_PASS_RATE >= $TEST_THRESHOLD" | bc -l) )); then
482
+ echo "✅ Gate PASSED: Test-driven validation successful"
483
+ return 0
484
+ else
485
+ echo "❌ Gate FAILED: Pass rate below threshold"
486
+ echo " Gap: $(echo "$TEST_THRESHOLD - $TOTAL_PASS_RATE" | bc -l)"
487
+ generate_iteration_context "$TASK_ID" "$TOTAL_PASS_RATE" "$TEST_THRESHOLD" "$RESULTS_FILE"
488
+ return 1
489
+ fi
490
+ }
491
+
492
+ ##############################################################################
493
+ # Confidence-Based Gate Check (Original Implementation)
494
+ ##############################################################################
495
+
496
+ gate_check_confidence() {
497
+ local TASK_ID="$1"
498
+ local AGENTS="$2"
499
+ local THRESHOLD="$3"
500
+ local MIN_QUORUM="$4"
501
+
502
+ # Deprecation warning
503
+ echo "⚠️ Using legacy confidence-based gate check" >&2
504
+ echo " Consider migrating to test-driven validation" >&2
505
+ echo ""
506
+
507
+ # Use Redis Coordination skill to collect confidence scores
508
+ local REDIS_COORD_SKILL="$PROJECT_ROOT/.claude/skills/cfn-redis-coordination"
509
+
510
+ echo "Gate Check Configuration:"
511
+ echo " Task ID: $TASK_ID"
512
+ echo " Agent IDs: $AGENTS"
513
+ echo " Min Quorum: $MIN_QUORUM"
514
+ echo ""
515
+
516
+ # Collect Loop 3 confidence scores
517
+ local CONSENSUS
518
+ CONSENSUS=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \
519
+ --task-id "$TASK_ID" \
520
+ --agent-ids "$AGENTS" \
521
+ --min-quorum "$MIN_QUORUM" 2>/dev/null) || {
522
+ echo "❌ Error: Failed to collect Loop 3 confidence scores" >&2
523
+ echo " Agent IDs: $AGENTS" >&2
524
+ return 1
525
+ }
526
+
527
+ # Validate consensus is a valid number
528
+ if ! [[ "$CONSENSUS" =~ ^[0-9]+\.?[0-9]*$ ]]; then
529
+ echo "⚠️ WARNING: Invalid consensus value: $CONSENSUS (expected numeric)" >&2
530
+ echo " Defaulting to 0.0" >&2
531
+ CONSENSUS="0.0"
532
+ fi
533
+
534
+ echo "Loop 3 Gate Check:"
535
+ echo " Consensus: $CONSENSUS"
536
+ echo " Threshold: $THRESHOLD"
537
+ echo " Required: >= $THRESHOLD"
538
+ echo ""
539
+
540
+ # Compare consensus to gate threshold
541
+ if (( $(echo "$CONSENSUS >= $THRESHOLD" | bc -l) )); then
542
+ echo "✅ Gate PASSED - Loop 3 self-validation successful"
543
+ return 0
544
+ else
545
+ echo "❌ Gate FAILED - Loop 3 needs improvement"
546
+ echo " Gap: $(echo "$THRESHOLD - $CONSENSUS" | bc -l)"
547
+ return 1
548
+ fi
549
+ }
550
+
551
+ ##############################################################################
552
+ # Main Execution - Strategy Selection
553
+ ##############################################################################
554
+
555
+ echo "========================================="
556
+ echo "CFN Loop Gate Check v2.0"
557
+ echo "Strategy: $STRATEGY"
558
+ echo "========================================="
559
+ echo ""
560
+
561
+ case "$STRATEGY" in
562
+ test-driven)
563
+ if [ -z "$SUCCESS_CRITERIA" ]; then
564
+ echo "❌ Error: test-driven strategy requires --success-criteria" >&2
565
+ exit 1
566
+ fi
567
+ gate_check_test_driven "$TASK_ID" "$MODE" "$SUCCESS_CRITERIA"
568
+ ;;
569
+
570
+ confidence)
571
+ gate_check_confidence "$TASK_ID" "$AGENTS" "$THRESHOLD" "$MIN_QUORUM"
572
+ ;;
573
+
574
+ auto)
575
+ # Hybrid mode: prefer test-driven if criteria exists, fallback to confidence
576
+ if has_success_criteria; then
577
+ echo "Auto-detected: Using test-driven validation" >&2
578
+ echo ""
579
+ gate_check_test_driven "$TASK_ID" "$MODE" "$SUCCESS_CRITERIA"
580
+ else
581
+ echo "Auto-detected: Using confidence-based validation (no success criteria)" >&2
582
+ echo ""
583
+ gate_check_confidence "$TASK_ID" "$AGENTS" "$THRESHOLD" "$MIN_QUORUM"
584
+ fi
585
+ ;;
586
+
587
+ *)
588
+ echo "❌ Error: Invalid strategy '$STRATEGY'" >&2
589
+ echo " Valid options: test-driven, confidence, auto" >&2
590
+ exit 1
591
+ ;;
592
+ esac
593
+
594
+ exit $?