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.
- package/.claude/skills/.validation/README.md +111 -0
- package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
- package/.claude/skills/.validation/examples/performance-testing-output.example.json +252 -0
- package/.claude/skills/.validation/examples/security-testing-output.example.json +413 -0
- package/.claude/skills/.validation/examples/testability-scoring-output.example.json +350 -0
- package/.claude/skills/.validation/schemas/skill-eval.schema.json +452 -0
- package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
- package/.claude/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
- package/.claude/skills/.validation/schemas/skill-output.template.json +610 -0
- package/.claude/skills/.validation/skill-validation-mcp-integration.md +250 -0
- package/.claude/skills/.validation/templates/eval.template.yaml +366 -0
- package/.claude/skills/.validation/templates/schemas/output.json +145 -0
- package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
- package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
- package/.claude/skills/.validation/templates/validate.template.sh +1060 -0
- package/.claude/skills/.validation/templates/validator-lib.sh +1031 -0
- package/.claude/skills/.validation/test-data/invalid-output.json +5 -0
- package/.claude/skills/.validation/test-data/minimal-output.json +9 -0
- package/.claude/skills/.validation/test-data/sample-output.json +73 -0
- package/.claude/skills/TRUST-TIERS.md +158 -0
- package/.claude/skills/a11y-ally/SKILL.md +1664 -1658
- package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +376 -0
- package/.claude/skills/a11y-ally/schemas/output.json +549 -0
- package/.claude/skills/a11y-ally/scripts/validate.sh +690 -0
- package/.claude/skills/accessibility-testing/SKILL.md +8 -1
- package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
- package/.claude/skills/accessibility-testing/schemas/output.json +776 -0
- package/.claude/skills/accessibility-testing/scripts/validate.sh +943 -0
- package/.claude/skills/accessibility-testing/test-data/sample-output.json +191 -0
- package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -0
- package/.claude/skills/agentic-quality-engineering/schemas/output.json +577 -0
- package/.claude/skills/api-testing-patterns/SKILL.md +5 -0
- package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
- package/.claude/skills/api-testing-patterns/schemas/output.json +845 -0
- package/.claude/skills/api-testing-patterns/scripts/validate.sh +931 -0
- package/.claude/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
- package/.claude/skills/aqe-v2-v3-migration/skill.md +4 -0
- package/.claude/skills/brutal-honesty-review/SKILL.md +5 -0
- package/.claude/skills/brutal-honesty-review/schemas/output.json +291 -0
- package/.claude/skills/brutal-honesty-review/scripts/validate.sh +130 -0
- package/.claude/skills/bug-reporting-excellence/SKILL.md +5 -0
- package/.claude/skills/bug-reporting-excellence/schemas/output.json +288 -0
- package/.claude/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +5 -0
- package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
- package/.claude/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
- package/.claude/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate.sh +310 -0
- package/.claude/skills/code-review-quality/SKILL.md +5 -0
- package/.claude/skills/code-review-quality/schemas/output.json +264 -0
- package/.claude/skills/code-review-quality/scripts/validate.sh +113 -0
- package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
- package/.claude/skills/compatibility-testing/schemas/output.json +551 -0
- package/.claude/skills/compatibility-testing/scripts/validate.sh +605 -0
- package/.claude/skills/compliance-testing/SKILL.md +7 -0
- package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
- package/.claude/skills/compliance-testing/schemas/output.json +845 -0
- package/.claude/skills/compliance-testing/scripts/validate.sh +888 -0
- package/.claude/skills/consultancy-practices/SKILL.md +4 -0
- package/.claude/skills/consultancy-practices/schemas/output.json +282 -0
- package/.claude/skills/context-driven-testing/SKILL.md +3 -0
- package/.claude/skills/contract-testing/SKILL.md +5 -0
- package/.claude/skills/contract-testing/evals/contract-testing.yaml +748 -0
- package/.claude/skills/contract-testing/schemas/output.json +638 -0
- package/.claude/skills/contract-testing/scripts/validate.sh +1033 -0
- package/.claude/skills/database-testing/SKILL.md +5 -0
- package/.claude/skills/database-testing/evals/database-testing.yaml +968 -0
- package/.claude/skills/database-testing/schemas/output.json +1446 -0
- package/.claude/skills/database-testing/scripts/validate.sh +1099 -0
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +3 -0
- package/.claude/skills/holistic-testing-pact/SKILL.md +3 -0
- package/.claude/skills/localization-testing/SKILL.md +6 -0
- package/.claude/skills/localization-testing/evals/localization-testing.yaml +544 -0
- package/.claude/skills/localization-testing/schemas/output.json +325 -0
- package/.claude/skills/localization-testing/scripts/validate.sh +131 -0
- package/.claude/skills/mobile-testing/SKILL.md +6 -0
- package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
- package/.claude/skills/mobile-testing/schemas/output.json +318 -0
- package/.claude/skills/mobile-testing/scripts/validate.sh +127 -0
- package/.claude/skills/mutation-testing/SKILL.md +8 -1
- package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
- package/.claude/skills/mutation-testing/schemas/output.json +707 -0
- package/.claude/skills/mutation-testing/scripts/validate.sh +992 -0
- package/.claude/skills/mutation-testing/test-data/sample-output.json +295 -0
- package/.claude/skills/n8n-expression-testing/SKILL.md +6 -0
- package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -0
- package/.claude/skills/n8n-expression-testing/schemas/output.json +369 -0
- package/.claude/skills/n8n-expression-testing/scripts/validate.sh +162 -0
- package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +6 -0
- package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -0
- package/.claude/skills/n8n-integration-testing-patterns/schemas/output.json +291 -0
- package/.claude/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
- package/.claude/skills/n8n-security-testing/SKILL.md +6 -0
- package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -0
- package/.claude/skills/n8n-security-testing/schemas/output.json +293 -0
- package/.claude/skills/n8n-security-testing/scripts/validate.sh +120 -0
- package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +6 -0
- package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -0
- package/.claude/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -0
- package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +6 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
- package/.claude/skills/performance-analysis/SKILL.md +6 -0
- package/.claude/skills/performance-analysis/evals/performance-analysis.yaml +144 -0
- package/.claude/skills/performance-analysis/schemas/output.json +588 -0
- package/.claude/skills/performance-analysis/scripts/validate.sh +63 -0
- package/.claude/skills/performance-testing/SKILL.md +5 -0
- package/.claude/skills/performance-testing/evals/performance-testing.yaml +772 -0
- package/.claude/skills/performance-testing/schemas/output.json +1184 -0
- package/.claude/skills/performance-testing/scripts/validate.sh +1090 -0
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +1759 -1753
- package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
- package/.claude/skills/qcsd-ideation-swarm/schemas/output.json +568 -0
- package/.claude/skills/qcsd-ideation-swarm/scripts/validate.sh +56 -0
- package/.claude/skills/qe-chaos-resilience/SKILL.md +6 -0
- package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
- package/.claude/skills/qe-chaos-resilience/schemas/output.json +314 -0
- package/.claude/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
- package/.claude/skills/qe-code-intelligence/SKILL.md +6 -0
- package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
- package/.claude/skills/qe-code-intelligence/schemas/output.json +315 -0
- package/.claude/skills/qe-code-intelligence/scripts/validate.sh +408 -0
- package/.claude/skills/qe-contract-testing/SKILL.md +6 -0
- package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
- package/.claude/skills/qe-contract-testing/schemas/output.json +295 -0
- package/.claude/skills/qe-contract-testing/scripts/validate.sh +421 -0
- package/.claude/skills/qe-coverage-analysis/SKILL.md +6 -0
- package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
- package/.claude/skills/qe-coverage-analysis/schemas/output.json +286 -0
- package/.claude/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
- package/.claude/skills/qe-defect-intelligence/SKILL.md +6 -0
- package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
- package/.claude/skills/qe-defect-intelligence/schemas/output.json +283 -0
- package/.claude/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
- package/.claude/skills/qe-iterative-loop/SKILL.md +445 -440
- package/.claude/skills/qe-iterative-loop/schemas/output.json +264 -0
- package/.claude/skills/qe-iterative-loop/scripts/validate.sh +474 -0
- package/.claude/skills/qe-learning-optimization/SKILL.md +6 -0
- package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
- package/.claude/skills/qe-learning-optimization/schemas/output.json +288 -0
- package/.claude/skills/qe-learning-optimization/scripts/validate.sh +56 -0
- package/.claude/skills/qe-quality-assessment/SKILL.md +6 -0
- package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
- package/.claude/skills/qe-quality-assessment/schemas/output.json +550 -0
- package/.claude/skills/qe-quality-assessment/scripts/validate.sh +352 -0
- package/.claude/skills/qe-requirements-validation/SKILL.md +6 -0
- package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
- package/.claude/skills/qe-requirements-validation/schemas/output.json +587 -0
- package/.claude/skills/qe-requirements-validation/scripts/validate.sh +275 -0
- package/.claude/skills/qe-security-compliance/SKILL.md +6 -0
- package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
- package/.claude/skills/qe-security-compliance/schemas/output.json +498 -0
- package/.claude/skills/qe-security-compliance/scripts/validate.sh +305 -0
- package/.claude/skills/qe-test-execution/SKILL.md +6 -0
- package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
- package/.claude/skills/qe-test-execution/schemas/output.json +529 -0
- package/.claude/skills/qe-test-execution/scripts/validate.sh +323 -0
- package/.claude/skills/qe-test-generation/SKILL.md +6 -0
- package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
- package/.claude/skills/qe-test-generation/schemas/output.json +439 -0
- package/.claude/skills/qe-test-generation/scripts/validate.sh +56 -0
- package/.claude/skills/qe-visual-accessibility/SKILL.md +6 -0
- package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
- package/.claude/skills/qe-visual-accessibility/schemas/output.json +491 -0
- package/.claude/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
- package/.claude/skills/quality-metrics/SKILL.md +6 -0
- package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
- package/.claude/skills/quality-metrics/schemas/output.json +403 -0
- package/.claude/skills/quality-metrics/scripts/validate.sh +434 -0
- package/.claude/skills/refactoring-patterns/SKILL.md +5 -0
- package/.claude/skills/refactoring-patterns/schemas/output.json +475 -0
- package/.claude/skills/refactoring-patterns/scripts/validate.sh +241 -0
- package/.claude/skills/regression-testing/SKILL.md +6 -0
- package/.claude/skills/regression-testing/evals/regression-testing.yaml +504 -0
- package/.claude/skills/regression-testing/schemas/output.json +311 -0
- package/.claude/skills/regression-testing/scripts/validate.sh +130 -0
- package/.claude/skills/risk-based-testing/SKILL.md +6 -0
- package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
- package/.claude/skills/risk-based-testing/schemas/output.json +480 -0
- package/.claude/skills/risk-based-testing/scripts/validate.sh +56 -0
- package/.claude/skills/security-testing/SKILL.md +5 -0
- package/.claude/skills/security-testing/evals/security-testing.yaml +789 -0
- package/.claude/skills/security-testing/schemas/output.json +879 -0
- package/.claude/skills/security-testing/scripts/validate.sh +967 -0
- package/.claude/skills/security-visual-testing/SKILL.md +223 -217
- package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -0
- package/.claude/skills/security-visual-testing/schemas/output.json +486 -0
- package/.claude/skills/security-visual-testing/scripts/validate.sh +748 -0
- package/.claude/skills/sherlock-review/SKILL.md +5 -0
- package/.claude/skills/sherlock-review/schemas/output.json +297 -0
- package/.claude/skills/sherlock-review/scripts/validate.sh +115 -0
- package/.claude/skills/shift-left-testing/SKILL.md +6 -0
- package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
- package/.claude/skills/shift-left-testing/schemas/output.json +459 -0
- package/.claude/skills/shift-left-testing/scripts/validate.sh +56 -0
- package/.claude/skills/shift-right-testing/SKILL.md +6 -0
- package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
- package/.claude/skills/shift-right-testing/schemas/output.json +418 -0
- package/.claude/skills/shift-right-testing/scripts/validate.sh +56 -0
- package/.claude/skills/six-thinking-hats/SKILL.md +3 -0
- package/.claude/skills/tdd-london-chicago/SKILL.md +5 -0
- package/.claude/skills/tdd-london-chicago/schemas/output.json +444 -0
- package/.claude/skills/tdd-london-chicago/scripts/validate.sh +214 -0
- package/.claude/skills/technical-writing/SKILL.md +4 -0
- package/.claude/skills/technical-writing/schemas/output.json +268 -0
- package/.claude/skills/test-automation-strategy/SKILL.md +6 -0
- package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
- package/.claude/skills/test-automation-strategy/schemas/output.json +444 -0
- package/.claude/skills/test-automation-strategy/scripts/validate.sh +195 -0
- package/.claude/skills/test-data-management/SKILL.md +6 -0
- package/.claude/skills/test-data-management/evals/test-data-management.yaml +504 -0
- package/.claude/skills/test-data-management/schemas/output.json +284 -0
- package/.claude/skills/test-data-management/scripts/validate.sh +137 -0
- package/.claude/skills/test-design-techniques/SKILL.md +6 -0
- package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
- package/.claude/skills/test-design-techniques/schemas/output.json +295 -0
- package/.claude/skills/test-design-techniques/scripts/validate.sh +91 -0
- package/.claude/skills/test-environment-management/SKILL.md +4 -0
- package/.claude/skills/test-environment-management/schemas/output.json +310 -0
- package/.claude/skills/test-reporting-analytics/SKILL.md +6 -0
- package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
- package/.claude/skills/test-reporting-analytics/schemas/output.json +329 -0
- package/.claude/skills/test-reporting-analytics/scripts/validate.sh +77 -0
- package/.claude/skills/testability-scoring/SKILL.md +5 -0
- package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +814 -0
- package/.claude/skills/testability-scoring/schemas/output.json +606 -0
- package/.claude/skills/testability-scoring/scripts/validate.sh +891 -0
- package/.claude/skills/trust-tier-manifest.json +2333 -0
- package/.claude/skills/verification-quality/SKILL.md +6 -0
- package/.claude/skills/verification-quality/evals/verification-quality.yaml +150 -0
- package/.claude/skills/verification-quality/schemas/output.json +432 -0
- package/.claude/skills/verification-quality/scripts/validate.sh +77 -0
- package/.claude/skills/visual-testing-advanced/SKILL.md +6 -0
- package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
- package/.claude/skills/visual-testing-advanced/schemas/output.json +294 -0
- package/.claude/skills/visual-testing-advanced/scripts/validate.sh +77 -0
- package/.claude/skills/xp-practices/SKILL.md +3 -0
- package/CHANGELOG.md +23 -0
- package/README.md +39 -2
- package/package.json +4 -1
- package/scripts/run-skill-eval.ts +1097 -0
- package/scripts/test-schema-validation.js +301 -0
- package/scripts/update-skill-manifest.ts +751 -0
- package/scripts/validate-skill-frontmatter.js +141 -0
- package/v3/CHANGELOG.md +21 -0
- package/v3/README.md +43 -3
- package/v3/assets/agents/v3/qe-test-idea-rewriter.md +375 -375
- package/v3/assets/skills/.validation/README.md +111 -0
- package/v3/assets/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
- package/v3/assets/skills/.validation/examples/performance-testing-output.example.json +252 -0
- package/v3/assets/skills/.validation/examples/security-testing-output.example.json +413 -0
- package/v3/assets/skills/.validation/examples/testability-scoring-output.example.json +350 -0
- package/v3/assets/skills/.validation/schemas/skill-eval.schema.json +452 -0
- package/v3/assets/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
- package/v3/assets/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
- package/v3/assets/skills/.validation/schemas/skill-output.template.json +610 -0
- package/v3/assets/skills/.validation/skill-validation-mcp-integration.md +250 -0
- package/v3/assets/skills/.validation/templates/eval.template.yaml +366 -0
- package/v3/assets/skills/.validation/templates/schemas/output.json +145 -0
- package/v3/assets/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
- package/v3/assets/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
- package/v3/assets/skills/.validation/templates/validate.template.sh +1060 -0
- package/v3/assets/skills/.validation/templates/validator-lib.sh +1031 -0
- package/v3/assets/skills/.validation/test-data/invalid-output.json +5 -0
- package/v3/assets/skills/.validation/test-data/minimal-output.json +9 -0
- package/v3/assets/skills/.validation/test-data/sample-output.json +73 -0
- package/v3/assets/skills/accessibility-testing/SKILL.md +8 -1
- package/v3/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
- package/v3/assets/skills/accessibility-testing/schemas/output.json +776 -0
- package/v3/assets/skills/accessibility-testing/scripts/validate.sh +943 -0
- package/v3/assets/skills/accessibility-testing/test-data/sample-output.json +191 -0
- package/v3/assets/skills/agentic-quality-engineering/SKILL.md +4 -0
- package/v3/assets/skills/agentic-quality-engineering/schemas/output.json +577 -0
- package/v3/assets/skills/api-testing-patterns/SKILL.md +5 -0
- package/v3/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
- package/v3/assets/skills/api-testing-patterns/schemas/output.json +845 -0
- package/v3/assets/skills/api-testing-patterns/scripts/validate.sh +931 -0
- package/v3/assets/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
- package/v3/assets/skills/aqe-v2-v3-migration/skill.md +20 -16
- package/v3/assets/skills/bug-reporting-excellence/SKILL.md +5 -0
- package/v3/assets/skills/bug-reporting-excellence/schemas/output.json +288 -0
- package/v3/assets/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
- package/v3/assets/skills/chaos-engineering-resilience/SKILL.md +5 -0
- package/v3/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
- package/v3/assets/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
- package/v3/assets/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
- package/v3/assets/skills/code-review-quality/SKILL.md +5 -0
- package/v3/assets/skills/code-review-quality/schemas/output.json +264 -0
- package/v3/assets/skills/code-review-quality/scripts/validate.sh +113 -0
- package/v3/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
- package/v3/assets/skills/compatibility-testing/schemas/output.json +551 -0
- package/v3/assets/skills/compatibility-testing/scripts/validate.sh +605 -0
- package/v3/assets/skills/compliance-testing/SKILL.md +7 -0
- package/v3/assets/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
- package/v3/assets/skills/compliance-testing/schemas/output.json +845 -0
- package/v3/assets/skills/compliance-testing/scripts/validate.sh +888 -0
- package/v3/assets/skills/consultancy-practices/SKILL.md +4 -0
- package/v3/assets/skills/consultancy-practices/schemas/output.json +282 -0
- package/v3/assets/skills/context-driven-testing/SKILL.md +3 -0
- package/v3/assets/skills/contract-testing/SKILL.md +5 -0
- package/v3/assets/skills/contract-testing/evals/contract-testing.yaml +748 -0
- package/v3/assets/skills/contract-testing/schemas/output.json +638 -0
- package/v3/assets/skills/contract-testing/scripts/validate.sh +1033 -0
- package/v3/assets/skills/database-testing/SKILL.md +5 -0
- package/v3/assets/skills/database-testing/evals/database-testing.yaml +968 -0
- package/v3/assets/skills/database-testing/schemas/output.json +1446 -0
- package/v3/assets/skills/database-testing/scripts/validate.sh +1099 -0
- package/v3/assets/skills/exploratory-testing-advanced/SKILL.md +3 -0
- package/v3/assets/skills/holistic-testing-pact/SKILL.md +3 -0
- package/v3/assets/skills/localization-testing/SKILL.md +6 -0
- package/v3/assets/skills/localization-testing/evals/localization-testing.yaml +544 -0
- package/v3/assets/skills/localization-testing/schemas/output.json +325 -0
- package/v3/assets/skills/localization-testing/scripts/validate.sh +131 -0
- package/v3/assets/skills/mobile-testing/SKILL.md +6 -0
- package/v3/assets/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
- package/v3/assets/skills/mobile-testing/schemas/output.json +318 -0
- package/v3/assets/skills/mobile-testing/scripts/validate.sh +127 -0
- package/v3/assets/skills/mutation-testing/SKILL.md +8 -1
- package/v3/assets/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
- package/v3/assets/skills/mutation-testing/schemas/output.json +707 -0
- package/v3/assets/skills/mutation-testing/scripts/validate.sh +992 -0
- package/v3/assets/skills/mutation-testing/test-data/sample-output.json +295 -0
- package/v3/assets/skills/n8n-expression-testing/scripts/validate.sh +162 -0
- package/v3/assets/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
- package/v3/assets/skills/n8n-security-testing/scripts/validate.sh +120 -0
- package/v3/assets/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
- package/v3/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
- package/v3/assets/skills/performance-testing/SKILL.md +5 -0
- package/v3/assets/skills/performance-testing/evals/performance-testing.yaml +772 -0
- package/v3/assets/skills/performance-testing/schemas/output.json +1184 -0
- package/v3/assets/skills/performance-testing/scripts/validate.sh +1090 -0
- package/v3/assets/skills/qe-chaos-resilience/SKILL.md +6 -0
- package/v3/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
- package/v3/assets/skills/qe-chaos-resilience/schemas/output.json +314 -0
- package/v3/assets/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
- package/v3/assets/skills/qe-code-intelligence/SKILL.md +6 -0
- package/v3/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
- package/v3/assets/skills/qe-code-intelligence/schemas/output.json +315 -0
- package/v3/assets/skills/qe-code-intelligence/scripts/validate.sh +408 -0
- package/v3/assets/skills/qe-contract-testing/SKILL.md +6 -0
- package/v3/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
- package/v3/assets/skills/qe-contract-testing/schemas/output.json +295 -0
- package/v3/assets/skills/qe-contract-testing/scripts/validate.sh +421 -0
- package/v3/assets/skills/qe-coverage-analysis/SKILL.md +6 -0
- package/v3/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
- package/v3/assets/skills/qe-coverage-analysis/schemas/output.json +286 -0
- package/v3/assets/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
- package/v3/assets/skills/qe-defect-intelligence/SKILL.md +6 -0
- package/v3/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
- package/v3/assets/skills/qe-defect-intelligence/schemas/output.json +283 -0
- package/v3/assets/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
- package/v3/assets/skills/qe-iterative-loop/SKILL.md +445 -443
- package/v3/assets/skills/qe-iterative-loop/schemas/output.json +264 -0
- package/v3/assets/skills/qe-iterative-loop/scripts/validate.sh +474 -0
- package/v3/assets/skills/qe-learning-optimization/SKILL.md +6 -0
- package/v3/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
- package/v3/assets/skills/qe-learning-optimization/schemas/output.json +288 -0
- package/v3/assets/skills/qe-learning-optimization/scripts/validate.sh +56 -0
- package/v3/assets/skills/qe-quality-assessment/SKILL.md +6 -0
- package/v3/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
- package/v3/assets/skills/qe-quality-assessment/schemas/output.json +550 -0
- package/v3/assets/skills/qe-quality-assessment/scripts/validate.sh +352 -0
- package/v3/assets/skills/qe-requirements-validation/SKILL.md +6 -0
- package/v3/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
- package/v3/assets/skills/qe-requirements-validation/schemas/output.json +587 -0
- package/v3/assets/skills/qe-requirements-validation/scripts/validate.sh +275 -0
- package/v3/assets/skills/qe-security-compliance/SKILL.md +6 -0
- package/v3/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
- package/v3/assets/skills/qe-security-compliance/schemas/output.json +498 -0
- package/v3/assets/skills/qe-security-compliance/scripts/validate.sh +305 -0
- package/v3/assets/skills/qe-test-execution/SKILL.md +6 -0
- package/v3/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
- package/v3/assets/skills/qe-test-execution/schemas/output.json +529 -0
- package/v3/assets/skills/qe-test-execution/scripts/validate.sh +323 -0
- package/v3/assets/skills/qe-test-generation/SKILL.md +6 -0
- package/v3/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
- package/v3/assets/skills/qe-test-generation/schemas/output.json +439 -0
- package/v3/assets/skills/qe-test-generation/scripts/validate.sh +56 -0
- package/v3/assets/skills/qe-visual-accessibility/SKILL.md +6 -0
- package/v3/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
- package/v3/assets/skills/qe-visual-accessibility/schemas/output.json +491 -0
- package/v3/assets/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
- package/v3/assets/skills/quality-metrics/SKILL.md +6 -0
- package/v3/assets/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
- package/v3/assets/skills/quality-metrics/schemas/output.json +403 -0
- package/v3/assets/skills/quality-metrics/scripts/validate.sh +434 -0
- package/v3/assets/skills/refactoring-patterns/SKILL.md +5 -0
- package/v3/assets/skills/refactoring-patterns/schemas/output.json +475 -0
- package/v3/assets/skills/refactoring-patterns/scripts/validate.sh +241 -0
- package/v3/assets/skills/regression-testing/SKILL.md +6 -0
- package/v3/assets/skills/regression-testing/evals/regression-testing.yaml +504 -0
- package/v3/assets/skills/regression-testing/schemas/output.json +311 -0
- package/v3/assets/skills/regression-testing/scripts/validate.sh +130 -0
- package/v3/assets/skills/risk-based-testing/SKILL.md +6 -0
- package/v3/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
- package/v3/assets/skills/risk-based-testing/schemas/output.json +480 -0
- package/v3/assets/skills/risk-based-testing/scripts/validate.sh +56 -0
- package/v3/assets/skills/security-testing/SKILL.md +5 -0
- package/v3/assets/skills/security-testing/evals/security-testing.yaml +789 -0
- package/v3/assets/skills/security-testing/schemas/output.json +879 -0
- package/v3/assets/skills/security-testing/scripts/validate.sh +967 -0
- package/v3/assets/skills/shift-left-testing/SKILL.md +6 -0
- package/v3/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
- package/v3/assets/skills/shift-left-testing/schemas/output.json +459 -0
- package/v3/assets/skills/shift-left-testing/scripts/validate.sh +56 -0
- package/v3/assets/skills/shift-right-testing/SKILL.md +6 -0
- package/v3/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
- package/v3/assets/skills/shift-right-testing/schemas/output.json +418 -0
- package/v3/assets/skills/shift-right-testing/scripts/validate.sh +56 -0
- package/v3/assets/skills/six-thinking-hats/SKILL.md +3 -0
- package/v3/assets/skills/tdd-london-chicago/SKILL.md +5 -0
- package/v3/assets/skills/tdd-london-chicago/schemas/output.json +444 -0
- package/v3/assets/skills/tdd-london-chicago/scripts/validate.sh +214 -0
- package/v3/assets/skills/technical-writing/SKILL.md +4 -0
- package/v3/assets/skills/technical-writing/schemas/output.json +268 -0
- package/v3/assets/skills/test-automation-strategy/SKILL.md +6 -0
- package/v3/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
- package/v3/assets/skills/test-automation-strategy/schemas/output.json +444 -0
- package/v3/assets/skills/test-automation-strategy/scripts/validate.sh +195 -0
- package/v3/assets/skills/test-data-management/SKILL.md +6 -0
- package/v3/assets/skills/test-data-management/evals/test-data-management.yaml +504 -0
- package/v3/assets/skills/test-data-management/schemas/output.json +284 -0
- package/v3/assets/skills/test-data-management/scripts/validate.sh +137 -0
- package/v3/assets/skills/test-design-techniques/SKILL.md +6 -0
- package/v3/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
- package/v3/assets/skills/test-design-techniques/schemas/output.json +295 -0
- package/v3/assets/skills/test-design-techniques/scripts/validate.sh +91 -0
- package/v3/assets/skills/test-environment-management/SKILL.md +4 -0
- package/v3/assets/skills/test-environment-management/schemas/output.json +310 -0
- package/v3/assets/skills/test-reporting-analytics/SKILL.md +6 -0
- package/v3/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
- package/v3/assets/skills/test-reporting-analytics/schemas/output.json +329 -0
- package/v3/assets/skills/test-reporting-analytics/scripts/validate.sh +77 -0
- package/v3/assets/skills/verification-quality/SKILL.md +6 -0
- package/v3/assets/skills/verification-quality/evals/verification-quality.yaml +150 -0
- package/v3/assets/skills/verification-quality/schemas/output.json +432 -0
- package/v3/assets/skills/verification-quality/scripts/validate.sh +77 -0
- package/v3/assets/skills/visual-testing-advanced/SKILL.md +6 -0
- package/v3/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
- package/v3/assets/skills/visual-testing-advanced/schemas/output.json +294 -0
- package/v3/assets/skills/visual-testing-advanced/scripts/validate.sh +77 -0
- package/v3/assets/skills/xp-practices/SKILL.md +3 -0
- package/v3/assets/templates/validation-report.md.hbs +139 -0
- package/v3/assets/templates/validation-summary.json +56 -0
- package/v3/dist/cli/bundle.js +11853 -5316
- package/v3/dist/cli/commands/eval.d.ts +18 -0
- package/v3/dist/cli/commands/eval.d.ts.map +1 -0
- package/v3/dist/cli/commands/eval.js +505 -0
- package/v3/dist/cli/commands/eval.js.map +1 -0
- package/v3/dist/cli/commands/validate-swarm.d.ts +16 -0
- package/v3/dist/cli/commands/validate-swarm.d.ts.map +1 -0
- package/v3/dist/cli/commands/validate-swarm.js +251 -0
- package/v3/dist/cli/commands/validate-swarm.js.map +1 -0
- package/v3/dist/cli/commands/validate.d.ts +14 -0
- package/v3/dist/cli/commands/validate.d.ts.map +1 -0
- package/v3/dist/cli/commands/validate.js +408 -0
- package/v3/dist/cli/commands/validate.js.map +1 -0
- package/v3/dist/cli/index.js +6 -0
- package/v3/dist/cli/index.js.map +1 -1
- package/v3/dist/index.d.ts +2 -0
- package/v3/dist/index.d.ts.map +1 -1
- package/v3/dist/index.js +10 -0
- package/v3/dist/index.js.map +1 -1
- package/v3/dist/init/skills-installer.d.ts +6 -0
- package/v3/dist/init/skills-installer.d.ts.map +1 -1
- package/v3/dist/init/skills-installer.js +48 -0
- package/v3/dist/init/skills-installer.js.map +1 -1
- package/v3/dist/learning/index.d.ts +2 -0
- package/v3/dist/learning/index.d.ts.map +1 -1
- package/v3/dist/learning/index.js +4 -0
- package/v3/dist/learning/index.js.map +1 -1
- package/v3/dist/learning/skill-validation-learner.d.ts +264 -0
- package/v3/dist/learning/skill-validation-learner.d.ts.map +1 -0
- package/v3/dist/learning/skill-validation-learner.js +515 -0
- package/v3/dist/learning/skill-validation-learner.js.map +1 -0
- package/v3/dist/mcp/bundle.js +10043 -3630
- package/v3/dist/validation/index.d.ts +19 -0
- package/v3/dist/validation/index.d.ts.map +1 -0
- package/v3/dist/validation/index.js +31 -0
- package/v3/dist/validation/index.js.map +1 -0
- package/v3/dist/validation/parallel-eval-runner.d.ts +307 -0
- package/v3/dist/validation/parallel-eval-runner.d.ts.map +1 -0
- package/v3/dist/validation/parallel-eval-runner.js +566 -0
- package/v3/dist/validation/parallel-eval-runner.js.map +1 -0
- package/v3/dist/validation/swarm-skill-validator.d.ts +282 -0
- package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -0
- package/v3/dist/validation/swarm-skill-validator.js +460 -0
- package/v3/dist/validation/swarm-skill-validator.js.map +1 -0
- package/v3/dist/validation/validation-result-aggregator.d.ts +232 -0
- package/v3/dist/validation/validation-result-aggregator.d.ts.map +1 -0
- package/v3/dist/validation/validation-result-aggregator.js +630 -0
- package/v3/dist/validation/validation-result-aggregator.js.map +1 -0
- 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
|