agentic-qe 3.4.1 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/.claude/skills/.validation/README.md +111 -0
  2. package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
  3. package/.claude/skills/.validation/examples/performance-testing-output.example.json +252 -0
  4. package/.claude/skills/.validation/examples/security-testing-output.example.json +413 -0
  5. package/.claude/skills/.validation/examples/testability-scoring-output.example.json +350 -0
  6. package/.claude/skills/.validation/schemas/skill-eval.schema.json +452 -0
  7. package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
  8. package/.claude/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
  9. package/.claude/skills/.validation/schemas/skill-output.template.json +610 -0
  10. package/.claude/skills/.validation/skill-validation-mcp-integration.md +250 -0
  11. package/.claude/skills/.validation/templates/eval.template.yaml +366 -0
  12. package/.claude/skills/.validation/templates/schemas/output.json +145 -0
  13. package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
  14. package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
  15. package/.claude/skills/.validation/templates/validate.template.sh +1060 -0
  16. package/.claude/skills/.validation/templates/validator-lib.sh +1031 -0
  17. package/.claude/skills/.validation/test-data/invalid-output.json +5 -0
  18. package/.claude/skills/.validation/test-data/minimal-output.json +9 -0
  19. package/.claude/skills/.validation/test-data/sample-output.json +73 -0
  20. package/.claude/skills/TRUST-TIERS.md +158 -0
  21. package/.claude/skills/a11y-ally/SKILL.md +1664 -1658
  22. package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +376 -0
  23. package/.claude/skills/a11y-ally/schemas/output.json +549 -0
  24. package/.claude/skills/a11y-ally/scripts/validate.sh +690 -0
  25. package/.claude/skills/accessibility-testing/SKILL.md +8 -1
  26. package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
  27. package/.claude/skills/accessibility-testing/schemas/output.json +776 -0
  28. package/.claude/skills/accessibility-testing/scripts/validate.sh +943 -0
  29. package/.claude/skills/accessibility-testing/test-data/sample-output.json +191 -0
  30. package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -0
  31. package/.claude/skills/agentic-quality-engineering/schemas/output.json +577 -0
  32. package/.claude/skills/api-testing-patterns/SKILL.md +5 -0
  33. package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
  34. package/.claude/skills/api-testing-patterns/schemas/output.json +845 -0
  35. package/.claude/skills/api-testing-patterns/scripts/validate.sh +931 -0
  36. package/.claude/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
  37. package/.claude/skills/aqe-v2-v3-migration/skill.md +4 -0
  38. package/.claude/skills/brutal-honesty-review/SKILL.md +5 -0
  39. package/.claude/skills/brutal-honesty-review/schemas/output.json +291 -0
  40. package/.claude/skills/brutal-honesty-review/scripts/validate.sh +130 -0
  41. package/.claude/skills/bug-reporting-excellence/SKILL.md +5 -0
  42. package/.claude/skills/bug-reporting-excellence/schemas/output.json +288 -0
  43. package/.claude/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
  44. package/.claude/skills/chaos-engineering-resilience/SKILL.md +5 -0
  45. package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  46. package/.claude/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
  47. package/.claude/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
  48. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -0
  49. package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -0
  50. package/.claude/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -0
  51. package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate.sh +310 -0
  52. package/.claude/skills/code-review-quality/SKILL.md +5 -0
  53. package/.claude/skills/code-review-quality/schemas/output.json +264 -0
  54. package/.claude/skills/code-review-quality/scripts/validate.sh +113 -0
  55. package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
  56. package/.claude/skills/compatibility-testing/schemas/output.json +551 -0
  57. package/.claude/skills/compatibility-testing/scripts/validate.sh +605 -0
  58. package/.claude/skills/compliance-testing/SKILL.md +7 -0
  59. package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
  60. package/.claude/skills/compliance-testing/schemas/output.json +845 -0
  61. package/.claude/skills/compliance-testing/scripts/validate.sh +888 -0
  62. package/.claude/skills/consultancy-practices/SKILL.md +4 -0
  63. package/.claude/skills/consultancy-practices/schemas/output.json +282 -0
  64. package/.claude/skills/context-driven-testing/SKILL.md +3 -0
  65. package/.claude/skills/contract-testing/SKILL.md +5 -0
  66. package/.claude/skills/contract-testing/evals/contract-testing.yaml +748 -0
  67. package/.claude/skills/contract-testing/schemas/output.json +638 -0
  68. package/.claude/skills/contract-testing/scripts/validate.sh +1033 -0
  69. package/.claude/skills/database-testing/SKILL.md +5 -0
  70. package/.claude/skills/database-testing/evals/database-testing.yaml +968 -0
  71. package/.claude/skills/database-testing/schemas/output.json +1446 -0
  72. package/.claude/skills/database-testing/scripts/validate.sh +1099 -0
  73. package/.claude/skills/exploratory-testing-advanced/SKILL.md +3 -0
  74. package/.claude/skills/holistic-testing-pact/SKILL.md +3 -0
  75. package/.claude/skills/localization-testing/SKILL.md +6 -0
  76. package/.claude/skills/localization-testing/evals/localization-testing.yaml +544 -0
  77. package/.claude/skills/localization-testing/schemas/output.json +325 -0
  78. package/.claude/skills/localization-testing/scripts/validate.sh +131 -0
  79. package/.claude/skills/mobile-testing/SKILL.md +6 -0
  80. package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
  81. package/.claude/skills/mobile-testing/schemas/output.json +318 -0
  82. package/.claude/skills/mobile-testing/scripts/validate.sh +127 -0
  83. package/.claude/skills/mutation-testing/SKILL.md +8 -1
  84. package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
  85. package/.claude/skills/mutation-testing/schemas/output.json +707 -0
  86. package/.claude/skills/mutation-testing/scripts/validate.sh +992 -0
  87. package/.claude/skills/mutation-testing/test-data/sample-output.json +295 -0
  88. package/.claude/skills/n8n-expression-testing/SKILL.md +6 -0
  89. package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -0
  90. package/.claude/skills/n8n-expression-testing/schemas/output.json +369 -0
  91. package/.claude/skills/n8n-expression-testing/scripts/validate.sh +162 -0
  92. package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +6 -0
  93. package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -0
  94. package/.claude/skills/n8n-integration-testing-patterns/schemas/output.json +291 -0
  95. package/.claude/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
  96. package/.claude/skills/n8n-security-testing/SKILL.md +6 -0
  97. package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -0
  98. package/.claude/skills/n8n-security-testing/schemas/output.json +293 -0
  99. package/.claude/skills/n8n-security-testing/scripts/validate.sh +120 -0
  100. package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +6 -0
  101. package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -0
  102. package/.claude/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -0
  103. package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
  104. package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +6 -0
  105. package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -0
  106. package/.claude/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -0
  107. package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
  108. package/.claude/skills/performance-analysis/SKILL.md +6 -0
  109. package/.claude/skills/performance-analysis/evals/performance-analysis.yaml +144 -0
  110. package/.claude/skills/performance-analysis/schemas/output.json +588 -0
  111. package/.claude/skills/performance-analysis/scripts/validate.sh +63 -0
  112. package/.claude/skills/performance-testing/SKILL.md +5 -0
  113. package/.claude/skills/performance-testing/evals/performance-testing.yaml +772 -0
  114. package/.claude/skills/performance-testing/schemas/output.json +1184 -0
  115. package/.claude/skills/performance-testing/scripts/validate.sh +1090 -0
  116. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +1759 -1753
  117. package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
  118. package/.claude/skills/qcsd-ideation-swarm/schemas/output.json +568 -0
  119. package/.claude/skills/qcsd-ideation-swarm/scripts/validate.sh +56 -0
  120. package/.claude/skills/qe-chaos-resilience/SKILL.md +6 -0
  121. package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
  122. package/.claude/skills/qe-chaos-resilience/schemas/output.json +314 -0
  123. package/.claude/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
  124. package/.claude/skills/qe-code-intelligence/SKILL.md +6 -0
  125. package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
  126. package/.claude/skills/qe-code-intelligence/schemas/output.json +315 -0
  127. package/.claude/skills/qe-code-intelligence/scripts/validate.sh +408 -0
  128. package/.claude/skills/qe-contract-testing/SKILL.md +6 -0
  129. package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
  130. package/.claude/skills/qe-contract-testing/schemas/output.json +295 -0
  131. package/.claude/skills/qe-contract-testing/scripts/validate.sh +421 -0
  132. package/.claude/skills/qe-coverage-analysis/SKILL.md +6 -0
  133. package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
  134. package/.claude/skills/qe-coverage-analysis/schemas/output.json +286 -0
  135. package/.claude/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
  136. package/.claude/skills/qe-defect-intelligence/SKILL.md +6 -0
  137. package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
  138. package/.claude/skills/qe-defect-intelligence/schemas/output.json +283 -0
  139. package/.claude/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
  140. package/.claude/skills/qe-iterative-loop/SKILL.md +445 -440
  141. package/.claude/skills/qe-iterative-loop/schemas/output.json +264 -0
  142. package/.claude/skills/qe-iterative-loop/scripts/validate.sh +474 -0
  143. package/.claude/skills/qe-learning-optimization/SKILL.md +6 -0
  144. package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
  145. package/.claude/skills/qe-learning-optimization/schemas/output.json +288 -0
  146. package/.claude/skills/qe-learning-optimization/scripts/validate.sh +56 -0
  147. package/.claude/skills/qe-quality-assessment/SKILL.md +6 -0
  148. package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
  149. package/.claude/skills/qe-quality-assessment/schemas/output.json +550 -0
  150. package/.claude/skills/qe-quality-assessment/scripts/validate.sh +352 -0
  151. package/.claude/skills/qe-requirements-validation/SKILL.md +6 -0
  152. package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
  153. package/.claude/skills/qe-requirements-validation/schemas/output.json +587 -0
  154. package/.claude/skills/qe-requirements-validation/scripts/validate.sh +275 -0
  155. package/.claude/skills/qe-security-compliance/SKILL.md +6 -0
  156. package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
  157. package/.claude/skills/qe-security-compliance/schemas/output.json +498 -0
  158. package/.claude/skills/qe-security-compliance/scripts/validate.sh +305 -0
  159. package/.claude/skills/qe-test-execution/SKILL.md +6 -0
  160. package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
  161. package/.claude/skills/qe-test-execution/schemas/output.json +529 -0
  162. package/.claude/skills/qe-test-execution/scripts/validate.sh +323 -0
  163. package/.claude/skills/qe-test-generation/SKILL.md +6 -0
  164. package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
  165. package/.claude/skills/qe-test-generation/schemas/output.json +439 -0
  166. package/.claude/skills/qe-test-generation/scripts/validate.sh +56 -0
  167. package/.claude/skills/qe-visual-accessibility/SKILL.md +6 -0
  168. package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
  169. package/.claude/skills/qe-visual-accessibility/schemas/output.json +491 -0
  170. package/.claude/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
  171. package/.claude/skills/quality-metrics/SKILL.md +6 -0
  172. package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
  173. package/.claude/skills/quality-metrics/schemas/output.json +403 -0
  174. package/.claude/skills/quality-metrics/scripts/validate.sh +434 -0
  175. package/.claude/skills/refactoring-patterns/SKILL.md +5 -0
  176. package/.claude/skills/refactoring-patterns/schemas/output.json +475 -0
  177. package/.claude/skills/refactoring-patterns/scripts/validate.sh +241 -0
  178. package/.claude/skills/regression-testing/SKILL.md +6 -0
  179. package/.claude/skills/regression-testing/evals/regression-testing.yaml +504 -0
  180. package/.claude/skills/regression-testing/schemas/output.json +311 -0
  181. package/.claude/skills/regression-testing/scripts/validate.sh +130 -0
  182. package/.claude/skills/risk-based-testing/SKILL.md +6 -0
  183. package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
  184. package/.claude/skills/risk-based-testing/schemas/output.json +480 -0
  185. package/.claude/skills/risk-based-testing/scripts/validate.sh +56 -0
  186. package/.claude/skills/security-testing/SKILL.md +5 -0
  187. package/.claude/skills/security-testing/evals/security-testing.yaml +789 -0
  188. package/.claude/skills/security-testing/schemas/output.json +879 -0
  189. package/.claude/skills/security-testing/scripts/validate.sh +967 -0
  190. package/.claude/skills/security-visual-testing/SKILL.md +223 -217
  191. package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -0
  192. package/.claude/skills/security-visual-testing/schemas/output.json +486 -0
  193. package/.claude/skills/security-visual-testing/scripts/validate.sh +748 -0
  194. package/.claude/skills/sherlock-review/SKILL.md +5 -0
  195. package/.claude/skills/sherlock-review/schemas/output.json +297 -0
  196. package/.claude/skills/sherlock-review/scripts/validate.sh +115 -0
  197. package/.claude/skills/shift-left-testing/SKILL.md +6 -0
  198. package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
  199. package/.claude/skills/shift-left-testing/schemas/output.json +459 -0
  200. package/.claude/skills/shift-left-testing/scripts/validate.sh +56 -0
  201. package/.claude/skills/shift-right-testing/SKILL.md +6 -0
  202. package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
  203. package/.claude/skills/shift-right-testing/schemas/output.json +418 -0
  204. package/.claude/skills/shift-right-testing/scripts/validate.sh +56 -0
  205. package/.claude/skills/six-thinking-hats/SKILL.md +3 -0
  206. package/.claude/skills/tdd-london-chicago/SKILL.md +5 -0
  207. package/.claude/skills/tdd-london-chicago/schemas/output.json +444 -0
  208. package/.claude/skills/tdd-london-chicago/scripts/validate.sh +214 -0
  209. package/.claude/skills/technical-writing/SKILL.md +4 -0
  210. package/.claude/skills/technical-writing/schemas/output.json +268 -0
  211. package/.claude/skills/test-automation-strategy/SKILL.md +6 -0
  212. package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
  213. package/.claude/skills/test-automation-strategy/schemas/output.json +444 -0
  214. package/.claude/skills/test-automation-strategy/scripts/validate.sh +195 -0
  215. package/.claude/skills/test-data-management/SKILL.md +6 -0
  216. package/.claude/skills/test-data-management/evals/test-data-management.yaml +504 -0
  217. package/.claude/skills/test-data-management/schemas/output.json +284 -0
  218. package/.claude/skills/test-data-management/scripts/validate.sh +137 -0
  219. package/.claude/skills/test-design-techniques/SKILL.md +6 -0
  220. package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
  221. package/.claude/skills/test-design-techniques/schemas/output.json +295 -0
  222. package/.claude/skills/test-design-techniques/scripts/validate.sh +91 -0
  223. package/.claude/skills/test-environment-management/SKILL.md +4 -0
  224. package/.claude/skills/test-environment-management/schemas/output.json +310 -0
  225. package/.claude/skills/test-reporting-analytics/SKILL.md +6 -0
  226. package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
  227. package/.claude/skills/test-reporting-analytics/schemas/output.json +329 -0
  228. package/.claude/skills/test-reporting-analytics/scripts/validate.sh +77 -0
  229. package/.claude/skills/testability-scoring/SKILL.md +5 -0
  230. package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +814 -0
  231. package/.claude/skills/testability-scoring/schemas/output.json +606 -0
  232. package/.claude/skills/testability-scoring/scripts/validate.sh +891 -0
  233. package/.claude/skills/trust-tier-manifest.json +2333 -0
  234. package/.claude/skills/verification-quality/SKILL.md +6 -0
  235. package/.claude/skills/verification-quality/evals/verification-quality.yaml +150 -0
  236. package/.claude/skills/verification-quality/schemas/output.json +432 -0
  237. package/.claude/skills/verification-quality/scripts/validate.sh +77 -0
  238. package/.claude/skills/visual-testing-advanced/SKILL.md +6 -0
  239. package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
  240. package/.claude/skills/visual-testing-advanced/schemas/output.json +294 -0
  241. package/.claude/skills/visual-testing-advanced/scripts/validate.sh +77 -0
  242. package/.claude/skills/xp-practices/SKILL.md +3 -0
  243. package/README.md +39 -2
  244. package/package.json +4 -1
  245. package/scripts/run-skill-eval.ts +1097 -0
  246. package/scripts/test-schema-validation.js +301 -0
  247. package/scripts/update-skill-manifest.ts +751 -0
  248. package/scripts/validate-skill-frontmatter.js +141 -0
  249. package/v3/CHANGELOG.md +21 -0
  250. package/v3/README.md +43 -3
  251. package/v3/assets/agents/v3/qe-test-idea-rewriter.md +375 -375
  252. package/v3/assets/skills/.validation/README.md +111 -0
  253. package/v3/assets/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
  254. package/v3/assets/skills/.validation/examples/performance-testing-output.example.json +252 -0
  255. package/v3/assets/skills/.validation/examples/security-testing-output.example.json +413 -0
  256. package/v3/assets/skills/.validation/examples/testability-scoring-output.example.json +350 -0
  257. package/v3/assets/skills/.validation/schemas/skill-eval.schema.json +452 -0
  258. package/v3/assets/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
  259. package/v3/assets/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
  260. package/v3/assets/skills/.validation/schemas/skill-output.template.json +610 -0
  261. package/v3/assets/skills/.validation/skill-validation-mcp-integration.md +250 -0
  262. package/v3/assets/skills/.validation/templates/eval.template.yaml +366 -0
  263. package/v3/assets/skills/.validation/templates/schemas/output.json +145 -0
  264. package/v3/assets/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
  265. package/v3/assets/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
  266. package/v3/assets/skills/.validation/templates/validate.template.sh +1060 -0
  267. package/v3/assets/skills/.validation/templates/validator-lib.sh +1031 -0
  268. package/v3/assets/skills/.validation/test-data/invalid-output.json +5 -0
  269. package/v3/assets/skills/.validation/test-data/minimal-output.json +9 -0
  270. package/v3/assets/skills/.validation/test-data/sample-output.json +73 -0
  271. package/v3/assets/skills/accessibility-testing/SKILL.md +8 -1
  272. package/v3/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
  273. package/v3/assets/skills/accessibility-testing/schemas/output.json +776 -0
  274. package/v3/assets/skills/accessibility-testing/scripts/validate.sh +943 -0
  275. package/v3/assets/skills/accessibility-testing/test-data/sample-output.json +191 -0
  276. package/v3/assets/skills/agentic-quality-engineering/SKILL.md +4 -0
  277. package/v3/assets/skills/agentic-quality-engineering/schemas/output.json +577 -0
  278. package/v3/assets/skills/api-testing-patterns/SKILL.md +5 -0
  279. package/v3/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
  280. package/v3/assets/skills/api-testing-patterns/schemas/output.json +845 -0
  281. package/v3/assets/skills/api-testing-patterns/scripts/validate.sh +931 -0
  282. package/v3/assets/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
  283. package/v3/assets/skills/aqe-v2-v3-migration/skill.md +20 -16
  284. package/v3/assets/skills/bug-reporting-excellence/SKILL.md +5 -0
  285. package/v3/assets/skills/bug-reporting-excellence/schemas/output.json +288 -0
  286. package/v3/assets/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
  287. package/v3/assets/skills/chaos-engineering-resilience/SKILL.md +5 -0
  288. package/v3/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  289. package/v3/assets/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
  290. package/v3/assets/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
  291. package/v3/assets/skills/code-review-quality/SKILL.md +5 -0
  292. package/v3/assets/skills/code-review-quality/schemas/output.json +264 -0
  293. package/v3/assets/skills/code-review-quality/scripts/validate.sh +113 -0
  294. package/v3/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
  295. package/v3/assets/skills/compatibility-testing/schemas/output.json +551 -0
  296. package/v3/assets/skills/compatibility-testing/scripts/validate.sh +605 -0
  297. package/v3/assets/skills/compliance-testing/SKILL.md +7 -0
  298. package/v3/assets/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
  299. package/v3/assets/skills/compliance-testing/schemas/output.json +845 -0
  300. package/v3/assets/skills/compliance-testing/scripts/validate.sh +888 -0
  301. package/v3/assets/skills/consultancy-practices/SKILL.md +4 -0
  302. package/v3/assets/skills/consultancy-practices/schemas/output.json +282 -0
  303. package/v3/assets/skills/context-driven-testing/SKILL.md +3 -0
  304. package/v3/assets/skills/contract-testing/SKILL.md +5 -0
  305. package/v3/assets/skills/contract-testing/evals/contract-testing.yaml +748 -0
  306. package/v3/assets/skills/contract-testing/schemas/output.json +638 -0
  307. package/v3/assets/skills/contract-testing/scripts/validate.sh +1033 -0
  308. package/v3/assets/skills/database-testing/SKILL.md +5 -0
  309. package/v3/assets/skills/database-testing/evals/database-testing.yaml +968 -0
  310. package/v3/assets/skills/database-testing/schemas/output.json +1446 -0
  311. package/v3/assets/skills/database-testing/scripts/validate.sh +1099 -0
  312. package/v3/assets/skills/exploratory-testing-advanced/SKILL.md +3 -0
  313. package/v3/assets/skills/holistic-testing-pact/SKILL.md +3 -0
  314. package/v3/assets/skills/localization-testing/SKILL.md +6 -0
  315. package/v3/assets/skills/localization-testing/evals/localization-testing.yaml +544 -0
  316. package/v3/assets/skills/localization-testing/schemas/output.json +325 -0
  317. package/v3/assets/skills/localization-testing/scripts/validate.sh +131 -0
  318. package/v3/assets/skills/mobile-testing/SKILL.md +6 -0
  319. package/v3/assets/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
  320. package/v3/assets/skills/mobile-testing/schemas/output.json +318 -0
  321. package/v3/assets/skills/mobile-testing/scripts/validate.sh +127 -0
  322. package/v3/assets/skills/mutation-testing/SKILL.md +8 -1
  323. package/v3/assets/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
  324. package/v3/assets/skills/mutation-testing/schemas/output.json +707 -0
  325. package/v3/assets/skills/mutation-testing/scripts/validate.sh +992 -0
  326. package/v3/assets/skills/mutation-testing/test-data/sample-output.json +295 -0
  327. package/v3/assets/skills/n8n-expression-testing/scripts/validate.sh +162 -0
  328. package/v3/assets/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
  329. package/v3/assets/skills/n8n-security-testing/scripts/validate.sh +120 -0
  330. package/v3/assets/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
  331. package/v3/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
  332. package/v3/assets/skills/performance-testing/SKILL.md +5 -0
  333. package/v3/assets/skills/performance-testing/evals/performance-testing.yaml +772 -0
  334. package/v3/assets/skills/performance-testing/schemas/output.json +1184 -0
  335. package/v3/assets/skills/performance-testing/scripts/validate.sh +1090 -0
  336. package/v3/assets/skills/qe-chaos-resilience/SKILL.md +6 -0
  337. package/v3/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
  338. package/v3/assets/skills/qe-chaos-resilience/schemas/output.json +314 -0
  339. package/v3/assets/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
  340. package/v3/assets/skills/qe-code-intelligence/SKILL.md +6 -0
  341. package/v3/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
  342. package/v3/assets/skills/qe-code-intelligence/schemas/output.json +315 -0
  343. package/v3/assets/skills/qe-code-intelligence/scripts/validate.sh +408 -0
  344. package/v3/assets/skills/qe-contract-testing/SKILL.md +6 -0
  345. package/v3/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
  346. package/v3/assets/skills/qe-contract-testing/schemas/output.json +295 -0
  347. package/v3/assets/skills/qe-contract-testing/scripts/validate.sh +421 -0
  348. package/v3/assets/skills/qe-coverage-analysis/SKILL.md +6 -0
  349. package/v3/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
  350. package/v3/assets/skills/qe-coverage-analysis/schemas/output.json +286 -0
  351. package/v3/assets/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
  352. package/v3/assets/skills/qe-defect-intelligence/SKILL.md +6 -0
  353. package/v3/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
  354. package/v3/assets/skills/qe-defect-intelligence/schemas/output.json +283 -0
  355. package/v3/assets/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
  356. package/v3/assets/skills/qe-iterative-loop/SKILL.md +445 -443
  357. package/v3/assets/skills/qe-iterative-loop/schemas/output.json +264 -0
  358. package/v3/assets/skills/qe-iterative-loop/scripts/validate.sh +474 -0
  359. package/v3/assets/skills/qe-learning-optimization/SKILL.md +6 -0
  360. package/v3/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
  361. package/v3/assets/skills/qe-learning-optimization/schemas/output.json +288 -0
  362. package/v3/assets/skills/qe-learning-optimization/scripts/validate.sh +56 -0
  363. package/v3/assets/skills/qe-quality-assessment/SKILL.md +6 -0
  364. package/v3/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
  365. package/v3/assets/skills/qe-quality-assessment/schemas/output.json +550 -0
  366. package/v3/assets/skills/qe-quality-assessment/scripts/validate.sh +352 -0
  367. package/v3/assets/skills/qe-requirements-validation/SKILL.md +6 -0
  368. package/v3/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
  369. package/v3/assets/skills/qe-requirements-validation/schemas/output.json +587 -0
  370. package/v3/assets/skills/qe-requirements-validation/scripts/validate.sh +275 -0
  371. package/v3/assets/skills/qe-security-compliance/SKILL.md +6 -0
  372. package/v3/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
  373. package/v3/assets/skills/qe-security-compliance/schemas/output.json +498 -0
  374. package/v3/assets/skills/qe-security-compliance/scripts/validate.sh +305 -0
  375. package/v3/assets/skills/qe-test-execution/SKILL.md +6 -0
  376. package/v3/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
  377. package/v3/assets/skills/qe-test-execution/schemas/output.json +529 -0
  378. package/v3/assets/skills/qe-test-execution/scripts/validate.sh +323 -0
  379. package/v3/assets/skills/qe-test-generation/SKILL.md +6 -0
  380. package/v3/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
  381. package/v3/assets/skills/qe-test-generation/schemas/output.json +439 -0
  382. package/v3/assets/skills/qe-test-generation/scripts/validate.sh +56 -0
  383. package/v3/assets/skills/qe-visual-accessibility/SKILL.md +6 -0
  384. package/v3/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
  385. package/v3/assets/skills/qe-visual-accessibility/schemas/output.json +491 -0
  386. package/v3/assets/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
  387. package/v3/assets/skills/quality-metrics/SKILL.md +6 -0
  388. package/v3/assets/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
  389. package/v3/assets/skills/quality-metrics/schemas/output.json +403 -0
  390. package/v3/assets/skills/quality-metrics/scripts/validate.sh +434 -0
  391. package/v3/assets/skills/refactoring-patterns/SKILL.md +5 -0
  392. package/v3/assets/skills/refactoring-patterns/schemas/output.json +475 -0
  393. package/v3/assets/skills/refactoring-patterns/scripts/validate.sh +241 -0
  394. package/v3/assets/skills/regression-testing/SKILL.md +6 -0
  395. package/v3/assets/skills/regression-testing/evals/regression-testing.yaml +504 -0
  396. package/v3/assets/skills/regression-testing/schemas/output.json +311 -0
  397. package/v3/assets/skills/regression-testing/scripts/validate.sh +130 -0
  398. package/v3/assets/skills/risk-based-testing/SKILL.md +6 -0
  399. package/v3/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
  400. package/v3/assets/skills/risk-based-testing/schemas/output.json +480 -0
  401. package/v3/assets/skills/risk-based-testing/scripts/validate.sh +56 -0
  402. package/v3/assets/skills/security-testing/SKILL.md +5 -0
  403. package/v3/assets/skills/security-testing/evals/security-testing.yaml +789 -0
  404. package/v3/assets/skills/security-testing/schemas/output.json +879 -0
  405. package/v3/assets/skills/security-testing/scripts/validate.sh +967 -0
  406. package/v3/assets/skills/shift-left-testing/SKILL.md +6 -0
  407. package/v3/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
  408. package/v3/assets/skills/shift-left-testing/schemas/output.json +459 -0
  409. package/v3/assets/skills/shift-left-testing/scripts/validate.sh +56 -0
  410. package/v3/assets/skills/shift-right-testing/SKILL.md +6 -0
  411. package/v3/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
  412. package/v3/assets/skills/shift-right-testing/schemas/output.json +418 -0
  413. package/v3/assets/skills/shift-right-testing/scripts/validate.sh +56 -0
  414. package/v3/assets/skills/six-thinking-hats/SKILL.md +3 -0
  415. package/v3/assets/skills/tdd-london-chicago/SKILL.md +5 -0
  416. package/v3/assets/skills/tdd-london-chicago/schemas/output.json +444 -0
  417. package/v3/assets/skills/tdd-london-chicago/scripts/validate.sh +214 -0
  418. package/v3/assets/skills/technical-writing/SKILL.md +4 -0
  419. package/v3/assets/skills/technical-writing/schemas/output.json +268 -0
  420. package/v3/assets/skills/test-automation-strategy/SKILL.md +6 -0
  421. package/v3/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
  422. package/v3/assets/skills/test-automation-strategy/schemas/output.json +444 -0
  423. package/v3/assets/skills/test-automation-strategy/scripts/validate.sh +195 -0
  424. package/v3/assets/skills/test-data-management/SKILL.md +6 -0
  425. package/v3/assets/skills/test-data-management/evals/test-data-management.yaml +504 -0
  426. package/v3/assets/skills/test-data-management/schemas/output.json +284 -0
  427. package/v3/assets/skills/test-data-management/scripts/validate.sh +137 -0
  428. package/v3/assets/skills/test-design-techniques/SKILL.md +6 -0
  429. package/v3/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
  430. package/v3/assets/skills/test-design-techniques/schemas/output.json +295 -0
  431. package/v3/assets/skills/test-design-techniques/scripts/validate.sh +91 -0
  432. package/v3/assets/skills/test-environment-management/SKILL.md +4 -0
  433. package/v3/assets/skills/test-environment-management/schemas/output.json +310 -0
  434. package/v3/assets/skills/test-reporting-analytics/SKILL.md +6 -0
  435. package/v3/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
  436. package/v3/assets/skills/test-reporting-analytics/schemas/output.json +329 -0
  437. package/v3/assets/skills/test-reporting-analytics/scripts/validate.sh +77 -0
  438. package/v3/assets/skills/verification-quality/SKILL.md +6 -0
  439. package/v3/assets/skills/verification-quality/evals/verification-quality.yaml +150 -0
  440. package/v3/assets/skills/verification-quality/schemas/output.json +432 -0
  441. package/v3/assets/skills/verification-quality/scripts/validate.sh +77 -0
  442. package/v3/assets/skills/visual-testing-advanced/SKILL.md +6 -0
  443. package/v3/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
  444. package/v3/assets/skills/visual-testing-advanced/schemas/output.json +294 -0
  445. package/v3/assets/skills/visual-testing-advanced/scripts/validate.sh +77 -0
  446. package/v3/assets/skills/xp-practices/SKILL.md +3 -0
  447. package/v3/assets/templates/validation-report.md.hbs +139 -0
  448. package/v3/assets/templates/validation-summary.json +56 -0
  449. package/v3/dist/cli/bundle.js +7368 -3418
  450. package/v3/dist/cli/commands/eval.d.ts +18 -0
  451. package/v3/dist/cli/commands/eval.d.ts.map +1 -0
  452. package/v3/dist/cli/commands/eval.js +505 -0
  453. package/v3/dist/cli/commands/eval.js.map +1 -0
  454. package/v3/dist/cli/commands/validate-swarm.d.ts +16 -0
  455. package/v3/dist/cli/commands/validate-swarm.d.ts.map +1 -0
  456. package/v3/dist/cli/commands/validate-swarm.js +251 -0
  457. package/v3/dist/cli/commands/validate-swarm.js.map +1 -0
  458. package/v3/dist/cli/commands/validate.d.ts +14 -0
  459. package/v3/dist/cli/commands/validate.d.ts.map +1 -0
  460. package/v3/dist/cli/commands/validate.js +408 -0
  461. package/v3/dist/cli/commands/validate.js.map +1 -0
  462. package/v3/dist/cli/index.js +6 -0
  463. package/v3/dist/cli/index.js.map +1 -1
  464. package/v3/dist/index.d.ts +2 -0
  465. package/v3/dist/index.d.ts.map +1 -1
  466. package/v3/dist/index.js +10 -0
  467. package/v3/dist/index.js.map +1 -1
  468. package/v3/dist/init/skills-installer.d.ts +6 -0
  469. package/v3/dist/init/skills-installer.d.ts.map +1 -1
  470. package/v3/dist/init/skills-installer.js +48 -0
  471. package/v3/dist/init/skills-installer.js.map +1 -1
  472. package/v3/dist/learning/index.d.ts +2 -0
  473. package/v3/dist/learning/index.d.ts.map +1 -1
  474. package/v3/dist/learning/index.js +4 -0
  475. package/v3/dist/learning/index.js.map +1 -1
  476. package/v3/dist/learning/skill-validation-learner.d.ts +264 -0
  477. package/v3/dist/learning/skill-validation-learner.d.ts.map +1 -0
  478. package/v3/dist/learning/skill-validation-learner.js +515 -0
  479. package/v3/dist/learning/skill-validation-learner.js.map +1 -0
  480. package/v3/dist/validation/index.d.ts +19 -0
  481. package/v3/dist/validation/index.d.ts.map +1 -0
  482. package/v3/dist/validation/index.js +31 -0
  483. package/v3/dist/validation/index.js.map +1 -0
  484. package/v3/dist/validation/parallel-eval-runner.d.ts +307 -0
  485. package/v3/dist/validation/parallel-eval-runner.d.ts.map +1 -0
  486. package/v3/dist/validation/parallel-eval-runner.js +566 -0
  487. package/v3/dist/validation/parallel-eval-runner.js.map +1 -0
  488. package/v3/dist/validation/swarm-skill-validator.d.ts +282 -0
  489. package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -0
  490. package/v3/dist/validation/swarm-skill-validator.js +460 -0
  491. package/v3/dist/validation/swarm-skill-validator.js.map +1 -0
  492. package/v3/dist/validation/validation-result-aggregator.d.ts +232 -0
  493. package/v3/dist/validation/validation-result-aggregator.d.ts.map +1 -0
  494. package/v3/dist/validation/validation-result-aggregator.js +630 -0
  495. package/v3/dist/validation/validation-result-aggregator.js.map +1 -0
  496. package/v3/package.json +1 -1
