agentic-qe 3.4.1 → 3.4.2

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 (496) hide show
  1. package/.claude/skills/.validation/README.md +111 -0
  2. package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
  3. package/.claude/skills/.validation/examples/performance-testing-output.example.json +252 -0
  4. package/.claude/skills/.validation/examples/security-testing-output.example.json +413 -0
  5. package/.claude/skills/.validation/examples/testability-scoring-output.example.json +350 -0
  6. package/.claude/skills/.validation/schemas/skill-eval.schema.json +452 -0
  7. package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
  8. package/.claude/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
  9. package/.claude/skills/.validation/schemas/skill-output.template.json +610 -0
  10. package/.claude/skills/.validation/skill-validation-mcp-integration.md +250 -0
  11. package/.claude/skills/.validation/templates/eval.template.yaml +366 -0
  12. package/.claude/skills/.validation/templates/schemas/output.json +145 -0
  13. package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
  14. package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
  15. package/.claude/skills/.validation/templates/validate.template.sh +1060 -0
  16. package/.claude/skills/.validation/templates/validator-lib.sh +1031 -0
  17. package/.claude/skills/.validation/test-data/invalid-output.json +5 -0
  18. package/.claude/skills/.validation/test-data/minimal-output.json +9 -0
  19. package/.claude/skills/.validation/test-data/sample-output.json +73 -0
  20. package/.claude/skills/TRUST-TIERS.md +158 -0
  21. package/.claude/skills/a11y-ally/SKILL.md +1664 -1658
  22. package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +376 -0
  23. package/.claude/skills/a11y-ally/schemas/output.json +549 -0
  24. package/.claude/skills/a11y-ally/scripts/validate.sh +690 -0
  25. package/.claude/skills/accessibility-testing/SKILL.md +8 -1
  26. package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
  27. package/.claude/skills/accessibility-testing/schemas/output.json +776 -0
  28. package/.claude/skills/accessibility-testing/scripts/validate.sh +943 -0
  29. package/.claude/skills/accessibility-testing/test-data/sample-output.json +191 -0
  30. package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -0
  31. package/.claude/skills/agentic-quality-engineering/schemas/output.json +577 -0
  32. package/.claude/skills/api-testing-patterns/SKILL.md +5 -0
  33. package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
  34. package/.claude/skills/api-testing-patterns/schemas/output.json +845 -0
  35. package/.claude/skills/api-testing-patterns/scripts/validate.sh +931 -0
  36. package/.claude/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
  37. package/.claude/skills/aqe-v2-v3-migration/skill.md +4 -0
  38. package/.claude/skills/brutal-honesty-review/SKILL.md +5 -0
  39. package/.claude/skills/brutal-honesty-review/schemas/output.json +291 -0
  40. package/.claude/skills/brutal-honesty-review/scripts/validate.sh +130 -0
  41. package/.claude/skills/bug-reporting-excellence/SKILL.md +5 -0
  42. package/.claude/skills/bug-reporting-excellence/schemas/output.json +288 -0
  43. package/.claude/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
  44. package/.claude/skills/chaos-engineering-resilience/SKILL.md +5 -0
  45. package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  46. package/.claude/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
  47. package/.claude/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
  48. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -0
  49. package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -0
  50. package/.claude/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -0
  51. package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate.sh +310 -0
  52. package/.claude/skills/code-review-quality/SKILL.md +5 -0
  53. package/.claude/skills/code-review-quality/schemas/output.json +264 -0
  54. package/.claude/skills/code-review-quality/scripts/validate.sh +113 -0
  55. package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
  56. package/.claude/skills/compatibility-testing/schemas/output.json +551 -0
  57. package/.claude/skills/compatibility-testing/scripts/validate.sh +605 -0
  58. package/.claude/skills/compliance-testing/SKILL.md +7 -0
  59. package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
  60. package/.claude/skills/compliance-testing/schemas/output.json +845 -0
  61. package/.claude/skills/compliance-testing/scripts/validate.sh +888 -0
  62. package/.claude/skills/consultancy-practices/SKILL.md +4 -0
  63. package/.claude/skills/consultancy-practices/schemas/output.json +282 -0
  64. package/.claude/skills/context-driven-testing/SKILL.md +3 -0
  65. package/.claude/skills/contract-testing/SKILL.md +5 -0
  66. package/.claude/skills/contract-testing/evals/contract-testing.yaml +748 -0
  67. package/.claude/skills/contract-testing/schemas/output.json +638 -0
  68. package/.claude/skills/contract-testing/scripts/validate.sh +1033 -0
  69. package/.claude/skills/database-testing/SKILL.md +5 -0
  70. package/.claude/skills/database-testing/evals/database-testing.yaml +968 -0
  71. package/.claude/skills/database-testing/schemas/output.json +1446 -0
  72. package/.claude/skills/database-testing/scripts/validate.sh +1099 -0
  73. package/.claude/skills/exploratory-testing-advanced/SKILL.md +3 -0
  74. package/.claude/skills/holistic-testing-pact/SKILL.md +3 -0
  75. package/.claude/skills/localization-testing/SKILL.md +6 -0
  76. package/.claude/skills/localization-testing/evals/localization-testing.yaml +544 -0
  77. package/.claude/skills/localization-testing/schemas/output.json +325 -0
  78. package/.claude/skills/localization-testing/scripts/validate.sh +131 -0
  79. package/.claude/skills/mobile-testing/SKILL.md +6 -0
  80. package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
  81. package/.claude/skills/mobile-testing/schemas/output.json +318 -0
  82. package/.claude/skills/mobile-testing/scripts/validate.sh +127 -0
  83. package/.claude/skills/mutation-testing/SKILL.md +8 -1
  84. package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
  85. package/.claude/skills/mutation-testing/schemas/output.json +707 -0
  86. package/.claude/skills/mutation-testing/scripts/validate.sh +992 -0
  87. package/.claude/skills/mutation-testing/test-data/sample-output.json +295 -0
  88. package/.claude/skills/n8n-expression-testing/SKILL.md +6 -0
  89. package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -0
  90. package/.claude/skills/n8n-expression-testing/schemas/output.json +369 -0
  91. package/.claude/skills/n8n-expression-testing/scripts/validate.sh +162 -0
  92. package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +6 -0
  93. package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -0
  94. package/.claude/skills/n8n-integration-testing-patterns/schemas/output.json +291 -0
  95. package/.claude/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
  96. package/.claude/skills/n8n-security-testing/SKILL.md +6 -0
  97. package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -0
  98. package/.claude/skills/n8n-security-testing/schemas/output.json +293 -0
  99. package/.claude/skills/n8n-security-testing/scripts/validate.sh +120 -0
  100. package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +6 -0
  101. package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -0
  102. package/.claude/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -0
  103. package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
  104. package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +6 -0
  105. package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -0
  106. package/.claude/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -0
  107. package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
  108. package/.claude/skills/performance-analysis/SKILL.md +6 -0
  109. package/.claude/skills/performance-analysis/evals/performance-analysis.yaml +144 -0
  110. package/.claude/skills/performance-analysis/schemas/output.json +588 -0
  111. package/.claude/skills/performance-analysis/scripts/validate.sh +63 -0
  112. package/.claude/skills/performance-testing/SKILL.md +5 -0
  113. package/.claude/skills/performance-testing/evals/performance-testing.yaml +772 -0
  114. package/.claude/skills/performance-testing/schemas/output.json +1184 -0
  115. package/.claude/skills/performance-testing/scripts/validate.sh +1090 -0
  116. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +1759 -1753
  117. package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
  118. package/.claude/skills/qcsd-ideation-swarm/schemas/output.json +568 -0
  119. package/.claude/skills/qcsd-ideation-swarm/scripts/validate.sh +56 -0
  120. package/.claude/skills/qe-chaos-resilience/SKILL.md +6 -0
  121. package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
  122. package/.claude/skills/qe-chaos-resilience/schemas/output.json +314 -0
  123. package/.claude/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
  124. package/.claude/skills/qe-code-intelligence/SKILL.md +6 -0
  125. package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
  126. package/.claude/skills/qe-code-intelligence/schemas/output.json +315 -0
  127. package/.claude/skills/qe-code-intelligence/scripts/validate.sh +408 -0
  128. package/.claude/skills/qe-contract-testing/SKILL.md +6 -0
  129. package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
  130. package/.claude/skills/qe-contract-testing/schemas/output.json +295 -0
  131. package/.claude/skills/qe-contract-testing/scripts/validate.sh +421 -0
  132. package/.claude/skills/qe-coverage-analysis/SKILL.md +6 -0
  133. package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
  134. package/.claude/skills/qe-coverage-analysis/schemas/output.json +286 -0
  135. package/.claude/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
  136. package/.claude/skills/qe-defect-intelligence/SKILL.md +6 -0
  137. package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
  138. package/.claude/skills/qe-defect-intelligence/schemas/output.json +283 -0
  139. package/.claude/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
  140. package/.claude/skills/qe-iterative-loop/SKILL.md +445 -440
  141. package/.claude/skills/qe-iterative-loop/schemas/output.json +264 -0
  142. package/.claude/skills/qe-iterative-loop/scripts/validate.sh +474 -0
  143. package/.claude/skills/qe-learning-optimization/SKILL.md +6 -0
  144. package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
  145. package/.claude/skills/qe-learning-optimization/schemas/output.json +288 -0
  146. package/.claude/skills/qe-learning-optimization/scripts/validate.sh +56 -0
  147. package/.claude/skills/qe-quality-assessment/SKILL.md +6 -0
  148. package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
  149. package/.claude/skills/qe-quality-assessment/schemas/output.json +550 -0
  150. package/.claude/skills/qe-quality-assessment/scripts/validate.sh +352 -0
  151. package/.claude/skills/qe-requirements-validation/SKILL.md +6 -0
  152. package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
  153. package/.claude/skills/qe-requirements-validation/schemas/output.json +587 -0
  154. package/.claude/skills/qe-requirements-validation/scripts/validate.sh +275 -0
  155. package/.claude/skills/qe-security-compliance/SKILL.md +6 -0
  156. package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
  157. package/.claude/skills/qe-security-compliance/schemas/output.json +498 -0
  158. package/.claude/skills/qe-security-compliance/scripts/validate.sh +305 -0
  159. package/.claude/skills/qe-test-execution/SKILL.md +6 -0
  160. package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
  161. package/.claude/skills/qe-test-execution/schemas/output.json +529 -0
  162. package/.claude/skills/qe-test-execution/scripts/validate.sh +323 -0
  163. package/.claude/skills/qe-test-generation/SKILL.md +6 -0
  164. package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
  165. package/.claude/skills/qe-test-generation/schemas/output.json +439 -0
  166. package/.claude/skills/qe-test-generation/scripts/validate.sh +56 -0
  167. package/.claude/skills/qe-visual-accessibility/SKILL.md +6 -0
  168. package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
  169. package/.claude/skills/qe-visual-accessibility/schemas/output.json +491 -0
  170. package/.claude/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
  171. package/.claude/skills/quality-metrics/SKILL.md +6 -0
  172. package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
  173. package/.claude/skills/quality-metrics/schemas/output.json +403 -0
  174. package/.claude/skills/quality-metrics/scripts/validate.sh +434 -0
  175. package/.claude/skills/refactoring-patterns/SKILL.md +5 -0
  176. package/.claude/skills/refactoring-patterns/schemas/output.json +475 -0
  177. package/.claude/skills/refactoring-patterns/scripts/validate.sh +241 -0
  178. package/.claude/skills/regression-testing/SKILL.md +6 -0
  179. package/.claude/skills/regression-testing/evals/regression-testing.yaml +504 -0
  180. package/.claude/skills/regression-testing/schemas/output.json +311 -0
  181. package/.claude/skills/regression-testing/scripts/validate.sh +130 -0
  182. package/.claude/skills/risk-based-testing/SKILL.md +6 -0
  183. package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
  184. package/.claude/skills/risk-based-testing/schemas/output.json +480 -0
  185. package/.claude/skills/risk-based-testing/scripts/validate.sh +56 -0
  186. package/.claude/skills/security-testing/SKILL.md +5 -0
  187. package/.claude/skills/security-testing/evals/security-testing.yaml +789 -0
  188. package/.claude/skills/security-testing/schemas/output.json +879 -0
  189. package/.claude/skills/security-testing/scripts/validate.sh +967 -0
  190. package/.claude/skills/security-visual-testing/SKILL.md +223 -217
  191. package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -0
  192. package/.claude/skills/security-visual-testing/schemas/output.json +486 -0
  193. package/.claude/skills/security-visual-testing/scripts/validate.sh +748 -0
  194. package/.claude/skills/sherlock-review/SKILL.md +5 -0
  195. package/.claude/skills/sherlock-review/schemas/output.json +297 -0
  196. package/.claude/skills/sherlock-review/scripts/validate.sh +115 -0
  197. package/.claude/skills/shift-left-testing/SKILL.md +6 -0
  198. package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
  199. package/.claude/skills/shift-left-testing/schemas/output.json +459 -0
  200. package/.claude/skills/shift-left-testing/scripts/validate.sh +56 -0
  201. package/.claude/skills/shift-right-testing/SKILL.md +6 -0
  202. package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
  203. package/.claude/skills/shift-right-testing/schemas/output.json +418 -0
  204. package/.claude/skills/shift-right-testing/scripts/validate.sh +56 -0
  205. package/.claude/skills/six-thinking-hats/SKILL.md +3 -0
  206. package/.claude/skills/tdd-london-chicago/SKILL.md +5 -0
  207. package/.claude/skills/tdd-london-chicago/schemas/output.json +444 -0
  208. package/.claude/skills/tdd-london-chicago/scripts/validate.sh +214 -0
  209. package/.claude/skills/technical-writing/SKILL.md +4 -0
  210. package/.claude/skills/technical-writing/schemas/output.json +268 -0
  211. package/.claude/skills/test-automation-strategy/SKILL.md +6 -0
  212. package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
  213. package/.claude/skills/test-automation-strategy/schemas/output.json +444 -0
  214. package/.claude/skills/test-automation-strategy/scripts/validate.sh +195 -0
  215. package/.claude/skills/test-data-management/SKILL.md +6 -0
  216. package/.claude/skills/test-data-management/evals/test-data-management.yaml +504 -0
  217. package/.claude/skills/test-data-management/schemas/output.json +284 -0
  218. package/.claude/skills/test-data-management/scripts/validate.sh +137 -0
  219. package/.claude/skills/test-design-techniques/SKILL.md +6 -0
  220. package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
  221. package/.claude/skills/test-design-techniques/schemas/output.json +295 -0
  222. package/.claude/skills/test-design-techniques/scripts/validate.sh +91 -0
  223. package/.claude/skills/test-environment-management/SKILL.md +4 -0
  224. package/.claude/skills/test-environment-management/schemas/output.json +310 -0
  225. package/.claude/skills/test-reporting-analytics/SKILL.md +6 -0
  226. package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
  227. package/.claude/skills/test-reporting-analytics/schemas/output.json +329 -0
  228. package/.claude/skills/test-reporting-analytics/scripts/validate.sh +77 -0
  229. package/.claude/skills/testability-scoring/SKILL.md +5 -0
  230. package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +814 -0
  231. package/.claude/skills/testability-scoring/schemas/output.json +606 -0
  232. package/.claude/skills/testability-scoring/scripts/validate.sh +891 -0
  233. package/.claude/skills/trust-tier-manifest.json +2333 -0
  234. package/.claude/skills/verification-quality/SKILL.md +6 -0
  235. package/.claude/skills/verification-quality/evals/verification-quality.yaml +150 -0
  236. package/.claude/skills/verification-quality/schemas/output.json +432 -0
  237. package/.claude/skills/verification-quality/scripts/validate.sh +77 -0
  238. package/.claude/skills/visual-testing-advanced/SKILL.md +6 -0
  239. package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
  240. package/.claude/skills/visual-testing-advanced/schemas/output.json +294 -0
  241. package/.claude/skills/visual-testing-advanced/scripts/validate.sh +77 -0
  242. package/.claude/skills/xp-practices/SKILL.md +3 -0
  243. package/README.md +39 -2
  244. package/package.json +4 -1
  245. package/scripts/run-skill-eval.ts +1097 -0
  246. package/scripts/test-schema-validation.js +301 -0
  247. package/scripts/update-skill-manifest.ts +751 -0
  248. package/scripts/validate-skill-frontmatter.js +141 -0
  249. package/v3/CHANGELOG.md +21 -0
  250. package/v3/README.md +43 -3
  251. package/v3/assets/agents/v3/qe-test-idea-rewriter.md +375 -375
  252. package/v3/assets/skills/.validation/README.md +111 -0
  253. package/v3/assets/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
  254. package/v3/assets/skills/.validation/examples/performance-testing-output.example.json +252 -0
  255. package/v3/assets/skills/.validation/examples/security-testing-output.example.json +413 -0
  256. package/v3/assets/skills/.validation/examples/testability-scoring-output.example.json +350 -0
  257. package/v3/assets/skills/.validation/schemas/skill-eval.schema.json +452 -0
  258. package/v3/assets/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
  259. package/v3/assets/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
  260. package/v3/assets/skills/.validation/schemas/skill-output.template.json +610 -0
  261. package/v3/assets/skills/.validation/skill-validation-mcp-integration.md +250 -0
  262. package/v3/assets/skills/.validation/templates/eval.template.yaml +366 -0
  263. package/v3/assets/skills/.validation/templates/schemas/output.json +145 -0
  264. package/v3/assets/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
  265. package/v3/assets/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
  266. package/v3/assets/skills/.validation/templates/validate.template.sh +1060 -0
  267. package/v3/assets/skills/.validation/templates/validator-lib.sh +1031 -0
  268. package/v3/assets/skills/.validation/test-data/invalid-output.json +5 -0
  269. package/v3/assets/skills/.validation/test-data/minimal-output.json +9 -0
  270. package/v3/assets/skills/.validation/test-data/sample-output.json +73 -0
  271. package/v3/assets/skills/accessibility-testing/SKILL.md +8 -1
  272. package/v3/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
  273. package/v3/assets/skills/accessibility-testing/schemas/output.json +776 -0
  274. package/v3/assets/skills/accessibility-testing/scripts/validate.sh +943 -0
  275. package/v3/assets/skills/accessibility-testing/test-data/sample-output.json +191 -0
  276. package/v3/assets/skills/agentic-quality-engineering/SKILL.md +4 -0
  277. package/v3/assets/skills/agentic-quality-engineering/schemas/output.json +577 -0
  278. package/v3/assets/skills/api-testing-patterns/SKILL.md +5 -0
  279. package/v3/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
  280. package/v3/assets/skills/api-testing-patterns/schemas/output.json +845 -0
  281. package/v3/assets/skills/api-testing-patterns/scripts/validate.sh +931 -0
  282. package/v3/assets/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
  283. package/v3/assets/skills/aqe-v2-v3-migration/skill.md +20 -16
  284. package/v3/assets/skills/bug-reporting-excellence/SKILL.md +5 -0
  285. package/v3/assets/skills/bug-reporting-excellence/schemas/output.json +288 -0
  286. package/v3/assets/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
  287. package/v3/assets/skills/chaos-engineering-resilience/SKILL.md +5 -0
  288. package/v3/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  289. package/v3/assets/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
  290. package/v3/assets/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
  291. package/v3/assets/skills/code-review-quality/SKILL.md +5 -0
  292. package/v3/assets/skills/code-review-quality/schemas/output.json +264 -0
  293. package/v3/assets/skills/code-review-quality/scripts/validate.sh +113 -0
  294. package/v3/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
  295. package/v3/assets/skills/compatibility-testing/schemas/output.json +551 -0
  296. package/v3/assets/skills/compatibility-testing/scripts/validate.sh +605 -0
  297. package/v3/assets/skills/compliance-testing/SKILL.md +7 -0
  298. package/v3/assets/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
  299. package/v3/assets/skills/compliance-testing/schemas/output.json +845 -0
  300. package/v3/assets/skills/compliance-testing/scripts/validate.sh +888 -0
  301. package/v3/assets/skills/consultancy-practices/SKILL.md +4 -0
  302. package/v3/assets/skills/consultancy-practices/schemas/output.json +282 -0
  303. package/v3/assets/skills/context-driven-testing/SKILL.md +3 -0
  304. package/v3/assets/skills/contract-testing/SKILL.md +5 -0
  305. package/v3/assets/skills/contract-testing/evals/contract-testing.yaml +748 -0
  306. package/v3/assets/skills/contract-testing/schemas/output.json +638 -0
  307. package/v3/assets/skills/contract-testing/scripts/validate.sh +1033 -0
  308. package/v3/assets/skills/database-testing/SKILL.md +5 -0
  309. package/v3/assets/skills/database-testing/evals/database-testing.yaml +968 -0
  310. package/v3/assets/skills/database-testing/schemas/output.json +1446 -0
  311. package/v3/assets/skills/database-testing/scripts/validate.sh +1099 -0
  312. package/v3/assets/skills/exploratory-testing-advanced/SKILL.md +3 -0
  313. package/v3/assets/skills/holistic-testing-pact/SKILL.md +3 -0
  314. package/v3/assets/skills/localization-testing/SKILL.md +6 -0
  315. package/v3/assets/skills/localization-testing/evals/localization-testing.yaml +544 -0
  316. package/v3/assets/skills/localization-testing/schemas/output.json +325 -0
  317. package/v3/assets/skills/localization-testing/scripts/validate.sh +131 -0
  318. package/v3/assets/skills/mobile-testing/SKILL.md +6 -0
  319. package/v3/assets/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
  320. package/v3/assets/skills/mobile-testing/schemas/output.json +318 -0
  321. package/v3/assets/skills/mobile-testing/scripts/validate.sh +127 -0
  322. package/v3/assets/skills/mutation-testing/SKILL.md +8 -1
  323. package/v3/assets/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
  324. package/v3/assets/skills/mutation-testing/schemas/output.json +707 -0
  325. package/v3/assets/skills/mutation-testing/scripts/validate.sh +992 -0
  326. package/v3/assets/skills/mutation-testing/test-data/sample-output.json +295 -0
  327. package/v3/assets/skills/n8n-expression-testing/scripts/validate.sh +162 -0
  328. package/v3/assets/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
  329. package/v3/assets/skills/n8n-security-testing/scripts/validate.sh +120 -0
  330. package/v3/assets/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
  331. package/v3/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
  332. package/v3/assets/skills/performance-testing/SKILL.md +5 -0
  333. package/v3/assets/skills/performance-testing/evals/performance-testing.yaml +772 -0
  334. package/v3/assets/skills/performance-testing/schemas/output.json +1184 -0
  335. package/v3/assets/skills/performance-testing/scripts/validate.sh +1090 -0
  336. package/v3/assets/skills/qe-chaos-resilience/SKILL.md +6 -0
  337. package/v3/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
  338. package/v3/assets/skills/qe-chaos-resilience/schemas/output.json +314 -0
  339. package/v3/assets/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
  340. package/v3/assets/skills/qe-code-intelligence/SKILL.md +6 -0
  341. package/v3/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
  342. package/v3/assets/skills/qe-code-intelligence/schemas/output.json +315 -0
  343. package/v3/assets/skills/qe-code-intelligence/scripts/validate.sh +408 -0
  344. package/v3/assets/skills/qe-contract-testing/SKILL.md +6 -0
  345. package/v3/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
  346. package/v3/assets/skills/qe-contract-testing/schemas/output.json +295 -0
  347. package/v3/assets/skills/qe-contract-testing/scripts/validate.sh +421 -0
  348. package/v3/assets/skills/qe-coverage-analysis/SKILL.md +6 -0
  349. package/v3/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
  350. package/v3/assets/skills/qe-coverage-analysis/schemas/output.json +286 -0
  351. package/v3/assets/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
  352. package/v3/assets/skills/qe-defect-intelligence/SKILL.md +6 -0
  353. package/v3/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
  354. package/v3/assets/skills/qe-defect-intelligence/schemas/output.json +283 -0
  355. package/v3/assets/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
  356. package/v3/assets/skills/qe-iterative-loop/SKILL.md +445 -443
  357. package/v3/assets/skills/qe-iterative-loop/schemas/output.json +264 -0
  358. package/v3/assets/skills/qe-iterative-loop/scripts/validate.sh +474 -0
  359. package/v3/assets/skills/qe-learning-optimization/SKILL.md +6 -0
  360. package/v3/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
  361. package/v3/assets/skills/qe-learning-optimization/schemas/output.json +288 -0
  362. package/v3/assets/skills/qe-learning-optimization/scripts/validate.sh +56 -0
  363. package/v3/assets/skills/qe-quality-assessment/SKILL.md +6 -0
  364. package/v3/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
  365. package/v3/assets/skills/qe-quality-assessment/schemas/output.json +550 -0
  366. package/v3/assets/skills/qe-quality-assessment/scripts/validate.sh +352 -0
  367. package/v3/assets/skills/qe-requirements-validation/SKILL.md +6 -0
  368. package/v3/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
  369. package/v3/assets/skills/qe-requirements-validation/schemas/output.json +587 -0
  370. package/v3/assets/skills/qe-requirements-validation/scripts/validate.sh +275 -0
  371. package/v3/assets/skills/qe-security-compliance/SKILL.md +6 -0
  372. package/v3/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
  373. package/v3/assets/skills/qe-security-compliance/schemas/output.json +498 -0
  374. package/v3/assets/skills/qe-security-compliance/scripts/validate.sh +305 -0
  375. package/v3/assets/skills/qe-test-execution/SKILL.md +6 -0
  376. package/v3/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
  377. package/v3/assets/skills/qe-test-execution/schemas/output.json +529 -0
  378. package/v3/assets/skills/qe-test-execution/scripts/validate.sh +323 -0
  379. package/v3/assets/skills/qe-test-generation/SKILL.md +6 -0
  380. package/v3/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
  381. package/v3/assets/skills/qe-test-generation/schemas/output.json +439 -0
  382. package/v3/assets/skills/qe-test-generation/scripts/validate.sh +56 -0
  383. package/v3/assets/skills/qe-visual-accessibility/SKILL.md +6 -0
  384. package/v3/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
  385. package/v3/assets/skills/qe-visual-accessibility/schemas/output.json +491 -0
  386. package/v3/assets/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
  387. package/v3/assets/skills/quality-metrics/SKILL.md +6 -0
  388. package/v3/assets/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
  389. package/v3/assets/skills/quality-metrics/schemas/output.json +403 -0
  390. package/v3/assets/skills/quality-metrics/scripts/validate.sh +434 -0
  391. package/v3/assets/skills/refactoring-patterns/SKILL.md +5 -0
  392. package/v3/assets/skills/refactoring-patterns/schemas/output.json +475 -0
  393. package/v3/assets/skills/refactoring-patterns/scripts/validate.sh +241 -0
  394. package/v3/assets/skills/regression-testing/SKILL.md +6 -0
  395. package/v3/assets/skills/regression-testing/evals/regression-testing.yaml +504 -0
  396. package/v3/assets/skills/regression-testing/schemas/output.json +311 -0
  397. package/v3/assets/skills/regression-testing/scripts/validate.sh +130 -0
  398. package/v3/assets/skills/risk-based-testing/SKILL.md +6 -0
  399. package/v3/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
  400. package/v3/assets/skills/risk-based-testing/schemas/output.json +480 -0
  401. package/v3/assets/skills/risk-based-testing/scripts/validate.sh +56 -0
  402. package/v3/assets/skills/security-testing/SKILL.md +5 -0
  403. package/v3/assets/skills/security-testing/evals/security-testing.yaml +789 -0
  404. package/v3/assets/skills/security-testing/schemas/output.json +879 -0
  405. package/v3/assets/skills/security-testing/scripts/validate.sh +967 -0
  406. package/v3/assets/skills/shift-left-testing/SKILL.md +6 -0
  407. package/v3/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
  408. package/v3/assets/skills/shift-left-testing/schemas/output.json +459 -0
  409. package/v3/assets/skills/shift-left-testing/scripts/validate.sh +56 -0
  410. package/v3/assets/skills/shift-right-testing/SKILL.md +6 -0
  411. package/v3/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
  412. package/v3/assets/skills/shift-right-testing/schemas/output.json +418 -0
  413. package/v3/assets/skills/shift-right-testing/scripts/validate.sh +56 -0
  414. package/v3/assets/skills/six-thinking-hats/SKILL.md +3 -0
  415. package/v3/assets/skills/tdd-london-chicago/SKILL.md +5 -0
  416. package/v3/assets/skills/tdd-london-chicago/schemas/output.json +444 -0
  417. package/v3/assets/skills/tdd-london-chicago/scripts/validate.sh +214 -0
  418. package/v3/assets/skills/technical-writing/SKILL.md +4 -0
  419. package/v3/assets/skills/technical-writing/schemas/output.json +268 -0
  420. package/v3/assets/skills/test-automation-strategy/SKILL.md +6 -0
  421. package/v3/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
  422. package/v3/assets/skills/test-automation-strategy/schemas/output.json +444 -0
  423. package/v3/assets/skills/test-automation-strategy/scripts/validate.sh +195 -0
  424. package/v3/assets/skills/test-data-management/SKILL.md +6 -0
  425. package/v3/assets/skills/test-data-management/evals/test-data-management.yaml +504 -0
  426. package/v3/assets/skills/test-data-management/schemas/output.json +284 -0
  427. package/v3/assets/skills/test-data-management/scripts/validate.sh +137 -0
  428. package/v3/assets/skills/test-design-techniques/SKILL.md +6 -0
  429. package/v3/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
  430. package/v3/assets/skills/test-design-techniques/schemas/output.json +295 -0
  431. package/v3/assets/skills/test-design-techniques/scripts/validate.sh +91 -0
  432. package/v3/assets/skills/test-environment-management/SKILL.md +4 -0
  433. package/v3/assets/skills/test-environment-management/schemas/output.json +310 -0
  434. package/v3/assets/skills/test-reporting-analytics/SKILL.md +6 -0
  435. package/v3/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
  436. package/v3/assets/skills/test-reporting-analytics/schemas/output.json +329 -0
  437. package/v3/assets/skills/test-reporting-analytics/scripts/validate.sh +77 -0
  438. package/v3/assets/skills/verification-quality/SKILL.md +6 -0
  439. package/v3/assets/skills/verification-quality/evals/verification-quality.yaml +150 -0
  440. package/v3/assets/skills/verification-quality/schemas/output.json +432 -0
  441. package/v3/assets/skills/verification-quality/scripts/validate.sh +77 -0
  442. package/v3/assets/skills/visual-testing-advanced/SKILL.md +6 -0
  443. package/v3/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
  444. package/v3/assets/skills/visual-testing-advanced/schemas/output.json +294 -0
  445. package/v3/assets/skills/visual-testing-advanced/scripts/validate.sh +77 -0
  446. package/v3/assets/skills/xp-practices/SKILL.md +3 -0
  447. package/v3/assets/templates/validation-report.md.hbs +139 -0
  448. package/v3/assets/templates/validation-summary.json +56 -0
  449. package/v3/dist/cli/bundle.js +7368 -3418
  450. package/v3/dist/cli/commands/eval.d.ts +18 -0
  451. package/v3/dist/cli/commands/eval.d.ts.map +1 -0
  452. package/v3/dist/cli/commands/eval.js +505 -0
  453. package/v3/dist/cli/commands/eval.js.map +1 -0
  454. package/v3/dist/cli/commands/validate-swarm.d.ts +16 -0
  455. package/v3/dist/cli/commands/validate-swarm.d.ts.map +1 -0
  456. package/v3/dist/cli/commands/validate-swarm.js +251 -0
  457. package/v3/dist/cli/commands/validate-swarm.js.map +1 -0
  458. package/v3/dist/cli/commands/validate.d.ts +14 -0
  459. package/v3/dist/cli/commands/validate.d.ts.map +1 -0
  460. package/v3/dist/cli/commands/validate.js +408 -0
  461. package/v3/dist/cli/commands/validate.js.map +1 -0
  462. package/v3/dist/cli/index.js +6 -0
  463. package/v3/dist/cli/index.js.map +1 -1
  464. package/v3/dist/index.d.ts +2 -0
  465. package/v3/dist/index.d.ts.map +1 -1
  466. package/v3/dist/index.js +10 -0
  467. package/v3/dist/index.js.map +1 -1
  468. package/v3/dist/init/skills-installer.d.ts +6 -0
  469. package/v3/dist/init/skills-installer.d.ts.map +1 -1
  470. package/v3/dist/init/skills-installer.js +48 -0
  471. package/v3/dist/init/skills-installer.js.map +1 -1
  472. package/v3/dist/learning/index.d.ts +2 -0
  473. package/v3/dist/learning/index.d.ts.map +1 -1
  474. package/v3/dist/learning/index.js +4 -0
  475. package/v3/dist/learning/index.js.map +1 -1
  476. package/v3/dist/learning/skill-validation-learner.d.ts +264 -0
  477. package/v3/dist/learning/skill-validation-learner.d.ts.map +1 -0
  478. package/v3/dist/learning/skill-validation-learner.js +515 -0
  479. package/v3/dist/learning/skill-validation-learner.js.map +1 -0
  480. package/v3/dist/validation/index.d.ts +19 -0
  481. package/v3/dist/validation/index.d.ts.map +1 -0
  482. package/v3/dist/validation/index.js +31 -0
  483. package/v3/dist/validation/index.js.map +1 -0
  484. package/v3/dist/validation/parallel-eval-runner.d.ts +307 -0
  485. package/v3/dist/validation/parallel-eval-runner.d.ts.map +1 -0
  486. package/v3/dist/validation/parallel-eval-runner.js +566 -0
  487. package/v3/dist/validation/parallel-eval-runner.js.map +1 -0
  488. package/v3/dist/validation/swarm-skill-validator.d.ts +282 -0
  489. package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -0
  490. package/v3/dist/validation/swarm-skill-validator.js +460 -0
  491. package/v3/dist/validation/swarm-skill-validator.js.map +1 -0
  492. package/v3/dist/validation/validation-result-aggregator.d.ts +232 -0
  493. package/v3/dist/validation/validation-result-aggregator.d.ts.map +1 -0
  494. package/v3/dist/validation/validation-result-aggregator.js +630 -0
  495. package/v3/dist/validation/validation-result-aggregator.js.map +1 -0
  496. package/v3/package.json +1 -1
