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