@@ -0,0 +1,888 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # AQE Skill Validator: Compliance Testing v1.0.0
4
+ # Validates compliance-testing skill output against schema and content rules
5
+ # =============================================================================
6
+ #
7
+ # This validator checks:
8
+ # 1. JSON syntax validity
9
+ # 2. Schema compliance (compliance-testing specific)
10
+ # 3. Required compliance framework fields
11
+ # 4. Control structure validation
12
+ # 5. Risk assessment field validation
13
+ # 6. Compliance rule engine checks
14
+ #
15
+ # Usage: ./validate.sh <output-file> [options]
16
+ #
17
+ # Options:
18
+ # --self-test Run validator self-test mode
19
+ # --verbose Enable verbose output
20
+ # --json Output results as JSON only
21
+ # --list-tools Show available validation tools
22
+ # --help Show this help message
23
+ #
24
+ # Exit Codes:
25
+ # 0 - Validation passed
26
+ # 1 - Validation failed
27
+ # 2 - Validation skipped (missing required tools)
28
+ #
29
+ # =============================================================================
30
+
31
+ set -euo pipefail
32
+
33
+ # Get script directory (handle both direct execution and sourcing)
34
+ if [[ -n "${BASH_SOURCE[0]:-}" ]] && [[ "${BASH_SOURCE[0]}" != "$0" || -f "${BASH_SOURCE[0]}" ]]; then
35
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
36
+ else
37
+ # Fallback: use $0 or detect from current directory
38
+ if [[ -f "$0" ]]; then
39
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
40
+ else
41
+ SCRIPT_DIR="$(pwd)"
42
+ fi
43
+ fi
44
+
45
+ SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
46
+
47
+ # Find project root by looking for .claude directory
48
+ PROJECT_ROOT="$SKILL_DIR"
49
+ while [[ "$PROJECT_ROOT" != "/" ]]; do
50
+ if [[ -d "$PROJECT_ROOT/.claude" ]] && [[ -d "$PROJECT_ROOT/.claude/skills/.validation" ]]; then
51
+ break
52
+ fi
53
+ PROJECT_ROOT="$(dirname "$PROJECT_ROOT")"
54
+ done
55
+
56
+ # Fallback: go up expected number of levels
57
+ if [[ "$PROJECT_ROOT" == "/" ]]; then
58
+ PROJECT_ROOT="$(cd "$SKILL_DIR/../../.." && pwd)"
59
+ fi
60
+
61
+ # Source shared library - try multiple locations
62
+ VALIDATOR_LIB=""
63
+ for lib_path in \
64
+ "$PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh" \
65
+ "$SKILL_DIR/scripts/validator-lib.sh" \
66
+ "$SCRIPT_DIR/validator-lib.sh"; do
67
+ if [[ -f "$lib_path" ]]; then
68
+ VALIDATOR_LIB="$lib_path"
69
+ break
70
+ fi
71
+ done
72
+
73
+ if [[ -n "$VALIDATOR_LIB" ]]; then
74
+ # shellcheck source=/dev/null
75
+ source "$VALIDATOR_LIB"
76
+ else
77
+ echo "ERROR: Validator library not found"
78
+ echo "Searched:"
79
+ echo " - $PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh"
80
+ echo " - $SKILL_DIR/scripts/validator-lib.sh"
81
+ echo " - $SCRIPT_DIR/validator-lib.sh"
82
+ exit 1
83
+ fi
84
+
85
+ # =============================================================================
86
+ # SKILL-SPECIFIC CONFIGURATION
87
+ # =============================================================================
88
+
89
+ SKILL_NAME="compliance-testing"
90
+ SKILL_VERSION="1.0.0"
91
+
92
+ # Required tools - jq is essential for compliance validation
93
+ REQUIRED_TOOLS=("jq")
94
+
95
+ # Optional tools for enhanced validation
96
+ OPTIONAL_TOOLS=("node" "python3" "ajv" "jsonschema")
97
+
98
+ # Schema path
99
+ SCHEMA_PATH="$SKILL_DIR/schemas/output.json"
100
+
101
+ # Sample output for self-test
102
+ SAMPLE_OUTPUT_PATH="$PROJECT_ROOT/.claude/skills/.validation/test-data/sample-output.json"
103
+
104
+ # =============================================================================
105
+ # CONTENT VALIDATION CONFIGURATION
106
+ # =============================================================================
107
+
108
+ # Required base fields
109
+ REQUIRED_FIELDS=("skillName" "status" "output" "timestamp")
110
+
111
+ # Fields that must have values
112
+ REQUIRED_NON_EMPTY_FIELDS=("output.summary" "output.complianceFrameworks")
113
+
114
+ # Compliance-specific terms that should appear in output
115
+ MUST_CONTAIN_TERMS=() # Set dynamically based on frameworks
116
+
117
+ # Terms that indicate problems
118
+ MUST_NOT_CONTAIN_TERMS=("TODO" "FIXME" "placeholder" "example.com")
119
+
120
+ # Enum validations
121
+ ENUM_VALIDATIONS=(
122
+ ".status:success,partial,failed,skipped"
123
+ )
124
+
125
+ # Minimum array lengths
126
+ MIN_ARRAY_LENGTHS=(
127
+ ".output.complianceFrameworks:1"
128
+ )
129
+
130
+ # =============================================================================
131
+ # COMPLIANCE-SPECIFIC CONSTANTS
132
+ # =============================================================================
133
+
134
+ # Valid compliance frameworks
135
+ VALID_FRAMEWORKS=("GDPR" "HIPAA" "SOC2" "PCI-DSS" "CCPA" "ISO27001" "NIST" "FedRAMP")
136
+
137
+ # Required fields per framework
138
+ declare -A FRAMEWORK_REQUIRED_TERMS
139
+ FRAMEWORK_REQUIRED_TERMS["GDPR"]="data-subject|privacy|consent|erasure|portability"
140
+ FRAMEWORK_REQUIRED_TERMS["HIPAA"]="PHI|protected-health|encryption|access-control|audit"
141
+ FRAMEWORK_REQUIRED_TERMS["SOC2"]="security|availability|confidentiality|processing-integrity|privacy"
142
+ FRAMEWORK_REQUIRED_TERMS["PCI-DSS"]="cardholder|payment|encryption|access|network"
143
+ FRAMEWORK_REQUIRED_TERMS["CCPA"]="consumer|privacy|opt-out|sale|personal-information"
144
+
145
+ # Control ID patterns per framework
146
+ declare -A FRAMEWORK_CONTROL_PATTERNS
147
+ FRAMEWORK_CONTROL_PATTERNS["GDPR"]="^GDPR-Art[0-9]+"
148
+ FRAMEWORK_CONTROL_PATTERNS["HIPAA"]="^HIPAA-[0-9]+"
149
+ FRAMEWORK_CONTROL_PATTERNS["SOC2"]="^SOC2-CC[0-9]+"
150
+ FRAMEWORK_CONTROL_PATTERNS["PCI-DSS"]="^PCI-[0-9]+"
151
+ FRAMEWORK_CONTROL_PATTERNS["CCPA"]="^CCPA-[0-9]+"
152
+
153
+ # =============================================================================
154
+ # Argument Parsing
155
+ # =============================================================================
156
+
157
+ OUTPUT_FILE=""
158
+ SELF_TEST=false
159
+ VERBOSE=false
160
+ JSON_ONLY=false
161
+ LIST_TOOLS=false
162
+
163
+ while [[ $# -gt 0 ]]; do
164
+ case "$1" in
165
+ --self-test)
166
+ SELF_TEST=true
167
+ shift
168
+ ;;
169
+ --verbose|-v)
170
+ VERBOSE=true
171
+ export AQE_DEBUG=1
172
+ shift
173
+ ;;
174
+ --json)
175
+ JSON_ONLY=true
176
+ shift
177
+ ;;
178
+ --list-tools)
179
+ LIST_TOOLS=true
180
+ shift
181
+ ;;
182
+ -h|--help)
183
+ cat << 'HELP_EOF'
184
+ Compliance Testing Skill Validator
185
+
186
+ Usage: ./validate.sh <output-file> [options]
187
+ ./validate.sh --self-test [--verbose]
188
+ ./validate.sh --list-tools
189
+
190
+ Arguments:
191
+ <output-file> Path to compliance-testing skill output JSON file
192
+
193
+ Options:
194
+ --self-test Run validator self-test mode
195
+ --verbose, -v Enable verbose/debug output
196
+ --json Output results as JSON only (for CI integration)
197
+ --list-tools Show available validation tools and exit
198
+ --help, -h Show this help message
199
+
200
+ Exit Codes:
201
+ 0 - Validation passed
202
+ 1 - Validation failed
203
+ 2 - Validation skipped (missing required tools)
204
+
205
+ Compliance Frameworks Validated:
206
+ - GDPR (EU General Data Protection Regulation)
207
+ - HIPAA (Health Insurance Portability and Accountability Act)
208
+ - SOC2 (Service Organization Control 2)
209
+ - PCI-DSS (Payment Card Industry Data Security Standard)
210
+ - CCPA (California Consumer Privacy Act)
211
+
212
+ Examples:
213
+ ./validate.sh compliance-output.json # Validate output
214
+ ./validate.sh compliance-output.json --verbose # Verbose validation
215
+ ./validate.sh --self-test # Run self-test
216
+
217
+ HELP_EOF
218
+ exit 0
219
+ ;;
220
+ -*)
221
+ error "Unknown option: $1"
222
+ echo "Use --help for usage information"
223
+ exit 1
224
+ ;;
225
+ *)
226
+ OUTPUT_FILE="$1"
227
+ shift
228
+ ;;
229
+ esac
230
+ done
231
+
232
+ # Handle --list-tools mode
233
+ if [[ "$LIST_TOOLS" == "true" ]]; then
234
+ echo "=============================================="
235
+ echo "Available Validation Tools for $SKILL_NAME"
236
+ echo "=============================================="
237
+ echo ""
238
+ echo "Required tools:"
239
+ for tool in "${REQUIRED_TOOLS[@]}"; do
240
+ if command_exists "$tool"; then
241
+ echo " [OK] $tool"
242
+ else
243
+ echo " [MISSING] $tool"
244
+ fi
245
+ done
246
+ echo ""
247
+ echo "Optional tools:"
248
+ for tool in "${OPTIONAL_TOOLS[@]}"; do
249
+ if command_exists "$tool"; then
250
+ echo " [OK] $tool"
251
+ else
252
+ echo " [MISSING] $tool"
253
+ fi
254
+ done
255
+ echo ""
256
+ echo "Compliance frameworks supported:"
257
+ for framework in "${VALID_FRAMEWORKS[@]}"; do
258
+ echo " - $framework"
259
+ done
260
+ exit 0
261
+ fi
262
+
263
+ # =============================================================================
264
+ # Self-Test Mode
265
+ # =============================================================================
266
+
267
+ if [[ "$SELF_TEST" == "true" ]]; then
268
+ echo "=============================================="
269
+ info "Running $SKILL_NAME Validator Self-Test"
270
+ echo "=============================================="
271
+ echo ""
272
+ echo "Validator version: $AQE_VALIDATOR_VERSION"
273
+ echo "Skill version: $SKILL_VERSION"
274
+ echo ""
275
+
276
+ self_test_passed=true
277
+ self_test_warnings=0
278
+
279
+ # Check required tools
280
+ echo "--- Step 1: Required Tools ---"
281
+ for tool in "${REQUIRED_TOOLS[@]}"; do
282
+ if command_exists "$tool"; then
283
+ success "Required tool available: $tool"
284
+ else
285
+ error "Required tool MISSING: $tool"
286
+ self_test_passed=false
287
+ fi
288
+ done
289
+ echo ""
290
+
291
+ # Check optional tools
292
+ echo "--- Step 2: Optional Tools ---"
293
+ for tool in "${OPTIONAL_TOOLS[@]}"; do
294
+ if command_exists "$tool"; then
295
+ success "Optional tool available: $tool"
296
+ else
297
+ warn "Optional tool missing: $tool"
298
+ ((self_test_warnings++)) || true
299
+ fi
300
+ done
301
+ echo ""
302
+
303
+ # Check schema file
304
+ echo "--- Step 3: Schema File ---"
305
+ if [[ -f "$SCHEMA_PATH" ]]; then
306
+ success "Schema file exists: $SCHEMA_PATH"
307
+ if validate_json "$SCHEMA_PATH" 2>/dev/null; then
308
+ success "Schema file is valid JSON"
309
+ else
310
+ error "Schema file is NOT valid JSON"
311
+ self_test_passed=false
312
+ fi
313
+ else
314
+ error "Schema file not found: $SCHEMA_PATH"
315
+ self_test_passed=false
316
+ fi
317
+ echo ""
318
+
319
+ # Check compliance framework constants
320
+ echo "--- Step 4: Framework Configuration ---"
321
+ for framework in "${VALID_FRAMEWORKS[@]}"; do
322
+ if [[ -n "${FRAMEWORK_REQUIRED_TERMS[$framework]:-}" ]]; then
323
+ success "Framework configured: $framework"
324
+ else
325
+ warn "Framework missing terms config: $framework"
326
+ ((self_test_warnings++)) || true
327
+ fi
328
+ done
329
+ echo ""
330
+
331
+ # Run library self-test
332
+ echo "--- Step 5: Validator Library ---"
333
+ if run_self_test 2>/dev/null; then
334
+ success "Library self-test passed"
335
+ else
336
+ error "Library self-test FAILED"
337
+ self_test_passed=false
338
+ fi
339
+ echo ""
340
+
341
+ # Summary
342
+ echo "=============================================="
343
+ if [[ "$self_test_passed" == "true" ]]; then
344
+ if [[ $self_test_warnings -gt 0 ]]; then
345
+ warn "Self-test PASSED with $self_test_warnings warning(s)"
346
+ else
347
+ success "Self-test PASSED"
348
+ fi
349
+ exit 0
350
+ else
351
+ error "Self-test FAILED"
352
+ exit 1
353
+ fi
354
+ fi
355
+
356
+ # =============================================================================
357
+ # COMPLIANCE-SPECIFIC VALIDATION FUNCTIONS
358
+ # =============================================================================
359
+
360
+ # Validate compliance frameworks in output
361
+ validate_compliance_frameworks() {
362
+ local output_file="$1"
363
+ local has_errors=false
364
+
365
+ debug "Validating compliance frameworks..."
366
+
367
+ # Get frameworks from output
368
+ local frameworks
369
+ frameworks=$(jq -r '.output.complianceFrameworks[]?.id // empty' "$output_file" 2>/dev/null)
370
+
371
+ if [[ -z "$frameworks" ]]; then
372
+ error "No compliance frameworks found in output"
373
+ return 1
374
+ fi
375
+
376
+ local framework_count=0
377
+ while IFS= read -r framework; do
378
+ ((framework_count++)) || true
379
+
380
+ # Check if framework is valid
381
+ local is_valid=false
382
+ for valid_fw in "${VALID_FRAMEWORKS[@]}"; do
383
+ if [[ "$framework" == "$valid_fw" ]]; then
384
+ is_valid=true
385
+ break
386
+ fi
387
+ done
388
+
389
+ if [[ "$is_valid" == "false" ]]; then
390
+ error "Invalid compliance framework: $framework"
391
+ has_errors=true
392
+ else
393
+ debug "Valid framework: $framework"
394
+ fi
395
+
396
+ # Check framework has required score
397
+ local score
398
+ score=$(jq -r ".output.complianceFrameworks[] | select(.id == \"$framework\") | .score.percentage // -1" "$output_file" 2>/dev/null)
399
+ if [[ "$score" == "-1" ]] || [[ -z "$score" ]]; then
400
+ error "Framework $framework missing compliance score"
401
+ has_errors=true
402
+ fi
403
+ done <<< "$frameworks"
404
+
405
+ if [[ $framework_count -eq 0 ]]; then
406
+ error "No valid compliance frameworks found"
407
+ return 1
408
+ fi
409
+
410
+ if [[ "$has_errors" == "true" ]]; then
411
+ return 1
412
+ fi
413
+
414
+ success "All $framework_count compliance frameworks are valid"
415
+ return 0
416
+ }
417
+
418
+ # Validate compliance controls structure
419
+ validate_compliance_controls() {
420
+ local output_file="$1"
421
+ local has_errors=false
422
+
423
+ debug "Validating compliance controls..."
424
+
425
+ # Check if controls exist
426
+ local control_count
427
+ control_count=$(jq '.output.controls | length // 0' "$output_file" 2>/dev/null)
428
+
429
+ if [[ "$control_count" -eq 0 ]]; then
430
+ warn "No compliance controls in output (may be acceptable for summary-only audit)"
431
+ return 0
432
+ fi
433
+
434
+ # Validate each control has required fields
435
+ local invalid_controls=0
436
+ local controls_without_evidence=0
437
+
438
+ while IFS= read -r control_json; do
439
+ local control_id requirement status
440
+
441
+ control_id=$(echo "$control_json" | jq -r '.id // empty')
442
+ requirement=$(echo "$control_json" | jq -r '.requirement // empty')
443
+ status=$(echo "$control_json" | jq -r '.status // empty')
444
+
445
+ # Check required fields
446
+ if [[ -z "$control_id" ]]; then
447
+ ((invalid_controls++)) || true
448
+ debug "Control missing ID"
449
+ continue
450
+ fi
451
+
452
+ if [[ -z "$requirement" ]]; then
453
+ ((invalid_controls++)) || true
454
+ debug "Control $control_id missing requirement"
455
+ fi
456
+
457
+ if [[ -z "$status" ]]; then
458
+ ((invalid_controls++)) || true
459
+ debug "Control $control_id missing status"
460
+ fi
461
+
462
+ # Validate status enum
463
+ if [[ -n "$status" ]]; then
464
+ case "$status" in
465
+ pass|fail|partial|not-applicable|not-tested)
466
+ debug "Control $control_id status valid: $status"
467
+ ;;
468
+ *)
469
+ error "Control $control_id has invalid status: $status"
470
+ has_errors=true
471
+ ;;
472
+ esac
473
+ fi
474
+
475
+ # Check for evidence on failed controls
476
+ local evidence
477
+ evidence=$(echo "$control_json" | jq -r '.evidence // empty')
478
+ if [[ "$status" == "fail" ]] && [[ -z "$evidence" ]]; then
479
+ ((controls_without_evidence++)) || true
480
+ debug "Failed control $control_id has no evidence"
481
+ fi
482
+ done < <(jq -c '.output.controls[]?' "$output_file" 2>/dev/null)
483
+
484
+ if [[ $invalid_controls -gt 0 ]]; then
485
+ warn "$invalid_controls controls missing required fields"
486
+ fi
487
+
488
+ if [[ $controls_without_evidence -gt 0 ]]; then
489
+ warn "$controls_without_evidence failed controls have no evidence"
490
+ fi
491
+
492
+ if [[ "$has_errors" == "true" ]]; then
493
+ return 1
494
+ fi
495
+
496
+ success "Validated $control_count compliance controls"
497
+ return 0
498
+ }
499
+
500
+ # Validate risk assessment structure
501
+ validate_risk_assessment() {
502
+ local output_file="$1"
503
+
504
+ debug "Validating risk assessment..."
505
+
506
+ # Check if risk assessment exists
507
+ local risk_level
508
+ risk_level=$(jq -r '.output.riskAssessment.overallRiskLevel // empty' "$output_file" 2>/dev/null)
509
+
510
+ if [[ -z "$risk_level" ]]; then
511
+ warn "No risk assessment in output"
512
+ return 0
513
+ fi
514
+
515
+ # Validate risk level enum
516
+ case "$risk_level" in
517
+ critical|high|medium|low|minimal)
518
+ debug "Valid risk level: $risk_level"
519
+ ;;
520
+ *)
521
+ error "Invalid risk level: $risk_level"
522
+ return 1
523
+ ;;
524
+ esac
525
+
526
+ # Check risk score
527
+ local risk_score
528
+ risk_score=$(jq '.output.riskAssessment.riskScore // -1' "$output_file" 2>/dev/null)
529
+
530
+ if [[ "$risk_score" != "-1" ]]; then
531
+ if (( $(echo "$risk_score < 0 || $risk_score > 100" | bc -l 2>/dev/null || echo "1") )); then
532
+ error "Risk score out of range (0-100): $risk_score"
533
+ return 1
534
+ fi
535
+ fi
536
+
537
+ success "Risk assessment validation passed"
538
+ return 0
539
+ }
540
+
541
+ # Validate findings structure
542
+ validate_compliance_findings() {
543
+ local output_file="$1"
544
+ local has_errors=false
545
+
546
+ debug "Validating compliance findings..."
547
+
548
+ local finding_count
549
+ finding_count=$(jq '.output.findings | length // 0' "$output_file" 2>/dev/null)
550
+
551
+ if [[ "$finding_count" -eq 0 ]]; then
552
+ debug "No findings in output (may be compliant)"
553
+ return 0
554
+ fi
555
+
556
+ # Validate finding IDs follow pattern COMP-XXX
557
+ local invalid_ids=0
558
+ while IFS= read -r finding_id; do
559
+ if [[ ! "$finding_id" =~ ^COMP-[0-9]{3,6}$ ]]; then
560
+ debug "Invalid finding ID format: $finding_id (expected COMP-XXX)"
561
+ ((invalid_ids++)) || true
562
+ fi
563
+ done < <(jq -r '.output.findings[]?.id // empty' "$output_file" 2>/dev/null)
564
+
565
+ if [[ $invalid_ids -gt 0 ]]; then
566
+ warn "$invalid_ids findings have non-standard ID format"
567
+ fi
568
+
569
+ # Validate severity distribution makes sense
570
+ local critical_count high_count
571
+ critical_count=$(jq '[.output.findings[]? | select(.severity == "critical")] | length' "$output_file" 2>/dev/null)
572
+ high_count=$(jq '[.output.findings[]? | select(.severity == "high")] | length' "$output_file" 2>/dev/null)
573
+
574
+ debug "Findings: $finding_count total, $critical_count critical, $high_count high"
575
+
576
+ if [[ "$has_errors" == "true" ]]; then
577
+ return 1
578
+ fi
579
+
580
+ success "Validated $finding_count compliance findings"
581
+ return 0
582
+ }
583
+
584
+ # Validate data privacy assessment (GDPR/CCPA specific)
585
+ validate_data_privacy() {
586
+ local output_file="$1"
587
+
588
+ debug "Validating data privacy assessment..."
589
+
590
+ # Check if data privacy section exists
591
+ local privacy_exists
592
+ privacy_exists=$(jq 'has("output") and (.output | has("dataPrivacy"))' "$output_file" 2>/dev/null)
593
+
594
+ if [[ "$privacy_exists" != "true" ]]; then
595
+ debug "No data privacy assessment (may not be GDPR/CCPA audit)"
596
+ return 0
597
+ fi
598
+
599
+ # Check PII detection
600
+ local pii_detected
601
+ pii_detected=$(jq '.output.dataPrivacy.piiDetected // false' "$output_file" 2>/dev/null)
602
+
603
+ if [[ "$pii_detected" == "true" ]]; then
604
+ # If PII detected, should have categories
605
+ local pii_categories
606
+ pii_categories=$(jq '.output.dataPrivacy.piiCategories | length // 0' "$output_file" 2>/dev/null)
607
+
608
+ if [[ "$pii_categories" -eq 0 ]]; then
609
+ warn "PII detected but no categories specified"
610
+ else
611
+ debug "PII categories found: $pii_categories"
612
+ fi
613
+ fi
614
+
615
+ success "Data privacy assessment validation passed"
616
+ return 0
617
+ }
618
+
619
+ # Main skill-specific validation
620
+ validate_skill_specific() {
621
+ local output_file="$1"
622
+ local has_errors=false
623
+
624
+ debug "Running compliance-testing specific validations..."
625
+
626
+ # Validate compliance frameworks
627
+ if ! validate_compliance_frameworks "$output_file"; then
628
+ has_errors=true
629
+ fi
630
+
631
+ # Validate controls structure
632
+ if ! validate_compliance_controls "$output_file"; then
633
+ has_errors=true
634
+ fi
635
+
636
+ # Validate risk assessment
637
+ if ! validate_risk_assessment "$output_file"; then
638
+ has_errors=true
639
+ fi
640
+
641
+ # Validate findings
642
+ if ! validate_compliance_findings "$output_file"; then
643
+ has_errors=true
644
+ fi
645
+
646
+ # Validate data privacy
647
+ if ! validate_data_privacy "$output_file"; then
648
+ has_errors=true
649
+ fi
650
+
651
+ # Check overall compliance score exists
652
+ local overall_score
653
+ overall_score=$(jq '.output.overallComplianceScore.percentage // -1' "$output_file" 2>/dev/null)
654
+
655
+ if [[ "$overall_score" == "-1" ]]; then
656
+ error "Missing overall compliance score"
657
+ has_errors=true
658
+ else
659
+ debug "Overall compliance score: $overall_score%"
660
+ fi
661
+
662
+ if [[ "$has_errors" == "true" ]]; then
663
+ return 1
664
+ fi
665
+
666
+ return 0
667
+ }
668
+
669
+ # =============================================================================
670
+ # Main Validation Flow
671
+ # =============================================================================
672
+
673
+ main() {
674
+ # Validate arguments
675
+ if [[ -z "$OUTPUT_FILE" ]]; then
676
+ error "No output file specified"
677
+ echo "Usage: $0 <output-file> [options]"
678
+ echo "Use --help for more information"
679
+ exit 1
680
+ fi
681
+
682
+ if [[ ! -f "$OUTPUT_FILE" ]]; then
683
+ error "Output file not found: $OUTPUT_FILE"
684
+ exit 1
685
+ fi
686
+
687
+ # Print header
688
+ if [[ "$JSON_ONLY" != "true" ]]; then
689
+ echo "=============================================="
690
+ info "Validating $SKILL_NAME Output"
691
+ echo "=============================================="
692
+ echo ""
693
+ echo " Skill: $SKILL_NAME v$SKILL_VERSION"
694
+ echo " File: $OUTPUT_FILE"
695
+ echo " Schema: $SCHEMA_PATH"
696
+ echo ""
697
+ fi
698
+
699
+ # Track validation status
700
+ local tool_status="passed"
701
+ local json_status="passed"
702
+ local schema_status="passed"
703
+ local fields_status="passed"
704
+ local content_status="passed"
705
+ local specific_status="passed"
706
+ local error_count=0
707
+ local warning_count=0
708
+
709
+ # Step 1: Check tools
710
+ if [[ "$JSON_ONLY" != "true" ]]; then
711
+ echo "--- Step 1: Tool Availability ---"
712
+ fi
713
+
714
+ local missing_tools=()
715
+ for tool in "${REQUIRED_TOOLS[@]}"; do
716
+ if ! command_exists "$tool"; then
717
+ missing_tools+=("$tool")
718
+ fi
719
+ done
720
+
721
+ if [[ ${#missing_tools[@]} -gt 0 ]]; then
722
+ tool_status="failed"
723
+ error "Missing required tools: ${missing_tools[*]}"
724
+ exit $EXIT_SKIP
725
+ fi
726
+
727
+ [[ "$JSON_ONLY" != "true" ]] && success "All required tools available" && echo ""
728
+
729
+ # Step 2: Validate JSON syntax
730
+ if [[ "$JSON_ONLY" != "true" ]]; then
731
+ echo "--- Step 2: JSON Syntax ---"
732
+ fi
733
+
734
+ if ! validate_json "$OUTPUT_FILE"; then
735
+ json_status="failed"
736
+ ((error_count++)) || true
737
+ [[ "$JSON_ONLY" != "true" ]] && error "Invalid JSON syntax"
738
+ exit $EXIT_FAIL
739
+ fi
740
+
741
+ [[ "$JSON_ONLY" != "true" ]] && success "JSON syntax valid" && echo ""
742
+
743
+ # Step 3: Schema validation
744
+ if [[ "$JSON_ONLY" != "true" ]]; then
745
+ echo "--- Step 3: Schema Validation ---"
746
+ fi
747
+
748
+ if [[ -f "$SCHEMA_PATH" ]]; then
749
+ local schema_result
750
+ schema_result=$(validate_json_schema "$SCHEMA_PATH" "$OUTPUT_FILE" 2>&1) || true
751
+ local schema_exit=$?
752
+
753
+ case $schema_exit in
754
+ 0)
755
+ [[ "$JSON_ONLY" != "true" ]] && success "Schema validation passed"
756
+ ;;
757
+ 1)
758
+ schema_status="failed"
759
+ ((error_count++)) || true
760
+ [[ "$JSON_ONLY" != "true" ]] && error "Schema validation failed"
761
+ ;;
762
+ 2)
763
+ schema_status="skipped"
764
+ ((warning_count++)) || true
765
+ [[ "$JSON_ONLY" != "true" ]] && warn "Schema validation skipped (no validator)"
766
+ ;;
767
+ esac
768
+ else
769
+ schema_status="skipped"
770
+ ((warning_count++)) || true
771
+ [[ "$JSON_ONLY" != "true" ]] && warn "Schema file not found, skipping validation"
772
+ fi
773
+
774
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
775
+
776
+ # Step 4: Required fields
777
+ if [[ "$JSON_ONLY" != "true" ]]; then
778
+ echo "--- Step 4: Required Fields ---"
779
+ fi
780
+
781
+ local missing_fields=()
782
+ for field in "${REQUIRED_FIELDS[@]}"; do
783
+ local value
784
+ value=$(jq -r ".$field // empty" "$OUTPUT_FILE" 2>/dev/null)
785
+ if [[ -z "$value" ]]; then
786
+ missing_fields+=("$field")
787
+ fi
788
+ done
789
+
790
+ if [[ ${#missing_fields[@]} -gt 0 ]]; then
791
+ fields_status="failed"
792
+ ((error_count++)) || true
793
+ [[ "$JSON_ONLY" != "true" ]] && error "Missing required fields: ${missing_fields[*]}"
794
+ else
795
+ [[ "$JSON_ONLY" != "true" ]] && success "All required fields present"
796
+ fi
797
+
798
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
799
+
800
+ # Step 5: Enum validation
801
+ if [[ "$JSON_ONLY" != "true" ]]; then
802
+ echo "--- Step 5: Enum Validation ---"
803
+ fi
804
+
805
+ local status_value
806
+ status_value=$(jq -r '.status // empty' "$OUTPUT_FILE" 2>/dev/null)
807
+
808
+ case "$status_value" in
809
+ success|partial|failed|skipped)
810
+ [[ "$JSON_ONLY" != "true" ]] && success "Status enum valid: $status_value"
811
+ ;;
812
+ *)
813
+ content_status="failed"
814
+ ((error_count++)) || true
815
+ [[ "$JSON_ONLY" != "true" ]] && error "Invalid status value: $status_value"
816
+ ;;
817
+ esac
818
+
819
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
820
+
821
+ # Step 6: Compliance-specific validation
822
+ if [[ "$JSON_ONLY" != "true" ]]; then
823
+ echo "--- Step 6: Compliance-Specific Validation ---"
824
+ fi
825
+
826
+ if ! validate_skill_specific "$OUTPUT_FILE"; then
827
+ specific_status="failed"
828
+ ((error_count++)) || true
829
+ else
830
+ [[ "$JSON_ONLY" != "true" ]] && success "Compliance-specific validation passed"
831
+ fi
832
+
833
+ [[ "$JSON_ONLY" != "true" ]] && echo ""
834
+
835
+ # Determine overall status
836
+ local overall_status="passed"
837
+ if [[ "$json_status" == "failed" ]] || \
838
+ [[ "$schema_status" == "failed" ]] || \
839
+ [[ "$fields_status" == "failed" ]] || \
840
+ [[ "$content_status" == "failed" ]] || \
841
+ [[ "$specific_status" == "failed" ]]; then
842
+ overall_status="failed"
843
+ elif [[ "$schema_status" == "skipped" ]]; then
844
+ overall_status="partial"
845
+ fi
846
+
847
+ # Output results
848
+ if [[ "$JSON_ONLY" == "true" ]]; then
849
+ output_validation_report "$SKILL_NAME" "$schema_status" "$content_status" "$tool_status"
850
+ else
851
+ echo "=============================================="
852
+ echo "Validation Summary for $SKILL_NAME"
853
+ echo "=============================================="
854
+ echo ""
855
+ echo " Tools: $tool_status"
856
+ echo " JSON Syntax: $json_status"
857
+ echo " Schema: $schema_status"
858
+ echo " Required Fields: $fields_status"
859
+ echo " Content: $content_status"
860
+ echo " Compliance-Specific: $specific_status"
861
+ echo ""
862
+ echo " ------------------------------"
863
+ echo " Overall: $overall_status"
864
+ echo " Errors: $error_count"
865
+ echo " Warnings: $warning_count"
866
+ echo "=============================================="
867
+ echo ""
868
+ fi
869
+
870
+ # Exit with appropriate code
871
+ case "$overall_status" in
872
+ "passed")
873
+ [[ "$JSON_ONLY" != "true" ]] && success "Validation PASSED"
874
+ exit $EXIT_PASS
875
+ ;;
876
+ "partial")
877
+ [[ "$JSON_ONLY" != "true" ]] && warn "Validation PARTIAL (some checks skipped)"
878
+ exit $EXIT_PASS
879
+ ;;
880
+ "failed")
881
+ [[ "$JSON_ONLY" != "true" ]] && error "Validation FAILED"
882
+ exit $EXIT_FAIL
883
+ ;;
884
+ esac
885
+ }
886
+
887
+ # Run main
888
+ main