@@ -0,0 +1,992 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # AQE Mutation Testing Skill Validator v1.0.0
4
+ # Based on: .claude/skills/.validation/templates/validate.template.sh
5
+ # =============================================================================
6
+ #
7
+ # Validates mutation testing skill outputs against the schema and checks
8
+ # for mutation-specific content requirements.
9
+ #
10
+ # Usage: ./validate.sh <output-file> [options]
11
+ #
12
+ # Options:
13
+ # --self-test Run validator self-test mode
14
+ # --verbose Enable verbose output
15
+ # --json Output results as JSON only
16
+ # --list-tools Show available validation tools
17
+ # --help Show this help message
18
+ #
19
+ # Exit Codes:
20
+ # 0 - Validation passed (all checks successful)
21
+ # 1 - Validation failed (one or more checks failed)
22
+ # 2 - Validation skipped (missing required tools)
23
+ #
24
+ # =============================================================================
25
+
26
+ set -euo pipefail
27
+
28
+ # Get script directory (works even when sourced)
29
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
30
+
31
+ # Determine paths based on where the script is located
32
+ # Script is in: .claude/skills/mutation-testing/scripts/
33
+ # Skill dir is: .claude/skills/mutation-testing/
34
+ # Project root: 3 levels up from skill dir
35
+ SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
36
+ PROJECT_ROOT="$(cd "$SKILL_DIR/../../.." && pwd)"
37
+
38
+ # Source shared library - try multiple locations
39
+ VALIDATOR_LIB=""
40
+ for lib_path in \
41
+ "$PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh" \
42
+ "$SKILL_DIR/scripts/validator-lib.sh" \
43
+ "$SCRIPT_DIR/validator-lib.sh"; do
44
+ if [[ -f "$lib_path" ]]; then
45
+ VALIDATOR_LIB="$lib_path"
46
+ break
47
+ fi
48
+ done
49
+
50
+ if [[ -n "$VALIDATOR_LIB" ]]; then
51
+ # shellcheck source=/dev/null
52
+ source "$VALIDATOR_LIB"
53
+ else
54
+ echo "ERROR: Validator library not found"
55
+ echo "Searched:"
56
+ echo " - $PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh"
57
+ echo " - $SKILL_DIR/scripts/validator-lib.sh"
58
+ echo " - $SCRIPT_DIR/validator-lib.sh"
59
+ echo ""
60
+ echo "Make sure the validator-lib.sh file exists in one of these locations."
61
+ exit 1
62
+ fi
63
+
64
+ # =============================================================================
65
+ # SKILL-SPECIFIC CONFIGURATION
66
+ # =============================================================================
67
+
68
+ # Skill name (must match SKILL.md name)
69
+ SKILL_NAME="mutation-testing"
70
+
71
+ # Skill version (for output metadata)
72
+ SKILL_VERSION="1.0.0"
73
+
74
+ # Required tools (validation FAILS with exit 2 if missing)
75
+ # jq is required for JSON parsing
76
+ REQUIRED_TOOLS=("jq")
77
+
78
+ # Optional tools (validation continues with warnings if missing)
79
+ # Mutation testing frameworks that may have been used
80
+ OPTIONAL_TOOLS=("stryker" "pitest" "mutmut" "ajv" "jsonschema" "python3")
81
+
82
+ # Path to output JSON schema (relative to skill directory)
83
+ SCHEMA_PATH="$SKILL_DIR/schemas/output.json"
84
+
85
+ # Path to sample test data for self-test mode
86
+ SAMPLE_OUTPUT_PATH="$SKILL_DIR/test-data/sample-output.json"
87
+
88
+ # =============================================================================
89
+ # CONTENT VALIDATION CONFIGURATION
90
+ # =============================================================================
91
+
92
+ # Minimum required fields in output (basic structural validation)
93
+ REQUIRED_FIELDS=("skillName" "status" "output" "output.mutationScore" "output.mutants")
94
+
95
+ # Fields that must have non-null, non-empty values
96
+ REQUIRED_NON_EMPTY_FIELDS=("output.summary")
97
+
98
+ # Terms that MUST appear somewhere in output (case-insensitive)
99
+ # Mutation testing domain terminology
100
+ MUST_CONTAIN_TERMS=("mutation" "mutant" "killed")
101
+
102
+ # Terms that must NOT appear in output (indicates failure/hallucination)
103
+ MUST_NOT_CONTAIN_TERMS=("TODO" "placeholder" "undefined mutation score")
104
+
105
+ # Enum fields and their allowed values
106
+ ENUM_VALIDATIONS=(
107
+ ".status:success,partial,failed,skipped"
108
+ )
109
+
110
+ # Minimum array lengths
111
+ # survivors can be empty if mutation score is 100%
112
+ MIN_ARRAY_LENGTHS=()
113
+
114
+ # =============================================================================
115
+ # Argument Parsing
116
+ # =============================================================================
117
+
118
+ OUTPUT_FILE=""
119
+ SELF_TEST=false
120
+ VERBOSE=false
121
+ JSON_ONLY=false
122
+ LIST_TOOLS=false
123
+
124
+ while [[ $# -gt 0 ]]; do
125
+ case "$1" in
126
+ --self-test)
127
+ SELF_TEST=true
128
+ shift
129
+ ;;
130
+ --verbose|-v)
131
+ VERBOSE=true
132
+ export AQE_DEBUG=1
133
+ shift
134
+ ;;
135
+ --json)
136
+ JSON_ONLY=true
137
+ shift
138
+ ;;
139
+ --list-tools)
140
+ LIST_TOOLS=true
141
+ shift
142
+ ;;
143
+ -h|--help)
144
+ cat << 'HELP_EOF'
145
+ AQE Mutation Testing Skill Validator
146
+
147
+ Usage: ./validate.sh <output-file> [options]
148
+ ./validate.sh --self-test [--verbose]
149
+ ./validate.sh --list-tools
150
+
151
+ Arguments:
152
+ <output-file> Path to mutation testing skill output JSON file to validate
153
+
154
+ Options:
155
+ --self-test Run validator self-test mode
156
+ --verbose, -v Enable verbose/debug output
157
+ --json Output results as JSON only (for CI integration)
158
+ --list-tools Show available validation tools and exit
159
+ --help, -h Show this help message
160
+
161
+ Exit Codes:
162
+ 0 - Validation passed
163
+ 1 - Validation failed
164
+ 2 - Validation skipped (missing required tools)
165
+
166
+ Examples:
167
+ ./validate.sh mutation-results.json # Validate output file
168
+ ./validate.sh mutation-results.json --json # JSON output for CI
169
+ ./validate.sh --self-test --verbose # Self-test with debug
170
+ ./validate.sh --list-tools # Show available tools
171
+
172
+ HELP_EOF
173
+ exit 0
174
+ ;;
175
+ -*)
176
+ error "Unknown option: $1"
177
+ echo "Use --help for usage information"
178
+ exit 1
179
+ ;;
180
+ *)
181
+ OUTPUT_FILE="$1"
182
+ shift
183
+ ;;
184
+ esac
185
+ done
186
+
187
+ # Handle --list-tools mode
188
+ if [[ "$LIST_TOOLS" == "true" ]]; then
189
+ echo "=============================================="
190
+ echo "Available Validation Tools for $SKILL_NAME"
191
+ echo "=============================================="
192
+ echo ""
193
+ echo "Required tools:"
194
+ for tool in "${REQUIRED_TOOLS[@]}"; do
195
+ if command_exists "$tool"; then
196
+ echo " [OK] $tool"
197
+ else
198
+ echo " [MISSING] $tool"
199
+ fi
200
+ done
201
+ echo ""
202
+ echo "Optional tools (mutation testing frameworks):"
203
+ for tool in "${OPTIONAL_TOOLS[@]}"; do
204
+ if command_exists "$tool"; then
205
+ local version=""
206
+ case "$tool" in
207
+ stryker) version=$(npx stryker --version 2>/dev/null || echo "installed") ;;
208
+ pitest) version="installed" ;;
209
+ mutmut) version=$(mutmut version 2>/dev/null || echo "installed") ;;
210
+ *) version="installed" ;;
211
+ esac
212
+ echo " [OK] $tool ($version)"
213
+ else
214
+ echo " [MISSING] $tool"
215
+ fi
216
+ done
217
+ echo ""
218
+ echo "Schema validation support:"
219
+ if command_exists "ajv"; then
220
+ echo " [OK] ajv (preferred)"
221
+ elif command_exists "jsonschema"; then
222
+ echo " [OK] jsonschema CLI"
223
+ elif command_exists "python3" && python3 -c "import jsonschema" 2>/dev/null; then
224
+ echo " [OK] python3 + jsonschema module"
225
+ else
226
+ echo " [MISSING] No schema validator available"
227
+ fi
228
+ exit 0
229
+ fi
230
+
231
+ # =============================================================================
232
+ # Self-Test Mode
233
+ # =============================================================================
234
+
235
+ if [[ "$SELF_TEST" == "true" ]]; then
236
+ echo "=============================================="
237
+ info "Running $SKILL_NAME Validator Self-Test"
238
+ echo "=============================================="
239
+ echo ""
240
+ echo "Validator version: $AQE_VALIDATOR_VERSION"
241
+ echo "Skill version: $SKILL_VERSION"
242
+ echo ""
243
+
244
+ self_test_passed=true
245
+ self_test_warnings=0
246
+
247
+ # -------------------------------------------
248
+ # Step 1: Check Required Tools
249
+ # -------------------------------------------
250
+ echo "--- Step 1: Required Tools ---"
251
+ for tool in "${REQUIRED_TOOLS[@]}"; do
252
+ if command_exists "$tool"; then
253
+ success "Required tool available: $tool"
254
+ else
255
+ error "Required tool MISSING: $tool"
256
+ self_test_passed=false
257
+ fi
258
+ done
259
+ echo ""
260
+
261
+ # -------------------------------------------
262
+ # Step 2: Check Optional Tools
263
+ # -------------------------------------------
264
+ echo "--- Step 2: Optional Tools (Mutation Frameworks) ---"
265
+ available_optional=0
266
+ for tool in "${OPTIONAL_TOOLS[@]}"; do
267
+ if command_exists "$tool"; then
268
+ success "Optional tool available: $tool"
269
+ ((available_optional++)) || true
270
+ else
271
+ warn "Optional tool missing: $tool"
272
+ ((self_test_warnings++)) || true
273
+ fi
274
+ done
275
+
276
+ if [[ $available_optional -eq 0 ]]; then
277
+ warn "No mutation testing frameworks available"
278
+ warn "Install stryker, pitest, or mutmut for full functionality"
279
+ ((self_test_warnings++)) || true
280
+ fi
281
+ echo ""
282
+
283
+ # -------------------------------------------
284
+ # Step 3: Check Schema Validation Capability
285
+ # -------------------------------------------
286
+ echo "--- Step 3: Schema Validation Capability ---"
287
+ schema_validator_available=false
288
+
289
+ if command_exists "ajv"; then
290
+ success "Schema validator: ajv (preferred)"
291
+ schema_validator_available=true
292
+ elif command_exists "jsonschema"; then
293
+ success "Schema validator: jsonschema CLI"
294
+ schema_validator_available=true
295
+ elif command_exists "python3"; then
296
+ if python3 -c "import jsonschema" 2>/dev/null; then
297
+ success "Schema validator: python3 + jsonschema module"
298
+ schema_validator_available=true
299
+ else
300
+ warn "python3 available but jsonschema module not installed"
301
+ ((self_test_warnings++)) || true
302
+ fi
303
+ fi
304
+
305
+ if [[ "$schema_validator_available" == "false" ]]; then
306
+ warn "No schema validator available - schema validation will be skipped"
307
+ ((self_test_warnings++)) || true
308
+ fi
309
+ echo ""
310
+
311
+ # -------------------------------------------
312
+ # Step 4: Check Schema File
313
+ # -------------------------------------------
314
+ echo "--- Step 4: Schema File ---"
315
+ if [[ -n "$SCHEMA_PATH" ]] && [[ -f "$SCHEMA_PATH" ]]; then
316
+ success "Schema file exists: $SCHEMA_PATH"
317
+
318
+ if validate_json "$SCHEMA_PATH" 2>/dev/null; then
319
+ success "Schema file is valid JSON"
320
+ else
321
+ error "Schema file is NOT valid JSON"
322
+ self_test_passed=false
323
+ fi
324
+ elif [[ -n "$SCHEMA_PATH" ]]; then
325
+ warn "Schema file not found: $SCHEMA_PATH"
326
+ ((self_test_warnings++)) || true
327
+ else
328
+ info "No schema path configured"
329
+ fi
330
+ echo ""
331
+
332
+ # -------------------------------------------
333
+ # Step 5: Run Library Self-Test
334
+ # -------------------------------------------
335
+ echo "--- Step 5: Validator Library Self-Test ---"
336
+ if [[ "$VERBOSE" == "true" ]]; then
337
+ if run_self_test --verbose; then
338
+ success "Library self-test passed"
339
+ else
340
+ error "Library self-test FAILED"
341
+ self_test_passed=false
342
+ fi
343
+ else
344
+ if run_self_test 2>/dev/null; then
345
+ success "Library self-test passed"
346
+ else
347
+ error "Library self-test FAILED"
348
+ self_test_passed=false
349
+ fi
350
+ fi
351
+ echo ""
352
+
353
+ # -------------------------------------------
354
+ # Self-Test Summary
355
+ # -------------------------------------------
356
+ echo "=============================================="
357
+ echo "Self-Test Summary for $SKILL_NAME"
358
+ echo "=============================================="
359
+
360
+ if [[ "$self_test_passed" == "true" ]]; then
361
+ if [[ $self_test_warnings -gt 0 ]]; then
362
+ warn "Self-test PASSED with $self_test_warnings warning(s)"
363
+ echo ""
364
+ echo "The validator is functional but has reduced capabilities."
365
+ echo "Consider installing mutation testing frameworks (stryker, pitest, mutmut)."
366
+ exit 0
367
+ else
368
+ success "Self-test PASSED (all checks successful)"
369
+ exit 0
370
+ fi
371
+ else
372
+ error "Self-test FAILED"
373
+ exit 1
374
+ fi
375
+ fi
376
+
377
+ # =============================================================================
378
+ # Validation Functions - MUTATION TESTING SPECIFIC
379
+ # =============================================================================
380
+
381
+ # Check that all required tools are available
382
+ validate_tools() {
383
+ if [[ ${#REQUIRED_TOOLS[@]} -eq 0 ]]; then
384
+ debug "No required tools specified"
385
+ return 0
386
+ fi
387
+
388
+ local missing=()
389
+ for tool in "${REQUIRED_TOOLS[@]}"; do
390
+ if ! command_exists "$tool"; then
391
+ missing+=("$tool")
392
+ fi
393
+ done
394
+
395
+ if [[ ${#missing[@]} -gt 0 ]]; then
396
+ error "Missing required tools: ${missing[*]}"
397
+ echo ""
398
+ echo "Install missing tools and retry:"
399
+ for tool in "${missing[@]}"; do
400
+ echo " - $tool"
401
+ done
402
+ return 1
403
+ fi
404
+
405
+ debug "All required tools available"
406
+ return 0
407
+ }
408
+
409
+ # Validate output against JSON schema
410
+ validate_schema() {
411
+ local output_file="$1"
412
+
413
+ if [[ -z "$SCHEMA_PATH" ]]; then
414
+ debug "No schema path configured, skipping schema validation"
415
+ return 2
416
+ fi
417
+
418
+ if [[ ! -f "$SCHEMA_PATH" ]]; then
419
+ warn "Schema file not found: $SCHEMA_PATH"
420
+ warn "Skipping schema validation"
421
+ return 2
422
+ fi
423
+
424
+ debug "Validating against schema: $SCHEMA_PATH"
425
+
426
+ local result
427
+ result=$(validate_json_schema "$SCHEMA_PATH" "$output_file" 2>&1)
428
+ local status=$?
429
+
430
+ case $status in
431
+ 0)
432
+ success "Schema validation passed"
433
+ return 0
434
+ ;;
435
+ 1)
436
+ error "Schema validation failed"
437
+ if [[ "$VERBOSE" == "true" ]]; then
438
+ echo "$result" | while read -r line; do
439
+ echo " $line"
440
+ done
441
+ fi
442
+ return 1
443
+ ;;
444
+ 2)
445
+ warn "Schema validation skipped (no validator available)"
446
+ return 2
447
+ ;;
448
+ esac
449
+ }
450
+
451
+ # Validate required fields exist and have values
452
+ validate_required_fields() {
453
+ local output_file="$1"
454
+ local missing=()
455
+ local empty=()
456
+
457
+ for field in "${REQUIRED_FIELDS[@]}"; do
458
+ local value
459
+ value=$(json_get "$output_file" ".$field" 2>/dev/null)
460
+ if [[ -z "$value" ]] || [[ "$value" == "null" ]]; then
461
+ missing+=("$field")
462
+ fi
463
+ done
464
+
465
+ for field in "${REQUIRED_NON_EMPTY_FIELDS[@]}"; do
466
+ local value
467
+ value=$(json_get "$output_file" ".$field" 2>/dev/null)
468
+ if [[ -z "$value" ]] || [[ "$value" == "null" ]] || [[ "$value" == "" ]] || [[ "$value" == "[]" ]] || [[ "$value" == "{}" ]]; then
469
+ empty+=("$field")
470
+ fi
471
+ done
472
+
473
+ local has_errors=false
474
+
475
+ if [[ ${#missing[@]} -gt 0 ]]; then
476
+ error "Missing required fields: ${missing[*]}"
477
+ has_errors=true
478
+ fi
479
+
480
+ if [[ ${#empty[@]} -gt 0 ]]; then
481
+ error "Empty required fields: ${empty[*]}"
482
+ has_errors=true
483
+ fi
484
+
485
+ if [[ "$has_errors" == "true" ]]; then
486
+ return 1
487
+ fi
488
+
489
+ success "All required fields present and valid"
490
+ return 0
491
+ }
492
+
493
+ # Validate enum fields have allowed values
494
+ validate_enum_fields() {
495
+ local output_file="$1"
496
+
497
+ if [[ ${#ENUM_VALIDATIONS[@]} -eq 0 ]]; then
498
+ return 0
499
+ fi
500
+
501
+ local has_errors=false
502
+
503
+ for validation in "${ENUM_VALIDATIONS[@]}"; do
504
+ local field_path="${validation%%:*}"
505
+ local allowed_values="${validation#*:}"
506
+
507
+ local actual_value
508
+ actual_value=$(json_get "$output_file" "$field_path" 2>/dev/null)
509
+
510
+ if [[ -z "$actual_value" ]] || [[ "$actual_value" == "null" ]]; then
511
+ debug "Enum field $field_path is empty/null (may be optional)"
512
+ continue
513
+ fi
514
+
515
+ local found=false
516
+ IFS=',' read -ra allowed_array <<< "$allowed_values"
517
+ for allowed in "${allowed_array[@]}"; do
518
+ if [[ "$actual_value" == "$allowed" ]]; then
519
+ found=true
520
+ break
521
+ fi
522
+ done
523
+
524
+ if [[ "$found" == "false" ]]; then
525
+ error "Invalid value for $field_path: '$actual_value' (allowed: $allowed_values)"
526
+ has_errors=true
527
+ else
528
+ debug "Enum field $field_path='$actual_value' is valid"
529
+ fi
530
+ done
531
+
532
+ if [[ "$has_errors" == "true" ]]; then
533
+ return 1
534
+ fi
535
+
536
+ success "All enum fields have valid values"
537
+ return 0
538
+ }
539
+
540
+ # Validate content contains expected terms
541
+ validate_content_terms() {
542
+ local output_file="$1"
543
+ local content
544
+ content=$(cat "$output_file")
545
+
546
+ local has_errors=false
547
+
548
+ if [[ ${#MUST_CONTAIN_TERMS[@]} -gt 0 ]]; then
549
+ local missing_terms=()
550
+ for term in "${MUST_CONTAIN_TERMS[@]}"; do
551
+ if ! grep -qi "$term" <<< "$content"; then
552
+ missing_terms+=("$term")
553
+ fi
554
+ done
555
+
556
+ if [[ ${#missing_terms[@]} -gt 0 ]]; then
557
+ error "Output missing required mutation testing terms: ${missing_terms[*]}"
558
+ has_errors=true
559
+ else
560
+ success "All required mutation testing terms found"
561
+ fi
562
+ fi
563
+
564
+ if [[ ${#MUST_NOT_CONTAIN_TERMS[@]} -gt 0 ]]; then
565
+ local found_forbidden=()
566
+ for term in "${MUST_NOT_CONTAIN_TERMS[@]}"; do
567
+ if grep -qi "$term" <<< "$content"; then
568
+ found_forbidden+=("$term")
569
+ fi
570
+ done
571
+
572
+ if [[ ${#found_forbidden[@]} -gt 0 ]]; then
573
+ error "Output contains forbidden terms: ${found_forbidden[*]}"
574
+ has_errors=true
575
+ else
576
+ success "No forbidden terms found"
577
+ fi
578
+ fi
579
+
580
+ if [[ "$has_errors" == "true" ]]; then
581
+ return 1
582
+ fi
583
+
584
+ return 0
585
+ }
586
+
587
+ # =============================================================================
588
+ # MUTATION TESTING SPECIFIC VALIDATION
589
+ # =============================================================================
590
+
591
+ validate_skill_specific() {
592
+ local output_file="$1"
593
+ local has_errors=false
594
+ local has_warnings=false
595
+
596
+ debug "Running mutation testing specific validations..."
597
+
598
+ # =========================================================================
599
+ # Validate mutation score is within valid range (0-100)
600
+ # =========================================================================
601
+ local mutation_score
602
+ mutation_score=$(json_get "$output_file" ".output.mutationScore.score" 2>/dev/null)
603
+
604
+ if [[ -n "$mutation_score" ]] && [[ "$mutation_score" != "null" ]]; then
605
+ # Check if it's a number
606
+ if [[ "$mutation_score" =~ ^[0-9]+\.?[0-9]*$ ]]; then
607
+ if (( $(echo "$mutation_score < 0" | bc -l 2>/dev/null || echo "0") )); then
608
+ error "Mutation score cannot be negative: $mutation_score"
609
+ has_errors=true
610
+ elif (( $(echo "$mutation_score > 100" | bc -l 2>/dev/null || echo "0") )); then
611
+ error "Mutation score cannot exceed 100: $mutation_score"
612
+ has_errors=true
613
+ else
614
+ success "Mutation score is valid: $mutation_score%"
615
+ fi
616
+ else
617
+ error "Mutation score is not a valid number: $mutation_score"
618
+ has_errors=true
619
+ fi
620
+ else
621
+ error "Mutation score is missing or null"
622
+ has_errors=true
623
+ fi
624
+
625
+ # =========================================================================
626
+ # Validate killed + survived counts match total (approximately)
627
+ # =========================================================================
628
+ local killed survived total
629
+ killed=$(json_get "$output_file" ".output.mutationScore.killed" 2>/dev/null)
630
+ survived=$(json_get "$output_file" ".output.mutationScore.survived" 2>/dev/null)
631
+ total=$(json_get "$output_file" ".output.mutationScore.total" 2>/dev/null)
632
+
633
+ if [[ -n "$killed" ]] && [[ -n "$survived" ]] && [[ -n "$total" ]] && \
634
+ [[ "$killed" != "null" ]] && [[ "$survived" != "null" ]] && [[ "$total" != "null" ]]; then
635
+ # Account for timeout/noCoverage/equivalent mutants
636
+ local timeout noCoverage equivalent
637
+ timeout=$(json_get "$output_file" ".output.mutationScore.timeout" 2>/dev/null || echo "0")
638
+ noCoverage=$(json_get "$output_file" ".output.mutationScore.noCoverage" 2>/dev/null || echo "0")
639
+ equivalent=$(json_get "$output_file" ".output.mutationScore.equivalent" 2>/dev/null || echo "0")
640
+
641
+ [[ "$timeout" == "null" ]] && timeout=0
642
+ [[ "$noCoverage" == "null" ]] && noCoverage=0
643
+ [[ "$equivalent" == "null" ]] && equivalent=0
644
+
645
+ local sum=$((killed + survived + timeout + noCoverage + equivalent))
646
+
647
+ if [[ "$sum" -ne "$total" ]]; then
648
+ warn "Mutant counts don't add up: killed($killed) + survived($survived) + timeout($timeout) + noCoverage($noCoverage) + equivalent($equivalent) = $sum, but total = $total"
649
+ has_warnings=true
650
+ else
651
+ success "Mutant counts are consistent (total: $total)"
652
+ fi
653
+ fi
654
+
655
+ # =========================================================================
656
+ # Validate mutation score calculation is correct
657
+ # =========================================================================
658
+ if [[ -n "$killed" ]] && [[ -n "$total" ]] && [[ "$killed" != "null" ]] && [[ "$total" != "null" ]] && [[ "$total" -gt 0 ]]; then
659
+ local expected_score
660
+ expected_score=$(echo "scale=2; $killed * 100 / $total" | bc -l 2>/dev/null || echo "")
661
+
662
+ if [[ -n "$expected_score" ]] && [[ -n "$mutation_score" ]]; then
663
+ # Allow for rounding differences (within 1%)
664
+ local diff
665
+ diff=$(echo "scale=2; $mutation_score - $expected_score" | bc -l 2>/dev/null | tr -d '-')
666
+
667
+ if [[ -n "$diff" ]] && (( $(echo "$diff > 1" | bc -l 2>/dev/null || echo "0") )); then
668
+ warn "Mutation score ($mutation_score%) differs from calculated ($expected_score%)"
669
+ has_warnings=true
670
+ else
671
+ debug "Mutation score calculation verified"
672
+ fi
673
+ fi
674
+ fi
675
+
676
+ # =========================================================================
677
+ # Validate survivors have required fields
678
+ # =========================================================================
679
+ local survivor_count
680
+ survivor_count=$(json_count "$output_file" ".output.survivors" 2>/dev/null)
681
+
682
+ if [[ -n "$survivor_count" ]] && [[ "$survivor_count" != "null" ]] && [[ "$survivor_count" -gt 0 ]]; then
683
+ # Check first survivor has required fields
684
+ local first_survivor_id first_survivor_operator first_survivor_file
685
+ first_survivor_id=$(json_get "$output_file" ".output.survivors[0].id" 2>/dev/null)
686
+ first_survivor_operator=$(json_get "$output_file" ".output.survivors[0].operator" 2>/dev/null)
687
+ first_survivor_file=$(json_get "$output_file" ".output.survivors[0].location.file" 2>/dev/null)
688
+
689
+ if [[ -z "$first_survivor_id" ]] || [[ "$first_survivor_id" == "null" ]]; then
690
+ error "Surviving mutants missing 'id' field"
691
+ has_errors=true
692
+ fi
693
+
694
+ if [[ -z "$first_survivor_operator" ]] || [[ "$first_survivor_operator" == "null" ]]; then
695
+ error "Surviving mutants missing 'operator' field"
696
+ has_errors=true
697
+ fi
698
+
699
+ if [[ -z "$first_survivor_file" ]] || [[ "$first_survivor_file" == "null" ]]; then
700
+ warn "Surviving mutants missing location.file - consider adding for better analysis"
701
+ has_warnings=true
702
+ fi
703
+
704
+ success "Found $survivor_count surviving mutants with valid structure"
705
+ elif [[ "$survived" -gt 0 ]] && [[ "$survivor_count" -eq 0 ]]; then
706
+ warn "Mutation score shows $survived survivors but survivors array is empty"
707
+ has_warnings=true
708
+ fi
709
+
710
+ # =========================================================================
711
+ # Validate operator breakdown totals match
712
+ # =========================================================================
713
+ local operator_count
714
+ operator_count=$(json_count "$output_file" ".output.operatorBreakdown" 2>/dev/null)
715
+
716
+ if [[ -n "$operator_count" ]] && [[ "$operator_count" != "null" ]] && [[ "$operator_count" -gt 0 ]]; then
717
+ success "Operator breakdown present with $operator_count operators"
718
+ fi
719
+
720
+ # =========================================================================
721
+ # Check for weak tests if survived > 0
722
+ # =========================================================================
723
+ if [[ -n "$survived" ]] && [[ "$survived" != "null" ]] && [[ "$survived" -gt 0 ]]; then
724
+ local weak_test_count
725
+ weak_test_count=$(json_count "$output_file" ".output.weakTests" 2>/dev/null)
726
+
727
+ if [[ -z "$weak_test_count" ]] || [[ "$weak_test_count" == "null" ]] || [[ "$weak_test_count" -eq 0 ]]; then
728
+ warn "Surviving mutants exist but no weak tests identified - consider analyzing test effectiveness"
729
+ has_warnings=true
730
+ else
731
+ success "Identified $weak_test_count weak tests for improvement"
732
+ fi
733
+ fi
734
+
735
+ # =========================================================================
736
+ # Validate recommendations exist for poor scores
737
+ # =========================================================================
738
+ if [[ -n "$mutation_score" ]] && (( $(echo "$mutation_score < 70" | bc -l 2>/dev/null || echo "0") )); then
739
+ local rec_count
740
+ rec_count=$(json_count "$output_file" ".output.recommendations" 2>/dev/null)
741
+
742
+ if [[ -z "$rec_count" ]] || [[ "$rec_count" == "null" ]] || [[ "$rec_count" -eq 0 ]]; then
743
+ warn "Mutation score is below 70% but no recommendations provided"
744
+ has_warnings=true
745
+ else
746
+ success "Found $rec_count recommendations for test improvement"
747
+ fi
748
+ fi
749
+
750
+ # =========================================================================
751
+ # Final result
752
+ # =========================================================================
753
+ if [[ "$has_errors" == "true" ]]; then
754
+ return 1
755
+ fi
756
+
757
+ if [[ "$has_warnings" == "true" ]]; then
758
+ warn "Skill-specific validation passed with warnings"
759
+ return 0
760
+ fi
761
+
762
+ return 0
763
+ }
764
+
765
+ # =============================================================================
766
+ # Main Validation Flow
767
+ # =============================================================================
768
+
769
+ main() {
770
+ # Validate arguments
771
+ if [[ -z "$OUTPUT_FILE" ]]; then
772
+ error "No output file specified"
773
+ echo "Usage: $0 <output-file> [options]"
774
+ echo "Use --help for more information"
775
+ exit 1
776
+ fi
777
+
778
+ if [[ ! -f "$OUTPUT_FILE" ]]; then
779
+ error "Output file not found: $OUTPUT_FILE"
780
+ exit 1
781
+ fi
782
+
783
+ # Print header (unless JSON-only mode)
784
+ if [[ "$JSON_ONLY" != "true" ]]; then
785
+ echo "=============================================="
786
+ info "Validating $SKILL_NAME Output"
787
+ echo "=============================================="
788
+ echo ""
789
+ echo " Skill: $SKILL_NAME v$SKILL_VERSION"
790
+ echo " File: $OUTPUT_FILE"
791
+ echo " Schema: ${SCHEMA_PATH:-none}"
792
+ echo ""
793
+ fi
794
+
795
+ # Track validation status
796
+ local tool_status="passed"
797
+ local json_status="passed"
798
+ local schema_status="passed"
799
+ local fields_status="passed"
800
+ local enums_status="passed"
801
+ local content_status="passed"
802
+ local specific_status="passed"
803
+
804
+ local error_count=0
805
+ local warning_count=0
806
+
807
+ # =========================================
808
+ # Step 1: Check Required Tools
809
+ # =========================================
810
+ if [[ "$JSON_ONLY" != "true" ]]; then
811
+ echo "--- Step 1: Tool Availability ---"
812
+ fi
813
+
814
+ if ! validate_tools; then
815
+ tool_status="failed"
816
+ ((error_count++)) || true
817
+ if [[ "$JSON_ONLY" == "true" ]]; then
818
+ output_validation_report "$SKILL_NAME" "skipped" "skipped" "failed"
819
+ else
820
+ echo ""
821
+ error "Validation cannot proceed without required tools"
822
+ fi
823
+ exit $EXIT_SKIP
824
+ fi
825
+
826
+ [[ "$JSON_ONLY" != "true" ]] && success "Tool check passed" && echo ""
827
+
828
+ # =========================================
829
+ # Step 2: Validate JSON Syntax
830
+ # =========================================
831
+ if [[ "$JSON_ONLY" != "true" ]]; then
832
+ echo "--- Step 2: JSON Syntax ---"
833
+ fi
834
+
835
+ if ! validate_json "$OUTPUT_FILE"; then
836
+ json_status="failed"
837
+ ((error_count++)) || true
838
+ if [[ "$JSON_ONLY" != "true" ]]; then
839
+ error "File is not valid JSON - cannot proceed"
840
+ fi
841
+ if [[ "$JSON_ONLY" == "true" ]]; then
842
+ output_validation_report "$SKILL_NAME" "failed" "failed" "$tool_status"
843
+ fi
844
+ exit $EXIT_FAIL
845
+ fi
846
+
847
+ [[ "$JSON_ONLY" != "true" ]] && success "JSON syntax valid" && echo ""
848
+
849
+ # =========================================
850
+ # Step 3: Validate Against Schema
851
+ # =========================================
852
+ if [[ "$JSON_ONLY" != "true" ]]; then
853
+ echo "--- Step 3: Schema Validation ---"
854
+ fi
855
+
856
+ local schema_exit_code
857
+ validate_schema "$OUTPUT_FILE" && schema_exit_code=0 || schema_exit_code=$?
858
+
859
+ case $schema_exit_code in
860
+ 0) [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
861
+ 1) schema_status="failed"; ((error_count++)) || true; [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
862
+ 2) schema_status="skipped"; ((warning_count++)) || true; [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
863
+ esac
864
+
865
+ # =========================================
866
+ # Step 4: Validate Required Fields
867
+ # =========================================
868
+ if [[ "$JSON_ONLY" != "true" ]]; then
869
+ echo "--- Step 4: Required Fields ---"
870
+ fi
871
+
872
+ if ! validate_required_fields "$OUTPUT_FILE"; then
873
+ fields_status="failed"
874
+ ((error_count++)) || true
875
+ fi
876
+
877
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
878
+
879
+ # =========================================
880
+ # Step 5: Validate Enum Values
881
+ # =========================================
882
+ if [[ ${#ENUM_VALIDATIONS[@]} -gt 0 ]]; then
883
+ if [[ "$JSON_ONLY" != "true" ]]; then
884
+ echo "--- Step 5: Enum Validation ---"
885
+ fi
886
+
887
+ if ! validate_enum_fields "$OUTPUT_FILE"; then
888
+ enums_status="failed"
889
+ ((error_count++)) || true
890
+ fi
891
+
892
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
893
+ fi
894
+
895
+ # =========================================
896
+ # Step 6: Validate Content Terms
897
+ # =========================================
898
+ if [[ ${#MUST_CONTAIN_TERMS[@]} -gt 0 ]] || [[ ${#MUST_NOT_CONTAIN_TERMS[@]} -gt 0 ]]; then
899
+ if [[ "$JSON_ONLY" != "true" ]]; then
900
+ echo "--- Step 6: Content Terms ---"
901
+ fi
902
+
903
+ if ! validate_content_terms "$OUTPUT_FILE"; then
904
+ content_status="failed"
905
+ ((error_count++)) || true
906
+ fi
907
+
908
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
909
+ fi
910
+
911
+ # =========================================
912
+ # Step 7: Mutation Testing Specific Validation
913
+ # =========================================
914
+ if [[ "$JSON_ONLY" != "true" ]]; then
915
+ echo "--- Step 7: Mutation Testing Specific Validation ---"
916
+ fi
917
+
918
+ if ! validate_skill_specific "$OUTPUT_FILE"; then
919
+ specific_status="failed"
920
+ ((error_count++)) || true
921
+ fi
922
+
923
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
924
+
925
+ # =========================================
926
+ # Determine Overall Status
927
+ # =========================================
928
+ local overall_status="passed"
929
+ local content_overall="passed"
930
+
931
+ if [[ "$fields_status" == "failed" ]] || \
932
+ [[ "$enums_status" == "failed" ]] || \
933
+ [[ "$content_status" == "failed" ]] || \
934
+ [[ "$specific_status" == "failed" ]]; then
935
+ content_overall="failed"
936
+ fi
937
+
938
+ if [[ "$json_status" == "failed" ]] || \
939
+ [[ "$schema_status" == "failed" ]] || \
940
+ [[ "$content_overall" == "failed" ]]; then
941
+ overall_status="failed"
942
+ elif [[ "$schema_status" == "skipped" ]]; then
943
+ overall_status="partial"
944
+ fi
945
+
946
+ # =========================================
947
+ # Output Results
948
+ # =========================================
949
+ if [[ "$JSON_ONLY" == "true" ]]; then
950
+ output_validation_report "$SKILL_NAME" "$schema_status" "$content_overall" "$tool_status"
951
+ else
952
+ echo "=============================================="
953
+ echo "Validation Summary for $SKILL_NAME"
954
+ echo "=============================================="
955
+ echo ""
956
+ echo " Tools: $tool_status"
957
+ echo " JSON Syntax: $json_status"
958
+ echo " Schema: $schema_status"
959
+ echo " Fields: $fields_status"
960
+ echo " Enums: $enums_status"
961
+ echo " Content: $content_status"
962
+ echo " Mutation-specific: $specific_status"
963
+ echo ""
964
+ echo " ------------------------------"
965
+ echo " Overall: $overall_status"
966
+ echo " Errors: $error_count"
967
+ echo " Warnings: $warning_count"
968
+ echo "=============================================="
969
+ echo ""
970
+ fi
971
+
972
+ # =========================================
973
+ # Exit with appropriate code
974
+ # =========================================
975
+ case "$overall_status" in
976
+ "passed")
977
+ [[ "$JSON_ONLY" != "true" ]] && success "Validation PASSED"
978
+ exit $EXIT_PASS
979
+ ;;
980
+ "partial")
981
+ [[ "$JSON_ONLY" != "true" ]] && warn "Validation PARTIAL (some checks skipped)"
982
+ exit $EXIT_PASS
983
+ ;;
984
+ "failed")
985
+ [[ "$JSON_ONLY" != "true" ]] && error "Validation FAILED"
986
+ exit $EXIT_FAIL
987
+ ;;
988
+ esac
989
+ }
990
+
991
+ # Run main function
992
+ main