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,1099 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # AQE Skill Validator: database-testing v1.0.0
4
+ # Validates database testing skill output per ADR-056
5
+ # =============================================================================
6
+ #
7
+ # This validator checks:
8
+ # 1. JSON schema compliance (database test types, findings, integrity)
9
+ # 2. Required tools availability (jq required, database clients optional)
10
+ # 3. Test type coverage (schema, integrity, migration, transaction, performance)
11
+ # 4. Finding and recommendation structure validation
12
+ # 5. Database-specific content validation
13
+ #
14
+ # Usage: ./validate.sh <output-file> [options]
15
+ #
16
+ # Options:
17
+ # --self-test Run validator self-test mode
18
+ # --verbose Enable verbose output
19
+ # --json Output results as JSON only
20
+ # --list-tools Show available validation tools
21
+ # --help Show this help message
22
+ #
23
+ # Exit Codes:
24
+ # 0 - Validation passed
25
+ # 1 - Validation failed
26
+ # 2 - Validation skipped (missing required tools)
27
+ #
28
+ # =============================================================================
29
+
30
+ set -euo pipefail
31
+
32
+ # Get script directory
33
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
34
+
35
+ # Navigate to skill directory and project root
36
+ # scripts/ -> database-testing/ -> skills/ -> .claude/ -> project root
37
+ SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
38
+ PROJECT_ROOT="$(cd "$SKILL_DIR/../../.." && pwd)"
39
+
40
+ # Source validator library - check multiple locations
41
+ VALIDATOR_LIB=""
42
+ for lib_path in \
43
+ "$PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh" \
44
+ "$SKILL_DIR/scripts/validator-lib.sh" \
45
+ "$SCRIPT_DIR/validator-lib.sh"; do
46
+ if [[ -f "$lib_path" ]]; then
47
+ VALIDATOR_LIB="$lib_path"
48
+ break
49
+ fi
50
+ done
51
+
52
+ if [[ -n "$VALIDATOR_LIB" ]]; then
53
+ # shellcheck source=/dev/null
54
+ source "$VALIDATOR_LIB"
55
+ else
56
+ echo "ERROR: Validator library not found"
57
+ echo "Searched:"
58
+ echo " - $PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh"
59
+ echo " - $SKILL_DIR/scripts/validator-lib.sh"
60
+ echo " - $SCRIPT_DIR/validator-lib.sh"
61
+ exit 1
62
+ fi
63
+
64
+ # =============================================================================
65
+ # SKILL-SPECIFIC CONFIGURATION
66
+ # =============================================================================
67
+
68
+ # Skill name and version
69
+ SKILL_NAME="database-testing"
70
+ SKILL_VERSION="1.0.0"
71
+
72
+ # Required tools (validation FAILS with exit 2 if missing)
73
+ # jq is essential for JSON parsing
74
+ REQUIRED_TOOLS=("jq")
75
+
76
+ # Optional tools (validation continues with warnings if missing)
77
+ # These enhance database testing capabilities
78
+ OPTIONAL_TOOLS=("psql" "mysql" "mongo" "sqlite3" "node" "ajv" "jsonschema" "python3")
79
+
80
+ # Path to output JSON schema
81
+ SCHEMA_PATH="$SKILL_DIR/schemas/output.json"
82
+
83
+ # Path to sample test data for self-test
84
+ SAMPLE_OUTPUT_PATH="$PROJECT_ROOT/.claude/skills/.validation/examples/database-testing-output.example.json"
85
+
86
+ # =============================================================================
87
+ # CONTENT VALIDATION CONFIGURATION
88
+ # =============================================================================
89
+
90
+ # Required fields in output
91
+ REQUIRED_FIELDS=("skillName" "status" "output" "output.summary" "output.findings" "output.testTypes" "output.databaseInfo")
92
+
93
+ # Fields that must have non-null, non-empty values
94
+ REQUIRED_NON_EMPTY_FIELDS=("output.summary")
95
+
96
+ # Database-specific terms that MUST appear in output
97
+ MUST_CONTAIN_TERMS=("database" "schema" "table")
98
+
99
+ # Terms that must NOT appear in output (indicates failure/hallucination)
100
+ MUST_NOT_CONTAIN_TERMS=("TODO" "placeholder" "FIXME")
101
+
102
+ # Enum validations
103
+ ENUM_VALIDATIONS=(
104
+ ".status:success,partial,failed,skipped"
105
+ )
106
+
107
+ # Minimum array lengths
108
+ MIN_ARRAY_LENGTHS=()
109
+
110
+ # =============================================================================
111
+ # Argument Parsing
112
+ # =============================================================================
113
+
114
+ OUTPUT_FILE=""
115
+ SELF_TEST=false
116
+ VERBOSE=false
117
+ JSON_ONLY=false
118
+ LIST_TOOLS=false
119
+
120
+ while [[ $# -gt 0 ]]; do
121
+ case "$1" in
122
+ --self-test)
123
+ SELF_TEST=true
124
+ shift
125
+ ;;
126
+ --verbose|-v)
127
+ VERBOSE=true
128
+ export AQE_DEBUG=1
129
+ shift
130
+ ;;
131
+ --json)
132
+ JSON_ONLY=true
133
+ shift
134
+ ;;
135
+ --list-tools)
136
+ LIST_TOOLS=true
137
+ shift
138
+ ;;
139
+ -h|--help)
140
+ cat << 'HELP_EOF'
141
+ AQE Database Testing Skill Validator v1.0.0
142
+
143
+ Usage: ./validate.sh <output-file> [options]
144
+ ./validate.sh --self-test [--verbose]
145
+ ./validate.sh --list-tools
146
+
147
+ Arguments:
148
+ <output-file> Path to skill output JSON file to validate
149
+
150
+ Options:
151
+ --self-test Run validator self-test mode
152
+ --verbose, -v Enable verbose/debug output
153
+ --json Output results as JSON only (for CI integration)
154
+ --list-tools Show available validation tools and exit
155
+ --help, -h Show this help message
156
+
157
+ Exit Codes:
158
+ 0 - Validation passed
159
+ 1 - Validation failed
160
+ 2 - Validation skipped (missing required tools)
161
+
162
+ Database Tool Support:
163
+ Required: jq (JSON parsing)
164
+ Optional: psql (PostgreSQL), mysql (MySQL), mongo (MongoDB),
165
+ sqlite3 (SQLite), node (ORM tools)
166
+
167
+ Examples:
168
+ ./validate.sh database-output.json # Validate output file
169
+ ./validate.sh database-output.json --json # JSON output for CI
170
+ ./validate.sh --self-test --verbose # Self-test with debug
171
+ ./validate.sh --list-tools # Show available tools
172
+
173
+ HELP_EOF
174
+ exit 0
175
+ ;;
176
+ -*)
177
+ error "Unknown option: $1"
178
+ echo "Use --help for usage information"
179
+ exit 1
180
+ ;;
181
+ *)
182
+ OUTPUT_FILE="$1"
183
+ shift
184
+ ;;
185
+ esac
186
+ done
187
+
188
+ # Handle --list-tools mode
189
+ if [[ "$LIST_TOOLS" == "true" ]]; then
190
+ echo "=============================================="
191
+ echo "Available Validation Tools for $SKILL_NAME"
192
+ echo "=============================================="
193
+ echo ""
194
+ echo "Required tools (validation fails if missing):"
195
+ for tool in "${REQUIRED_TOOLS[@]}"; do
196
+ if command_exists "$tool"; then
197
+ version=$($tool --version 2>&1 | head -1 || echo "installed")
198
+ echo " [OK] $tool - $version"
199
+ else
200
+ echo " [MISSING] $tool"
201
+ fi
202
+ done
203
+ echo ""
204
+ echo "Optional tools (enhances validation):"
205
+ for tool in "${OPTIONAL_TOOLS[@]}"; do
206
+ if command_exists "$tool"; then
207
+ version=""
208
+ case "$tool" in
209
+ psql) version=$(psql --version 2>&1 | head -1 || echo "installed") ;;
210
+ mysql) version=$(mysql --version 2>&1 | head -1 || echo "installed") ;;
211
+ mongo) version=$(mongo --version 2>&1 | head -1 || echo "installed") ;;
212
+ sqlite3) version=$(sqlite3 --version 2>&1 | head -1 || echo "installed") ;;
213
+ node) version=$(node --version 2>&1 | head -1 || echo "installed") ;;
214
+ python3) version=$(python3 --version 2>&1 | head -1 || echo "installed") ;;
215
+ *) version="installed" ;;
216
+ esac
217
+ echo " [OK] $tool - $version"
218
+ else
219
+ echo " [MISSING] $tool"
220
+ fi
221
+ done
222
+ echo ""
223
+ echo "Database Client Capabilities:"
224
+ if command_exists "psql"; then
225
+ echo " [OK] PostgreSQL - Full schema/query validation"
226
+ else
227
+ echo " [MISSING] psql - Install PostgreSQL client for PostgreSQL testing"
228
+ fi
229
+ if command_exists "mysql"; then
230
+ echo " [OK] MySQL - Full schema/query validation"
231
+ else
232
+ echo " [MISSING] mysql - Install MySQL client for MySQL testing"
233
+ fi
234
+ if command_exists "mongo" || command_exists "mongosh"; then
235
+ echo " [OK] MongoDB - Document/collection validation"
236
+ else
237
+ echo " [MISSING] mongo/mongosh - Install MongoDB tools for MongoDB testing"
238
+ fi
239
+ if command_exists "sqlite3"; then
240
+ echo " [OK] SQLite - Lightweight database validation"
241
+ else
242
+ echo " [MISSING] sqlite3 - Install SQLite for embedded database testing"
243
+ fi
244
+ if command_exists "node"; then
245
+ echo " [OK] Node.js - ORM-based validation (Knex, Prisma, TypeORM)"
246
+ else
247
+ echo " [MISSING] node - Install Node.js for ORM validation"
248
+ fi
249
+ exit 0
250
+ fi
251
+
252
+ # =============================================================================
253
+ # Self-Test Mode
254
+ # =============================================================================
255
+
256
+ if [[ "$SELF_TEST" == "true" ]]; then
257
+ echo "=============================================="
258
+ info "Running $SKILL_NAME Validator Self-Test"
259
+ echo "=============================================="
260
+ echo ""
261
+ echo "Validator version: $AQE_VALIDATOR_VERSION"
262
+ echo "Skill version: $SKILL_VERSION"
263
+ echo ""
264
+
265
+ self_test_passed=true
266
+ self_test_warnings=0
267
+
268
+ # Step 1: Check Required Tools
269
+ echo "--- Step 1: Required Tools ---"
270
+ for tool in "${REQUIRED_TOOLS[@]}"; do
271
+ if command_exists "$tool"; then
272
+ success "Required tool available: $tool"
273
+ else
274
+ error "Required tool MISSING: $tool"
275
+ self_test_passed=false
276
+ fi
277
+ done
278
+ echo ""
279
+
280
+ # Step 2: Check Database Tools
281
+ echo "--- Step 2: Database Tools ---"
282
+ db_tools=("psql" "mysql" "mongo" "sqlite3")
283
+ available_db_tools=0
284
+ for tool in "${db_tools[@]}"; do
285
+ if command_exists "$tool"; then
286
+ success "Database tool available: $tool"
287
+ ((available_db_tools++)) || true
288
+ else
289
+ warn "Database tool missing: $tool"
290
+ ((self_test_warnings++)) || true
291
+ fi
292
+ done
293
+
294
+ if [[ $available_db_tools -eq 0 ]]; then
295
+ warn "No database clients available - limited validation capability"
296
+ ((self_test_warnings++)) || true
297
+ fi
298
+ echo ""
299
+
300
+ # Step 3: Check ORM/Node Support
301
+ echo "--- Step 3: ORM/Node Support ---"
302
+ if command_exists "node"; then
303
+ success "Node.js available for ORM validation"
304
+ # Check for common ORMs
305
+ if npm list knex 2>/dev/null | grep -q knex; then
306
+ success "Knex.js available"
307
+ else
308
+ info "Knex.js not detected (optional)"
309
+ fi
310
+ else
311
+ warn "Node.js not available - ORM validation limited"
312
+ ((self_test_warnings++)) || true
313
+ fi
314
+ echo ""
315
+
316
+ # Step 4: Check Schema File
317
+ echo "--- Step 4: Schema File ---"
318
+ if [[ -f "$SCHEMA_PATH" ]]; then
319
+ success "Schema file exists: $SCHEMA_PATH"
320
+ if validate_json "$SCHEMA_PATH" 2>/dev/null; then
321
+ success "Schema file is valid JSON"
322
+
323
+ # Check for database-specific schema elements
324
+ if grep -q "testTypes" "$SCHEMA_PATH" 2>/dev/null; then
325
+ success "Schema includes testTypes definition"
326
+ else
327
+ warn "Schema may be missing testTypes"
328
+ ((self_test_warnings++)) || true
329
+ fi
330
+
331
+ if grep -q "databaseInfo" "$SCHEMA_PATH" 2>/dev/null; then
332
+ success "Schema includes databaseInfo definition"
333
+ else
334
+ warn "Schema may be missing databaseInfo"
335
+ ((self_test_warnings++)) || true
336
+ fi
337
+
338
+ if grep -q "schemaValidation" "$SCHEMA_PATH" 2>/dev/null; then
339
+ success "Schema includes schemaValidation definition"
340
+ else
341
+ warn "Schema may be missing schemaValidation"
342
+ ((self_test_warnings++)) || true
343
+ fi
344
+ else
345
+ error "Schema file is NOT valid JSON"
346
+ self_test_passed=false
347
+ fi
348
+ else
349
+ error "Schema file not found: $SCHEMA_PATH"
350
+ self_test_passed=false
351
+ fi
352
+ echo ""
353
+
354
+ # Step 5: Test with Sample Data
355
+ echo "--- Step 5: Sample Data Validation ---"
356
+ if [[ -f "$SAMPLE_OUTPUT_PATH" ]]; then
357
+ success "Sample output file exists"
358
+
359
+ if validate_json "$SAMPLE_OUTPUT_PATH" 2>/dev/null; then
360
+ success "Sample output is valid JSON"
361
+
362
+ # Test database-specific validation
363
+ if validate_test_types "$SAMPLE_OUTPUT_PATH" 2>/dev/null; then
364
+ success "Sample output has valid test types"
365
+ else
366
+ warn "Sample output test types validation issue"
367
+ ((self_test_warnings++)) || true
368
+ fi
369
+ else
370
+ error "Sample output is NOT valid JSON"
371
+ self_test_passed=false
372
+ fi
373
+ else
374
+ info "No sample output file found at: $SAMPLE_OUTPUT_PATH"
375
+ info "Skipping sample data validation"
376
+ fi
377
+ echo ""
378
+
379
+ # Step 6: Library Self-Test
380
+ echo "--- Step 6: Validator Library Self-Test ---"
381
+ if run_self_test 2>/dev/null; then
382
+ success "Library self-test passed"
383
+ else
384
+ error "Library self-test FAILED"
385
+ self_test_passed=false
386
+ fi
387
+ echo ""
388
+
389
+ # Summary
390
+ echo "=============================================="
391
+ echo "Self-Test Summary for $SKILL_NAME"
392
+ echo "=============================================="
393
+
394
+ if [[ "$self_test_passed" == "true" ]]; then
395
+ if [[ $self_test_warnings -gt 0 ]]; then
396
+ warn "Self-test PASSED with $self_test_warnings warning(s)"
397
+ exit 0
398
+ else
399
+ success "Self-test PASSED"
400
+ exit 0
401
+ fi
402
+ else
403
+ error "Self-test FAILED"
404
+ exit 1
405
+ fi
406
+ fi
407
+
408
+ # =============================================================================
409
+ # SKILL-SPECIFIC VALIDATION FUNCTIONS
410
+ # =============================================================================
411
+
412
+ # Validate test types structure
413
+ # Returns: 0 if valid, 1 if invalid
414
+ validate_test_types() {
415
+ local output_file="$1"
416
+
417
+ # Check testTypes exists
418
+ local test_types_data
419
+ test_types_data=$(json_get "$output_file" ".output.testTypes" 2>/dev/null)
420
+
421
+ if [[ -z "$test_types_data" ]] || [[ "$test_types_data" == "null" ]]; then
422
+ warn "Missing testTypes in output"
423
+ return 1
424
+ fi
425
+
426
+ # Check that at least some test types are present
427
+ local types_tested=0
428
+ for test_type in "schema" "integrity" "migration" "transaction" "performance" "dataQuality"; do
429
+ local type_data
430
+ type_data=$(json_get "$output_file" ".output.testTypes.$test_type" 2>/dev/null)
431
+ if [[ -n "$type_data" ]] && [[ "$type_data" != "null" ]]; then
432
+ ((types_tested++)) || true
433
+ fi
434
+ done
435
+
436
+ if [[ $types_tested -eq 0 ]]; then
437
+ error "No test types found in testTypes"
438
+ return 1
439
+ fi
440
+
441
+ debug "Found $types_tested test types in output"
442
+ return 0
443
+ }
444
+
445
+ # Validate database info structure
446
+ # Returns: 0 if valid, 1 if invalid
447
+ validate_database_info() {
448
+ local output_file="$1"
449
+
450
+ # Check databaseInfo exists
451
+ local db_info
452
+ db_info=$(json_get "$output_file" ".output.databaseInfo" 2>/dev/null)
453
+
454
+ if [[ -z "$db_info" ]] || [[ "$db_info" == "null" ]]; then
455
+ warn "Missing databaseInfo in output"
456
+ return 1
457
+ fi
458
+
459
+ # Check database type is present
460
+ local db_type
461
+ db_type=$(json_get "$output_file" ".output.databaseInfo.type" 2>/dev/null)
462
+
463
+ if [[ -z "$db_type" ]] || [[ "$db_type" == "null" ]]; then
464
+ error "Missing database type in databaseInfo"
465
+ return 1
466
+ fi
467
+
468
+ # Validate database type is valid enum
469
+ if ! validate_enum "$db_type" "postgresql" "mysql" "mariadb" "mongodb" "sqlite" "mssql" "oracle" "redis" "cassandra" "other"; then
470
+ error "Invalid database type: $db_type"
471
+ return 1
472
+ fi
473
+
474
+ debug "Database type: $db_type"
475
+ return 0
476
+ }
477
+
478
+ # Validate database findings have required fields
479
+ # Returns: 0 if valid, 1 if invalid
480
+ validate_database_findings() {
481
+ local output_file="$1"
482
+
483
+ local finding_count
484
+ finding_count=$(json_count "$output_file" ".output.findings" 2>/dev/null)
485
+
486
+ if [[ -z "$finding_count" ]] || [[ "$finding_count" == "null" ]]; then
487
+ finding_count=0
488
+ fi
489
+
490
+ debug "Found $finding_count database findings"
491
+
492
+ # If there are findings, validate structure of first few
493
+ if [[ "$finding_count" -gt 0 ]]; then
494
+ # Check first finding has required fields
495
+ local first_id first_severity first_test_type
496
+ first_id=$(json_get "$output_file" ".output.findings[0].id" 2>/dev/null)
497
+ first_severity=$(json_get "$output_file" ".output.findings[0].severity" 2>/dev/null)
498
+ first_test_type=$(json_get "$output_file" ".output.findings[0].testType" 2>/dev/null)
499
+
500
+ if [[ -z "$first_id" ]] || [[ "$first_id" == "null" ]]; then
501
+ error "Finding missing 'id' field"
502
+ return 1
503
+ fi
504
+
505
+ # Validate ID format (DB-XXX)
506
+ if ! [[ "$first_id" =~ ^DB-[0-9]{3,6}$ ]]; then
507
+ warn "Finding ID does not match expected pattern DB-XXX: $first_id"
508
+ fi
509
+
510
+ if [[ -z "$first_severity" ]] || [[ "$first_severity" == "null" ]]; then
511
+ error "Finding missing 'severity' field"
512
+ return 1
513
+ fi
514
+
515
+ # Validate severity is valid enum
516
+ if ! validate_enum "$first_severity" "critical" "high" "medium" "low" "info"; then
517
+ error "Finding has invalid severity: $first_severity"
518
+ return 1
519
+ fi
520
+
521
+ if [[ -z "$first_test_type" ]] || [[ "$first_test_type" == "null" ]]; then
522
+ warn "Finding missing 'testType' - consider adding test type classification"
523
+ else
524
+ # Validate test type is valid enum
525
+ if ! validate_enum "$first_test_type" "schema" "integrity" "migration" "transaction" "performance" "data-quality"; then
526
+ error "Finding has invalid testType: $first_test_type"
527
+ return 1
528
+ fi
529
+ fi
530
+ fi
531
+
532
+ return 0
533
+ }
534
+
535
+ # Validate schema validation section if present
536
+ # Returns: 0 if valid, 1 if invalid
537
+ validate_schema_section() {
538
+ local output_file="$1"
539
+
540
+ local schema_data
541
+ schema_data=$(json_get "$output_file" ".output.schemaValidation" 2>/dev/null)
542
+
543
+ if [[ -z "$schema_data" ]] || [[ "$schema_data" == "null" ]]; then
544
+ debug "No schemaValidation section found (optional)"
545
+ return 0
546
+ fi
547
+
548
+ # If schema validation exists, check for table validations
549
+ local tables_validated
550
+ tables_validated=$(json_get "$output_file" ".output.schemaValidation.tablesValidated" 2>/dev/null)
551
+
552
+ if [[ -n "$tables_validated" ]] && [[ "$tables_validated" != "null" ]] && [[ "$tables_validated" -gt 0 ]]; then
553
+ debug "Schema validation covers $tables_validated tables"
554
+ fi
555
+
556
+ return 0
557
+ }
558
+
559
+ # Validate migration tests section if present
560
+ # Returns: 0 if valid, 1 if invalid
561
+ validate_migration_section() {
562
+ local output_file="$1"
563
+
564
+ local migration_data
565
+ migration_data=$(json_get "$output_file" ".output.migrationTests" 2>/dev/null)
566
+
567
+ if [[ -z "$migration_data" ]] || [[ "$migration_data" == "null" ]]; then
568
+ debug "No migrationTests section found (optional)"
569
+ return 0
570
+ fi
571
+
572
+ # If migration tests exist, check structure
573
+ local migrations_tested
574
+ migrations_tested=$(json_get "$output_file" ".output.migrationTests.migrationsTested" 2>/dev/null)
575
+
576
+ if [[ -n "$migrations_tested" ]] && [[ "$migrations_tested" != "null" ]]; then
577
+ debug "Migration tests cover $migrations_tested migrations"
578
+ fi
579
+
580
+ return 0
581
+ }
582
+
583
+ # Validate ACID compliance section if present
584
+ # Returns: 0 if valid, 1 if invalid
585
+ validate_acid_section() {
586
+ local output_file="$1"
587
+
588
+ local acid_data
589
+ acid_data=$(json_get "$output_file" ".output.transactionTests.acidCompliance" 2>/dev/null)
590
+
591
+ if [[ -z "$acid_data" ]] || [[ "$acid_data" == "null" ]]; then
592
+ debug "No ACID compliance section found (optional)"
593
+ return 0
594
+ fi
595
+
596
+ # Check for ACID property tests
597
+ for prop in "atomicity" "consistency" "isolation" "durability"; do
598
+ local prop_data
599
+ prop_data=$(json_get "$output_file" ".output.transactionTests.acidCompliance.$prop" 2>/dev/null)
600
+ if [[ -n "$prop_data" ]] && [[ "$prop_data" != "null" ]]; then
601
+ local tested passed
602
+ tested=$(json_get "$output_file" ".output.transactionTests.acidCompliance.$prop.tested" 2>/dev/null)
603
+ passed=$(json_get "$output_file" ".output.transactionTests.acidCompliance.$prop.passed" 2>/dev/null)
604
+ debug "ACID $prop: tested=$tested, passed=$passed"
605
+ fi
606
+ done
607
+
608
+ return 0
609
+ }
610
+
611
+ # Validate recommendations have required structure
612
+ # Returns: 0 if valid, 1 if invalid
613
+ validate_recommendations() {
614
+ local output_file="$1"
615
+
616
+ local rec_count
617
+ rec_count=$(json_count "$output_file" ".output.recommendations" 2>/dev/null)
618
+
619
+ if [[ -z "$rec_count" ]] || [[ "$rec_count" == "null" ]]; then
620
+ rec_count=0
621
+ fi
622
+
623
+ debug "Found $rec_count recommendations"
624
+
625
+ # If there are recommendations, validate structure
626
+ if [[ "$rec_count" -gt 0 ]]; then
627
+ local first_priority first_test_type
628
+ first_priority=$(json_get "$output_file" ".output.recommendations[0].priority" 2>/dev/null)
629
+ first_test_type=$(json_get "$output_file" ".output.recommendations[0].testType" 2>/dev/null)
630
+
631
+ if [[ -n "$first_priority" ]] && [[ "$first_priority" != "null" ]]; then
632
+ if ! validate_enum "$first_priority" "critical" "high" "medium" "low"; then
633
+ error "Recommendation has invalid priority: $first_priority"
634
+ return 1
635
+ fi
636
+ fi
637
+
638
+ if [[ -n "$first_test_type" ]] && [[ "$first_test_type" != "null" ]]; then
639
+ if ! validate_enum "$first_test_type" "schema" "integrity" "migration" "transaction" "performance" "data-quality"; then
640
+ error "Recommendation has invalid testType: $first_test_type"
641
+ return 1
642
+ fi
643
+ fi
644
+ fi
645
+
646
+ return 0
647
+ }
648
+
649
+ # Main skill-specific validation function
650
+ # Returns: 0 if valid, 1 if invalid
651
+ validate_skill_specific() {
652
+ local output_file="$1"
653
+ local has_errors=false
654
+
655
+ debug "Running database-testing specific validations..."
656
+
657
+ # Validate test types structure
658
+ if ! validate_test_types "$output_file"; then
659
+ has_errors=true
660
+ else
661
+ success "Test types validation passed"
662
+ fi
663
+
664
+ # Validate database info structure
665
+ if ! validate_database_info "$output_file"; then
666
+ has_errors=true
667
+ else
668
+ success "Database info validation passed"
669
+ fi
670
+
671
+ # Validate database findings structure
672
+ if ! validate_database_findings "$output_file"; then
673
+ has_errors=true
674
+ else
675
+ success "Database findings validation passed"
676
+ fi
677
+
678
+ # Validate schema section (optional)
679
+ if ! validate_schema_section "$output_file"; then
680
+ has_errors=true
681
+ else
682
+ success "Schema validation section passed"
683
+ fi
684
+
685
+ # Validate migration section (optional)
686
+ if ! validate_migration_section "$output_file"; then
687
+ has_errors=true
688
+ else
689
+ success "Migration tests section passed"
690
+ fi
691
+
692
+ # Validate ACID section (optional)
693
+ if ! validate_acid_section "$output_file"; then
694
+ has_errors=true
695
+ else
696
+ success "ACID compliance section passed"
697
+ fi
698
+
699
+ # Validate recommendations
700
+ if ! validate_recommendations "$output_file"; then
701
+ has_errors=true
702
+ else
703
+ success "Recommendations validation passed"
704
+ fi
705
+
706
+ # Check for database tool attribution
707
+ local tools_used
708
+ tools_used=$(json_get "$output_file" ".metadata.toolsUsed" 2>/dev/null)
709
+ if [[ -z "$tools_used" ]] || [[ "$tools_used" == "null" ]] || [[ "$tools_used" == "[]" ]]; then
710
+ warn "No database tools listed in metadata.toolsUsed"
711
+ else
712
+ debug "Database tools used: $tools_used"
713
+ fi
714
+
715
+ if [[ "$has_errors" == "true" ]]; then
716
+ return 1
717
+ fi
718
+
719
+ return 0
720
+ }
721
+
722
+ # =============================================================================
723
+ # Validation Functions (Override base template as needed)
724
+ # =============================================================================
725
+
726
+ validate_tools() {
727
+ if [[ ${#REQUIRED_TOOLS[@]} -eq 0 ]]; then
728
+ debug "No required tools specified"
729
+ return 0
730
+ fi
731
+
732
+ local missing=()
733
+ for tool in "${REQUIRED_TOOLS[@]}"; do
734
+ if ! command_exists "$tool"; then
735
+ missing+=("$tool")
736
+ fi
737
+ done
738
+
739
+ if [[ ${#missing[@]} -gt 0 ]]; then
740
+ error "Missing required tools: ${missing[*]}"
741
+ return 1
742
+ fi
743
+
744
+ debug "All required tools available"
745
+ return 0
746
+ }
747
+
748
+ validate_schema() {
749
+ local output_file="$1"
750
+
751
+ if [[ -z "$SCHEMA_PATH" ]]; then
752
+ debug "No schema path configured, skipping schema validation"
753
+ return 2
754
+ fi
755
+
756
+ if [[ ! -f "$SCHEMA_PATH" ]]; then
757
+ warn "Schema file not found: $SCHEMA_PATH"
758
+ return 2
759
+ fi
760
+
761
+ debug "Validating against schema: $SCHEMA_PATH"
762
+
763
+ local result
764
+ result=$(validate_json_schema "$SCHEMA_PATH" "$output_file" 2>&1)
765
+ local status=$?
766
+
767
+ case $status in
768
+ 0)
769
+ success "Schema validation passed"
770
+ return 0
771
+ ;;
772
+ 1)
773
+ error "Schema validation failed"
774
+ if [[ "$VERBOSE" == "true" ]]; then
775
+ echo "$result" | while read -r line; do
776
+ echo " $line"
777
+ done
778
+ fi
779
+ return 1
780
+ ;;
781
+ 2)
782
+ warn "Schema validation skipped (no validator available)"
783
+ return 2
784
+ ;;
785
+ esac
786
+ }
787
+
788
+ validate_required_fields() {
789
+ local output_file="$1"
790
+ local missing=()
791
+ local empty=()
792
+
793
+ for field in "${REQUIRED_FIELDS[@]}"; do
794
+ local value
795
+ value=$(json_get "$output_file" ".$field" 2>/dev/null)
796
+ if [[ -z "$value" ]] || [[ "$value" == "null" ]]; then
797
+ missing+=("$field")
798
+ fi
799
+ done
800
+
801
+ for field in "${REQUIRED_NON_EMPTY_FIELDS[@]}"; do
802
+ local value
803
+ value=$(json_get "$output_file" ".$field" 2>/dev/null)
804
+ if [[ -z "$value" ]] || [[ "$value" == "null" ]] || [[ "$value" == "" ]] || [[ "$value" == "[]" ]] || [[ "$value" == "{}" ]]; then
805
+ empty+=("$field")
806
+ fi
807
+ done
808
+
809
+ local has_errors=false
810
+
811
+ if [[ ${#missing[@]} -gt 0 ]]; then
812
+ error "Missing required fields: ${missing[*]}"
813
+ has_errors=true
814
+ fi
815
+
816
+ if [[ ${#empty[@]} -gt 0 ]]; then
817
+ error "Empty required fields: ${empty[*]}"
818
+ has_errors=true
819
+ fi
820
+
821
+ if [[ "$has_errors" == "true" ]]; then
822
+ return 1
823
+ fi
824
+
825
+ success "All required fields present and valid"
826
+ return 0
827
+ }
828
+
829
+ validate_enum_fields() {
830
+ local output_file="$1"
831
+
832
+ if [[ ${#ENUM_VALIDATIONS[@]} -eq 0 ]]; then
833
+ return 0
834
+ fi
835
+
836
+ local has_errors=false
837
+
838
+ for validation in "${ENUM_VALIDATIONS[@]}"; do
839
+ local field_path="${validation%%:*}"
840
+ local allowed_values="${validation#*:}"
841
+
842
+ local actual_value
843
+ actual_value=$(json_get "$output_file" "$field_path" 2>/dev/null)
844
+
845
+ if [[ -z "$actual_value" ]] || [[ "$actual_value" == "null" ]]; then
846
+ continue
847
+ fi
848
+
849
+ local found=false
850
+ IFS=',' read -ra allowed_array <<< "$allowed_values"
851
+ for allowed in "${allowed_array[@]}"; do
852
+ if [[ "$actual_value" == "$allowed" ]]; then
853
+ found=true
854
+ break
855
+ fi
856
+ done
857
+
858
+ if [[ "$found" == "false" ]]; then
859
+ error "Invalid value for $field_path: '$actual_value' (allowed: $allowed_values)"
860
+ has_errors=true
861
+ fi
862
+ done
863
+
864
+ if [[ "$has_errors" == "true" ]]; then
865
+ return 1
866
+ fi
867
+
868
+ success "All enum fields have valid values"
869
+ return 0
870
+ }
871
+
872
+ validate_content_terms() {
873
+ local output_file="$1"
874
+ local content
875
+ content=$(cat "$output_file")
876
+
877
+ local has_errors=false
878
+
879
+ if [[ ${#MUST_CONTAIN_TERMS[@]} -gt 0 ]]; then
880
+ local missing_terms=()
881
+ for term in "${MUST_CONTAIN_TERMS[@]}"; do
882
+ if ! grep -qi "$term" <<< "$content"; then
883
+ missing_terms+=("$term")
884
+ fi
885
+ done
886
+
887
+ if [[ ${#missing_terms[@]} -gt 0 ]]; then
888
+ error "Output missing required database terms: ${missing_terms[*]}"
889
+ has_errors=true
890
+ else
891
+ success "All required database terms found"
892
+ fi
893
+ fi
894
+
895
+ if [[ ${#MUST_NOT_CONTAIN_TERMS[@]} -gt 0 ]]; then
896
+ local found_forbidden=()
897
+ for term in "${MUST_NOT_CONTAIN_TERMS[@]}"; do
898
+ if grep -qi "$term" <<< "$content"; then
899
+ found_forbidden+=("$term")
900
+ fi
901
+ done
902
+
903
+ if [[ ${#found_forbidden[@]} -gt 0 ]]; then
904
+ error "Output contains forbidden terms: ${found_forbidden[*]}"
905
+ has_errors=true
906
+ else
907
+ success "No forbidden terms found"
908
+ fi
909
+ fi
910
+
911
+ if [[ "$has_errors" == "true" ]]; then
912
+ return 1
913
+ fi
914
+
915
+ return 0
916
+ }
917
+
918
+ # =============================================================================
919
+ # Main Validation Flow
920
+ # =============================================================================
921
+
922
+ main() {
923
+ if [[ -z "$OUTPUT_FILE" ]]; then
924
+ error "No output file specified"
925
+ echo "Usage: $0 <output-file> [options]"
926
+ echo "Use --help for more information"
927
+ exit 1
928
+ fi
929
+
930
+ if [[ ! -f "$OUTPUT_FILE" ]]; then
931
+ error "Output file not found: $OUTPUT_FILE"
932
+ exit 1
933
+ fi
934
+
935
+ if [[ "$JSON_ONLY" != "true" ]]; then
936
+ echo "=============================================="
937
+ info "Validating $SKILL_NAME Output"
938
+ echo "=============================================="
939
+ echo ""
940
+ echo " Skill: $SKILL_NAME v$SKILL_VERSION"
941
+ echo " File: $OUTPUT_FILE"
942
+ echo " Schema: ${SCHEMA_PATH:-none}"
943
+ echo ""
944
+ fi
945
+
946
+ # Track validation status
947
+ local tool_status="passed"
948
+ local json_status="passed"
949
+ local schema_status="passed"
950
+ local fields_status="passed"
951
+ local enums_status="passed"
952
+ local content_status="passed"
953
+ local specific_status="passed"
954
+ local error_count=0
955
+ local warning_count=0
956
+
957
+ # Step 1: Check Required Tools
958
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 1: Tool Availability ---"
959
+
960
+ if ! validate_tools; then
961
+ tool_status="failed"
962
+ ((error_count++)) || true
963
+ if [[ "$JSON_ONLY" == "true" ]]; then
964
+ output_validation_report "$SKILL_NAME" "skipped" "skipped" "failed"
965
+ fi
966
+ exit $EXIT_SKIP
967
+ fi
968
+
969
+ [[ "$JSON_ONLY" != "true" ]] && success "Tool check passed" && echo ""
970
+
971
+ # Step 2: Validate JSON Syntax
972
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 2: JSON Syntax ---"
973
+
974
+ if ! validate_json "$OUTPUT_FILE"; then
975
+ json_status="failed"
976
+ ((error_count++)) || true
977
+ [[ "$JSON_ONLY" != "true" ]] && error "File is not valid JSON"
978
+ if [[ "$JSON_ONLY" == "true" ]]; then
979
+ output_validation_report "$SKILL_NAME" "failed" "failed" "$tool_status"
980
+ fi
981
+ exit $EXIT_FAIL
982
+ fi
983
+
984
+ [[ "$JSON_ONLY" != "true" ]] && success "JSON syntax valid" && echo ""
985
+
986
+ # Step 3: Validate Against Schema
987
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 3: Schema Validation ---"
988
+
989
+ local schema_exit_code
990
+ validate_schema "$OUTPUT_FILE" && schema_exit_code=0 || schema_exit_code=$?
991
+
992
+ case $schema_exit_code in
993
+ 0) [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
994
+ 1) schema_status="failed"; ((error_count++)) || true; [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
995
+ 2) schema_status="skipped"; ((warning_count++)) || true; [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
996
+ esac
997
+
998
+ # Step 4: Validate Required Fields
999
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 4: Required Fields ---"
1000
+
1001
+ if ! validate_required_fields "$OUTPUT_FILE"; then
1002
+ fields_status="failed"
1003
+ ((error_count++)) || true
1004
+ fi
1005
+
1006
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
1007
+
1008
+ # Step 5: Validate Enum Values
1009
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 5: Enum Validation ---"
1010
+
1011
+ if ! validate_enum_fields "$OUTPUT_FILE"; then
1012
+ enums_status="failed"
1013
+ ((error_count++)) || true
1014
+ fi
1015
+
1016
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
1017
+
1018
+ # Step 6: Validate Database Content Terms
1019
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 6: Database Content Terms ---"
1020
+
1021
+ if ! validate_content_terms "$OUTPUT_FILE"; then
1022
+ content_status="failed"
1023
+ ((error_count++)) || true
1024
+ fi
1025
+
1026
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
1027
+
1028
+ # Step 7: Database-Specific Validation
1029
+ [[ "$JSON_ONLY" != "true" ]] && echo "--- Step 7: Database-Specific Validation ---"
1030
+
1031
+ if ! validate_skill_specific "$OUTPUT_FILE"; then
1032
+ specific_status="failed"
1033
+ ((error_count++)) || true
1034
+ fi
1035
+
1036
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
1037
+
1038
+ # Determine Overall Status
1039
+ local overall_status="passed"
1040
+ local content_overall="passed"
1041
+
1042
+ if [[ "$fields_status" == "failed" ]] || \
1043
+ [[ "$enums_status" == "failed" ]] || \
1044
+ [[ "$content_status" == "failed" ]] || \
1045
+ [[ "$specific_status" == "failed" ]]; then
1046
+ content_overall="failed"
1047
+ fi
1048
+
1049
+ if [[ "$json_status" == "failed" ]] || \
1050
+ [[ "$schema_status" == "failed" ]] || \
1051
+ [[ "$content_overall" == "failed" ]]; then
1052
+ overall_status="failed"
1053
+ elif [[ "$schema_status" == "skipped" ]]; then
1054
+ overall_status="partial"
1055
+ fi
1056
+
1057
+ # Output Results
1058
+ if [[ "$JSON_ONLY" == "true" ]]; then
1059
+ output_validation_report "$SKILL_NAME" "$schema_status" "$content_overall" "$tool_status"
1060
+ else
1061
+ echo "=============================================="
1062
+ echo "Validation Summary for $SKILL_NAME"
1063
+ echo "=============================================="
1064
+ echo ""
1065
+ echo " Tools: $tool_status"
1066
+ echo " JSON Syntax: $json_status"
1067
+ echo " Schema: $schema_status"
1068
+ echo " Required Fields: $fields_status"
1069
+ echo " Enum Values: $enums_status"
1070
+ echo " Content Terms: $content_status"
1071
+ echo " Database-Specific: $specific_status"
1072
+ echo ""
1073
+ echo " ------------------------------"
1074
+ echo " Overall: $overall_status"
1075
+ echo " Errors: $error_count"
1076
+ echo " Warnings: $warning_count"
1077
+ echo "=============================================="
1078
+ echo ""
1079
+ fi
1080
+
1081
+ # Exit with appropriate code
1082
+ case "$overall_status" in
1083
+ "passed")
1084
+ [[ "$JSON_ONLY" != "true" ]] && success "Validation PASSED"
1085
+ exit $EXIT_PASS
1086
+ ;;
1087
+ "partial")
1088
+ [[ "$JSON_ONLY" != "true" ]] && warn "Validation PARTIAL (some checks skipped)"
1089
+ exit $EXIT_PASS
1090
+ ;;
1091
+ "failed")
1092
+ [[ "$JSON_ONLY" != "true" ]] && error "Validation FAILED"
1093
+ exit $EXIT_FAIL
1094
+ ;;
1095
+ esac
1096
+ }
1097
+
1098
+ # Run main function
1099
+ main